obsidian-dev-utils 84.6.0 → 85.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 +17 -0
- package/dist/dev/main.js +11010 -10381
- package/dist/lib/cjs/async-events.cjs +4 -1
- package/dist/lib/cjs/async-events.d.cts +4 -1
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/active-file-provider.cjs +1 -1
- package/dist/lib/cjs/obsidian/active-file-provider.d.cts +1 -1
- package/dist/lib/cjs/obsidian/bases-view-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/bases-view-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/case-insensitive-file-index.cjs +1 -1
- package/dist/lib/cjs/obsidian/case-insensitive-file-index.d.cts +1 -1
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +16 -1
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +20 -5
- package/dist/lib/cjs/obsidian/command-handlers/index.cjs +6 -3
- package/dist/lib/cjs/obsidian/command-handlers/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.cjs +7 -1
- package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.d.cts +8 -2
- package/dist/lib/cjs/obsidian/command-handlers/unlock-active-note-command-handler.cjs +183 -0
- package/dist/lib/cjs/obsidian/command-handlers/unlock-active-note-command-handler.d.cts +54 -0
- package/dist/lib/cjs/obsidian/command-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/command-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/abort-signal-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/abort-signal-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/async-error-handler-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.cjs +7 -1
- package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.d.cts +9 -2
- package/dist/lib/cjs/obsidian/components/console-debug-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/console-debug-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/embed-extensions-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/embed-extensions-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/generate-markdown-link-default-params-component.cjs +4 -1
- package/dist/lib/cjs/obsidian/components/generate-markdown-link-default-params-component.d.cts +4 -1
- package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/layout-ready-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/plugin-context-component.cjs +7 -1
- package/dist/lib/cjs/obsidian/components/plugin-context-component.d.cts +8 -2
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +1 -1
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +1 -1
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +13 -4
- package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +12 -3
- package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.cjs +7 -1
- package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.d.cts +8 -2
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +29 -8
- package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +34 -7
- package/dist/lib/cjs/obsidian/data-handler.cjs +1 -1
- package/dist/lib/cjs/obsidian/data-handler.d.cts +1 -1
- package/dist/lib/cjs/obsidian/editor-extension-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/editor-extension-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/editor-suggest-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/editor-suggest-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/extensions-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/extensions-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/hover-link-source-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/hover-link-source-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/index.cjs +4 -1
- package/dist/lib/cjs/obsidian/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/link.cjs +79 -244
- package/dist/lib/cjs/obsidian/link.d.cts +82 -148
- package/dist/lib/cjs/obsidian/loop.cjs +2 -2
- package/dist/lib/cjs/obsidian/loop.d.cts +17 -3
- package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.cjs +4 -1
- package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.d.cts +4 -1
- package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/metadata-cache.cjs +141 -43
- package/dist/lib/cjs/obsidian/metadata-cache.d.cts +171 -9
- package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +80 -40
- package/dist/lib/cjs/obsidian/modals/minimizable-modal.d.cts +9 -0
- package/dist/lib/cjs/obsidian/obsidian-protocol-handler-registrar.cjs +4 -1
- package/dist/lib/cjs/obsidian/obsidian-protocol-handler-registrar.d.cts +4 -1
- package/dist/lib/cjs/obsidian/parse-link.cjs +476 -0
- package/dist/lib/cjs/obsidian/parse-link.d.cts +268 -0
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.cjs +1 -1
- package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +1 -1
- package/dist/lib/cjs/obsidian/plugin-cli-handler-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/plugin-cli-handler-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/resource-lock.cjs +155 -20
- package/dist/lib/cjs/obsidian/resource-lock.d.cts +93 -22
- package/dist/lib/cjs/obsidian/ribbon-icon-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/ribbon-icon-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.cjs +28 -16
- package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.d.cts +17 -5
- package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.cjs +4 -1
- package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.d.cts +5 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.cjs +11 -2
- package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.d.cts +12 -3
- package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.cjs +8 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.d.cts +9 -3
- package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.cjs +8 -2
- package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.d.cts +9 -2
- package/dist/lib/cjs/obsidian/status-bar-item-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/status-bar-item-registrar.d.cts +1 -1
- package/dist/lib/cjs/obsidian/vault-transaction.cjs +4 -1
- package/dist/lib/cjs/obsidian/vault-transaction.d.cts +4 -1
- package/dist/lib/cjs/obsidian/vault.cjs +2 -2
- package/dist/lib/cjs/obsidian/view-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/view-registrar.d.cts +1 -1
- package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.cjs +4 -2
- package/dist/lib/cjs/transformers/group-transformer.cjs +1 -1
- package/dist/lib/cjs/transformers/group-transformer.d.cts +1 -1
- package/dist/lib/cjs/url.cjs +14 -3
- package/dist/lib/cjs/url.d.cts +15 -0
- package/dist/lib/esm/async-events.d.mts +4 -1
- package/dist/lib/esm/async-events.mjs +4 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/active-file-provider.d.mts +1 -1
- package/dist/lib/esm/obsidian/active-file-provider.mjs +1 -1
- package/dist/lib/esm/obsidian/bases-view-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/bases-view-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/case-insensitive-file-index.d.mts +1 -1
- package/dist/lib/esm/obsidian/case-insensitive-file-index.mjs +1 -1
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +20 -5
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +16 -1
- package/dist/lib/esm/obsidian/command-handlers/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/command-handlers/index.mjs +4 -2
- package/dist/lib/esm/obsidian/command-handlers/open-settings-command-handler.d.mts +8 -2
- package/dist/lib/esm/obsidian/command-handlers/open-settings-command-handler.mjs +7 -1
- package/dist/lib/esm/obsidian/command-handlers/unlock-active-note-command-handler.d.mts +54 -0
- package/dist/lib/esm/obsidian/command-handlers/unlock-active-note-command-handler.mjs +75 -0
- package/dist/lib/esm/obsidian/command-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/command-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/components/abort-signal-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/abort-signal-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/async-error-handler-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/case-insensitive-file-index-component.d.mts +9 -2
- package/dist/lib/esm/obsidian/components/case-insensitive-file-index-component.mjs +7 -1
- package/dist/lib/esm/obsidian/components/console-debug-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/console-debug-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/embed-extensions-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/embed-extensions-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/generate-markdown-link-default-params-component.d.mts +4 -1
- package/dist/lib/esm/obsidian/components/generate-markdown-link-default-params-component.mjs +4 -1
- package/dist/lib/esm/obsidian/components/layout-ready-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/layout-ready-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/menu-event-registrar-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/plugin-context-component.d.mts +8 -2
- package/dist/lib/esm/obsidian/components/plugin-context-component.mjs +7 -1
- package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +1 -1
- package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +1 -1
- package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +12 -3
- package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +13 -4
- package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.d.mts +8 -2
- package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.mjs +7 -1
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +34 -7
- package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +30 -9
- package/dist/lib/esm/obsidian/data-handler.d.mts +1 -1
- package/dist/lib/esm/obsidian/data-handler.mjs +1 -1
- package/dist/lib/esm/obsidian/editor-extension-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/editor-extension-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/editor-suggest-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/editor-suggest-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/extensions-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/extensions-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/hover-link-source-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/hover-link-source-registrar.mjs +1 -1
- 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 +82 -148
- package/dist/lib/esm/obsidian/link.mjs +76 -222
- package/dist/lib/esm/obsidian/loop.d.mts +17 -3
- package/dist/lib/esm/obsidian/loop.mjs +2 -2
- package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.d.mts +4 -1
- package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.mjs +4 -1
- package/dist/lib/esm/obsidian/markdown-post-processor-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/markdown-post-processor-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/metadata-cache.d.mts +171 -9
- package/dist/lib/esm/obsidian/metadata-cache.mjs +142 -42
- package/dist/lib/esm/obsidian/modals/minimizable-modal.d.mts +9 -0
- package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +80 -40
- package/dist/lib/esm/obsidian/obsidian-protocol-handler-registrar.d.mts +4 -1
- package/dist/lib/esm/obsidian/obsidian-protocol-handler-registrar.mjs +4 -1
- package/dist/lib/esm/obsidian/parse-link.d.mts +268 -0
- package/dist/lib/esm/obsidian/parse-link.mjs +353 -0
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +1 -1
- package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +1 -1
- package/dist/lib/esm/obsidian/plugin-cli-handler-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/plugin-cli-handler-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/resource-lock.d.mts +93 -22
- package/dist/lib/esm/obsidian/resource-lock.mjs +155 -20
- package/dist/lib/esm/obsidian/ribbon-icon-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/ribbon-icon-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.d.mts +17 -5
- package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.mjs +28 -16
- package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.d.mts +5 -2
- package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.mjs +4 -1
- package/dist/lib/esm/obsidian/setting-components/multiple-text-component.d.mts +12 -3
- package/dist/lib/esm/obsidian/setting-components/multiple-text-component.mjs +11 -2
- package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.d.mts +9 -3
- package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +8 -2
- package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.d.mts +9 -2
- package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.mjs +8 -2
- package/dist/lib/esm/obsidian/status-bar-item-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/status-bar-item-registrar.mjs +1 -1
- package/dist/lib/esm/obsidian/vault-transaction.d.mts +4 -1
- package/dist/lib/esm/obsidian/vault-transaction.mjs +4 -1
- package/dist/lib/esm/obsidian/vault.mjs +2 -2
- package/dist/lib/esm/obsidian/view-registrar.d.mts +1 -1
- package/dist/lib/esm/obsidian/view-registrar.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.mjs +4 -2
- package/dist/lib/esm/transformers/group-transformer.d.mts +1 -1
- package/dist/lib/esm/transformers/group-transformer.mjs +1 -1
- package/dist/lib/esm/url.d.mts +15 -0
- package/dist/lib/esm/url.mjs +11 -2
- package/obsidian/command-handlers/unlock-active-note-command-handler/package.json +6 -0
- package/obsidian/parse-link/package.json +6 -0
- package/package.json +3 -3
|
@@ -128,10 +128,10 @@ __export(minimizable_modal_exports, {
|
|
|
128
128
|
MinimizableModal: () => MinimizableModal
|
|
129
129
|
});
|
|
130
130
|
module.exports = __toCommonJS(minimizable_modal_exports);
|
|
131
|
-
var import_monkey_around = require('monkey-around');
|
|
132
131
|
var import_obsidian = require('obsidian');
|
|
133
132
|
var import_beeper = require('../../beeper.cjs');
|
|
134
|
-
var
|
|
133
|
+
var import_all_windows_event_component = require('../components/all-windows-event-component.cjs');
|
|
134
|
+
var import_monkey_around_component = require('../components/monkey-around-component.cjs');
|
|
135
135
|
var import_css_class = require('../css-class.cjs');
|
|
136
136
|
var import_plugin_context = require('../plugin/plugin-context.cjs');
|
|
137
137
|
const MINIMIZE_ICON_ID = "minus";
|
|
@@ -153,9 +153,55 @@ const MODIFIER_KEYS = /* @__PURE__ */ new Set([
|
|
|
153
153
|
"Shift"
|
|
154
154
|
]);
|
|
155
155
|
const peekLockEntries = /* @__PURE__ */ new Set();
|
|
156
|
-
const documentsWithInputSuppressors = /* @__PURE__ */ new WeakSet();
|
|
157
156
|
const beeper = new import_beeper.Beeper();
|
|
158
|
-
|
|
157
|
+
class PeekLockComponent extends import_monkey_around_component.MonkeyAroundComponent {
|
|
158
|
+
/**
|
|
159
|
+
* Constructs a new instance.
|
|
160
|
+
*
|
|
161
|
+
* @param app - The app whose settings modal is guarded and whose windows suppress input while locked.
|
|
162
|
+
*/
|
|
163
|
+
constructor(app) {
|
|
164
|
+
super();
|
|
165
|
+
this.app = app;
|
|
166
|
+
}
|
|
167
|
+
app;
|
|
168
|
+
/**
|
|
169
|
+
* Registers the `open` patches and the input suppressors.
|
|
170
|
+
*/
|
|
171
|
+
onload() {
|
|
172
|
+
super.onload();
|
|
173
|
+
this.registerMethodPatch({
|
|
174
|
+
methodName: "open",
|
|
175
|
+
obj: import_obsidian.Modal.prototype,
|
|
176
|
+
patchHandler: ({ fallback, originalThis }) => {
|
|
177
|
+
blockOrFallback(originalThis, fallback);
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
this.registerMethodPatch({
|
|
181
|
+
methodName: "open",
|
|
182
|
+
obj: this.app.setting,
|
|
183
|
+
patchHandler: ({ fallback, originalThis }) => {
|
|
184
|
+
blockOrFallback(originalThis, fallback);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
const allWindowsEventComponent = this.addChild(new import_all_windows_event_component.AllWindowsEventComponent(this.app));
|
|
188
|
+
allWindowsEventComponent.registerAllWindowsDomEvent({
|
|
189
|
+
callback: suppressKeydownWhilePeekLocked,
|
|
190
|
+
options: { capture: true },
|
|
191
|
+
type: "keydown"
|
|
192
|
+
});
|
|
193
|
+
allWindowsEventComponent.registerAllWindowsDomEvent({
|
|
194
|
+
callback: suppressWhilePeekLocked,
|
|
195
|
+
options: { capture: true },
|
|
196
|
+
type: "beforeinput"
|
|
197
|
+
});
|
|
198
|
+
allWindowsEventComponent.registerAllWindowsDomEvent({
|
|
199
|
+
callback: suppressWhilePeekLocked,
|
|
200
|
+
options: { capture: true },
|
|
201
|
+
type: "contextmenu"
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
159
205
|
class MinimizableModal {
|
|
160
206
|
/**
|
|
161
207
|
* The wrapped modal. Open, close, and populate it as usual (e.g. `minimizable.modal.open()`).
|
|
@@ -169,9 +215,17 @@ class MinimizableModal {
|
|
|
169
215
|
get isMinimized() {
|
|
170
216
|
return this.isMinimizedValue;
|
|
171
217
|
}
|
|
218
|
+
/**
|
|
219
|
+
* Patches the wrapped modal's `onClose` to run cleanup. Persists for the wrapper's whole life (a
|
|
220
|
+
* modal can be reopened, so the patch must survive each close), hence a dedicated component that is
|
|
221
|
+
* never unloaded — distinct from `peekLockComponent`, whose patches live only while minimized.
|
|
222
|
+
* Exposed to subclasses so they can register additional lifetime-scoped patches on the wrapper.
|
|
223
|
+
*/
|
|
224
|
+
closePatchComponent = new import_monkey_around_component.MonkeyAroundComponent();
|
|
172
225
|
isMinimizedValue = false;
|
|
173
226
|
minimizeButtonEl;
|
|
174
227
|
minimizedBarEl = null;
|
|
228
|
+
peekLockComponent = null;
|
|
175
229
|
peekLockEntry = null;
|
|
176
230
|
/**
|
|
177
231
|
* Wraps the given modal, adding a minimize button and wiring up cleanup on close.
|
|
@@ -182,6 +236,7 @@ class MinimizableModal {
|
|
|
182
236
|
this.modal = modal;
|
|
183
237
|
(0, import_plugin_context.addPluginCssClasses)(modal.containerEl, [import_css_class.CssClass.MinimizableModal]);
|
|
184
238
|
this.minimizeButtonEl = this.createMinimizeButton();
|
|
239
|
+
this.closePatchComponent.load();
|
|
185
240
|
this.patchOnClose(modal);
|
|
186
241
|
}
|
|
187
242
|
/**
|
|
@@ -245,6 +300,8 @@ class MinimizableModal {
|
|
|
245
300
|
}
|
|
246
301
|
peekLockEntries.delete(this.peekLockEntry);
|
|
247
302
|
this.peekLockEntry = null;
|
|
303
|
+
this.peekLockComponent?.unload();
|
|
304
|
+
this.peekLockComponent = null;
|
|
248
305
|
}
|
|
249
306
|
enablePeekLock(barEl) {
|
|
250
307
|
this.peekLockEntry = {
|
|
@@ -255,8 +312,8 @@ class MinimizableModal {
|
|
|
255
312
|
innerModal: this.modal
|
|
256
313
|
};
|
|
257
314
|
peekLockEntries.add(this.peekLockEntry);
|
|
258
|
-
|
|
259
|
-
|
|
315
|
+
this.peekLockComponent = new PeekLockComponent(this.modal.app);
|
|
316
|
+
this.peekLockComponent.load();
|
|
260
317
|
}
|
|
261
318
|
flashBar(barEl) {
|
|
262
319
|
barEl.removeClass(import_css_class.CssClass.MinimizedModalBarAttention);
|
|
@@ -269,12 +326,12 @@ class MinimizableModal {
|
|
|
269
326
|
this.isMinimizedValue = false;
|
|
270
327
|
}
|
|
271
328
|
patchOnClose(modal) {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
329
|
+
this.closePatchComponent.registerMethodPatch({
|
|
330
|
+
methodName: "onClose",
|
|
331
|
+
obj: modal,
|
|
332
|
+
patchHandler: ({ fallback }) => {
|
|
333
|
+
fallback();
|
|
334
|
+
this.handleClose();
|
|
278
335
|
}
|
|
279
336
|
});
|
|
280
337
|
}
|
|
@@ -288,37 +345,17 @@ function blockEvent(evt) {
|
|
|
288
345
|
evt.stopImmediatePropagation();
|
|
289
346
|
signalBlockedAttempt();
|
|
290
347
|
}
|
|
291
|
-
function
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
function installInputSuppressorsOnce(doc) {
|
|
297
|
-
if (documentsWithInputSuppressors.has(doc)) {
|
|
348
|
+
function blockOrFallback(modal, fallback) {
|
|
349
|
+
if (shouldBlockOpen(modal)) {
|
|
350
|
+
signalBlockedAttempt();
|
|
298
351
|
return;
|
|
299
352
|
}
|
|
300
|
-
|
|
301
|
-
const win = (0, import_type_guards.ensureNonNullable)(doc.defaultView);
|
|
302
|
-
win.addEventListener("keydown", suppressKeydownWhilePeekLocked, { capture: true });
|
|
303
|
-
win.addEventListener("beforeinput", suppressWhilePeekLocked, { capture: true });
|
|
304
|
-
win.addEventListener("contextmenu", suppressWhilePeekLocked, { capture: true });
|
|
353
|
+
fallback();
|
|
305
354
|
}
|
|
306
|
-
function
|
|
307
|
-
|
|
308
|
-
|
|
355
|
+
function flashMinimizedBars() {
|
|
356
|
+
for (const entry of peekLockEntries) {
|
|
357
|
+
entry.flash();
|
|
309
358
|
}
|
|
310
|
-
isModalOpenGuardInstalled = true;
|
|
311
|
-
(0, import_monkey_around.around)(import_obsidian.Modal.prototype, {
|
|
312
|
-
open: (next) => {
|
|
313
|
-
return function open() {
|
|
314
|
-
if (isPeekLocked() && !isMinimizedInnerModal(this)) {
|
|
315
|
-
signalBlockedAttempt();
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
next.call(this);
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
});
|
|
322
359
|
}
|
|
323
360
|
function isMinimizedInnerModal(modal) {
|
|
324
361
|
for (const entry of peekLockEntries) {
|
|
@@ -342,6 +379,9 @@ function isPeekLocked() {
|
|
|
342
379
|
}
|
|
343
380
|
return peekLockEntries.size > 0;
|
|
344
381
|
}
|
|
382
|
+
function shouldBlockOpen(modal) {
|
|
383
|
+
return isPeekLocked() && !isMinimizedInnerModal(modal);
|
|
384
|
+
}
|
|
345
385
|
function signalBlockedAttempt() {
|
|
346
386
|
flashMinimizedBars();
|
|
347
387
|
beeper.beep();
|
|
@@ -362,4 +402,4 @@ function suppressWhilePeekLocked(evt) {
|
|
|
362
402
|
0 && (module.exports = {
|
|
363
403
|
MinimizableModal
|
|
364
404
|
});
|
|
365
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vZGFscy9taW5pbWl6YWJsZS1tb2RhbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgd3JhcHBlciB0aGF0IG1ha2VzIGFueSBPYnNpZGlhbiB7QGxpbmsgTW9kYWx9IG1pbmltaXphYmxlIHRvIGEgZmxvYXRpbmcgYmFyIFx1MjAxNCB3aXRob3V0IGJyZWFraW5nIHRoZVxuICogbW9kYWwncyBibG9ja2luZyBjb250cmFjdC5cbiAqXG4gKiBPYnNpZGlhbidzIHtAbGluayBNb2RhbH0gaXMgYmxvY2tpbmc6IHdoaWxlIGl0IGlzIG9wZW4gdGhlIHJlc3Qgb2YgdGhlIGFwcCBpcyBtZWFudCB0byBiZSBpbmVydCB1bnRpbFxuICogdGhlIG1vZGFsIGlzIGRpc21pc3NlZC4ge0BsaW5rIE1pbmltaXphYmxlTW9kYWx9IHdyYXBzIGFueSBtb2RhbCBpbnN0YW5jZSAocGxhaW4gYE1vZGFsYCxcbiAqIGBGdXp6eVN1Z2dlc3RNb2RhbGAsIHRoZSBsaWJyYXJ5J3MgYE1vZGFsQmFzZWAsIHlvdXIgb3duIHN1YmNsYXNzLCBcdTIwMjYgXHUyMDE0IGluY2x1ZGluZyBtb2RhbHMgeW91IGRvIG5vdFxuICogb3duKSBhbmQgYWRkcyBhIG1pbmltaXplIGJ1dHRvbi4gTWluaW1pemluZyBoaWRlcyB0aGUgbW9kYWwgYW5kIGl0cyBibG9ja2luZyBiYWNrZHJvcCBhbmQgc2hvd3MgYVxuICogc21hbGwgZmxvYXRpbmcgYmFyIHdpdGggYSByZXN0b3JlIGJ1dHRvbiwgc28gdGhlIHVzZXIgY2FuIHBlZWsgYXQgdGhlIG5vdGVzL2ZvbGRlcnMgdGhlIG9wZXJhdGlvblxuICogaW52b2x2ZXMgXHUyMDE0IGJ1dCB0aGUgbW9kYWwgaXMgTk9UIGRpc21pc3NlZCwgc28gaXRzIGJsb2NraW5nIGNvbnRyYWN0IG11c3QgYmUgcHJlc2VydmVkLlxuICpcbiAqIFRvIGtlZXAgdGhhdCBjb250cmFjdCB3aGlsZSBtaW5pbWl6ZWQsIHRoZSB3cmFwcGVyIHB1dHMgdGhlIGFwcCBpbnRvIGEgKipwZWVrLW9ubHkgbG9jayoqOiB0aGUgdXNlclxuICogbWF5IG1vdXNlLWNsaWNrIGFuZCBzY3JvbGwgdG8gaW5zcGVjdCBjb250ZW50LCBidXQgY2Fubm90IHN0YXJ0IGFueXRoaW5nIG5ldy4gV2hpbGUgYW55IG1vZGFsIGlzXG4gKiBtaW5pbWl6ZWQgdGhlIHdyYXBwZXI6XG4gKiAtIGJsb2NrcyB0aGUga2V5Ym9hcmQgKHR5cGluZywgaG90a2V5cywgdGhlIGNvbW1hbmQtcGFsZXR0ZSBzaG9ydGN1dCksXG4gKiAtIGJsb2NrcyB0aGUgcmlnaHQtY2xpY2sgY29udGV4dCBtZW51LCBhbmRcbiAqIC0gYmxvY2tzIG9wZW5pbmcgYW55IG90aGVyIG1vZGFsIChhIHJlLWZpcmVkIGNvbW1hbmQsIHRoZSBjb21tYW5kIHBhbGV0dGUsIHNldHRpbmdzLCBcdTIwMjYpLlxuICpcbiAqIEEgYmxvY2tlZCBhdHRlbXB0IGZsYXNoZXMgdGhlIGZsb2F0aW5nIGJhciBhbmQgYmVlcHMgc28gdGhlIHVzZXIgc2VlcyAoYW5kIGhlYXJzKSB3aHkgbm90aGluZ1xuICogaGFwcGVuZWQuIFJlc3RvcmluZyAob3IgdGhlIG1vZGFsIGNsb3NpbmcpIGxpZnRzIHRoZSBsb2NrLiBUaGlzIHByZXZlbnRzLCBmb3IgZXhhbXBsZSwgbWluaW1pemluZyBhXG4gKiBcIm1lcmdlIGZvbGRlclwiIHBpY2tlciBhbmQgdGhlbiBmaXJpbmcgdGhlIHNhbWUgY29tbWFuZCBhZ2FpbiB0byBzdGFjayBzZXZlcmFsIGNvbmN1cnJlbnQgbWVyZ2VzLlxuICpcbiAqIFRoZSB3cmFwcGVyIHJldXNlcyB0aGUgbW9kYWwncyBvd24gdGl0bGUgKGB0aXRsZUVsYCkgYXMgdGhlIG1pbmltaXplZCBiYXIgbGFiZWwsIHNvIHNldCB0aGUgdGl0bGVcbiAqIHRoZSB1c3VhbCB3YXkgKGBtb2RhbC5zZXRUaXRsZSguLi4pYCkuIFJlbmRlciBhcmJpdHJhcnkgY29udGVudCBpbnRvIHtAbGluayBNb2RhbC5jb250ZW50RWx9LFxuICogaW5jbHVkaW5nIGNsaWNrYWJsZSBub3RlIGxpbmtzIHByb2R1Y2VkIGJ5IGByZW5kZXJJbnRlcm5hbExpbmtgIGZyb21cbiAqIGBvYnNpZGlhbi1kZXYtdXRpbHMvb2JzaWRpYW4vbWFya2Rvd25gOlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBtb2RhbCA9IG5ldyBNeU1vZGFsKGFwcCk7XG4gKiBtb2RhbC5zZXRUaXRsZSgnTWVyZ2luZyBub3RlcycpO1xuICogbW9kYWwuY29udGVudEVsLmFwcGVuZENoaWxkKGF3YWl0IHJlbmRlckludGVybmFsTGluayh7IGFwcCwgcGF0aE9yQWJzdHJhY3RGaWxlOiBmaWxlIH0pKTtcbiAqXG4gKiBjb25zdCBtaW5pbWl6YWJsZSA9IG5ldyBNaW5pbWl6YWJsZU1vZGFsKG1vZGFsKTtcbiAqIG1pbmltaXphYmxlLm1vZGFsLm9wZW4oKTtcbiAqIG1pbmltaXphYmxlLm1pbmltaXplKCk7IC8vIGEgZmxvYXRpbmcgYmFyIG9mZmVycyBcInJlc3RvcmVcIjsgdGhlIGFwcCBpcyBwZWVrLW9ubHkgdW50aWwgcmVzdG9yZWRcbiAqIGBgYFxuICpcbiAqIFRoZSB3cmFwcGVkIG1vZGFsIGNhbiBzdGlsbCBiZSBjbG9zZWQgbm9ybWFsbHk7IHRoZSBmbG9hdGluZyBiYXIgaXMgY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5IHdoZW5cbiAqIHRoZSBtb2RhbCBjbG9zZXMgKGV2ZW4gaWYgaXQgaXMgY2xvc2VkIHdoaWxlIG1pbmltaXplZCkuXG4gKi9cblxuaW1wb3J0IHsgYXJvdW5kIH0gZnJvbSAnbW9ua2V5LWFyb3VuZCc7XG5pbXBvcnQge1xuICBNb2RhbCxcbiAgc2V0SWNvblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IEJlZXBlciB9IGZyb20gJy4uLy4uL2JlZXBlci50cyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IGFkZFBsdWdpbkNzc0NsYXNzZXMgfSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWNvbnRleHQudHMnO1xuXG5jb25zdCBNSU5JTUlaRV9JQ09OX0lEID0gJ21pbnVzJztcbmNvbnN0IFJFU1RPUkVfSUNPTl9JRCA9ICdtYXhpbWl6ZS0yJztcblxuLy8gTmF2aWdhdGlvbiBrZXlzIHBhc3MgdGhyb3VnaCB3aGlsZSBtaW5pbWl6ZWQgc28gdGhlIHVzZXIgY2FuIG1vdmUgdGhlIGN1cnNvciBhbmQgc2Nyb2xsIHRvIHJlYWQuXG4vLyBOb25lIG9mIHRoZW0gbXV0YXRlIHRoZSBkb2N1bWVudCBcdTIwMTQgdGV4dCBjaGFuZ2VzIGFyZSBjYXVnaHQgc2VwYXJhdGVseSBieSB0aGUgYGJlZm9yZWlucHV0YCBndWFyZC5cbi8vIFNoaWZ0K25hdmlnYXRpb24gaXMgYmxvY2tlZCwgdGhvdWdoLCBzaW5jZSBpdCBleHRlbmRzIHRoZSBzZWxlY3Rpb24gdGhhdCBpbnNwZWN0aW9uIGRvZXMgbm90IG5lZWQuXG5jb25zdCBOQVZJR0FUSU9OX0tFWVMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAnQXJyb3dEb3duJyxcbiAgJ0Fycm93TGVmdCcsXG4gICdBcnJvd1JpZ2h0JyxcbiAgJ0Fycm93VXAnLFxuICAnRW5kJyxcbiAgJ0hvbWUnLFxuICAnUGFnZURvd24nLFxuICAnUGFnZVVwJ1xuXSk7XG5cbi8vIEEgYmFyZSBtb2RpZmllciBwcmVzcyBkb2VzIG5vdGhpbmcgb24gaXRzIG93biwgc28gaXQgcGFzc2VzIHRocm91Z2ggdGhlIGxvY2suXG4vLyBUaGlzIGF2b2lkcyBhIHNwdXJpb3VzIGZsYXNoL2JlZXAgd2hpbGUgY29tcG9zaW5nIGEgc2hvcnRjdXQ7IHRoZSBzaG9ydGN1dCdzIGNvbW1hbmQga2V5IGlzIGJsb2NrZWQuXG5jb25zdCBNT0RJRklFUl9LRVlTID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgJ0FsdCcsXG4gICdDb250cm9sJyxcbiAgJ01ldGEnLFxuICAnU2hpZnQnXG5dKTtcblxuLyoqXG4gKiBBIHJlZ2lzdGVyZWQgZW50cnkgZm9yIGEgY3VycmVudGx5LW1pbmltaXplZCBtb2RhbC4gVGhlIHNoYXJlZCBwZWVrLW9ubHkgbG9jayB1c2VzIGl0IHRvIGtub3cgYVxuICogbW9kYWwgaXMgbWluaW1pemVkLCB0byBsZWF2ZSB0aGF0IG1vZGFsJ3Mgb3duIHJlLW9wZW5zIGFsb25lLCBhbmQgdG8gZmxhc2ggaXRzIGJhciBvbiBhIGJsb2NrZWRcbiAqIGF0dGVtcHQuXG4gKi9cbmludGVyZmFjZSBQZWVrTG9ja0VudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBmbG9hdGluZyBiYXIgZWxlbWVudC4gVXNlZCB0byBkZXRlY3QgYSBzdGFsZSBlbnRyeSAoaXRzIGJhciBoYXMgbGVmdCB0aGUgRE9NKSBzbyBpdCBjYW4gYmVcbiAgICogcHJ1bmVkIGFuZCBuZXZlciBrZWVwIHRoZSBhcHAgbG9ja2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFyRWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBGbGFzaGVzIHRoZSBmbG9hdGluZyBiYXIgdG8gc2lnbmFsIGEgYmxvY2tlZCBhdHRlbXB0LlxuICAgKi9cbiAgZmxhc2goKTogdm9pZDtcblxuICAvKipcbiAgICogVGhlIHdyYXBwZWQgbW9kYWwgaW5zdGFuY2UsIHNvIGl0cyBvd24gYG9wZW4oKWAgaXMgbmV2ZXIgYmxvY2tlZCBieSB0aGUgbG9jay5cbiAgICovXG4gIHJlYWRvbmx5IGlubmVyTW9kYWw6IE1vZGFsO1xufVxuXG5jb25zdCBwZWVrTG9ja0VudHJpZXMgPSBuZXcgU2V0PFBlZWtMb2NrRW50cnk+KCk7XG5jb25zdCBkb2N1bWVudHNXaXRoSW5wdXRTdXBwcmVzc29ycyA9IG5ldyBXZWFrU2V0PERvY3VtZW50PigpO1xuY29uc3QgYmVlcGVyID0gbmV3IEJlZXBlcigpO1xubGV0IGlzTW9kYWxPcGVuR3VhcmRJbnN0YWxsZWQgPSBmYWxzZTtcblxuLyoqXG4gKiBXcmFwcyBhIHtAbGluayBNb2RhbH0gaW5zdGFuY2UgdG8gbWFrZSBpdCBtaW5pbWl6YWJsZSB0byBhIHNtYWxsIGZsb2F0aW5nIGJhciBhbmQgcmVzdG9yYWJsZS4gV2hpbGVcbiAqIG1pbmltaXplZCB0aGUgYXBwIGlzIHB1dCBpbnRvIGEgcGVlay1vbmx5IGxvY2sgKGtleWJvYXJkLCBjb250ZXh0IG1lbnUsIGFuZCBvcGVuaW5nIG90aGVyIG1vZGFscyBhcmVcbiAqIGJsb2NrZWQpIHNvIHRoZSBtb2RhbCdzIGJsb2NraW5nIGNvbnRyYWN0IGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAdHlwZVBhcmFtIFRNb2RhbCAtIFRoZSB0eXBlIG9mIHRoZSB3cmFwcGVkIG1vZGFsLlxuICovXG5leHBvcnQgY2xhc3MgTWluaW1pemFibGVNb2RhbDxUTW9kYWwgZXh0ZW5kcyBNb2RhbD4ge1xuICAvKipcbiAgICogVGhlIHdyYXBwZWQgbW9kYWwuIE9wZW4sIGNsb3NlLCBhbmQgcG9wdWxhdGUgaXQgYXMgdXN1YWwgKGUuZy4gYG1pbmltaXphYmxlLm1vZGFsLm9wZW4oKWApLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1vZGFsOiBUTW9kYWw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG1vZGFsIGlzIGN1cnJlbnRseSBtaW5pbWl6ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbW9kYWwgaXMgY3VycmVudGx5IG1pbmltaXplZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzTWluaW1pemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTWluaW1pemVkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGlzTWluaW1pemVkVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pbWl6ZUJ1dHRvbkVsOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBtaW5pbWl6ZWRCYXJFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwZWVrTG9ja0VudHJ5OiBudWxsIHwgUGVla0xvY2tFbnRyeSA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFdyYXBzIHRoZSBnaXZlbiBtb2RhbCwgYWRkaW5nIGEgbWluaW1pemUgYnV0dG9uIGFuZCB3aXJpbmcgdXAgY2xlYW51cCBvbiBjbG9zZS5cbiAgICpcbiAgICogQHBhcmFtIG1vZGFsIC0gVGhlIG1vZGFsIGluc3RhbmNlIHRvIG1ha2UgbWluaW1pemFibGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobW9kYWw6IFRNb2RhbCkge1xuICAgIHRoaXMubW9kYWwgPSBtb2RhbDtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKG1vZGFsLmNvbnRhaW5lckVsLCBbQ3NzQ2xhc3MuTWluaW1pemFibGVNb2RhbF0pO1xuICAgIHRoaXMubWluaW1pemVCdXR0b25FbCA9IHRoaXMuY3JlYXRlTWluaW1pemVCdXR0b24oKTtcbiAgICB0aGlzLnBhdGNoT25DbG9zZShtb2RhbCk7XG4gIH1cblxuICAvKipcbiAgICogTWluaW1pemVzIHRoZSBtb2RhbDogaGlkZXMgdGhlIG1vZGFsIGFuZCBpdHMgYmFja2Ryb3AsIHNob3dzIGEgZmxvYXRpbmcgYmFyIHdpdGggYSByZXN0b3JlIGJ1dHRvbixcbiAgICogYW5kIHB1dHMgdGhlIGFwcCBpbnRvIHRoZSBwZWVrLW9ubHkgbG9jay4gQSBuby1vcCBpZiB0aGUgbW9kYWwgaXMgYWxyZWFkeSBtaW5pbWl6ZWQuXG4gICAqL1xuICBwdWJsaWMgbWluaW1pemUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNNaW5pbWl6ZWRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNNaW5pbWl6ZWRWYWx1ZSA9IHRydWU7XG4gICAgdGhpcy5taW5pbWl6ZUJ1dHRvbkVsLmhpZGUoKTtcbiAgICB0aGlzLm1vZGFsLmNvbnRhaW5lckVsLmhpZGUoKTtcbiAgICAvLyBUaGUgbW9kYWwgc3RheXMgb3BlbiB3aGlsZSBtaW5pbWl6ZWQsIHNvIGl0cyBrZXltYXAgc2NvcGUgaXMgcG9wcGVkIHRvIHJlbGVhc2UgdGhlIGZvY3VzIHRyYXAuXG4gICAgLy8gUmVzdG9yaW5nIHJlLXB1c2hlcyBpdC4gQW4gYWN0aXZlIHRyYXAgd291bGQgc3RlYWwgZm9jdXMgYmFjayB0byB0aGUgaGlkZGVuIG1vZGFsLCBibG9ja2luZyB0aGVcbiAgICAvLyBNb3VzZS1kcml2ZW4gaW5zcGVjdGlvbiAoY2xpY2tpbmcgbm90ZXMsIHNjcm9sbGluZykgdGhhdCBtaW5pbWl6ZSBleGlzdHMgdG8gYWxsb3cuXG4gICAgLy8gS2V5Ym9hcmQgaW5wdXQgcmVtYWlucyBibG9ja2VkIGJ5IHRoZSBwZWVrLW9ubHkgbG9jaywgc28gcmVsZWFzaW5nIHRoZSB0cmFwIGtlZXBzIHRoZSBhcHAgaW5lcnQuXG4gICAgdGhpcy5tb2RhbC5hcHAua2V5bWFwLnBvcFNjb3BlKHRoaXMubW9kYWwuc2NvcGUpO1xuICAgIHRoaXMubWluaW1pemVkQmFyRWwgPSB0aGlzLmNyZWF0ZU1pbmltaXplZEJhcigpO1xuICAgIHRoaXMuZW5hYmxlUGVla0xvY2sodGhpcy5taW5pbWl6ZWRCYXJFbCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgdGhlIG1vZGFsIGZyb20gdGhlIG1pbmltaXplZCBzdGF0ZSwgcmVtb3ZpbmcgdGhlIGZsb2F0aW5nIGJhciBhbmQgbGlmdGluZyB0aGUgcGVlay1vbmx5XG4gICAqIGxvY2suIEEgbm8tb3AgaWYgdGhlIG1vZGFsIGlzIG5vdCBtaW5pbWl6ZWQuXG4gICAqL1xuICBwdWJsaWMgcmVzdG9yZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNNaW5pbWl6ZWRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNNaW5pbWl6ZWRWYWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuZGlzYWJsZVBlZWtMb2NrKCk7XG4gICAgdGhpcy5yZW1vdmVNaW5pbWl6ZWRCYXIoKTtcbiAgICAvLyBSZS1wdXNoIHRoZSBzY29wZSBwb3BwZWQgaW4gbWluaW1pemUoKSBzbyB0aGUgcmVzdG9yZWQgbW9kYWwgYmxvY2tzIHRoZSBhcHAgYWdhaW4gKGZvY3VzIHRyYXBcbiAgICAvLyArIEVzY2FwZSBjYXB0dXJlKS5cbiAgICB0aGlzLm1vZGFsLmFwcC5rZXltYXAucHVzaFNjb3BlKHRoaXMubW9kYWwuc2NvcGUpO1xuICAgIHRoaXMubW9kYWwuY29udGFpbmVyRWwuc2hvdygpO1xuICAgIHRoaXMubWluaW1pemVCdXR0b25FbC5zaG93KCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1pbmltaXplQnV0dG9uKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBidXR0b25FbCA9IHRoaXMubW9kYWwubW9kYWxFbC5jcmVhdGVFbCgnYnV0dG9uJywgeyBjbHM6IENzc0NsYXNzLk1pbmltaXplQnV0dG9uIH0pO1xuICAgIHNldEljb24oYnV0dG9uRWwsIE1JTklNSVpFX0lDT05fSUQpO1xuICAgIGJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy5taW5pbWl6ZSgpO1xuICAgIH0pO1xuICAgIHJldHVybiBidXR0b25FbDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTWluaW1pemVkQmFyKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBiYXJFbCA9IHRoaXMubW9kYWwuY29udGFpbmVyRWwub3duZXJEb2N1bWVudC5ib2R5LmNyZWF0ZURpdigpO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoYmFyRWwsIFtDc3NDbGFzcy5NaW5pbWl6ZWRNb2RhbEJhcl0pO1xuICAgIGJhckVsLmNyZWF0ZVNwYW4oe1xuICAgICAgY2xzOiBDc3NDbGFzcy5NaW5pbWl6ZWRNb2RhbEJhclRpdGxlLFxuICAgICAgdGV4dDogdGhpcy5tb2RhbC50aXRsZUVsLnRleHRDb250ZW50XG4gICAgfSk7XG4gICAgY29uc3QgcmVzdG9yZUJ1dHRvbkVsID0gYmFyRWwuY3JlYXRlRWwoJ2J1dHRvbicsIHsgY2xzOiBDc3NDbGFzcy5SZXN0b3JlQnV0dG9uIH0pO1xuICAgIHNldEljb24ocmVzdG9yZUJ1dHRvbkVsLCBSRVNUT1JFX0lDT05fSUQpO1xuICAgIC8vIFRoZSB3aG9sZSBiYXIgcmVzdG9yZXMgb24gY2xpY2ssIG5vdCBqdXN0IHRoZSByZXN0b3JlIGJ1dHRvbiBcdTIwMTQgYSBsYXJnZXIsIGVhc2llciBjbGljayB0YXJnZXQuXG4gICAgLy8gYHJlc3RvcmUoKWAgZ3VhcmRzIGFnYWluc3QgYSBkb3VibGUgaW52b2NhdGlvbiwgc28gdGhlIHJlc3RvcmUgYnV0dG9uJ3Mgb3duIGNsaWNrIGJ1YmJsaW5nIHVwXG4gICAgLy8gSGVyZSBpcyBhIG5vLW9wLiBUaGUgcmVzdG9yZSBidXR0b24gc3RheXMgcHVyZWx5IGFzIGEgdmlzdWFsIGFmZm9yZGFuY2UgZm9yIHRoZSBjbGljayB0YXJnZXQuXG4gICAgYmFyRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB9KTtcbiAgICAvLyBEcm9wIHRoZSBvbmUtc2hvdCBhdHRlbnRpb24gZmxhc2ggb25jZSBpdCBmaW5pc2hlcyBzbyB0aGUgYmFyIHJldHVybnMgdG8gaXRzIGdlbnRsZSBpZGxlIHB1bHNlLlxuICAgIC8vIFRoZSBpZGxlIHB1bHNlIGlzIGFuIGluZmluaXRlIGFuaW1hdGlvbiwgd2hpY2ggbmV2ZXIgZmlyZXMgYGFuaW1hdGlvbmVuZGAuXG4gICAgYmFyRWwuYWRkRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgKCkgPT4ge1xuICAgICAgYmFyRWwucmVtb3ZlQ2xhc3MoQ3NzQ2xhc3MuTWluaW1pemVkTW9kYWxCYXJBdHRlbnRpb24pO1xuICAgIH0pO1xuICAgIHJldHVybiBiYXJFbDtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZVBlZWtMb2NrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wZWVrTG9ja0VudHJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGVla0xvY2tFbnRyaWVzLmRlbGV0ZSh0aGlzLnBlZWtMb2NrRW50cnkpO1xuICAgIHRoaXMucGVla0xvY2tFbnRyeSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZVBlZWtMb2NrKGJhckVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMucGVla0xvY2tFbnRyeSA9IHtcbiAgICAgIGJhckVsLFxuICAgICAgZmxhc2g6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5mbGFzaEJhcihiYXJFbCk7XG4gICAgICB9LFxuICAgICAgaW5uZXJNb2RhbDogdGhpcy5tb2RhbFxuICAgIH07XG4gICAgcGVla0xvY2tFbnRyaWVzLmFkZCh0aGlzLnBlZWtMb2NrRW50cnkpO1xuICAgIGluc3RhbGxNb2RhbE9wZW5HdWFyZE9uY2UoKTtcbiAgICBpbnN0YWxsSW5wdXRTdXBwcmVzc29yc09uY2UodGhpcy5tb2RhbC5jb250YWluZXJFbC5vd25lckRvY3VtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZmxhc2hCYXIoYmFyRWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgYmFyRWwucmVtb3ZlQ2xhc3MoQ3NzQ2xhc3MuTWluaW1pemVkTW9kYWxCYXJBdHRlbnRpb24pO1xuICAgIC8vIEZvcmNlIGEgcmVmbG93IHNvIHJlLWFkZGluZyB0aGUgY2xhc3MgcmVzdGFydHMgdGhlIG9uZS1zaG90IGZsYXNoIG9uIHJhcGlkIHJlcGVhdGVkIGJsb2Nrcy5cbiAgICBiYXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBiYXJFbC5hZGRDbGFzcyhDc3NDbGFzcy5NaW5pbWl6ZWRNb2RhbEJhckF0dGVudGlvbik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZVBlZWtMb2NrKCk7XG4gICAgdGhpcy5yZW1vdmVNaW5pbWl6ZWRCYXIoKTtcbiAgICB0aGlzLmlzTWluaW1pemVkVmFsdWUgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hPbkNsb3NlKG1vZGFsOiBNb2RhbCk6IHZvaWQge1xuICAgIGFyb3VuZChtb2RhbCwge1xuICAgICAgb25DbG9zZTogKG5leHQ6ICgpID0+IHZvaWQpOiAoKSA9PiB2b2lkID0+IHtcbiAgICAgICAgcmV0dXJuICgpOiB2b2lkID0+IHtcbiAgICAgICAgICBuZXh0LmNhbGwobW9kYWwpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlQ2xvc2UoKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTWluaW1pemVkQmFyKCk6IHZvaWQge1xuICAgIHRoaXMubWluaW1pemVkQmFyRWw/LnJlbW92ZSgpO1xuICAgIHRoaXMubWluaW1pemVkQmFyRWwgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJsb2NrRXZlbnQoZXZ0OiBFdmVudCk6IHZvaWQge1xuICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZ0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICBzaWduYWxCbG9ja2VkQXR0ZW1wdCgpO1xufVxuXG5mdW5jdGlvbiBmbGFzaE1pbmltaXplZEJhcnMoKTogdm9pZCB7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgcGVla0xvY2tFbnRyaWVzKSB7XG4gICAgZW50cnkuZmxhc2goKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsSW5wdXRTdXBwcmVzc29yc09uY2UoZG9jOiBEb2N1bWVudCk6IHZvaWQge1xuICBpZiAoZG9jdW1lbnRzV2l0aElucHV0U3VwcHJlc3NvcnMuaGFzKGRvYykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBkb2N1bWVudHNXaXRoSW5wdXRTdXBwcmVzc29ycy5hZGQoZG9jKTtcbiAgY29uc3Qgd2luID0gZW5zdXJlTm9uTnVsbGFibGUoZG9jLmRlZmF1bHRWaWV3KTtcbiAgLy8gQ2FwdHVyZS1waGFzZSB3aW5kb3cgbGlzdGVuZXJzIHJ1biBiZWZvcmUgT2JzaWRpYW4ncyBvd24gZG9jdW1lbnQvZWxlbWVudCBoYW5kbGVycyAoaW5jbHVkaW5nXG4gIC8vIENvZGVNaXJyb3IncykuIGBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKWAgdGhlbiBwcmV2ZW50cyB0aG9zZSBoYW5kbGVycyBmcm9tIGV2ZXIgc2VlaW5nIGFcbiAgLy8gQmxvY2tlZCBldmVudC4gVGhlIGxpc3RlbmVycyBhcmUgcGVybWFuZW50IGJ1dCBpbmVydCB3aGVuZXZlciBub3RoaW5nIGlzIG1pbmltaXplZC5cbiAgLy8gYGtleWRvd25gIGxldHMgbmF2aWdhdGlvbiBrZXlzIHRocm91Z2ggKHNlZSBpc1BlZWtBbGxvd2VkS2V5KSBidXQgYmxvY2tzIGNvbW1hbmQgaG90a2V5cztcbiAgLy8gYGJlZm9yZWlucHV0YCBibG9ja3MgYWxsIGVkaXRvciBtdXRhdGlvbjsgYGNvbnRleHRtZW51YCBibG9ja3MgdGhlIHJpZ2h0LWNsaWNrIG1lbnUuXG4gIHdpbi5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgc3VwcHJlc3NLZXlkb3duV2hpbGVQZWVrTG9ja2VkLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIHdpbi5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmVpbnB1dCcsIHN1cHByZXNzV2hpbGVQZWVrTG9ja2VkLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIHdpbi5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIHN1cHByZXNzV2hpbGVQZWVrTG9ja2VkLCB7IGNhcHR1cmU6IHRydWUgfSk7XG59XG5cbmZ1bmN0aW9uIGluc3RhbGxNb2RhbE9wZW5HdWFyZE9uY2UoKTogdm9pZCB7XG4gIGlmIChpc01vZGFsT3Blbkd1YXJkSW5zdGFsbGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaXNNb2RhbE9wZW5HdWFyZEluc3RhbGxlZCA9IHRydWU7XG4gIC8vIE5ldmVyIHVuaW5zdGFsbGVkOiB0aGUgZ3VhcmQgaXMgaW5lcnQgd2hlbmV2ZXIgbm90aGluZyBpcyBtaW5pbWl6ZWQgKGBpc1BlZWtMb2NrZWQoKWAgaXMgZmFsc2UpLlxuICAvLyBPbmUgcGVybWFuZW50IHBhdGNoIGlzIGNoZWFwZXIgYW5kIGxlYWstZnJlZSB2ZXJzdXMgaW5zdGFsbGluZyBhbmQgdW5pbnN0YWxsaW5nIGl0IHBlciBtaW5pbWl6ZS5cbiAgYXJvdW5kKE1vZGFsLnByb3RvdHlwZSwge1xuICAgIG9wZW46IChuZXh0OiAoKSA9PiB2b2lkKTogKHRoaXM6IE1vZGFsKSA9PiB2b2lkID0+IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBvcGVuKHRoaXM6IE1vZGFsKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1BlZWtMb2NrZWQoKSAmJiAhaXNNaW5pbWl6ZWRJbm5lck1vZGFsKHRoaXMpKSB7XG4gICAgICAgICAgc2lnbmFsQmxvY2tlZEF0dGVtcHQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0LmNhbGwodGhpcyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzTWluaW1pemVkSW5uZXJNb2RhbChtb2RhbDogTW9kYWwpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBwZWVrTG9ja0VudHJpZXMpIHtcbiAgICBpZiAoZW50cnkuaW5uZXJNb2RhbCA9PT0gbW9kYWwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNQZWVrQWxsb3dlZEtleShldnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgLy8gTmF2aWdhdGlvbiBtb3ZlcyB0aGUgY3Vyc29yL3Njcm9sbHMgKGFsbG93ZWQpLCBidXQgU2hpZnQrbmF2aWdhdGlvbiBleHRlbmRzIHRoZSBzZWxlY3Rpb24gKG5vdFxuICAvLyBOZWVkZWQgZm9yIGluc3BlY3Rpb24pLCBzbyBpdCBpcyBibG9ja2VkLiBCYXJlIG1vZGlmaWVyIHByZXNzZXMgcGFzcyB0aHJvdWdoIG9uIHRoZWlyIG93bi5cbiAgaWYgKE5BVklHQVRJT05fS0VZUy5oYXMoZXZ0LmtleSkpIHtcbiAgICByZXR1cm4gIWV2dC5zaGlmdEtleTtcbiAgfVxuXG4gIHJldHVybiBNT0RJRklFUl9LRVlTLmhhcyhldnQua2V5KTtcbn1cblxuZnVuY3Rpb24gaXNQZWVrTG9ja2VkKCk6IGJvb2xlYW4ge1xuICAvLyBEcm9wIGVudHJpZXMgd2hvc2UgYmFyIGhhcyBsZWZ0IHRoZSBET00gd2l0aG91dCBhIHJlc3RvcmUoKSBvciBjbG9zZSgpLlxuICAvLyBBIHRlc3QgdGVhcmRvd24gdGhhdCBlbXB0aWVzIHRoZSBib2R5IGlzIHRoZSB0eXBpY2FsIGNhdXNlOyB0aGlzIGtlZXBzIGEgc3RhbGUgZW50cnkgZnJvbSBsb2NraW5nLlxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBlZWtMb2NrRW50cmllcykge1xuICAgIGlmICghZW50cnkuYmFyRWwuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHBlZWtMb2NrRW50cmllcy5kZWxldGUoZW50cnkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwZWVrTG9ja0VudHJpZXMuc2l6ZSA+IDA7XG59XG5cbmZ1bmN0aW9uIHNpZ25hbEJsb2NrZWRBdHRlbXB0KCk6IHZvaWQge1xuICBmbGFzaE1pbmltaXplZEJhcnMoKTtcbiAgYmVlcGVyLmJlZXAoKTtcbn1cblxuZnVuY3Rpb24gc3VwcHJlc3NLZXlkb3duV2hpbGVQZWVrTG9ja2VkKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICBpZiAoIWlzUGVla0xvY2tlZCgpIHx8IGlzUGVla0FsbG93ZWRLZXkoZXZ0KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGJsb2NrRXZlbnQoZXZ0KTtcbn1cblxuZnVuY3Rpb24gc3VwcHJlc3NXaGlsZVBlZWtMb2NrZWQoZXZ0OiBFdmVudCk6IHZvaWQge1xuICBpZiAoIWlzUGVla0xvY2tlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYmxvY2tFdmVudChldnQpO1xufVxu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
|
|
405
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vZGFscy9taW5pbWl6YWJsZS1tb2RhbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEEgd3JhcHBlciB0aGF0IG1ha2VzIGFueSBPYnNpZGlhbiB7QGxpbmsgTW9kYWx9IG1pbmltaXphYmxlIHRvIGEgZmxvYXRpbmcgYmFyIFx1MjAxNCB3aXRob3V0IGJyZWFraW5nIHRoZVxuICogbW9kYWwncyBibG9ja2luZyBjb250cmFjdC5cbiAqXG4gKiBPYnNpZGlhbidzIHtAbGluayBNb2RhbH0gaXMgYmxvY2tpbmc6IHdoaWxlIGl0IGlzIG9wZW4gdGhlIHJlc3Qgb2YgdGhlIGFwcCBpcyBtZWFudCB0byBiZSBpbmVydCB1bnRpbFxuICogdGhlIG1vZGFsIGlzIGRpc21pc3NlZC4ge0BsaW5rIE1pbmltaXphYmxlTW9kYWx9IHdyYXBzIGFueSBtb2RhbCBpbnN0YW5jZSAocGxhaW4gYE1vZGFsYCxcbiAqIGBGdXp6eVN1Z2dlc3RNb2RhbGAsIHRoZSBsaWJyYXJ5J3MgYE1vZGFsQmFzZWAsIHlvdXIgb3duIHN1YmNsYXNzLCBcdTIwMjYgXHUyMDE0IGluY2x1ZGluZyBtb2RhbHMgeW91IGRvIG5vdFxuICogb3duKSBhbmQgYWRkcyBhIG1pbmltaXplIGJ1dHRvbi4gTWluaW1pemluZyBoaWRlcyB0aGUgbW9kYWwgYW5kIGl0cyBibG9ja2luZyBiYWNrZHJvcCBhbmQgc2hvd3MgYVxuICogc21hbGwgZmxvYXRpbmcgYmFyIHdpdGggYSByZXN0b3JlIGJ1dHRvbiwgc28gdGhlIHVzZXIgY2FuIHBlZWsgYXQgdGhlIG5vdGVzL2ZvbGRlcnMgdGhlIG9wZXJhdGlvblxuICogaW52b2x2ZXMgXHUyMDE0IGJ1dCB0aGUgbW9kYWwgaXMgTk9UIGRpc21pc3NlZCwgc28gaXRzIGJsb2NraW5nIGNvbnRyYWN0IG11c3QgYmUgcHJlc2VydmVkLlxuICpcbiAqIFRvIGtlZXAgdGhhdCBjb250cmFjdCB3aGlsZSBtaW5pbWl6ZWQsIHRoZSB3cmFwcGVyIHB1dHMgdGhlIGFwcCBpbnRvIGEgKipwZWVrLW9ubHkgbG9jayoqOiB0aGUgdXNlclxuICogbWF5IG1vdXNlLWNsaWNrIGFuZCBzY3JvbGwgdG8gaW5zcGVjdCBjb250ZW50LCBidXQgY2Fubm90IHN0YXJ0IGFueXRoaW5nIG5ldy4gV2hpbGUgYW55IG1vZGFsIGlzXG4gKiBtaW5pbWl6ZWQgdGhlIHdyYXBwZXI6XG4gKiAtIGJsb2NrcyB0aGUga2V5Ym9hcmQgKHR5cGluZywgaG90a2V5cywgdGhlIGNvbW1hbmQtcGFsZXR0ZSBzaG9ydGN1dCksXG4gKiAtIGJsb2NrcyB0aGUgcmlnaHQtY2xpY2sgY29udGV4dCBtZW51LCBhbmRcbiAqIC0gYmxvY2tzIG9wZW5pbmcgYW55IG90aGVyIG1vZGFsIChhIHJlLWZpcmVkIGNvbW1hbmQsIHRoZSBjb21tYW5kIHBhbGV0dGUsIHNldHRpbmdzLCBcdTIwMjYpLlxuICpcbiAqIEEgYmxvY2tlZCBhdHRlbXB0IGZsYXNoZXMgdGhlIGZsb2F0aW5nIGJhciBhbmQgYmVlcHMgc28gdGhlIHVzZXIgc2VlcyAoYW5kIGhlYXJzKSB3aHkgbm90aGluZ1xuICogaGFwcGVuZWQuIFJlc3RvcmluZyAob3IgdGhlIG1vZGFsIGNsb3NpbmcpIGxpZnRzIHRoZSBsb2NrLiBUaGlzIHByZXZlbnRzLCBmb3IgZXhhbXBsZSwgbWluaW1pemluZyBhXG4gKiBcIm1lcmdlIGZvbGRlclwiIHBpY2tlciBhbmQgdGhlbiBmaXJpbmcgdGhlIHNhbWUgY29tbWFuZCBhZ2FpbiB0byBzdGFjayBzZXZlcmFsIGNvbmN1cnJlbnQgbWVyZ2VzLlxuICpcbiAqIFRoZSB3cmFwcGVyIHJldXNlcyB0aGUgbW9kYWwncyBvd24gdGl0bGUgKGB0aXRsZUVsYCkgYXMgdGhlIG1pbmltaXplZCBiYXIgbGFiZWwsIHNvIHNldCB0aGUgdGl0bGVcbiAqIHRoZSB1c3VhbCB3YXkgKGBtb2RhbC5zZXRUaXRsZSguLi4pYCkuIFJlbmRlciBhcmJpdHJhcnkgY29udGVudCBpbnRvIHtAbGluayBNb2RhbC5jb250ZW50RWx9LFxuICogaW5jbHVkaW5nIGNsaWNrYWJsZSBub3RlIGxpbmtzIHByb2R1Y2VkIGJ5IGByZW5kZXJJbnRlcm5hbExpbmtgIGZyb21cbiAqIGBvYnNpZGlhbi1kZXYtdXRpbHMvb2JzaWRpYW4vbWFya2Rvd25gOlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBtb2RhbCA9IG5ldyBNeU1vZGFsKGFwcCk7XG4gKiBtb2RhbC5zZXRUaXRsZSgnTWVyZ2luZyBub3RlcycpO1xuICogbW9kYWwuY29udGVudEVsLmFwcGVuZENoaWxkKGF3YWl0IHJlbmRlckludGVybmFsTGluayh7IGFwcCwgcGF0aE9yQWJzdHJhY3RGaWxlOiBmaWxlIH0pKTtcbiAqXG4gKiBjb25zdCBtaW5pbWl6YWJsZSA9IG5ldyBNaW5pbWl6YWJsZU1vZGFsKG1vZGFsKTtcbiAqIG1pbmltaXphYmxlLm1vZGFsLm9wZW4oKTtcbiAqIG1pbmltaXphYmxlLm1pbmltaXplKCk7IC8vIGEgZmxvYXRpbmcgYmFyIG9mZmVycyBcInJlc3RvcmVcIjsgdGhlIGFwcCBpcyBwZWVrLW9ubHkgdW50aWwgcmVzdG9yZWRcbiAqIGBgYFxuICpcbiAqIFRoZSB3cmFwcGVkIG1vZGFsIGNhbiBzdGlsbCBiZSBjbG9zZWQgbm9ybWFsbHk7IHRoZSBmbG9hdGluZyBiYXIgaXMgY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5IHdoZW5cbiAqIHRoZSBtb2RhbCBjbG9zZXMgKGV2ZW4gaWYgaXQgaXMgY2xvc2VkIHdoaWxlIG1pbmltaXplZCkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIE1vZGFsLFxuICBzZXRJY29uXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQmVlcGVyIH0gZnJvbSAnLi4vLi4vYmVlcGVyLnRzJztcbmltcG9ydCB7IEFsbFdpbmRvd3NFdmVudENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWxsLXdpbmRvd3MtZXZlbnQtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE1vbmtleUFyb3VuZENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHsgYWRkUGx1Z2luQ3NzQ2xhc3NlcyB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tY29udGV4dC50cyc7XG5cbmNvbnN0IE1JTklNSVpFX0lDT05fSUQgPSAnbWludXMnO1xuY29uc3QgUkVTVE9SRV9JQ09OX0lEID0gJ21heGltaXplLTInO1xuXG4vLyBOYXZpZ2F0aW9uIGtleXMgcGFzcyB0aHJvdWdoIHdoaWxlIG1pbmltaXplZCBzbyB0aGUgdXNlciBjYW4gbW92ZSB0aGUgY3Vyc29yIGFuZCBzY3JvbGwgdG8gcmVhZC5cbi8vIE5vbmUgb2YgdGhlbSBtdXRhdGUgdGhlIGRvY3VtZW50IFx1MjAxNCB0ZXh0IGNoYW5nZXMgYXJlIGNhdWdodCBzZXBhcmF0ZWx5IGJ5IHRoZSBgYmVmb3JlaW5wdXRgIGd1YXJkLlxuLy8gU2hpZnQrbmF2aWdhdGlvbiBpcyBibG9ja2VkLCB0aG91Z2gsIHNpbmNlIGl0IGV4dGVuZHMgdGhlIHNlbGVjdGlvbiB0aGF0IGluc3BlY3Rpb24gZG9lcyBub3QgbmVlZC5cbmNvbnN0IE5BVklHQVRJT05fS0VZUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICdBcnJvd0Rvd24nLFxuICAnQXJyb3dMZWZ0JyxcbiAgJ0Fycm93UmlnaHQnLFxuICAnQXJyb3dVcCcsXG4gICdFbmQnLFxuICAnSG9tZScsXG4gICdQYWdlRG93bicsXG4gICdQYWdlVXAnXG5dKTtcblxuLy8gQSBiYXJlIG1vZGlmaWVyIHByZXNzIGRvZXMgbm90aGluZyBvbiBpdHMgb3duLCBzbyBpdCBwYXNzZXMgdGhyb3VnaCB0aGUgbG9jay5cbi8vIFRoaXMgYXZvaWRzIGEgc3B1cmlvdXMgZmxhc2gvYmVlcCB3aGlsZSBjb21wb3NpbmcgYSBzaG9ydGN1dDsgdGhlIHNob3J0Y3V0J3MgY29tbWFuZCBrZXkgaXMgYmxvY2tlZC5cbmNvbnN0IE1PRElGSUVSX0tFWVMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAnQWx0JyxcbiAgJ0NvbnRyb2wnLFxuICAnTWV0YScsXG4gICdTaGlmdCdcbl0pO1xuXG4vKipcbiAqIEEgcmVnaXN0ZXJlZCBlbnRyeSBmb3IgYSBjdXJyZW50bHktbWluaW1pemVkIG1vZGFsLiBUaGUgc2hhcmVkIHBlZWstb25seSBsb2NrIHVzZXMgaXQgdG8ga25vdyBhXG4gKiBtb2RhbCBpcyBtaW5pbWl6ZWQsIHRvIGxlYXZlIHRoYXQgbW9kYWwncyBvd24gcmUtb3BlbnMgYWxvbmUsIGFuZCB0byBmbGFzaCBpdHMgYmFyIG9uIGEgYmxvY2tlZFxuICogYXR0ZW1wdC5cbiAqL1xuaW50ZXJmYWNlIFBlZWtMb2NrRW50cnkge1xuICAvKipcbiAgICogVGhlIGZsb2F0aW5nIGJhciBlbGVtZW50LiBVc2VkIHRvIGRldGVjdCBhIHN0YWxlIGVudHJ5IChpdHMgYmFyIGhhcyBsZWZ0IHRoZSBET00pIHNvIGl0IGNhbiBiZVxuICAgKiBwcnVuZWQgYW5kIG5ldmVyIGtlZXAgdGhlIGFwcCBsb2NrZWQuXG4gICAqL1xuICByZWFkb25seSBiYXJFbDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIEZsYXNoZXMgdGhlIGZsb2F0aW5nIGJhciB0byBzaWduYWwgYSBibG9ja2VkIGF0dGVtcHQuXG4gICAqL1xuICBmbGFzaCgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgd3JhcHBlZCBtb2RhbCBpbnN0YW5jZSwgc28gaXRzIG93biBgb3BlbigpYCBpcyBuZXZlciBibG9ja2VkIGJ5IHRoZSBsb2NrLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5uZXJNb2RhbDogTW9kYWw7XG59XG5cbmNvbnN0IHBlZWtMb2NrRW50cmllcyA9IG5ldyBTZXQ8UGVla0xvY2tFbnRyeT4oKTtcbmNvbnN0IGJlZXBlciA9IG5ldyBCZWVwZXIoKTtcblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgcGVlay1vbmx5IGxvY2sncyBgb3BlbmAgcGF0Y2hlcyB3aGlsZSBhdCBsZWFzdCBvbmUgbW9kYWwgaXMgbWluaW1pemVkLiBCZWluZyBhXG4gKiB7QGxpbmsgTW9ua2V5QXJvdW5kQ29tcG9uZW50fSwgYm90aCBwYXRjaGVzIGFyZSB0b3JuIGRvd24gYXV0b21hdGljYWxseSBvbiBgdW5sb2FkYCwgc28gdGhleSBleGlzdFxuICogb25seSB3aGlsZSB0aGUgbG9jayBpcyBhY3RpdmUuIEEgbWluaW1pemVkIG1vZGFsJ3Mgb3duIHJlLW9wZW4gaXMgYWx3YXlzIGFsbG93ZWQgKHNlZVxuICoge0BsaW5rIHNob3VsZEJsb2NrT3Blbn0pOyBldmVyeSBvdGhlciBtb2RhbCBvcGVuIGlzIGJsb2NrZWQgYW5kIHNpZ25hbHMgYSBmbGFzaCArIGJlZXAuXG4gKi9cbmNsYXNzIFBlZWtMb2NrQ29tcG9uZW50IGV4dGVuZHMgTW9ua2V5QXJvdW5kQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIHdob3NlIHNldHRpbmdzIG1vZGFsIGlzIGd1YXJkZWQgYW5kIHdob3NlIHdpbmRvd3Mgc3VwcHJlc3MgaW5wdXQgd2hpbGUgbG9ja2VkLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgYG9wZW5gIHBhdGNoZXMgYW5kIHRoZSBpbnB1dCBzdXBwcmVzc29ycy5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG5cbiAgICAvLyBCbG9jayBvcGVuaW5nIGFueSBPVEhFUiBtb2RhbCB3aGlsZSBhIG1vZGFsIGlzIG1pbmltaXplZCAodGhlIGNvbW1hbmQgcGFsZXR0ZSwgYSByZS1maXJlZFxuICAgIC8vIENvbW1hbmQsIGFub3RoZXIgcGx1Z2luIG1vZGFsLCBcdTIwMjYpLlxuICAgIHRoaXMucmVnaXN0ZXJNZXRob2RQYXRjaDxNb2RhbCwgJ29wZW4nPih7XG4gICAgICBtZXRob2ROYW1lOiAnb3BlbicsXG4gICAgICBvYmo6IE1vZGFsLnByb3RvdHlwZSxcbiAgICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsVGhpcyB9KTogdm9pZCA9PiB7XG4gICAgICAgIGJsb2NrT3JGYWxsYmFjayhvcmlnaW5hbFRoaXMsIGZhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIE9ic2lkaWFuJ3MgU2V0dGluZ3MgaXMgYSAqcG9wb3V0KiBtb2RhbDogb24gZGVza3RvcCBpdHMgb3duIGBvcGVuKClgIGZpcnN0IGNyZWF0ZXMgYSBzZXBhcmF0ZSBPU1xuICAgIC8vIFdpbmRvdyAodmlhIGBzaG91bGRVc2VQb3BvdXQoKWAvYGdldFBvcG91dE9wdGlvbnMoKWApIGFuZCBvbmx5IFRIRU4gZGVsZWdhdGVzIHRvXG4gICAgLy8gYE1vZGFsLnByb3RvdHlwZS5vcGVuYCB0byByZW5kZXIgdGhlIGFjdGl2ZSB0YWIgaW50byBpdC4gR3VhcmRpbmcgb25seSBgTW9kYWwucHJvdG90eXBlLm9wZW5gXG4gICAgLy8gVGhlcmVmb3JlIGJsb2NrcyB0aGUgcmVuZGVyIGJ1dCBsZWF2ZXMgYW4gZW1wdHkgc2V0dGluZ3Mgd2luZG93IGJlaGluZCBcdTIwMTQgdGhlIHJlcG9ydGVkIGJhZCBVWC5cbiAgICAvLyBHdWFyZGluZyB0aGUgc2V0dGluZ3MgbW9kYWwncyBvd24gYG9wZW4oKWAgYmxvY2tzIGl0ICpiZWZvcmUqIHRoZSB3aW5kb3cgaXMgY3JlYXRlZC5cbiAgICB0aGlzLnJlZ2lzdGVyTWV0aG9kUGF0Y2g8QXBwWydzZXR0aW5nJ10sICdvcGVuJz4oe1xuICAgICAgbWV0aG9kTmFtZTogJ29wZW4nLFxuICAgICAgb2JqOiB0aGlzLmFwcC5zZXR0aW5nLFxuICAgICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxUaGlzIH0pOiB2b2lkID0+IHtcbiAgICAgICAgYmxvY2tPckZhbGxiYWNrKG9yaWdpbmFsVGhpcywgZmFsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU3VwcHJlc3MgdGhlIGtleWJvYXJkLCBlZGl0b3IgbXV0YXRpb24sIGFuZCB0aGUgY29udGV4dCBtZW51IGFjcm9zcyBBTEwgd2luZG93cyBcdTIwMTQgdGhlIG1haW4gd2luZG93XG4gICAgLy8gQW5kIGV2ZXJ5IGV4aXN0aW5nL2Z1dHVyZSBwb3BvdXQgXHUyMDE0IHNvIHRoZSBsb2NrIGhvbGRzIHdoZXJldmVyIHRoZSB1c2VyJ3MgZm9jdXMgaXMsIG5vdCBvbmx5IGluXG4gICAgLy8gVGhlIHdpbmRvdyB0aGF0IG93bnMgdGhlIG1pbmltaXplZCBtb2RhbC4gQ2FwdHVyZS1waGFzZSBsaXN0ZW5lcnMgcnVuIGJlZm9yZSBPYnNpZGlhbidzIG93blxuICAgIC8vIERvY3VtZW50L2VsZW1lbnQgaGFuZGxlcnMgKGluY2x1ZGluZyBDb2RlTWlycm9yJ3MpLCBzbyBgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClgIGluIHRoZVxuICAgIC8vIFN1cHByZXNzb3JzIGtlZXBzIGEgYmxvY2tlZCBldmVudCBmcm9tIGV2ZXIgcmVhY2hpbmcgdGhlbS4gYGtleWRvd25gIGxldHMgbmF2aWdhdGlvbiBrZXlzIHRocm91Z2hcbiAgICAvLyAoc2VlIGBpc1BlZWtBbGxvd2VkS2V5YCkgYnV0IGJsb2NrcyBjb21tYW5kIGhvdGtleXM7IGBiZWZvcmVpbnB1dGAgYmxvY2tzIGFsbCBlZGl0b3IgbXV0YXRpb247XG4gICAgLy8gYGNvbnRleHRtZW51YCBibG9ja3MgdGhlIHJpZ2h0LWNsaWNrIG1lbnUuXG4gICAgY29uc3QgYWxsV2luZG93c0V2ZW50Q29tcG9uZW50ID0gdGhpcy5hZGRDaGlsZChuZXcgQWxsV2luZG93c0V2ZW50Q29tcG9uZW50KHRoaXMuYXBwKSk7XG4gICAgYWxsV2luZG93c0V2ZW50Q29tcG9uZW50LnJlZ2lzdGVyQWxsV2luZG93c0RvbUV2ZW50KHtcbiAgICAgIGNhbGxiYWNrOiBzdXBwcmVzc0tleWRvd25XaGlsZVBlZWtMb2NrZWQsXG4gICAgICBvcHRpb25zOiB7IGNhcHR1cmU6IHRydWUgfSxcbiAgICAgIHR5cGU6ICdrZXlkb3duJ1xuICAgIH0pO1xuICAgIGFsbFdpbmRvd3NFdmVudENvbXBvbmVudC5yZWdpc3RlckFsbFdpbmRvd3NEb21FdmVudCh7XG4gICAgICBjYWxsYmFjazogc3VwcHJlc3NXaGlsZVBlZWtMb2NrZWQsXG4gICAgICBvcHRpb25zOiB7IGNhcHR1cmU6IHRydWUgfSxcbiAgICAgIHR5cGU6ICdiZWZvcmVpbnB1dCdcbiAgICB9KTtcbiAgICBhbGxXaW5kb3dzRXZlbnRDb21wb25lbnQucmVnaXN0ZXJBbGxXaW5kb3dzRG9tRXZlbnQoe1xuICAgICAgY2FsbGJhY2s6IHN1cHByZXNzV2hpbGVQZWVrTG9ja2VkLFxuICAgICAgb3B0aW9uczogeyBjYXB0dXJlOiB0cnVlIH0sXG4gICAgICB0eXBlOiAnY29udGV4dG1lbnUnXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwcyBhIHtAbGluayBNb2RhbH0gaW5zdGFuY2UgdG8gbWFrZSBpdCBtaW5pbWl6YWJsZSB0byBhIHNtYWxsIGZsb2F0aW5nIGJhciBhbmQgcmVzdG9yYWJsZS4gV2hpbGVcbiAqIG1pbmltaXplZCB0aGUgYXBwIGlzIHB1dCBpbnRvIGEgcGVlay1vbmx5IGxvY2sgKGtleWJvYXJkLCBjb250ZXh0IG1lbnUsIGFuZCBvcGVuaW5nIG90aGVyIG1vZGFscyBhcmVcbiAqIGJsb2NrZWQpIHNvIHRoZSBtb2RhbCdzIGJsb2NraW5nIGNvbnRyYWN0IGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAdHlwZVBhcmFtIFRNb2RhbCAtIFRoZSB0eXBlIG9mIHRoZSB3cmFwcGVkIG1vZGFsLlxuICovXG5leHBvcnQgY2xhc3MgTWluaW1pemFibGVNb2RhbDxUTW9kYWwgZXh0ZW5kcyBNb2RhbD4ge1xuICAvKipcbiAgICogVGhlIHdyYXBwZWQgbW9kYWwuIE9wZW4sIGNsb3NlLCBhbmQgcG9wdWxhdGUgaXQgYXMgdXN1YWwgKGUuZy4gYG1pbmltaXphYmxlLm1vZGFsLm9wZW4oKWApLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1vZGFsOiBUTW9kYWw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG1vZGFsIGlzIGN1cnJlbnRseSBtaW5pbWl6ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbW9kYWwgaXMgY3VycmVudGx5IG1pbmltaXplZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzTWluaW1pemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTWluaW1pemVkVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyB0aGUgd3JhcHBlZCBtb2RhbCdzIGBvbkNsb3NlYCB0byBydW4gY2xlYW51cC4gUGVyc2lzdHMgZm9yIHRoZSB3cmFwcGVyJ3Mgd2hvbGUgbGlmZSAoYVxuICAgKiBtb2RhbCBjYW4gYmUgcmVvcGVuZWQsIHNvIHRoZSBwYXRjaCBtdXN0IHN1cnZpdmUgZWFjaCBjbG9zZSksIGhlbmNlIGEgZGVkaWNhdGVkIGNvbXBvbmVudCB0aGF0IGlzXG4gICAqIG5ldmVyIHVubG9hZGVkIFx1MjAxNCBkaXN0aW5jdCBmcm9tIGBwZWVrTG9ja0NvbXBvbmVudGAsIHdob3NlIHBhdGNoZXMgbGl2ZSBvbmx5IHdoaWxlIG1pbmltaXplZC5cbiAgICogRXhwb3NlZCB0byBzdWJjbGFzc2VzIHNvIHRoZXkgY2FuIHJlZ2lzdGVyIGFkZGl0aW9uYWwgbGlmZXRpbWUtc2NvcGVkIHBhdGNoZXMgb24gdGhlIHdyYXBwZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2xvc2VQYXRjaENvbXBvbmVudCA9IG5ldyBNb25rZXlBcm91bmRDb21wb25lbnQoKTtcblxuICBwcml2YXRlIGlzTWluaW1pemVkVmFsdWUgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pbWl6ZUJ1dHRvbkVsOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBtaW5pbWl6ZWRCYXJFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwZWVrTG9ja0NvbXBvbmVudDogbnVsbCB8IFBlZWtMb2NrQ29tcG9uZW50ID0gbnVsbDtcbiAgcHJpdmF0ZSBwZWVrTG9ja0VudHJ5OiBudWxsIHwgUGVla0xvY2tFbnRyeSA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFdyYXBzIHRoZSBnaXZlbiBtb2RhbCwgYWRkaW5nIGEgbWluaW1pemUgYnV0dG9uIGFuZCB3aXJpbmcgdXAgY2xlYW51cCBvbiBjbG9zZS5cbiAgICpcbiAgICogQHBhcmFtIG1vZGFsIC0gVGhlIG1vZGFsIGluc3RhbmNlIHRvIG1ha2UgbWluaW1pemFibGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobW9kYWw6IFRNb2RhbCkge1xuICAgIHRoaXMubW9kYWwgPSBtb2RhbDtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKG1vZGFsLmNvbnRhaW5lckVsLCBbQ3NzQ2xhc3MuTWluaW1pemFibGVNb2RhbF0pO1xuICAgIHRoaXMubWluaW1pemVCdXR0b25FbCA9IHRoaXMuY3JlYXRlTWluaW1pemVCdXR0b24oKTtcbiAgICB0aGlzLmNsb3NlUGF0Y2hDb21wb25lbnQubG9hZCgpO1xuICAgIHRoaXMucGF0Y2hPbkNsb3NlKG1vZGFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNaW5pbWl6ZXMgdGhlIG1vZGFsOiBoaWRlcyB0aGUgbW9kYWwgYW5kIGl0cyBiYWNrZHJvcCwgc2hvd3MgYSBmbG9hdGluZyBiYXIgd2l0aCBhIHJlc3RvcmUgYnV0dG9uLFxuICAgKiBhbmQgcHV0cyB0aGUgYXBwIGludG8gdGhlIHBlZWstb25seSBsb2NrLiBBIG5vLW9wIGlmIHRoZSBtb2RhbCBpcyBhbHJlYWR5IG1pbmltaXplZC5cbiAgICovXG4gIHB1YmxpYyBtaW5pbWl6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc01pbmltaXplZFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc01pbmltaXplZFZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLm1pbmltaXplQnV0dG9uRWwuaGlkZSgpO1xuICAgIHRoaXMubW9kYWwuY29udGFpbmVyRWwuaGlkZSgpO1xuICAgIC8vIFRoZSBtb2RhbCBzdGF5cyBvcGVuIHdoaWxlIG1pbmltaXplZCwgc28gaXRzIGtleW1hcCBzY29wZSBpcyBwb3BwZWQgdG8gcmVsZWFzZSB0aGUgZm9jdXMgdHJhcC5cbiAgICAvLyBSZXN0b3JpbmcgcmUtcHVzaGVzIGl0LiBBbiBhY3RpdmUgdHJhcCB3b3VsZCBzdGVhbCBmb2N1cyBiYWNrIHRvIHRoZSBoaWRkZW4gbW9kYWwsIGJsb2NraW5nIHRoZVxuICAgIC8vIE1vdXNlLWRyaXZlbiBpbnNwZWN0aW9uIChjbGlja2luZyBub3Rlcywgc2Nyb2xsaW5nKSB0aGF0IG1pbmltaXplIGV4aXN0cyB0byBhbGxvdy5cbiAgICAvLyBLZXlib2FyZCBpbnB1dCByZW1haW5zIGJsb2NrZWQgYnkgdGhlIHBlZWstb25seSBsb2NrLCBzbyByZWxlYXNpbmcgdGhlIHRyYXAga2VlcHMgdGhlIGFwcCBpbmVydC5cbiAgICB0aGlzLm1vZGFsLmFwcC5rZXltYXAucG9wU2NvcGUodGhpcy5tb2RhbC5zY29wZSk7XG4gICAgdGhpcy5taW5pbWl6ZWRCYXJFbCA9IHRoaXMuY3JlYXRlTWluaW1pemVkQmFyKCk7XG4gICAgdGhpcy5lbmFibGVQZWVrTG9jayh0aGlzLm1pbmltaXplZEJhckVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyB0aGUgbW9kYWwgZnJvbSB0aGUgbWluaW1pemVkIHN0YXRlLCByZW1vdmluZyB0aGUgZmxvYXRpbmcgYmFyIGFuZCBsaWZ0aW5nIHRoZSBwZWVrLW9ubHlcbiAgICogbG9jay4gQSBuby1vcCBpZiB0aGUgbW9kYWwgaXMgbm90IG1pbmltaXplZC5cbiAgICovXG4gIHB1YmxpYyByZXN0b3JlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc01pbmltaXplZFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc01pbmltaXplZFZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5kaXNhYmxlUGVla0xvY2soKTtcbiAgICB0aGlzLnJlbW92ZU1pbmltaXplZEJhcigpO1xuICAgIC8vIFJlLXB1c2ggdGhlIHNjb3BlIHBvcHBlZCBpbiBtaW5pbWl6ZSgpIHNvIHRoZSByZXN0b3JlZCBtb2RhbCBibG9ja3MgdGhlIGFwcCBhZ2FpbiAoZm9jdXMgdHJhcFxuICAgIC8vICsgRXNjYXBlIGNhcHR1cmUpLlxuICAgIHRoaXMubW9kYWwuYXBwLmtleW1hcC5wdXNoU2NvcGUodGhpcy5tb2RhbC5zY29wZSk7XG4gICAgdGhpcy5tb2RhbC5jb250YWluZXJFbC5zaG93KCk7XG4gICAgdGhpcy5taW5pbWl6ZUJ1dHRvbkVsLnNob3coKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTWluaW1pemVCdXR0b24oKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGJ1dHRvbkVsID0gdGhpcy5tb2RhbC5tb2RhbEVsLmNyZWF0ZUVsKCdidXR0b24nLCB7IGNsczogQ3NzQ2xhc3MuTWluaW1pemVCdXR0b24gfSk7XG4gICAgc2V0SWNvbihidXR0b25FbCwgTUlOSU1JWkVfSUNPTl9JRCk7XG4gICAgYnV0dG9uRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLm1pbmltaXplKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1dHRvbkVsO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNaW5pbWl6ZWRCYXIoKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGJhckVsID0gdGhpcy5tb2RhbC5jb250YWluZXJFbC5vd25lckRvY3VtZW50LmJvZHkuY3JlYXRlRGl2KCk7XG4gICAgYWRkUGx1Z2luQ3NzQ2xhc3NlcyhiYXJFbCwgW0Nzc0NsYXNzLk1pbmltaXplZE1vZGFsQmFyXSk7XG4gICAgYmFyRWwuY3JlYXRlU3Bhbih7XG4gICAgICBjbHM6IENzc0NsYXNzLk1pbmltaXplZE1vZGFsQmFyVGl0bGUsXG4gICAgICB0ZXh0OiB0aGlzLm1vZGFsLnRpdGxlRWwudGV4dENvbnRlbnRcbiAgICB9KTtcbiAgICBjb25zdCByZXN0b3JlQnV0dG9uRWwgPSBiYXJFbC5jcmVhdGVFbCgnYnV0dG9uJywgeyBjbHM6IENzc0NsYXNzLlJlc3RvcmVCdXR0b24gfSk7XG4gICAgc2V0SWNvbihyZXN0b3JlQnV0dG9uRWwsIFJFU1RPUkVfSUNPTl9JRCk7XG4gICAgLy8gVGhlIHdob2xlIGJhciByZXN0b3JlcyBvbiBjbGljaywgbm90IGp1c3QgdGhlIHJlc3RvcmUgYnV0dG9uIFx1MjAxNCBhIGxhcmdlciwgZWFzaWVyIGNsaWNrIHRhcmdldC5cbiAgICAvLyBgcmVzdG9yZSgpYCBndWFyZHMgYWdhaW5zdCBhIGRvdWJsZSBpbnZvY2F0aW9uLCBzbyB0aGUgcmVzdG9yZSBidXR0b24ncyBvd24gY2xpY2sgYnViYmxpbmcgdXBcbiAgICAvLyBIZXJlIGlzIGEgbm8tb3AuIFRoZSByZXN0b3JlIGJ1dHRvbiBzdGF5cyBwdXJlbHkgYXMgYSB2aXN1YWwgYWZmb3JkYW5jZSBmb3IgdGhlIGNsaWNrIHRhcmdldC5cbiAgICBiYXJFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgIH0pO1xuICAgIC8vIERyb3AgdGhlIG9uZS1zaG90IGF0dGVudGlvbiBmbGFzaCBvbmNlIGl0IGZpbmlzaGVzIHNvIHRoZSBiYXIgcmV0dXJucyB0byBpdHMgZ2VudGxlIGlkbGUgcHVsc2UuXG4gICAgLy8gVGhlIGlkbGUgcHVsc2UgaXMgYW4gaW5maW5pdGUgYW5pbWF0aW9uLCB3aGljaCBuZXZlciBmaXJlcyBgYW5pbWF0aW9uZW5kYC5cbiAgICBiYXJFbC5hZGRFdmVudExpc3RlbmVyKCdhbmltYXRpb25lbmQnLCAoKSA9PiB7XG4gICAgICBiYXJFbC5yZW1vdmVDbGFzcyhDc3NDbGFzcy5NaW5pbWl6ZWRNb2RhbEJhckF0dGVudGlvbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJhckVsO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlUGVla0xvY2soKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBlZWtMb2NrRW50cnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwZWVrTG9ja0VudHJpZXMuZGVsZXRlKHRoaXMucGVla0xvY2tFbnRyeSk7XG4gICAgdGhpcy5wZWVrTG9ja0VudHJ5ID0gbnVsbDtcbiAgICAvLyBUZWFyIHRoZSBgb3BlbmAgcGF0Y2hlcyBkb3duIHdpdGggdGhlIGNvbXBvbmVudCwgc28gdGhleSBleGlzdCBvbmx5IHdoaWxlIHRoaXMgbW9kYWwgaXMgbWluaW1pemVkLlxuICAgIHRoaXMucGVla0xvY2tDb21wb25lbnQ/LnVubG9hZCgpO1xuICAgIHRoaXMucGVla0xvY2tDb21wb25lbnQgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVQZWVrTG9jayhiYXJFbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnBlZWtMb2NrRW50cnkgPSB7XG4gICAgICBiYXJFbCxcbiAgICAgIGZsYXNoOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuZmxhc2hCYXIoYmFyRWwpO1xuICAgICAgfSxcbiAgICAgIGlubmVyTW9kYWw6IHRoaXMubW9kYWxcbiAgICB9O1xuICAgIHBlZWtMb2NrRW50cmllcy5hZGQodGhpcy5wZWVrTG9ja0VudHJ5KTtcbiAgICAvLyBJbnN0YWxsIHRoZSBgb3BlbmAgcGF0Y2hlcyBhbmQgaW5wdXQgc3VwcHJlc3NvcnMgZm9yIGFzIGxvbmcgYXMgdGhpcyBtb2RhbCBpcyBtaW5pbWl6ZWQuIFRoZVxuICAgIC8vIEJsb2NrIExPR0lDIGl0c2VsZiBrZXlzIG9mZiB0aGUgc2hhcmVkIGBwZWVrTG9ja0VudHJpZXNgIChzZWUgYHNob3VsZEJsb2NrT3BlbmApLCBzbyB3aXRoIHNldmVyYWxcbiAgICAvLyBNb2RhbHMgbWluaW1pemVkIGV2ZXJ5IG9uZSdzIHBhdGNoIHJlYWNoZXMgdGhlIHNhbWUgdmVyZGljdDsgdGhlIGxvY2sgbGlmdHMgb25seSBvbmNlIHRoZSBsYXN0XG4gICAgLy8gTW9kYWwgcmVzdG9yZXMvY2xvc2VzLlxuICAgIHRoaXMucGVla0xvY2tDb21wb25lbnQgPSBuZXcgUGVla0xvY2tDb21wb25lbnQodGhpcy5tb2RhbC5hcHApO1xuICAgIHRoaXMucGVla0xvY2tDb21wb25lbnQubG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbGFzaEJhcihiYXJFbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBiYXJFbC5yZW1vdmVDbGFzcyhDc3NDbGFzcy5NaW5pbWl6ZWRNb2RhbEJhckF0dGVudGlvbik7XG4gICAgLy8gRm9yY2UgYSByZWZsb3cgc28gcmUtYWRkaW5nIHRoZSBjbGFzcyByZXN0YXJ0cyB0aGUgb25lLXNob3QgZmxhc2ggb24gcmFwaWQgcmVwZWF0ZWQgYmxvY2tzLlxuICAgIGJhckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGJhckVsLmFkZENsYXNzKENzc0NsYXNzLk1pbmltaXplZE1vZGFsQmFyQXR0ZW50aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlUGVla0xvY2soKTtcbiAgICB0aGlzLnJlbW92ZU1pbmltaXplZEJhcigpO1xuICAgIHRoaXMuaXNNaW5pbWl6ZWRWYWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaE9uQ2xvc2UobW9kYWw6IE1vZGFsKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZVBhdGNoQ29tcG9uZW50LnJlZ2lzdGVyTWV0aG9kUGF0Y2g8TW9kYWwsICdvbkNsb3NlJz4oe1xuICAgICAgbWV0aG9kTmFtZTogJ29uQ2xvc2UnLFxuICAgICAgb2JqOiBtb2RhbCxcbiAgICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2sgfSk6IHZvaWQgPT4ge1xuICAgICAgICBmYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU1pbmltaXplZEJhcigpOiB2b2lkIHtcbiAgICB0aGlzLm1pbmltaXplZEJhckVsPy5yZW1vdmUoKTtcbiAgICB0aGlzLm1pbmltaXplZEJhckVsID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBibG9ja0V2ZW50KGV2dDogRXZlbnQpOiB2b2lkIHtcbiAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgc2lnbmFsQmxvY2tlZEF0dGVtcHQoKTtcbn1cblxuZnVuY3Rpb24gYmxvY2tPckZhbGxiYWNrKG1vZGFsOiBNb2RhbCwgZmFsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgaWYgKHNob3VsZEJsb2NrT3Blbihtb2RhbCkpIHtcbiAgICBzaWduYWxCbG9ja2VkQXR0ZW1wdCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZhbGxiYWNrKCk7XG59XG5cbmZ1bmN0aW9uIGZsYXNoTWluaW1pemVkQmFycygpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBwZWVrTG9ja0VudHJpZXMpIHtcbiAgICBlbnRyeS5mbGFzaCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzTWluaW1pemVkSW5uZXJNb2RhbChtb2RhbDogTW9kYWwpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBwZWVrTG9ja0VudHJpZXMpIHtcbiAgICBpZiAoZW50cnkuaW5uZXJNb2RhbCA9PT0gbW9kYWwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNQZWVrQWxsb3dlZEtleShldnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgLy8gTmF2aWdhdGlvbiBtb3ZlcyB0aGUgY3Vyc29yL3Njcm9sbHMgKGFsbG93ZWQpLCBidXQgU2hpZnQrbmF2aWdhdGlvbiBleHRlbmRzIHRoZSBzZWxlY3Rpb24gKG5vdFxuICAvLyBOZWVkZWQgZm9yIGluc3BlY3Rpb24pLCBzbyBpdCBpcyBibG9ja2VkLiBCYXJlIG1vZGlmaWVyIHByZXNzZXMgcGFzcyB0aHJvdWdoIG9uIHRoZWlyIG93bi5cbiAgaWYgKE5BVklHQVRJT05fS0VZUy5oYXMoZXZ0LmtleSkpIHtcbiAgICByZXR1cm4gIWV2dC5zaGlmdEtleTtcbiAgfVxuXG4gIHJldHVybiBNT0RJRklFUl9LRVlTLmhhcyhldnQua2V5KTtcbn1cblxuZnVuY3Rpb24gaXNQZWVrTG9ja2VkKCk6IGJvb2xlYW4ge1xuICAvLyBEcm9wIGVudHJpZXMgd2hvc2UgYmFyIGhhcyBsZWZ0IHRoZSBET00gd2l0aG91dCBhIHJlc3RvcmUoKSBvciBjbG9zZSgpLlxuICAvLyBBIHRlc3QgdGVhcmRvd24gdGhhdCBlbXB0aWVzIHRoZSBib2R5IGlzIHRoZSB0eXBpY2FsIGNhdXNlOyB0aGlzIGtlZXBzIGEgc3RhbGUgZW50cnkgZnJvbSBsb2NraW5nLlxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBlZWtMb2NrRW50cmllcykge1xuICAgIGlmICghZW50cnkuYmFyRWwuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHBlZWtMb2NrRW50cmllcy5kZWxldGUoZW50cnkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwZWVrTG9ja0VudHJpZXMuc2l6ZSA+IDA7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEJsb2NrT3Blbihtb2RhbDogTW9kYWwpOiBib29sZWFuIHtcbiAgLy8gQSBtb2RhbCdzIG93biByZS1vcGVuIGlzIG5ldmVyIGJsb2NrZWQgXHUyMDE0IG90aGVyd2lzZSBhIG1pbmltaXplZCBtb2RhbCBjb3VsZCBub3QgcmVzdG9yZS9yZS1vcGVuXG4gIC8vIEl0c2VsZi4gRXZlcnkgT1RIRVIgbW9kYWwgb3BlbiBpcyBibG9ja2VkIHdoaWxlIGFueSBtb2RhbCBpcyBtaW5pbWl6ZWQgKHRoZSBwZWVrLW9ubHkgbG9jaykuXG4gIHJldHVybiBpc1BlZWtMb2NrZWQoKSAmJiAhaXNNaW5pbWl6ZWRJbm5lck1vZGFsKG1vZGFsKTtcbn1cblxuZnVuY3Rpb24gc2lnbmFsQmxvY2tlZEF0dGVtcHQoKTogdm9pZCB7XG4gIGZsYXNoTWluaW1pemVkQmFycygpO1xuICBiZWVwZXIuYmVlcCgpO1xufVxuXG5mdW5jdGlvbiBzdXBwcmVzc0tleWRvd25XaGlsZVBlZWtMb2NrZWQoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gIGlmICghaXNQZWVrTG9ja2VkKCkgfHwgaXNQZWVrQWxsb3dlZEtleShldnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYmxvY2tFdmVudChldnQpO1xufVxuXG5mdW5jdGlvbiBzdXBwcmVzc1doaWxlUGVla0xvY2tlZChldnQ6IEV2ZW50KTogdm9pZCB7XG4gIGlmICghaXNQZWVrTG9ja2VkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBibG9ja0V2ZW50KGV2dCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE2Q0Esc0JBR087QUFFUCxvQkFBdUI7QUFDdkIseUNBQXlDO0FBQ3pDLHFDQUFzQztBQUN0Qyx1QkFBeUI7QUFDekIsNEJBQW9DO0FBRXBDLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0sa0JBQWtCO0FBS3hCLE1BQU0sa0JBQWtCLG9CQUFJLElBQVk7QUFBQSxFQUN0QztBQUFBLEVB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
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
* the modal closes (even if it is closed while minimized).
|
|
43
43
|
*/
|
|
44
44
|
import { Modal } from 'obsidian';
|
|
45
|
+
import { MonkeyAroundComponent } from '../components/monkey-around-component.cjs';
|
|
45
46
|
/**
|
|
46
47
|
* Wraps a {@link Modal} instance to make it minimizable to a small floating bar and restorable. While
|
|
47
48
|
* minimized the app is put into a peek-only lock (keyboard, context menu, and opening other modals are
|
|
@@ -60,9 +61,17 @@ export declare class MinimizableModal<TModal extends Modal> {
|
|
|
60
61
|
* @returns `true` if the modal is currently minimized, `false` otherwise.
|
|
61
62
|
*/
|
|
62
63
|
get isMinimized(): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Patches the wrapped modal's `onClose` to run cleanup. Persists for the wrapper's whole life (a
|
|
66
|
+
* modal can be reopened, so the patch must survive each close), hence a dedicated component that is
|
|
67
|
+
* never unloaded — distinct from `peekLockComponent`, whose patches live only while minimized.
|
|
68
|
+
* Exposed to subclasses so they can register additional lifetime-scoped patches on the wrapper.
|
|
69
|
+
*/
|
|
70
|
+
protected readonly closePatchComponent: MonkeyAroundComponent;
|
|
63
71
|
private isMinimizedValue;
|
|
64
72
|
private readonly minimizeButtonEl;
|
|
65
73
|
private minimizedBarEl;
|
|
74
|
+
private peekLockComponent;
|
|
66
75
|
private peekLockEntry;
|
|
67
76
|
/**
|
|
68
77
|
* Wraps the given modal, adding a minimize button and wiring up cleanup on close.
|
|
@@ -130,6 +130,9 @@ __export(obsidian_protocol_handler_registrar_exports, {
|
|
|
130
130
|
module.exports = __toCommonJS(obsidian_protocol_handler_registrar_exports);
|
|
131
131
|
var import_async = require('../async.cjs');
|
|
132
132
|
class PluginObsidianProtocolHandlerRegistrar {
|
|
133
|
+
/**
|
|
134
|
+
* The Obsidian plugin instance the protocol handlers are registered with.
|
|
135
|
+
*/
|
|
133
136
|
plugin;
|
|
134
137
|
/**
|
|
135
138
|
* Creates a new instance of the {@link PluginObsidianProtocolHandlerRegistrar} class.
|
|
@@ -152,4 +155,4 @@ class PluginObsidianProtocolHandlerRegistrar {
|
|
|
152
155
|
0 && (module.exports = {
|
|
153
156
|
PluginObsidianProtocolHandlerRegistrar
|
|
154
157
|
});
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL29ic2lkaWFuLXByb3RvY29sLWhhbmRsZXItcmVnaXN0cmFyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogT2JzaWRpYW4gcHJvdG9jb2wgaGFuZGxlciByZWdpc3RyYXJzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5Qcm90b2NvbERhdGEsXG4gIFBsdWdpblxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBub3JtYWxpemVQcm9taXNhYmxlIH0gZnJvbSAnLi4vYXN5bmMudHMnO1xuXG4vKipcbiAqIEEgcmVnaXN0cmFyIGZvciBPYnNpZGlhbiBwcm90b2NvbCBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhblByb3RvY29sSGFuZGxlclJlZ2lzdHJhciB7XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYW4gT2JzaWRpYW4gcHJvdG9jb2wgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgT2JzaWRpYW4gcHJvdG9jb2wgaGFuZGxlciByZWdpc3RyYXRpb24uXG4gICAqL1xuICByZWdpc3Rlck9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyKHBhcmFtczogT2JzaWRpYW5Qcm90b2NvbEhhbmRsZXJSZWdpc3RyYXJSZWdpc3Rlck9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyUGFyYW1zKTogdm9pZDtcbn1cblxuaW50ZXJmYWNlIE9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyUmVnaXN0cmFyUmVnaXN0ZXJPYnNpZGlhblByb3RvY29sSGFuZGxlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHJlZ2lzdGVyIHRoZSBoYW5kbGVyIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaGFuZGxlciB0byByZWdpc3Rlci5cbiAgICpcbiAgICogQHBhcmFtIG9ic2lkaWFuUHJvdG9jb2xEYXRhIC0gVGhlIGRhdGEgcGFzc2VkIHRvIHRoZSBoYW5kbGVyLlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBoYW5kbGVyLlxuICAgKi9cbiAgaGFuZGxlcih0aGlzOiB2b2lkLCBvYnNpZGlhblByb3RvY29sRGF0YTogT2JzaWRpYW5Qcm90b2NvbERhdGEpOiBQcm9taXNhYmxlPHZvaWQ+
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL29ic2lkaWFuLXByb3RvY29sLWhhbmRsZXItcmVnaXN0cmFyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogT2JzaWRpYW4gcHJvdG9jb2wgaGFuZGxlciByZWdpc3RyYXJzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgT2JzaWRpYW5Qcm90b2NvbERhdGEsXG4gIFBsdWdpblxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBub3JtYWxpemVQcm9taXNhYmxlIH0gZnJvbSAnLi4vYXN5bmMudHMnO1xuXG4vKipcbiAqIEEgcmVnaXN0cmFyIGZvciBPYnNpZGlhbiBwcm90b2NvbCBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNpZGlhblByb3RvY29sSGFuZGxlclJlZ2lzdHJhciB7XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYW4gT2JzaWRpYW4gcHJvdG9jb2wgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgT2JzaWRpYW4gcHJvdG9jb2wgaGFuZGxlciByZWdpc3RyYXRpb24uXG4gICAqL1xuICByZWdpc3Rlck9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyKHBhcmFtczogT2JzaWRpYW5Qcm90b2NvbEhhbmRsZXJSZWdpc3RyYXJSZWdpc3Rlck9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyUGFyYW1zKTogdm9pZDtcbn1cblxuaW50ZXJmYWNlIE9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyUmVnaXN0cmFyUmVnaXN0ZXJPYnNpZGlhblByb3RvY29sSGFuZGxlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHJlZ2lzdGVyIHRoZSBoYW5kbGVyIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaGFuZGxlciB0byByZWdpc3Rlci5cbiAgICpcbiAgICogQHBhcmFtIG9ic2lkaWFuUHJvdG9jb2xEYXRhIC0gVGhlIGRhdGEgcGFzc2VkIHRvIHRoZSBoYW5kbGVyLlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBoYW5kbGVyLlxuICAgKi9cbiAgaGFuZGxlcih0aGlzOiB2b2lkLCBvYnNpZGlhblByb3RvY29sRGF0YTogT2JzaWRpYW5Qcm90b2NvbERhdGEpOiBQcm9taXNhYmxlPHZvaWQ+O1xufVxuXG50eXBlIFBsdWdpbk9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyUmVnaXN0cmFyUmVnaXN0ZXJPYnNpZGlhblByb3RvY29sSGFuZGxlclBhcmFtcyA9IE9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyUmVnaXN0cmFyUmVnaXN0ZXJPYnNpZGlhblByb3RvY29sSGFuZGxlclBhcmFtcztcblxuLyoqXG4gKiBPYnNpZGlhbiBwcm90b2NvbCBoYW5kbGVyIHJlZ2lzdHJhciBpbiBhbiBPYnNpZGlhbiBwbHVnaW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5PYnNpZGlhblByb3RvY29sSGFuZGxlclJlZ2lzdHJhciBpbXBsZW1lbnRzIE9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyUmVnaXN0cmFyIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBwbHVnaW4gaW5zdGFuY2UgdGhlIHByb3RvY29sIGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkIHdpdGguXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luOiBQbHVnaW47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHtAbGluayBQbHVnaW5PYnNpZGlhblByb3RvY29sSGFuZGxlclJlZ2lzdHJhcn0gY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIHJlZ2lzdGVyIHRoZSBwcm90b2NvbCBoYW5kbGVyIHdpdGguXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGx1Z2luOiBQbHVnaW4pIHtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYW4gT2JzaWRpYW4gcHJvdG9jb2wgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgT2JzaWRpYW4gcHJvdG9jb2wgaGFuZGxlciByZWdpc3RyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPYnNpZGlhblByb3RvY29sSGFuZGxlcihwYXJhbXM6IFBsdWdpbk9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyUmVnaXN0cmFyUmVnaXN0ZXJPYnNpZGlhblByb3RvY29sSGFuZGxlclBhcmFtcyk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2luLnJlZ2lzdGVyT2JzaWRpYW5Qcm90b2NvbEhhbmRsZXIocGFyYW1zLmFjdGlvbiwgKG9ic2lkaWFuUHJvdG9jb2xEYXRhKSA9PiBub3JtYWxpemVQcm9taXNhYmxlKHBhcmFtcy5oYW5kbGVyKG9ic2lkaWFuUHJvdG9jb2xEYXRhKSkpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFZQSxtQkFBb0M7QUFrQzdCLE1BQU0sdUNBQW1GO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJM0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPWixZQUFZLFFBQWdCO0FBQ2pDLFNBQUssU0FBUztBQUFBLEVBQ2hCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sZ0NBQWdDLFFBQTJGO0FBQ2hJLFNBQUssT0FBTyxnQ0FBZ0MsT0FBTyxRQUFRLENBQUMsNkJBQXlCLGtDQUFvQixPQUFPLFFBQVEsb0JBQW9CLENBQUMsQ0FBQztBQUFBLEVBQ2hKO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -35,7 +35,10 @@ type PluginObsidianProtocolHandlerRegistrarRegisterObsidianProtocolHandlerParams
|
|
|
35
35
|
* Obsidian protocol handler registrar in an Obsidian plugin.
|
|
36
36
|
*/
|
|
37
37
|
export declare class PluginObsidianProtocolHandlerRegistrar implements ObsidianProtocolHandlerRegistrar {
|
|
38
|
-
|
|
38
|
+
/**
|
|
39
|
+
* The Obsidian plugin instance the protocol handlers are registered with.
|
|
40
|
+
*/
|
|
41
|
+
protected readonly plugin: Plugin;
|
|
39
42
|
/**
|
|
40
43
|
* Creates a new instance of the {@link PluginObsidianProtocolHandlerRegistrar} class.
|
|
41
44
|
*
|