@mnaoumov/obsidian-lib 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -1
- package/dist/lib/cjs/__merged.cjs +40 -64
- package/dist/lib/cjs/active-file-provider.cjs +40 -64
- package/dist/lib/cjs/app.cjs +40 -64
- package/dist/lib/cjs/async-with-notice.cjs +40 -64
- package/dist/lib/cjs/attachment-path.cjs +40 -64
- package/dist/lib/cjs/attachment-unit-folder.cjs +40 -64
- package/dist/lib/cjs/backlink-index.cjs +41 -65
- package/dist/lib/cjs/backlink.cjs +40 -64
- package/dist/lib/cjs/bases-view-registrar.cjs +40 -64
- package/dist/lib/cjs/callout.cjs +40 -64
- package/dist/lib/cjs/canvas.cjs +40 -64
- package/dist/lib/cjs/case-insensitive-file-index.cjs +40 -64
- package/dist/lib/cjs/code-block-markdown-information.cjs +40 -64
- package/dist/lib/cjs/code-block-reg-exp.cjs +40 -64
- package/dist/lib/cjs/codemirror/index.cjs +40 -64
- package/dist/lib/cjs/codemirror/state-field-spec.cjs +40 -64
- package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/command-handler-component.cjs +40 -64
- package/dist/lib/cjs/command-handlers/command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/file-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/global-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/index.cjs +40 -64
- package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +40 -64
- package/dist/lib/cjs/command-registrar.cjs +40 -64
- package/dist/lib/cjs/community-plugins.cjs +40 -64
- package/dist/lib/cjs/components/abort-signal-component.cjs +40 -64
- package/dist/lib/cjs/components/all-windows-event-component.cjs +40 -64
- package/dist/lib/cjs/components/async-error-handler-component.cjs +40 -64
- package/dist/lib/cjs/components/async-events-component.cjs +40 -64
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +40 -64
- package/dist/lib/cjs/components/component-ex.cjs +41 -65
- package/dist/lib/cjs/components/console-debug-component.cjs +40 -64
- package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +40 -64
- package/dist/lib/cjs/components/disposable-component.cjs +40 -64
- package/dist/lib/cjs/components/embed-extensions-component.cjs +40 -64
- package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +40 -64
- package/dist/lib/cjs/components/index.cjs +40 -64
- package/dist/lib/cjs/components/layout-ready-component.cjs +40 -64
- package/dist/lib/cjs/components/menu-event-registrar-component.cjs +40 -64
- package/dist/lib/cjs/components/monkey-around-component.cjs +40 -64
- package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +40 -64
- package/dist/lib/cjs/components/plugin-context-component.cjs +40 -64
- package/dist/lib/cjs/components/plugin-gate-component.cjs +41 -65
- package/dist/lib/cjs/components/plugin-notice-component.cjs +40 -64
- package/dist/lib/cjs/components/plugin-settings-component.cjs +41 -65
- package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +40 -64
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +40 -64
- package/dist/lib/cjs/components/pointer-position-component.cjs +40 -64
- package/dist/lib/cjs/components/registry-component.cjs +40 -64
- package/dist/lib/cjs/components/release-notes-component.cjs +40 -64
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +40 -64
- package/dist/lib/cjs/components/rmdir-guard-component.cjs +40 -64
- package/dist/lib/cjs/components/settings-migration-component.cjs +40 -64
- package/dist/lib/cjs/components/syntax-highlighting-component.cjs +40 -64
- package/dist/lib/cjs/components/templates-language-component.cjs +40 -64
- package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +40 -64
- package/dist/lib/cjs/constructors/index.cjs +40 -64
- package/dist/lib/cjs/css-class.cjs +40 -64
- package/dist/lib/cjs/data-handler.cjs +40 -64
- package/dist/lib/cjs/dataview-link.cjs +40 -64
- package/dist/lib/cjs/dataview.cjs +40 -64
- package/dist/lib/cjs/debug.cjs +40 -64
- package/dist/lib/cjs/demo-vault-helper-settings.cjs +40 -64
- package/dist/lib/cjs/demo-vault-helper.cjs +40 -64
- package/dist/lib/cjs/demo-vault-naming.cjs +40 -64
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +40 -64
- package/dist/lib/cjs/desktop-trusted-input.cjs +40 -64
- package/dist/lib/cjs/editor-extension-registrar.cjs +40 -64
- package/dist/lib/cjs/editor-suggest-registrar.cjs +40 -64
- package/dist/lib/cjs/editor.cjs +40 -64
- package/dist/lib/cjs/events.cjs +40 -64
- package/dist/lib/cjs/extensions-registrar.cjs +40 -64
- package/dist/lib/cjs/file-change.cjs +40 -64
- package/dist/lib/cjs/file-explorer.cjs +40 -64
- package/dist/lib/cjs/file-manager.cjs +40 -64
- package/dist/lib/cjs/file-system.cjs +40 -64
- package/dist/lib/cjs/folder-note.cjs +40 -64
- package/dist/lib/cjs/frontmatter-formatting.cjs +41 -65
- package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +40 -64
- package/dist/lib/cjs/frontmatter.cjs +40 -64
- package/dist/lib/cjs/generated-during-build.cjs +41 -65
- package/dist/lib/cjs/generated-during-build.d.cts +8 -2
- package/dist/lib/cjs/hover-link-source-registrar.cjs +40 -64
- package/dist/lib/cjs/html-element.cjs +40 -64
- package/dist/lib/cjs/i18n/custom-type-options.cjs +40 -64
- package/dist/lib/cjs/i18n/default-translations.cjs +40 -64
- package/dist/lib/cjs/i18n/i18n.cjs +40 -64
- package/dist/lib/cjs/i18n/index.cjs +40 -64
- package/dist/lib/cjs/i18n/locales/en.cjs +40 -64
- package/dist/lib/cjs/i18n/locales/index.cjs +40 -64
- package/dist/lib/cjs/i18n/locales/translations-map.cjs +40 -64
- package/dist/lib/cjs/index.cjs +40 -64
- package/dist/lib/cjs/is-in-obsidian.cjs +40 -64
- package/dist/lib/cjs/library-styles.cjs +40 -64
- package/dist/lib/cjs/library.cjs +40 -64
- package/dist/lib/cjs/link-name.cjs +40 -64
- package/dist/lib/cjs/link-update-progress.cjs +40 -64
- package/dist/lib/cjs/link.cjs +40 -64
- package/dist/lib/cjs/logger.cjs +40 -64
- package/dist/lib/cjs/loop.cjs +40 -64
- package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +40 -64
- package/dist/lib/cjs/markdown-code-block-processor.cjs +40 -64
- package/dist/lib/cjs/markdown-post-processor-registrar.cjs +40 -64
- package/dist/lib/cjs/markdown-view.cjs +40 -64
- package/dist/lib/cjs/markdown.cjs +40 -64
- package/dist/lib/cjs/menu-event-registrar.cjs +40 -64
- package/dist/lib/cjs/metadata-cache.cjs +40 -64
- package/dist/lib/cjs/mobile-trusted-input.cjs +40 -64
- package/dist/lib/cjs/modals/alert.cjs +40 -64
- package/dist/lib/cjs/modals/confirm.cjs +40 -64
- package/dist/lib/cjs/modals/index.cjs +40 -64
- package/dist/lib/cjs/modals/minimizable-modal.cjs +40 -64
- package/dist/lib/cjs/modals/modal-command-builder.cjs +40 -64
- package/dist/lib/cjs/modals/modal.cjs +40 -64
- package/dist/lib/cjs/modals/prompt.cjs +40 -64
- package/dist/lib/cjs/modals/select-item.cjs +40 -64
- package/dist/lib/cjs/modals/select-option.cjs +40 -64
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +40 -64
- package/dist/lib/cjs/note-priority.cjs +41 -65
- package/dist/lib/cjs/notebook-navigator.cjs +40 -64
- package/dist/lib/cjs/obsidian-dev-utils-state.cjs +40 -64
- package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +40 -64
- package/dist/lib/cjs/obsidian-settings.cjs +40 -64
- package/dist/lib/cjs/parse-link.cjs +40 -64
- package/dist/lib/cjs/path-settings.cjs +40 -64
- package/dist/lib/cjs/pdf.cjs +40 -64
- package/dist/lib/cjs/plugin/index.cjs +40 -64
- package/dist/lib/cjs/plugin/plugin-api.cjs +40 -64
- package/dist/lib/cjs/plugin/plugin-context.cjs +40 -64
- package/dist/lib/cjs/plugin/plugin-event-source.cjs +40 -64
- package/dist/lib/cjs/plugin/plugin-install-state.cjs +40 -64
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +40 -64
- package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +41 -65
- package/dist/lib/cjs/plugin/plugin.cjs +41 -65
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +40 -64
- package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +40 -64
- package/dist/lib/cjs/popovers/field-popover.cjs +40 -64
- package/dist/lib/cjs/popovers/index.cjs +40 -64
- package/dist/lib/cjs/popovers/popover-anchor.cjs +40 -64
- package/dist/lib/cjs/popovers/popover.cjs +40 -64
- package/dist/lib/cjs/property-entry.cjs +40 -64
- package/dist/lib/cjs/queue.cjs +40 -64
- package/dist/lib/cjs/react/app-context.cjs +40 -64
- package/dist/lib/cjs/react/index.cjs +40 -64
- package/dist/lib/cjs/reference.cjs +40 -64
- package/dist/lib/cjs/resource-lock.cjs +40 -64
- package/dist/lib/cjs/resource-url.cjs +40 -64
- package/dist/lib/cjs/ribbon-icon-registrar.cjs +40 -64
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/date-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/date-time-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/email-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/file-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/index.cjs +40 -64
- package/dist/lib/cjs/setting-components/month-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +41 -65
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/number-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/password-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +40 -64
- package/dist/lib/cjs/setting-components/telephone-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/text-based-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/time-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/typed-text-component.cjs +41 -65
- package/dist/lib/cjs/setting-components/url-component.cjs +40 -64
- package/dist/lib/cjs/setting-components/validator-component.cjs +41 -65
- package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +40 -64
- package/dist/lib/cjs/setting-components/week-component.cjs +40 -64
- package/dist/lib/cjs/setting-ex.cjs +40 -64
- package/dist/lib/cjs/setting-group-ex.cjs +40 -64
- package/dist/lib/cjs/status-bar-item-registrar.cjs +40 -64
- package/dist/lib/cjs/templater.cjs +40 -64
- package/dist/lib/cjs/transformers/duration-transformer.cjs +40 -64
- package/dist/lib/cjs/transformers/index.cjs +40 -64
- package/dist/lib/cjs/trusted-input.cjs +40 -64
- package/dist/lib/cjs/validation.cjs +40 -64
- package/dist/lib/cjs/vault-delete.cjs +40 -64
- package/dist/lib/cjs/vault-transaction.cjs +40 -64
- package/dist/lib/cjs/vault.cjs +41 -65
- package/dist/lib/cjs/view-registrar.cjs +40 -64
- package/dist/lib/cjs/workspace.cjs +40 -64
- package/dist/lib/esm/__merged.mjs +6 -14
- package/dist/lib/esm/active-file-provider.mjs +6 -14
- package/dist/lib/esm/app.mjs +6 -14
- package/dist/lib/esm/async-with-notice.mjs +6 -14
- package/dist/lib/esm/attachment-path.mjs +6 -14
- package/dist/lib/esm/attachment-unit-folder.mjs +6 -14
- package/dist/lib/esm/backlink-index.mjs +6 -14
- package/dist/lib/esm/backlink.mjs +6 -14
- package/dist/lib/esm/bases-view-registrar.mjs +6 -14
- package/dist/lib/esm/callout.mjs +6 -14
- package/dist/lib/esm/canvas.mjs +6 -14
- package/dist/lib/esm/case-insensitive-file-index.mjs +6 -14
- package/dist/lib/esm/code-block-markdown-information.mjs +5 -13
- package/dist/lib/esm/code-block-reg-exp.mjs +6 -14
- package/dist/lib/esm/codemirror/index.mjs +6 -14
- package/dist/lib/esm/codemirror/state-field-spec.mjs +5 -13
- package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/command-handler-component.mjs +6 -14
- package/dist/lib/esm/command-handlers/command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/editor-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/file-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/folder-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/global-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/index.mjs +6 -14
- package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +6 -14
- package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +6 -14
- package/dist/lib/esm/command-registrar.mjs +6 -14
- package/dist/lib/esm/community-plugins.mjs +6 -14
- package/dist/lib/esm/components/abort-signal-component.mjs +6 -14
- package/dist/lib/esm/components/all-windows-event-component.mjs +6 -14
- package/dist/lib/esm/components/async-error-handler-component.mjs +6 -14
- package/dist/lib/esm/components/async-events-component.mjs +6 -14
- package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +6 -14
- package/dist/lib/esm/components/component-ex.mjs +6 -14
- package/dist/lib/esm/components/console-debug-component.mjs +6 -14
- package/dist/lib/esm/components/core-plugin-toggle-component.mjs +6 -14
- package/dist/lib/esm/components/disposable-component.mjs +6 -14
- package/dist/lib/esm/components/embed-extensions-component.mjs +6 -14
- package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +6 -14
- package/dist/lib/esm/components/index.mjs +6 -14
- package/dist/lib/esm/components/layout-ready-component.mjs +6 -14
- package/dist/lib/esm/components/menu-event-registrar-component.mjs +6 -14
- package/dist/lib/esm/components/monkey-around-component.mjs +6 -14
- package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +6 -14
- package/dist/lib/esm/components/plugin-context-component.mjs +6 -14
- package/dist/lib/esm/components/plugin-gate-component.mjs +6 -14
- package/dist/lib/esm/components/plugin-notice-component.mjs +6 -14
- package/dist/lib/esm/components/plugin-settings-component.mjs +6 -14
- package/dist/lib/esm/components/plugin-settings-tab-component.mjs +6 -14
- package/dist/lib/esm/components/plugin-suggestion-component.mjs +6 -14
- package/dist/lib/esm/components/pointer-position-component.mjs +6 -14
- package/dist/lib/esm/components/registry-component.mjs +6 -14
- package/dist/lib/esm/components/release-notes-component.mjs +6 -14
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +6 -14
- package/dist/lib/esm/components/rmdir-guard-component.mjs +6 -14
- package/dist/lib/esm/components/settings-migration-component.mjs +6 -14
- package/dist/lib/esm/components/syntax-highlighting-component.mjs +6 -14
- package/dist/lib/esm/components/templates-language-component.mjs +6 -14
- package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +6 -14
- package/dist/lib/esm/constructors/index.mjs +6 -14
- package/dist/lib/esm/css-class.mjs +6 -14
- package/dist/lib/esm/data-handler.mjs +6 -14
- package/dist/lib/esm/dataview-link.mjs +6 -14
- package/dist/lib/esm/dataview.mjs +6 -14
- package/dist/lib/esm/debug.mjs +6 -14
- package/dist/lib/esm/demo-vault-helper-settings.mjs +5 -13
- package/dist/lib/esm/demo-vault-helper.mjs +6 -14
- package/dist/lib/esm/demo-vault-naming.mjs +6 -14
- package/dist/lib/esm/desktop-demo-vault-opener.mjs +6 -14
- package/dist/lib/esm/desktop-trusted-input.mjs +6 -14
- package/dist/lib/esm/editor-extension-registrar.mjs +6 -14
- package/dist/lib/esm/editor-suggest-registrar.mjs +6 -14
- package/dist/lib/esm/editor.mjs +6 -14
- package/dist/lib/esm/events.mjs +6 -14
- package/dist/lib/esm/extensions-registrar.mjs +6 -14
- package/dist/lib/esm/file-change.mjs +6 -14
- package/dist/lib/esm/file-explorer.mjs +6 -14
- package/dist/lib/esm/file-manager.mjs +6 -14
- package/dist/lib/esm/file-system.mjs +6 -14
- package/dist/lib/esm/folder-note.mjs +6 -14
- package/dist/lib/esm/frontmatter-formatting.mjs +6 -14
- package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +6 -14
- package/dist/lib/esm/frontmatter.mjs +6 -14
- package/dist/lib/esm/generated-during-build.d.mts +8 -2
- package/dist/lib/esm/generated-during-build.mjs +7 -15
- package/dist/lib/esm/hover-link-source-registrar.mjs +6 -14
- package/dist/lib/esm/html-element.mjs +6 -14
- package/dist/lib/esm/i18n/custom-type-options.mjs +6 -14
- package/dist/lib/esm/i18n/default-translations.mjs +6 -14
- package/dist/lib/esm/i18n/i18n.mjs +6 -14
- package/dist/lib/esm/i18n/index.mjs +6 -14
- package/dist/lib/esm/i18n/locales/en.mjs +6 -14
- package/dist/lib/esm/i18n/locales/index.mjs +6 -14
- package/dist/lib/esm/i18n/locales/translations-map.mjs +6 -14
- package/dist/lib/esm/index.mjs +6 -14
- package/dist/lib/esm/is-in-obsidian.mjs +6 -14
- package/dist/lib/esm/library-styles.mjs +6 -14
- package/dist/lib/esm/library.mjs +6 -14
- package/dist/lib/esm/link-name.mjs +6 -14
- package/dist/lib/esm/link-update-progress.mjs +5 -13
- package/dist/lib/esm/link.mjs +6 -14
- package/dist/lib/esm/logger.mjs +6 -14
- package/dist/lib/esm/loop.mjs +6 -14
- package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +6 -14
- package/dist/lib/esm/markdown-code-block-processor.mjs +6 -14
- package/dist/lib/esm/markdown-post-processor-registrar.mjs +6 -14
- package/dist/lib/esm/markdown-view.mjs +6 -14
- package/dist/lib/esm/markdown.mjs +6 -14
- package/dist/lib/esm/menu-event-registrar.mjs +5 -13
- package/dist/lib/esm/metadata-cache.mjs +6 -14
- package/dist/lib/esm/mobile-trusted-input.mjs +6 -14
- package/dist/lib/esm/modals/alert.mjs +6 -14
- package/dist/lib/esm/modals/confirm.mjs +6 -14
- package/dist/lib/esm/modals/index.mjs +6 -14
- package/dist/lib/esm/modals/minimizable-modal.mjs +6 -14
- package/dist/lib/esm/modals/modal-command-builder.mjs +6 -14
- package/dist/lib/esm/modals/modal.mjs +6 -14
- package/dist/lib/esm/modals/prompt.mjs +6 -14
- package/dist/lib/esm/modals/select-item.mjs +6 -14
- package/dist/lib/esm/modals/select-option.mjs +6 -14
- package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +6 -14
- package/dist/lib/esm/note-priority.mjs +6 -14
- package/dist/lib/esm/notebook-navigator.mjs +6 -14
- package/dist/lib/esm/obsidian-dev-utils-state.mjs +6 -14
- package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +6 -14
- package/dist/lib/esm/obsidian-settings.mjs +6 -14
- package/dist/lib/esm/parse-link.mjs +6 -14
- package/dist/lib/esm/path-settings.mjs +6 -14
- package/dist/lib/esm/pdf.mjs +6 -14
- package/dist/lib/esm/plugin/index.mjs +6 -14
- package/dist/lib/esm/plugin/plugin-api.mjs +6 -14
- package/dist/lib/esm/plugin/plugin-context.mjs +6 -14
- package/dist/lib/esm/plugin/plugin-event-source.mjs +6 -14
- package/dist/lib/esm/plugin/plugin-install-state.mjs +6 -14
- package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +6 -14
- package/dist/lib/esm/plugin/plugin-settings-tab.mjs +6 -14
- package/dist/lib/esm/plugin/plugin.mjs +6 -14
- package/dist/lib/esm/plugin/settings-migration-api.mjs +5 -13
- package/dist/lib/esm/plugin-cli-handler-registrar.mjs +6 -14
- package/dist/lib/esm/popovers/field-popover.mjs +6 -14
- package/dist/lib/esm/popovers/index.mjs +6 -14
- package/dist/lib/esm/popovers/popover-anchor.mjs +6 -14
- package/dist/lib/esm/popovers/popover.mjs +6 -14
- package/dist/lib/esm/property-entry.mjs +6 -14
- package/dist/lib/esm/queue.mjs +6 -14
- package/dist/lib/esm/react/app-context.mjs +6 -14
- package/dist/lib/esm/react/index.mjs +6 -14
- package/dist/lib/esm/reference.mjs +6 -14
- package/dist/lib/esm/resource-lock.mjs +6 -14
- package/dist/lib/esm/resource-url.mjs +6 -14
- package/dist/lib/esm/ribbon-icon-registrar.mjs +6 -14
- package/dist/lib/esm/setting-components/checkbox-component.mjs +6 -14
- package/dist/lib/esm/setting-components/code-highlighter-component.mjs +6 -14
- package/dist/lib/esm/setting-components/date-component.mjs +6 -14
- package/dist/lib/esm/setting-components/date-time-component.mjs +6 -14
- package/dist/lib/esm/setting-components/email-component.mjs +6 -14
- package/dist/lib/esm/setting-components/file-component.mjs +6 -14
- package/dist/lib/esm/setting-components/index.mjs +6 -14
- package/dist/lib/esm/setting-components/month-component.mjs +6 -14
- package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +6 -14
- package/dist/lib/esm/setting-components/multiple-email-component.mjs +6 -14
- package/dist/lib/esm/setting-components/multiple-file-component.mjs +6 -14
- package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -14
- package/dist/lib/esm/setting-components/number-component.mjs +6 -14
- package/dist/lib/esm/setting-components/password-component.mjs +6 -14
- package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +6 -14
- package/dist/lib/esm/setting-components/telephone-component.mjs +6 -14
- package/dist/lib/esm/setting-components/text-based-component.mjs +6 -14
- package/dist/lib/esm/setting-components/time-component.mjs +6 -14
- package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +6 -14
- package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +6 -14
- package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +6 -14
- package/dist/lib/esm/setting-components/typed-range-text-component.mjs +6 -14
- package/dist/lib/esm/setting-components/typed-text-component.mjs +6 -14
- package/dist/lib/esm/setting-components/url-component.mjs +6 -14
- package/dist/lib/esm/setting-components/validator-component.mjs +6 -14
- package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +5 -13
- package/dist/lib/esm/setting-components/week-component.mjs +6 -14
- package/dist/lib/esm/setting-ex.mjs +6 -14
- package/dist/lib/esm/setting-group-ex.mjs +6 -14
- package/dist/lib/esm/status-bar-item-registrar.mjs +6 -14
- package/dist/lib/esm/templater.mjs +6 -14
- package/dist/lib/esm/transformers/duration-transformer.mjs +6 -14
- package/dist/lib/esm/transformers/index.mjs +6 -14
- package/dist/lib/esm/trusted-input.mjs +6 -14
- package/dist/lib/esm/validation.mjs +6 -14
- package/dist/lib/esm/vault-delete.mjs +6 -14
- package/dist/lib/esm/vault-transaction.mjs +6 -14
- package/dist/lib/esm/vault.mjs +6 -14
- package/dist/lib/esm/view-registrar.mjs +6 -14
- package/dist/lib/esm/workspace.mjs +6 -14
- package/package.json +69 -24
|
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
5
5
|
|
|
6
6
|
(function () {
|
|
7
7
|
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for(
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for(
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
function ensureBrowserProcess() {
|
|
13
13
|
const browserProcess = {
|
|
14
14
|
browser: true,
|
|
15
15
|
cwd() {
|
|
16
|
-
return
|
|
16
|
+
return "/";
|
|
17
17
|
},
|
|
18
18
|
env: {},
|
|
19
|
-
platform:
|
|
19
|
+
platform: "android"
|
|
20
20
|
};
|
|
21
|
-
|
|
22
|
-
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
23
21
|
const existingProcess = globalThis.process;
|
|
24
|
-
|
|
25
22
|
if (!existingProcess) {
|
|
26
|
-
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
27
23
|
globalThis.process = browserProcess;
|
|
28
24
|
return;
|
|
29
25
|
}
|
|
30
|
-
|
|
31
26
|
if (existingProcess.versions?.node) {
|
|
32
27
|
return;
|
|
33
28
|
}
|
|
34
|
-
|
|
35
29
|
const existingProcessRecord = existingProcess;
|
|
36
|
-
|
|
37
30
|
for (const [key, value] of Object.entries(browserProcess)) {
|
|
38
31
|
existingProcessRecord[key] ??= value;
|
|
39
32
|
}
|
|
40
|
-
|
|
41
|
-
existingProcessRecord['browser'] = true;
|
|
33
|
+
existingProcessRecord["browser"] = true;
|
|
42
34
|
}
|
|
43
35
|
|
|
44
36
|
(function initEsm() {
|
|
@@ -330,4 +322,4 @@ class VaultTransaction {
|
|
|
330
322
|
export {
|
|
331
323
|
VaultTransaction
|
|
332
324
|
};
|
|
333
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZhdWx0LXRyYW5zYWN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZXZlcnNpYmxlLCB0cmFuc2FjdGlvbmFsIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIEVhY2ggbXV0YXRpb24gcmVjb3JkcyBob3cgdG8gdW5kbyBpdHNlbGY7XG4gKiB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja30gcmV2ZXJzZXMgdGhlIGNvbXBsZXRlZCBzdGVwcyBpbiByZXZlcnNlIG9yZGVyIGFuZFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBmaW5hbGl6ZXMgdGhlbS4gSXQgaXMgYnVpbHQgb24gdGhlIGAqU2FmZWAgdmF1bHQgd3JhcHBlcnMgc28gaXRcbiAqIGluaGVyaXRzIHRoZWlyIGNhc2UtaW5zZW5zaXRpdmUgLyByZXRyeSAvIG1pc3NpbmctZmlsZSBoYW5kbGluZy5cbiAqXG4gKiBBIGRlbGV0aW9uIGlzIHBlcmZvcm1lZCBhcyBhICoqc29mdC1kZWxldGUqKjogdGhlIHJlc291cmNlIGlzIG1vdmVkIGFzaWRlIGludG8gYSBkb3QtcHJlZml4ZWRcbiAqIHN0YWdpbmcgZm9sZGVyIChhIGZvbGRlciBtb3ZlcyBpdHMgd2hvbGUgc3VidHJlZSBpbiBhIHNpbmdsZSByZW5hbWUsIHNvIHN1YnRyZWUgcm9sbGJhY2sgaXMgY2hlYXBcbiAqIGFuZCBmYWl0aGZ1bCkuIEJlY2F1c2UgT2JzaWRpYW4ncyB2YXVsdCBmaWxlLXRyZWUgYW5kIGZpbGUgd2F0Y2hlciBpZ25vcmUgYW55IGAuYC1wcmVmaXhlZCBwYXRoLFxuICogc3RhZ2VkIHJlc291cmNlcyBhcmUgKip1bnRyYWNrZWQqKiBcdTIwMTQgdGhleSBkbyBub3QgY2h1cm4gdGhlIG1ldGFkYXRhIGNhY2hlLCBmbGFzaCBpbiB0aGUgZmlsZVxuICogZXhwbG9yZXIsIG9yIGdldCBwcm9wYWdhdGVkIGJ5IHN5bmMgd2hpbGUgdGhlIHRyYW5zYWN0aW9uIGlzIGluIGZsaWdodC4gVGhlIGZsaXAgc2lkZSBpcyB0aGF0XG4gKiBgdmF1bHQuKmAgbWV0aG9kcyBjYW5ub3Qgc2VlIHRoZSBzdGFnaW5nIGFyZWEsIHNvIEFMTCBzdGFnaW5nIEkvTyBnb2VzIHRocm91Z2hcbiAqIHtAbGluayBBcHAudmF1bHQuYWRhcHRlcn0gKGBta2RpcmAvYHJlbmFtZWAvYGV4aXN0c2AvYHRyYXNoU3lzdGVtYC9gcm1kaXJgKS5cbiAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0gdGhlbiB0cmFzaGVzIHRoZSBzdGFnZWQgcmVzb3VyY2VzIGZvciByZWFsOyB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja31cbiAqIG1vdmVzIHRoZW0gYmFjay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBkaXNwb3NlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Rpc3Bvc2FibGUnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckFic3RyYWN0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG5pbXBvcnQgeyBzeW5jT3BlbkVkaXRvckJ1ZmZlcnNGb3JQYXRoIH0gZnJvbSAnLi9lZGl0b3IudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWJzdHJhY3RGaWxlT3JOdWxsLFxuICBnZXRQYXRoXG59IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgY29weVNhZmUsXG4gIGNyZWF0ZUZvbGRlclNhZmUsXG4gIENyZWF0ZUZvbGRlclNhZmVSZXN1bHQsXG4gIHByb2Nlc3MsXG4gIHJlYWRTYWZlLFxuICByZW5hbWVTYWZlXG59IGZyb20gJy4vdmF1bHQudHMnO1xuXG5jb25zdCBERUZBVUxUX1NUQUdJTkdfRk9MREVSX1BBVEggPSAnLm9ic2lkaWFuLWRldi11dGlscy10ZW1wJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb259IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhdWx0VHJhbnNhY3Rpb25Db25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogT3BlbnMgYW4gYW1iaWVudCBtdXRhdGlvbi1ieXBhc3Mgc2NvcGUgY292ZXJpbmcgdGhlIHBhdGhzIHRoaXMgdHJhbnNhY3Rpb24gdG91Y2hlcywgc28gdGhlXG4gICAqIHRyYW5zYWN0aW9uJ3Mgb3duIHdyaXRlcyBwYXNzIGEgYHNob3VsZEJsb2NrTXV0YXRpb25zYCBsb2NrIHRoYXQgdGhlIG93bmluZyBvcGVyYXRpb24gaG9sZHMuIEl0IGlzXG4gICAqIGNhbGxlZCBvbmNlIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGNvbnN0cnVjdGVkLCBhbmQgdGhlIHJldHVybmVkIHtAbGluayBEaXNwb3NhYmxlfSBpcyBkaXNwb3NlZFxuICAgKiB3aGVuIHRoZSB0cmFuc2FjdGlvbiBzZXR0bGVzIChvbiBgY29tbWl0YCwgYHJvbGxiYWNrYCwgb3IgYGF3YWl0IHVzaW5nYCBkaXNwb3NhbCkgXHUyMDE0IHNvIHRoZSBieXBhc3NcbiAgICogc3RheXMgYWN0aXZlIHRocm91Z2ggcm9sbGJhY2ssIGluY2x1ZGluZyBhdXRvLXJvbGxiYWNrLCB3aGljaCBhIGNhbGxlciBtYW5hZ2luZyB0aGUgc2NvcGUgaXRzZWxmXG4gICAqIGNvdWxkIGVhc2lseSBnZXQgd3JvbmcuIFR5cGljYWxseVxuICAgKiBgKCkgPT4gcmVzb3VyY2VMb2NrQ29tcG9uZW50LmJ5cGFzc0Jsb2NrZWRNdXRhdGlvbnMobG9ja2VkUGF0aHNPckZpbGVzKWAuIE9taXQgaXQgZm9yIHRoZSBjb21tb25cbiAgICogc3RhbmRhbG9uZSBjYXNlIHdoZXJlIHRoZSB0cmFuc2FjdGlvbiBvcGVyYXRlcyBvbiB1bmxvY2tlZCBwYXRocy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCBlbmRzIHRoZSBieXBhc3Mgc2NvcGUuXG4gICAqL1xuICByZWFkb25seSBvcGVuTXV0YXRpb25CeXBhc3M/OiAoKSA9PiBEaXNwb3NhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgZG90LXByZWZpeGVkIGZvbGRlciB0aGF0IHNvZnQtZGVsZXRlZCByZXNvdXJjZXMgYXJlIG1vdmVkIGludG8gdW50aWwgdGhlIHRyYW5zYWN0aW9uIGlzXG4gICAqIGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay4gSXQgbXVzdCBzdGF5IGAuYC1wcmVmaXhlZCBzbyBPYnNpZGlhbiBsZWF2ZXMgdGhlIHN0YWdlZCByZXNvdXJjZXNcbiAgICogdW50cmFja2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJy5vYnNpZGlhbi1kZXYtdXRpbHMtdGVtcCdgXG4gICAqL1xuICByZWFkb25seSBzdGFnaW5nRm9sZGVyUGF0aD86IHN0cmluZztcbn1cblxudHlwZSBUcmFuc2FjdGlvblN0YXRlID0gJ2NvbW1pdHRlZCcgfCAnb3BlbicgfCAncm9sbGVkQmFjayc7XG5cbmludGVyZmFjZSBVbmRvU3RlcCB7XG4gIHVuZG86ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQSByZXZlcnNpYmxlIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIFBlcmZvcm0gbXV0YXRpb25zIHRocm91Z2ggaXRzIG1ldGhvZHMsIHRoZW4gY2FsbFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBvbiBzdWNjZXNzIG9yIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLnJvbGxiYWNrfSBvbiBmYWlsdXJlLiBJdCBpc1xuICogYGF3YWl0IHVzaW5nYC1mcmllbmRseTogaWYgbmVpdGhlciBpcyBjYWxsZWQsIGRpc3Bvc2FsIHJvbGxzIGJhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBWYXVsdFRyYW5zYWN0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZSB0aGUgdHJhbnNhY3Rpb24gbXV0YXRlcy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSBoYXNTdGFnaW5nRm9sZGVyID0gZmFsc2U7XG4gIHByaXZhdGUgbXV0YXRpb25CeXBhc3M6IERpc3Bvc2FibGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFnZWRUcmFzaFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWdpbmdGb2xkZXJQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhdGU6IFRyYW5zYWN0aW9uU3RhdGUgPSAnb3Blbic7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5kb1N0ZXBzOiBVbmRvU3RlcFtdID0gW107XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdmF1bHQgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFZhdWx0VHJhbnNhY3Rpb25Db25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnN0YWdpbmdGb2xkZXJQYXRoID0gcGFyYW1zLnN0YWdpbmdGb2xkZXJQYXRoID8/IERFRkFVTFRfU1RBR0lOR19GT0xERVJfUEFUSDtcbiAgICB0aGlzLm11dGF0aW9uQnlwYXNzID0gcGFyYW1zLm9wZW5NdXRhdGlvbkJ5cGFzcz8uKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21taXRzIHRoZSB0cmFuc2FjdGlvbjogZmluYWxpemVzIHNvZnQtZGVsZXRlcyBieSB0cmFzaGluZyB0aGUgc3RhZ2VkIHJlc291cmNlcyBmb3IgcmVhbCBhbmRcbiAgICogcmVtb3ZlcyB0aGUgc3RhZ2luZyBmb2xkZXIuIEFmdGVyIHRoaXMgdGhlIHRyYW5zYWN0aW9uIGNhbiBubyBsb25nZXIgYmUgbXV0YXRlZCBvciByb2xsZWQgYmFjay5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21taXQgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvbW1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICB0aGlzLnN0YXRlID0gJ2NvbW1pdHRlZCc7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgZm9yIChjb25zdCBzdGFnZWRQYXRoIG9mIHRoaXMuc3RhZ2VkVHJhc2hQYXRocykge1xuICAgICAgY29uc3Qgd2FzVHJhc2hlZFRvU3lzdGVtID0gYXdhaXQgYWRhcHRlci50cmFzaFN5c3RlbShzdGFnZWRQYXRoKTtcbiAgICAgIGlmICghd2FzVHJhc2hlZFRvU3lzdGVtKSB7XG4gICAgICAgIGF3YWl0IGFkYXB0ZXIudHJhc2hMb2NhbChzdGFnZWRQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZW1vdmVTdGFnaW5nRm9sZGVyKCk7XG4gICAgdGhpcy5kaXNwb3NlTXV0YXRpb25CeXBhc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3BpZXMgYSBmaWxlIG9yIGZvbGRlciwgcmVjb3JkaW5nIHRoZSByZW1vdmFsIG9mIHRoZSBjb3B5IGFzIHRoZSBpbnZlcnNlLiBBIGZvbGRlciBpcyBjb3BpZWQgd2l0aFxuICAgKiBpdHMgd2hvbGUgc3VidHJlZSwgc28gdGhlIHNpbmdsZSByZWNvcmRlZCByZW1vdmFsIHVuZG9lcyB0aGUgd2hvbGUgdHJlZS4gVW5saWtlXG4gICAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNyZWF0ZX0sIHRoZSBjb250ZW50IGlzIGNvcGllZCBieXRlIGZvciBieXRlLCBzbyBhIGJpbmFyeSByZXNvdXJjZVxuICAgKiByb3VuZC10cmlwcyBmYWl0aGZ1bGx5LlxuICAgKlxuICAgKiBQYXJlbnQgZm9sZGVycyB0aGF0IGhhZCB0byBiZSBjcmVhdGVkIGZvciB0aGUgZGVzdGluYXRpb24gYXJlIE5PVCB1bmRvbmUgaW5kaXZpZHVhbGx5LCBtYXRjaGluZ1xuICAgKiB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5jcmVhdGV9IGFuZCB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yZW5hbWV9LlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSBwYXRoLCBmaWxlIG9yIGZvbGRlciB0byBjb3B5LlxuICAgKiBAcGFyYW0gbmV3UGF0aCAtIFRoZSBkZXNpcmVkIG5ldyBwYXRoIChhbiBhdmFpbGFibGUgcGF0aCBpcyBjaG9zZW4gaWYgaXQgaXMgdGFrZW4pLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIGFjdHVhbCBwYXRoIG9mIHRoZSBjb3B5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvcHkob2xkUGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlLCBuZXdQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMuYXNzZXJ0T3BlbigpO1xuICAgIGNvbnN0IG9sZFBhdGggPSBnZXRQYXRoKHRoaXMuYXBwLCBvbGRQYXRoT3JGaWxlKTtcbiAgICBjb25zdCBhY3R1YWxOZXdQYXRoID0gYXdhaXQgY29weVNhZmUoeyBhcHA6IHRoaXMuYXBwLCBuZXdQYXRoLCBvbGRQYXRoT3JGaWxlIH0pO1xuICAgIC8vIFdoZW4gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLCBgY29weVNhZmVgIHJldHVybnMgdGhlIHNvdXJjZSBwYXRoIGFuZCBjb3BpZXMgbm90aGluZy5cbiAgICAvLyBSZWNvcmRpbmcgYW4gdW5kbyBoZXJlIHdvdWxkIG1ha2UgYHJvbGxiYWNrYCBkZWxldGUgdGhlIGNhbGxlcidzIE9SSUdJTkFMIHJlc291cmNlLlxuICAgIGlmIChhY3R1YWxOZXdQYXRoICE9PSBvbGRQYXRoKSB7XG4gICAgICB0aGlzLnB1c2hVbmRvKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYXJkRGVsZXRlKGFjdHVhbE5ld1BhdGgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhY3R1YWxOZXdQYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnQsIHJlY29yZGluZyBpdHMgcmVtb3ZhbCBhcyB0aGUgaW52ZXJzZS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBjcmVhdGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgY3JlYXRlZCB7QGxpbmsgVEZpbGV9LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZShwYXRoOiBzdHJpbmcsIGRhdGE6IHN0cmluZyk6IFByb21pc2U8VEZpbGU+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuY3JlYXRlKHBhdGgsIGRhdGEpO1xuICAgIGNvbnN0IGNyZWF0ZWRQYXRoID0gZmlsZS5wYXRoO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5oYXJkRGVsZXRlKGNyZWF0ZWRQYXRoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZm9sZGVyIChpbmNsdWRpbmcgbWlzc2luZyBhbmNlc3RvcnMpLCByZWNvcmRpbmcgaXRzIHJlbW92YWwgYXMgdGhlIGludmVyc2UuIEEgbm8tb3AgaWZcbiAgICogdGhlIGZvbGRlciBhbHJlYWR5IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNyZWF0ZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmb2xkZXIgZXhpc3RzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUZvbGRlcihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKHRoaXMuYXBwLCBwYXRoKTtcbiAgICBpZiAocmVzdWx0ID09PSBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0LkNyZWF0ZWQpIHtcbiAgICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmhhcmREZWxldGUocGF0aCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGNvbnRlbnQgb2YgYSBmaWxlLCBjYXB0dXJpbmcgdGhlIG9sZCBjb250ZW50IHNvIGl0IGNhbiBiZSByZXN0b3JlZCBvbiByb2xsYmFjay5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIG5ld0NvbnRlbnQgLSBUaGUgbmV3IGNvbnRlbnQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBpcyBtb2RpZmllZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBtb2RpZnkocGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlLCBuZXdDb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnByb2Nlc3MocGF0aE9yRmlsZSwgKCkgPT4gbmV3Q29udGVudCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgY29udGVudCBvZiBhIGZpbGUsIGNhcHR1cmluZyB0aGUgb2xkIGNvbnRlbnQgc28gaXQgY2FuIGJlIHJlc3RvcmVkIG9uIHJvbGxiYWNrLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gcHJvY2Vzcy5cbiAgICogQHBhcmFtIG5ld0NvbnRlbnRQcm92aWRlciAtIE1hcHMgdGhlIGN1cnJlbnQgY29udGVudCB0byB0aGUgbmV3IGNvbnRlbnQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBpcyBwcm9jZXNzZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHJvY2VzcyhwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld0NvbnRlbnRQcm92aWRlcjogKGNvbnRlbnQ6IHN0cmluZykgPT4gc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3QgcGF0aCA9IGdldFBhdGgodGhpcy5hcHAsIHBhdGhPckZpbGUpO1xuICAgIGNvbnN0IG9sZENvbnRlbnQgPSBhd2FpdCByZWFkU2FmZSh0aGlzLmFwcCwgcGF0aCk7XG4gICAgYXdhaXQgcHJvY2Vzcyh7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgbmV3Q29udGVudFByb3ZpZGVyOiAoeyBjb250ZW50IH0pID0+IG5ld0NvbnRlbnRQcm92aWRlcihjb250ZW50KSxcbiAgICAgIHBhdGhPckZpbGU6IHBhdGgsXG4gICAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IG51bGwsXG4gICAgICByZXNvdXJjZUxvY2tDb21wb25lbnQ6IG51bGxcbiAgICB9KTtcbiAgICAvLyBSZWFjaGluZyB0aGlzIGxpbmUgbWVhbnMgYHByb2Nlc3NgIHN1Y2NlZWRlZC4gQSBtaXNzaW5nIGZpbGUgd291bGQgaGF2ZSB0aHJvd24gYWJvdmUgKGl0c1xuICAgIC8vIGBzaG91bGRGYWlsT25NaXNzaW5nRmlsZWAgZGVmYXVsdCksIHNvIHRoZSBwcmUtaW1hZ2Ugd2FzIGNhcHR1cmVkIGFuZCBjYW4gYmUgcmVzdG9yZWQgb24gcm9sbGJhY2suXG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUob2xkQ29udGVudCk7XG4gICAgdGhpcy5wdXNoVW5kbyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBwcm9jZXNzKHtcbiAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgbmV3Q29udGVudFByb3ZpZGVyOiBvbGRDb250ZW50LFxuICAgICAgICBwYXRoT3JGaWxlOiBwYXRoLFxuICAgICAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IG51bGwsXG4gICAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbFxuICAgICAgfSk7XG4gICAgICAvLyBBIGNvbnN1bWVyIG1heSBoYXZlIGVkaXRlZCB0aGlzIG5vdGUgdGhyb3VnaCB0aGUgZWRpdG9yLCBsZWF2aW5nIGEgZGlydHkgYnVmZmVyLlxuICAgICAgLy8gSXRzIHBlbmRpbmcgYXV0b3NhdmUgY291bGQgcmUtd3JpdGUgdGhhdCBzdGFsZSBidWZmZXIgb3ZlciB0aGUgZGlzayByZXN0b3JlIGFib3ZlIGFuZCBjbG9iYmVyIGl0LlxuICAgICAgLy8gUmVzZXR0aW5nIHRoZSBvcGVuIGVkaXRvcidzIGJ1ZmZlciB0byB0aGUgcmVzdG9yZWQgY29udGVudCBrZWVwcyBpdHMgbmV4dCBzYXZlIGEgbm8tb3AuXG4gICAgICAvLyBPbmx5IHRoZSB2aWV3IHN0aWxsIHNob3dpbmcgdGhpcyBwYXRoIGlzIHRvdWNoZWQuXG4gICAgICAvLyBWYXVsdFRyYW5zYWN0aW9uIGFscmVhZHkgZmx1c2hlcyB2aWEgYHNhdmVOb3RlYCwgc28gdGhpcyByZXNldCBpcyBiZWx0LWFuZC1zdXNwZW5kZXJzLlxuICAgICAgc3luY09wZW5FZGl0b3JCdWZmZXJzRm9yUGF0aCh0aGlzLmFwcCwgcGF0aCwgb2xkQ29udGVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuYW1lcyBvciBtb3ZlcyBhIHJlc291cmNlLCByZWNvcmRpbmcgdGhlIHJldmVyc2UgcmVuYW1lIGFzIHRoZSBpbnZlcnNlLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSByZXNvdXJjZSB0byByZW5hbWUuXG4gICAqIEBwYXJhbSBuZXdQYXRoIC0gVGhlIGRlc2lyZWQgbmV3IHBhdGggKGFuIGF2YWlsYWJsZSBwYXRoIGlzIGNob3NlbiBpZiBpdCBpcyB0YWtlbikuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgYWN0dWFsIG5ldyBwYXRoLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbmFtZShvbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3Qgb2xkUGF0aCA9IGdldFBhdGgodGhpcy5hcHAsIG9sZFBhdGhPckZpbGUpO1xuICAgIGNvbnN0IGFjdHVhbE5ld1BhdGggPSBhd2FpdCByZW5hbWVTYWZlKHsgYXBwOiB0aGlzLmFwcCwgbmV3UGF0aCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlOiBvbGRQYXRoT3JGaWxlIH0pO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcmVuYW1lU2FmZSh7IGFwcDogdGhpcy5hcHAsIG5ld1BhdGg6IG9sZFBhdGgsIG9sZFBhdGhPckFic3RyYWN0RmlsZTogYWN0dWFsTmV3UGF0aCB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0dWFsTmV3UGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb2xscyBiYWNrIHRoZSB0cmFuc2FjdGlvbjogdW5kb2VzIHRoZSBjb21wbGV0ZWQgc3RlcHMgaW4gcmV2ZXJzZSBvcmRlciBhbmQgcmVtb3ZlcyB0aGUgc3RhZ2luZ1xuICAgKiBmb2xkZXIuIElkZW1wb3RlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcm9sbGJhY2sgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAncm9sbGVkQmFjaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnROb3RDb21taXR0ZWQoKTtcbiAgICB0aGlzLnN0YXRlID0gJ3JvbGxlZEJhY2snO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBbLi4udGhpcy51bmRvU3RlcHNdLnJldmVyc2UoKSkge1xuICAgICAgYXdhaXQgc3RlcC51bmRvKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVtb3ZlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIHRoaXMuZGlzcG9zZU11dGF0aW9uQnlwYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogUm9sbHMgYmFjayB0aGUgdHJhbnNhY3Rpb24gb24gZGlzcG9zYWwgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuJykge1xuICAgICAgYXdhaXQgdGhpcy5yb2xsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb2Z0LWRlbGV0ZXMgYSByZXNvdXJjZSBieSBtb3ZpbmcgaXQgaW50byB0aGUgc3RhZ2luZyBmb2xkZXIsIHJlY29yZGluZyB0aGUgbW92ZS1iYWNrIGFzIHRoZVxuICAgKiBpbnZlcnNlLiBUaGUgcmVhbCB0cmFzaCBoYXBwZW5zIG9uIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0uIEEgbm8tb3AgaWYgdGhlIHJlc291cmNlIGRvZXNcbiAgICogbm90IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIHJlc291cmNlIHRvIHRyYXNoLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlc291cmNlIGhhcyBiZWVuIHN0YWdlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0cmFzaChwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxQYXRoID0gZmlsZS5wYXRoO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIGNvbnN0IHN0YWdlZFBhdGggPSBhd2FpdCB0aGlzLmdldEF2YWlsYWJsZVN0YWdlZFBhdGgoZmlsZS5uYW1lKTtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICAvLyBNb3ZlIHRocm91Z2ggdGhlIGFkYXB0ZXIsIG5vdCBgdmF1bHQucmVuYW1lYDogdGhlIHN0YWdpbmcgZm9sZGVyIGlzIGRvdC1wcmVmaXhlZCBhbmQgdGhlcmVmb3JlXG4gICAgLy8gdW50cmFja2VkLCBzbyBhIGB2YXVsdC4qYCBtb3ZlIGNhbm5vdCB0YXJnZXQgaXQgKG5vciBzaG91bGQgaXQgcmV3cml0ZSBsaW5rcyB0byBhIHNvZnQtZGVsZXRlKS5cbiAgICBhd2FpdCBhZGFwdGVyLnJlbmFtZShvcmlnaW5hbFBhdGgsIHN0YWdlZFBhdGgpO1xuICAgIHRoaXMuc3RhZ2VkVHJhc2hQYXRocy5wdXNoKHN0YWdlZFBhdGgpO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHN0YWdlZFBhdGgpKSB7XG4gICAgICAgIGF3YWl0IGFkYXB0ZXIucmVuYW1lKHN0YWdlZFBhdGgsIG9yaWdpbmFsUGF0aCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE5vdENvbW1pdHRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2NvbW1pdHRlZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJvbGwgYmFjayBhIGNvbW1pdHRlZCB0cmFuc2FjdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbXV0YXRlIGEgJHt0aGlzLnN0YXRlfSB0cmFuc2FjdGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VNdXRhdGlvbkJ5cGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdXRhdGlvbkJ5cGFzcykge1xuICAgICAgZGlzcG9zZSh0aGlzLm11dGF0aW9uQnlwYXNzKTtcbiAgICB9XG4gICAgdGhpcy5tdXRhdGlvbkJ5cGFzcyA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGFzU3RhZ2luZ0ZvbGRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICBpZiAoIWF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLm1rZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpO1xuICAgIH1cbiAgICB0aGlzLmhhc1N0YWdpbmdGb2xkZXIgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBdmFpbGFibGVTdGFnZWRQYXRoKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgY29uc3QgZG90SW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZG90SW5kZXggPiAwO1xuICAgIGNvbnN0IGJhc2VOYW1lID0gaGFzRXh0ZW5zaW9uID8gbmFtZS5zbGljZSgwLCBkb3RJbmRleCkgOiBuYW1lO1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGhhc0V4dGVuc2lvbiA/IG5hbWUuc2xpY2UoZG90SW5kZXgpIDogJyc7XG4gICAgbGV0IGNhbmRpZGF0ZSA9IGAke3RoaXMuc3RhZ2luZ0ZvbGRlclBhdGh9LyR7bmFtZX1gO1xuICAgIGxldCBjb3VudGVyID0gMTtcbiAgICB3aGlsZSAoYXdhaXQgYWRhcHRlci5leGlzdHMoY2FuZGlkYXRlKSkge1xuICAgICAgY2FuZGlkYXRlID0gYCR7dGhpcy5zdGFnaW5nRm9sZGVyUGF0aH0vJHtiYXNlTmFtZX0gJHtjb3VudGVyLnRvU3RyaW5nKCl9JHtleHRlbnNpb259YDtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFyZERlbGV0ZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvcHJlZmVyLWZpbGUtbWFuYWdlci10cmFzaC1maWxlIC0tIFVuZG9pbmcgYSB0cmFuc2FjdGlvbi1sb2NhbCBjcmVhdGUgbXVzdCB2YW5pc2ggaXQgZW50aXJlbHksIG5vdCBsYW5kIGl0IGluIHRoZSB1c2VyJ3MgdHJhc2guXG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5kZWxldGUoZmlsZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVW5kbyh1bmRvOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgdGhpcy51bmRvU3RlcHMucHVzaCh7IHVuZG8gfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbW92ZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmhhc1N0YWdpbmdGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYXNTdGFnaW5nRm9sZGVyID0gZmFsc2U7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLnJtZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgsIHRydWUpO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQSxTQUFTLGVBQWU7QUFDeEIsU0FBUyx5QkFBeUI7QUFJbEMsU0FBUyxvQ0FBb0M7QUFDN0M7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxNQUFNLDhCQUE4QjtBQThDN0IsTUFBTSxpQkFBaUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlUO0FBQUEsRUFDWCxt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
|
|
325
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZhdWx0LXRyYW5zYWN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZXZlcnNpYmxlLCB0cmFuc2FjdGlvbmFsIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIEVhY2ggbXV0YXRpb24gcmVjb3JkcyBob3cgdG8gdW5kbyBpdHNlbGY7XG4gKiB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja30gcmV2ZXJzZXMgdGhlIGNvbXBsZXRlZCBzdGVwcyBpbiByZXZlcnNlIG9yZGVyIGFuZFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBmaW5hbGl6ZXMgdGhlbS4gSXQgaXMgYnVpbHQgb24gdGhlIGAqU2FmZWAgdmF1bHQgd3JhcHBlcnMgc28gaXRcbiAqIGluaGVyaXRzIHRoZWlyIGNhc2UtaW5zZW5zaXRpdmUgLyByZXRyeSAvIG1pc3NpbmctZmlsZSBoYW5kbGluZy5cbiAqXG4gKiBBIGRlbGV0aW9uIGlzIHBlcmZvcm1lZCBhcyBhICoqc29mdC1kZWxldGUqKjogdGhlIHJlc291cmNlIGlzIG1vdmVkIGFzaWRlIGludG8gYSBkb3QtcHJlZml4ZWRcbiAqIHN0YWdpbmcgZm9sZGVyIChhIGZvbGRlciBtb3ZlcyBpdHMgd2hvbGUgc3VidHJlZSBpbiBhIHNpbmdsZSByZW5hbWUsIHNvIHN1YnRyZWUgcm9sbGJhY2sgaXMgY2hlYXBcbiAqIGFuZCBmYWl0aGZ1bCkuIEJlY2F1c2UgT2JzaWRpYW4ncyB2YXVsdCBmaWxlLXRyZWUgYW5kIGZpbGUgd2F0Y2hlciBpZ25vcmUgYW55IGAuYC1wcmVmaXhlZCBwYXRoLFxuICogc3RhZ2VkIHJlc291cmNlcyBhcmUgKip1bnRyYWNrZWQqKiBcdTIwMTQgdGhleSBkbyBub3QgY2h1cm4gdGhlIG1ldGFkYXRhIGNhY2hlLCBmbGFzaCBpbiB0aGUgZmlsZVxuICogZXhwbG9yZXIsIG9yIGdldCBwcm9wYWdhdGVkIGJ5IHN5bmMgd2hpbGUgdGhlIHRyYW5zYWN0aW9uIGlzIGluIGZsaWdodC4gVGhlIGZsaXAgc2lkZSBpcyB0aGF0XG4gKiBgdmF1bHQuKmAgbWV0aG9kcyBjYW5ub3Qgc2VlIHRoZSBzdGFnaW5nIGFyZWEsIHNvIEFMTCBzdGFnaW5nIEkvTyBnb2VzIHRocm91Z2hcbiAqIHtAbGluayBBcHAudmF1bHQuYWRhcHRlcn0gKGBta2RpcmAvYHJlbmFtZWAvYGV4aXN0c2AvYHRyYXNoU3lzdGVtYC9gcm1kaXJgKS5cbiAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0gdGhlbiB0cmFzaGVzIHRoZSBzdGFnZWQgcmVzb3VyY2VzIGZvciByZWFsOyB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja31cbiAqIG1vdmVzIHRoZW0gYmFjay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBkaXNwb3NlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Rpc3Bvc2FibGUnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckFic3RyYWN0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG5pbXBvcnQgeyBzeW5jT3BlbkVkaXRvckJ1ZmZlcnNGb3JQYXRoIH0gZnJvbSAnLi9lZGl0b3IudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QWJzdHJhY3RGaWxlT3JOdWxsLFxuICBnZXRQYXRoXG59IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgY29weVNhZmUsXG4gIGNyZWF0ZUZvbGRlclNhZmUsXG4gIENyZWF0ZUZvbGRlclNhZmVSZXN1bHQsXG4gIHByb2Nlc3MsXG4gIHJlYWRTYWZlLFxuICByZW5hbWVTYWZlXG59IGZyb20gJy4vdmF1bHQudHMnO1xuXG5jb25zdCBERUZBVUxUX1NUQUdJTkdfRk9MREVSX1BBVEggPSAnLm9ic2lkaWFuLWRldi11dGlscy10ZW1wJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb259IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhdWx0VHJhbnNhY3Rpb25Db25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogT3BlbnMgYW4gYW1iaWVudCBtdXRhdGlvbi1ieXBhc3Mgc2NvcGUgY292ZXJpbmcgdGhlIHBhdGhzIHRoaXMgdHJhbnNhY3Rpb24gdG91Y2hlcywgc28gdGhlXG4gICAqIHRyYW5zYWN0aW9uJ3Mgb3duIHdyaXRlcyBwYXNzIGEgYHNob3VsZEJsb2NrTXV0YXRpb25zYCBsb2NrIHRoYXQgdGhlIG93bmluZyBvcGVyYXRpb24gaG9sZHMuIEl0IGlzXG4gICAqIGNhbGxlZCBvbmNlIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGNvbnN0cnVjdGVkLCBhbmQgdGhlIHJldHVybmVkIHtAbGluayBEaXNwb3NhYmxlfSBpcyBkaXNwb3NlZFxuICAgKiB3aGVuIHRoZSB0cmFuc2FjdGlvbiBzZXR0bGVzIChvbiBgY29tbWl0YCwgYHJvbGxiYWNrYCwgb3IgYGF3YWl0IHVzaW5nYCBkaXNwb3NhbCkgXHUyMDE0IHNvIHRoZSBieXBhc3NcbiAgICogc3RheXMgYWN0aXZlIHRocm91Z2ggcm9sbGJhY2ssIGluY2x1ZGluZyBhdXRvLXJvbGxiYWNrLCB3aGljaCBhIGNhbGxlciBtYW5hZ2luZyB0aGUgc2NvcGUgaXRzZWxmXG4gICAqIGNvdWxkIGVhc2lseSBnZXQgd3JvbmcuIFR5cGljYWxseVxuICAgKiBgKCkgPT4gcmVzb3VyY2VMb2NrQ29tcG9uZW50LmJ5cGFzc0Jsb2NrZWRNdXRhdGlvbnMobG9ja2VkUGF0aHNPckZpbGVzKWAuIE9taXQgaXQgZm9yIHRoZSBjb21tb25cbiAgICogc3RhbmRhbG9uZSBjYXNlIHdoZXJlIHRoZSB0cmFuc2FjdGlvbiBvcGVyYXRlcyBvbiB1bmxvY2tlZCBwYXRocy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCBlbmRzIHRoZSBieXBhc3Mgc2NvcGUuXG4gICAqL1xuICByZWFkb25seSBvcGVuTXV0YXRpb25CeXBhc3M/OiAoKSA9PiBEaXNwb3NhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgZG90LXByZWZpeGVkIGZvbGRlciB0aGF0IHNvZnQtZGVsZXRlZCByZXNvdXJjZXMgYXJlIG1vdmVkIGludG8gdW50aWwgdGhlIHRyYW5zYWN0aW9uIGlzXG4gICAqIGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay4gSXQgbXVzdCBzdGF5IGAuYC1wcmVmaXhlZCBzbyBPYnNpZGlhbiBsZWF2ZXMgdGhlIHN0YWdlZCByZXNvdXJjZXNcbiAgICogdW50cmFja2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJy5vYnNpZGlhbi1kZXYtdXRpbHMtdGVtcCdgXG4gICAqL1xuICByZWFkb25seSBzdGFnaW5nRm9sZGVyUGF0aD86IHN0cmluZztcbn1cblxudHlwZSBUcmFuc2FjdGlvblN0YXRlID0gJ2NvbW1pdHRlZCcgfCAnb3BlbicgfCAncm9sbGVkQmFjayc7XG5cbmludGVyZmFjZSBVbmRvU3RlcCB7XG4gIHVuZG86ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQSByZXZlcnNpYmxlIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIFBlcmZvcm0gbXV0YXRpb25zIHRocm91Z2ggaXRzIG1ldGhvZHMsIHRoZW4gY2FsbFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBvbiBzdWNjZXNzIG9yIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLnJvbGxiYWNrfSBvbiBmYWlsdXJlLiBJdCBpc1xuICogYGF3YWl0IHVzaW5nYC1mcmllbmRseTogaWYgbmVpdGhlciBpcyBjYWxsZWQsIGRpc3Bvc2FsIHJvbGxzIGJhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBWYXVsdFRyYW5zYWN0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZSB0aGUgdHJhbnNhY3Rpb24gbXV0YXRlcy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSBoYXNTdGFnaW5nRm9sZGVyID0gZmFsc2U7XG4gIHByaXZhdGUgbXV0YXRpb25CeXBhc3M6IERpc3Bvc2FibGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFnZWRUcmFzaFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWdpbmdGb2xkZXJQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhdGU6IFRyYW5zYWN0aW9uU3RhdGUgPSAnb3Blbic7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5kb1N0ZXBzOiBVbmRvU3RlcFtdID0gW107XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdmF1bHQgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFZhdWx0VHJhbnNhY3Rpb25Db25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnN0YWdpbmdGb2xkZXJQYXRoID0gcGFyYW1zLnN0YWdpbmdGb2xkZXJQYXRoID8/IERFRkFVTFRfU1RBR0lOR19GT0xERVJfUEFUSDtcbiAgICB0aGlzLm11dGF0aW9uQnlwYXNzID0gcGFyYW1zLm9wZW5NdXRhdGlvbkJ5cGFzcz8uKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21taXRzIHRoZSB0cmFuc2FjdGlvbjogZmluYWxpemVzIHNvZnQtZGVsZXRlcyBieSB0cmFzaGluZyB0aGUgc3RhZ2VkIHJlc291cmNlcyBmb3IgcmVhbCBhbmRcbiAgICogcmVtb3ZlcyB0aGUgc3RhZ2luZyBmb2xkZXIuIEFmdGVyIHRoaXMgdGhlIHRyYW5zYWN0aW9uIGNhbiBubyBsb25nZXIgYmUgbXV0YXRlZCBvciByb2xsZWQgYmFjay5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21taXQgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvbW1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICB0aGlzLnN0YXRlID0gJ2NvbW1pdHRlZCc7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgZm9yIChjb25zdCBzdGFnZWRQYXRoIG9mIHRoaXMuc3RhZ2VkVHJhc2hQYXRocykge1xuICAgICAgY29uc3Qgd2FzVHJhc2hlZFRvU3lzdGVtID0gYXdhaXQgYWRhcHRlci50cmFzaFN5c3RlbShzdGFnZWRQYXRoKTtcbiAgICAgIGlmICghd2FzVHJhc2hlZFRvU3lzdGVtKSB7XG4gICAgICAgIGF3YWl0IGFkYXB0ZXIudHJhc2hMb2NhbChzdGFnZWRQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZW1vdmVTdGFnaW5nRm9sZGVyKCk7XG4gICAgdGhpcy5kaXNwb3NlTXV0YXRpb25CeXBhc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3BpZXMgYSBmaWxlIG9yIGZvbGRlciwgcmVjb3JkaW5nIHRoZSByZW1vdmFsIG9mIHRoZSBjb3B5IGFzIHRoZSBpbnZlcnNlLiBBIGZvbGRlciBpcyBjb3BpZWQgd2l0aFxuICAgKiBpdHMgd2hvbGUgc3VidHJlZSwgc28gdGhlIHNpbmdsZSByZWNvcmRlZCByZW1vdmFsIHVuZG9lcyB0aGUgd2hvbGUgdHJlZS4gVW5saWtlXG4gICAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNyZWF0ZX0sIHRoZSBjb250ZW50IGlzIGNvcGllZCBieXRlIGZvciBieXRlLCBzbyBhIGJpbmFyeSByZXNvdXJjZVxuICAgKiByb3VuZC10cmlwcyBmYWl0aGZ1bGx5LlxuICAgKlxuICAgKiBQYXJlbnQgZm9sZGVycyB0aGF0IGhhZCB0byBiZSBjcmVhdGVkIGZvciB0aGUgZGVzdGluYXRpb24gYXJlIE5PVCB1bmRvbmUgaW5kaXZpZHVhbGx5LCBtYXRjaGluZ1xuICAgKiB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5jcmVhdGV9IGFuZCB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yZW5hbWV9LlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSBwYXRoLCBmaWxlIG9yIGZvbGRlciB0byBjb3B5LlxuICAgKiBAcGFyYW0gbmV3UGF0aCAtIFRoZSBkZXNpcmVkIG5ldyBwYXRoIChhbiBhdmFpbGFibGUgcGF0aCBpcyBjaG9zZW4gaWYgaXQgaXMgdGFrZW4pLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIGFjdHVhbCBwYXRoIG9mIHRoZSBjb3B5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvcHkob2xkUGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlLCBuZXdQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRoaXMuYXNzZXJ0T3BlbigpO1xuICAgIGNvbnN0IG9sZFBhdGggPSBnZXRQYXRoKHRoaXMuYXBwLCBvbGRQYXRoT3JGaWxlKTtcbiAgICBjb25zdCBhY3R1YWxOZXdQYXRoID0gYXdhaXQgY29weVNhZmUoeyBhcHA6IHRoaXMuYXBwLCBuZXdQYXRoLCBvbGRQYXRoT3JGaWxlIH0pO1xuICAgIC8vIFdoZW4gc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLCBgY29weVNhZmVgIHJldHVybnMgdGhlIHNvdXJjZSBwYXRoIGFuZCBjb3BpZXMgbm90aGluZy5cbiAgICAvLyBSZWNvcmRpbmcgYW4gdW5kbyBoZXJlIHdvdWxkIG1ha2UgYHJvbGxiYWNrYCBkZWxldGUgdGhlIGNhbGxlcidzIE9SSUdJTkFMIHJlc291cmNlLlxuICAgIGlmIChhY3R1YWxOZXdQYXRoICE9PSBvbGRQYXRoKSB7XG4gICAgICB0aGlzLnB1c2hVbmRvKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYXJkRGVsZXRlKGFjdHVhbE5ld1BhdGgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhY3R1YWxOZXdQYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnQsIHJlY29yZGluZyBpdHMgcmVtb3ZhbCBhcyB0aGUgaW52ZXJzZS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBjcmVhdGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgY3JlYXRlZCB7QGxpbmsgVEZpbGV9LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZShwYXRoOiBzdHJpbmcsIGRhdGE6IHN0cmluZyk6IFByb21pc2U8VEZpbGU+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuY3JlYXRlKHBhdGgsIGRhdGEpO1xuICAgIGNvbnN0IGNyZWF0ZWRQYXRoID0gZmlsZS5wYXRoO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5oYXJkRGVsZXRlKGNyZWF0ZWRQYXRoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZm9sZGVyIChpbmNsdWRpbmcgbWlzc2luZyBhbmNlc3RvcnMpLCByZWNvcmRpbmcgaXRzIHJlbW92YWwgYXMgdGhlIGludmVyc2UuIEEgbm8tb3AgaWZcbiAgICogdGhlIGZvbGRlciBhbHJlYWR5IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIGNyZWF0ZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmb2xkZXIgZXhpc3RzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUZvbGRlcihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKHRoaXMuYXBwLCBwYXRoKTtcbiAgICBpZiAocmVzdWx0ID09PSBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0LkNyZWF0ZWQpIHtcbiAgICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmhhcmREZWxldGUocGF0aCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGNvbnRlbnQgb2YgYSBmaWxlLCBjYXB0dXJpbmcgdGhlIG9sZCBjb250ZW50IHNvIGl0IGNhbiBiZSByZXN0b3JlZCBvbiByb2xsYmFjay5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIG5ld0NvbnRlbnQgLSBUaGUgbmV3IGNvbnRlbnQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBpcyBtb2RpZmllZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBtb2RpZnkocGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlLCBuZXdDb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnByb2Nlc3MocGF0aE9yRmlsZSwgKCkgPT4gbmV3Q29udGVudCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgY29udGVudCBvZiBhIGZpbGUsIGNhcHR1cmluZyB0aGUgb2xkIGNvbnRlbnQgc28gaXQgY2FuIGJlIHJlc3RvcmVkIG9uIHJvbGxiYWNrLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gcHJvY2Vzcy5cbiAgICogQHBhcmFtIG5ld0NvbnRlbnRQcm92aWRlciAtIE1hcHMgdGhlIGN1cnJlbnQgY29udGVudCB0byB0aGUgbmV3IGNvbnRlbnQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBpcyBwcm9jZXNzZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcHJvY2VzcyhwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld0NvbnRlbnRQcm92aWRlcjogKGNvbnRlbnQ6IHN0cmluZykgPT4gc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3QgcGF0aCA9IGdldFBhdGgodGhpcy5hcHAsIHBhdGhPckZpbGUpO1xuICAgIGNvbnN0IG9sZENvbnRlbnQgPSBhd2FpdCByZWFkU2FmZSh0aGlzLmFwcCwgcGF0aCk7XG4gICAgYXdhaXQgcHJvY2Vzcyh7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgbmV3Q29udGVudFByb3ZpZGVyOiAoeyBjb250ZW50IH0pID0+IG5ld0NvbnRlbnRQcm92aWRlcihjb250ZW50KSxcbiAgICAgIHBhdGhPckZpbGU6IHBhdGgsXG4gICAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IG51bGwsXG4gICAgICByZXNvdXJjZUxvY2tDb21wb25lbnQ6IG51bGxcbiAgICB9KTtcbiAgICAvLyBSZWFjaGluZyB0aGlzIGxpbmUgbWVhbnMgYHByb2Nlc3NgIHN1Y2NlZWRlZC4gQSBtaXNzaW5nIGZpbGUgd291bGQgaGF2ZSB0aHJvd24gYWJvdmUgKGl0c1xuICAgIC8vIGBzaG91bGRGYWlsT25NaXNzaW5nRmlsZWAgZGVmYXVsdCksIHNvIHRoZSBwcmUtaW1hZ2Ugd2FzIGNhcHR1cmVkIGFuZCBjYW4gYmUgcmVzdG9yZWQgb24gcm9sbGJhY2suXG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUob2xkQ29udGVudCk7XG4gICAgdGhpcy5wdXNoVW5kbyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBwcm9jZXNzKHtcbiAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgbmV3Q29udGVudFByb3ZpZGVyOiBvbGRDb250ZW50LFxuICAgICAgICBwYXRoT3JGaWxlOiBwYXRoLFxuICAgICAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IG51bGwsXG4gICAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbFxuICAgICAgfSk7XG4gICAgICAvLyBBIGNvbnN1bWVyIG1heSBoYXZlIGVkaXRlZCB0aGlzIG5vdGUgdGhyb3VnaCB0aGUgZWRpdG9yLCBsZWF2aW5nIGEgZGlydHkgYnVmZmVyLlxuICAgICAgLy8gSXRzIHBlbmRpbmcgYXV0b3NhdmUgY291bGQgcmUtd3JpdGUgdGhhdCBzdGFsZSBidWZmZXIgb3ZlciB0aGUgZGlzayByZXN0b3JlIGFib3ZlIGFuZCBjbG9iYmVyIGl0LlxuICAgICAgLy8gUmVzZXR0aW5nIHRoZSBvcGVuIGVkaXRvcidzIGJ1ZmZlciB0byB0aGUgcmVzdG9yZWQgY29udGVudCBrZWVwcyBpdHMgbmV4dCBzYXZlIGEgbm8tb3AuXG4gICAgICAvLyBPbmx5IHRoZSB2aWV3IHN0aWxsIHNob3dpbmcgdGhpcyBwYXRoIGlzIHRvdWNoZWQuXG4gICAgICAvLyBWYXVsdFRyYW5zYWN0aW9uIGFscmVhZHkgZmx1c2hlcyB2aWEgYHNhdmVOb3RlYCwgc28gdGhpcyByZXNldCBpcyBiZWx0LWFuZC1zdXNwZW5kZXJzLlxuICAgICAgc3luY09wZW5FZGl0b3JCdWZmZXJzRm9yUGF0aCh0aGlzLmFwcCwgcGF0aCwgb2xkQ29udGVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuYW1lcyBvciBtb3ZlcyBhIHJlc291cmNlLCByZWNvcmRpbmcgdGhlIHJldmVyc2UgcmVuYW1lIGFzIHRoZSBpbnZlcnNlLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSByZXNvdXJjZSB0byByZW5hbWUuXG4gICAqIEBwYXJhbSBuZXdQYXRoIC0gVGhlIGRlc2lyZWQgbmV3IHBhdGggKGFuIGF2YWlsYWJsZSBwYXRoIGlzIGNob3NlbiBpZiBpdCBpcyB0YWtlbikuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgYWN0dWFsIG5ldyBwYXRoLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbmFtZShvbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3Qgb2xkUGF0aCA9IGdldFBhdGgodGhpcy5hcHAsIG9sZFBhdGhPckZpbGUpO1xuICAgIGNvbnN0IGFjdHVhbE5ld1BhdGggPSBhd2FpdCByZW5hbWVTYWZlKHsgYXBwOiB0aGlzLmFwcCwgbmV3UGF0aCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlOiBvbGRQYXRoT3JGaWxlIH0pO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcmVuYW1lU2FmZSh7IGFwcDogdGhpcy5hcHAsIG5ld1BhdGg6IG9sZFBhdGgsIG9sZFBhdGhPckFic3RyYWN0RmlsZTogYWN0dWFsTmV3UGF0aCB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0dWFsTmV3UGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb2xscyBiYWNrIHRoZSB0cmFuc2FjdGlvbjogdW5kb2VzIHRoZSBjb21wbGV0ZWQgc3RlcHMgaW4gcmV2ZXJzZSBvcmRlciBhbmQgcmVtb3ZlcyB0aGUgc3RhZ2luZ1xuICAgKiBmb2xkZXIuIElkZW1wb3RlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcm9sbGJhY2sgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAncm9sbGVkQmFjaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnROb3RDb21taXR0ZWQoKTtcbiAgICB0aGlzLnN0YXRlID0gJ3JvbGxlZEJhY2snO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBbLi4udGhpcy51bmRvU3RlcHNdLnJldmVyc2UoKSkge1xuICAgICAgYXdhaXQgc3RlcC51bmRvKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVtb3ZlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIHRoaXMuZGlzcG9zZU11dGF0aW9uQnlwYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogUm9sbHMgYmFjayB0aGUgdHJhbnNhY3Rpb24gb24gZGlzcG9zYWwgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuJykge1xuICAgICAgYXdhaXQgdGhpcy5yb2xsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb2Z0LWRlbGV0ZXMgYSByZXNvdXJjZSBieSBtb3ZpbmcgaXQgaW50byB0aGUgc3RhZ2luZyBmb2xkZXIsIHJlY29yZGluZyB0aGUgbW92ZS1iYWNrIGFzIHRoZVxuICAgKiBpbnZlcnNlLiBUaGUgcmVhbCB0cmFzaCBoYXBwZW5zIG9uIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0uIEEgbm8tb3AgaWYgdGhlIHJlc291cmNlIGRvZXNcbiAgICogbm90IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIHJlc291cmNlIHRvIHRyYXNoLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlc291cmNlIGhhcyBiZWVuIHN0YWdlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0cmFzaChwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxQYXRoID0gZmlsZS5wYXRoO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIGNvbnN0IHN0YWdlZFBhdGggPSBhd2FpdCB0aGlzLmdldEF2YWlsYWJsZVN0YWdlZFBhdGgoZmlsZS5uYW1lKTtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICAvLyBNb3ZlIHRocm91Z2ggdGhlIGFkYXB0ZXIsIG5vdCBgdmF1bHQucmVuYW1lYDogdGhlIHN0YWdpbmcgZm9sZGVyIGlzIGRvdC1wcmVmaXhlZCBhbmQgdGhlcmVmb3JlXG4gICAgLy8gdW50cmFja2VkLCBzbyBhIGB2YXVsdC4qYCBtb3ZlIGNhbm5vdCB0YXJnZXQgaXQgKG5vciBzaG91bGQgaXQgcmV3cml0ZSBsaW5rcyB0byBhIHNvZnQtZGVsZXRlKS5cbiAgICBhd2FpdCBhZGFwdGVyLnJlbmFtZShvcmlnaW5hbFBhdGgsIHN0YWdlZFBhdGgpO1xuICAgIHRoaXMuc3RhZ2VkVHJhc2hQYXRocy5wdXNoKHN0YWdlZFBhdGgpO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHN0YWdlZFBhdGgpKSB7XG4gICAgICAgIGF3YWl0IGFkYXB0ZXIucmVuYW1lKHN0YWdlZFBhdGgsIG9yaWdpbmFsUGF0aCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE5vdENvbW1pdHRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2NvbW1pdHRlZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJvbGwgYmFjayBhIGNvbW1pdHRlZCB0cmFuc2FjdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbXV0YXRlIGEgJHt0aGlzLnN0YXRlfSB0cmFuc2FjdGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VNdXRhdGlvbkJ5cGFzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tdXRhdGlvbkJ5cGFzcykge1xuICAgICAgZGlzcG9zZSh0aGlzLm11dGF0aW9uQnlwYXNzKTtcbiAgICB9XG4gICAgdGhpcy5tdXRhdGlvbkJ5cGFzcyA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGFzU3RhZ2luZ0ZvbGRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICBpZiAoIWF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLm1rZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpO1xuICAgIH1cbiAgICB0aGlzLmhhc1N0YWdpbmdGb2xkZXIgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBdmFpbGFibGVTdGFnZWRQYXRoKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgY29uc3QgZG90SW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZG90SW5kZXggPiAwO1xuICAgIGNvbnN0IGJhc2VOYW1lID0gaGFzRXh0ZW5zaW9uID8gbmFtZS5zbGljZSgwLCBkb3RJbmRleCkgOiBuYW1lO1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGhhc0V4dGVuc2lvbiA/IG5hbWUuc2xpY2UoZG90SW5kZXgpIDogJyc7XG4gICAgbGV0IGNhbmRpZGF0ZSA9IGAke3RoaXMuc3RhZ2luZ0ZvbGRlclBhdGh9LyR7bmFtZX1gO1xuICAgIGxldCBjb3VudGVyID0gMTtcbiAgICB3aGlsZSAoYXdhaXQgYWRhcHRlci5leGlzdHMoY2FuZGlkYXRlKSkge1xuICAgICAgY2FuZGlkYXRlID0gYCR7dGhpcy5zdGFnaW5nRm9sZGVyUGF0aH0vJHtiYXNlTmFtZX0gJHtjb3VudGVyLnRvU3RyaW5nKCl9JHtleHRlbnNpb259YDtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFyZERlbGV0ZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvcHJlZmVyLWZpbGUtbWFuYWdlci10cmFzaC1maWxlIC0tIFVuZG9pbmcgYSB0cmFuc2FjdGlvbi1sb2NhbCBjcmVhdGUgbXVzdCB2YW5pc2ggaXQgZW50aXJlbHksIG5vdCBsYW5kIGl0IGluIHRoZSB1c2VyJ3MgdHJhc2guXG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5kZWxldGUoZmlsZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVW5kbyh1bmRvOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgdGhpcy51bmRvU3RlcHMucHVzaCh7IHVuZG8gfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbW92ZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmhhc1N0YWdpbmdGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYXNTdGFnaW5nRm9sZGVyID0gZmFsc2U7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLnJtZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgsIHRydWUpO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3QkEsU0FBUyxlQUFlO0FBQ3hCLFNBQVMseUJBQXlCO0FBSWxDLFNBQVMsb0NBQW9DO0FBQzdDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsTUFBTSw4QkFBOEI7QUE4QzdCLE1BQU0saUJBQWlCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVDtBQUFBLEVBQ1gsbUJBQW1CO0FB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
|
package/dist/lib/esm/vault.mjs
CHANGED
|
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
5
5
|
|
|
6
6
|
(function () {
|
|
7
7
|
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for(
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for(
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
function ensureBrowserProcess() {
|
|
13
13
|
const browserProcess = {
|
|
14
14
|
browser: true,
|
|
15
15
|
cwd() {
|
|
16
|
-
return
|
|
16
|
+
return "/";
|
|
17
17
|
},
|
|
18
18
|
env: {},
|
|
19
|
-
platform:
|
|
19
|
+
platform: "android"
|
|
20
20
|
};
|
|
21
|
-
|
|
22
|
-
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
23
21
|
const existingProcess = globalThis.process;
|
|
24
|
-
|
|
25
22
|
if (!existingProcess) {
|
|
26
|
-
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
27
23
|
globalThis.process = browserProcess;
|
|
28
24
|
return;
|
|
29
25
|
}
|
|
30
|
-
|
|
31
26
|
if (existingProcess.versions?.node) {
|
|
32
27
|
return;
|
|
33
28
|
}
|
|
34
|
-
|
|
35
29
|
const existingProcessRecord = existingProcess;
|
|
36
|
-
|
|
37
30
|
for (const [key, value] of Object.entries(browserProcess)) {
|
|
38
31
|
existingProcessRecord[key] ??= value;
|
|
39
32
|
}
|
|
40
|
-
|
|
41
|
-
existingProcessRecord['browser'] = true;
|
|
33
|
+
existingProcessRecord["browser"] = true;
|
|
42
34
|
}
|
|
43
35
|
|
|
44
36
|
(function initEsm() {
|
|
@@ -609,4 +601,4 @@ export {
|
|
|
609
601
|
saveNote,
|
|
610
602
|
trashSafe
|
|
611
603
|
};
|
|
612
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgT2JzaWRpYW4gVmF1bHQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZXRyeU9wdGlvbnMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3ZhbHVlLXByb3ZpZGVyJztcbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBMaXN0ZWRGaWxlc1xufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGFib3J0U2lnbmFsQW55IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Fib3J0LWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgbm9vcEFzeW5jIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7XG4gIGJhc2VuYW1lLFxuICBkaXJuYW1lLFxuICBleHRuYW1lLFxuICBqb2luXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9wYXRoJztcbmltcG9ydCB7IGFzc2VydE5ldmVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi92YWx1ZS1wcm92aWRlcic7XG5pbXBvcnQge1xuICBnZXREYXRhQWRhcHRlckV4LFxuICBwYXJlbnRGb2xkZXJQYXRoLFxuICBWaWV3VHlwZVxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQge1xuICBNYXJrZG93blZpZXcsXG4gIFRBYnN0cmFjdEZpbGUsXG4gIFRGaWxlLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUge1xuICBQYXRoT3JBYnN0cmFjdEZpbGUsXG4gIFBhdGhPckZpbGUsXG4gIFBhdGhPckZvbGRlclxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VMb2NrQ29tcG9uZW50IH0gZnJvbSAnLi9yZXNvdXJjZS1sb2NrLnRzJztcblxuaW1wb3J0IHsgcmV0cnlXaXRoVGltZW91dE5vdGljZSB9IGZyb20gJy4vYXN5bmMtd2l0aC1ub3RpY2UudHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlciB9IGZyb20gJy4vZGVidWcudHMnO1xuaW1wb3J0IHtcbiAgYXNGaWxlLFxuICBhc0ZvbGRlcixcbiAgRmlsZVN5c3RlbVR5cGUsXG4gIGdldEFic3RyYWN0RmlsZSxcbiAgZ2V0QWJzdHJhY3RGaWxlT3JOdWxsLFxuICBnZXRGaWxlLFxuICBnZXRGaWxlT3JOdWxsLFxuICBnZXRGaWxlU3lzdGVtVHlwZSxcbiAgZ2V0Rm9sZGVyLFxuICBnZXRGb2xkZXJPck51bGwsXG4gIGdldFBhdGgsXG4gIGlzRmlsZSxcbiAgaXNNYXJrZG93bkZpbGUsXG4gIGlzTm90ZVxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiB7QGxpbmsgY3JlYXRlRm9sZGVyU2FmZX0uXG4gKi9cbmV4cG9ydCBlbnVtIENyZWF0ZUZvbGRlclNhZmVSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGZvbGRlciB3YXMgY3JlYXRlZC5cbiAgICovXG4gIENyZWF0ZWQgPSAnY3JlYXRlZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2FzIG5vdCBjcmVhdGVkIGJlY2F1c2UgaXQgYWxyZWFkeSBleGlzdHMuXG4gICAqL1xuICBOb3RDcmVhdGVkID0gJ25vdC1jcmVhdGVkJ1xufVxuXG4vKipcbiAqIEEgYmVoYXZpb3IgZm9yIGhhbmRsaW5nIGVtcHR5IGZvbGRlcnMgZHVyaW5nIGNsZWFudXAuXG4gKi9cbmV4cG9ydCBlbnVtIEVtcHR5Rm9sZGVyQmVoYXZpb3Ige1xuICAvKipcbiAgICogRGVsZXRlIHRoZSBlbXB0eSBmb2xkZXIuXG4gICAqL1xuICBEZWxldGUgPSAnRGVsZXRlJyxcblxuICAvKipcbiAgICogRGVsZXRlIHRoZSBlbXB0eSBmb2xkZXIgYW5kIGFsbCBpdHMgZW1wdHkgcGFyZW50cy5cbiAgICovXG4gIERlbGV0ZVdpdGhFbXB0eVBhcmVudHMgPSAnRGVsZXRlV2l0aEVtcHR5UGFyZW50cycsXG5cbiAgLyoqXG4gICAqIEtlZXAgdGhlIGVtcHR5IGZvbGRlci5cbiAgICovXG4gIEtlZXAgPSAnS2VlcCdcbn1cblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIHtAbGluayBpbnZva2VGaWxlQWN0aW9uU2FmZX0uXG4gKi9cbmV4cG9ydCBlbnVtIEludm9rZUZpbGVBY3Rpb25TYWZlUmVzdWx0IHtcbiAgSW52b2tlZCA9ICdpbnZva2VkJyxcbiAgTm90SW52b2tlZCA9ICdub3QtaW52b2tlZCdcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY2xlYW51cEVtcHR5Rm9sZGVyc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYW51cEVtcHR5Rm9sZGVyc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9yIGRldGVybWluaW5nIGhvdyBlbXB0eSBmb2xkZXJzIGFyZSBjbGVhbmVkIHVwLlxuICAgKi9cbiAgcmVhZG9ubHkgZW1wdHlGb2xkZXJCZWhhdmlvcjogRW1wdHlGb2xkZXJCZWhhdmlvcjtcblxuICAvKipcbiAgICogVGhlIHBhdGhzIG9mIHRoZSBmb2xkZXJzIHRvIGNsZWFuIHVwIHdoZW4gZW1wdHkuXG4gICAqL1xuICByZWFkb25seSBmb2xkZXJQYXRoczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciB7QGxpbmsgcHJvY2Vzc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudEFyZ3VtZW50cyB7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb3B5U2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29weVNhZmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcGF0aCB0byBjb3B5IHRoZSBmaWxlIG9yIGZvbGRlciB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBwYXRoLCBmaWxlIG9yIGZvbGRlciB0byBjb3B5LiBBIGZvbGRlciBpcyBjb3BpZWQgd2l0aCBpdHMgd2hvbGUgc3VidHJlZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QWJzdHJhY3RGaWxlUGF0aFNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEFic3RyYWN0RmlsZVBhdGhTYWZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgZmlsZSBvciBmb2xkZXIgdG8gZ2V0IGEgc2FmZSBwYXRoIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IEZpbGVTeXN0ZW1UeXBlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIGFic3RyYWN0IGZpbGUgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGFic3RyYWN0IGZpbGUgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IEZpbGVTeXN0ZW1UeXBlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRTYWZlUmVuYW1lUGF0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0U2FmZVJlbmFtZVBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcGF0aCB0byByZW5hbWUgdGhlIGFic3RyYWN0IGZpbGUgdG8uXG4gICAqL1xuICByZWFkb25seSBuZXdQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvciBhYnN0cmFjdCBmaWxlIHRvIHJlbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFBhdGhPckFic3RyYWN0RmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnZva2VXaXRoRmlsZVN5c3RlbUxvY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVdpdGhGaWxlU3lzdGVtTG9ja1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgY29udGVudCBvZiB0aGUgZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5ICRmdW5jdGlvbjogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgZmlsZSBzeXN0ZW0gbG9jayBvZi5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGlzQ2hpbGRPclNlbGZ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElzQ2hpbGRPclNlbGZQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBhIGNoaWxkIG9yIHNlbGYuXG4gICAqL1xuICByZWFkb25seSBjaGlsZFBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZTtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byBjaGVjayB3aGV0aGVyIGl0IGlzIGEgcGFyZW50IG9yIHNlbGYuXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGlzQ2hpbGR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElzQ2hpbGRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBhIGNoaWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBhIHBhcmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudFBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcHJvY2Vzc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc09wdGlvbnMgZXh0ZW5kcyBSZXRyeU9wdGlvbnMge1xuICAvKipcbiAgICogUGx1Z2luIG5vdGljZSBjb21wb25lbnQgdXNlZCB0byBzaG93IHRoZSB0aW1lb3V0IG5vdGljZS4gV2hlbiBgbnVsbGAsIG5vIHRpbWVvdXQgbm90aWNlIGlzIHNob3duXG4gICAqIHJlZ2FyZGxlc3Mgb2Yge0BsaW5rIFByb2Nlc3NPcHRpb25zLnNob3VsZFNob3dUaW1lb3V0Tm90aWNlfTsgdGhlIHRpbWVvdXQgaXMgb25seSBsb2dnZWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IG51bGwgfCBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIEFuIHJlc291cmNlLWxvY2sgY29tcG9uZW50IHVzZWQgdG8gbG9jayB0aGUgZmlsZSdzIGVkaXRvciByZWFkLW9ubHkgZm9yIHRoZSBkdXJhdGlvbiBvZlxuICAgKiBwcm9jZXNzaW5nLiBUaGUgbG9jayBpcyByZWZlcmVuY2UtY291bnRlZCwgc28gaXQgY29tcG9zZXMgd2l0aCBhbnkgb3V0ZXIgb3BlcmF0aW9uLWxldmVsIGxvY2tcbiAgICogb24gdGhlIHNhbWUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbCB8IFJlc291cmNlTG9ja0NvbXBvbmVudDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmYWlsIGlmIHRoZSBmaWxlIGlzIG1pc3Npbmcgb3IgZGVsZXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGYWlsT25NaXNzaW5nRmlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHRpbWVvdXQgbm90aWNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dUaW1lb3V0Tm90aWNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcHJvY2Vzc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc1BhcmFtcyBleHRlbmRzIFByb2Nlc3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSwgdHlwaWNhbGx5IHVzZWQgZm9yIGFjY2Vzc2luZyB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSB2YWx1ZSBwcm92aWRlciB0aGF0IHJldHVybnMgdGhlIG5ldyBjb250ZW50IGJhc2VkIG9uIHRoZSBvbGQgY29udGVudCBvZiB0aGUgZmlsZS5cbiAgICogSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgb2xkIGNvbnRlbnQgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgdGhlIG5ldyBjb250ZW50LlxuICAgKlxuICAgKiBBIGZ1bmN0aW9uIGhhcyB0aHJlZSBvdXRjb21lczpcbiAgICpcbiAgICogLSBgbnVsbGAgXHUyMDE0IHRoZSBuZXcgY29udGVudCBjYW5ub3QgYmUgcHJvZHVjZWQgWUVUOyB0aGUgcHJvY2VzcyBpcyByZXRyaWVkLlxuICAgKiAtIHRoZSBvbGQgY29udGVudCwgcmV0dXJuZWQgdW5jaGFuZ2VkIFx1MjAxNCB0aGVyZSBpcyBub3RoaW5nIHRvIHdyaXRlOyB0aGUgcHJvY2VzcyBjb21wbGV0ZXMgd2l0aG91dFxuICAgKiAgIHRvdWNoaW5nIHRoZSBmaWxlLiBVc2UgdGhpcyBmb3IgYSByZWZ1c2FsIHRoYXQgaXMgcGVybWFuZW50LCBhcyByZXR1cm5pbmcgYG51bGxgIGZvciBvbmUgcmV0cmllc1xuICAgKiAgIGZvcmV2ZXIgYW5kIGhvbGRzIHRoZSBvcGVyYXRpb24gb3Blbi5cbiAgICogLSBhbnkgb3RoZXIgc3RyaW5nIFx1MjAxNCB0aGUgY29udGVudCB0byB3cml0ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5ld0NvbnRlbnRQcm92aWRlcjogVmFsdWVQcm92aWRlcjxudWxsIHwgc3RyaW5nLCBDb250ZW50QXJndW1lbnRzPjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byBiZSBwcm9jZXNzZWQuIEl0IGNhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBhdGggb3IgYSBmaWxlIG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlbmFtZVNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmFtZVNhZmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcGF0aCB0byByZW5hbWUgdGhlIGZpbGUgdG8uXG4gICAqL1xuICByZWFkb25seSBuZXdQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvciBhYnN0cmFjdCBmaWxlIHRvIHJlbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFBhdGhPckFic3RyYWN0RmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xufVxuXG5pbnRlcmZhY2UgQ29weUZvbGRlclNhZmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgdG8gY29weS5cbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlcjogVEZvbGRlcjtcblxuICAvKipcbiAgICogVGhlIG5ldyBwYXRoIHRvIGNvcHkgdGhlIGZvbGRlciB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEludm9rZUZpbGVBY3Rpb25TYWZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHBlcmZvcm0gb24gdGhlIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlIC0gVGhlIGZpbGUgdG8gcGVyZm9ybSB0aGUgYWN0aW9uIG9uLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFjdGlvbiBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVBY3Rpb246IChmaWxlOiBURmlsZSkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIENsZWFucyB1cCBlbXB0eSBmb2xkZXJzIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4ge0BsaW5rIEVtcHR5Rm9sZGVyQmVoYXZpb3J9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgY2xlYW5pbmcgdXAgZW1wdHkgZm9sZGVycy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY2xlYW51cCBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsZWFudXBFbXB0eUZvbGRlcnMocGFyYW1zOiBDbGVhbnVwRW1wdHlGb2xkZXJzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZW1wdHlGb2xkZXJCZWhhdmlvcixcbiAgICBmb2xkZXJQYXRoc1xuICB9ID0gcGFyYW1zO1xuICBmb3IgKGNvbnN0IGZvbGRlclBhdGggb2YgZm9sZGVyUGF0aHMpIHtcbiAgICBzd2l0Y2ggKGVtcHR5Rm9sZGVyQmVoYXZpb3IpIHtcbiAgICAgIGNhc2UgRW1wdHlGb2xkZXJCZWhhdmlvci5EZWxldGU6IHtcbiAgICAgICAgYXdhaXQgZGVsZXRlRW1wdHlGb2xkZXIoYXBwLCBmb2xkZXJQYXRoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVtcHR5Rm9sZGVyQmVoYXZpb3IuRGVsZXRlV2l0aEVtcHR5UGFyZW50czoge1xuICAgICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeShhcHAsIGZvbGRlclBhdGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRW1wdHlGb2xkZXJCZWhhdmlvci5LZWVwOiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBhc3NlcnROZXZlcihlbXB0eUZvbGRlckJlaGF2aW9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb3BpZXMgYSBmaWxlIG9yIGZvbGRlciBzYWZlbHkgaW4gdGhlIHZhdWx0LiBBIGZvbGRlciBpcyBjb3BpZWQgd2l0aCBpdHMgd2hvbGUgc3VidHJlZSwgZW1wdHlcbiAqIHN1YmZvbGRlcnMgaW5jbHVkZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBjb3B5aW5nIHRoZSBmaWxlIG9yIGZvbGRlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5ldyBwYXRoIG9mIHRoZSBjb3B5LlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgZGVzdGluYXRpb24gcmVzb2x2ZXMgaW5zaWRlIHRoZSBzb3VyY2UgZm9sZGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weVNhZmUocGFyYW1zOiBDb3B5U2FmZVBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3UGF0aCxcbiAgICBvbGRQYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGFic3RyYWN0RmlsZSA9IGdldEFic3RyYWN0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZTogb2xkUGF0aE9yRmlsZSB9KTtcblxuICBpZiAoYWJzdHJhY3RGaWxlLnBhdGggPT09IG5ld1BhdGgpIHtcbiAgICByZXR1cm4gbmV3UGF0aDtcbiAgfVxuXG4gIGlmICghaXNGaWxlKGFic3RyYWN0RmlsZSkpIHtcbiAgICByZXR1cm4gYXdhaXQgY29weUZvbGRlclNhZmUoeyBhcHAsIGZvbGRlcjogYXNGb2xkZXIoYWJzdHJhY3RGaWxlKSwgbmV3UGF0aCB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZvbGRlclBhdGggPSBwYXJlbnRGb2xkZXJQYXRoKG5ld1BhdGgpO1xuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgbmV3Rm9sZGVyUGF0aCk7XG5cbiAgY29uc3QgbmV3QXZhaWxhYmxlUGF0aCA9IGdldEF2YWlsYWJsZVBhdGgoYXBwLCBuZXdQYXRoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jb3B5KGFic3RyYWN0RmlsZSwgbmV3QXZhaWxhYmxlUGF0aCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKG5ld0F2YWlsYWJsZVBhdGgpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QXZhaWxhYmxlUGF0aDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZm9sZGVyIHNhZmVseSBpbiB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHtAbGluayBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0LkNyZWF0ZWR9IGlmIHRoZSBmb2xkZXIgd2FzXG4gKiBjcmVhdGVkLCBvciB7QGxpbmsgQ3JlYXRlRm9sZGVyU2FmZVJlc3VsdC5Ob3RDcmVhdGVkfSBpZiBpdCBhbHJlYWR5IGV4aXN0ZWQuXG4gKiBAdGhyb3dzIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjcmVhdGluZyB0aGUgZm9sZGVyIGFuZCBpdCBzdGlsbCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRm9sZGVyU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVGb2xkZXJTYWZlUmVzdWx0PiB7XG4gIGlmIChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMocGF0aCkpIHtcbiAgICByZXR1cm4gQ3JlYXRlRm9sZGVyU2FmZVJlc3VsdC5Ob3RDcmVhdGVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAudmF1bHQuY3JlYXRlRm9sZGVyKHBhdGgpO1xuICAgIHJldHVybiBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0LkNyZWF0ZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKHBhdGgpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIENyZWF0ZUZvbGRlclNhZmVSZXN1bHQuQ3JlYXRlZDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgdmF1bHQgd2l0aCBwYXJlbnQgZm9sZGVycyBpZiBuZWVkZWQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gY3JlYXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxlIGFuZCBhbGwgaXRzIGNyZWF0ZWQgcGFyZW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBvcmFyeUZpbGUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgZmlsZSA9IGdldEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGggfSk7XG4gIGlmIChmaWxlKSB7XG4gICAgcmV0dXJuIG5vb3BBc3luYztcbiAgfVxuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wb3JhcnlGb2xkZXIoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jcmVhdGUocGF0aCwgJycpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoIWZpbGUuZGVsZXRlZCkge1xuICAgICAgYXdhaXQgdHJhc2hTYWZlKGFwcCwgZmlsZSk7XG4gICAgfVxuICAgIGF3YWl0IGZvbGRlckNsZWFudXAoKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IGZvbGRlciBpbiB0aGUgdmF1bHQgd2l0aCBwYXJlbnQgZm9sZGVycyBpZiBuZWVkZWQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZvbGRlciBhbmQgYWxsIGl0cyBjcmVhdGVkIHBhcmVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUZW1wb3JhcnlGb2xkZXIoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBwYXRoT3JGb2xkZXI6IHBhdGggfSk7XG4gIGlmIChmb2xkZXIpIHtcbiAgICByZXR1cm4gbm9vcEFzeW5jO1xuICB9XG5cbiAgY29uc3QgZm9sZGVyUGF0aCA9IHBhcmVudEZvbGRlclBhdGgocGF0aCk7XG4gIGF3YWl0IGNyZWF0ZVRlbXBvcmFyeUZvbGRlcihhcHAsIGZvbGRlclBhdGgpO1xuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wb3JhcnlGb2xkZXIoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcblxuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgcGF0aCk7XG5cbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBmb2xkZXIgPSBnZXRGb2xkZXIoeyBhcHAsIHBhdGhPckZvbGRlcjogcGF0aCB9KTtcbiAgICBpZiAoIWZvbGRlci5kZWxldGVkKSB7XG4gICAgICBhd2FpdCB0cmFzaFNhZmUoYXBwLCBmb2xkZXIpO1xuICAgIH1cbiAgICBhd2FpdCBmb2xkZXJDbGVhbnVwKCk7XG4gIH07XG59XG5cbi8qKlxuICogRGVsZXRlcyBhbiBlbXB0eSBmb2xkZXIuXG4gKlxuICogQSBmb2xkZXIgdGhlIHZhdWx0IGluZGV4IHN0aWxsIGhvbGRzIGJ1dCB0aGUgZGlzayBoYXMgYWxyZWFkeSBsb3N0IGlzIG5vdCBlbXB0eTogaXQgaXMgbm90aGluZyB0byBkZWxldGUsIHNvIGl0XG4gKiBpcyBsZWZ0IGFsb25lIHJhdGhlciB0aGFuIGhhbmRlZCB0byB0aGUgdHJhc2ggYXMgYSBtaXNzaW5nIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgZm9sZGVyIHRvIGRlbGV0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZm9sZGVyIGlzIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVFbXB0eUZvbGRlcihhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBudWxsIHwgUGF0aE9yRm9sZGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh7IGFwcCwgcGF0aE9yRm9sZGVyIH0pO1xuICBpZiAoIWZvbGRlciB8fCAhYXdhaXQgaXNFeGlzdGluZ0VtcHR5Rm9sZGVyKGFwcCwgZm9sZGVyKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCB0cmFzaFNhZmUoYXBwLCBmb2xkZXIpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgZW1wdHkgZm9sZGVyIGhpZXJhcmNoeSBzdGFydGluZyBmcm9tIHRoZSBnaXZlbiBmb2xkZXIuXG4gKlxuICogVGhlIHdhbGsgc3RvcHMgYXQgdGhlIGZpcnN0IGZvbGRlciB0aGF0IGlzIG5vdCBlbXB0eSBvciBubyBsb25nZXIgZXhpc3RzIG9uIGRpc2suXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgZm9sZGVyIHRvIHN0YXJ0IHJlbW92aW5nIGVtcHR5IGhpZXJhcmNoeSBmcm9tLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbXB0eSBoaWVyYXJjaHkgaXMgZGVsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUVtcHR5Rm9sZGVySGllcmFyY2h5KGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IG51bGwgfCBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh7IGFwcCwgcGF0aE9yRm9sZGVyIH0pO1xuXG4gIHdoaWxlIChmb2xkZXIpIHtcbiAgICBpZiAoIWF3YWl0IGlzRXhpc3RpbmdFbXB0eUZvbGRlcihhcHAsIGZvbGRlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gZm9sZGVyLnBhcmVudDtcbiAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlcihhcHAsIGZvbGRlcik7XG4gICAgZm9sZGVyID0gcGFyZW50O1xuICB9XG59XG5cbi8qKlxuICogR2V0cyBhIHNhZmUgcGF0aCBmb3IgYSBmaWxlIG9yIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGdldHRpbmcgYSBzYWZlIHBhdGguXG4gKiBAcmV0dXJucyBUaGUgc2FmZSBwYXRoIGZvciB0aGUgZmlsZSBvciBmb2xkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBYnN0cmFjdEZpbGVQYXRoU2FmZShwYXJhbXM6IEdldEFic3RyYWN0RmlsZVBhdGhTYWZlUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBwYXRoLFxuICAgIHR5cGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgYWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoIH0pO1xuXG4gIHJldHVybiBhYnN0cmFjdEZpbGUgJiYgZ2V0RmlsZVN5c3RlbVR5cGUoYWJzdHJhY3RGaWxlKSA9PT0gdHlwZSA/IHBhdGggOiBnZXRBdmFpbGFibGVQYXRoKGFwcCwgcGF0aCk7XG59XG5cbi8qKlxuICogR2V0cyBhbiBhdmFpbGFibGUgcGF0aCBmb3IgYSBmaWxlIGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBnZXQgYW4gYXZhaWxhYmxlIHBhdGggZm9yLlxuICogQHJldHVybnMgVGhlIGF2YWlsYWJsZSBwYXRoIGZvciB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF2YWlsYWJsZVBhdGgoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUocGF0aCk7XG4gIHJldHVybiBhcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aChqb2luKGRpcm5hbWUocGF0aCksIGJhc2VuYW1lKHBhdGgsIGV4dGVuc2lvbikpLCBleHRlbnNpb24uc2xpY2UoMSkpO1xufVxuXG4vKipcbiAqIEdldHMgYSBzYWZlIGZpbGUgcGF0aCBmb3IgYSBmaWxlIG9yIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBvciBmb2xkZXIgdG8gZ2V0IGEgc2FmZSBwYXRoIGZvci5cbiAqIEByZXR1cm5zIFRoZSBzYWZlIHBhdGggZm9yIHRoZSBmaWxlIG9yIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVQYXRoU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldEFic3RyYWN0RmlsZVBhdGhTYWZlKHsgYXBwLCBwYXRoLCB0eXBlOiBGaWxlU3lzdGVtVHlwZS5GaWxlIH0pO1xufVxuXG4vKipcbiAqIEdldHMgYSBzYWZlIGZvbGRlciBwYXRoIGZvciBhIGZpbGUgb3IgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGZvbGRlciB0byBnZXQgYSBzYWZlIHBhdGggZm9yLlxuICogQHJldHVybnMgVGhlIHNhZmUgcGF0aCBmb3IgdGhlIGZpbGUgb3IgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9sZGVyUGF0aFNhZmUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBYnN0cmFjdEZpbGVQYXRoU2FmZSh7IGFwcCwgcGF0aCwgdHlwZTogRmlsZVN5c3RlbVR5cGUuRm9sZGVyIH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBNYXJrZG93biBmaWxlcyBmcm9tIHRoZSBhcHAncyB2YXVsdCBhbmQgc29ydHMgdGhlbSBhbHBoYWJldGljYWxseSBieSB0aGVpciBmaWxlIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBNYXJrZG93biBmaWxlcyBzb3J0ZWQgYnkgZmlsZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlc1NvcnRlZChhcHA6IEFwcCk6IFRGaWxlW10ge1xuICByZXR1cm4gYXBwLnZhdWx0LmdldE1hcmtkb3duRmlsZXMoKS5zb3J0KChhLCBiKSA9PiBhLnBhdGgubG9jYWxlQ29tcGFyZShiLnBhdGgpKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgYWxsIG5vdGUgZmlsZXMgZnJvbSB0aGUgYXBwJ3MgdmF1bHQgYW5kIHNvcnRzIHRoZW0gYWxwaGFiZXRpY2FsbHkgYnkgdGhlaXIgZmlsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWxsIG5vdGUgZmlsZXMgaW4gdGhlIHZhdWx0IHNvcnRlZCBieSBmaWxlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3RlRmlsZXNTb3J0ZWQoYXBwOiBBcHApOiBURmlsZVtdIHtcbiAgcmV0dXJuIGFwcC52YXVsdC5nZXRBbGxMb2FkZWRGaWxlcygpLmZpbHRlcigoZmlsZSkgPT4gaXNGaWxlKGZpbGUpICYmIGlzTm90ZShmaWxlKSkuc29ydCgoYSwgYikgPT4gYS5wYXRoLmxvY2FsZUNvbXBhcmUoYi5wYXRoKSkgYXMgVEZpbGVbXTtcbn1cblxuLyoqXG4gKiBHZXRzIG9yIGNyZWF0ZXMgYW4gYWJzdHJhY3QgZmlsZSBzYWZlbHkgaW4gdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIElmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBnZXR0aW5nIG9yIGNyZWF0aW5nIHRoZSBhYnN0cmFjdCBmaWxlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgYWJzdHJhY3QgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZShwYXJhbXM6IEdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZVBhcmFtcyk6IFByb21pc2U8VEFic3RyYWN0RmlsZT4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIHR5cGVcbiAgfSA9IHBhcmFtcztcbiAgbGV0IHsgcGF0aCB9ID0gcGFyYW1zO1xuICBwYXRoID0gZ2V0QWJzdHJhY3RGaWxlUGF0aFNhZmUoeyBhcHAsIHBhdGgsIHR5cGUgfSk7XG4gIGNvbnN0IGFic3RyYWN0RmlsZSA9IGdldEFic3RyYWN0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgaWYgKGFic3RyYWN0RmlsZSkge1xuICAgIHJldHVybiBhYnN0cmFjdEZpbGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEZpbGVTeXN0ZW1UeXBlLkZpbGU6IHtcbiAgICAgIC8vIGB2YXVsdC5jcmVhdGVgIGRvZXMgbm90IGNyZWF0ZSBtaXNzaW5nIHBhcmVudCBmb2xkZXJzOyB0aGUgYWRhcHRlciByZWZ1c2VzIHRoZSB3cml0ZS5cbiAgICAgIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcbiAgICAgIHJldHVybiBhd2FpdCBhcHAudmF1bHQuY3JlYXRlKHBhdGgsICcnKTtcbiAgICB9XG4gICAgY2FzZSBGaWxlU3lzdGVtVHlwZS5Gb2xkZXI6IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHAudmF1bHQuY3JlYXRlRm9sZGVyKHBhdGgpO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBhc3NlcnROZXZlcih0eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIG9yIGNyZWF0ZXMgYSBmaWxlIHNhZmVseSBpbiB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBnZXQgb3IgY3JlYXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRmlsZVNhZmUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8VEZpbGU+IHtcbiAgcmV0dXJuIGFzRmlsZShhd2FpdCBnZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmUoeyBhcHAsIHBhdGgsIHR5cGU6IEZpbGVTeXN0ZW1UeXBlLkZpbGUgfSkpO1xufVxuXG4vKipcbiAqIEdldHMgb3IgY3JlYXRlcyBhIGZvbGRlciBzYWZlbHkgaW4gdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIElmIHRoZSBmb2xkZXIgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiB0aGUgZm9sZGVyIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGZvbGRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRm9sZGVyU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxURm9sZGVyPiB7XG4gIHJldHVybiBhc0ZvbGRlcihhd2FpdCBnZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmUoeyBhcHAsIHBhdGgsIHR5cGU6IEZpbGVTeXN0ZW1UeXBlLkZvbGRlciB9KSk7XG59XG5cbi8qKlxuICogR2V0cyBhIHNhZmUgcmVuYW1lIHBhdGggZm9yIGEgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGdldHRpbmcgYSBzYWZlIHJlbmFtZSBwYXRoLlxuICogQHJldHVybnMgVGhlIHNhZmUgcmVuYW1lIHBhdGggZm9yIHRoZSBhYnN0cmFjdCBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FmZVJlbmFtZVBhdGgocGFyYW1zOiBHZXRTYWZlUmVuYW1lUGF0aFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYXBwLCBvbGRQYXRoT3JBYnN0cmFjdEZpbGUgfSA9IHBhcmFtcztcbiAgbGV0IHsgbmV3UGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBvbGRQYXRoID0gZ2V0UGF0aChhcHAsIG9sZFBhdGhPckFic3RyYWN0RmlsZSk7XG5cbiAgaWYgKGdldERhdGFBZGFwdGVyRXgoYXBwKS5pbnNlbnNpdGl2ZSkge1xuICAgIGxldCBmb2xkZXJQYXRoID0gZGlybmFtZShuZXdQYXRoKTtcbiAgICBsZXQgbm9uRXhpc3RpbmdQYXRoID0gYmFzZW5hbWUobmV3UGF0aCk7XG4gICAgbGV0IGZvbGRlcjogbnVsbCB8IFRGb2xkZXI7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gVGhlcmUgaXMgbm8gZWxlZ2FudCB3YXkgdG8gcGVyZm9ybSBpbmZpbml0ZSBsb29wcy5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBpc0Nhc2VJbnNlbnNpdGl2ZTogdHJ1ZSwgcGF0aE9yRm9sZGVyOiBmb2xkZXJQYXRoIH0pO1xuICAgICAgaWYgKGZvbGRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG5vbkV4aXN0aW5nUGF0aCA9IGpvaW4oYmFzZW5hbWUoZm9sZGVyUGF0aCksIG5vbkV4aXN0aW5nUGF0aCk7XG4gICAgICBmb2xkZXJQYXRoID0gZGlybmFtZShmb2xkZXJQYXRoKTtcbiAgICB9XG4gICAgbmV3UGF0aCA9IGpvaW4oZm9sZGVyLmdldFBhcmVudFByZWZpeCgpLCBub25FeGlzdGluZ1BhdGgpO1xuICB9XG5cbiAgcmV0dXJuIG9sZFBhdGgudG9Mb3dlckNhc2UoKSA9PT0gbmV3UGF0aC50b0xvd2VyQ2FzZSgpID8gbmV3UGF0aCA6IGdldEF2YWlsYWJsZVBhdGgoYXBwLCBuZXdQYXRoKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgZmlsZSBzeXN0ZW0gbG9jay5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGludm9raW5nIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBmaWxlIHN5c3RlbSBsb2NrLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW52b2tlV2l0aEZpbGVTeXN0ZW1Mb2NrKHBhcmFtczogSW52b2tlV2l0aEZpbGVTeXN0ZW1Mb2NrUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICAkZnVuY3Rpb24sXG4gICAgYXBwLFxuICAgIHBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGUgfSk7XG4gIGF3YWl0IGFwcC52YXVsdC5wcm9jZXNzKGZpbGUsIChjb250ZW50KSA9PiB7XG4gICAgJGZ1bmN0aW9uKGNvbnRlbnQpO1xuICAgIHJldHVybiBjb250ZW50O1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwYXRoIG9yIGZpbGUgaXMgYSBjaGlsZCBvZiBhbm90aGVyIHBhdGggb3IgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGNoZWNraW5nIHdoZXRoZXIgdGhlIGNoaWxkIHBhdGggb3IgZmlsZSBpcyBhIGNoaWxkIG9mIHRoZSBwYXJlbnQgcGF0aCBvciBmaWxlLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2hpbGQgcGF0aCBvciBmaWxlIGlzIGEgY2hpbGQgb2YgdGhlIHBhcmVudCBwYXRoIG9yIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NoaWxkKHBhcmFtczogSXNDaGlsZFBhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGNoaWxkUGF0aE9yRmlsZSxcbiAgICBwYXJlbnRQYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNoaWxkUGF0aCA9IGdldFBhdGgoYXBwLCBjaGlsZFBhdGhPckZpbGUpO1xuICBjb25zdCBwYXJlbnRQYXRoID0gZ2V0UGF0aChhcHAsIHBhcmVudFBhdGhPckZpbGUpO1xuXG4gIHJldHVybiBjaGlsZFBhdGggIT09IHBhcmVudFBhdGggJiYgKHBhcmVudFBhdGggPT09ICcvJyB8fCBjaGlsZFBhdGguc3RhcnRzV2l0aChgJHtwYXJlbnRQYXRofS9gKSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcGF0aCBvciBmaWxlIGlzIGEgY2hpbGQgb3Igc2VsZiBvZiBhbm90aGVyIHBhdGggb3IgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGNoZWNraW5nIHdoZXRoZXIgdGhlIGNoaWxkIHBhdGggb3IgZmlsZSBpcyBhIGNoaWxkIG9yIHNlbGYgb2YgdGhlIHBhcmVudCBwYXRoIG9yIGZpbGUuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjaGlsZCBwYXRoIG9yIGZpbGUgaXMgYSBjaGlsZCBvciBzZWxmIG9mIHRoZSBwYXJlbnQgcGF0aCBvciBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDaGlsZE9yU2VsZihwYXJhbXM6IElzQ2hpbGRPclNlbGZQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjaGlsZFBhdGhPckZpbGUsXG4gICAgcGFyZW50UGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBjaGlsZFBhdGggPSBnZXRQYXRoKGFwcCwgY2hpbGRQYXRoT3JGaWxlKTtcbiAgY29uc3QgcGFyZW50UGF0aCA9IGdldFBhdGgoYXBwLCBwYXJlbnRQYXRoT3JGaWxlKTtcbiAgcmV0dXJuIGNoaWxkUGF0aCA9PT0gcGFyZW50UGF0aCB8fCBpc0NoaWxkKHsgYXBwLCBjaGlsZFBhdGhPckZpbGUsIHBhcmVudFBhdGhPckZpbGUgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZm9sZGVyIGlzIGVtcHR5LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRm9sZGVyIC0gVGhlIHBhdGggb3IgZm9sZGVyIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmb2xkZXIgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0VtcHR5Rm9sZGVyKGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IFBhdGhPckZvbGRlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBsaXN0ZWRGaWxlcyA9IGF3YWl0IGxpc3RTYWZlKGFwcCwgZ2V0UGF0aChhcHAsIHBhdGhPckZvbGRlcikpO1xuICByZXR1cm4gbGlzdGVkRmlsZXMuZmlsZXMubGVuZ3RoID09PSAwICYmIGxpc3RlZEZpbGVzLmZvbGRlcnMubGVuZ3RoID09PSAwO1xufVxuXG4vKipcbiAqIFNhZmVseSBsaXN0cyB0aGUgZmlsZXMgYW5kIGZvbGRlcnMgYXQgdGhlIHNwZWNpZmllZCBwYXRoIGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBwYXRoIG9yIGZvbGRlciB0byBsaXN0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIHtAbGluayBMaXN0ZWRGaWxlc30gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxpc3RlZCBmaWxlcyBhbmQgZm9sZGVycy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RTYWZlKGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IFBhdGhPckZvbGRlcik6IFByb21pc2U8TGlzdGVkRmlsZXM+IHtcbiAgY29uc3QgcGF0aCA9IGdldFBhdGgoYXBwLCBwYXRoT3JGb2xkZXIpO1xuICBjb25zdCBFTVBUWSA9IHsgZmlsZXM6IFtdLCBmb2xkZXJzOiBbXSB9O1xuXG4gIGNvbnN0IHBhdGhTdGF0cyA9IGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLnN0YXQocGF0aCk7XG4gIGlmIChwYXRoU3RhdHM/LnR5cGUgIT09ICdmb2xkZXInKSB7XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubGlzdChwYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiBFTVBUWTtcbiAgfVxufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBhIGZpbGUgd2l0aCByZXRyeSBsb2dpYywgdXBkYXRpbmcgaXRzIGNvbnRlbnQgYmFzZWQgb24gYSBwcm92aWRlZCB2YWx1ZSBvciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHByb2Nlc3NpbmcgdGhlIGZpbGUuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuICpcbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgcHJvY2VzcyBmYWlscyBhZnRlciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXRyaWVzIG9yIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzKHBhcmFtczogUHJvY2Vzc1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5ld0NvbnRlbnRQcm92aWRlcixcbiAgICBwYXRoT3JGaWxlLFxuICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICByZXNvdXJjZUxvY2tDb21wb25lbnRcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgREVGQVVMVF9SRVRSWV9PUFRJT05TID0ge1xuICAgIHNob3VsZEZhaWxPbk1pc3NpbmdGaWxlOiB0cnVlLFxuICAgIHNob3VsZFNob3dUaW1lb3V0Tm90aWNlOiB0cnVlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzIC0tIERlZmF1bHQgdmFsdWUuXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDBcbiAgfTtcbiAgY29uc3QgZnVsbE9wdGlvbnMgPSB7IC4uLkRFRkFVTFRfUkVUUllfT1BUSU9OUywgLi4ucGFyYW1zIH07XG4gIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgZnVsbE9wdGlvbnMuYWJvcnRTaWduYWwgPSBhYm9ydFNpZ25hbEFueShmdWxsT3B0aW9ucy5hYm9ydFNpZ25hbCwgYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG5cbiAgLy8gUmVmZXJlbmNlLWNvdW50ZWQgbG9jazsgY29tcG9zZXMgd2l0aCBhbnkgb3V0ZXIgbG9jay4gUmVsZWFzZWQgYXQgZnVuY3Rpb24gc2NvcGUgZXhpdC5cbiAgdXNpbmcgX2xvY2sgPSByZXNvdXJjZUxvY2tDb21wb25lbnQ/LmxvY2tGb3JQYXRoKHsgb3BlcmF0aW9uTmFtZTogJ1Byb2Nlc3Mgbm90ZScsIHBhdGhPckZpbGUgfSk7XG5cbiAgYXdhaXQgcmV0cnlXaXRoVGltZW91dE5vdGljZSh7XG4gICAgYXN5bmMgb3BlcmF0aW9uRnVuY3Rpb24oYWJvcnRTaWduYWwpIHtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgIGNvbnN0IG9sZENvbnRlbnQgPSBhd2FpdCByZWFkU2FmZShhcHAsIHBhdGhPckZpbGUpO1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgaWYgKG9sZENvbnRlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHNob3VsZFRyZWF0TWlzc2luZ0ZpbGVBc1N1Y2Nlc3MoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IHJlc29sdmVWYWx1ZShuZXdDb250ZW50UHJvdmlkZXIsIHsgYWJvcnRTaWduYWwsIGNvbnRlbnQ6IG9sZENvbnRlbnQgfSk7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICBpZiAobmV3Q29udGVudCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBwcm92aWRlciBoYW5kZWQgYmFjayBleGFjdGx5IHdoYXQgaXQgd2FzIGdpdmVuOiB0aGVyZSBpcyBub3RoaW5nIHRvIHdyaXRlLCBhbmQgdGhlIG9wZXJhdGlvblxuICAgICAgLy8gaXMgY29tcGxldGUuIERpc3RpbmN0IGZyb20gYG51bGxgLCB3aGljaCBhc2tzIGZvciBhIHJldHJ5IFx1MjAxNCBhIHByb3ZpZGVyIHdob3NlIHJlZnVzYWwgdG8gcmV3cml0ZSBpc1xuICAgICAgLy8gcGVybWFuZW50IChzZWUgYGFwcGx5Q2FudmFzQ2hhbmdlc2ApIHdvdWxkIG90aGVyd2lzZSBzcGluIGZvcmV2ZXIgYW5kIGhvbGQgdGhlIHNoYXJlZCBvcGVyYXRpb25cbiAgICAgIC8vIHF1ZXVlIG9wZW4gYmVoaW5kIGl0LlxuICAgICAgaWYgKG5ld0NvbnRlbnQgPT09IG9sZENvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBpc1N1Y2Nlc3MgPSB0cnVlO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW52b2tlRmlsZUFjdGlvblNhZmUoe1xuICAgICAgICBhcHAsXG4gICAgICAgIGFzeW5jIGZpbGVBY3Rpb24oZmlsZSkge1xuICAgICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgICAgYXdhaXQgYXBwLnZhdWx0LnByb2Nlc3MoZmlsZSwgKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgICAgICBpZiAoY29udGVudCAhPT0gb2xkQ29udGVudCkge1xuICAgICAgICAgICAgICBnZXRPYnNpZGlhbkxpYkRlYnVnZ2VyKCdWYXVsdDpwcm9jZXNzJykoJ0NvbnRlbnQgaGFzIGNoYW5nZWQgc2luY2UgaXQgd2FzIHJlYWQuIFJldHJ5aW5nLi4uJywge1xuICAgICAgICAgICAgICAgIGFjdHVhbENvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBvbGRDb250ZW50LFxuICAgICAgICAgICAgICAgIHBhdGg6IGZpbGUucGF0aFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3Q29udGVudDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHBhdGhPckZpbGVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBJbnZva2VGaWxlQWN0aW9uU2FmZVJlc3VsdC5Ob3RJbnZva2VkID8gc2hvdWxkVHJlYXRNaXNzaW5nRmlsZUFzU3VjY2VzcygpIDogaXNTdWNjZXNzO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9jb25zaXN0ZW50LWZ1bmN0aW9uLXNjb3BpbmcgLS0gQ2xvc2VzIG92ZXIgYGZ1bGxPcHRpb25zYCBhbmQgYHBhdGhgIGZyb20gdGhlIGVuY2xvc2luZyBzY29wZSwgc28gaXQgY2Fubm90IGJlIGhvaXN0ZWQuXG4gICAgICBmdW5jdGlvbiBzaG91bGRUcmVhdE1pc3NpbmdGaWxlQXNTdWNjZXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZnVsbE9wdGlvbnMuc2hvdWxkRmFpbE9uTWlzc2luZ0ZpbGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJyR7cGF0aH0nIG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgb3BlcmF0aW9uTmFtZTogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnZhdWx0LnByb2Nlc3NGaWxlLCB7IGZpbGVQYXRoOiBwYXRoIH0pLFxuICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICByZXRyeU9wdGlvbnM6IGZ1bGxPcHRpb25zLFxuICAgIHNob3VsZFNob3dUaW1lb3V0Tm90aWNlOiBmdWxsT3B0aW9ucy5zaG91bGRTaG93VGltZW91dE5vdGljZVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgY29udGVudCBvZiBhIGZpbGUgc2FmZWx5IGZyb20gdGhlIHZhdWx0LlxuICpcbiAqIEl0IGNvdmVycyB0aGUgY2FzZSB3aGVuIHRoZSBmaWxlIHdhcyByZW1vdmVkIGR1cmluZyB0aGUgcmVhZGluZy5cbiAqXG4gKiBUaGlzIGlzIE5PVCBhIHB1cmUgcmVhZDogaXQgY2FsbHMge0BsaW5rIHNhdmVOb3RlfSBmaXJzdCwgd2hpY2ggc2F2ZXMgYW55IG9wZW4gZWRpdG9yIHZpZXcgb2YgdGhlXG4gKiBub3RlIHRoYXQgaGFzIHVuc2F2ZWQgY2hhbmdlcywgc28gdGhlIGNvbnRlbnQgaXQgcmV0dXJucyBpcyB3aGF0IHRoZSB1c2VyIHNlZXMuIERvIG5vdCBjYWxsIGl0IGZyb21cbiAqIGFuIGF1dG9tYXRpYyB0cmlnZ2VyIHRoYXQgb25seSBkZWNpZGVzIHdoZXRoZXIgdG8gYWN0LiBTZWUgYGdldENhY2hlU2FmZWAgaW5cbiAqIGBvYnNpZGlhbi1kZXYtdXRpbHMvb2JzaWRpYW4vbWV0YWRhdGEtY2FjaGVgIGZvciB3aHkuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byByZWFkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBvciBgbnVsbGAgaWYgdGhlIGZpbGUgaXMgbWlzc2luZyBvciBkZWxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFNhZmUoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgbGV0IGNvbnRlbnQ6IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICBhd2FpdCBpbnZva2VGaWxlQWN0aW9uU2FmZSh7XG4gICAgYXBwLFxuICAgIGFzeW5jIGZpbGVBY3Rpb24oZmlsZSkge1xuICAgICAgYXdhaXQgc2F2ZU5vdGUoYXBwLCBmaWxlKTtcbiAgICAgIGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcbiAgICB9LFxuICAgIHBhdGhPckZpbGVcbiAgfSk7XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIFJlbmFtZXMgYSBmaWxlIHNhZmVseSBpbiB0aGUgdmF1bHQuXG4gKiBJZiB0aGUgbmV3IHBhdGggYWxyZWFkeSBleGlzdHMsIHRoZSBmaWxlIHdpbGwgYmUgcmVuYW1lZCB0byBhbiBhdmFpbGFibGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlbmFtaW5nIHRoZSBmaWxlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgbmV3IHBhdGggb2YgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5hbWVTYWZlKHBhcmFtczogUmVuYW1lU2FmZVBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3UGF0aCxcbiAgICBvbGRQYXRoT3JBYnN0cmFjdEZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3Qgb2xkQWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlKHsgYXBwLCBwYXRoT3JGaWxlOiBvbGRQYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG5cbiAgY29uc3QgbmV3QXZhaWxhYmxlUGF0aCA9IGdldFNhZmVSZW5hbWVQYXRoKHsgYXBwLCBuZXdQYXRoLCBvbGRQYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG5cbiAgaWYgKG9sZEFic3RyYWN0RmlsZS5wYXRoLnRvTG93ZXJDYXNlKCkgPT09IG5ld0F2YWlsYWJsZVBhdGgudG9Mb3dlckNhc2UoKSkge1xuICAgIGlmIChvbGRBYnN0cmFjdEZpbGUucGF0aCAhPT0gbmV3UGF0aCkge1xuICAgICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnJlbmFtZUZpbGUob2xkQWJzdHJhY3RGaWxlLCBuZXdBdmFpbGFibGVQYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG4gIH1cblxuICBjb25zdCBuZXdGb2xkZXJQYXRoID0gcGFyZW50Rm9sZGVyUGF0aChuZXdBdmFpbGFibGVQYXRoKTtcbiAgYXdhaXQgY3JlYXRlRm9sZGVyU2FmZShhcHAsIG5ld0ZvbGRlclBhdGgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnJlbmFtZUZpbGUob2xkQWJzdHJhY3RGaWxlLCBuZXdBdmFpbGFibGVQYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMobmV3QXZhaWxhYmxlUGF0aCkgfHwgYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhvbGRBYnN0cmFjdEZpbGUucGF0aCkpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdBdmFpbGFibGVQYXRoO1xufVxuXG4vKipcbiAqIFNhdmVzIHRoZSBzcGVjaWZpZWQgbm90ZSBpbiB0aGUgT2JzaWRpYW4gYXBwLlxuICpcbiAqIENhbGxzIGB2aWV3LnNhdmUoKWAgb24gZXZlcnkgb3BlbiBtYXJrZG93biB2aWV3IG9mIHRoZSBub3RlIHRoYXQgaGFzIHVuc2F2ZWQgY2hhbmdlcy4gVGhpcyBpcyBhXG4gKiB3cml0ZSwgYW5kIHNldmVyYWwgaGVscGVycyB3aG9zZSBuYW1lcyByZWFkIGFzIHJlYWRzIGNhbGwgaXQ6IHtAbGluayByZWFkU2FmZX0sIGFuZCBgZ2V0Q2FjaGVTYWZlYCxcbiAqIGBnZXRGcm9udG1hdHRlclNhZmVgIGFuZCBgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmVgIGluIGBvYnNpZGlhbi1kZXYtdXRpbHMvb2JzaWRpYW4vbWV0YWRhdGEtY2FjaGVgLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgbm90ZSB0byBiZSBzYXZlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbm90ZSBpcyBzYXZlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVOb3RlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghaXNNYXJrZG93bkZpbGUocGF0aE9yRmlsZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIGZvciAoY29uc3QgbGVhZiBvZiBhcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShWaWV3VHlwZS5NYXJrZG93bikpIHtcbiAgICBpZiAobGVhZi52aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ICYmIGxlYWYudmlldy5maWxlPy5wYXRoID09PSBwYXRoICYmIGxlYWYudmlldy5kaXJ0eSkge1xuICAgICAgYXdhaXQgbGVhZi52aWV3LnNhdmUoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFzaGVzIGFuIGFic3RyYWN0IGZpbGUgc2FmZWx5IGZyb20gdGhlIHZhdWx0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gdHJhc2guXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaXMgdHJhc2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYXNoU2FmZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGUgfSk7XG4gIGlmICghZmlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShmaWxlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhmaWxlLnBhdGgpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBnZXRPYnNpZGlhbkxpYkRlYnVnZ2VyKCdWYXVsdDp0cmFzaFNhZmUnKShgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJhc2hpbmcgJHtmaWxlLnBhdGh9LCBidXQgdGhlIGZpbGUgbm8gbG9uZ2VyIGV4aXN0cy5gLCB7IGVycm9yLCBwYXRoOiBmaWxlLnBhdGggfSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY29weUZvbGRlclNhZmUocGFyYW1zOiBDb3B5Rm9sZGVyU2FmZVBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZm9sZGVyLFxuICAgIG5ld1BhdGhcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgbmV3QXZhaWxhYmxlUGF0aCA9IGdldEF2YWlsYWJsZVBhdGgoYXBwLCBuZXdQYXRoKTtcblxuICAvLyBDb3B5aW5nIGEgZm9sZGVyIGludG8gaXRzIG93biBzdWJ0cmVlIG1ha2VzIHRoZSB3YWxrIGJlbG93IGdyb3cgdGhlIHNvdXJjZSB0cmVlIGFzIGl0IHJlYWRzIGl0LlxuICAvLyBSZWZ1c2luZyBpcyB0aGUgb25seSBmYWl0aGZ1bCBhbnN3ZXI6IHRoZXJlIGlzIG5vIGZpbml0ZSBjb3B5IHRvIG1ha2UuXG4gIGlmIChpc0NoaWxkT3JTZWxmKHsgYXBwLCBjaGlsZFBhdGhPckZpbGU6IG5ld0F2YWlsYWJsZVBhdGgsIHBhcmVudFBhdGhPckZpbGU6IGZvbGRlciB9KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgZm9sZGVyICcke2ZvbGRlci5wYXRofScgaW50byBpdHMgb3duIHN1YnRyZWUgJyR7bmV3QXZhaWxhYmxlUGF0aH0nYCk7XG4gIH1cblxuICAvLyBDcmVhdGluZyB0aGUgZGVzdGluYXRpb24gZmlyc3QgaXMgd2hhdCBwcmVzZXJ2ZXMgYW4gRU1QVFkgc291cmNlIHN1YmZvbGRlci5cbiAgLy8gQSBmaWxlcy1vbmx5IHdhbGsgd291bGQgc2lsZW50bHkgZHJvcCBpdC5cbiAgYXdhaXQgY3JlYXRlRm9sZGVyU2FmZShhcHAsIG5ld0F2YWlsYWJsZVBhdGgpO1xuXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgZm9sZGVyLmNoaWxkcmVuKSB7XG4gICAgYXdhaXQgY29weVNhZmUoeyBhcHAsIG5ld1BhdGg6IGpvaW4obmV3QXZhaWxhYmxlUGF0aCwgY2hpbGQubmFtZSksIG9sZFBhdGhPckZpbGU6IGNoaWxkIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGludm9rZUZpbGVBY3Rpb25TYWZlKHBhcmFtczogSW52b2tlRmlsZUFjdGlvblNhZmVQYXJhbXMpOiBQcm9taXNlPEludm9rZUZpbGVBY3Rpb25TYWZlUmVzdWx0PiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZmlsZUFjdGlvbixcbiAgICBwYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG4gIGxldCBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgaWYgKCFmaWxlIHx8IGZpbGUuZGVsZXRlZCkge1xuICAgIHJldHVybiBJbnZva2VGaWxlQWN0aW9uU2FmZVJlc3VsdC5Ob3RJbnZva2VkO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgZmlsZUFjdGlvbihmaWxlKTtcbiAgICByZXR1cm4gSW52b2tlRmlsZUFjdGlvblNhZmVSZXN1bHQuSW52b2tlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoIWZpbGUgfHwgZmlsZS5kZWxldGVkKSB7XG4gICAgICByZXR1cm4gSW52b2tlRmlsZUFjdGlvblNhZmVSZXN1bHQuTm90SW52b2tlZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmb2xkZXIgZXhpc3RzIG9uIGRpc2sgYW5kIGlzIGVtcHR5LlxuICpcbiAqIHtAbGluayBpc0VtcHR5Rm9sZGVyfSBjYWxscyBhIG1pc3NpbmcgcGF0aCBlbXB0eSwgd2hpY2ggaXMgd3JvbmcgZm9yIGEgY2FsbGVyIGFib3V0IHRvIGRlbGV0ZSBpdDogdGhlIHZhdWx0IGluZGV4XG4gKiBjYW4gc3RpbGwgaG9sZCBhIGZvbGRlciB0aGUgZGlzayBoYXMgYWxyZWFkeSBsb3N0LCBiZWNhdXNlIHRoZSBpbmRleCBkcm9wcyBpdCBsYXRlciwgZnJvbSB0aGUgZmlsZSB3YXRjaGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gZm9sZGVyIC0gVGhlIGZvbGRlciB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYHRydWVgIHdoZW4gdGhlIGZvbGRlciBleGlzdHMgb24gZGlzayBhbmQgaXMgZW1wdHkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzRXhpc3RpbmdFbXB0eUZvbGRlcihhcHA6IEFwcCwgZm9sZGVyOiBURm9sZGVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuc3RhdChmb2xkZXIucGF0aCk7XG4gIHJldHVybiBzdGF0cz8udHlwZSA9PT0gJ2ZvbGRlcicgJiYgYXdhaXQgaXNFbXB0eUZvbGRlcihhcHAsIGZvbGRlcik7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYUEsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxpQkFBaUI7QUFDMUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMsb0JBQW9CO0FBQzdCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFVUCxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLDhCQUE4QjtBQUN2QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsU0FBUztBQUtYLElBQUsseUJBQUwsa0JBQUtBLDRCQUFMO0FBSUwsRUFBQUEsd0JBQUEsYUFBVTtBQUtWLEVBQUFBLHdCQUFBLGdCQUFhO0FBVEgsU0FBQUE7QUFBQSxHQUFBO0FBZUwsSUFBSyxzQkFBTCxrQkFBS0MseUJBQUw7QUFJTCxFQUFBQSxxQkFBQSxZQUFTO0FBS1QsRUFBQUEscUJBQUEsNEJBQXlCO0FBS3pCLEVBQUFBLHFCQUFBLFVBQU87QUFkRyxTQUFBQTtBQUFBLEdBQUE7QUFvQkwsSUFBSyw2QkFBTCxrQkFBS0MsZ0NBQUw7QUFDTCxFQUFBQSw0QkFBQSxhQUFVO0FBQ1YsRUFB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QUFDdEQsTUFBSSxDQUFDLE1BQU07QUFDVDtBQUFBLEVBQ0Y7QUFFQSxNQUFJO0FBQ0YsVUFBTSxJQUFJLFlBQVksVUFBVSxJQUFJO0FBQUEsRUFDdEMsU0FBUyxPQUFPO0FBQ2QsUUFBSSxNQUFNLElBQUksTUFBTSxPQUFPLEtBQUssSUFBSSxHQUFHO0FBQ3JDLFlBQU07QUFBQSxJQUNSO0FBRUEsMkJBQXVCLGlCQUFpQixFQUFFLG9DQUFvQyxLQUFLLElBQUksb0NBQW9DLEVBQUUsT0FBTyxNQUFNLEtBQUssS0FBSyxDQUFDO0FBQUEsRUFDdko7QUFDRjtBQUVBLGVBQWUsZUFBZSxRQUErQztBQUMzRSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBQ0osUUFBTSxtQkFBbUIsaUJBQWlCLEtBQUssT0FBTztBQUl0RCxNQUFJLGNBQWMsRUFBRSxLQUFLLGlCQUFpQixrQkFBa0Isa0JBQWtCLE9BQU8sQ0FBQyxHQUFHO0FBQ3ZGLFVBQU0sSUFBSSxNQUFNLHVCQUF1QixPQUFPLElBQUksMkJBQTJCLGdCQUFnQixHQUFHO0FBQUEsRUFDbEc7QUFJQSxRQUFNLGlCQUFpQixLQUFLLGdCQUFnQjtBQUU1QyxhQUFXLFNBQVMsT0FBTyxVQUFVO0FBQ25DLFVBQU0sU0FBUyxFQUFFLEtBQUssU0FBUyxLQUFLLGtCQUFrQixNQUFNLElBQUksR0FBRyxlQUFlLE1BQU0sQ0FBQztBQUFBLEVBQzNGO0FBRUEsU0FBTztBQUNUO0FBRUEsZUFBZSxxQkFBcUIsUUFBeUU7QUFDM0csUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLFFBQU0sT0FBTyxRQUFRLEtBQUssVUFBVTtBQUNwQyxNQUFJLE9BQU8sY0FBYyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUM7QUFDbEQsTUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTO0FBQ3pCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSTtBQUNGLFVBQU0sV0FBVyxJQUFJO0FBQ3JCLFdBQU87QUFBQSxFQUNULFNBQVMsT0FBTztBQUNkLFdBQU8sY0FBYyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUM7QUFDOUMsUUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTO0FBQ3pCLGFBQU87QUFBQSxJQUNUO0FBQ0EsVUFBTTtBQUFBLEVBQ1I7QUFDRjtBQVlBLGVBQWUsc0JBQXNCLEtBQVUsUUFBbUM7QUFDaEYsUUFBTSxRQUFRLE1BQU0sSUFBSSxNQUFNLFFBQVEsS0FBSyxPQUFPLElBQUk7QUFDdEQsU0FBTyxPQUFPLFNBQVMsWUFBWSxNQUFNLGNBQWMsS0FBSyxNQUFNO0FBQ3BFOyIsCiAgIm5hbWVzIjogWyJDcmVhdGVGb2xkZXJTYWZlUmVzdWx0IiwgIkVtcHR5Rm9sZGVyQmVoYXZpb3IiLCAiSW52b2tlRmlsZUFjdGlvblNhZmVSZXN1bHQiXQp9Cg==
|
|
604
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZhdWx0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgT2JzaWRpYW4gVmF1bHQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZXRyeU9wdGlvbnMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3ZhbHVlLXByb3ZpZGVyJztcbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBMaXN0ZWRGaWxlc1xufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGFib3J0U2lnbmFsQW55IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Fib3J0LWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgbm9vcEFzeW5jIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7XG4gIGJhc2VuYW1lLFxuICBkaXJuYW1lLFxuICBleHRuYW1lLFxuICBqb2luXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9wYXRoJztcbmltcG9ydCB7IGFzc2VydE5ldmVyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi92YWx1ZS1wcm92aWRlcic7XG5pbXBvcnQge1xuICBnZXREYXRhQWRhcHRlckV4LFxuICBwYXJlbnRGb2xkZXJQYXRoLFxuICBWaWV3VHlwZVxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQge1xuICBNYXJrZG93blZpZXcsXG4gIFRBYnN0cmFjdEZpbGUsXG4gIFRGaWxlLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUge1xuICBQYXRoT3JBYnN0cmFjdEZpbGUsXG4gIFBhdGhPckZpbGUsXG4gIFBhdGhPckZvbGRlclxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VMb2NrQ29tcG9uZW50IH0gZnJvbSAnLi9yZXNvdXJjZS1sb2NrLnRzJztcblxuaW1wb3J0IHsgcmV0cnlXaXRoVGltZW91dE5vdGljZSB9IGZyb20gJy4vYXN5bmMtd2l0aC1ub3RpY2UudHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJEZWJ1Z2dlciB9IGZyb20gJy4vZGVidWcudHMnO1xuaW1wb3J0IHtcbiAgYXNGaWxlLFxuICBhc0ZvbGRlcixcbiAgRmlsZVN5c3RlbVR5cGUsXG4gIGdldEFic3RyYWN0RmlsZSxcbiAgZ2V0QWJzdHJhY3RGaWxlT3JOdWxsLFxuICBnZXRGaWxlLFxuICBnZXRGaWxlT3JOdWxsLFxuICBnZXRGaWxlU3lzdGVtVHlwZSxcbiAgZ2V0Rm9sZGVyLFxuICBnZXRGb2xkZXJPck51bGwsXG4gIGdldFBhdGgsXG4gIGlzRmlsZSxcbiAgaXNNYXJrZG93bkZpbGUsXG4gIGlzTm90ZVxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiB7QGxpbmsgY3JlYXRlRm9sZGVyU2FmZX0uXG4gKi9cbmV4cG9ydCBlbnVtIENyZWF0ZUZvbGRlclNhZmVSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGZvbGRlciB3YXMgY3JlYXRlZC5cbiAgICovXG4gIENyZWF0ZWQgPSAnY3JlYXRlZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2FzIG5vdCBjcmVhdGVkIGJlY2F1c2UgaXQgYWxyZWFkeSBleGlzdHMuXG4gICAqL1xuICBOb3RDcmVhdGVkID0gJ25vdC1jcmVhdGVkJ1xufVxuXG4vKipcbiAqIEEgYmVoYXZpb3IgZm9yIGhhbmRsaW5nIGVtcHR5IGZvbGRlcnMgZHVyaW5nIGNsZWFudXAuXG4gKi9cbmV4cG9ydCBlbnVtIEVtcHR5Rm9sZGVyQmVoYXZpb3Ige1xuICAvKipcbiAgICogRGVsZXRlIHRoZSBlbXB0eSBmb2xkZXIuXG4gICAqL1xuICBEZWxldGUgPSAnRGVsZXRlJyxcblxuICAvKipcbiAgICogRGVsZXRlIHRoZSBlbXB0eSBmb2xkZXIgYW5kIGFsbCBpdHMgZW1wdHkgcGFyZW50cy5cbiAgICovXG4gIERlbGV0ZVdpdGhFbXB0eVBhcmVudHMgPSAnRGVsZXRlV2l0aEVtcHR5UGFyZW50cycsXG5cbiAgLyoqXG4gICAqIEtlZXAgdGhlIGVtcHR5IGZvbGRlci5cbiAgICovXG4gIEtlZXAgPSAnS2VlcCdcbn1cblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIHtAbGluayBpbnZva2VGaWxlQWN0aW9uU2FmZX0uXG4gKi9cbmV4cG9ydCBlbnVtIEludm9rZUZpbGVBY3Rpb25TYWZlUmVzdWx0IHtcbiAgSW52b2tlZCA9ICdpbnZva2VkJyxcbiAgTm90SW52b2tlZCA9ICdub3QtaW52b2tlZCdcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY2xlYW51cEVtcHR5Rm9sZGVyc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYW51cEVtcHR5Rm9sZGVyc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9yIGRldGVybWluaW5nIGhvdyBlbXB0eSBmb2xkZXJzIGFyZSBjbGVhbmVkIHVwLlxuICAgKi9cbiAgcmVhZG9ubHkgZW1wdHlGb2xkZXJCZWhhdmlvcjogRW1wdHlGb2xkZXJCZWhhdmlvcjtcblxuICAvKipcbiAgICogVGhlIHBhdGhzIG9mIHRoZSBmb2xkZXJzIHRvIGNsZWFuIHVwIHdoZW4gZW1wdHkuXG4gICAqL1xuICByZWFkb25seSBmb2xkZXJQYXRoczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciB7QGxpbmsgcHJvY2Vzc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudEFyZ3VtZW50cyB7XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjb3B5U2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29weVNhZmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcGF0aCB0byBjb3B5IHRoZSBmaWxlIG9yIGZvbGRlciB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBwYXRoLCBmaWxlIG9yIGZvbGRlciB0byBjb3B5LiBBIGZvbGRlciBpcyBjb3BpZWQgd2l0aCBpdHMgd2hvbGUgc3VidHJlZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QWJzdHJhY3RGaWxlUGF0aFNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEFic3RyYWN0RmlsZVBhdGhTYWZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgZmlsZSBvciBmb2xkZXIgdG8gZ2V0IGEgc2FmZSBwYXRoIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IEZpbGVTeXN0ZW1UeXBlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIGFic3RyYWN0IGZpbGUgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGFic3RyYWN0IGZpbGUgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IEZpbGVTeXN0ZW1UeXBlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRTYWZlUmVuYW1lUGF0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0U2FmZVJlbmFtZVBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcGF0aCB0byByZW5hbWUgdGhlIGFic3RyYWN0IGZpbGUgdG8uXG4gICAqL1xuICByZWFkb25seSBuZXdQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvciBhYnN0cmFjdCBmaWxlIHRvIHJlbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFBhdGhPckFic3RyYWN0RmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnZva2VXaXRoRmlsZVN5c3RlbUxvY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVdpdGhGaWxlU3lzdGVtTG9ja1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgY29udGVudCBvZiB0aGUgZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5ICRmdW5jdGlvbjogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgZmlsZSBzeXN0ZW0gbG9jayBvZi5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGlzQ2hpbGRPclNlbGZ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElzQ2hpbGRPclNlbGZQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBhIGNoaWxkIG9yIHNlbGYuXG4gICAqL1xuICByZWFkb25seSBjaGlsZFBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZTtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byBjaGVjayB3aGV0aGVyIGl0IGlzIGEgcGFyZW50IG9yIHNlbGYuXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGlzQ2hpbGR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElzQ2hpbGRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBhIGNoaWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2sgd2hldGhlciBpdCBpcyBhIHBhcmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudFBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcHJvY2Vzc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc09wdGlvbnMgZXh0ZW5kcyBSZXRyeU9wdGlvbnMge1xuICAvKipcbiAgICogUGx1Z2luIG5vdGljZSBjb21wb25lbnQgdXNlZCB0byBzaG93IHRoZSB0aW1lb3V0IG5vdGljZS4gV2hlbiBgbnVsbGAsIG5vIHRpbWVvdXQgbm90aWNlIGlzIHNob3duXG4gICAqIHJlZ2FyZGxlc3Mgb2Yge0BsaW5rIFByb2Nlc3NPcHRpb25zLnNob3VsZFNob3dUaW1lb3V0Tm90aWNlfTsgdGhlIHRpbWVvdXQgaXMgb25seSBsb2dnZWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IG51bGwgfCBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIEFuIHJlc291cmNlLWxvY2sgY29tcG9uZW50IHVzZWQgdG8gbG9jayB0aGUgZmlsZSdzIGVkaXRvciByZWFkLW9ubHkgZm9yIHRoZSBkdXJhdGlvbiBvZlxuICAgKiBwcm9jZXNzaW5nLiBUaGUgbG9jayBpcyByZWZlcmVuY2UtY291bnRlZCwgc28gaXQgY29tcG9zZXMgd2l0aCBhbnkgb3V0ZXIgb3BlcmF0aW9uLWxldmVsIGxvY2tcbiAgICogb24gdGhlIHNhbWUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbCB8IFJlc291cmNlTG9ja0NvbXBvbmVudDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmYWlsIGlmIHRoZSBmaWxlIGlzIG1pc3Npbmcgb3IgZGVsZXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGYWlsT25NaXNzaW5nRmlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHRpbWVvdXQgbm90aWNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dUaW1lb3V0Tm90aWNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcHJvY2Vzc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc1BhcmFtcyBleHRlbmRzIFByb2Nlc3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSwgdHlwaWNhbGx5IHVzZWQgZm9yIGFjY2Vzc2luZyB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQSB2YWx1ZSBwcm92aWRlciB0aGF0IHJldHVybnMgdGhlIG5ldyBjb250ZW50IGJhc2VkIG9uIHRoZSBvbGQgY29udGVudCBvZiB0aGUgZmlsZS5cbiAgICogSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgb2xkIGNvbnRlbnQgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgdGhlIG5ldyBjb250ZW50LlxuICAgKlxuICAgKiBBIGZ1bmN0aW9uIGhhcyB0aHJlZSBvdXRjb21lczpcbiAgICpcbiAgICogLSBgbnVsbGAgXHUyMDE0IHRoZSBuZXcgY29udGVudCBjYW5ub3QgYmUgcHJvZHVjZWQgWUVUOyB0aGUgcHJvY2VzcyBpcyByZXRyaWVkLlxuICAgKiAtIHRoZSBvbGQgY29udGVudCwgcmV0dXJuZWQgdW5jaGFuZ2VkIFx1MjAxNCB0aGVyZSBpcyBub3RoaW5nIHRvIHdyaXRlOyB0aGUgcHJvY2VzcyBjb21wbGV0ZXMgd2l0aG91dFxuICAgKiAgIHRvdWNoaW5nIHRoZSBmaWxlLiBVc2UgdGhpcyBmb3IgYSByZWZ1c2FsIHRoYXQgaXMgcGVybWFuZW50LCBhcyByZXR1cm5pbmcgYG51bGxgIGZvciBvbmUgcmV0cmllc1xuICAgKiAgIGZvcmV2ZXIgYW5kIGhvbGRzIHRoZSBvcGVyYXRpb24gb3Blbi5cbiAgICogLSBhbnkgb3RoZXIgc3RyaW5nIFx1MjAxNCB0aGUgY29udGVudCB0byB3cml0ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5ld0NvbnRlbnRQcm92aWRlcjogVmFsdWVQcm92aWRlcjxudWxsIHwgc3RyaW5nLCBDb250ZW50QXJndW1lbnRzPjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byBiZSBwcm9jZXNzZWQuIEl0IGNhbiBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBhdGggb3IgYSBmaWxlIG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlbmFtZVNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmFtZVNhZmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcGF0aCB0byByZW5hbWUgdGhlIGZpbGUgdG8uXG4gICAqL1xuICByZWFkb25seSBuZXdQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcGF0aCBvciBhYnN0cmFjdCBmaWxlIHRvIHJlbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFBhdGhPckFic3RyYWN0RmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xufVxuXG5pbnRlcmZhY2UgQ29weUZvbGRlclNhZmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgdG8gY29weS5cbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlcjogVEZvbGRlcjtcblxuICAvKipcbiAgICogVGhlIG5ldyBwYXRoIHRvIGNvcHkgdGhlIGZvbGRlciB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5ld1BhdGg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEludm9rZUZpbGVBY3Rpb25TYWZlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHBlcmZvcm0gb24gdGhlIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlIC0gVGhlIGZpbGUgdG8gcGVyZm9ybSB0aGUgYWN0aW9uIG9uLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFjdGlvbiBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVBY3Rpb246IChmaWxlOiBURmlsZSkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIENsZWFucyB1cCBlbXB0eSBmb2xkZXJzIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4ge0BsaW5rIEVtcHR5Rm9sZGVyQmVoYXZpb3J9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgY2xlYW5pbmcgdXAgZW1wdHkgZm9sZGVycy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY2xlYW51cCBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsZWFudXBFbXB0eUZvbGRlcnMocGFyYW1zOiBDbGVhbnVwRW1wdHlGb2xkZXJzUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZW1wdHlGb2xkZXJCZWhhdmlvcixcbiAgICBmb2xkZXJQYXRoc1xuICB9ID0gcGFyYW1zO1xuICBmb3IgKGNvbnN0IGZvbGRlclBhdGggb2YgZm9sZGVyUGF0aHMpIHtcbiAgICBzd2l0Y2ggKGVtcHR5Rm9sZGVyQmVoYXZpb3IpIHtcbiAgICAgIGNhc2UgRW1wdHlGb2xkZXJCZWhhdmlvci5EZWxldGU6IHtcbiAgICAgICAgYXdhaXQgZGVsZXRlRW1wdHlGb2xkZXIoYXBwLCBmb2xkZXJQYXRoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVtcHR5Rm9sZGVyQmVoYXZpb3IuRGVsZXRlV2l0aEVtcHR5UGFyZW50czoge1xuICAgICAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlckhpZXJhcmNoeShhcHAsIGZvbGRlclBhdGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRW1wdHlGb2xkZXJCZWhhdmlvci5LZWVwOiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBhc3NlcnROZXZlcihlbXB0eUZvbGRlckJlaGF2aW9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb3BpZXMgYSBmaWxlIG9yIGZvbGRlciBzYWZlbHkgaW4gdGhlIHZhdWx0LiBBIGZvbGRlciBpcyBjb3BpZWQgd2l0aCBpdHMgd2hvbGUgc3VidHJlZSwgZW1wdHlcbiAqIHN1YmZvbGRlcnMgaW5jbHVkZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBjb3B5aW5nIHRoZSBmaWxlIG9yIGZvbGRlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5ldyBwYXRoIG9mIHRoZSBjb3B5LlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgZGVzdGluYXRpb24gcmVzb2x2ZXMgaW5zaWRlIHRoZSBzb3VyY2UgZm9sZGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weVNhZmUocGFyYW1zOiBDb3B5U2FmZVBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3UGF0aCxcbiAgICBvbGRQYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGFic3RyYWN0RmlsZSA9IGdldEFic3RyYWN0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZTogb2xkUGF0aE9yRmlsZSB9KTtcblxuICBpZiAoYWJzdHJhY3RGaWxlLnBhdGggPT09IG5ld1BhdGgpIHtcbiAgICByZXR1cm4gbmV3UGF0aDtcbiAgfVxuXG4gIGlmICghaXNGaWxlKGFic3RyYWN0RmlsZSkpIHtcbiAgICByZXR1cm4gYXdhaXQgY29weUZvbGRlclNhZmUoeyBhcHAsIGZvbGRlcjogYXNGb2xkZXIoYWJzdHJhY3RGaWxlKSwgbmV3UGF0aCB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZvbGRlclBhdGggPSBwYXJlbnRGb2xkZXJQYXRoKG5ld1BhdGgpO1xuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgbmV3Rm9sZGVyUGF0aCk7XG5cbiAgY29uc3QgbmV3QXZhaWxhYmxlUGF0aCA9IGdldEF2YWlsYWJsZVBhdGgoYXBwLCBuZXdQYXRoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jb3B5KGFic3RyYWN0RmlsZSwgbmV3QXZhaWxhYmxlUGF0aCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKG5ld0F2YWlsYWJsZVBhdGgpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QXZhaWxhYmxlUGF0aDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZm9sZGVyIHNhZmVseSBpbiB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHtAbGluayBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0LkNyZWF0ZWR9IGlmIHRoZSBmb2xkZXIgd2FzXG4gKiBjcmVhdGVkLCBvciB7QGxpbmsgQ3JlYXRlRm9sZGVyU2FmZVJlc3VsdC5Ob3RDcmVhdGVkfSBpZiBpdCBhbHJlYWR5IGV4aXN0ZWQuXG4gKiBAdGhyb3dzIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjcmVhdGluZyB0aGUgZm9sZGVyIGFuZCBpdCBzdGlsbCBkb2Vzbid0IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRm9sZGVyU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVGb2xkZXJTYWZlUmVzdWx0PiB7XG4gIGlmIChhd2FpdCBhcHAudmF1bHQuYWRhcHRlci5leGlzdHMocGF0aCkpIHtcbiAgICByZXR1cm4gQ3JlYXRlRm9sZGVyU2FmZVJlc3VsdC5Ob3RDcmVhdGVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAudmF1bHQuY3JlYXRlRm9sZGVyKHBhdGgpO1xuICAgIHJldHVybiBDcmVhdGVGb2xkZXJTYWZlUmVzdWx0LkNyZWF0ZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFhd2FpdCBhcHAudmF1bHQuZXhpc3RzKHBhdGgpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIENyZWF0ZUZvbGRlclNhZmVSZXN1bHQuQ3JlYXRlZDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgdmF1bHQgd2l0aCBwYXJlbnQgZm9sZGVycyBpZiBuZWVkZWQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gY3JlYXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxlIGFuZCBhbGwgaXRzIGNyZWF0ZWQgcGFyZW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBvcmFyeUZpbGUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgZmlsZSA9IGdldEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGggfSk7XG4gIGlmIChmaWxlKSB7XG4gICAgcmV0dXJuIG5vb3BBc3luYztcbiAgfVxuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wb3JhcnlGb2xkZXIoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jcmVhdGUocGF0aCwgJycpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoIWZpbGUuZGVsZXRlZCkge1xuICAgICAgYXdhaXQgdHJhc2hTYWZlKGFwcCwgZmlsZSk7XG4gICAgfVxuICAgIGF3YWl0IGZvbGRlckNsZWFudXAoKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcG9yYXJ5IGZvbGRlciBpbiB0aGUgdmF1bHQgd2l0aCBwYXJlbnQgZm9sZGVycyBpZiBuZWVkZWQuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjcmVhdGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZvbGRlciBhbmQgYWxsIGl0cyBjcmVhdGVkIHBhcmVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUZW1wb3JhcnlGb2xkZXIoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBwYXRoT3JGb2xkZXI6IHBhdGggfSk7XG4gIGlmIChmb2xkZXIpIHtcbiAgICByZXR1cm4gbm9vcEFzeW5jO1xuICB9XG5cbiAgY29uc3QgZm9sZGVyUGF0aCA9IHBhcmVudEZvbGRlclBhdGgocGF0aCk7XG4gIGF3YWl0IGNyZWF0ZVRlbXBvcmFyeUZvbGRlcihhcHAsIGZvbGRlclBhdGgpO1xuXG4gIGNvbnN0IGZvbGRlckNsZWFudXAgPSBhd2FpdCBjcmVhdGVUZW1wb3JhcnlGb2xkZXIoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcblxuICBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKGFwcCwgcGF0aCk7XG5cbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBmb2xkZXIgPSBnZXRGb2xkZXIoeyBhcHAsIHBhdGhPckZvbGRlcjogcGF0aCB9KTtcbiAgICBpZiAoIWZvbGRlci5kZWxldGVkKSB7XG4gICAgICBhd2FpdCB0cmFzaFNhZmUoYXBwLCBmb2xkZXIpO1xuICAgIH1cbiAgICBhd2FpdCBmb2xkZXJDbGVhbnVwKCk7XG4gIH07XG59XG5cbi8qKlxuICogRGVsZXRlcyBhbiBlbXB0eSBmb2xkZXIuXG4gKlxuICogQSBmb2xkZXIgdGhlIHZhdWx0IGluZGV4IHN0aWxsIGhvbGRzIGJ1dCB0aGUgZGlzayBoYXMgYWxyZWFkeSBsb3N0IGlzIG5vdCBlbXB0eTogaXQgaXMgbm90aGluZyB0byBkZWxldGUsIHNvIGl0XG4gKiBpcyBsZWZ0IGFsb25lIHJhdGhlciB0aGFuIGhhbmRlZCB0byB0aGUgdHJhc2ggYXMgYSBtaXNzaW5nIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgZm9sZGVyIHRvIGRlbGV0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZm9sZGVyIGlzIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVFbXB0eUZvbGRlcihhcHA6IEFwcCwgcGF0aE9yRm9sZGVyOiBudWxsIHwgUGF0aE9yRm9sZGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh7IGFwcCwgcGF0aE9yRm9sZGVyIH0pO1xuICBpZiAoIWZvbGRlciB8fCAhYXdhaXQgaXNFeGlzdGluZ0VtcHR5Rm9sZGVyKGFwcCwgZm9sZGVyKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCB0cmFzaFNhZmUoYXBwLCBmb2xkZXIpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgZW1wdHkgZm9sZGVyIGhpZXJhcmNoeSBzdGFydGluZyBmcm9tIHRoZSBnaXZlbiBmb2xkZXIuXG4gKlxuICogVGhlIHdhbGsgc3RvcHMgYXQgdGhlIGZpcnN0IGZvbGRlciB0aGF0IGlzIG5vdCBlbXB0eSBvciBubyBsb25nZXIgZXhpc3RzIG9uIGRpc2suXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGb2xkZXIgLSBUaGUgZm9sZGVyIHRvIHN0YXJ0IHJlbW92aW5nIGVtcHR5IGhpZXJhcmNoeSBmcm9tLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbXB0eSBoaWVyYXJjaHkgaXMgZGVsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUVtcHR5Rm9sZGVySGllcmFyY2h5KGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IG51bGwgfCBQYXRoT3JGb2xkZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh7IGFwcCwgcGF0aE9yRm9sZGVyIH0pO1xuXG4gIHdoaWxlIChmb2xkZXIpIHtcbiAgICBpZiAoIWF3YWl0IGlzRXhpc3RpbmdFbXB0eUZvbGRlcihhcHAsIGZvbGRlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gZm9sZGVyLnBhcmVudDtcbiAgICBhd2FpdCBkZWxldGVFbXB0eUZvbGRlcihhcHAsIGZvbGRlcik7XG4gICAgZm9sZGVyID0gcGFyZW50O1xuICB9XG59XG5cbi8qKlxuICogR2V0cyBhIHNhZmUgcGF0aCBmb3IgYSBmaWxlIG9yIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGdldHRpbmcgYSBzYWZlIHBhdGguXG4gKiBAcmV0dXJucyBUaGUgc2FmZSBwYXRoIGZvciB0aGUgZmlsZSBvciBmb2xkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBYnN0cmFjdEZpbGVQYXRoU2FmZShwYXJhbXM6IEdldEFic3RyYWN0RmlsZVBhdGhTYWZlUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBwYXRoLFxuICAgIHR5cGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgYWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBwYXRoIH0pO1xuXG4gIHJldHVybiBhYnN0cmFjdEZpbGUgJiYgZ2V0RmlsZVN5c3RlbVR5cGUoYWJzdHJhY3RGaWxlKSA9PT0gdHlwZSA/IHBhdGggOiBnZXRBdmFpbGFibGVQYXRoKGFwcCwgcGF0aCk7XG59XG5cbi8qKlxuICogR2V0cyBhbiBhdmFpbGFibGUgcGF0aCBmb3IgYSBmaWxlIGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBnZXQgYW4gYXZhaWxhYmxlIHBhdGggZm9yLlxuICogQHJldHVybnMgVGhlIGF2YWlsYWJsZSBwYXRoIGZvciB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF2YWlsYWJsZVBhdGgoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUocGF0aCk7XG4gIHJldHVybiBhcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aChqb2luKGRpcm5hbWUocGF0aCksIGJhc2VuYW1lKHBhdGgsIGV4dGVuc2lvbikpLCBleHRlbnNpb24uc2xpY2UoMSkpO1xufVxuXG4vKipcbiAqIEdldHMgYSBzYWZlIGZpbGUgcGF0aCBmb3IgYSBmaWxlIG9yIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBvciBmb2xkZXIgdG8gZ2V0IGEgc2FmZSBwYXRoIGZvci5cbiAqIEByZXR1cm5zIFRoZSBzYWZlIHBhdGggZm9yIHRoZSBmaWxlIG9yIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVQYXRoU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldEFic3RyYWN0RmlsZVBhdGhTYWZlKHsgYXBwLCBwYXRoLCB0eXBlOiBGaWxlU3lzdGVtVHlwZS5GaWxlIH0pO1xufVxuXG4vKipcbiAqIEdldHMgYSBzYWZlIGZvbGRlciBwYXRoIGZvciBhIGZpbGUgb3IgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGZvbGRlciB0byBnZXQgYSBzYWZlIHBhdGggZm9yLlxuICogQHJldHVybnMgVGhlIHNhZmUgcGF0aCBmb3IgdGhlIGZpbGUgb3IgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9sZGVyUGF0aFNhZmUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBYnN0cmFjdEZpbGVQYXRoU2FmZSh7IGFwcCwgcGF0aCwgdHlwZTogRmlsZVN5c3RlbVR5cGUuRm9sZGVyIH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhcnJheSBvZiBNYXJrZG93biBmaWxlcyBmcm9tIHRoZSBhcHAncyB2YXVsdCBhbmQgc29ydHMgdGhlbSBhbHBoYWJldGljYWxseSBieSB0aGVpciBmaWxlIHBhdGguXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBNYXJrZG93biBmaWxlcyBzb3J0ZWQgYnkgZmlsZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlc1NvcnRlZChhcHA6IEFwcCk6IFRGaWxlW10ge1xuICByZXR1cm4gYXBwLnZhdWx0LmdldE1hcmtkb3duRmlsZXMoKS5zb3J0KChhLCBiKSA9PiBhLnBhdGgubG9jYWxlQ29tcGFyZShiLnBhdGgpKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgYWxsIG5vdGUgZmlsZXMgZnJvbSB0aGUgYXBwJ3MgdmF1bHQgYW5kIHNvcnRzIHRoZW0gYWxwaGFiZXRpY2FsbHkgYnkgdGhlaXIgZmlsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWxsIG5vdGUgZmlsZXMgaW4gdGhlIHZhdWx0IHNvcnRlZCBieSBmaWxlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3RlRmlsZXNTb3J0ZWQoYXBwOiBBcHApOiBURmlsZVtdIHtcbiAgcmV0dXJuIGFwcC52YXVsdC5nZXRBbGxMb2FkZWRGaWxlcygpLmZpbHRlcigoZmlsZSkgPT4gaXNGaWxlKGZpbGUpICYmIGlzTm90ZShmaWxlKSkuc29ydCgoYSwgYikgPT4gYS5wYXRoLmxvY2FsZUNvbXBhcmUoYi5wYXRoKSkgYXMgVEZpbGVbXTtcbn1cblxuLyoqXG4gKiBHZXRzIG9yIGNyZWF0ZXMgYW4gYWJzdHJhY3QgZmlsZSBzYWZlbHkgaW4gdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIElmIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIHJldHVybmVkLlxuICogSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBnZXR0aW5nIG9yIGNyZWF0aW5nIHRoZSBhYnN0cmFjdCBmaWxlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgYWJzdHJhY3QgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZShwYXJhbXM6IEdldE9yQ3JlYXRlQWJzdHJhY3RGaWxlU2FmZVBhcmFtcyk6IFByb21pc2U8VEFic3RyYWN0RmlsZT4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIHR5cGVcbiAgfSA9IHBhcmFtcztcbiAgbGV0IHsgcGF0aCB9ID0gcGFyYW1zO1xuICBwYXRoID0gZ2V0QWJzdHJhY3RGaWxlUGF0aFNhZmUoeyBhcHAsIHBhdGgsIHR5cGUgfSk7XG4gIGNvbnN0IGFic3RyYWN0RmlsZSA9IGdldEFic3RyYWN0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgaWYgKGFic3RyYWN0RmlsZSkge1xuICAgIHJldHVybiBhYnN0cmFjdEZpbGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEZpbGVTeXN0ZW1UeXBlLkZpbGU6IHtcbiAgICAgIC8vIGB2YXVsdC5jcmVhdGVgIGRvZXMgbm90IGNyZWF0ZSBtaXNzaW5nIHBhcmVudCBmb2xkZXJzOyB0aGUgYWRhcHRlciByZWZ1c2VzIHRoZSB3cml0ZS5cbiAgICAgIGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcbiAgICAgIHJldHVybiBhd2FpdCBhcHAudmF1bHQuY3JlYXRlKHBhdGgsICcnKTtcbiAgICB9XG4gICAgY2FzZSBGaWxlU3lzdGVtVHlwZS5Gb2xkZXI6IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHAudmF1bHQuY3JlYXRlRm9sZGVyKHBhdGgpO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBhc3NlcnROZXZlcih0eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIG9yIGNyZWF0ZXMgYSBmaWxlIHNhZmVseSBpbiB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBnZXQgb3IgY3JlYXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRmlsZVNhZmUoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8VEZpbGU+IHtcbiAgcmV0dXJuIGFzRmlsZShhd2FpdCBnZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmUoeyBhcHAsIHBhdGgsIHR5cGU6IEZpbGVTeXN0ZW1UeXBlLkZpbGUgfSkpO1xufVxuXG4vKipcbiAqIEdldHMgb3IgY3JlYXRlcyBhIGZvbGRlciBzYWZlbHkgaW4gdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIElmIHRoZSBmb2xkZXIgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiB0aGUgZm9sZGVyIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gZ2V0IG9yIGNyZWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGZvbGRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRm9sZGVyU2FmZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxURm9sZGVyPiB7XG4gIHJldHVybiBhc0ZvbGRlcihhd2FpdCBnZXRPckNyZWF0ZUFic3RyYWN0RmlsZVNhZmUoeyBhcHAsIHBhdGgsIHR5cGU6IEZpbGVTeXN0ZW1UeXBlLkZvbGRlciB9KSk7XG59XG5cbi8qKlxuICogR2V0cyBhIHNhZmUgcmVuYW1lIHBhdGggZm9yIGEgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGdldHRpbmcgYSBzYWZlIHJlbmFtZSBwYXRoLlxuICogQHJldHVybnMgVGhlIHNhZmUgcmVuYW1lIHBhdGggZm9yIHRoZSBhYnN0cmFjdCBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FmZVJlbmFtZVBhdGgocGFyYW1zOiBHZXRTYWZlUmVuYW1lUGF0aFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgYXBwLCBvbGRQYXRoT3JBYnN0cmFjdEZpbGUgfSA9IHBhcmFtcztcbiAgbGV0IHsgbmV3UGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBvbGRQYXRoID0gZ2V0UGF0aChhcHAsIG9sZFBhdGhPckFic3RyYWN0RmlsZSk7XG5cbiAgaWYgKGdldERhdGFBZGFwdGVyRXgoYXBwKS5pbnNlbnNpdGl2ZSkge1xuICAgIGxldCBmb2xkZXJQYXRoID0gZGlybmFtZShuZXdQYXRoKTtcbiAgICBsZXQgbm9uRXhpc3RpbmdQYXRoID0gYmFzZW5hbWUobmV3UGF0aCk7XG4gICAgbGV0IGZvbGRlcjogbnVsbCB8IFRGb2xkZXI7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gVGhlcmUgaXMgbm8gZWxlZ2FudCB3YXkgdG8gcGVyZm9ybSBpbmZpbml0ZSBsb29wcy5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgZm9sZGVyID0gZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBpc0Nhc2VJbnNlbnNpdGl2ZTogdHJ1ZSwgcGF0aE9yRm9sZGVyOiBmb2xkZXJQYXRoIH0pO1xuICAgICAgaWYgKGZvbGRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG5vbkV4aXN0aW5nUGF0aCA9IGpvaW4oYmFzZW5hbWUoZm9sZGVyUGF0aCksIG5vbkV4aXN0aW5nUGF0aCk7XG4gICAgICBmb2xkZXJQYXRoID0gZGlybmFtZShmb2xkZXJQYXRoKTtcbiAgICB9XG4gICAgbmV3UGF0aCA9IGpvaW4oZm9sZGVyLmdldFBhcmVudFByZWZpeCgpLCBub25FeGlzdGluZ1BhdGgpO1xuICB9XG5cbiAgcmV0dXJuIG9sZFBhdGgudG9Mb3dlckNhc2UoKSA9PT0gbmV3UGF0aC50b0xvd2VyQ2FzZSgpID8gbmV3UGF0aCA6IGdldEF2YWlsYWJsZVBhdGgoYXBwLCBuZXdQYXRoKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgZmlsZSBzeXN0ZW0gbG9jay5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGludm9raW5nIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBmaWxlIHN5c3RlbSBsb2NrLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW52b2tlV2l0aEZpbGVTeXN0ZW1Mb2NrKHBhcmFtczogSW52b2tlV2l0aEZpbGVTeXN0ZW1Mb2NrUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICAkZnVuY3Rpb24sXG4gICAgYXBwLFxuICAgIHBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGUgfSk7XG4gIGF3YWl0IGFwcC52YXVsdC5wcm9jZXNzKGZpbGUsIChjb250ZW50KSA9PiB7XG4gICAgJGZ1bmN0aW9uKGNvbnRlbnQpO1xuICAgIHJldHVybiBjb250ZW50O1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBwYXRoIG9yIGZpbGUgaXMgYSBjaGlsZCBvZiBhbm90aGVyIHBhdGggb3IgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGNoZWNraW5nIHdoZXRoZXIgdGhlIGNoaWxkIHBhdGggb3IgZmlsZSBpcyBhIGNoaWxkIG9mIHRoZSBwYXJlbnQgcGF0aCBvciBmaWxlLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2hpbGQgcGF0aCBvciBmaWxlIGlzIGEgY2hpbGQgb2YgdGhlIHBhcmVudCBwYXRoIG9yIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NoaWxkKHBhcmFtczogSXNDaGlsZFBhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGNoaWxkUGF0aE9yRmlsZSxcbiAgICBwYXJlbnRQYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNoaWxkUGF0aCA9IGdldFBhdGgoYXBwLCBjaGlsZFBhdGhPckZpbGUpO1xuICBjb25zdCBwYXJlbnRQYXRoID0gZ2V0UGF0aChhcHAsIHBhcmVudFBhdGhPckZpbGUpO1xuXG4gIHJldHVybiBjaGlsZFBhdGggIT09IHBhcmVudFBhdGggJiYgKHBhcmVudFBhdGggPT09ICcvJyB8fCBjaGlsZFBhdGguc3RhcnRzV2l0aChgJHtwYXJlbnRQYXRofS9gKSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcGF0aCBvciBmaWxlIGlzIGEgY2hpbGQgb3Igc2VsZiBvZiBhbm90aGVyIHBhdGggb3IgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIGNoZWNraW5nIHdoZXRoZXIgdGhlIGNoaWxkIHBhdGggb3IgZmlsZSBpcyBhIGNoaWxkIG9yIHNlbGYgb2YgdGhlIHBhcmVudCBwYXRoIG9yIGZpbGUuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjaGlsZCBwYXRoIG9yIGZpbGUgaXMgYSBjaGlsZCBvciBzZWxmIG9mIHRoZSBwYXJlbnQgcGF0aCBvciBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDaGlsZE9yU2VsZihwYXJhbXM6IElzQ2hpbGRPclNlbGZQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjaGlsZFBhdGhPckZpbGUsXG4gICAgcGFyZW50UGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBjaGlsZFBhdGggPSBnZXRQYXRoKGFwcCwgY2hpbGRQYXRoT3JGaWxlKTtcbiAgY29uc3QgcGFyZW50UGF0aCA9IGdldFBhdGgoYXBwLCBwYXJlbnRQYXRoT3JGaWxlKTtcbiAgcmV0dXJuIGNoaWxkUGF0aCA9PT0gcGFyZW50UGF0aCB8fCBpc0NoaWxkKHsgYXBwLCBjaGlsZFBhdGhPckZpbGUsIHBhcmVudFBhdGhPckZpbGUgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZm9sZGVyIGlzIGVtcHR5LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRm9sZGVyIC0gVGhlIHBhdGggb3IgZm9sZGVyIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmb2xkZXIgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0VtcHR5Rm9sZGVyKGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IFBhdGhPckZvbGRlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBsaXN0ZWRGaWxlcyA9IGF3YWl0IGxpc3RTYWZlKGFwcCwgZ2V0UGF0aChhcHAsIHBhdGhPckZvbGRlcikpO1xuICByZXR1cm4gbGlzdGVkRmlsZXMuZmlsZXMubGVuZ3RoID09PSAwICYmIGxpc3RlZEZpbGVzLmZvbGRlcnMubGVuZ3RoID09PSAwO1xufVxuXG4vKipcbiAqIFNhZmVseSBsaXN0cyB0aGUgZmlsZXMgYW5kIGZvbGRlcnMgYXQgdGhlIHNwZWNpZmllZCBwYXRoIGluIHRoZSB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZvbGRlciAtIFRoZSBwYXRoIG9yIGZvbGRlciB0byBsaXN0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIHtAbGluayBMaXN0ZWRGaWxlc30gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxpc3RlZCBmaWxlcyBhbmQgZm9sZGVycy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RTYWZlKGFwcDogQXBwLCBwYXRoT3JGb2xkZXI6IFBhdGhPckZvbGRlcik6IFByb21pc2U8TGlzdGVkRmlsZXM+IHtcbiAgY29uc3QgcGF0aCA9IGdldFBhdGgoYXBwLCBwYXRoT3JGb2xkZXIpO1xuICBjb25zdCBFTVBUWSA9IHsgZmlsZXM6IFtdLCBmb2xkZXJzOiBbXSB9O1xuXG4gIGNvbnN0IHBhdGhTdGF0cyA9IGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLnN0YXQocGF0aCk7XG4gIGlmIChwYXRoU3RhdHM/LnR5cGUgIT09ICdmb2xkZXInKSB7XG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIubGlzdChwYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiBFTVBUWTtcbiAgfVxufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBhIGZpbGUgd2l0aCByZXRyeSBsb2dpYywgdXBkYXRpbmcgaXRzIGNvbnRlbnQgYmFzZWQgb24gYSBwcm92aWRlZCB2YWx1ZSBvciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHByb2Nlc3NpbmcgdGhlIGZpbGUuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwcm9jZXNzIGlzIGNvbXBsZXRlLlxuICpcbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgcHJvY2VzcyBmYWlscyBhZnRlciB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXRyaWVzIG9yIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzKHBhcmFtczogUHJvY2Vzc1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5ld0NvbnRlbnRQcm92aWRlcixcbiAgICBwYXRoT3JGaWxlLFxuICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICByZXNvdXJjZUxvY2tDb21wb25lbnRcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgREVGQVVMVF9SRVRSWV9PUFRJT05TID0ge1xuICAgIHNob3VsZEZhaWxPbk1pc3NpbmdGaWxlOiB0cnVlLFxuICAgIHNob3VsZFNob3dUaW1lb3V0Tm90aWNlOiB0cnVlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzIC0tIERlZmF1bHQgdmFsdWUuXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDBcbiAgfTtcbiAgY29uc3QgZnVsbE9wdGlvbnMgPSB7IC4uLkRFRkFVTFRfUkVUUllfT1BUSU9OUywgLi4ucGFyYW1zIH07XG4gIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgZnVsbE9wdGlvbnMuYWJvcnRTaWduYWwgPSBhYm9ydFNpZ25hbEFueShmdWxsT3B0aW9ucy5hYm9ydFNpZ25hbCwgYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG5cbiAgLy8gUmVmZXJlbmNlLWNvdW50ZWQgbG9jazsgY29tcG9zZXMgd2l0aCBhbnkgb3V0ZXIgbG9jay4gUmVsZWFzZWQgYXQgZnVuY3Rpb24gc2NvcGUgZXhpdC5cbiAgdXNpbmcgX2xvY2sgPSByZXNvdXJjZUxvY2tDb21wb25lbnQ/LmxvY2tGb3JQYXRoKHsgb3BlcmF0aW9uTmFtZTogJ1Byb2Nlc3Mgbm90ZScsIHBhdGhPckZpbGUgfSk7XG5cbiAgYXdhaXQgcmV0cnlXaXRoVGltZW91dE5vdGljZSh7XG4gICAgYXN5bmMgb3BlcmF0aW9uRnVuY3Rpb24oYWJvcnRTaWduYWwpIHtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgIGNvbnN0IG9sZENvbnRlbnQgPSBhd2FpdCByZWFkU2FmZShhcHAsIHBhdGhPckZpbGUpO1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgaWYgKG9sZENvbnRlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHNob3VsZFRyZWF0TWlzc2luZ0ZpbGVBc1N1Y2Nlc3MoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IHJlc29sdmVWYWx1ZShuZXdDb250ZW50UHJvdmlkZXIsIHsgYWJvcnRTaWduYWwsIGNvbnRlbnQ6IG9sZENvbnRlbnQgfSk7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuXG4gICAgICBpZiAobmV3Q29udGVudCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBwcm92aWRlciBoYW5kZWQgYmFjayBleGFjdGx5IHdoYXQgaXQgd2FzIGdpdmVuOiB0aGVyZSBpcyBub3RoaW5nIHRvIHdyaXRlLCBhbmQgdGhlIG9wZXJhdGlvblxuICAgICAgLy8gaXMgY29tcGxldGUuIERpc3RpbmN0IGZyb20gYG51bGxgLCB3aGljaCBhc2tzIGZvciBhIHJldHJ5IFx1MjAxNCBhIHByb3ZpZGVyIHdob3NlIHJlZnVzYWwgdG8gcmV3cml0ZSBpc1xuICAgICAgLy8gcGVybWFuZW50IChzZWUgYGFwcGx5Q2FudmFzQ2hhbmdlc2ApIHdvdWxkIG90aGVyd2lzZSBzcGluIGZvcmV2ZXIgYW5kIGhvbGQgdGhlIHNoYXJlZCBvcGVyYXRpb25cbiAgICAgIC8vIHF1ZXVlIG9wZW4gYmVoaW5kIGl0LlxuICAgICAgaWYgKG5ld0NvbnRlbnQgPT09IG9sZENvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBpc1N1Y2Nlc3MgPSB0cnVlO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW52b2tlRmlsZUFjdGlvblNhZmUoe1xuICAgICAgICBhcHAsXG4gICAgICAgIGFzeW5jIGZpbGVBY3Rpb24oZmlsZSkge1xuICAgICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgICAgYXdhaXQgYXBwLnZhdWx0LnByb2Nlc3MoZmlsZSwgKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgICAgICBpZiAoY29udGVudCAhPT0gb2xkQ29udGVudCkge1xuICAgICAgICAgICAgICBnZXRPYnNpZGlhbkxpYkRlYnVnZ2VyKCdWYXVsdDpwcm9jZXNzJykoJ0NvbnRlbnQgaGFzIGNoYW5nZWQgc2luY2UgaXQgd2FzIHJlYWQuIFJldHJ5aW5nLi4uJywge1xuICAgICAgICAgICAgICAgIGFjdHVhbENvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBvbGRDb250ZW50LFxuICAgICAgICAgICAgICAgIHBhdGg6IGZpbGUucGF0aFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3Q29udGVudDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHBhdGhPckZpbGVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBJbnZva2VGaWxlQWN0aW9uU2FmZVJlc3VsdC5Ob3RJbnZva2VkID8gc2hvdWxkVHJlYXRNaXNzaW5nRmlsZUFzU3VjY2VzcygpIDogaXNTdWNjZXNzO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9jb25zaXN0ZW50LWZ1bmN0aW9uLXNjb3BpbmcgLS0gQ2xvc2VzIG92ZXIgYGZ1bGxPcHRpb25zYCBhbmQgYHBhdGhgIGZyb20gdGhlIGVuY2xvc2luZyBzY29wZSwgc28gaXQgY2Fubm90IGJlIGhvaXN0ZWQuXG4gICAgICBmdW5jdGlvbiBzaG91bGRUcmVhdE1pc3NpbmdGaWxlQXNTdWNjZXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZnVsbE9wdGlvbnMuc2hvdWxkRmFpbE9uTWlzc2luZ0ZpbGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJyR7cGF0aH0nIG5vdCBmb3VuZGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgb3BlcmF0aW9uTmFtZTogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnZhdWx0LnByb2Nlc3NGaWxlLCB7IGZpbGVQYXRoOiBwYXRoIH0pLFxuICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICByZXRyeU9wdGlvbnM6IGZ1bGxPcHRpb25zLFxuICAgIHNob3VsZFNob3dUaW1lb3V0Tm90aWNlOiBmdWxsT3B0aW9ucy5zaG91bGRTaG93VGltZW91dE5vdGljZVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgY29udGVudCBvZiBhIGZpbGUgc2FmZWx5IGZyb20gdGhlIHZhdWx0LlxuICpcbiAqIEl0IGNvdmVycyB0aGUgY2FzZSB3aGVuIHRoZSBmaWxlIHdhcyByZW1vdmVkIGR1cmluZyB0aGUgcmVhZGluZy5cbiAqXG4gKiBUaGlzIGlzIE5PVCBhIHB1cmUgcmVhZDogaXQgY2FsbHMge0BsaW5rIHNhdmVOb3RlfSBmaXJzdCwgd2hpY2ggc2F2ZXMgYW55IG9wZW4gZWRpdG9yIHZpZXcgb2YgdGhlXG4gKiBub3RlIHRoYXQgaGFzIHVuc2F2ZWQgY2hhbmdlcywgc28gdGhlIGNvbnRlbnQgaXQgcmV0dXJucyBpcyB3aGF0IHRoZSB1c2VyIHNlZXMuIERvIG5vdCBjYWxsIGl0IGZyb21cbiAqIGFuIGF1dG9tYXRpYyB0cmlnZ2VyIHRoYXQgb25seSBkZWNpZGVzIHdoZXRoZXIgdG8gYWN0LiBTZWUgYGdldENhY2hlU2FmZWAgaW5cbiAqIGBvYnNpZGlhbi1kZXYtdXRpbHMvb2JzaWRpYW4vbWV0YWRhdGEtY2FjaGVgIGZvciB3aHkuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byByZWFkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgY29udGVudCBvZiB0aGUgZmlsZSBvciBgbnVsbGAgaWYgdGhlIGZpbGUgaXMgbWlzc2luZyBvciBkZWxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFNhZmUoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgbGV0IGNvbnRlbnQ6IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICBhd2FpdCBpbnZva2VGaWxlQWN0aW9uU2FmZSh7XG4gICAgYXBwLFxuICAgIGFzeW5jIGZpbGVBY3Rpb24oZmlsZSkge1xuICAgICAgYXdhaXQgc2F2ZU5vdGUoYXBwLCBmaWxlKTtcbiAgICAgIGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcbiAgICB9LFxuICAgIHBhdGhPckZpbGVcbiAgfSk7XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIFJlbmFtZXMgYSBmaWxlIHNhZmVseSBpbiB0aGUgdmF1bHQuXG4gKiBJZiB0aGUgbmV3IHBhdGggYWxyZWFkeSBleGlzdHMsIHRoZSBmaWxlIHdpbGwgYmUgcmVuYW1lZCB0byBhbiBhdmFpbGFibGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlbmFtaW5nIHRoZSBmaWxlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgbmV3IHBhdGggb2YgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5hbWVTYWZlKHBhcmFtczogUmVuYW1lU2FmZVBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbmV3UGF0aCxcbiAgICBvbGRQYXRoT3JBYnN0cmFjdEZpbGVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3Qgb2xkQWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlKHsgYXBwLCBwYXRoT3JGaWxlOiBvbGRQYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG5cbiAgY29uc3QgbmV3QXZhaWxhYmxlUGF0aCA9IGdldFNhZmVSZW5hbWVQYXRoKHsgYXBwLCBuZXdQYXRoLCBvbGRQYXRoT3JBYnN0cmFjdEZpbGUgfSk7XG5cbiAgaWYgKG9sZEFic3RyYWN0RmlsZS5wYXRoLnRvTG93ZXJDYXNlKCkgPT09IG5ld0F2YWlsYWJsZVBhdGgudG9Mb3dlckNhc2UoKSkge1xuICAgIGlmIChvbGRBYnN0cmFjdEZpbGUucGF0aCAhPT0gbmV3UGF0aCkge1xuICAgICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnJlbmFtZUZpbGUob2xkQWJzdHJhY3RGaWxlLCBuZXdBdmFpbGFibGVQYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG4gIH1cblxuICBjb25zdCBuZXdGb2xkZXJQYXRoID0gcGFyZW50Rm9sZGVyUGF0aChuZXdBdmFpbGFibGVQYXRoKTtcbiAgYXdhaXQgY3JlYXRlRm9sZGVyU2FmZShhcHAsIG5ld0ZvbGRlclBhdGgpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnJlbmFtZUZpbGUob2xkQWJzdHJhY3RGaWxlLCBuZXdBdmFpbGFibGVQYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIWF3YWl0IGFwcC52YXVsdC5leGlzdHMobmV3QXZhaWxhYmxlUGF0aCkgfHwgYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhvbGRBYnN0cmFjdEZpbGUucGF0aCkpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdBdmFpbGFibGVQYXRoO1xufVxuXG4vKipcbiAqIFNhdmVzIHRoZSBzcGVjaWZpZWQgbm90ZSBpbiB0aGUgT2JzaWRpYW4gYXBwLlxuICpcbiAqIENhbGxzIGB2aWV3LnNhdmUoKWAgb24gZXZlcnkgb3BlbiBtYXJrZG93biB2aWV3IG9mIHRoZSBub3RlIHRoYXQgaGFzIHVuc2F2ZWQgY2hhbmdlcy4gVGhpcyBpcyBhXG4gKiB3cml0ZSwgYW5kIHNldmVyYWwgaGVscGVycyB3aG9zZSBuYW1lcyByZWFkIGFzIHJlYWRzIGNhbGwgaXQ6IHtAbGluayByZWFkU2FmZX0sIGFuZCBgZ2V0Q2FjaGVTYWZlYCxcbiAqIGBnZXRGcm9udG1hdHRlclNhZmVgIGFuZCBgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmVgIGluIGBvYnNpZGlhbi1kZXYtdXRpbHMvb2JzaWRpYW4vbWV0YWRhdGEtY2FjaGVgLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgbm90ZSB0byBiZSBzYXZlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbm90ZSBpcyBzYXZlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVOb3RlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghaXNNYXJrZG93bkZpbGUocGF0aE9yRmlsZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIGZvciAoY29uc3QgbGVhZiBvZiBhcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShWaWV3VHlwZS5NYXJrZG93bikpIHtcbiAgICBpZiAobGVhZi52aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ICYmIGxlYWYudmlldy5maWxlPy5wYXRoID09PSBwYXRoICYmIGxlYWYudmlldy5kaXJ0eSkge1xuICAgICAgYXdhaXQgbGVhZi52aWV3LnNhdmUoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFzaGVzIGFuIGFic3RyYWN0IGZpbGUgc2FmZWx5IGZyb20gdGhlIHZhdWx0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gdHJhc2guXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaXMgdHJhc2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYXNoU2FmZShhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGUgfSk7XG4gIGlmICghZmlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLmZpbGVNYW5hZ2VyLnRyYXNoRmlsZShmaWxlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoYXdhaXQgYXBwLnZhdWx0LmV4aXN0cyhmaWxlLnBhdGgpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBnZXRPYnNpZGlhbkxpYkRlYnVnZ2VyKCdWYXVsdDp0cmFzaFNhZmUnKShgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJhc2hpbmcgJHtmaWxlLnBhdGh9LCBidXQgdGhlIGZpbGUgbm8gbG9uZ2VyIGV4aXN0cy5gLCB7IGVycm9yLCBwYXRoOiBmaWxlLnBhdGggfSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY29weUZvbGRlclNhZmUocGFyYW1zOiBDb3B5Rm9sZGVyU2FmZVBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZm9sZGVyLFxuICAgIG5ld1BhdGhcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgbmV3QXZhaWxhYmxlUGF0aCA9IGdldEF2YWlsYWJsZVBhdGgoYXBwLCBuZXdQYXRoKTtcblxuICAvLyBDb3B5aW5nIGEgZm9sZGVyIGludG8gaXRzIG93biBzdWJ0cmVlIG1ha2VzIHRoZSB3YWxrIGJlbG93IGdyb3cgdGhlIHNvdXJjZSB0cmVlIGFzIGl0IHJlYWRzIGl0LlxuICAvLyBSZWZ1c2luZyBpcyB0aGUgb25seSBmYWl0aGZ1bCBhbnN3ZXI6IHRoZXJlIGlzIG5vIGZpbml0ZSBjb3B5IHRvIG1ha2UuXG4gIGlmIChpc0NoaWxkT3JTZWxmKHsgYXBwLCBjaGlsZFBhdGhPckZpbGU6IG5ld0F2YWlsYWJsZVBhdGgsIHBhcmVudFBhdGhPckZpbGU6IGZvbGRlciB9KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgZm9sZGVyICcke2ZvbGRlci5wYXRofScgaW50byBpdHMgb3duIHN1YnRyZWUgJyR7bmV3QXZhaWxhYmxlUGF0aH0nYCk7XG4gIH1cblxuICAvLyBDcmVhdGluZyB0aGUgZGVzdGluYXRpb24gZmlyc3QgaXMgd2hhdCBwcmVzZXJ2ZXMgYW4gRU1QVFkgc291cmNlIHN1YmZvbGRlci5cbiAgLy8gQSBmaWxlcy1vbmx5IHdhbGsgd291bGQgc2lsZW50bHkgZHJvcCBpdC5cbiAgYXdhaXQgY3JlYXRlRm9sZGVyU2FmZShhcHAsIG5ld0F2YWlsYWJsZVBhdGgpO1xuXG4gIGZvciAoY29uc3QgY2hpbGQgb2YgZm9sZGVyLmNoaWxkcmVuKSB7XG4gICAgYXdhaXQgY29weVNhZmUoeyBhcHAsIG5ld1BhdGg6IGpvaW4obmV3QXZhaWxhYmxlUGF0aCwgY2hpbGQubmFtZSksIG9sZFBhdGhPckZpbGU6IGNoaWxkIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld0F2YWlsYWJsZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGludm9rZUZpbGVBY3Rpb25TYWZlKHBhcmFtczogSW52b2tlRmlsZUFjdGlvblNhZmVQYXJhbXMpOiBQcm9taXNlPEludm9rZUZpbGVBY3Rpb25TYWZlUmVzdWx0PiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgZmlsZUFjdGlvbixcbiAgICBwYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG4gIGxldCBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgaWYgKCFmaWxlIHx8IGZpbGUuZGVsZXRlZCkge1xuICAgIHJldHVybiBJbnZva2VGaWxlQWN0aW9uU2FmZVJlc3VsdC5Ob3RJbnZva2VkO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgZmlsZUFjdGlvbihmaWxlKTtcbiAgICByZXR1cm4gSW52b2tlRmlsZUFjdGlvblNhZmVSZXN1bHQuSW52b2tlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoIWZpbGUgfHwgZmlsZS5kZWxldGVkKSB7XG4gICAgICByZXR1cm4gSW52b2tlRmlsZUFjdGlvblNhZmVSZXN1bHQuTm90SW52b2tlZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmb2xkZXIgZXhpc3RzIG9uIGRpc2sgYW5kIGlzIGVtcHR5LlxuICpcbiAqIHtAbGluayBpc0VtcHR5Rm9sZGVyfSBjYWxscyBhIG1pc3NpbmcgcGF0aCBlbXB0eSwgd2hpY2ggaXMgd3JvbmcgZm9yIGEgY2FsbGVyIGFib3V0IHRvIGRlbGV0ZSBpdDogdGhlIHZhdWx0IGluZGV4XG4gKiBjYW4gc3RpbGwgaG9sZCBhIGZvbGRlciB0aGUgZGlzayBoYXMgYWxyZWFkeSBsb3N0LCBiZWNhdXNlIHRoZSBpbmRleCBkcm9wcyBpdCBsYXRlciwgZnJvbSB0aGUgZmlsZSB3YXRjaGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gZm9sZGVyIC0gVGhlIGZvbGRlciB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gYHRydWVgIHdoZW4gdGhlIGZvbGRlciBleGlzdHMgb24gZGlzayBhbmQgaXMgZW1wdHkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzRXhpc3RpbmdFbXB0eUZvbGRlcihhcHA6IEFwcCwgZm9sZGVyOiBURm9sZGVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHN0YXRzID0gYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuc3RhdChmb2xkZXIucGF0aCk7XG4gIHJldHVybiBzdGF0cz8udHlwZSA9PT0gJ2ZvbGRlcicgJiYgYXdhaXQgaXNFbXB0eUZvbGRlcihhcHAsIGZvbGRlcik7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWFBLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsaUJBQWlCO0FBQzFCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLG9CQUFvQjtBQUM3QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBVVAsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyw4QkFBOEI7QUFDdkM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFNBQVM7QUFLWCxJQUFLLHlCQUFMLGtCQUFLQSw0QkFBTDtBQUlMLEVBQUFBLHdCQUFBLGFBQVU7QUFLVixFQUFBQSx3QkFBQSxnQkFBYTtBQVRILFNBQUFBO0FBQUEsR0FBQTtBQWVMLElBQUssc0JBQUwsa0JBQUtDLHlCQUFMO0FBSUwsRUFBQUEscUJBQUEsWUFBUztBQUtULEVBQUFBLHFCQUFBLDRCQUF5QjtBQUt6QixFQUFBQSxxQkFBQSxVQUFPO0FBZEcsU0FBQUE7QUFBQSxHQUFBO0FBb0JMLElBQUssNkJBQUwsa0JBQUtDLGdDQUFMO0FBQ0wsRUFBQUEsNEJBQUEsYUFBVTtBQUNWLEVBQUFBLDRCQUFB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QUksQ0FBQyxNQUFNO0FBQ1Q7QUFBQSxFQUNGO0FBRUEsTUFBSTtBQUNGLFVBQU0sSUFBSSxZQUFZLFVBQVUsSUFBSTtBQUFBLEVBQ3RDLFNBQVMsT0FBTztBQUNkLFFBQUksTUFBTSxJQUFJLE1BQU0sT0FBTyxLQUFLLElBQUksR0FBRztBQUNyQyxZQUFNO0FBQUEsSUFDUjtBQUVBLDJCQUF1QixpQkFBaUIsRUFBRSxvQ0FBb0MsS0FBSyxJQUFJLG9DQUFvQyxFQUFFLE9BQU8sTUFBTSxLQUFLLEtBQUssQ0FBQztBQUFBLEVBQ3ZKO0FBQ0Y7QUFFQSxlQUFlLGVBQWUsUUFBK0M7QUFDM0UsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLFFBQU0sbUJBQW1CLGlCQUFpQixLQUFLLE9BQU87QUFJdEQsTUFBSSxjQUFjLEVBQUUsS0FBSyxpQkFBaUIsa0JBQWtCLGtCQUFrQixPQUFPLENBQUMsR0FBRztBQUN2RixVQUFNLElBQUksTUFBTSx1QkFBdUIsT0FBTyxJQUFJLDJCQUEyQixnQkFBZ0IsR0FBRztBQUFBLEVBQ2xHO0FBSUEsUUFBTSxpQkFBaUIsS0FBSyxnQkFBZ0I7QUFFNUMsYUFBVyxTQUFTLE9BQU8sVUFBVTtBQUNuQyxVQUFNLFNBQVMsRUFBRSxLQUFLLFNBQVMsS0FBSyxrQkFBa0IsTUFBTSxJQUFJLEdBQUcsZUFBZSxNQUFNLENBQUM7QUFBQSxFQUMzRjtBQUVBLFNBQU87QUFDVDtBQUVBLGVBQWUscUJBQXFCLFFBQXlFO0FBQzNHLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixRQUFNLE9BQU8sUUFBUSxLQUFLLFVBQVU7QUFDcEMsTUFBSSxPQUFPLGNBQWMsRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDO0FBQ2xELE1BQUksQ0FBQyxRQUFRLEtBQUssU0FBUztBQUN6QixXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUk7QUFDRixVQUFNLFdBQVcsSUFBSTtBQUNyQixXQUFPO0FBQUEsRUFDVCxTQUFTLE9BQU87QUFDZCxXQUFPLGNBQWMsRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDO0FBQzlDLFFBQUksQ0FBQyxRQUFRLEtBQUssU0FBUztBQUN6QixhQUFPO0FBQUEsSUFDVDtBQUNBLFVBQU07QUFBQSxFQUNSO0FBQ0Y7QUFZQSxlQUFlLHNCQUFzQixLQUFVLFFBQW1DO0FBQ2hGLFFBQU0sUUFBUSxNQUFNLElBQUksTUFBTSxRQUFRLEtBQUssT0FBTyxJQUFJO0FBQ3RELFNBQU8sT0FBTyxTQUFTLFlBQVksTUFBTSxjQUFjLEtBQUssTUFBTTtBQUNwRTsiLAogICJuYW1lcyI6IFsiQ3JlYXRlRm9sZGVyU2FmZVJlc3VsdCIsICJFbXB0eUZvbGRlckJlaGF2aW9yIiwgIkludm9rZUZpbGVBY3Rpb25TYWZlUmVzdWx0Il0KfQo=
|
|
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
5
5
|
|
|
6
6
|
(function () {
|
|
7
7
|
function ensureDisposeSymbols(symbolConstructor = Symbol) {
|
|
8
|
-
symbolConstructor.asyncDispose ??= symbolConstructor.for(
|
|
9
|
-
symbolConstructor.dispose ??= symbolConstructor.for(
|
|
8
|
+
symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
|
|
9
|
+
symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
function ensureBrowserProcess() {
|
|
13
13
|
const browserProcess = {
|
|
14
14
|
browser: true,
|
|
15
15
|
cwd() {
|
|
16
|
-
return
|
|
16
|
+
return "/";
|
|
17
17
|
},
|
|
18
18
|
env: {},
|
|
19
|
-
platform:
|
|
19
|
+
platform: "android"
|
|
20
20
|
};
|
|
21
|
-
|
|
22
|
-
// eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
|
|
23
21
|
const existingProcess = globalThis.process;
|
|
24
|
-
|
|
25
22
|
if (!existingProcess) {
|
|
26
|
-
// eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
|
|
27
23
|
globalThis.process = browserProcess;
|
|
28
24
|
return;
|
|
29
25
|
}
|
|
30
|
-
|
|
31
26
|
if (existingProcess.versions?.node) {
|
|
32
27
|
return;
|
|
33
28
|
}
|
|
34
|
-
|
|
35
29
|
const existingProcessRecord = existingProcess;
|
|
36
|
-
|
|
37
30
|
for (const [key, value] of Object.entries(browserProcess)) {
|
|
38
31
|
existingProcessRecord[key] ??= value;
|
|
39
32
|
}
|
|
40
|
-
|
|
41
|
-
existingProcessRecord['browser'] = true;
|
|
33
|
+
existingProcessRecord["browser"] = true;
|
|
42
34
|
}
|
|
43
35
|
|
|
44
36
|
(function initEsm() {
|
|
@@ -70,4 +62,4 @@ class PluginViewRegistrar {
|
|
|
70
62
|
export {
|
|
71
63
|
PluginViewRegistrar
|
|
72
64
|
};
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3ZpZXctcmVnaXN0cmFyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIHtAbGluayBWaWV3UmVnaXN0cmFyfSBpbnRlcmZhY2UgYW5kIHRoZSB7QGxpbmsgUGx1Z2luVmlld1JlZ2lzdHJhcn0gY2xhc3MuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBWaWV3LFxuICBXb3Jrc3BhY2VMZWFmXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vKipcbiAqIEEgcmVnaXN0cmFyIGZvciB2aWV3cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaWV3UmVnaXN0cmFyIHtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZpZXcgdHlwZSB3aXRoIGEgdmlldyBjcmVhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB2aWV3IHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIHJlZ2lzdGVyVmlldzogKHBhcmFtczogUGx1Z2luVmlld1JlZ2lzdHJhclJlZ2lzdGVyVmlld1BhcmFtcykgPT4gdm9pZDtcbn1cblxudHlwZSBQbHVnaW5WaWV3UmVnaXN0cmFyUmVnaXN0ZXJWaWV3UGFyYW1zID0gVmlld1JlZ2lzdHJhclJlZ2lzdGVyVmlld1BhcmFtcztcblxuaW50ZXJmYWNlIFZpZXdSZWdpc3RyYXJSZWdpc3RlclZpZXdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHZpZXcgdG8gcmVnaXN0ZXIuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2aWV3IGNyZWF0b3IgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgdmlldyBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBsZWFmIC0gVGhlIHdvcmtzcGFjZSBsZWFmIHdoZXJlIHRoZSB2aWV3IHdpbGwgYmUgY3JlYXRlZC5cbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgdmlldyBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IHZpZXdDcmVhdG9yOiAobGVhZjogV29ya3NwYWNlTGVhZikgPT4gVmlldztcbn1cblxuLyoqXG4gKiBBIHJlZ2lzdHJhciBmb3Igdmlld3MgdGhhdCByZWdpc3RlcnMgdmlld3Mgd2l0aCBhIHBsdWdpbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpblZpZXdSZWdpc3RyYXIgaW1wbGVtZW50cyBWaWV3UmVnaXN0cmFyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHtAbGluayBQbHVnaW5WaWV3UmVnaXN0cmFyfSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpbiAtIFRoZSBPYnNpZGlhbiBwbHVnaW4gaW5zdGFuY2UgdXNlZCB0byByZWdpc3RlciB2aWV3cy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW4pIHt9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHZpZXcgdHlwZSB3aXRoIGEgdmlldyBjcmVhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSB2aWV3IHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlclZpZXcocGFyYW1zOiBQbHVnaW5WaWV3UmVnaXN0cmFyUmVnaXN0ZXJWaWV3UGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy5wbHVnaW4ucmVnaXN0ZXJWaWV3KHBhcmFtcy50eXBlLCBwYXJhbXMudmlld0NyZWF0b3IpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdBLFNBQVMsY0FBYztBQWtDaEIsTUFBTSxvQkFBNkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNakQsWUFBK0IsUUFBZ0I7QUFBaEI7QUFBQSxFQUFpQjtBQUFBLEVBQWpCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTy9CLGFBQWEsUUFBcUQ7QUFDdkUsU0FBSyxPQUFPLGFBQWEsT0FBTyxNQUFNLE9BQU8sV0FBVztBQUFBLEVBQzFEO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|