obsidian-dev-utils 88.7.0 → 89.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/demo-vault-helper/main.js +20 -23
- package/dist/integration-test-plugin/main.js +2218 -1734
- package/dist/lib/cjs/__merged.cjs +57 -35
- package/dist/lib/cjs/__merged.d.cts +12 -10
- package/dist/lib/cjs/abort-controller.cjs +15 -22
- package/dist/lib/cjs/array.cjs +27 -26
- package/dist/lib/cjs/array.d.cts +25 -7
- package/dist/lib/cjs/async-events.cjs +87 -91
- package/dist/lib/cjs/async-events.d.cts +50 -50
- package/dist/lib/cjs/async.cjs +80 -80
- package/dist/lib/cjs/async.d.cts +23 -23
- package/dist/lib/cjs/beeper.cjs +11 -15
- package/dist/lib/cjs/blob.cjs +14 -25
- package/dist/lib/cjs/codemirror/index.cjs +11 -15
- package/dist/lib/cjs/codemirror/state-field-spec.cjs +11 -15
- package/dist/lib/cjs/debug-controller.cjs +11 -15
- package/dist/lib/cjs/debug.cjs +24 -32
- package/dist/lib/cjs/debug.d.cts +1 -1
- package/dist/lib/cjs/disposable.cjs +59 -43
- package/dist/lib/cjs/disposable.d.cts +27 -8
- package/dist/lib/cjs/enum.cjs +11 -15
- package/dist/lib/cjs/error.cjs +28 -33
- package/dist/lib/cjs/function.cjs +30 -34
- package/dist/lib/cjs/function.d.cts +26 -26
- package/dist/lib/cjs/generated-during-build.cjs +12 -16
- package/dist/lib/cjs/html-element.cjs +84 -89
- package/dist/lib/cjs/html-element.d.cts +15 -15
- package/dist/lib/cjs/index.cjs +11 -15
- package/dist/lib/cjs/integration-test-setup.cjs +11 -15
- package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +11 -15
- package/dist/lib/cjs/jest-setup.cjs +11 -15
- package/dist/lib/cjs/library.cjs +11 -15
- package/dist/lib/cjs/object-utils.cjs +120 -117
- package/dist/lib/cjs/object-utils.d.cts +27 -27
- package/dist/lib/cjs/obsidian/@types/dataview/data-model/value.d.cts +1 -1
- package/dist/lib/cjs/obsidian/@types/dataview/expression/field.d.cts +1 -1
- package/dist/lib/cjs/obsidian/@types/dataview/expression/functions.d.cts +4 -4
- package/dist/lib/cjs/obsidian/active-file-provider.cjs +11 -15
- package/dist/lib/cjs/obsidian/app.cjs +11 -15
- package/dist/lib/cjs/obsidian/async-with-notice.cjs +28 -32
- package/dist/lib/cjs/obsidian/async-with-notice.d.cts +2 -2
- package/dist/lib/cjs/obsidian/attachment-path.cjs +20 -24
- package/dist/lib/cjs/obsidian/attachment-path.d.cts +5 -5
- package/dist/lib/cjs/obsidian/backlink.cjs +12 -16
- package/dist/lib/cjs/obsidian/bases-view-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/callout.cjs +27 -26
- package/dist/lib/cjs/obsidian/callout.d.cts +9 -3
- package/dist/lib/cjs/obsidian/canvas.cjs +13 -16
- package/dist/lib/cjs/obsidian/case-insensitive-file-index.cjs +18 -20
- package/dist/lib/cjs/obsidian/code-block-markdown-information.cjs +11 -15
- package/dist/lib/cjs/obsidian/code-block-markdown-information.d.cts +2 -2
- package/dist/lib/cjs/obsidian/code-block-reg-exp.cjs +11 -15
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +18 -16
- package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +5 -0
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +56 -31
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +42 -8
- package/dist/lib/cjs/obsidian/command-handlers/command-handler.cjs +11 -15
- package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +10 -0
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +26 -30
- package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +8 -8
- package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +12 -16
- package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +12 -16
- package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.cjs +13 -17
- package/dist/lib/cjs/obsidian/command-handlers/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/command-handlers/open-demo-vault-command-handler.cjs +11 -15
- package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.cjs +11 -15
- package/dist/lib/cjs/obsidian/command-handlers/unlock-active-note-command-handler.cjs +11 -15
- package/dist/lib/cjs/obsidian/command-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/community-plugins.cjs +28 -25
- package/dist/lib/cjs/obsidian/community-plugins.d.cts +19 -5
- package/dist/lib/cjs/obsidian/components/abort-signal-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +4 -4
- package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +13 -16
- package/dist/lib/cjs/obsidian/components/async-events-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/component-ex.cjs +26 -28
- package/dist/lib/cjs/obsidian/components/component-ex.d.cts +3 -3
- package/dist/lib/cjs/obsidian/components/console-debug-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/components/console-debug-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/components/disposable-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/embed-extensions-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/generate-markdown-link-default-params-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/index.cjs +14 -15
- package/dist/lib/cjs/obsidian/components/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +29 -33
- package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +55 -55
- package/dist/lib/cjs/obsidian/components/notebook-navigator-menu-event-registrar-component.cjs +297 -0
- package/dist/lib/cjs/obsidian/components/notebook-navigator-menu-event-registrar-component.d.cts +139 -0
- package/dist/lib/cjs/obsidian/components/plugin-context-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +28 -31
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +26 -30
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +8 -8
- package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/pointer-position-component.cjs +13 -17
- package/dist/lib/cjs/obsidian/components/registry-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +72 -62
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +12 -1
- package/dist/lib/cjs/obsidian/components/syntax-highlighting-component.cjs +16 -20
- package/dist/lib/cjs/obsidian/components/syntax-highlighting-component.d.cts +8 -8
- package/dist/lib/cjs/obsidian/constructors/get-dom-events-handlers-constructor.cjs +14 -18
- package/dist/lib/cjs/obsidian/constructors/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/css-class.cjs +11 -15
- package/dist/lib/cjs/obsidian/data-handler.cjs +11 -15
- package/dist/lib/cjs/obsidian/dataview-link.cjs +13 -17
- package/dist/lib/cjs/obsidian/dataview.cjs +35 -41
- package/dist/lib/cjs/obsidian/dataview.d.cts +2 -2
- package/dist/lib/cjs/obsidian/demo-vault-helper.cjs +13 -17
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +22 -26
- package/dist/lib/cjs/obsidian/desktop-trusted-input.cjs +23 -21
- package/dist/lib/cjs/obsidian/editor-extension-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/editor-suggest-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/editor.cjs +17 -19
- package/dist/lib/cjs/obsidian/events.cjs +12 -16
- package/dist/lib/cjs/obsidian/events.d.cts +2 -2
- package/dist/lib/cjs/obsidian/extensions-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/file-change.cjs +76 -80
- package/dist/lib/cjs/obsidian/file-change.d.cts +3 -3
- package/dist/lib/cjs/obsidian/file-manager.cjs +33 -22
- package/dist/lib/cjs/obsidian/file-manager.d.cts +20 -1
- package/dist/lib/cjs/obsidian/file-system.cjs +15 -19
- package/dist/lib/cjs/obsidian/file-system.d.cts +3 -3
- package/dist/lib/cjs/obsidian/frontmatter-link-cache-with-offsets.cjs +11 -15
- package/dist/lib/cjs/obsidian/frontmatter.cjs +15 -19
- package/dist/lib/cjs/obsidian/hover-link-source-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/html-element.cjs +13 -17
- package/dist/lib/cjs/obsidian/html-element.d.cts +2 -2
- package/dist/lib/cjs/obsidian/i18n/custom-type-options.cjs +11 -15
- package/dist/lib/cjs/obsidian/i18n/default-translations.cjs +11 -15
- package/dist/lib/cjs/obsidian/i18n/i18n.cjs +13 -16
- package/dist/lib/cjs/obsidian/i18n/i18n.d.cts +7 -0
- package/dist/lib/cjs/obsidian/i18n/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +11 -15
- package/dist/lib/cjs/obsidian/i18n/locales/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/i18n/locales/translations-map.cjs +11 -15
- package/dist/lib/cjs/obsidian/index.cjs +14 -15
- package/dist/lib/cjs/obsidian/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/is-in-obsidian.cjs +11 -15
- package/dist/lib/cjs/obsidian/link-update-progress.cjs +11 -15
- package/dist/lib/cjs/obsidian/link.cjs +91 -81
- package/dist/lib/cjs/obsidian/link.d.cts +22 -22
- package/dist/lib/cjs/obsidian/logger.cjs +21 -25
- package/dist/lib/cjs/obsidian/logger.d.cts +5 -5
- package/dist/lib/cjs/obsidian/loop.cjs +14 -18
- package/dist/lib/cjs/obsidian/loop.d.cts +1 -1
- package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.cjs +12 -16
- package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.d.cts +3 -3
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +35 -40
- package/dist/lib/cjs/obsidian/markdown-code-block-processor.d.cts +3 -3
- package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.cjs +12 -16
- package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.d.cts +3 -3
- package/dist/lib/cjs/obsidian/markdown-view.cjs +11 -15
- package/dist/lib/cjs/obsidian/markdown.cjs +22 -24
- package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/metadata-cache.cjs +16 -20
- package/dist/lib/cjs/obsidian/metadata-cache.d.cts +2 -2
- package/dist/lib/cjs/obsidian/modals/alert.cjs +11 -15
- package/dist/lib/cjs/obsidian/modals/confirm.cjs +11 -15
- package/dist/lib/cjs/obsidian/modals/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +28 -32
- package/dist/lib/cjs/obsidian/modals/modal.cjs +11 -15
- package/dist/lib/cjs/obsidian/modals/prompt.cjs +11 -15
- package/dist/lib/cjs/obsidian/modals/select-item.cjs +16 -20
- package/dist/lib/cjs/obsidian/modals/select-item.d.cts +1 -1
- package/dist/lib/cjs/obsidian/modals/select-option.cjs +11 -15
- package/dist/lib/cjs/obsidian/modals/suggest-modal-command-builder.cjs +26 -28
- package/dist/lib/cjs/obsidian/modals/suggest-modal-command-builder.d.cts +5 -5
- package/dist/lib/cjs/obsidian/notebook-navigator.cjs +155 -0
- package/dist/lib/cjs/obsidian/notebook-navigator.d.cts +132 -0
- package/dist/lib/cjs/obsidian/obsidian-protocol-handler-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/obsidian-settings.cjs +11 -15
- package/dist/lib/cjs/obsidian/parse-link.cjs +61 -62
- package/dist/lib/cjs/obsidian/parse-link.d.cts +4 -4
- package/dist/lib/cjs/obsidian/path-settings.cjs +27 -25
- package/dist/lib/cjs/obsidian/pdf.cjs +13 -17
- package/dist/lib/cjs/obsidian/pdf.d.cts +2 -2
- package/dist/lib/cjs/obsidian/plugin/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +11 -15
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +156 -52
- package/dist/lib/cjs/obsidian/plugin/plugin-context.cjs +17 -21
- package/dist/lib/cjs/obsidian/plugin/plugin-context.d.cts +2 -2
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.cjs +20 -24
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +11 -9
- package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +29 -33
- package/dist/lib/cjs/obsidian/plugin/plugin.cjs +33 -16
- package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +11 -1
- package/dist/lib/cjs/obsidian/plugin-cli-handler-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/popovers/field-popover.cjs +11 -15
- package/dist/lib/cjs/obsidian/popovers/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/popovers/popover-anchor.cjs +14 -18
- package/dist/lib/cjs/obsidian/popovers/popover-anchor.d.cts +2 -2
- package/dist/lib/cjs/obsidian/popovers/popover.cjs +19 -23
- package/dist/lib/cjs/obsidian/queue.cjs +16 -20
- package/dist/lib/cjs/obsidian/queue.d.cts +2 -2
- package/dist/lib/cjs/obsidian/react/app-context.cjs +11 -15
- package/dist/lib/cjs/obsidian/react/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/reference.cjs +11 -15
- package/dist/lib/cjs/obsidian/resource-lock.cjs +157 -78
- package/dist/lib/cjs/obsidian/resource-lock.d.cts +5 -0
- package/dist/lib/cjs/obsidian/resource-url.cjs +12 -16
- package/dist/lib/cjs/obsidian/ribbon-icon-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/ribbon-icon-registrar.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/checkbox-component.cjs +18 -22
- package/dist/lib/cjs/obsidian/setting-components/checkbox-component.d.cts +5 -5
- package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.cjs +28 -31
- package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/date-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/date-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/date-time-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/date-time-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/email-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/email-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/file-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/setting-components/index.cjs +11 -15
- package/dist/lib/cjs/obsidian/setting-components/month-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/month-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.cjs +17 -21
- package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-email-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/multiple-email-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-file-component.cjs +12 -16
- package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.cjs +15 -19
- package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/number-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/number-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/password-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/password-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/setting-component-wrapper.cjs +16 -20
- package/dist/lib/cjs/obsidian/setting-components/setting-component-wrapper.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/telephone-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/telephone-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/text-based-component.cjs +16 -20
- package/dist/lib/cjs/obsidian/setting-components/text-based-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/time-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/time-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.cjs +15 -19
- package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.cjs +16 -20
- package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.cjs +18 -22
- package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-range-text-component.cjs +11 -15
- package/dist/lib/cjs/obsidian/setting-components/typed-text-component.cjs +16 -19
- package/dist/lib/cjs/obsidian/setting-components/typed-text-component.d.cts +4 -4
- package/dist/lib/cjs/obsidian/setting-components/url-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/url-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/validator-component.cjs +45 -49
- package/dist/lib/cjs/obsidian/setting-components/validator-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.cjs +11 -15
- package/dist/lib/cjs/obsidian/setting-components/week-component.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-components/week-component.d.cts +2 -2
- package/dist/lib/cjs/obsidian/setting-ex.cjs +76 -80
- package/dist/lib/cjs/obsidian/setting-ex.d.cts +42 -42
- package/dist/lib/cjs/obsidian/setting-group-ex.cjs +14 -18
- package/dist/lib/cjs/obsidian/setting-group-ex.d.cts +2 -2
- package/dist/lib/cjs/obsidian/status-bar-item-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/validation.cjs +11 -15
- package/dist/lib/cjs/obsidian/vault-delete.cjs +23 -20
- package/dist/lib/cjs/obsidian/vault-delete.d.cts +16 -2
- package/dist/lib/cjs/obsidian/vault-transaction.cjs +17 -18
- package/dist/lib/cjs/obsidian/vault.cjs +81 -63
- package/dist/lib/cjs/obsidian/vault.d.cts +32 -11
- package/dist/lib/cjs/obsidian/view-registrar.cjs +11 -15
- package/dist/lib/cjs/obsidian/workspace.cjs +12 -16
- package/dist/lib/cjs/obsidian-dev-utils-state.cjs +11 -15
- package/dist/lib/cjs/path.cjs +18 -22
- package/dist/lib/cjs/path.d.cts +1 -1
- package/dist/lib/cjs/reg-exp.cjs +38 -35
- package/dist/lib/cjs/reg-exp.d.cts +4 -4
- package/dist/lib/cjs/script-utils/build.cjs +21 -25
- package/dist/lib/cjs/script-utils/build.d.cts +1 -1
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +24 -28
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +36 -34
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +11 -15
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +20 -24
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.cjs +13 -17
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +16 -20
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/index.cjs +11 -15
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +11 -15
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +6 -2
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +32 -36
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/rename-css-plugin.cjs +11 -15
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +11 -15
- package/dist/lib/cjs/script-utils/bundlers/esbuild.cjs +11 -15
- package/dist/lib/cjs/script-utils/bundlers/index.cjs +11 -15
- package/dist/lib/cjs/script-utils/check-project-types.cjs +13 -17
- package/dist/lib/cjs/script-utils/check-project-types.d.cts +12 -4
- package/dist/lib/cjs/script-utils/cli-utils.cjs +39 -47
- package/dist/lib/cjs/script-utils/cli-utils.d.cts +6 -6
- package/dist/lib/cjs/script-utils/code-generator.cjs +11 -15
- package/dist/lib/cjs/script-utils/commitlint-config.cjs +11 -15
- package/dist/lib/cjs/script-utils/demo-vault-coverage.cjs +22 -23
- package/dist/lib/cjs/script-utils/demo-vault.cjs +11 -15
- package/dist/lib/cjs/script-utils/env-toggle.cjs +13 -17
- package/dist/lib/cjs/script-utils/exec.cjs +40 -44
- package/dist/lib/cjs/script-utils/exec.d.cts +4 -4
- package/dist/lib/cjs/script-utils/formatters/dprint.cjs +12 -16
- package/dist/lib/cjs/script-utils/formatters/index.cjs +11 -15
- package/dist/lib/cjs/script-utils/fs.cjs +13 -17
- package/dist/lib/cjs/script-utils/git.cjs +11 -15
- package/dist/lib/cjs/script-utils/index.cjs +11 -15
- package/dist/lib/cjs/script-utils/json.cjs +15 -19
- package/dist/lib/cjs/script-utils/json.d.cts +2 -2
- package/dist/lib/cjs/script-utils/linters/cspell.cjs +12 -16
- package/dist/lib/cjs/script-utils/linters/eslint-agnostic-core-boundary.cjs +11 -15
- package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +402 -16
- package/dist/lib/cjs/script-utils/linters/eslint-no-restricted-syntax.cjs +11 -15
- package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +11 -15
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +27 -31
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +27 -31
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.cjs +21 -25
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +11 -15
- package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.cjs +109 -113
- package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.cjs +13 -17
- package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.cjs +21 -25
- package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +51 -55
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +9 -3
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +25 -27
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +6 -2
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +33 -37
- package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.d.cts +3 -1
- package/dist/lib/cjs/script-utils/linters/eslint-rules/rule-tester-helper.cjs +11 -15
- package/dist/lib/cjs/script-utils/linters/eslint.cjs +14 -18
- package/dist/lib/cjs/script-utils/linters/index.cjs +14 -15
- package/dist/lib/cjs/script-utils/linters/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.cjs +18 -17
- package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.d.cts +2 -2
- package/dist/lib/cjs/script-utils/linters/markdownlint-ignores.cjs +138 -0
- package/dist/lib/cjs/script-utils/linters/markdownlint-ignores.d.cts +35 -0
- package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +20 -23
- package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +18 -22
- package/dist/lib/cjs/script-utils/linters/over-exposure.d.cts +54 -18
- package/dist/lib/cjs/script-utils/nano-staged-config.cjs +11 -15
- package/dist/lib/cjs/script-utils/npm-publish.cjs +11 -15
- package/dist/lib/cjs/script-utils/npm-run.cjs +20 -17
- package/dist/lib/cjs/script-utils/npm-run.d.cts +16 -2
- package/dist/lib/cjs/script-utils/npm.cjs +21 -25
- package/dist/lib/cjs/script-utils/npm.d.cts +11 -11
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +11 -15
- package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +165 -55
- package/dist/lib/cjs/script-utils/root.cjs +11 -15
- package/dist/lib/cjs/script-utils/test-runners/index.cjs +16 -17
- package/dist/lib/cjs/script-utils/test-runners/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/test-runners/integration-test-plugin.cjs +11 -15
- package/dist/lib/cjs/script-utils/test-runners/vitest-config.cjs +325 -0
- package/dist/lib/cjs/script-utils/test-runners/vitest-config.d.cts +118 -0
- package/dist/lib/cjs/script-utils/test-runners/vitest.cjs +11 -15
- package/dist/lib/cjs/script-utils/validate-declarations.cjs +11 -15
- package/dist/lib/cjs/script-utils/version.cjs +62 -63
- package/dist/lib/cjs/script-utils/version.d.cts +21 -21
- package/dist/lib/cjs/script-utils/warnings-as-errors.cjs +11 -15
- package/dist/lib/cjs/setup.cjs +11 -15
- package/dist/lib/cjs/setup.d.cts +1 -1
- package/dist/lib/cjs/strict-proxy.cjs +30 -34
- package/dist/lib/cjs/strict-proxy.d.cts +2 -2
- package/dist/lib/cjs/string.cjs +90 -93
- package/dist/lib/cjs/string.d.cts +60 -60
- package/dist/lib/cjs/transformers/date-transformer.cjs +11 -15
- package/dist/lib/cjs/transformers/duration-transformer.cjs +11 -15
- package/dist/lib/cjs/transformers/group-transformer.cjs +11 -15
- package/dist/lib/cjs/transformers/index.cjs +11 -15
- package/dist/lib/cjs/transformers/map-transformer.cjs +12 -16
- package/dist/lib/cjs/transformers/set-transformer.cjs +12 -16
- package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +11 -15
- package/dist/lib/cjs/transformers/transformer.cjs +11 -15
- package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +12 -16
- package/dist/lib/cjs/transformers/typed-transformer.cjs +11 -15
- package/dist/lib/cjs/two-way-map.cjs +11 -15
- package/dist/lib/cjs/type-guards.cjs +16 -20
- package/dist/lib/cjs/type-guards.d.cts +6 -6
- package/dist/lib/cjs/type.cjs +13 -17
- package/dist/lib/cjs/type.d.cts +2 -2
- package/dist/lib/cjs/url.cjs +18 -22
- package/dist/lib/cjs/url.d.cts +4 -4
- package/dist/lib/cjs/value-provider.cjs +15 -19
- package/dist/lib/cjs/value-provider.d.cts +6 -6
- package/dist/lib/cjs/value-wrapper.cjs +11 -15
- package/dist/lib/cjs/vitest-setup.cjs +11 -15
- package/dist/lib/esm/__merged.d.mts +12 -10
- package/dist/lib/esm/__merged.mjs +51 -23
- package/dist/lib/esm/abort-controller.mjs +5 -8
- package/dist/lib/esm/array.d.mts +25 -7
- package/dist/lib/esm/array.mjs +16 -12
- package/dist/lib/esm/async-events.d.mts +50 -50
- package/dist/lib/esm/async-events.mjs +81 -78
- package/dist/lib/esm/async.d.mts +23 -23
- package/dist/lib/esm/async.mjs +70 -66
- package/dist/lib/esm/blob.mjs +4 -11
- package/dist/lib/esm/debug.d.mts +1 -1
- package/dist/lib/esm/debug.mjs +14 -18
- package/dist/lib/esm/disposable.d.mts +27 -8
- package/dist/lib/esm/disposable.mjs +47 -29
- package/dist/lib/esm/error.mjs +18 -19
- package/dist/lib/esm/function.d.mts +26 -26
- package/dist/lib/esm/function.mjs +20 -20
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/html-element.d.mts +15 -15
- package/dist/lib/esm/html-element.mjs +74 -75
- package/dist/lib/esm/object-utils.d.mts +27 -27
- package/dist/lib/esm/object-utils.mjs +109 -102
- package/dist/lib/esm/obsidian/@types/dataview/data-model/value.d.mts +1 -1
- package/dist/lib/esm/obsidian/@types/dataview/expression/field.d.mts +1 -1
- package/dist/lib/esm/obsidian/@types/dataview/expression/functions.d.mts +4 -4
- package/dist/lib/esm/obsidian/app.mjs +1 -1
- package/dist/lib/esm/obsidian/async-with-notice.d.mts +2 -2
- package/dist/lib/esm/obsidian/async-with-notice.mjs +18 -18
- package/dist/lib/esm/obsidian/attachment-path.d.mts +5 -5
- package/dist/lib/esm/obsidian/attachment-path.mjs +10 -10
- package/dist/lib/esm/obsidian/backlink.mjs +2 -2
- package/dist/lib/esm/obsidian/callout.d.mts +9 -3
- package/dist/lib/esm/obsidian/callout.mjs +17 -12
- package/dist/lib/esm/obsidian/canvas.mjs +3 -2
- package/dist/lib/esm/obsidian/case-insensitive-file-index.mjs +8 -6
- package/dist/lib/esm/obsidian/code-block-markdown-information.d.mts +2 -2
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +5 -0
- package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +8 -2
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +42 -8
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +46 -17
- package/dist/lib/esm/obsidian/command-handlers/command-handler.d.mts +10 -0
- package/dist/lib/esm/obsidian/command-handlers/command-handler.mjs +1 -1
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +8 -8
- package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +16 -16
- package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +2 -2
- package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +2 -2
- package/dist/lib/esm/obsidian/command-handlers/global-command-handler.mjs +3 -3
- package/dist/lib/esm/obsidian/community-plugins.d.mts +19 -5
- package/dist/lib/esm/obsidian/community-plugins.mjs +17 -11
- package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +4 -4
- package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +3 -2
- package/dist/lib/esm/obsidian/components/component-ex.d.mts +3 -3
- package/dist/lib/esm/obsidian/components/component-ex.mjs +16 -14
- package/dist/lib/esm/obsidian/components/console-debug-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/components/console-debug-component.mjs +4 -4
- package/dist/lib/esm/obsidian/components/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/components/index.mjs +3 -1
- package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +5 -5
- package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +55 -55
- package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +19 -19
- package/dist/lib/esm/obsidian/components/notebook-navigator-menu-event-registrar-component.d.mts +139 -0
- package/dist/lib/esm/obsidian/components/notebook-navigator-menu-event-registrar-component.mjs +196 -0
- package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +18 -17
- package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +8 -8
- package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +18 -18
- package/dist/lib/esm/obsidian/components/pointer-position-component.mjs +3 -3
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +12 -1
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +62 -48
- package/dist/lib/esm/obsidian/components/syntax-highlighting-component.d.mts +8 -8
- package/dist/lib/esm/obsidian/components/syntax-highlighting-component.mjs +6 -6
- package/dist/lib/esm/obsidian/constructors/get-dom-events-handlers-constructor.mjs +4 -4
- package/dist/lib/esm/obsidian/data-handler.mjs +1 -1
- package/dist/lib/esm/obsidian/dataview-link.mjs +3 -3
- package/dist/lib/esm/obsidian/dataview.d.mts +2 -2
- package/dist/lib/esm/obsidian/dataview.mjs +25 -27
- package/dist/lib/esm/obsidian/demo-vault-helper.mjs +4 -3
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +12 -12
- package/dist/lib/esm/obsidian/desktop-trusted-input.mjs +13 -7
- package/dist/lib/esm/obsidian/editor.mjs +7 -5
- package/dist/lib/esm/obsidian/events.d.mts +2 -2
- package/dist/lib/esm/obsidian/events.mjs +2 -2
- package/dist/lib/esm/obsidian/file-change.d.mts +3 -3
- package/dist/lib/esm/obsidian/file-change.mjs +67 -67
- package/dist/lib/esm/obsidian/file-manager.d.mts +20 -1
- package/dist/lib/esm/obsidian/file-manager.mjs +22 -8
- package/dist/lib/esm/obsidian/file-system.d.mts +3 -3
- package/dist/lib/esm/obsidian/file-system.mjs +4 -4
- package/dist/lib/esm/obsidian/frontmatter.mjs +5 -5
- package/dist/lib/esm/obsidian/html-element.d.mts +2 -2
- package/dist/lib/esm/obsidian/html-element.mjs +3 -3
- package/dist/lib/esm/obsidian/i18n/i18n.d.mts +7 -0
- package/dist/lib/esm/obsidian/i18n/i18n.mjs +3 -2
- package/dist/lib/esm/obsidian/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/index.mjs +3 -1
- package/dist/lib/esm/obsidian/link.d.mts +22 -22
- package/dist/lib/esm/obsidian/link.mjs +76 -62
- package/dist/lib/esm/obsidian/logger.d.mts +5 -5
- package/dist/lib/esm/obsidian/logger.mjs +11 -11
- package/dist/lib/esm/obsidian/loop.d.mts +1 -1
- package/dist/lib/esm/obsidian/loop.mjs +4 -4
- package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.d.mts +3 -3
- package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.mjs +2 -2
- package/dist/lib/esm/obsidian/markdown-code-block-processor.d.mts +3 -3
- package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +25 -26
- package/dist/lib/esm/obsidian/markdown-post-processor-registrar.d.mts +3 -3
- package/dist/lib/esm/obsidian/markdown-post-processor-registrar.mjs +2 -2
- package/dist/lib/esm/obsidian/markdown.mjs +12 -10
- package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/metadata-cache.d.mts +2 -2
- package/dist/lib/esm/obsidian/metadata-cache.mjs +6 -6
- package/dist/lib/esm/obsidian/modals/confirm.mjs +1 -1
- package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +18 -18
- package/dist/lib/esm/obsidian/modals/select-item.d.mts +1 -1
- package/dist/lib/esm/obsidian/modals/select-item.mjs +6 -6
- package/dist/lib/esm/obsidian/modals/suggest-modal-command-builder.d.mts +5 -5
- package/dist/lib/esm/obsidian/modals/suggest-modal-command-builder.mjs +16 -14
- package/dist/lib/esm/obsidian/notebook-navigator.d.mts +132 -0
- package/dist/lib/esm/obsidian/notebook-navigator.mjs +49 -0
- package/dist/lib/esm/obsidian/parse-link.d.mts +4 -4
- package/dist/lib/esm/obsidian/parse-link.mjs +51 -48
- package/dist/lib/esm/obsidian/path-settings.mjs +17 -11
- package/dist/lib/esm/obsidian/pdf.d.mts +2 -2
- package/dist/lib/esm/obsidian/pdf.mjs +3 -3
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +156 -52
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +1 -1
- package/dist/lib/esm/obsidian/plugin/plugin-context.d.mts +2 -2
- package/dist/lib/esm/obsidian/plugin/plugin-context.mjs +7 -7
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +11 -9
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +10 -10
- package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +20 -20
- package/dist/lib/esm/obsidian/plugin/plugin.d.mts +11 -1
- package/dist/lib/esm/obsidian/plugin/plugin.mjs +23 -2
- package/dist/lib/esm/obsidian/popovers/popover-anchor.d.mts +2 -2
- package/dist/lib/esm/obsidian/popovers/popover-anchor.mjs +4 -4
- package/dist/lib/esm/obsidian/popovers/popover.mjs +9 -9
- package/dist/lib/esm/obsidian/queue.d.mts +2 -2
- package/dist/lib/esm/obsidian/queue.mjs +6 -6
- package/dist/lib/esm/obsidian/resource-lock.d.mts +5 -0
- package/dist/lib/esm/obsidian/resource-lock.mjs +147 -64
- package/dist/lib/esm/obsidian/resource-url.mjs +2 -2
- package/dist/lib/esm/obsidian/ribbon-icon-registrar.d.mts +2 -2
- package/dist/lib/esm/obsidian/ribbon-icon-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/setting-components/checkbox-component.d.mts +5 -5
- package/dist/lib/esm/obsidian/setting-components/checkbox-component.mjs +8 -8
- package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.mjs +18 -17
- package/dist/lib/esm/obsidian/setting-components/date-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/date-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/date-time-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/date-time-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/email-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/email-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/month-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/month-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.mjs +7 -7
- package/dist/lib/esm/obsidian/setting-components/multiple-email-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-email-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/multiple-file-component.mjs +2 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-text-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-text-component.mjs +5 -5
- package/dist/lib/esm/obsidian/setting-components/number-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/number-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/password-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/password-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.mjs +6 -6
- package/dist/lib/esm/obsidian/setting-components/telephone-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/telephone-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/text-based-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/text-based-component.mjs +6 -6
- package/dist/lib/esm/obsidian/setting-components/time-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/time-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.mjs +5 -5
- package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +6 -6
- package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.mjs +8 -8
- package/dist/lib/esm/obsidian/setting-components/typed-text-component.d.mts +4 -4
- package/dist/lib/esm/obsidian/setting-components/typed-text-component.mjs +6 -5
- package/dist/lib/esm/obsidian/setting-components/url-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/url-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-components/validator-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/validator-component.mjs +35 -35
- package/dist/lib/esm/obsidian/setting-components/week-component.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-components/week-component.mjs +4 -4
- package/dist/lib/esm/obsidian/setting-ex.d.mts +42 -42
- package/dist/lib/esm/obsidian/setting-ex.mjs +66 -66
- package/dist/lib/esm/obsidian/setting-group-ex.d.mts +2 -2
- package/dist/lib/esm/obsidian/setting-group-ex.mjs +4 -4
- package/dist/lib/esm/obsidian/vault-delete.d.mts +16 -2
- package/dist/lib/esm/obsidian/vault-delete.mjs +12 -6
- package/dist/lib/esm/obsidian/vault-transaction.mjs +8 -4
- package/dist/lib/esm/obsidian/vault.d.mts +32 -11
- package/dist/lib/esm/obsidian/vault.mjs +67 -47
- package/dist/lib/esm/obsidian/view-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/workspace.mjs +2 -2
- package/dist/lib/esm/path.d.mts +1 -1
- package/dist/lib/esm/path.mjs +7 -7
- package/dist/lib/esm/reg-exp.d.mts +4 -4
- package/dist/lib/esm/reg-exp.mjs +28 -21
- package/dist/lib/esm/script-utils/build.d.mts +1 -1
- package/dist/lib/esm/script-utils/build.mjs +15 -12
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +14 -14
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +26 -20
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +10 -10
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +3 -3
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +6 -6
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +6 -2
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +1 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +20 -20
- package/dist/lib/esm/script-utils/check-project-types.d.mts +12 -4
- package/dist/lib/esm/script-utils/check-project-types.mjs +3 -3
- package/dist/lib/esm/script-utils/cli-utils.d.mts +6 -6
- package/dist/lib/esm/script-utils/cli-utils.mjs +29 -33
- package/dist/lib/esm/script-utils/demo-vault-coverage.mjs +12 -9
- package/dist/lib/esm/script-utils/env-toggle.mjs +3 -3
- package/dist/lib/esm/script-utils/exec.d.mts +4 -4
- package/dist/lib/esm/script-utils/exec.mjs +32 -32
- package/dist/lib/esm/script-utils/formatters/dprint.mjs +2 -2
- package/dist/lib/esm/script-utils/fs.mjs +3 -3
- package/dist/lib/esm/script-utils/json.d.mts +2 -2
- package/dist/lib/esm/script-utils/json.mjs +5 -5
- package/dist/lib/esm/script-utils/linters/cspell.mjs +2 -2
- package/dist/lib/esm/script-utils/linters/eslint-config.mjs +392 -2
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +17 -17
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +17 -17
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.mjs +11 -11
- package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.mjs +99 -99
- package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs +3 -3
- package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.mjs +11 -11
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +9 -3
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +41 -41
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +6 -2
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +15 -13
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.d.mts +3 -1
- package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +23 -23
- package/dist/lib/esm/script-utils/linters/eslint.mjs +4 -4
- package/dist/lib/esm/script-utils/linters/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/linters/index.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.d.mts +2 -2
- package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.mjs +8 -3
- package/dist/lib/esm/script-utils/linters/markdownlint-ignores.d.mts +35 -0
- package/dist/lib/esm/script-utils/linters/markdownlint-ignores.mjs +33 -0
- package/dist/lib/esm/script-utils/linters/markdownlint.mjs +13 -9
- package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +54 -18
- package/dist/lib/esm/script-utils/linters/over-exposure.mjs +8 -8
- package/dist/lib/esm/script-utils/npm-run.d.mts +16 -2
- package/dist/lib/esm/script-utils/npm-run.mjs +9 -3
- package/dist/lib/esm/script-utils/npm.d.mts +11 -11
- package/dist/lib/esm/script-utils/npm.mjs +11 -11
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +165 -55
- package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +1 -1
- package/dist/lib/esm/script-utils/test-runners/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/test-runners/index.mjs +4 -2
- package/dist/lib/esm/script-utils/test-runners/vitest-config.d.mts +118 -0
- package/dist/lib/esm/script-utils/test-runners/vitest-config.mjs +210 -0
- package/dist/lib/esm/script-utils/validate-declarations.mjs +1 -1
- package/dist/lib/esm/script-utils/version.d.mts +21 -21
- package/dist/lib/esm/script-utils/version.mjs +48 -45
- package/dist/lib/esm/setup.d.mts +1 -1
- package/dist/lib/esm/setup.mjs +1 -1
- package/dist/lib/esm/strict-proxy.d.mts +2 -2
- package/dist/lib/esm/strict-proxy.mjs +20 -20
- package/dist/lib/esm/string.d.mts +60 -60
- package/dist/lib/esm/string.mjs +80 -79
- package/dist/lib/esm/transformers/map-transformer.mjs +2 -2
- package/dist/lib/esm/transformers/set-transformer.mjs +2 -2
- package/dist/lib/esm/transformers/two-way-map-transformer.mjs +2 -2
- package/dist/lib/esm/type-guards.d.mts +6 -6
- package/dist/lib/esm/type-guards.mjs +6 -6
- package/dist/lib/esm/type.d.mts +2 -2
- package/dist/lib/esm/type.mjs +3 -3
- package/dist/lib/esm/url.d.mts +4 -4
- package/dist/lib/esm/url.mjs +8 -8
- package/dist/lib/esm/value-provider.d.mts +6 -6
- package/dist/lib/esm/value-provider.mjs +5 -5
- package/dist/templates/scripts/vitest-config.ts +2 -88
- package/obsidian/components/notebook-navigator-menu-event-registrar-component/package.json +6 -0
- package/obsidian/notebook-navigator/package.json +6 -0
- package/package.json +17 -33
- package/script-utils/linters/markdownlint-ignores/package.json +6 -0
- package/script-utils/test-runners/vitest-config/package.json +6 -0
package/dist/lib/cjs/string.cjs
CHANGED
|
@@ -40,16 +40,11 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
40
40
|
globalThisRecord[key] ??= newFuncs[key]?.();
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
function name(obj) {
|
|
44
|
-
return obj;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
43
|
function extractDefault(module) {
|
|
48
44
|
return module && module.__esModule && 'default' in module ? module.default : module;
|
|
49
45
|
}
|
|
50
46
|
|
|
51
|
-
const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
|
|
52
|
-
'obsidian',
|
|
47
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
53
48
|
'@codemirror/autocomplete',
|
|
54
49
|
'@codemirror/collab',
|
|
55
50
|
'@codemirror/commands',
|
|
@@ -60,11 +55,12 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
60
55
|
'@codemirror/text',
|
|
61
56
|
'@codemirror/view',
|
|
62
57
|
'@lezer/common',
|
|
58
|
+
'@lezer/highlight',
|
|
63
59
|
'@lezer/lr',
|
|
64
|
-
'
|
|
65
|
-
|
|
60
|
+
'obsidian']
|
|
61
|
+
);
|
|
66
62
|
|
|
67
|
-
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
|
|
63
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
|
|
68
64
|
'@codemirror/closebrackets',
|
|
69
65
|
'@codemirror/comment',
|
|
70
66
|
'@codemirror/fold',
|
|
@@ -76,11 +72,11 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
76
72
|
'@codemirror/rangeset',
|
|
77
73
|
'@codemirror/rectangular-selection',
|
|
78
74
|
'@codemirror/stream-parser',
|
|
79
|
-
'@codemirror/tooltip']
|
|
80
|
-
|
|
75
|
+
'@codemirror/tooltip']
|
|
76
|
+
);
|
|
81
77
|
|
|
82
78
|
function requirePatched(id) {
|
|
83
|
-
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.
|
|
79
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
84
80
|
return originalRequire?.(id);
|
|
85
81
|
}
|
|
86
82
|
|
|
@@ -89,8 +85,8 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
89
85
|
if (id === 'process' || id === 'node:process') {
|
|
90
86
|
// eslint-disable-next-line no-console -- Valid usage.
|
|
91
87
|
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
92
|
-
|
|
93
|
-
return
|
|
88
|
+
|
|
89
|
+
return process;
|
|
94
90
|
}
|
|
95
91
|
} else {
|
|
96
92
|
const module = originalRequire?.(id);
|
|
@@ -151,13 +147,13 @@ var import_type_guards = require('./type-guards.cjs');
|
|
|
151
147
|
var import_value_provider = require('./value-provider.cjs');
|
|
152
148
|
const EMPTY = "";
|
|
153
149
|
const ESCAPE_MAP = {
|
|
154
|
-
"\n":
|
|
155
|
-
"\r":
|
|
156
|
-
" ":
|
|
157
|
-
"\b":
|
|
158
|
-
"\f":
|
|
159
|
-
"'":
|
|
160
|
-
'"':
|
|
150
|
+
"\n": String.raw`\n`,
|
|
151
|
+
"\r": String.raw`\r`,
|
|
152
|
+
" ": String.raw`\t`,
|
|
153
|
+
"\b": String.raw`\b`,
|
|
154
|
+
"\f": String.raw`\f`,
|
|
155
|
+
"'": String.raw`\'`,
|
|
156
|
+
'"': String.raw`\"`,
|
|
161
157
|
"\\": "\\\\"
|
|
162
158
|
};
|
|
163
159
|
const CR = "\r";
|
|
@@ -168,27 +164,27 @@ for (const [key, value] of Object.entries(ESCAPE_MAP)) {
|
|
|
168
164
|
UNESCAPE_MAP[value] = key;
|
|
169
165
|
}
|
|
170
166
|
function ensureEndsWith(params) {
|
|
171
|
-
const {
|
|
172
|
-
return
|
|
167
|
+
const { $string, suffix } = params;
|
|
168
|
+
return $string.endsWith(suffix) ? $string : $string + suffix;
|
|
173
169
|
}
|
|
174
|
-
function ensureLfEndings(
|
|
175
|
-
return
|
|
170
|
+
function ensureLfEndings($string) {
|
|
171
|
+
return $string.replaceAll(/\r\n?/g, "\n");
|
|
176
172
|
}
|
|
177
173
|
function ensureStartsWith(params) {
|
|
178
|
-
const {
|
|
179
|
-
return
|
|
174
|
+
const { $string, prefix } = params;
|
|
175
|
+
return $string.startsWith(prefix) ? $string : prefix + $string;
|
|
180
176
|
}
|
|
181
|
-
function escape(
|
|
182
|
-
return replace(
|
|
177
|
+
function escape($string) {
|
|
178
|
+
return replace($string, ESCAPE_MAP);
|
|
183
179
|
}
|
|
184
|
-
function getLfNormalizedOffsetToOriginalOffsetMapper(
|
|
180
|
+
function getLfNormalizedOffsetToOriginalOffsetMapper($string) {
|
|
185
181
|
const lfOffsetToOriginalOffsetMap = [];
|
|
186
|
-
for (let
|
|
187
|
-
if (
|
|
188
|
-
lfOffsetToOriginalOffsetMap.push(
|
|
189
|
-
|
|
182
|
+
for (let index = 0; index < $string.length; index++) {
|
|
183
|
+
if ($string[index] === CR && $string[index + 1] === LF) {
|
|
184
|
+
lfOffsetToOriginalOffsetMap.push(index + 1);
|
|
185
|
+
index++;
|
|
190
186
|
} else {
|
|
191
|
-
lfOffsetToOriginalOffsetMap.push(
|
|
187
|
+
lfOffsetToOriginalOffsetMap.push(index);
|
|
192
188
|
}
|
|
193
189
|
}
|
|
194
190
|
return (lfOffset) => {
|
|
@@ -196,16 +192,16 @@ function getLfNormalizedOffsetToOriginalOffsetMapper(str) {
|
|
|
196
192
|
return lfOffset;
|
|
197
193
|
}
|
|
198
194
|
if (lfOffset >= lfOffsetToOriginalOffsetMap.length) {
|
|
199
|
-
return lfOffset - lfOffsetToOriginalOffsetMap.length +
|
|
195
|
+
return lfOffset - lfOffsetToOriginalOffsetMap.length + $string.length;
|
|
200
196
|
}
|
|
201
197
|
(0, import_type_guards.assert)(lfOffsetToOriginalOffsetMap[lfOffset] !== void 0, "Could not map offset");
|
|
202
198
|
return lfOffsetToOriginalOffsetMap[lfOffset];
|
|
203
199
|
};
|
|
204
200
|
}
|
|
205
201
|
function hasSingleOccurrence(params) {
|
|
206
|
-
const {
|
|
207
|
-
const firstIndex =
|
|
208
|
-
const lastIndex =
|
|
202
|
+
const { $string, searchValue } = params;
|
|
203
|
+
const firstIndex = $string.indexOf(searchValue);
|
|
204
|
+
const lastIndex = $string.lastIndexOf(searchValue);
|
|
209
205
|
return firstIndex !== NOT_FOUND_INDEX && firstIndex === lastIndex;
|
|
210
206
|
}
|
|
211
207
|
function indent(params) {
|
|
@@ -214,127 +210,128 @@ function indent(params) {
|
|
|
214
210
|
}
|
|
215
211
|
function insertAt(params) {
|
|
216
212
|
const {
|
|
213
|
+
$string,
|
|
217
214
|
endIndex,
|
|
218
215
|
startIndex,
|
|
219
|
-
str,
|
|
220
216
|
substring
|
|
221
217
|
} = params;
|
|
222
218
|
const effectiveEndIndex = endIndex ?? startIndex;
|
|
223
|
-
return
|
|
219
|
+
return $string.slice(0, startIndex) + substring + $string.slice(effectiveEndIndex);
|
|
224
220
|
}
|
|
225
|
-
function makeValidVariableName(
|
|
221
|
+
function makeValidVariableName($string) {
|
|
226
222
|
return replaceAll({
|
|
223
|
+
$string,
|
|
227
224
|
replacer: "_",
|
|
228
|
-
searchValue: /[^a-zA-Z0-9_]/g
|
|
229
|
-
str
|
|
225
|
+
searchValue: /[^a-zA-Z0-9_]/g
|
|
230
226
|
});
|
|
231
227
|
}
|
|
232
|
-
function normalizeString(
|
|
228
|
+
function normalizeString($string) {
|
|
233
229
|
return replaceAll({
|
|
230
|
+
$string,
|
|
234
231
|
replacer: " ",
|
|
235
|
-
|
|
236
|
-
|
|
232
|
+
// eslint-disable-next-line unicorn/prefer-unicode-code-point-escapes -- These are the conventional spellings for U+00A0 and U+202F. The code-point form is only unambiguous with the `u` flag, so taking the fix would also change how the pattern is parsed.
|
|
233
|
+
searchValue: /\u00A0|\u202F/g
|
|
237
234
|
}).normalize("NFC");
|
|
238
235
|
}
|
|
239
|
-
function replace(
|
|
236
|
+
function replace($string, replacementsMap) {
|
|
240
237
|
const regExp = new RegExp(Object.keys(replacementsMap).map((source) => (0, import_reg_exp.escapeRegExp)(source)).join("|"), "g");
|
|
241
238
|
return replaceAll({
|
|
239
|
+
$string,
|
|
242
240
|
replacer: ({ substring: source }) => (0, import_type_guards.ensureNonNullable)(replacementsMap[source]),
|
|
243
|
-
searchValue: regExp
|
|
244
|
-
str
|
|
241
|
+
searchValue: regExp
|
|
245
242
|
});
|
|
246
243
|
}
|
|
247
244
|
function replaceAll(params) {
|
|
248
|
-
const {
|
|
245
|
+
const { $string, replacer } = params;
|
|
249
246
|
let { searchValue } = params;
|
|
250
|
-
if (
|
|
251
|
-
return
|
|
247
|
+
if (replacer === void 0) {
|
|
248
|
+
return $string;
|
|
252
249
|
}
|
|
253
250
|
if (searchValue instanceof RegExp && !searchValue.global) {
|
|
254
251
|
searchValue = new RegExp(searchValue.source, `${searchValue.flags}g`);
|
|
255
252
|
}
|
|
256
253
|
if (typeof replacer === "string") {
|
|
257
|
-
return
|
|
254
|
+
return $string.replaceAll(searchValue, replacer);
|
|
258
255
|
}
|
|
259
|
-
return
|
|
256
|
+
return $string.replaceAll(searchValue, (substring, ...$arguments) => {
|
|
260
257
|
const SOURCE_INDEX_OFFSET_FOR_GROUP_ARG = 2;
|
|
261
|
-
const
|
|
262
|
-
const sourceIndex =
|
|
263
|
-
const
|
|
258
|
+
const hasGroupsArgument = typeof $arguments.at(-1) === "object";
|
|
259
|
+
const sourceIndex = hasGroupsArgument ? $arguments.length - SOURCE_INDEX_OFFSET_FOR_GROUP_ARG : $arguments.length - 1;
|
|
260
|
+
const replaceArguments = {
|
|
264
261
|
// eslint-disable-next-line no-restricted-syntax -- Can't avoid.
|
|
265
|
-
|
|
266
|
-
groups:
|
|
262
|
+
capturedGroupArguments: [],
|
|
263
|
+
groups: hasGroupsArgument ? $arguments.at(-1) : void 0,
|
|
267
264
|
missingGroupIndices: [],
|
|
268
|
-
offset:
|
|
269
|
-
source:
|
|
265
|
+
offset: $arguments.at(sourceIndex - 1),
|
|
266
|
+
source: $arguments.at(sourceIndex),
|
|
270
267
|
substring
|
|
271
268
|
};
|
|
272
|
-
for (let
|
|
273
|
-
const item =
|
|
269
|
+
for (let index = 0; index < sourceIndex - 1; index++) {
|
|
270
|
+
const item = $arguments[index];
|
|
274
271
|
if (typeof item === "string") {
|
|
275
|
-
|
|
276
|
-
} else if (
|
|
277
|
-
|
|
272
|
+
replaceArguments.capturedGroupArguments.push(item);
|
|
273
|
+
} else if (item === void 0) {
|
|
274
|
+
replaceArguments.missingGroupIndices.push(index);
|
|
278
275
|
}
|
|
279
276
|
}
|
|
280
|
-
return replacer(
|
|
277
|
+
return replacer(replaceArguments) ?? replaceArguments.substring;
|
|
281
278
|
});
|
|
282
279
|
}
|
|
283
280
|
async function replaceAllAsync(params) {
|
|
284
|
-
const { replacer, searchValue
|
|
281
|
+
const { $string, replacer, searchValue } = params;
|
|
285
282
|
let { abortSignal } = params;
|
|
286
283
|
abortSignal ??= (0, import_abort_controller.abortSignalNever)();
|
|
287
284
|
abortSignal.throwIfAborted();
|
|
288
285
|
if (typeof replacer === "string") {
|
|
289
286
|
return replaceAll({
|
|
287
|
+
$string,
|
|
290
288
|
replacer,
|
|
291
|
-
searchValue
|
|
292
|
-
str
|
|
289
|
+
searchValue
|
|
293
290
|
});
|
|
294
291
|
}
|
|
295
292
|
const replacementAsyncFns = [];
|
|
296
293
|
replaceAll({
|
|
297
|
-
|
|
298
|
-
|
|
294
|
+
$string,
|
|
295
|
+
replacer: ($arguments) => {
|
|
296
|
+
replacementAsyncFns.push(() => (0, import_value_provider.resolveValue)(replacer, { abortSignal, ...$arguments }));
|
|
299
297
|
return "";
|
|
300
298
|
},
|
|
301
|
-
searchValue
|
|
302
|
-
str
|
|
299
|
+
searchValue
|
|
303
300
|
});
|
|
304
301
|
const replacements = [];
|
|
305
|
-
for (const
|
|
302
|
+
for (const asyncFunction of replacementAsyncFns) {
|
|
306
303
|
abortSignal.throwIfAborted();
|
|
307
|
-
replacements.push(await
|
|
304
|
+
replacements.push(await asyncFunction());
|
|
308
305
|
}
|
|
309
306
|
abortSignal.throwIfAborted();
|
|
310
307
|
return replaceAll({
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
308
|
+
$string,
|
|
309
|
+
replacer: ($arguments) => replacements.shift() ?? $arguments.substring,
|
|
310
|
+
searchValue
|
|
314
311
|
});
|
|
315
312
|
}
|
|
316
313
|
function trimEnd(params) {
|
|
317
|
-
const {
|
|
318
|
-
if (
|
|
319
|
-
return
|
|
314
|
+
const { $string, shouldValidate, suffix } = params;
|
|
315
|
+
if ($string.endsWith(suffix)) {
|
|
316
|
+
return $string.slice(0, -suffix.length);
|
|
320
317
|
}
|
|
321
318
|
if (shouldValidate) {
|
|
322
|
-
throw new Error(`String ${
|
|
319
|
+
throw new Error(`String ${$string} does not end with suffix ${suffix}`);
|
|
323
320
|
}
|
|
324
|
-
return
|
|
321
|
+
return $string;
|
|
325
322
|
}
|
|
326
323
|
function trimStart(params) {
|
|
327
|
-
const { prefix, shouldValidate
|
|
328
|
-
if (
|
|
329
|
-
return
|
|
324
|
+
const { $string, prefix, shouldValidate } = params;
|
|
325
|
+
if ($string.startsWith(prefix)) {
|
|
326
|
+
return $string.slice(prefix.length);
|
|
330
327
|
}
|
|
331
328
|
if (shouldValidate) {
|
|
332
|
-
throw new Error(`String ${
|
|
329
|
+
throw new Error(`String ${$string} does not start with prefix ${prefix}`);
|
|
333
330
|
}
|
|
334
|
-
return
|
|
331
|
+
return $string;
|
|
335
332
|
}
|
|
336
|
-
function unescape(
|
|
337
|
-
return replace(
|
|
333
|
+
function unescape($string) {
|
|
334
|
+
return replace($string, UNESCAPE_MAP);
|
|
338
335
|
}
|
|
339
336
|
function unindent(params) {
|
|
340
337
|
const { prefix, shouldThrowIfNotIndented = false, text } = params;
|
|
@@ -369,4 +366,4 @@ function unindent(params) {
|
|
|
369
366
|
unescape,
|
|
370
367
|
unindent
|
|
371
368
|
});
|
|
372
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3N0cmluZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBzdHJpbmcgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1heWJlUmV0dXJuIH0gZnJvbSAnLi90eXBlLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJy4vdmFsdWUtcHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBhYm9ydFNpZ25hbE5ldmVyIH0gZnJvbSAnLi9hYm9ydC1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGVzY2FwZVJlZ0V4cCB9IGZyb20gJy4vcmVnLWV4cC50cyc7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIGVuc3VyZU5vbk51bGxhYmxlXG59IGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi92YWx1ZS1wcm92aWRlci50cyc7XG5cbi8qKlxuICogQW4gZW1wdHkgc3RyaW5nIGNvbnN0YW50LlxuICpcbiAqIEEgc2hhcmVkIHNlbnRpbmVsIGZvciB0aGUgYCR7RU1QVFl9YCBwcmVmaXggdGhhdCBzaWxlbmNlcyB0aGUgYG9ic2lkaWFubWQvdWkvc2VudGVuY2UtY2FzZWAgRVNMaW50XG4gKiBmYWxzZSBwb3NpdGl2ZSBvbiBsZWdpdGltYXRlIGxvd2VyLWNhc2UgVUkgdGV4dCAoZS5nLiBgY3Vyc29yYCBjb2xsaWRpbmcgd2l0aCB0aGUgYEN1cnNvcmAgYnJhbmQpLlxuICogYHNldE5hbWUoYCR7RU1QVFl9Li4uYXQgY3Vyc29yLi4uYClgIHJlbmRlcnMgYnl0ZS1pZGVudGljYWwgYCcnYCBhdCBydW50aW1lIHdoaWxlIHRoZSBgey4uLn1gXG4gKiBwbGFjZWhvbGRlciBtYWtlcyB0aGUgcnVsZSBza2lwIHRoZSBzdHJpbmcuIENvbnN1bWVycyBpbXBvcnQgdGhpcyBpbnN0ZWFkIG9mIHJlZGVmaW5pbmcgYSBwZXItZmlsZVxuICogYGNvbnN0IEVNUFRZID0gJydgLlxuICovXG5leHBvcnQgY29uc3QgRU1QVFkgPSAnJztcblxuLyoqXG4gKiBBIHN5bmNocm9ub3VzL2FzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyByZXBsYWNlbWVudCBzdHJpbmdzLCBvciBhIHN0cmluZyB0byByZXBsYWNlIHdpdGguXG4gKlxuICogQHR5cGVQYXJhbSBDYXB0dXJlZEdyb3VwQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgY2FwdHVyZWQgZ3JvdXAgYXJndW1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBBc3luY1JlcGxhY2VyPENhcHR1cmVkR3JvdXBBcmdzIGV4dGVuZHMgc3RyaW5nW10+ID0gVmFsdWVQcm92aWRlcjxTdHJpbmdSZXBsYWNlbWVudCwgUmVwbGFjZUFyZ3M8Q2FwdHVyZWRHcm91cEFyZ3M+PjtcblxuLyoqXG4gKiBDb21tb24gYXJndW1lbnRzIGZvciB0aGUgYHJlcGxhY2VBbGxgL2ByZXBsYWNlQWxsQXN5bmNgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIENhcHR1cmVkR3JvdXBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBjYXB0dXJlZCBncm91cCBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGFjZUFyZ3M8Q2FwdHVyZWRHcm91cEFyZ3MgZXh0ZW5kcyBzdHJpbmdbXT4ge1xuICAvKipcbiAgICogQ2FwdHVyZWQgZ3JvdXAgYXJndW1lbnRzLlxuICAgKi9cbiAgY2FwdHVyZWRHcm91cEFyZ3M6IENhcHR1cmVkR3JvdXBBcmdzO1xuXG4gIC8qKlxuICAgKiBHcm91cHMgb2YgdGhlIG1hdGNoLlxuICAgKi9cbiAgZ3JvdXBzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBJbmRpY2VzIG9mIHRoZSBncm91cHMgdGhhdCB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgbWF0Y2guXG4gICAqL1xuICBtaXNzaW5nR3JvdXBJbmRpY2VzOiBudW1iZXJbXTtcblxuICAvKipcbiAgICogQW4gb2Zmc2V0IG9mIHRoZSBtYXRjaC5cbiAgICovXG4gIG9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHNvdXJjZSBvZiB0aGUgbWF0Y2guXG4gICAqL1xuICBzb3VyY2U6IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdWJzdHJpbmcgb2YgdGhlIG1hdGNoLlxuICAgKi9cbiAgc3Vic3RyaW5nOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyByZXBsYWNlbWVudCBzdHJpbmdzLCBvciBhIHN0cmluZyB0byByZXBsYWNlIHdpdGguXG4gKlxuICogQHR5cGVQYXJhbSBDYXB0dXJlZEdyb3VwQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgY2FwdHVyZWQgZ3JvdXAgYXJndW1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBSZXBsYWNlcjxDYXB0dXJlZEdyb3VwQXJncyBleHRlbmRzIHN0cmluZ1tdPiA9ICgoYXJnczogUmVwbGFjZUFyZ3M8Q2FwdHVyZWRHcm91cEFyZ3M+KSA9PiBTdHJpbmdSZXBsYWNlbWVudCkgfCBTdHJpbmdSZXBsYWNlbWVudDtcblxudHlwZSBTdHJpbmdSZXBsYWNlbWVudCA9IE1heWJlUmV0dXJuPHN0cmluZz47XG5cbi8qKlxuICogTWFwcGluZyBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gdGhlaXIgZXNjYXBlZCBjb3VudGVycGFydHMuXG4gKi9cbmNvbnN0IEVTQ0FQRV9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdcXG4nOiAnXFxcXG4nLFxuICAnXFxyJzogJ1xcXFxyJyxcbiAgJ1xcdCc6ICdcXFxcdCcsXG4gICdcXGInOiAnXFxcXGInLFxuICAnXFxmJzogJ1xcXFxmJyxcbiAgJ1xcJyc6ICdcXFxcXFwnJyxcbiAgJ1wiJzogJ1xcXFxcIicsXG4gICdcXFxcJzogJ1xcXFxcXFxcJ1xufSBhcyBjb25zdDtcblxuY29uc3QgQ1IgPSAnXFxyJztcbmNvbnN0IExGID0gJ1xcbic7XG5jb25zdCBOT1RfRk9VTkRfSU5ERVggPSAtMTtcblxuLyoqXG4gKiBNYXBwaW5nIG9mIGVzY2FwZWQgc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIHRoZWlyIHVuZXNjYXBlZCBjb3VudGVycGFydHMuXG4gKi9cbmNvbnN0IFVORVNDQVBFX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoRVNDQVBFX01BUCkpIHtcbiAgVU5FU0NBUEVfTUFQW3ZhbHVlXSA9IGtleTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZW5zdXJlRW5kc1dpdGh9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuc3VyZUVuZHNXaXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdG8gY2hlY2suXG4gICAqL1xuICByZWFkb25seSBzdHI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1ZmZpeCB0byBlbnN1cmUuXG4gICAqL1xuICByZWFkb25seSBzdWZmaXg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZW5zdXJlU3RhcnRzV2l0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5zdXJlU3RhcnRzV2l0aFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHRvIGVuc3VyZS5cbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRvIGNoZWNrLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGhhc1NpbmdsZU9jY3VycmVuY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhc1NpbmdsZU9jY3VycmVuY2VQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHNlYXJjaCB2YWx1ZSB0byBjaGVjayBmb3IuXG4gICAqL1xuICByZWFkb25seSBzZWFyY2hWYWx1ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRvIGNoZWNrLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGluZGVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdG8gYWRkIHRvIGVhY2ggbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRvIGluZGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaW5zZXJ0QXR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc2VydEF0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCB0byBlbmQgdGhlIHN1YnN0cmluZyBhdC5cbiAgICovXG4gIHJlYWRvbmx5IGVuZEluZGV4PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggdG8gaW5zZXJ0IHRoZSBzdWJzdHJpbmcgYXQuXG4gICAqL1xuICByZWFkb25seSBzdGFydEluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdG8gaW5zZXJ0IHRoZSBzdWJzdHJpbmcgaW50by5cbiAgICovXG4gIHJlYWRvbmx5IHN0cjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3Vic3RyaW5nIHRvIGluc2VydC5cbiAgICovXG4gIHJlYWRvbmx5IHN1YnN0cmluZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXBsYWNlQWxsQXN5bmN9LlxuICpcbiAqIEB0eXBlUGFyYW0gUmVwbGFjZUdyb3VwQXJncyAtIFRoZSB0eXBlcyBvZiB0aGUgY2FwdHVyZWQgZ3JvdXAgYXJndW1lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxhY2VBbGxBc3luY1BhcmFtczxSZXBsYWNlR3JvdXBBcmdzIGV4dGVuZHMgc3RyaW5nW10+IHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwgdG8gY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG5cbiAgLyoqXG4gICAqIEEgc3luY2hyb25vdXMvYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHJlcGxhY2VtZW50IHN0cmluZ3MsIG9yIGEgc3RyaW5nIHRvIHJlcGxhY2Ugd2l0aC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcGxhY2VyOiBBc3luY1JlcGxhY2VyPFJlcGxhY2VHcm91cEFyZ3M+O1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzZWFyY2ggZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VhcmNoVmFsdWU6IFJlZ0V4cCB8IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0cmluZyBpbiB3aGljaCB0byBwZXJmb3JtIHJlcGxhY2VtZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IHN0cjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXBsYWNlQWxsfS5cbiAqXG4gKiBAdHlwZVBhcmFtIENhcHR1cmVkR3JvdXBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBjYXB0dXJlZCBncm91cCBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGFjZUFsbFBhcmFtczxDYXB0dXJlZEdyb3VwQXJncyBleHRlbmRzIHN0cmluZ1tdPiB7XG4gIC8qKlxuICAgKiBBIHJlcGxhY2VyIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHJlcGxhY2VtZW50IHN0cmluZ3MsIG9yIGEgc3RyaW5nIHRvIHJlcGxhY2Ugd2l0aC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcGxhY2VyOiBSZXBsYWNlcjxDYXB0dXJlZEdyb3VwQXJncz47XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgb3IgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuXG4gICAqL1xuICByZWFkb25seSBzZWFyY2hWYWx1ZTogUmVnRXhwIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIGluIHdoaWNoIHRvIHBlcmZvcm0gcmVwbGFjZW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRyaW1FbmR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyaW1FbmRQYXJhbXMge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBlbmQgd2l0aCB0aGUgc3VmZml4LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRWYWxpZGF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICovXG4gIHJlYWRvbmx5IHN0cjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3VmZml4IHRvIHJlbW92ZSBmcm9tIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbiAgICovXG4gIHJlYWRvbmx5IHN1ZmZpeDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0cmltU3RhcnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyaW1TdGFydFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHRvIHJlbW92ZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzdHJpbmcgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgcHJlZml4LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRWYWxpZGF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICovXG4gIHJlYWRvbmx5IHN0cjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB1bmluZGVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5pbmRlbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHByZWZpeCB0byByZW1vdmUgZnJvbSBlYWNoIGxpbmUuXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aHJvd3MgYW4gZXJyb3IgaWYgYSBsaW5lIGlzIG5vdCBpbmRlbnRlZCB3aXRoIHRoZSBwcmVmaXguXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFRocm93SWZOb3RJbmRlbnRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdG8gdW5pbmRlbnQuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkIHN1ZmZpeCwgYWRkaW5nIGl0IGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHRoYXQgZW5kcyB3aXRoIHRoZSBzdWZmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVFbmRzV2l0aChwYXJhbXM6IEVuc3VyZUVuZHNXaXRoUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBzdHIsIHN1ZmZpeCB9ID0gcGFyYW1zO1xuICByZXR1cm4gc3RyLmVuZHNXaXRoKHN1ZmZpeCkgPyBzdHIgOiBzdHIgKyBzdWZmaXg7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IGEgc3RyaW5nIGhhcyBgTEZgIGxpbmUgZW5kaW5ncy5cbiAqXG4gKiBJdCByZXBsYWNlcyBgQ1JMRmAgbGluZSBlbmRpbmdzIHdpdGggYExGYC5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgd2l0aCBgTEZgIGxpbmUgZW5kaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUxmRW5kaW5ncyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZUFsbCgvXFxyXFxuPy9nLCAnXFxuJyk7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IGEgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LCBhZGRpbmcgaXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCB0aGUgcHJlZml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlU3RhcnRzV2l0aChwYXJhbXM6IEVuc3VyZVN0YXJ0c1dpdGhQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IHByZWZpeCwgc3RyIH0gPSBwYXJhbXM7XG4gIHJldHVybiBzdHIuc3RhcnRzV2l0aChwcmVmaXgpID8gc3RyIDogcHJlZml4ICsgc3RyO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXBsYWNlKHN0ciwgRVNDQVBFX01BUCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWFwcyBMRi1ub3JtYWxpemVkIG9mZnNldHMgdG8gb3JpZ2luYWwgb2Zmc2V0cy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBnZXQgdGhlIExGLW5vcm1hbGl6ZWQgaW5kaWNlcyBmcm9tLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IG1hcHMgTEYtbm9ybWFsaXplZCBvZmZzZXRzIHRvIG9yaWdpbmFsIG9mZnNldHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZk5vcm1hbGl6ZWRPZmZzZXRUb09yaWdpbmFsT2Zmc2V0TWFwcGVyKHN0cjogc3RyaW5nKTogKGxmT2Zmc2V0OiBudW1iZXIpID0+IG51bWJlciB7XG4gIGNvbnN0IGxmT2Zmc2V0VG9PcmlnaW5hbE9mZnNldE1hcDogbnVtYmVyW10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHJbaV0gPT09IENSICYmIHN0cltpICsgMV0gPT09IExGKSB7XG4gICAgICBsZk9mZnNldFRvT3JpZ2luYWxPZmZzZXRNYXAucHVzaChpICsgMSk7XG4gICAgICBpKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxmT2Zmc2V0VG9PcmlnaW5hbE9mZnNldE1hcC5wdXNoKGkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAobGZPZmZzZXQ6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgaWYgKGxmT2Zmc2V0IDwgMCkge1xuICAgICAgcmV0dXJuIGxmT2Zmc2V0O1xuICAgIH1cbiAgICBpZiAobGZPZmZzZXQgPj0gbGZPZmZzZXRUb09yaWdpbmFsT2Zmc2V0TWFwLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGxmT2Zmc2V0IC0gbGZPZmZzZXRUb09yaWdpbmFsT2Zmc2V0TWFwLmxlbmd0aCArIHN0ci5sZW5ndGg7XG4gICAgfVxuXG4gICAgYXNzZXJ0KGxmT2Zmc2V0VG9PcmlnaW5hbE9mZnNldE1hcFtsZk9mZnNldF0gIT09IHVuZGVmaW5lZCwgJ0NvdWxkIG5vdCBtYXAgb2Zmc2V0Jyk7XG4gICAgcmV0dXJuIGxmT2Zmc2V0VG9PcmlnaW5hbE9mZnNldE1hcFtsZk9mZnNldF07XG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3RyaW5nIGhhcyBhIHNpbmdsZSBvY2N1cnJlbmNlIG9mIGEgc2VhcmNoIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3RyaW5nIGhhcyBhIHNpbmdsZSBvY2N1cnJlbmNlIG9mIHRoZSBzZWFyY2ggdmFsdWUsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzU2luZ2xlT2NjdXJyZW5jZShwYXJhbXM6IEhhc1NpbmdsZU9jY3VycmVuY2VQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3QgeyBzZWFyY2hWYWx1ZSwgc3RyIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZpcnN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hWYWx1ZSk7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5sYXN0SW5kZXhPZihzZWFyY2hWYWx1ZSk7XG4gIHJldHVybiBmaXJzdEluZGV4ICE9PSBOT1RfRk9VTkRfSU5ERVggJiYgZmlyc3RJbmRleCA9PT0gbGFzdEluZGV4O1xufVxuXG4vKipcbiAqIEluZGVudHMgYSBzdHJpbmcgYnkgYWRkaW5nIGEgcHJlZml4IHRvIGVhY2ggbGluZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgaW5kZW50ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZW50KHBhcmFtczogSW5kZW50UGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBwcmVmaXgsIHRleHQgfSA9IHBhcmFtcztcbiAgcmV0dXJuIHRleHQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gYCR7cHJlZml4fSR7bGluZX1gKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIGEgc3Vic3RyaW5nIGF0IGEgc3BlY2lmaWVkIHBvc2l0aW9uIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBzdHJpbmcgd2l0aCB0aGUgc3Vic3RyaW5nIGluc2VydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QXQocGFyYW1zOiBJbnNlcnRBdFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBlbmRJbmRleCxcbiAgICBzdGFydEluZGV4LFxuICAgIHN0cixcbiAgICBzdWJzdHJpbmdcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgZWZmZWN0aXZlRW5kSW5kZXggPSBlbmRJbmRleCA/PyBzdGFydEluZGV4O1xuICByZXR1cm4gc3RyLnNsaWNlKDAsIHN0YXJ0SW5kZXgpICsgc3Vic3RyaW5nICsgc3RyLnNsaWNlKGVmZmVjdGl2ZUVuZEluZGV4KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyBpbnRvIGEgdmFsaWQgSmF2YVNjcmlwdCB2YXJpYWJsZSBuYW1lIGJ5IHJlcGxhY2luZyBpbnZhbGlkIGNoYXJhY3RlcnMgd2l0aCB1bmRlcnNjb3Jlcy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIHZhbGlkIHZhcmlhYmxlIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlVmFsaWRWYXJpYWJsZU5hbWUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgcmVwbGFjZXI6ICdfJyxcbiAgICBzZWFyY2hWYWx1ZTogL1teYS16QS1aMC05X10vZyxcbiAgICBzdHJcbiAgfSk7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHN0cmluZyBieSBjb252ZXJ0aW5nIGl0IHRvIHRoZSBORkMgZm9ybSBhbmQgcmVwbGFjaW5nIG5vbi1icmVha2luZyBzcGFjZXMgd2l0aCByZWd1bGFyIHNwYWNlcy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBub3JtYWxpemUuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgcmVwbGFjZXI6ICcgJyxcbiAgICBzZWFyY2hWYWx1ZTogL1xcdTAwQTB8XFx1MjAyRi9nLFxuICAgIHN0clxuICB9KS5ub3JtYWxpemUoJ05GQycpO1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIG9jY3VycmVuY2VzIG9mIHN0cmluZ3MgaW4gYSBnaXZlbiBzdHJpbmcgYmFzZWQgb24gYSByZXBsYWNlbWVudHMgbWFwLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIHBlcmZvcm0gcmVwbGFjZW1lbnRzIG9uLlxuICogQHBhcmFtIHJlcGxhY2VtZW50c01hcCAtIEFuIG9iamVjdCBtYXBwaW5nIHN0cmluZ3MgdG8gdGhlaXIgcmVwbGFjZW1lbnQgdmFsdWVzLlxuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIHN0cmluZyB3aXRoIHJlcGxhY2VtZW50cyBhcHBsaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShzdHI6IHN0cmluZywgcmVwbGFjZW1lbnRzTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhyZXBsYWNlbWVudHNNYXApLm1hcCgoc291cmNlKSA9PiBlc2NhcGVSZWdFeHAoc291cmNlKSkuam9pbignfCcpLCAnZycpO1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgcmVwbGFjZXI6ICh7IHN1YnN0cmluZzogc291cmNlIH0pID0+IGVuc3VyZU5vbk51bGxhYmxlKHJlcGxhY2VtZW50c01hcFtzb3VyY2VdKSxcbiAgICBzZWFyY2hWYWx1ZTogcmVnRXhwLFxuICAgIHN0clxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyBhbGwgb2NjdXJyZW5jZXMgb2YgYSBzZWFyY2ggc3RyaW5nIG9yIHBhdHRlcm4gd2l0aCB0aGUgcmVzdWx0cyBvZiBhbiByZXBsYWNlciBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIENhcHR1cmVkR3JvdXBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBjYXB0dXJlZCBncm91cCBhcmd1bWVudHMuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHdpdGggYWxsIHJlcGxhY2VtZW50cyBtYWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUFsbDxDYXB0dXJlZEdyb3VwQXJncyBleHRlbmRzIHN0cmluZ1tdPihwYXJhbXM6IFJlcGxhY2VBbGxQYXJhbXM8Q2FwdHVyZWRHcm91cEFyZ3M+KTogc3RyaW5nIHtcbiAgY29uc3QgeyByZXBsYWNlciwgc3RyIH0gPSBwYXJhbXM7XG4gIGxldCB7IHNlYXJjaFZhbHVlIH0gPSBwYXJhbXM7XG4gIGlmICh0eXBlb2YgcmVwbGFjZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmIChzZWFyY2hWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhc2VhcmNoVmFsdWUuZ2xvYmFsKSB7XG4gICAgc2VhcmNoVmFsdWUgPSBuZXcgUmVnRXhwKHNlYXJjaFZhbHVlLnNvdXJjZSwgYCR7c2VhcmNoVmFsdWUuZmxhZ3N9Z2ApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2VBbGwoc2VhcmNoVmFsdWUsIHJlcGxhY2VyKTtcbiAgfVxuXG4gIHJldHVybiBzdHIucmVwbGFjZUFsbChzZWFyY2hWYWx1ZSwgKHN1YnN0cmluZzogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCBTT1VSQ0VfSU5ERVhfT0ZGU0VUX0ZPUl9HUk9VUF9BUkcgPSAyO1xuICAgIGNvbnN0IGhhc0dyb3Vwc0FyZyA9IHR5cGVvZiBhcmdzLmF0KC0xKSA9PT0gJ29iamVjdCc7XG4gICAgY29uc3Qgc291cmNlSW5kZXggPSBoYXNHcm91cHNBcmcgPyBhcmdzLmxlbmd0aCAtIFNPVVJDRV9JTkRFWF9PRkZTRVRfRk9SX0dST1VQX0FSRyA6IGFyZ3MubGVuZ3RoIC0gMTtcblxuICAgIGNvbnN0IHJlcGxhY2VBcmdzOiBSZXBsYWNlQXJnczxDYXB0dXJlZEdyb3VwQXJncz4gPSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQ2FuJ3QgYXZvaWQuXG4gICAgICBjYXB0dXJlZEdyb3VwQXJnczogW10gYXMgdW5rbm93bltdIGFzIENhcHR1cmVkR3JvdXBBcmdzLFxuICAgICAgZ3JvdXBzOiBoYXNHcm91cHNBcmcgPyBhcmdzLmF0KC0xKSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IDogdW5kZWZpbmVkLFxuICAgICAgbWlzc2luZ0dyb3VwSW5kaWNlczogW10sXG4gICAgICBvZmZzZXQ6IGFyZ3MuYXQoc291cmNlSW5kZXggLSAxKSBhcyBudW1iZXIsXG4gICAgICBzb3VyY2U6IGFyZ3MuYXQoc291cmNlSW5kZXgpIGFzIHN0cmluZyxcbiAgICAgIHN1YnN0cmluZ1xuICAgIH07XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZUluZGV4IC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gYXJnc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVwbGFjZUFyZ3MuY2FwdHVyZWRHcm91cEFyZ3MucHVzaChpdGVtKTtcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIHY4IHRyYWNrcyB0aGUgaW1wbGljaXQgZWxzZSBicmFuY2ggdGhhdCBuZXZlciBoYXBwZW5zLiAqL1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgcmVwbGFjZUFyZ3MubWlzc2luZ0dyb3VwSW5kaWNlcy5wdXNoKGkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAocmVwbGFjZXIocmVwbGFjZUFyZ3MpIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gcmVwbGFjZUFyZ3Muc3Vic3RyaW5nO1xuICB9KTtcbn1cblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSByZXBsYWNlcyBhbGwgb2NjdXJyZW5jZXMgb2YgYSBzZWFyY2ggc3RyaW5nIG9yIHBhdHRlcm4gd2l0aCB0aGUgcmVzdWx0cyBvZiBhbiBhc3luY2hyb25vdXMgcmVwbGFjZXIgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBSZXBsYWNlR3JvdXBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBjYXB0dXJlZCBncm91cCBhcmd1bWVudHMuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdHJpbmcgd2l0aCBhbGwgcmVwbGFjZW1lbnRzIG1hZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQWxsQXN5bmM8UmVwbGFjZUdyb3VwQXJncyBleHRlbmRzIHN0cmluZ1tdPihwYXJhbXM6IFJlcGxhY2VBbGxBc3luY1BhcmFtczxSZXBsYWNlR3JvdXBBcmdzPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgcmVwbGFjZXIsIHNlYXJjaFZhbHVlLCBzdHIgfSA9IHBhcmFtcztcbiAgbGV0IHsgYWJvcnRTaWduYWwgfSA9IHBhcmFtcztcbiAgYWJvcnRTaWduYWwgPz89IGFib3J0U2lnbmFsTmV2ZXIoKTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgICByZXBsYWNlcixcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgc3RyXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCByZXBsYWNlbWVudEFzeW5jRm5zOiAoKCkgPT4gUHJvbWlzZTxTdHJpbmdSZXBsYWNlbWVudD4pW10gPSBbXTtcblxuICByZXBsYWNlQWxsPFJlcGxhY2VHcm91cEFyZ3M+KHtcbiAgICByZXBsYWNlcjogKGFyZ3MpID0+IHtcbiAgICAgIHJlcGxhY2VtZW50QXN5bmNGbnMucHVzaCgoKSA9PiByZXNvbHZlVmFsdWUocmVwbGFjZXIsIHsgYWJvcnRTaWduYWwsIC4uLmFyZ3MgfSkpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0sXG4gICAgc2VhcmNoVmFsdWUsXG4gICAgc3RyXG4gIH0pO1xuXG4gIGNvbnN0IHJlcGxhY2VtZW50czogU3RyaW5nUmVwbGFjZW1lbnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYXN5bmNGbiBvZiByZXBsYWNlbWVudEFzeW5jRm5zKSB7XG4gICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICByZXBsYWNlbWVudHMucHVzaChhd2FpdCBhc3luY0ZuKCkpO1xuICB9XG5cbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgIHJlcGxhY2VyOiAoYXJncyk6IHN0cmluZyA9PiByZXBsYWNlbWVudHMuc2hpZnQoKSA/PyBhcmdzLnN1YnN0cmluZyxcbiAgICBzZWFyY2hWYWx1ZSxcbiAgICBzdHJcbiAgfSk7XG59XG5cbi8qKlxuICogVHJpbXMgdGhlIHNwZWNpZmllZCBzdWZmaXggZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSB0cmltbWVkIHN0cmluZy5cbiAqIEB0aHJvd3MgSWYgYHNob3VsZFZhbGlkYXRlYCBpcyBgdHJ1ZWAgYW5kIHRoZSBzdHJpbmcgZG9lcyBub3QgZW5kIHdpdGggdGhlIHN1ZmZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW1FbmQocGFyYW1zOiBUcmltRW5kUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBzaG91bGRWYWxpZGF0ZSwgc3RyLCBzdWZmaXggfSA9IHBhcmFtcztcbiAgaWYgKHN0ci5lbmRzV2l0aChzdWZmaXgpKSB7XG4gICAgcmV0dXJuIHN0ci5zbGljZSgwLCAtc3VmZml4Lmxlbmd0aCk7XG4gIH1cblxuICBpZiAoc2hvdWxkVmFsaWRhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyAke3N0cn0gZG9lcyBub3QgZW5kIHdpdGggc3VmZml4ICR7c3VmZml4fWApO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBUcmltcyB0aGUgc3BlY2lmaWVkIHByZWZpeCBmcm9tIHRoZSBzdGFydCBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgdHJpbW1lZCBzdHJpbmcuXG4gKiBAdGhyb3dzIElmIGBzaG91bGRWYWxpZGF0ZWAgaXMgYHRydWVgIGFuZCB0aGUgc3RyaW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIHByZWZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW1TdGFydChwYXJhbXM6IFRyaW1TdGFydFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgcHJlZml4LCBzaG91bGRWYWxpZGF0ZSwgc3RyIH0gPSBwYXJhbXM7XG4gIGlmIChzdHIuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgcmV0dXJuIHN0ci5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiAgfVxuXG4gIGlmIChzaG91bGRWYWxpZGF0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7c3RyfSBkb2VzIG5vdCBzdGFydCB3aXRoIHByZWZpeCAke3ByZWZpeH1gKTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogVW5lc2NhcGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBlc2NhcGUgc2VxdWVuY2VzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIHVuZXNjYXBlLlxuICogQHJldHVybnMgVGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXBsYWNlKHN0ciwgVU5FU0NBUEVfTUFQKTtcbn1cblxuLyoqXG4gKiBVbmluZGVudHMgYSBzdHJpbmcgYnkgcmVtb3ZpbmcgYSBwcmVmaXggZnJvbSBlYWNoIGxpbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHVuaW5kZW50ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pbmRlbnQocGFyYW1zOiBVbmluZGVudFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgcHJlZml4LCBzaG91bGRUaHJvd0lmTm90SW5kZW50ZWQgPSBmYWxzZSwgdGV4dCB9ID0gcGFyYW1zO1xuICByZXR1cm4gdGV4dC5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiB7XG4gICAgaWYgKGxpbmUuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICByZXR1cm4gbGluZS5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiAgICB9XG4gICAgaWYgKHNob3VsZFRocm93SWZOb3RJbmRlbnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMaW5lIFwiJHtsaW5lfVwiIGlzIG5vdCBpbmRlbnRlZCB3aXRoIFwiJHtwcmVmaXh9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmU7XG4gIH0pLmpvaW4oJ1xcbicpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLDhCQUFpQztBQUNqQyxxQkFBNkI7QUFDN0IseUJBR087QUFDUCw0QkFBNkI7QUFXdEIsTUFBTSxRQUFRO0FBMERyQixNQUFNLGFBQXFDO0FBQUEsRUFDekMsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sS0FBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sS0FBTTtBQUFBLEVBQ04sS0FBSztBQUFBLEVBQ0wsTUFBTTtBQUNSO0FBRUEsTUFBTSxLQUFLO0FBQ1gsTUFBTSxLQUFLO0FBQ1gsTUFBTSxrQkFBa0I7QUFLeEIsTUFBTSxlQUF1QyxDQUFDO0FBQzlDLFdBQVcsQ0FBQyxLQUFLLEtBQUssS0FBSyxPQUFPLFFBQVEsVUFBVSxHQUFHO0FBQ3JELGVBQWEsS0FBSyxJQUFJO0FBQ3hCO0FBZ05PLFNBQVMsZUFBZSxRQUFzQztBQUNuRSxRQUFNLEVBQUUsS0FBSyxPQUFPLElBQUk7QUFDeEIsU0FBTyxJQUFJLFNBQVMsTUFBTSxJQUFJLE1BQU0sTUFBTTtBQUM1QztBQVVPLFNBQVMsZ0JBQWdCLEtBQXFCO0FBQ25ELFNBQU8sSUFBSSxXQUFXLFVBQVUsSUFBSTtBQUN0QztBQVFP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
|
|
369
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3N0cmluZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBzdHJpbmcgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1heWJlUmV0dXJuIH0gZnJvbSAnLi90eXBlLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJy4vdmFsdWUtcHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBhYm9ydFNpZ25hbE5ldmVyIH0gZnJvbSAnLi9hYm9ydC1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGVzY2FwZVJlZ0V4cCB9IGZyb20gJy4vcmVnLWV4cC50cyc7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIGVuc3VyZU5vbk51bGxhYmxlXG59IGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi92YWx1ZS1wcm92aWRlci50cyc7XG5cbi8qKlxuICogQW4gZW1wdHkgc3RyaW5nIGNvbnN0YW50LlxuICpcbiAqIEEgc2hhcmVkIHNlbnRpbmVsIGZvciB0aGUgYCR7RU1QVFl9YCBwcmVmaXggdGhhdCBzaWxlbmNlcyB0aGUgYG9ic2lkaWFubWQvdWkvc2VudGVuY2UtY2FzZWAgRVNMaW50XG4gKiBmYWxzZSBwb3NpdGl2ZSBvbiBsZWdpdGltYXRlIGxvd2VyLWNhc2UgVUkgdGV4dCAoZS5nLiBgY3Vyc29yYCBjb2xsaWRpbmcgd2l0aCB0aGUgYEN1cnNvcmAgYnJhbmQpLlxuICogYHNldE5hbWUoYCR7RU1QVFl9Li4uYXQgY3Vyc29yLi4uYClgIHJlbmRlcnMgYnl0ZS1pZGVudGljYWwgYCcnYCBhdCBydW50aW1lIHdoaWxlIHRoZSBgey4uLn1gXG4gKiBwbGFjZWhvbGRlciBtYWtlcyB0aGUgcnVsZSBza2lwIHRoZSBzdHJpbmcuIENvbnN1bWVycyBpbXBvcnQgdGhpcyBpbnN0ZWFkIG9mIHJlZGVmaW5pbmcgYSBwZXItZmlsZVxuICogYGNvbnN0IEVNUFRZID0gJydgLlxuICovXG5leHBvcnQgY29uc3QgRU1QVFkgPSAnJztcblxuLyoqXG4gKiBBIHN5bmNocm9ub3VzL2FzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyByZXBsYWNlbWVudCBzdHJpbmdzLCBvciBhIHN0cmluZyB0byByZXBsYWNlIHdpdGguXG4gKlxuICogQHR5cGVQYXJhbSBDYXB0dXJlZEdyb3VwQXJndW1lbnRzIC0gVGhlIHR5cGVzIG9mIHRoZSBjYXB0dXJlZCBncm91cCBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIEFzeW5jUmVwbGFjZXI8Q2FwdHVyZWRHcm91cEFyZ3VtZW50cyBleHRlbmRzIHN0cmluZ1tdPiA9IFZhbHVlUHJvdmlkZXI8U3RyaW5nUmVwbGFjZW1lbnQsIFJlcGxhY2VBcmd1bWVudHM8Q2FwdHVyZWRHcm91cEFyZ3VtZW50cz4+O1xuXG4vKipcbiAqIENvbW1vbiBhcmd1bWVudHMgZm9yIHRoZSBgcmVwbGFjZUFsbGAvYHJlcGxhY2VBbGxBc3luY2AgZnVuY3Rpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gQ2FwdHVyZWRHcm91cEFyZ3VtZW50cyAtIFRoZSB0eXBlcyBvZiB0aGUgY2FwdHVyZWQgZ3JvdXAgYXJndW1lbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxhY2VBcmd1bWVudHM8Q2FwdHVyZWRHcm91cEFyZ3VtZW50cyBleHRlbmRzIHN0cmluZ1tdPiB7XG4gIC8qKlxuICAgKiBDYXB0dXJlZCBncm91cCBhcmd1bWVudHMuXG4gICAqL1xuICBjYXB0dXJlZEdyb3VwQXJndW1lbnRzOiBDYXB0dXJlZEdyb3VwQXJndW1lbnRzO1xuXG4gIC8qKlxuICAgKiBHcm91cHMgb2YgdGhlIG1hdGNoLlxuICAgKi9cbiAgZ3JvdXBzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBJbmRpY2VzIG9mIHRoZSBncm91cHMgdGhhdCB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgbWF0Y2guXG4gICAqL1xuICBtaXNzaW5nR3JvdXBJbmRpY2VzOiBudW1iZXJbXTtcblxuICAvKipcbiAgICogQW4gb2Zmc2V0IG9mIHRoZSBtYXRjaC5cbiAgICovXG4gIG9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHNvdXJjZSBvZiB0aGUgbWF0Y2guXG4gICAqL1xuICBzb3VyY2U6IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdWJzdHJpbmcgb2YgdGhlIG1hdGNoLlxuICAgKi9cbiAgc3Vic3RyaW5nOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyByZXBsYWNlbWVudCBzdHJpbmdzLCBvciBhIHN0cmluZyB0byByZXBsYWNlIHdpdGguXG4gKlxuICogQHR5cGVQYXJhbSBDYXB0dXJlZEdyb3VwQXJndW1lbnRzIC0gVGhlIHR5cGVzIG9mIHRoZSBjYXB0dXJlZCBncm91cCBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcGxhY2VyPENhcHR1cmVkR3JvdXBBcmd1bWVudHMgZXh0ZW5kcyBzdHJpbmdbXT4gPSAoKCRhcmd1bWVudHM6IFJlcGxhY2VBcmd1bWVudHM8Q2FwdHVyZWRHcm91cEFyZ3VtZW50cz4pID0+IFN0cmluZ1JlcGxhY2VtZW50KSB8IFN0cmluZ1JlcGxhY2VtZW50O1xuXG50eXBlIFN0cmluZ1JlcGxhY2VtZW50ID0gTWF5YmVSZXR1cm48c3RyaW5nPjtcblxuLyoqXG4gKiBNYXBwaW5nIG9mIHNwZWNpYWwgY2hhcmFjdGVycyB0byB0aGVpciBlc2NhcGVkIGNvdW50ZXJwYXJ0cy5cbiAqL1xuY29uc3QgRVNDQVBFX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ1xcbic6IFN0cmluZy5yYXdgXFxuYCxcbiAgJ1xccic6IFN0cmluZy5yYXdgXFxyYCxcbiAgJ1xcdCc6IFN0cmluZy5yYXdgXFx0YCxcbiAgJ1xcYic6IFN0cmluZy5yYXdgXFxiYCxcbiAgJ1xcZic6IFN0cmluZy5yYXdgXFxmYCxcbiAgJ1xcJyc6IFN0cmluZy5yYXdgXFwnYCxcbiAgJ1wiJzogU3RyaW5nLnJhd2BcXFwiYCxcbiAgJ1xcXFwnOiAnXFxcXFxcXFwnXG59IGFzIGNvbnN0O1xuXG5jb25zdCBDUiA9ICdcXHInO1xuY29uc3QgTEYgPSAnXFxuJztcbmNvbnN0IE5PVF9GT1VORF9JTkRFWCA9IC0xO1xuXG4vKipcbiAqIE1hcHBpbmcgb2YgZXNjYXBlZCBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gdGhlaXIgdW5lc2NhcGVkIGNvdW50ZXJwYXJ0cy5cbiAqL1xuY29uc3QgVU5FU0NBUEVfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5mb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhFU0NBUEVfTUFQKSkge1xuICBVTkVTQ0FQRV9NQVBbdmFsdWVdID0ga2V5O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBlbnN1cmVFbmRzV2l0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5zdXJlRW5kc1dpdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHN0cmluZyB0byBjaGVjay5cbiAgICovXG4gIHJlYWRvbmx5ICRzdHJpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1ZmZpeCB0byBlbnN1cmUuXG4gICAqL1xuICByZWFkb25seSBzdWZmaXg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZW5zdXJlU3RhcnRzV2l0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5zdXJlU3RhcnRzV2l0aFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRvIGNoZWNrLlxuICAgKi9cbiAgcmVhZG9ubHkgJHN0cmluZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHRvIGVuc3VyZS5cbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBoYXNTaW5nbGVPY2N1cnJlbmNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIYXNTaW5nbGVPY2N1cnJlbmNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdG8gY2hlY2suXG4gICAqL1xuICByZWFkb25seSAkc3RyaW5nOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWFyY2ggdmFsdWUgdG8gY2hlY2sgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VhcmNoVmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaW5kZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRlbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHByZWZpeCB0byBhZGQgdG8gZWFjaCBsaW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdG8gaW5kZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnNlcnRBdH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zZXJ0QXRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHN0cmluZyB0byBpbnNlcnQgdGhlIHN1YnN0cmluZyBpbnRvLlxuICAgKi9cbiAgcmVhZG9ubHkgJHN0cmluZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZXggdG8gZW5kIHRoZSBzdWJzdHJpbmcgYXQuXG4gICAqL1xuICByZWFkb25seSBlbmRJbmRleD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGluZGV4IHRvIGluc2VydCB0aGUgc3Vic3RyaW5nIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnRJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3Vic3RyaW5nIHRvIGluc2VydC5cbiAgICovXG4gIHJlYWRvbmx5IHN1YnN0cmluZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZXBsYWNlQWxsQXN5bmN9LlxuICpcbiAqIEB0eXBlUGFyYW0gUmVwbGFjZUdyb3VwQXJndW1lbnRzIC0gVGhlIHR5cGVzIG9mIHRoZSBjYXB0dXJlZCBncm91cCBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGFjZUFsbEFzeW5jUGFyYW1zPFJlcGxhY2VHcm91cEFyZ3VtZW50cyBleHRlbmRzIHN0cmluZ1tdPiB7XG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIGluIHdoaWNoIHRvIHBlcmZvcm0gcmVwbGFjZW1lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgJHN0cmluZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBBIHN5bmNocm9ub3VzL2FzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyByZXBsYWNlbWVudCBzdHJpbmdzLCBvciBhIHN0cmluZyB0byByZXBsYWNlIHdpdGguXG4gICAqL1xuICByZWFkb25seSByZXBsYWNlcjogQXN5bmNSZXBsYWNlcjxSZXBsYWNlR3JvdXBBcmd1bWVudHM+O1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzZWFyY2ggZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VhcmNoVmFsdWU6IFJlZ0V4cCB8IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVwbGFjZUFsbH0uXG4gKlxuICogQHR5cGVQYXJhbSBDYXB0dXJlZEdyb3VwQXJndW1lbnRzIC0gVGhlIHR5cGVzIG9mIHRoZSBjYXB0dXJlZCBncm91cCBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGFjZUFsbFBhcmFtczxDYXB0dXJlZEdyb3VwQXJndW1lbnRzIGV4dGVuZHMgc3RyaW5nW10+IHtcbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgaW4gd2hpY2ggdG8gcGVyZm9ybSByZXBsYWNlbWVudHMuXG4gICAqL1xuICByZWFkb25seSAkc3RyaW5nOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcmVwbGFjZXIgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgcmVwbGFjZW1lbnQgc3RyaW5ncywgb3IgYSBzdHJpbmcgdG8gcmVwbGFjZSB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGFjZXI6IFJlcGxhY2VyPENhcHR1cmVkR3JvdXBBcmd1bWVudHM+O1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzZWFyY2ggZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VhcmNoVmFsdWU6IFJlZ0V4cCB8IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdHJpbUVuZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJpbUVuZFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAqL1xuICByZWFkb25seSAkc3RyaW5nOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzdHJpbmcgZG9lcyBub3QgZW5kIHdpdGggdGhlIHN1ZmZpeC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVmFsaWRhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc3VmZml4IHRvIHJlbW92ZSBmcm9tIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbiAgICovXG4gIHJlYWRvbmx5IHN1ZmZpeDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0cmltU3RhcnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyaW1TdGFydFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAqL1xuICByZWFkb25seSAkc3RyaW5nOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdG8gcmVtb3ZlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcuXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmVmaXguXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFZhbGlkYXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdW5pbmRlbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaW5kZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdG8gcmVtb3ZlIGZyb20gZWFjaCBsaW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhyb3dzIGFuIGVycm9yIGlmIGEgbGluZSBpcyBub3QgaW5kZW50ZWQgd2l0aCB0aGUgcHJlZml4LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd0lmTm90SW5kZW50ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyaW5nIHRvIHVuaW5kZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBhIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCBzdWZmaXgsIGFkZGluZyBpdCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHN0cmluZyB0aGF0IGVuZHMgd2l0aCB0aGUgc3VmZml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRW5kc1dpdGgocGFyYW1zOiBFbnN1cmVFbmRzV2l0aFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgJHN0cmluZywgc3VmZml4IH0gPSBwYXJhbXM7XG4gIHJldHVybiAkc3RyaW5nLmVuZHNXaXRoKHN1ZmZpeCkgPyAkc3RyaW5nIDogJHN0cmluZyArIHN1ZmZpeDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgYSBzdHJpbmcgaGFzIGBMRmAgbGluZSBlbmRpbmdzLlxuICpcbiAqIEl0IHJlcGxhY2VzIGBDUkxGYCBsaW5lIGVuZGluZ3Mgd2l0aCBgTEZgLlxuICpcbiAqIEBwYXJhbSAkc3RyaW5nIC0gVGhlIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgd2l0aCBgTEZgIGxpbmUgZW5kaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUxmRW5kaW5ncygkc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gJHN0cmluZy5yZXBsYWNlQWxsKC9cXHJcXG4/L2csICdcXG4nKTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgYSBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXgsIGFkZGluZyBpdCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoIHRoZSBwcmVmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVTdGFydHNXaXRoKHBhcmFtczogRW5zdXJlU3RhcnRzV2l0aFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgJHN0cmluZywgcHJlZml4IH0gPSBwYXJhbXM7XG4gIHJldHVybiAkc3RyaW5nLnN0YXJ0c1dpdGgocHJlZml4KSA/ICRzdHJpbmcgOiBwcmVmaXggKyAkc3RyaW5nO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSAkc3RyaW5nIC0gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoJHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2UoJHN0cmluZywgRVNDQVBFX01BUCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWFwcyBMRi1ub3JtYWxpemVkIG9mZnNldHMgdG8gb3JpZ2luYWwgb2Zmc2V0cy5cbiAqXG4gKiBAcGFyYW0gJHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gZ2V0IHRoZSBMRi1ub3JtYWxpemVkIGluZGljZXMgZnJvbS5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBtYXBzIExGLW5vcm1hbGl6ZWQgb2Zmc2V0cyB0byBvcmlnaW5hbCBvZmZzZXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGZOb3JtYWxpemVkT2Zmc2V0VG9PcmlnaW5hbE9mZnNldE1hcHBlcigkc3RyaW5nOiBzdHJpbmcpOiAobGZPZmZzZXQ6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgY29uc3QgbGZPZmZzZXRUb09yaWdpbmFsT2Zmc2V0TWFwOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAkc3RyaW5nLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGlmICgkc3RyaW5nW2luZGV4XSA9PT0gQ1IgJiYgJHN0cmluZ1tpbmRleCArIDFdID09PSBMRikge1xuICAgICAgbGZPZmZzZXRUb09yaWdpbmFsT2Zmc2V0TWFwLnB1c2goaW5kZXggKyAxKTtcbiAgICAgIGluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxmT2Zmc2V0VG9PcmlnaW5hbE9mZnNldE1hcC5wdXNoKGluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGxmT2Zmc2V0OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICAgIGlmIChsZk9mZnNldCA8IDApIHtcbiAgICAgIHJldHVybiBsZk9mZnNldDtcbiAgICB9XG4gICAgaWYgKGxmT2Zmc2V0ID49IGxmT2Zmc2V0VG9PcmlnaW5hbE9mZnNldE1hcC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBsZk9mZnNldCAtIGxmT2Zmc2V0VG9PcmlnaW5hbE9mZnNldE1hcC5sZW5ndGggKyAkc3RyaW5nLmxlbmd0aDtcbiAgICB9XG5cbiAgICBhc3NlcnQobGZPZmZzZXRUb09yaWdpbmFsT2Zmc2V0TWFwW2xmT2Zmc2V0XSAhPT0gdW5kZWZpbmVkLCAnQ291bGQgbm90IG1hcCBvZmZzZXQnKTtcbiAgICByZXR1cm4gbGZPZmZzZXRUb09yaWdpbmFsT2Zmc2V0TWFwW2xmT2Zmc2V0XTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzdHJpbmcgaGFzIGEgc2luZ2xlIG9jY3VycmVuY2Ugb2YgYSBzZWFyY2ggdmFsdWUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzdHJpbmcgaGFzIGEgc2luZ2xlIG9jY3VycmVuY2Ugb2YgdGhlIHNlYXJjaCB2YWx1ZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNTaW5nbGVPY2N1cnJlbmNlKHBhcmFtczogSGFzU2luZ2xlT2NjdXJyZW5jZVBhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCB7ICRzdHJpbmcsIHNlYXJjaFZhbHVlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZpcnN0SW5kZXggPSAkc3RyaW5nLmluZGV4T2Yoc2VhcmNoVmFsdWUpO1xuICBjb25zdCBsYXN0SW5kZXggPSAkc3RyaW5nLmxhc3RJbmRleE9mKHNlYXJjaFZhbHVlKTtcbiAgcmV0dXJuIGZpcnN0SW5kZXggIT09IE5PVF9GT1VORF9JTkRFWCAmJiBmaXJzdEluZGV4ID09PSBsYXN0SW5kZXg7XG59XG5cbi8qKlxuICogSW5kZW50cyBhIHN0cmluZyBieSBhZGRpbmcgYSBwcmVmaXggdG8gZWFjaCBsaW5lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBpbmRlbnRlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRlbnQocGFyYW1zOiBJbmRlbnRQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7IHByZWZpeCwgdGV4dCB9ID0gcGFyYW1zO1xuICByZXR1cm4gdGV4dC5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiBgJHtwcmVmaXh9JHtsaW5lfWApLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIEluc2VydHMgYSBzdWJzdHJpbmcgYXQgYSBzcGVjaWZpZWQgcG9zaXRpb24gaW4gYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIHN0cmluZyB3aXRoIHRoZSBzdWJzdHJpbmcgaW5zZXJ0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRBdChwYXJhbXM6IEluc2VydEF0UGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgICRzdHJpbmcsXG4gICAgZW5kSW5kZXgsXG4gICAgc3RhcnRJbmRleCxcbiAgICBzdWJzdHJpbmdcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgZWZmZWN0aXZlRW5kSW5kZXggPSBlbmRJbmRleCA/PyBzdGFydEluZGV4O1xuICByZXR1cm4gJHN0cmluZy5zbGljZSgwLCBzdGFydEluZGV4KSArIHN1YnN0cmluZyArICRzdHJpbmcuc2xpY2UoZWZmZWN0aXZlRW5kSW5kZXgpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIGludG8gYSB2YWxpZCBKYXZhU2NyaXB0IHZhcmlhYmxlIG5hbWUgYnkgcmVwbGFjaW5nIGludmFsaWQgY2hhcmFjdGVycyB3aXRoIHVuZGVyc2NvcmVzLlxuICpcbiAqIEBwYXJhbSAkc3RyaW5nIC0gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIHZhbGlkIHZhcmlhYmxlIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlVmFsaWRWYXJpYWJsZU5hbWUoJHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmcsXG4gICAgcmVwbGFjZXI6ICdfJyxcbiAgICBzZWFyY2hWYWx1ZTogL1teYS16QS1aMC05X10vZ1xuICB9KTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgc3RyaW5nIGJ5IGNvbnZlcnRpbmcgaXQgdG8gdGhlIE5GQyBmb3JtIGFuZCByZXBsYWNpbmcgbm9uLWJyZWFraW5nIHNwYWNlcyB3aXRoIHJlZ3VsYXIgc3BhY2VzLlxuICpcbiAqIEBwYXJhbSAkc3RyaW5nIC0gVGhlIHN0cmluZyB0byBub3JtYWxpemUuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTdHJpbmcoJHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmcsXG4gICAgcmVwbGFjZXI6ICcgJyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItdW5pY29kZS1jb2RlLXBvaW50LWVzY2FwZXMgLS0gVGhlc2UgYXJlIHRoZSBjb252ZW50aW9uYWwgc3BlbGxpbmdzIGZvciBVKzAwQTAgYW5kIFUrMjAyRi4gVGhlIGNvZGUtcG9pbnQgZm9ybSBpcyBvbmx5IHVuYW1iaWd1b3VzIHdpdGggdGhlIGB1YCBmbGFnLCBzbyB0YWtpbmcgdGhlIGZpeCB3b3VsZCBhbHNvIGNoYW5nZSBob3cgdGhlIHBhdHRlcm4gaXMgcGFyc2VkLlxuICAgIHNlYXJjaFZhbHVlOiAvXFx1MDBBMHxcXHUyMDJGL2dcbiAgfSkubm9ybWFsaXplKCdORkMnKTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyBvY2N1cnJlbmNlcyBvZiBzdHJpbmdzIGluIGEgZ2l2ZW4gc3RyaW5nIGJhc2VkIG9uIGEgcmVwbGFjZW1lbnRzIG1hcC5cbiAqXG4gKiBAcGFyYW0gJHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGVyZm9ybSByZXBsYWNlbWVudHMgb24uXG4gKiBAcGFyYW0gcmVwbGFjZW1lbnRzTWFwIC0gQW4gb2JqZWN0IG1hcHBpbmcgc3RyaW5ncyB0byB0aGVpciByZXBsYWNlbWVudCB2YWx1ZXMuXG4gKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgc3RyaW5nIHdpdGggcmVwbGFjZW1lbnRzIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlKCRzdHJpbmc6IHN0cmluZywgcmVwbGFjZW1lbnRzTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhyZXBsYWNlbWVudHNNYXApLm1hcCgoc291cmNlKSA9PiBlc2NhcGVSZWdFeHAoc291cmNlKSkuam9pbignfCcpLCAnZycpO1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZyxcbiAgICByZXBsYWNlcjogKHsgc3Vic3RyaW5nOiBzb3VyY2UgfSkgPT4gZW5zdXJlTm9uTnVsbGFibGUocmVwbGFjZW1lbnRzTWFwW3NvdXJjZV0pLFxuICAgIHNlYXJjaFZhbHVlOiByZWdFeHBcbiAgfSk7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgYWxsIG9jY3VycmVuY2VzIG9mIGEgc2VhcmNoIHN0cmluZyBvciBwYXR0ZXJuIHdpdGggdGhlIHJlc3VsdHMgb2YgYW4gcmVwbGFjZXIgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBDYXB0dXJlZEdyb3VwQXJndW1lbnRzIC0gVGhlIHR5cGVzIG9mIHRoZSBjYXB0dXJlZCBncm91cCBhcmd1bWVudHMuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHdpdGggYWxsIHJlcGxhY2VtZW50cyBtYWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUFsbDxDYXB0dXJlZEdyb3VwQXJndW1lbnRzIGV4dGVuZHMgc3RyaW5nW10+KHBhcmFtczogUmVwbGFjZUFsbFBhcmFtczxDYXB0dXJlZEdyb3VwQXJndW1lbnRzPik6IHN0cmluZyB7XG4gIGNvbnN0IHsgJHN0cmluZywgcmVwbGFjZXIgfSA9IHBhcmFtcztcbiAgbGV0IHsgc2VhcmNoVmFsdWUgfSA9IHBhcmFtcztcbiAgaWYgKHJlcGxhY2VyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJHN0cmluZztcbiAgfVxuXG4gIGlmIChzZWFyY2hWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhc2VhcmNoVmFsdWUuZ2xvYmFsKSB7XG4gICAgc2VhcmNoVmFsdWUgPSBuZXcgUmVnRXhwKHNlYXJjaFZhbHVlLnNvdXJjZSwgYCR7c2VhcmNoVmFsdWUuZmxhZ3N9Z2ApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11bnNhZmUtc3RyaW5nLXJlcGxhY2VtZW50IC0tIFRoZSBwYXNzLXRocm91Z2ggaXMgbG9hZC1iZWFyaW5nOiBjYWxsZXJzIHJlbHkgb24gYCQmYCBhbmQgZnJpZW5kcyBiZWluZyBleHBhbmRlZC4gYGVzY2FwZUFsaWFzYCBwYXNzZXMgYFxcJCZgIHRvIHByZWZpeCBlYWNoIG1hdGNoZWQgY2hhcmFjdGVyIHdpdGggYSBiYWNrc2xhc2gsIGFuZCBgY2xpLXV0aWxzYCBwYXNzZXMgYF4kJmAuIEluc2VydGluZyB0aGUgc3RyaW5nIGxpdGVyYWxseSB3b3VsZCBicmVhayBib3RoLlxuICAgIHJldHVybiAkc3RyaW5nLnJlcGxhY2VBbGwoc2VhcmNoVmFsdWUsIHJlcGxhY2VyKTtcbiAgfVxuXG4gIHJldHVybiAkc3RyaW5nLnJlcGxhY2VBbGwoc2VhcmNoVmFsdWUsIChzdWJzdHJpbmc6IHN0cmluZywgLi4uJGFyZ3VtZW50czogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgU09VUkNFX0lOREVYX09GRlNFVF9GT1JfR1JPVVBfQVJHID0gMjtcbiAgICBjb25zdCBoYXNHcm91cHNBcmd1bWVudCA9IHR5cGVvZiAkYXJndW1lbnRzLmF0KC0xKSA9PT0gJ29iamVjdCc7XG4gICAgY29uc3Qgc291cmNlSW5kZXggPSBoYXNHcm91cHNBcmd1bWVudCA/ICRhcmd1bWVudHMubGVuZ3RoIC0gU09VUkNFX0lOREVYX09GRlNFVF9GT1JfR1JPVVBfQVJHIDogJGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuXG4gICAgY29uc3QgcmVwbGFjZUFyZ3VtZW50czogUmVwbGFjZUFyZ3VtZW50czxDYXB0dXJlZEdyb3VwQXJndW1lbnRzPiA9IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCAtLSBDYW4ndCBhdm9pZC5cbiAgICAgIGNhcHR1cmVkR3JvdXBBcmd1bWVudHM6IFtdIGFzIHVua25vd25bXSBhcyBDYXB0dXJlZEdyb3VwQXJndW1lbnRzLFxuICAgICAgZ3JvdXBzOiBoYXNHcm91cHNBcmd1bWVudCA/ICRhcmd1bWVudHMuYXQoLTEpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gOiB1bmRlZmluZWQsXG4gICAgICBtaXNzaW5nR3JvdXBJbmRpY2VzOiBbXSxcbiAgICAgIG9mZnNldDogJGFyZ3VtZW50cy5hdChzb3VyY2VJbmRleCAtIDEpIGFzIG51bWJlcixcbiAgICAgIHNvdXJjZTogJGFyZ3VtZW50cy5hdChzb3VyY2VJbmRleCkgYXMgc3RyaW5nLFxuICAgICAgc3Vic3RyaW5nXG4gICAgfTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzb3VyY2VJbmRleCAtIDE7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSAkYXJndW1lbnRzW2luZGV4XTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVwbGFjZUFyZ3VtZW50cy5jYXB0dXJlZEdyb3VwQXJndW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSB2OCB0cmFja3MgdGhlIGltcGxpY2l0IGVsc2UgYnJhbmNoIHRoYXQgbmV2ZXIgaGFwcGVucy4gKi9cbiAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHJlcGxhY2VBcmd1bWVudHMubWlzc2luZ0dyb3VwSW5kaWNlcy5wdXNoKGluZGV4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKHJlcGxhY2VyKHJlcGxhY2VBcmd1bWVudHMpIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gcmVwbGFjZUFyZ3VtZW50cy5zdWJzdHJpbmc7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IHJlcGxhY2VzIGFsbCBvY2N1cnJlbmNlcyBvZiBhIHNlYXJjaCBzdHJpbmcgb3IgcGF0dGVybiB3aXRoIHRoZSByZXN1bHRzIG9mIGFuIGFzeW5jaHJvbm91cyByZXBsYWNlciBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFJlcGxhY2VHcm91cEFyZ3VtZW50cyAtIFRoZSB0eXBlcyBvZiB0aGUgY2FwdHVyZWQgZ3JvdXAgYXJndW1lbnRzLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgc3RyaW5nIHdpdGggYWxsIHJlcGxhY2VtZW50cyBtYWRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUFsbEFzeW5jPFJlcGxhY2VHcm91cEFyZ3VtZW50cyBleHRlbmRzIHN0cmluZ1tdPihwYXJhbXM6IFJlcGxhY2VBbGxBc3luY1BhcmFtczxSZXBsYWNlR3JvdXBBcmd1bWVudHM+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyAkc3RyaW5nLCByZXBsYWNlciwgc2VhcmNoVmFsdWUgfSA9IHBhcmFtcztcbiAgbGV0IHsgYWJvcnRTaWduYWwgfSA9IHBhcmFtcztcbiAgYWJvcnRTaWduYWwgPz89IGFib3J0U2lnbmFsTmV2ZXIoKTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgICAkc3RyaW5nLFxuICAgICAgcmVwbGFjZXIsXG4gICAgICBzZWFyY2hWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgcmVwbGFjZW1lbnRBc3luY0ZuczogKCgpID0+IFByb21pc2U8U3RyaW5nUmVwbGFjZW1lbnQ+KVtdID0gW107XG5cbiAgcmVwbGFjZUFsbDxSZXBsYWNlR3JvdXBBcmd1bWVudHM+KHtcbiAgICAkc3RyaW5nLFxuICAgIHJlcGxhY2VyOiAoJGFyZ3VtZW50cykgPT4ge1xuICAgICAgcmVwbGFjZW1lbnRBc3luY0Zucy5wdXNoKCgpID0+IHJlc29sdmVWYWx1ZShyZXBsYWNlciwgeyBhYm9ydFNpZ25hbCwgLi4uJGFyZ3VtZW50cyB9KSk7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSxcbiAgICBzZWFyY2hWYWx1ZVxuICB9KTtcblxuICBjb25zdCByZXBsYWNlbWVudHM6IFN0cmluZ1JlcGxhY2VtZW50W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGFzeW5jRnVuY3Rpb24gb2YgcmVwbGFjZW1lbnRBc3luY0Zucykge1xuICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgcmVwbGFjZW1lbnRzLnB1c2goYXdhaXQgYXN5bmNGdW5jdGlvbigpKTtcbiAgfVxuXG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIHJldHVybiByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nLFxuICAgIHJlcGxhY2VyOiAoJGFyZ3VtZW50cyk6IHN0cmluZyA9PiByZXBsYWNlbWVudHMuc2hpZnQoKSA/PyAkYXJndW1lbnRzLnN1YnN0cmluZyxcbiAgICBzZWFyY2hWYWx1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBUcmltcyB0aGUgc3BlY2lmaWVkIHN1ZmZpeCBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHRyaW1tZWQgc3RyaW5nLlxuICogQHRocm93cyBJZiBgc2hvdWxkVmFsaWRhdGVgIGlzIGB0cnVlYCBhbmQgdGhlIHN0cmluZyBkb2VzIG5vdCBlbmQgd2l0aCB0aGUgc3VmZml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbUVuZChwYXJhbXM6IFRyaW1FbmRQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7ICRzdHJpbmcsIHNob3VsZFZhbGlkYXRlLCBzdWZmaXggfSA9IHBhcmFtcztcbiAgaWYgKCRzdHJpbmcuZW5kc1dpdGgoc3VmZml4KSkge1xuICAgIHJldHVybiAkc3RyaW5nLnNsaWNlKDAsIC1zdWZmaXgubGVuZ3RoKTtcbiAgfVxuXG4gIGlmIChzaG91bGRWYWxpZGF0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7JHN0cmluZ30gZG9lcyBub3QgZW5kIHdpdGggc3VmZml4ICR7c3VmZml4fWApO1xuICB9XG5cbiAgcmV0dXJuICRzdHJpbmc7XG59XG5cbi8qKlxuICogVHJpbXMgdGhlIHNwZWNpZmllZCBwcmVmaXggZnJvbSB0aGUgc3RhcnQgb2YgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHRyaW1tZWQgc3RyaW5nLlxuICogQHRocm93cyBJZiBgc2hvdWxkVmFsaWRhdGVgIGlzIGB0cnVlYCBhbmQgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmVmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltU3RhcnQocGFyYW1zOiBUcmltU3RhcnRQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7ICRzdHJpbmcsIHByZWZpeCwgc2hvdWxkVmFsaWRhdGUgfSA9IHBhcmFtcztcbiAgaWYgKCRzdHJpbmcuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgcmV0dXJuICRzdHJpbmcuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gIH1cblxuICBpZiAoc2hvdWxkVmFsaWRhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyAkeyRzdHJpbmd9IGRvZXMgbm90IHN0YXJ0IHdpdGggcHJlZml4ICR7cHJlZml4fWApO1xuICB9XG5cbiAgcmV0dXJuICRzdHJpbmc7XG59XG5cbi8qKlxuICogVW5lc2NhcGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBlc2NhcGUgc2VxdWVuY2VzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwYXJhbSAkc3RyaW5nIC0gVGhlIHN0cmluZyB0byB1bmVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSB1bmVzY2FwZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5lc2NhcGUoJHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2UoJHN0cmluZywgVU5FU0NBUEVfTUFQKTtcbn1cblxuLyoqXG4gKiBVbmluZGVudHMgYSBzdHJpbmcgYnkgcmVtb3ZpbmcgYSBwcmVmaXggZnJvbSBlYWNoIGxpbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICogQHJldHVybnMgVGhlIHVuaW5kZW50ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pbmRlbnQocGFyYW1zOiBVbmluZGVudFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgcHJlZml4LCBzaG91bGRUaHJvd0lmTm90SW5kZW50ZWQgPSBmYWxzZSwgdGV4dCB9ID0gcGFyYW1zO1xuICByZXR1cm4gdGV4dC5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiB7XG4gICAgaWYgKGxpbmUuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICByZXR1cm4gbGluZS5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiAgICB9XG4gICAgaWYgKHNob3VsZFRocm93SWZOb3RJbmRlbnRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMaW5lIFwiJHtsaW5lfVwiIGlzIG5vdCBpbmRlbnRlZCB3aXRoIFwiJHtwcmVmaXh9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmU7XG4gIH0pLmpvaW4oJ1xcbicpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0EsOEJBQWlDO0FBQ2pDLHFCQUE2QjtBQUM3Qix5QkFHTztBQUNQLDRCQUE2QjtBQVd0QixNQUFNLFFBQVE7QUEwRHJCLE1BQU0sYUFBcUM7QUFBQSxFQUN6QyxNQUFNLE9BQU87QUFBQSxFQUNiLE1BQU0sT0FBTztBQUFBLEVBQ2IsS0FBTSxPQUFPO0FBQUEsRUFDYixNQUFNLE9BQU87QUFBQSxFQUNiLE1BQU0sT0FBTztBQUFBLEVBQ2IsS0FBTSxPQUFPO0FBQUEsRUFDYixLQUFLLE9B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
|