obsidian-dev-utils 101.2.0 → 101.3.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 +6 -0
- package/dist/integration-test-plugin/main.js +14 -4
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/obsidian/css-class.cjs +3 -1
- package/dist/lib/cjs/obsidian/css-class.d.cts +14 -0
- package/dist/lib/cjs/obsidian/modals/modal-command-builder.cjs +13 -5
- package/dist/lib/cjs/obsidian/modals/modal-command-builder.d.cts +5 -1
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/obsidian/css-class.d.mts +14 -0
- package/dist/lib/esm/obsidian/css-class.mjs +3 -1
- package/dist/lib/esm/obsidian/modals/modal-command-builder.d.mts +5 -1
- package/dist/lib/esm/obsidian/modals/modal-command-builder.mjs +13 -5
- package/dist/styles.css +5 -1
- package/package.json +1 -1
|
@@ -86,7 +86,11 @@ class ModalCommandBuilder {
|
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
88
|
},
|
|
89
|
-
initInstruction: (purposeEl, scope) =>
|
|
89
|
+
initInstruction: (purposeEl, scope) => {
|
|
90
|
+
const checkboxEl = purposeEl.createEl("input", { type: "checkbox" });
|
|
91
|
+
addPluginCssClasses(checkboxEl, CssClass.ModalCommandControl);
|
|
92
|
+
return initCheckbox(checkboxEl, scope);
|
|
93
|
+
},
|
|
90
94
|
isDropDown: false,
|
|
91
95
|
purpose: command.purpose,
|
|
92
96
|
registerScope: null
|
|
@@ -120,8 +124,8 @@ class ModalCommandBuilder {
|
|
|
120
124
|
commandText: this.buildCommandText(command),
|
|
121
125
|
initButton: null,
|
|
122
126
|
initInstruction: (purposeEl, scope) => {
|
|
123
|
-
purposeEl.appendText(" ");
|
|
124
127
|
const dropdownComponent = new DropdownComponent(purposeEl);
|
|
128
|
+
addPluginCssClasses(dropdownComponent.selectEl, CssClass.ModalCommandControl);
|
|
125
129
|
command.onInit(dropdownComponent);
|
|
126
130
|
dropdownComponent.onChange((value) => {
|
|
127
131
|
command.onChange(value);
|
|
@@ -327,7 +331,11 @@ class ModalCommandBuilder {
|
|
|
327
331
|
/**
|
|
328
332
|
* Renders an instruction bar of the builder's own, for a host that has none.
|
|
329
333
|
*
|
|
330
|
-
* The markup mirrors what `setInstructions` produces
|
|
334
|
+
* The markup mirrors what `setInstructions` produces — including
|
|
335
|
+
* {@link CssClass.PromptInstructionCommand} on the key hint, which is not decoration: Obsidian's rule
|
|
336
|
+
* for that class is what supplies the hint's bold weight and the `margin-inline-end` separating it
|
|
337
|
+
* from the purpose text. Every class here is unscoped in the app's stylesheet, so all of it reaches a
|
|
338
|
+
* plain {@link Modal} as readily as it reaches the quick switcher.
|
|
331
339
|
*
|
|
332
340
|
* @param containerEl - The element to append the bar to.
|
|
333
341
|
* @param instructions - The instructions to render.
|
|
@@ -338,7 +346,7 @@ class ModalCommandBuilder {
|
|
|
338
346
|
addPluginCssClasses(instructionsEl, CssClass.ModalCommands);
|
|
339
347
|
return instructions.map((instruction) => {
|
|
340
348
|
const instructionEl = instructionsEl.createDiv(CssClass.PromptInstruction);
|
|
341
|
-
instructionEl.createSpan({ text: instruction.command });
|
|
349
|
+
instructionEl.createSpan({ cls: CssClass.PromptInstructionCommand, text: instruction.command });
|
|
342
350
|
return instructionEl.createSpan({ text: instruction.purpose });
|
|
343
351
|
});
|
|
344
352
|
}
|
|
@@ -354,4 +362,4 @@ export {
|
|
|
354
362
|
ModalCommandBuilder,
|
|
355
363
|
ModalCommandsRenderMode
|
|
356
364
|
};
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vZGFscy9tb2RhbC1jb21tYW5kLWJ1aWxkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIGJ1aWxkZXIgZm9yIGEgbW9kYWwncyBjb250cm9sIHN0cmlwLlxuICpcbiAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyfSBhc3NlbWJsZXMgdGhlIHN0cmlwIG9mIGNvbnRyb2xzIHNob3duIGF0IHRoZSBib3R0b20gb2YgYSBtb2RhbDpcbiAqIGtleWJvYXJkLWNvbW1hbmQgaGludHMgKHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmFkZEtleWJvYXJkQ29tbWFuZH0pLCBpbnRlcmFjdGl2ZSBjaGVja2JveGVzIGJvdW5kIHRvXG4gKiBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCAoe0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXIuYWRkQ2hlY2tib3h9KSwgYW5kIGRyb3Bkb3ducyBib3VuZCB0byBhIG1vZGlmaWVyK2tleVxuICogc2hvcnRjdXQgKHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmFkZERyb3BEb3dufSkuIENoYWluIHRoZSBgYWRkKmAgY2FsbHMsIHRoZW4gYXBwbHkgZXZlcnl0aGluZyB0byBhXG4gKiBtb2RhbCB3aXRoIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfTpcbiAqXG4gKiBgYGB0c1xuICogbmV3IE1vZGFsQ29tbWFuZEJ1aWxkZXIoKVxuICogICAuYWRkS2V5Ym9hcmRDb21tYW5kKHsga2V5OiAnRW50ZXInLCBtb2RpZmllcnM6IFsnTW9kJ10sIG9uS2V5LCBwdXJwb3NlOiAndG8gY3JlYXRlJyB9KVxuICogICAuYWRkQ2hlY2tib3goeyBrZXk6ICcxJywgbW9kaWZpZXJzOiBbJ0FsdCddLCBvbkNoYW5nZSwgb25Jbml0LCBwdXJwb3NlOiAnRml4IGZvb3Rub3RlcycgfSlcbiAqICAgLmJ1aWxkKG1vZGFsKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBzdHJpcCBpcyBkZXNjcmliZWQgYnkgdHdvIGluZGVwZW5kZW50IGF4ZXM6XG4gKlxuICogLSAqKldoZXJlIGl0IGlzIGhvc3RlZC4qKiBBIHtAbGluayBTdWdnZXN0TW9kYWx9IGluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnN9IG1vZGVcbiAqICAga2VlcHMgT2JzaWRpYW4ncyBvd24gaW5zdHJ1Y3Rpb24gYmFyIChgc2V0SW5zdHJ1Y3Rpb25zYCArIGBpbnN0cnVjdGlvbnNFbGApLiBFdmVyeSBvdGhlciB0YXJnZXQgXHUyMDE0IGFcbiAqICAgcGxhaW4ge0BsaW5rIE1vZGFsfSwgb3IgYSBiYXJlIHtAbGluayBNb2RhbENvbW1hbmRzSG9zdH0gb2YgYW4gZWxlbWVudCBwbHVzIGEgYFNjb3BlYCBcdTIwMTQgZ2V0cyBhIHN0cmlwXG4gKiAgIGVsZW1lbnQgdGhlIGJ1aWxkZXIgY3JlYXRlcyBpdHNlbGYuXG4gKiAtICoqSG93IGVhY2ggY29udHJvbCBsb29rcy4qKiB7QGxpbmsgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuSW5zdHJ1Y3Rpb25zfSByZW5kZXJzIHRoZSBwdXJwb3NlIHRleHQgd2l0aFxuICogICBhbiBpbmxpbmUgY2hlY2tib3ggb3IgZHJvcGRvd247IHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zfSByZW5kZXJzIG9uZSBjbGlja2FibGUgYnV0dG9uXG4gKiAgIHBlciBjb250cm9sLCBjYXJyeWluZyBpdHMgcHJlc3NlZCBhbmQgZGlzYWJsZWQgc3RhdGUuXG4gKlxuICogVGhlIGF4ZXMgYXJlIGluZGVwZW5kZW50IGJlY2F1c2UgYSBidXR0b24gc3RyaXAgaW5zaWRlIGEge0BsaW5rIFN1Z2dlc3RNb2RhbH0gaXMgYSByZWFsIGNvbWJpbmF0aW9uLlxuICpcbiAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSBhbHdheXMgcmVnaXN0ZXJzIHRoZSBlc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5IGhhbmRsZXJzLCBidXRcbiAqIG9ubHkgcmVuZGVycyB0aGUgY29udHJvbCBVSSBhbmQgcmVnaXN0ZXJzIHRoZSBvcHRpb24tdG9nZ2xlIHNob3J0Y3V0cyB3aGVuXG4gKiB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAgKHRoZSBkZWZhdWx0KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEluc3RydWN0aW9uLFxuICBLZXltYXBDb250ZXh0LFxuICBNb2RhbCxcbiAgTW9kaWZpZXIsXG4gIFNjb3BlLFxuICBTdWdnZXN0TW9kYWxcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBEcm9wZG93bkNvbXBvbmVudCxcbiAgUGxhdGZvcm1cbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcblxuY29uc3QgS0VZU19NQVAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXG4gIFsnRW50ZXInLCAnXHUyMUI1J10sXG4gIFsnVXBEb3duJywgJ1x1MjE5MVx1MjE5MyddXG5dKTtcblxuLyoqXG4gKiBUaGUgd2F5IHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSByZW5kZXJzIGVhY2ggY29udHJvbC5cbiAqL1xuZXhwb3J0IGVudW0gTW9kYWxDb21tYW5kc1JlbmRlck1vZGUge1xuICAvKipcbiAgICogT25lIGNsaWNrYWJsZSBidXR0b24gcGVyIGNvbnRyb2wsIGNhcnJ5aW5nIGl0cyBwcmVzc2VkIChgYXJpYS1wcmVzc2VkYCkgYW5kIGRpc2FibGVkIHN0YXRlLlxuICAgKlxuICAgKiBPbmx5IGNvbnRyb2xzIHJlYWNoYWJsZSBieSBwb2ludGVyIGFyZSByZW5kZXJlZCBcdTIwMTQgY2hlY2tib3hlcywgYW5kIGtleWJvYXJkIGNvbW1hbmRzIHRoYXQgc3VwcGx5XG4gICAqIHtAbGluayBLZXlib2FyZENvbW1hbmQub25BY3RpdmF0ZX0uIEEgaGludC1vbmx5IG9yIGtleWJvYXJkLW9ubHkgY29tbWFuZCBzdGlsbCByZWdpc3RlcnMgaXRzIGhhbmRsZXJcbiAgICogYnV0IHJlbmRlcnMgbm8gYnV0dG9uLCBiZWNhdXNlIGEgYnV0dG9uIG5vYm9keSBjYW4gcHJlc3MgaXMgd29yc2UgdGhhbiBubyBidXR0b24uIEEgZHJvcGRvd24gdGhyb3dzOlxuICAgKiBhIGNvbnRyb2wgdGhhdCBDWUNMRVMgaGFzIG5vIGJ1dHRvbiBmb3JtLlxuICAgKi9cbiAgQnV0dG9ucyA9ICdidXR0b25zJyxcblxuICAvKipcbiAgICogT2JzaWRpYW4ncyBpbnN0cnVjdGlvbi1iYXIgbG9vazogdGhlIHNob3J0Y3V0LCB0aGVuIHRoZSBwdXJwb3NlIHRleHQgd2l0aCBhbiBpbmxpbmUgY2hlY2tib3ggb3JcbiAgICogZHJvcGRvd24uXG4gICAqL1xuICBJbnN0cnVjdGlvbnMgPSAnaW5zdHJ1Y3Rpb25zJ1xufVxuXG4vKipcbiAqIEEgY2hlY2tib3ggY29tbWFuZCBzaG93biBpbiBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBhbmQgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCB0b2dnbGVzXG4gKiBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja2JveENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kQmFzZSB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY2hlY2tib3ggdmFsdWUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIGlzQ2hlY2tlZCAtIFRoZSBuZXcgY2hlY2tlZCBzdGF0ZS5cbiAgICovXG4gIG9uQ2hhbmdlKGlzQ2hlY2tlZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBvbmNlIHdpdGggdGhlIGNyZWF0ZWQgY2hlY2tib3ggZWxlbWVudCwgdG8gaW5pdGlhbGl6ZSBpdHMgc3RhdGUuXG4gICAqXG4gICAqIEluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zfSBtb2RlIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgYnV0IG5ldmVyIGFwcGVuZGVkIFx1MjAxNCB0aGVcbiAgICogYnV0dG9uIGlzIGEgdmlldyBvZiBpdCBcdTIwMTQgc28gdGhlIHNhbWUgaW5pdGlhbGl6YXRpb24gY29kZSBzZXJ2ZXMgYm90aCByZW5kZXIgbW9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjaGVja2JveEVsIC0gVGhlIGNyZWF0ZWQgY2hlY2tib3ggZWxlbWVudC5cbiAgICovXG4gIG9uSW5pdChjaGVja2JveEVsOiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgbWVtYmVycyBldmVyeSBjb21tYW5kIHNoYXJlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kQmFzZSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb250cm9sIGNhbiBiZSB1c2VkIHJpZ2h0IG5vdy4gV2hlbiBpdCByZXR1cm5zIGBmYWxzZWAgdGhlIGNvbnRyb2wgaXMgcmVuZGVyZWRcbiAgICogKipkaXNhYmxlZCByYXRoZXIgdGhhbiByZW1vdmVkKiosIHNvIHRoZSBzdHJpcCBkb2VzIG5vdCByZWZsb3cgdW5kZXIgdGhlIHBvaW50ZXIgYXMgbW9kZXMgY2hhbmdlIFx1MjAxNFxuICAgKiB3aGljaCBvbiBhIHBob25lIG1lYW5zIGEgbWlzLXRhcC5cbiAgICpcbiAgICogUmUtcmVhZCBieSB7QGxpbmsgTW9kYWxDb21tYW5kcy5yZWZyZXNofS4gV2hlbiBvbWl0dGVkLCB0aGUgYnVpbGRlciBuZXZlciB0b3VjaGVzIHRoZSBjb250cm9sJ3NcbiAgICogZGlzYWJsZWQgc3RhdGUsIGxlYXZpbmcgd2hhdGV2ZXIge0BsaW5rIENoZWNrYm94Q29tbWFuZC5vbkluaXR9IC8ge0BsaW5rIERyb3BEb3duQ29tbWFuZC5vbkluaXR9IHNldC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29udHJvbCBjYW4gYmUgdXNlZCByaWdodCBub3cuXG4gICAqL1xuICBjaGVja0lzQXZhaWxhYmxlPyh0aGlzOiB2b2lkKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGtleSB0aGF0IGFjdGl2YXRlcyB0aGUgY29tbWFuZC5cbiAgICovXG4gIGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXJzIGNvbWJpbmVkIHdpdGgge0BsaW5rIENvbW1hbmRCYXNlLmtleX0uIFdoZW4gb21pdHRlZCwgbm8gbW9kaWZpZXJzIGFyZSByZXF1aXJlZC5cbiAgICovXG4gIG1vZGlmaWVycz86IE1vZGlmaWVyW107XG5cbiAgLyoqXG4gICAqIFRoZSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBzaG93biBuZXh0IHRvIHRoZSBjb250cm9sLlxuICAgKi9cbiAgcHVycG9zZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgZHJvcGRvd24gY29tbWFuZCBzaG93biBpbiBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBhbmQgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCBjeWNsZXNcbiAqIHRocm91Z2ggaXRzIG9wdGlvbnMuXG4gKlxuICogU3VwcG9ydGVkIGluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnN9IG1vZGUgb25seS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcm9wRG93bkNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kQmFzZSB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZHJvcGRvd24gdmFsdWUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG5ld2x5IHNlbGVjdGVkIHZhbHVlLlxuICAgKi9cbiAgb25DaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBvbmNlIHdpdGggdGhlIGNyZWF0ZWQgZHJvcGRvd24gY29tcG9uZW50LCB0byBpbml0aWFsaXplIGl0cyBvcHRpb25zIGFuZCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGRyb3Bkb3duQ29tcG9uZW50IC0gVGhlIGNyZWF0ZWQgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgb25Jbml0KGRyb3Bkb3duQ29tcG9uZW50OiBEcm9wZG93bkNvbXBvbmVudCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQSBrZXlib2FyZCBjb21tYW5kIHNob3duIGluIGEgbW9kYWwncyBjb250cm9sIHN0cmlwIGFuZCBvcHRpb25hbGx5IGJvdW5kIHRvIGEgbW9kaWZpZXIra2V5IGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5Ym9hcmRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZEJhc2Uge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgY29tbWFuZCByZWFkcyBhcyBPTi4gU3VwcGx5IGl0IGZvciBhIHRvZ2dsZSB3aG9zZSBzdGF0ZSBsaXZlcyBvdXRzaWRlIHRoZSBzdHJpcDsgb21pdCBpdFxuICAgKiBmb3IgYW4gYWN0aW9uLCB3aGljaCBkb2VzIHNvbWV0aGluZyBhbmQgaXMgZG9uZS4gQSB7QGxpbmsgQ2hlY2tib3hDb21tYW5kfSBuZWVkcyBubyBlcXVpdmFsZW50IFx1MjAxNCBpdHNcbiAgICogY2hlY2tib3ggZWxlbWVudCBpcyB0aGUgc3RhdGUuXG4gICAqXG4gICAqIFJlLXJlYWQgYnkge0BsaW5rIE1vZGFsQ29tbWFuZHMucmVmcmVzaH0uXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgcmVhZHMgYXMgT04uXG4gICAqL1xuICBjaGVja0lzT24/KHRoaXM6IHZvaWQpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9pbnRlciByb3V0ZSBpbnRvIHRoZSBzYW1lIGhhbmRsZXIgdGhlIHNob3J0Y3V0IHJ1bnMuIFJlcXVpcmVkIGZvciB0aGUgY29tbWFuZCB0byByZW5kZXIgYVxuICAgKiBidXR0b24gaW4ge0BsaW5rIE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkJ1dHRvbnN9IG1vZGUgXHUyMDE0IG9uIGEgcGhvbmUgdGhlcmUgaXMgbm8gbW9kaWZpZXIga2V5IHRvXG4gICAqIHByZXNzLCBzbyB0aGlzIGlzIHRoZSBvbmx5IHdheSBpbi5cbiAgICpcbiAgICogQHBhcmFtICRldmVudCAtIFRoZSBjbGljayBldmVudCwgc28gYSBjb21tYW5kIHRoYXQgcGlja3Mgc29tZXRoaW5nIGhhcyBvbmUgdG8gaGFuZCBvbi5cbiAgICovXG4gIG9uQWN0aXZhdGU/KHRoaXM6IHZvaWQsICRldmVudDogTW91c2VFdmVudCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBoYW5kbGVyIGludm9rZWQgd2hlbiB0aGUgc2hvcnRjdXQgaXMgcHJlc3NlZC4gV2hlbiBvbWl0dGVkLCB0aGUgY29tbWFuZCBpcyBhIGhpbnQgb25seSBhbmQgbm9cbiAgICogc2NvcGUgaGFuZGxlciBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gJGV2ZW50IC0gVGhlIGtleWJvYXJkIGV2ZW50LlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBrZXltYXAgY29udGV4dC5cbiAgICogQHJldHVybnMgYGZhbHNlYCB0byBwcmV2ZW50IE9ic2lkaWFuJ3MgZGVmYXVsdCBoYW5kbGluZywgb3IgYHZvaWRgL2B0cnVlYCBvdGhlcndpc2UuXG4gICAqL1xuICBvbktleT8oJGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb250ZXh0OiBLZXltYXBDb250ZXh0KTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgd2F5IGVhY2ggY29udHJvbCBpcyByZW5kZXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkluc3RydWN0aW9uc31cbiAgICovXG4gIHJlYWRvbmx5IHJlbmRlck1vZGU/OiBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW5kZXIgdGhlIGNvbnRyb2wgc3RyaXAgKGNoZWNrYm94ZXMsIGRyb3Bkb3ducywga2V5Ym9hcmQgaGludHMpIGFuZCByZWdpc3RlciB0aGVcbiAgICogb3B0aW9uLXRvZ2dsZSBrZXlib2FyZCBzaG9ydGN1dHMuIFdoZW4gYGZhbHNlYCwgbm8gY29udHJvbCBVSSBpcyBzaG93biBhbmQgdGhlIG9wdGlvbi10b2dnbGVcbiAgICogc2hvcnRjdXRzIGFyZSBub3QgcmVnaXN0ZXJlZDsgb25seSB0aGUgZXNzZW50aWFsIG5hdmlnYXRpb24ga2V5IGhhbmRsZXJzIHJlbWFpbiBhY3RpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0luc3RydWN0aW9ucz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGhhbmRsZSByZXR1cm5lZCBieSB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kcyB7XG4gIC8qKlxuICAgKiBCcmluZ3MgZXZlcnkgcmVuZGVyZWQgY29udHJvbCdzIGRpc2FibGVkIGFuZCBwcmVzc2VkIHN0YXRlIHVwIHRvIGRhdGUsIGJ5IHJlLXJlYWRpbmdcbiAgICoge0BsaW5rIENvbW1hbmRCYXNlLmNoZWNrSXNBdmFpbGFibGV9IGFuZCB7QGxpbmsgS2V5Ym9hcmRDb21tYW5kLmNoZWNrSXNPbn0uXG4gICAqXG4gICAqIFRoZSBzdHJpcCBpcyBidWlsdCBvbmNlIGFuZCBvbmx5IHJlLXN0YXRlZCBhZnRlcndhcmRzLCBiZWNhdXNlIHJlYnVpbGRpbmcgaXQgd291bGQgcmVwbGFjZSBhbiBlbGVtZW50XG4gICAqIHRoZSBwb2ludGVyIG1heSBiZSBhYm91dCB0byBjbGljay5cbiAgICovXG4gIHJlZnJlc2goKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBIGJhcmUgaG9zdCBmb3IgYSBjb250cm9sIHN0cmlwOiB0aGUgZWxlbWVudCB0byByZW5kZXIgaW50bywgcGx1cyB0aGUgc2NvcGUgdG8gcmVnaXN0ZXIgc2hvcnRjdXRzIHdpdGguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kc0hvc3Qge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhlIGNvbnRyb2wgc3RyaXAgaXMgYXBwZW5kZWQgdG8uXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJFbDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzY29wZSB0aGUgc2hvcnRjdXRzIGFyZSByZWdpc3RlcmVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBzY29wZTogU2NvcGU7XG59XG5cbi8qKlxuICogRXZlcnkgdGFyZ2V0IHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSBhY2NlcHRzLlxuICovXG5leHBvcnQgdHlwZSBNb2RhbENvbW1hbmRzVGFyZ2V0ID0gTW9kYWwgfCBNb2RhbENvbW1hbmRzSG9zdCB8IFN1Z2dlc3RNb2RhbDx1bmtub3duPjtcblxuLyoqXG4gKiBPbmUgYWNjdW11bGF0ZWQgY29tbWFuZCwgcmVkdWNlZCB0byB0aGUgaGFuZGZ1bCBvZiB0aGluZ3MgYm90aCByZW5kZXJlcnMgbmVlZC5cbiAqXG4gKiBPcHRpb25hbCBjb2xsYWJvcmF0b3JzIGFyZSBgbnVsbCB8IFhgIHJlcXVpcmVkIGZpZWxkcyByYXRoZXIgdGhhbiBgP2AsIHNvIGV2ZXJ5IGNvbnN0cnVjdGlvbiBzaXRlIGhhcyB0b1xuICogc2F5IHdoaWNoIG9uZXMgaXQgaGFzLlxuICovXG4vKipcbiAqIE9uZSBjb250cm9sIHJlbmRlcmVkIGFzIGEgQlVUVE9OLlxuICpcbiAqIEl0IHJlcG9ydHMgaXRzIG93biBwcmVzc2VkIHN0YXRlLCBiZWNhdXNlIG9ubHkgdGhlIGJ1dHRvbiByZW5kZXJlciBoYXMgYW55d2hlcmUgdG8gc2hvdyBvbmUuXG4gKi9cbmludGVyZmFjZSBCdXR0b25Db250cm9sIHtcbiAgY2hlY2tJc09uKHRoaXM6IHZvaWQpOiBib29sZWFuO1xuICBzZXREaXNhYmxlZCh0aGlzOiB2b2lkLCBpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZDtcbn1cblxuaW50ZXJmYWNlIENvbW1hbmRFbnRyeSB7XG4gIHJlYWRvbmx5IGNoZWNrSXNBdmFpbGFibGU6ICgodGhpczogdm9pZCkgPT4gYm9vbGVhbikgfCBudWxsO1xuICByZWFkb25seSBjb21tYW5kVGV4dDogc3RyaW5nO1xuICByZWFkb25seSBpbml0QnV0dG9uOiAoKGJ1dHRvbkVsOiBIVE1MQnV0dG9uRWxlbWVudCwgc2NvcGU6IFNjb3BlKSA9PiBCdXR0b25Db250cm9sKSB8IG51bGw7XG4gIHJlYWRvbmx5IGluaXRJbnN0cnVjdGlvbjogKChwdXJwb3NlRWw6IEhUTUxTcGFuRWxlbWVudCwgc2NvcGU6IFNjb3BlKSA9PiBJbnN0cnVjdGlvbkNvbnRyb2wpIHwgbnVsbDtcbiAgcmVhZG9ubHkgaXNEcm9wRG93bjogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcHVycG9zZTogc3RyaW5nO1xuICByZWFkb25seSByZWdpc3RlclNjb3BlOiAoKHNjb3BlOiBTY29wZSkgPT4gdm9pZCkgfCBudWxsO1xufVxuXG4vKipcbiAqIE9uZSBjb250cm9sIHJlbmRlcmVkIGludG8gYW4gSU5TVFJVQ1RJT04gYmFyLlxuICpcbiAqIFRoZXJlIGlzIGRlbGliZXJhdGVseSBubyBwcmVzc2VkIHN0YXRlIGhlcmU6IHRoZSBjb250cm9sIFx1MjAxNCBhIGNoZWNrYm94LCBhIGRyb3Bkb3duIFx1MjAxNCBzaG93cyBpdHMgb3duLFxuICogc28gYSBzZWNvbmQgY29weSB3b3VsZCBvbmx5IGJlIGEgc2Vjb25kIHRoaW5nIHRvIGtlZXAgaW4gc3luYy5cbiAqL1xuaW50ZXJmYWNlIEluc3RydWN0aW9uQ29udHJvbCB7XG4gIHNldERpc2FibGVkKHRoaXM6IHZvaWQsIGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgSW5zdHJ1Y3Rpb25FeCBleHRlbmRzIEluc3RydWN0aW9uIHtcbiAgcmVhZG9ubHkgZW50cnk6IENvbW1hbmRFbnRyeTtcbn1cblxuLyoqXG4gKiBSZS1zdGF0ZXMgb25lIHJlbmRlcmVkIGNvbnRyb2wsIGFscmVhZHkgYm91bmQgdG8gaXRzIG93biBlbGVtZW50cy5cbiAqL1xudHlwZSBSZWZyZXNoQ29udHJvbCA9ICh0aGlzOiB2b2lkKSA9PiB2b2lkO1xuXG5jb25zdCBOT09QX01PREFMX0NPTU1BTkRTOiBNb2RhbENvbW1hbmRzID0ge1xuICByZWZyZXNoOiAoKTogdm9pZCA9PiB7XG4gICAgLy8gTm90aGluZyB3YXMgcmVuZGVyZWQsIHNvIHRoZXJlIGlzIG5vIHN0YXRlIHRvIHJlLXN0YXRlLlxuICB9XG59O1xuXG4vKipcbiAqIEJ1aWxkcyBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBmcm9tIGtleWJvYXJkIGNvbW1hbmRzLCBpbnRlcmFjdGl2ZSBjaGVja2JveGVzLCBhbmQgZHJvcGRvd25zLCB0aGVuXG4gKiBhcHBsaWVzIHRoZW0gdG8gYSBtb2RhbCB2aWEge0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXIuYnVpbGR9LlxuICovXG5leHBvcnQgY2xhc3MgTW9kYWxDb21tYW5kQnVpbGRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cmllczogQ29tbWFuZEVudHJ5W10gPSBbXTtcblxuICAvKipcbiAgICogQWRkcyBhbiBpbnRlcmFjdGl2ZSBjaGVja2JveCB0byB0aGUgY29udHJvbCBzdHJpcCwgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCB0b2dnbGVzIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjaGVja2JveCBjb21tYW5kIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgKi9cbiAgcHVibGljIGFkZENoZWNrYm94KGNvbW1hbmQ6IENoZWNrYm94Q29tbWFuZCk6IHRoaXMge1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIGNoZWNrSXNBdmFpbGFibGU6IGNvbW1hbmQuY2hlY2tJc0F2YWlsYWJsZSA/PyBudWxsLFxuICAgICAgY29tbWFuZFRleHQ6IHRoaXMuYnVpbGRDb21tYW5kVGV4dChjb21tYW5kKSxcbiAgICAgIGluaXRCdXR0b246IChidXR0b25FbDogSFRNTEJ1dHRvbkVsZW1lbnQsIHNjb3BlOiBTY29wZSk6IEJ1dHRvbkNvbnRyb2wgPT4ge1xuICAgICAgICAvLyBDcmVhdGVkIGJ1dCBuZXZlciBhcHBlbmRlZDogdGhlIGNoZWNrYm94IGhvbGRzIHRoZSBzdGF0ZSBhbmQgdGhlIGJ1dHRvbiBpcyBhIHZpZXcgb2YgaXQsIHNvXG4gICAgICAgIC8vIGBvbkluaXRgIC8gYG9uQ2hhbmdlYCBtZWFuIGV4YWN0bHkgdGhlIHNhbWUgdGhpbmcgaW4gYm90aCByZW5kZXIgbW9kZXMuXG4gICAgICAgIGNvbnN0IGNoZWNrYm94RWwgPSBjcmVhdGVFbCgnaW5wdXQnLCB7IHR5cGU6ICdjaGVja2JveCcgfSk7XG4gICAgICAgIGluaXRDaGVja2JveChjaGVja2JveEVsLCBzY29wZSk7XG4gICAgICAgIGJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIHRvZ2dsZUNoZWNrYm94KGNoZWNrYm94RWwpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGVja0lzT246ICgpOiBib29sZWFuID0+IGNoZWNrYm94RWwuY2hlY2tlZCxcbiAgICAgICAgICBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGNoZWNrYm94RWwuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICAgICAgYnV0dG9uRWwuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBpbml0SW5zdHJ1Y3Rpb246IChwdXJwb3NlRWw6IEhUTUxTcGFuRWxlbWVudCwgc2NvcGU6IFNjb3BlKTogSW5zdHJ1Y3Rpb25Db250cm9sID0+IGluaXRDaGVja2JveChwdXJwb3NlRWwuY3JlYXRlRWwoJ2lucHV0JywgeyB0eXBlOiAnY2hlY2tib3gnIH0pLCBzY29wZSksXG4gICAgICBpc0Ryb3BEb3duOiBmYWxzZSxcbiAgICAgIHB1cnBvc2U6IGNvbW1hbmQucHVycG9zZSxcbiAgICAgIHJlZ2lzdGVyU2NvcGU6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcblxuICAgIGZ1bmN0aW9uIGluaXRDaGVja2JveChjaGVja2JveEVsOiBIVE1MSW5wdXRFbGVtZW50LCBzY29wZTogU2NvcGUpOiBJbnN0cnVjdGlvbkNvbnRyb2wge1xuICAgICAgY29tbWFuZC5vbkluaXQoY2hlY2tib3hFbCk7XG4gICAgICBjaGVja2JveEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgY29tbWFuZC5vbkNoYW5nZShjaGVja2JveEVsLmNoZWNrZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLnJlZ2lzdGVyKGNvbW1hbmQubW9kaWZpZXJzID8/IFtdLCBjb21tYW5kLmtleSwgKCkgPT4ge1xuICAgICAgICB0b2dnbGVDaGVja2JveChjaGVja2JveEVsKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICBjaGVja2JveEVsLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGRyb3Bkb3duIHRvIHRoZSBjb250cm9sIHN0cmlwLCBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCB0aGF0IGN5Y2xlcyB0aHJvdWdoIGl0c1xuICAgKiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBkcm9wZG93biBjb21tYW5kIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgKi9cbiAgcHVibGljIGFkZERyb3BEb3duKGNvbW1hbmQ6IERyb3BEb3duQ29tbWFuZCk6IHRoaXMge1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIGNoZWNrSXNBdmFpbGFibGU6IGNvbW1hbmQuY2hlY2tJc0F2YWlsYWJsZSA/PyBudWxsLFxuICAgICAgY29tbWFuZFRleHQ6IHRoaXMuYnVpbGRDb21tYW5kVGV4dChjb21tYW5kKSxcbiAgICAgIGluaXRCdXR0b246IG51bGwsXG4gICAgICBpbml0SW5zdHJ1Y3Rpb246IChwdXJwb3NlRWw6IEhUTUxTcGFuRWxlbWVudCwgc2NvcGU6IFNjb3BlKTogSW5zdHJ1Y3Rpb25Db250cm9sID0+IHtcbiAgICAgICAgcHVycG9zZUVsLmFwcGVuZFRleHQoJyAnKTtcbiAgICAgICAgY29uc3QgZHJvcGRvd25Db21wb25lbnQgPSBuZXcgRHJvcGRvd25Db21wb25lbnQocHVycG9zZUVsKTtcbiAgICAgICAgY29tbWFuZC5vbkluaXQoZHJvcGRvd25Db21wb25lbnQpO1xuICAgICAgICBkcm9wZG93bkNvbXBvbmVudC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBjb21tYW5kLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIGRlZmVuc2l2ZSA/PyBvbiBvcHRpb25hbCBtb2RpZmllcnMuICovXG4gICAgICAgIHNjb3BlLnJlZ2lzdGVyKGNvbW1hbmQubW9kaWZpZXJzID8/IFtdLCBjb21tYW5kLmtleSwgKCkgPT4ge1xuICAgICAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgaWYgKGRyb3Bkb3duQ29tcG9uZW50LmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNlbGVjdEVsID0gZHJvcGRvd25Db21wb25lbnQuc2VsZWN0RWw7XG4gICAgICAgICAgc2VsZWN0RWwuc2VsZWN0ZWRJbmRleCA9IChzZWxlY3RFbC5zZWxlY3RlZEluZGV4ICsgMSkgJSBzZWxlY3RFbC5vcHRpb25zLmxlbmd0aDtcbiAgICAgICAgICBzZWxlY3RFbC50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGRyb3Bkb3duQ29tcG9uZW50LnNldERpc2FibGVkKGlzRGlzYWJsZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBpc0Ryb3BEb3duOiB0cnVlLFxuICAgICAgcHVycG9zZTogY29tbWFuZC5wdXJwb3NlLFxuICAgICAgcmVnaXN0ZXJTY29wZTogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBrZXlib2FyZCBjb21tYW5kIHRvIHRoZSBjb250cm9sIHN0cmlwLiBXaGVuIHtAbGluayBLZXlib2FyZENvbW1hbmQub25LZXl9IGlzIHByb3ZpZGVkLCBpdHNcbiAgICogaGFuZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIG1vZGFsIHNjb3BlOyBvdGhlcndpc2UgdGhlIGNvbW1hbmQgaXMgYSBoaW50IG9ubHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGtleWJvYXJkIGNvbW1hbmQgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYnVpbGRlciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICBwdWJsaWMgYWRkS2V5Ym9hcmRDb21tYW5kKGNvbW1hbmQ6IEtleWJvYXJkQ29tbWFuZCk6IHRoaXMge1xuICAgIGNvbnN0IGNoZWNrSXNPbiA9IGNvbW1hbmQuY2hlY2tJc09uID8/ICgoKTogYm9vbGVhbiA9PiBmYWxzZSk7XG4gICAgY29uc3Qgb25BY3RpdmF0ZSA9IGNvbW1hbmQub25BY3RpdmF0ZSA/PyBudWxsO1xuICAgIGNvbnN0IG9uS2V5ID0gY29tbWFuZC5vbktleT8uYmluZChjb21tYW5kKSA/PyBudWxsO1xuXG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe1xuICAgICAgY2hlY2tJc0F2YWlsYWJsZTogY29tbWFuZC5jaGVja0lzQXZhaWxhYmxlID8/IG51bGwsXG4gICAgICBjb21tYW5kVGV4dDogdGhpcy5idWlsZENvbW1hbmRUZXh0KGNvbW1hbmQpLFxuICAgICAgaW5pdEJ1dHRvbjogb25BY3RpdmF0ZVxuICAgICAgICAvLyBObyBkaXNhYmxlZCBndWFyZCBvbiB0aGUgbGlzdGVuZXI6IGEgZGlzYWJsZWQgYnV0dG9uIGZpcmVzIG5vIGNsaWNrIGF0IGFsbCwgc28gYHNldERpc2FibGVkYFxuICAgICAgICAvLyBCZWxvdyBpcyB0aGUgd2hvbGUgZ2F0ZS5cbiAgICAgICAgPyAoYnV0dG9uRWw6IEhUTUxCdXR0b25FbGVtZW50KTogQnV0dG9uQ29udHJvbCA9PiB7XG4gICAgICAgICAgYnV0dG9uRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBvbkFjdGl2YXRlKCRldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoZWNrSXNPbixcbiAgICAgICAgICAgIHNldERpc2FibGVkOiAoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBidXR0b25FbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICBpbml0SW5zdHJ1Y3Rpb246IG51bGwsXG4gICAgICBpc0Ryb3BEb3duOiBmYWxzZSxcbiAgICAgIHB1cnBvc2U6IGNvbW1hbmQucHVycG9zZSxcbiAgICAgIHJlZ2lzdGVyU2NvcGU6IG9uS2V5XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBkZWZlbnNpdmUgPz8gb24gb3B0aW9uYWwgbW9kaWZpZXJzLiAqL1xuICAgICAgICA/IChzY29wZTogU2NvcGUpOiB2b2lkID0+IHtcbiAgICAgICAgICBzY29wZS5yZWdpc3Rlcihjb21tYW5kLm1vZGlmaWVycyA/PyBbXSwgY29tbWFuZC5rZXksIG9uS2V5KTtcbiAgICAgICAgfVxuICAgICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBhY2N1bXVsYXRlZCBjb21tYW5kcyB0byBhIG1vZGFsLiBBbHdheXMgcmVnaXN0ZXJzIHRoZSBlc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5XG4gICAqIGhhbmRsZXJzOyBvbmx5IHJlbmRlcnMgdGhlIGNvbnRyb2wgc3RyaXAgYW5kIHJlZ2lzdGVycyB0aGUgb3B0aW9uLXRvZ2dsZSBzaG9ydGN1dHMgd2hlblxuICAgKiB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgbW9kYWwsIG9yIHRoZSBiYXJlIGVsZW1lbnQgKyBzY29wZSwgdG8gYXBwbHkgdGhlIGNvbW1hbmRzIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBidWlsZCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBBIGhhbmRsZSB3aG9zZSB7QGxpbmsgTW9kYWxDb21tYW5kcy5yZWZyZXNofSByZS1zdGF0ZXMgZXZlcnkgcmVuZGVyZWQgY29udHJvbC5cbiAgICovXG4gIHB1YmxpYyBidWlsZCh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQsIG9wdGlvbnM6IE1vZGFsQ29tbWFuZEJ1aWxkZXJCdWlsZE9wdGlvbnMgPSB7fSk6IE1vZGFsQ29tbWFuZHMge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlbmRlck1vZGUgPSBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnMsXG4gICAgICBzaG91bGRTaG93SW5zdHJ1Y3Rpb25zID0gdHJ1ZVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3Qgc2NvcGUgPSB0YXJnZXQuc2NvcGU7XG5cbiAgICAvLyBFc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5IGhhbmRsZXJzIG11c3Qgc3RheSBhY3RpdmUgZXZlbiB3aGVuIHRoZSBjb250cm9sIHN0cmlwIGlzIGhpZGRlbi5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgZW50cnkucmVnaXN0ZXJTY29wZT8uKHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoIXNob3VsZFNob3dJbnN0cnVjdGlvbnMpIHtcbiAgICAgIHJldHVybiBOT09QX01PREFMX0NPTU1BTkRTO1xuICAgIH1cblxuICAgIC8vIEVhY2ggcmVuZGVyZXIgaGFuZHMgYmFjayBvbmUgY2xvc3VyZSBwZXIgY29udHJvbCBpdCBhY3R1YWxseSBkcmV3LCBhbHJlYWR5IGJvdW5kIHRvIHRoYXQgY29udHJvbCdzXG4gICAgLy8gRWxlbWVudHMgXHUyMDE0IHNvIGByZWZyZXNoYCBuZXZlciBoYXMgdG8ga25vdyB3aGljaCBvZiB0aGUgdHdvIHNoYXBlcyBpdCBpcyByZS1zdGF0aW5nLlxuICAgIGNvbnN0IHJlZnJlc2hlcnMgPSByZW5kZXJNb2RlID09PSBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zXG4gICAgICA/IHRoaXMucmVuZGVyQnV0dG9ucyh0YXJnZXQsIHNjb3BlKVxuICAgICAgOiB0aGlzLnJlbmRlckluc3RydWN0aW9ucyh0YXJnZXQsIHNjb3BlKTtcblxuICAgIGNvbnN0IG1vZGFsQ29tbWFuZHM6IE1vZGFsQ29tbWFuZHMgPSB7XG4gICAgICByZWZyZXNoOiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgcmVmcmVzaENvbnRyb2wgb2YgcmVmcmVzaGVycykge1xuICAgICAgICAgIHJlZnJlc2hDb250cm9sKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIG1vZGFsQ29tbWFuZHMucmVmcmVzaCgpO1xuICAgIHJldHVybiBtb2RhbENvbW1hbmRzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbW1hbmRUZXh0KGNvbW1hbmQ6IENvbW1hbmRCYXNlKTogc3RyaW5nIHtcbiAgICBsZXQgY29tbWFuZFRleHQgPSBLRVlTX01BUC5nZXQoY29tbWFuZC5rZXkpID8/IGNvbW1hbmQua2V5O1xuXG4gICAgZm9yIChjb25zdCBtb2RpZmllciBvZiBjb21tYW5kLm1vZGlmaWVycyA/PyBbXSkge1xuICAgICAgY29tbWFuZFRleHQgPSBgJHt0aGlzLmdldE1vZGlmaWVyU3RyaW5nKG1vZGlmaWVyKX0gJHtjb21tYW5kVGV4dH1gO1xuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kVGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kaWZpZXJTdHJpbmcobW9kaWZpZXI6IE1vZGlmaWVyKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICBjYXNlICdBbHQnOiB7XG4gICAgICAgIHJldHVybiAnYWx0JztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0N0cmwnOiB7XG4gICAgICAgIHJldHVybiAnY3RybCc7XG4gICAgICB9XG4gICAgICBjYXNlICdNZXRhJzoge1xuICAgICAgICByZXR1cm4gUGxhdGZvcm0uaXNNYWNPUyA/ICdjbWQnIDogJ3dpbic7XG4gICAgICB9XG4gICAgICBjYXNlICdNb2QnOiB7XG4gICAgICAgIHJldHVybiBQbGF0Zm9ybS5pc01hY09TID8gJ2NtZCcgOiAnY3RybCc7XG4gICAgICB9XG4gICAgICBjYXNlICdTaGlmdCc6IHtcbiAgICAgICAgcmV0dXJuICdzaGlmdCc7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiBtb2RpZmllcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIGVsZW1lbnQgYSBzZWxmLWNyZWF0ZWQgc3RyaXAgaXMgYXBwZW5kZWQgdG8uXG4gICAqXG4gICAqIEEge0BsaW5rIE1vZGFsfSBjYXJyaWVzIGJvdGggYG1vZGFsRWxgIGFuZCBhIGBjb250YWluZXJFbGAgdGhhdCBpcyB0aGUgT1VURVIgYC5tb2RhbC1jb250YWluZXJgLCBzb1xuICAgKiBgbW9kYWxFbGAgaGFzIHRvIHdpbiBcdTIwMTQgb3RoZXJ3aXNlIHRoZSBzdHJpcCBsYW5kcyBvdXRzaWRlIHRoZSBtb2RhbCBmcmFtZS4gRGlzY3JpbWluYXRlZCB3aXRoIGBpbmBcbiAgICogcmF0aGVyIHRoYW4gYSBwcm9wZXJ0eSByZWFkLCBiZWNhdXNlIHRlc3RzIGhhbmQgYGJ1aWxkYCBhIGBzdHJpY3RQcm94eWAgbW9jayB3aG9zZSBgZ2V0YCB0cmFwIHRocm93c1xuICAgKiBvbiB1bm1vY2tlZCBtZW1iZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIGJ1aWxkIHRhcmdldC5cbiAgICogQHJldHVybnMgVGhlIGVsZW1lbnQgdG8gYXBwZW5kIHRoZSBzdHJpcCB0by5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3RyaXBDb250YWluZXJFbCh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuICdtb2RhbEVsJyBpbiB0YXJnZXQgPyB0YXJnZXQubW9kYWxFbCA6IHRhcmdldC5jb250YWluZXJFbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQnV0dG9ucyh0YXJnZXQ6IE1vZGFsQ29tbWFuZHNUYXJnZXQsIHNjb3BlOiBTY29wZSk6IFJlZnJlc2hDb250cm9sW10ge1xuICAgIGNvbnN0IHN0cmlwRWwgPSB0aGlzLmdldFN0cmlwQ29udGFpbmVyRWwodGFyZ2V0KS5jcmVhdGVEaXYoKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKHN0cmlwRWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZHMpO1xuXG4gICAgY29uc3QgcmVmcmVzaGVyczogUmVmcmVzaENvbnRyb2xbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGlmIChlbnRyeS5pc0Ryb3BEb3duKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlbmRlciBkcm9wZG93biBjb21tYW5kIFwiJHtlbnRyeS5wdXJwb3NlfVwiIGFzIGEgYnV0dG9uOiBhIGNvbnRyb2wgdGhhdCBjeWNsZXMgaGFzIG5vIGJ1dHRvbiBmb3JtLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVudHJ5LmluaXRCdXR0b24pIHtcbiAgICAgICAgLy8gSGludC1vbmx5IGFuZCBrZXlib2FyZC1vbmx5IGNvbW1hbmRzIGhhdmUgbm8gcG9pbnRlciByb3V0ZSwgYW5kIGEgYnV0dG9uIG5vYm9keSBjYW4gcHJlc3MgaXNcbiAgICAgICAgLy8gV29yc2UgdGhhbiBubyBidXR0b24uIFRoZWlyIHNjb3BlIGhhbmRsZXJzIGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBidXR0b25FbCA9IHN0cmlwRWwuY3JlYXRlRWwoJ2J1dHRvbicsIHsgdHlwZTogJ2J1dHRvbicgfSk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGJ1dHRvbkVsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmQpO1xuICAgICAgYnV0dG9uRWwuY3JlYXRlU3Bhbih7IHRleHQ6IGVudHJ5LnB1cnBvc2UgfSk7XG5cbiAgICAgIC8vIFRoZSBob3RrZXkgaXMgc2hvd24gb25seSB3aGVyZSBvbmUgY2FuIGJlIHByZXNzZWQuIE9uIGEgcGhvbmUgdGhlcmUgaXMgbm8gbW9kaWZpZXIga2V5IHRvIG9mZmVyLFxuICAgICAgLy8gQW5kIHRoZSBidXR0b24gSVMgdGhlIG9ubHkgd2F5IGluIFx1MjAxNCB3aGljaCBpcyB3aHkgdGhlIHN0cmlwIGV4aXN0cy5cbiAgICAgIGlmICghUGxhdGZvcm0uaXNNb2JpbGUpIHtcbiAgICAgICAgY29uc3QgaG90a2V5RWwgPSBidXR0b25FbC5jcmVhdGVTcGFuKHsgdGV4dDogZW50cnkuY29tbWFuZFRleHQgfSk7XG4gICAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoaG90a2V5RWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZEhvdGtleSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBpbnB1dCBrZWVwcyBmb2N1czogYSBtb2RhbCB0aGF0IGZpbHRlcnMgYXMgeW91IHR5cGUgd291bGQgZW5kIGl0cyBzZWFyY2ggbWlkLXdvcmQgaWYgYSBjbGlja1xuICAgICAgLy8gU3RvbGUgZm9jdXMuXG4gICAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGJ1dHRvbkNvbnRyb2wgPSBlbnRyeS5pbml0QnV0dG9uKGJ1dHRvbkVsLCBzY29wZSk7XG4gICAgICBjb25zdCBjaGVja0lzQXZhaWxhYmxlID0gZW50cnkuY2hlY2tJc0F2YWlsYWJsZTtcbiAgICAgIHJlZnJlc2hlcnMucHVzaCgoKSA9PiB7XG4gICAgICAgIGlmIChjaGVja0lzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgYnV0dG9uQ29udHJvbC5zZXREaXNhYmxlZCghY2hlY2tJc0F2YWlsYWJsZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc09uID0gYnV0dG9uQ29udHJvbC5jaGVja0lzT24oKTtcbiAgICAgICAgYnV0dG9uRWwudG9nZ2xlQ2xhc3MoQ3NzQ2xhc3MuSXNBY3RpdmUsIGlzT24pO1xuICAgICAgICBidXR0b25FbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIFN0cmluZyhpc09uKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVmcmVzaGVycztcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVySW5zdHJ1Y3Rpb25zKHRhcmdldDogTW9kYWxDb21tYW5kc1RhcmdldCwgc2NvcGU6IFNjb3BlKTogUmVmcmVzaENvbnRyb2xbXSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10gPSB0aGlzLmVudHJpZXMubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIGNvbW1hbmQ6IGVudHJ5LmNvbW1hbmRUZXh0LFxuICAgICAgZW50cnksXG4gICAgICBwdXJwb3NlOiBlbnRyeS5wdXJwb3NlXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcHVycG9zZUVscyA9ICdzZXRJbnN0cnVjdGlvbnMnIGluIHRhcmdldFxuICAgICAgPyB0aGlzLnJlbmRlck5hdGl2ZUluc3RydWN0aW9ucyh0YXJnZXQsIGluc3RydWN0aW9ucylcbiAgICAgIDogdGhpcy5yZW5kZXJPd25JbnN0cnVjdGlvbnModGhpcy5nZXRTdHJpcENvbnRhaW5lckVsKHRhcmdldCksIGluc3RydWN0aW9ucyk7XG5cbiAgICBjb25zdCByZWZyZXNoZXJzOiBSZWZyZXNoQ29udHJvbFtdID0gW107XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGluc3RydWN0aW9uXSBvZiBpbnN0cnVjdGlvbnMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBwdXJwb3NlRWwgPSBwdXJwb3NlRWxzW2luZGV4XTtcbiAgICAgIC8vIEEgaG9zdCBtYXkgcmVuZGVyIGZld2VyIHB1cnBvc2UgZWxlbWVudHMgdGhhbiB0aGVyZSBhcmUgaW5zdHJ1Y3Rpb25zOyBza2lwIHJhdGhlciB0aGFuIHRocm93LlxuICAgICAgaWYgKCFwdXJwb3NlRWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGluc3RydWN0aW9uQ29udHJvbCA9IGluc3RydWN0aW9uLmVudHJ5LmluaXRJbnN0cnVjdGlvbj8uKHB1cnBvc2VFbCwgc2NvcGUpO1xuICAgICAgY29uc3QgY2hlY2tJc0F2YWlsYWJsZSA9IGluc3RydWN0aW9uLmVudHJ5LmNoZWNrSXNBdmFpbGFibGU7XG4gICAgICAvLyBBIGNvbnRyb2wgc2hvd3MgaXRzIG93biBwcmVzc2VkIHN0YXRlIGhlcmUsIHNvIGF2YWlsYWJpbGl0eSBpcyB0aGUgb25seSB0aGluZyBsZWZ0IHRvIHJlLXN0YXRlIFx1MjAxNFxuICAgICAgLy8gQW5kIGEgY29tbWFuZCB0aGF0IGRlY2xhcmVzIG5vbmUgbmVlZHMgbm8gcmVmcmVzaGVyIGF0IGFsbC5cbiAgICAgIGlmIChpbnN0cnVjdGlvbkNvbnRyb2wgJiYgY2hlY2tJc0F2YWlsYWJsZSkge1xuICAgICAgICByZWZyZXNoZXJzLnB1c2goKCkgPT4ge1xuICAgICAgICAgIGluc3RydWN0aW9uQ29udHJvbC5zZXREaXNhYmxlZCghY2hlY2tJc0F2YWlsYWJsZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZnJlc2hlcnM7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aHJvdWdoIE9ic2lkaWFuJ3Mgb3duIGluc3RydWN0aW9uIGJhciwgdGhlIHdheSBldmVyeSB7QGxpbmsgU3VnZ2VzdE1vZGFsfSBjb25zdW1lciBoYXMgYWx3YXlzXG4gICAqIGhhZCBpdC5cbiAgICpcbiAgICogQHBhcmFtIG1vZGFsIC0gVGhlIHN1Z2dlc3QgbW9kYWwuXG4gICAqIEBwYXJhbSBpbnN0cnVjdGlvbnMgLSBUaGUgaW5zdHJ1Y3Rpb25zIHRvIHJlbmRlci5cbiAgICogQHJldHVybnMgVGhlIHB1cnBvc2UgZWxlbWVudCBvZiBlYWNoIHJlbmRlcmVkIGluc3RydWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJOYXRpdmVJbnN0cnVjdGlvbnMobW9kYWw6IFN1Z2dlc3RNb2RhbDx1bmtub3duPiwgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10pOiBIVE1MU3BhbkVsZW1lbnRbXSB7XG4gICAgbW9kYWwuc2V0SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgcmV0dXJuIFsuLi5tb2RhbC5pbnN0cnVjdGlvbnNFbC5maW5kQWxsKCcucHJvbXB0LWluc3RydWN0aW9uID4gc3BhbjpudGgtY2hpbGQoMiknKV0gYXMgSFRNTFNwYW5FbGVtZW50W107XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhbiBpbnN0cnVjdGlvbiBiYXIgb2YgdGhlIGJ1aWxkZXIncyBvd24sIGZvciBhIGhvc3QgdGhhdCBoYXMgbm9uZS5cbiAgICpcbiAgICogVGhlIG1hcmt1cCBtaXJyb3JzIHdoYXQgYHNldEluc3RydWN0aW9uc2AgcHJvZHVjZXMsIHNvIE9ic2lkaWFuJ3Mgb3duIHN0eWxpbmcgYXBwbGllcyB1bmNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIGFwcGVuZCB0aGUgYmFyIHRvLlxuICAgKiBAcGFyYW0gaW5zdHJ1Y3Rpb25zIC0gVGhlIGluc3RydWN0aW9ucyB0byByZW5kZXIuXG4gICAqIEByZXR1cm5zIFRoZSBwdXJwb3NlIGVsZW1lbnQgb2YgZWFjaCByZW5kZXJlZCBpbnN0cnVjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgcmVuZGVyT3duSW5zdHJ1Y3Rpb25zKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgaW5zdHJ1Y3Rpb25zOiBJbnN0cnVjdGlvbkV4W10pOiBIVE1MU3BhbkVsZW1lbnRbXSB7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb25zRWwgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoQ3NzQ2xhc3MuUHJvbXB0SW5zdHJ1Y3Rpb25zKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGluc3RydWN0aW9uc0VsLCBDc3NDbGFzcy5Nb2RhbENvbW1hbmRzKTtcblxuICAgIHJldHVybiBpbnN0cnVjdGlvbnMubWFwKChpbnN0cnVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25FbCA9IGluc3RydWN0aW9uc0VsLmNyZWF0ZURpdihDc3NDbGFzcy5Qcm9tcHRJbnN0cnVjdGlvbik7XG4gICAgICBpbnN0cnVjdGlvbkVsLmNyZWF0ZVNwYW4oeyB0ZXh0OiBpbnN0cnVjdGlvbi5jb21tYW5kIH0pO1xuICAgICAgcmV0dXJuIGluc3RydWN0aW9uRWwuY3JlYXRlU3Bhbih7IHRleHQ6IGluc3RydWN0aW9uLnB1cnBvc2UgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBGbGlwcyBhIGNoZWNrYm94IGFuZCBhbm5vdW5jZXMgaXQsIHVubGVzcyBpdCBpcyBkaXNhYmxlZC5cbiAqXG4gKiBTaGFyZWQgYnkgdGhlIHNob3J0Y3V0IGFuZCB0aGUgYnV0dG9uIHNvIHRoZSB0d28gcm91dGVzIGNhbm5vdCBkcmlmdCBcdTIwMTQgaW5jbHVkaW5nIHRoZSBkaXNhYmxlZCBndWFyZCxcbiAqIHdoaWNoIGlzIHRoZSBoYWxmIG1vc3QgZWFzaWx5IGZvcmdvdHRlbiBvbiBvbmUgb2YgdGhlbS5cbiAqXG4gKiBAcGFyYW0gY2hlY2tib3hFbCAtIFRoZSBjaGVja2JveCB0byB0b2dnbGUuXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUNoZWNrYm94KGNoZWNrYm94RWw6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgaWYgKGNoZWNrYm94RWwuZGlzYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY2hlY2tib3hFbC5jaGVja2VkID0gIWNoZWNrYm94RWwuY2hlY2tlZDtcbiAgY2hlY2tib3hFbC50cmlnZ2VyKCdjaGFuZ2UnKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0Q0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFT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RUFFUSxtQkFBbUIsUUFBNkIsT0FBZ0M7QUFDdEYsVUFBTSxlQUFnQyxLQUFLLFFBQVEsSUFBSSxDQUFDLFdBQVc7QUFBQSxNQUNqRSxTQUFTLE1BQU07QUFBQSxNQUNmO0FBQUEsTUFDQSxTQUFTLE1BQU07QUFBQSxJQUNqQixFQUFFO0FBRUYsVUFBTSxhQUFhLHFCQUFxQixTQUNwQyxLQUFLLHlCQUF5QixRQUFRLFlBQVksSUFDbEQsS0FBSyxzQkFBc0IsS0FBSyxvQkFBb0IsTUFBTSxHQUFHLFlBQVk7QUFFN0UsVUFBTSxhQUErQixDQUFDO0FBQ3RDLGVBQVcsQ0FBQyxPQUFPLFdBQVcsS0FBSyxhQUFhLFFBQVEsR0FBRztBQUN6RCxZQUFNLFlBQVksV0FBVyxLQUFLO0FBRWxDLFVBQUksQ0FBQyxXQUFXO0FBQ2Q7QUFBQSxNQUNGO0FBRUEsWUFBTSxxQkFBcUIsWUFBWSxNQUFNLGtCQUFrQixXQUFXLEtBQUs7QUFDL0UsWUFBTSxtQkFBbUIsWUFBWSxNQUFNO0FBRzNDLFVBQUksc0JBQXNCLGtCQUFrQjtBQUMxQyxtQkFBVyxLQUFLLE1BQU07QUFDcEIsNkJBQW1CLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztBQUFBLFFBQ3BELENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVVEseUJBQXlCLE9BQThCLGNBQWtEO0FBQy9HLFVBQU0sZ0JBQWdCLFlBQVk7QUFDbEMsV0FBTyxDQUFDLEdBQUcsTUFBTSxlQUFlLFFBQVEseUNBQXlDLENBQUM7QUFBQSxFQUNwRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBV1Esc0JBQXNCLGFBQTBCLGNBQWtEO0FBQ3hHLFVBQU0saUJBQWlCLFlBQVksVUFBVSxTQUFTLGtCQUFrQjtBQUN4RSx3QkFBb0IsZ0JBQWdCLFNBQVMsYUFBYTtBQUUxRCxXQUFPLGFBQWEsSUFBSSxDQUFDLGdCQUFnQjtBQUN2QyxZQUFNLGdCQUFnQixlQUFlLFVBQVUsU0FBUyxpQkFBaUI7QUFDekUsb0JBQWMsV0FBVyxFQUFFLE1BQU0sWUFBWSxRQUFRLENBQUM7QUFDdEQsYUFBTyxjQUFjLFdBQVcsRUFBRSxNQUFNLFlBQVksUUFBUSxDQUFDO0FBQUEsSUFDL0QsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQVVBLFNBQVMsZUFBZSxZQUFvQztBQUMxRCxNQUFJLFdBQVcsVUFBVTtBQUN2QjtBQUFBLEVBQ0Y7QUFDQSxhQUFXLFVBQVUsQ0FBQyxXQUFXO0FBQ2pDLGFBQVcsUUFBUSxRQUFRO0FBQzdCOyIsCiAgIm5hbWVzIjogWyJNb2RhbENvbW1hbmRzUmVuZGVyTW9kZSJdCn0K
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vZGFscy9tb2RhbC1jb21tYW5kLWJ1aWxkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIGJ1aWxkZXIgZm9yIGEgbW9kYWwncyBjb250cm9sIHN0cmlwLlxuICpcbiAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyfSBhc3NlbWJsZXMgdGhlIHN0cmlwIG9mIGNvbnRyb2xzIHNob3duIGF0IHRoZSBib3R0b20gb2YgYSBtb2RhbDpcbiAqIGtleWJvYXJkLWNvbW1hbmQgaGludHMgKHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmFkZEtleWJvYXJkQ29tbWFuZH0pLCBpbnRlcmFjdGl2ZSBjaGVja2JveGVzIGJvdW5kIHRvXG4gKiBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCAoe0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXIuYWRkQ2hlY2tib3h9KSwgYW5kIGRyb3Bkb3ducyBib3VuZCB0byBhIG1vZGlmaWVyK2tleVxuICogc2hvcnRjdXQgKHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmFkZERyb3BEb3dufSkuIENoYWluIHRoZSBgYWRkKmAgY2FsbHMsIHRoZW4gYXBwbHkgZXZlcnl0aGluZyB0byBhXG4gKiBtb2RhbCB3aXRoIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfTpcbiAqXG4gKiBgYGB0c1xuICogbmV3IE1vZGFsQ29tbWFuZEJ1aWxkZXIoKVxuICogICAuYWRkS2V5Ym9hcmRDb21tYW5kKHsga2V5OiAnRW50ZXInLCBtb2RpZmllcnM6IFsnTW9kJ10sIG9uS2V5LCBwdXJwb3NlOiAndG8gY3JlYXRlJyB9KVxuICogICAuYWRkQ2hlY2tib3goeyBrZXk6ICcxJywgbW9kaWZpZXJzOiBbJ0FsdCddLCBvbkNoYW5nZSwgb25Jbml0LCBwdXJwb3NlOiAnRml4IGZvb3Rub3RlcycgfSlcbiAqICAgLmJ1aWxkKG1vZGFsKTtcbiAqIGBgYFxuICpcbiAqIFRoZSBzdHJpcCBpcyBkZXNjcmliZWQgYnkgdHdvIGluZGVwZW5kZW50IGF4ZXM6XG4gKlxuICogLSAqKldoZXJlIGl0IGlzIGhvc3RlZC4qKiBBIHtAbGluayBTdWdnZXN0TW9kYWx9IGluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnN9IG1vZGVcbiAqICAga2VlcHMgT2JzaWRpYW4ncyBvd24gaW5zdHJ1Y3Rpb24gYmFyIChgc2V0SW5zdHJ1Y3Rpb25zYCArIGBpbnN0cnVjdGlvbnNFbGApLiBFdmVyeSBvdGhlciB0YXJnZXQgXHUyMDE0IGFcbiAqICAgcGxhaW4ge0BsaW5rIE1vZGFsfSwgb3IgYSBiYXJlIHtAbGluayBNb2RhbENvbW1hbmRzSG9zdH0gb2YgYW4gZWxlbWVudCBwbHVzIGEgYFNjb3BlYCBcdTIwMTQgZ2V0cyBhIHN0cmlwXG4gKiAgIGVsZW1lbnQgdGhlIGJ1aWxkZXIgY3JlYXRlcyBpdHNlbGYuXG4gKiAtICoqSG93IGVhY2ggY29udHJvbCBsb29rcy4qKiB7QGxpbmsgTW9kYWxDb21tYW5kc1JlbmRlck1vZGUuSW5zdHJ1Y3Rpb25zfSByZW5kZXJzIHRoZSBwdXJwb3NlIHRleHQgd2l0aFxuICogICBhbiBpbmxpbmUgY2hlY2tib3ggb3IgZHJvcGRvd247IHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zfSByZW5kZXJzIG9uZSBjbGlja2FibGUgYnV0dG9uXG4gKiAgIHBlciBjb250cm9sLCBjYXJyeWluZyBpdHMgcHJlc3NlZCBhbmQgZGlzYWJsZWQgc3RhdGUuXG4gKlxuICogVGhlIGF4ZXMgYXJlIGluZGVwZW5kZW50IGJlY2F1c2UgYSBidXR0b24gc3RyaXAgaW5zaWRlIGEge0BsaW5rIFN1Z2dlc3RNb2RhbH0gaXMgYSByZWFsIGNvbWJpbmF0aW9uLlxuICpcbiAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSBhbHdheXMgcmVnaXN0ZXJzIHRoZSBlc3NlbnRpYWwgbmF2aWdhdGlvbi9hY3Rpb24ga2V5IGhhbmRsZXJzLCBidXRcbiAqIG9ubHkgcmVuZGVycyB0aGUgY29udHJvbCBVSSBhbmQgcmVnaXN0ZXJzIHRoZSBvcHRpb24tdG9nZ2xlIHNob3J0Y3V0cyB3aGVuXG4gKiB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucy5zaG91bGRTaG93SW5zdHJ1Y3Rpb25zfSBpcyBgdHJ1ZWAgKHRoZSBkZWZhdWx0KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEluc3RydWN0aW9uLFxuICBLZXltYXBDb250ZXh0LFxuICBNb2RhbCxcbiAgTW9kaWZpZXIsXG4gIFNjb3BlLFxuICBTdWdnZXN0TW9kYWxcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBEcm9wZG93bkNvbXBvbmVudCxcbiAgUGxhdGZvcm1cbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcblxuY29uc3QgS0VZU19NQVAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXG4gIFsnRW50ZXInLCAnXHUyMUI1J10sXG4gIFsnVXBEb3duJywgJ1x1MjE5MVx1MjE5MyddXG5dKTtcblxuLyoqXG4gKiBUaGUgd2F5IHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSByZW5kZXJzIGVhY2ggY29udHJvbC5cbiAqL1xuZXhwb3J0IGVudW0gTW9kYWxDb21tYW5kc1JlbmRlck1vZGUge1xuICAvKipcbiAgICogT25lIGNsaWNrYWJsZSBidXR0b24gcGVyIGNvbnRyb2wsIGNhcnJ5aW5nIGl0cyBwcmVzc2VkIChgYXJpYS1wcmVzc2VkYCkgYW5kIGRpc2FibGVkIHN0YXRlLlxuICAgKlxuICAgKiBPbmx5IGNvbnRyb2xzIHJlYWNoYWJsZSBieSBwb2ludGVyIGFyZSByZW5kZXJlZCBcdTIwMTQgY2hlY2tib3hlcywgYW5kIGtleWJvYXJkIGNvbW1hbmRzIHRoYXQgc3VwcGx5XG4gICAqIHtAbGluayBLZXlib2FyZENvbW1hbmQub25BY3RpdmF0ZX0uIEEgaGludC1vbmx5IG9yIGtleWJvYXJkLW9ubHkgY29tbWFuZCBzdGlsbCByZWdpc3RlcnMgaXRzIGhhbmRsZXJcbiAgICogYnV0IHJlbmRlcnMgbm8gYnV0dG9uLCBiZWNhdXNlIGEgYnV0dG9uIG5vYm9keSBjYW4gcHJlc3MgaXMgd29yc2UgdGhhbiBubyBidXR0b24uIEEgZHJvcGRvd24gdGhyb3dzOlxuICAgKiBhIGNvbnRyb2wgdGhhdCBDWUNMRVMgaGFzIG5vIGJ1dHRvbiBmb3JtLlxuICAgKi9cbiAgQnV0dG9ucyA9ICdidXR0b25zJyxcblxuICAvKipcbiAgICogT2JzaWRpYW4ncyBpbnN0cnVjdGlvbi1iYXIgbG9vazogdGhlIHNob3J0Y3V0LCB0aGVuIHRoZSBwdXJwb3NlIHRleHQgd2l0aCBhbiBpbmxpbmUgY2hlY2tib3ggb3JcbiAgICogZHJvcGRvd24uXG4gICAqL1xuICBJbnN0cnVjdGlvbnMgPSAnaW5zdHJ1Y3Rpb25zJ1xufVxuXG4vKipcbiAqIEEgY2hlY2tib3ggY29tbWFuZCBzaG93biBpbiBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBhbmQgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCB0b2dnbGVzXG4gKiBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGVja2JveENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kQmFzZSB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY2hlY2tib3ggdmFsdWUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIGlzQ2hlY2tlZCAtIFRoZSBuZXcgY2hlY2tlZCBzdGF0ZS5cbiAgICovXG4gIG9uQ2hhbmdlKGlzQ2hlY2tlZDogYm9vbGVhbik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBvbmNlIHdpdGggdGhlIGNyZWF0ZWQgY2hlY2tib3ggZWxlbWVudCwgdG8gaW5pdGlhbGl6ZSBpdHMgc3RhdGUuXG4gICAqXG4gICAqIEluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5CdXR0b25zfSBtb2RlIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgYnV0IG5ldmVyIGFwcGVuZGVkIFx1MjAxNCB0aGVcbiAgICogYnV0dG9uIGlzIGEgdmlldyBvZiBpdCBcdTIwMTQgc28gdGhlIHNhbWUgaW5pdGlhbGl6YXRpb24gY29kZSBzZXJ2ZXMgYm90aCByZW5kZXIgbW9kZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjaGVja2JveEVsIC0gVGhlIGNyZWF0ZWQgY2hlY2tib3ggZWxlbWVudC5cbiAgICovXG4gIG9uSW5pdChjaGVja2JveEVsOiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgbWVtYmVycyBldmVyeSBjb21tYW5kIHNoYXJlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kQmFzZSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb250cm9sIGNhbiBiZSB1c2VkIHJpZ2h0IG5vdy4gV2hlbiBpdCByZXR1cm5zIGBmYWxzZWAgdGhlIGNvbnRyb2wgaXMgcmVuZGVyZWRcbiAgICogKipkaXNhYmxlZCByYXRoZXIgdGhhbiByZW1vdmVkKiosIHNvIHRoZSBzdHJpcCBkb2VzIG5vdCByZWZsb3cgdW5kZXIgdGhlIHBvaW50ZXIgYXMgbW9kZXMgY2hhbmdlIFx1MjAxNFxuICAgKiB3aGljaCBvbiBhIHBob25lIG1lYW5zIGEgbWlzLXRhcC5cbiAgICpcbiAgICogUmUtcmVhZCBieSB7QGxpbmsgTW9kYWxDb21tYW5kcy5yZWZyZXNofS4gV2hlbiBvbWl0dGVkLCB0aGUgYnVpbGRlciBuZXZlciB0b3VjaGVzIHRoZSBjb250cm9sJ3NcbiAgICogZGlzYWJsZWQgc3RhdGUsIGxlYXZpbmcgd2hhdGV2ZXIge0BsaW5rIENoZWNrYm94Q29tbWFuZC5vbkluaXR9IC8ge0BsaW5rIERyb3BEb3duQ29tbWFuZC5vbkluaXR9IHNldC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29udHJvbCBjYW4gYmUgdXNlZCByaWdodCBub3cuXG4gICAqL1xuICBjaGVja0lzQXZhaWxhYmxlPyh0aGlzOiB2b2lkKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGtleSB0aGF0IGFjdGl2YXRlcyB0aGUgY29tbWFuZC5cbiAgICovXG4gIGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXJzIGNvbWJpbmVkIHdpdGgge0BsaW5rIENvbW1hbmRCYXNlLmtleX0uIFdoZW4gb21pdHRlZCwgbm8gbW9kaWZpZXJzIGFyZSByZXF1aXJlZC5cbiAgICovXG4gIG1vZGlmaWVycz86IE1vZGlmaWVyW107XG5cbiAgLyoqXG4gICAqIFRoZSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBzaG93biBuZXh0IHRvIHRoZSBjb250cm9sLlxuICAgKi9cbiAgcHVycG9zZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgZHJvcGRvd24gY29tbWFuZCBzaG93biBpbiBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBhbmQgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCBjeWNsZXNcbiAqIHRocm91Z2ggaXRzIG9wdGlvbnMuXG4gKlxuICogU3VwcG9ydGVkIGluIHtAbGluayBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZS5JbnN0cnVjdGlvbnN9IG1vZGUgb25seS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcm9wRG93bkNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kQmFzZSB7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZHJvcGRvd24gdmFsdWUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG5ld2x5IHNlbGVjdGVkIHZhbHVlLlxuICAgKi9cbiAgb25DaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBvbmNlIHdpdGggdGhlIGNyZWF0ZWQgZHJvcGRvd24gY29tcG9uZW50LCB0byBpbml0aWFsaXplIGl0cyBvcHRpb25zIGFuZCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIGRyb3Bkb3duQ29tcG9uZW50IC0gVGhlIGNyZWF0ZWQgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgb25Jbml0KGRyb3Bkb3duQ29tcG9uZW50OiBEcm9wZG93bkNvbXBvbmVudCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQSBrZXlib2FyZCBjb21tYW5kIHNob3duIGluIGEgbW9kYWwncyBjb250cm9sIHN0cmlwIGFuZCBvcHRpb25hbGx5IGJvdW5kIHRvIGEgbW9kaWZpZXIra2V5IGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5Ym9hcmRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZEJhc2Uge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgY29tbWFuZCByZWFkcyBhcyBPTi4gU3VwcGx5IGl0IGZvciBhIHRvZ2dsZSB3aG9zZSBzdGF0ZSBsaXZlcyBvdXRzaWRlIHRoZSBzdHJpcDsgb21pdCBpdFxuICAgKiBmb3IgYW4gYWN0aW9uLCB3aGljaCBkb2VzIHNvbWV0aGluZyBhbmQgaXMgZG9uZS4gQSB7QGxpbmsgQ2hlY2tib3hDb21tYW5kfSBuZWVkcyBubyBlcXVpdmFsZW50IFx1MjAxNCBpdHNcbiAgICogY2hlY2tib3ggZWxlbWVudCBpcyB0aGUgc3RhdGUuXG4gICAqXG4gICAqIFJlLXJlYWQgYnkge0BsaW5rIE1vZGFsQ29tbWFuZHMucmVmcmVzaH0uXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgcmVhZHMgYXMgT04uXG4gICAqL1xuICBjaGVja0lzT24/KHRoaXM6IHZvaWQpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9pbnRlciByb3V0ZSBpbnRvIHRoZSBzYW1lIGhhbmRsZXIgdGhlIHNob3J0Y3V0IHJ1bnMuIFJlcXVpcmVkIGZvciB0aGUgY29tbWFuZCB0byByZW5kZXIgYVxuICAgKiBidXR0b24gaW4ge0BsaW5rIE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkJ1dHRvbnN9IG1vZGUgXHUyMDE0IG9uIGEgcGhvbmUgdGhlcmUgaXMgbm8gbW9kaWZpZXIga2V5IHRvXG4gICAqIHByZXNzLCBzbyB0aGlzIGlzIHRoZSBvbmx5IHdheSBpbi5cbiAgICpcbiAgICogQHBhcmFtICRldmVudCAtIFRoZSBjbGljayBldmVudCwgc28gYSBjb21tYW5kIHRoYXQgcGlja3Mgc29tZXRoaW5nIGhhcyBvbmUgdG8gaGFuZCBvbi5cbiAgICovXG4gIG9uQWN0aXZhdGU/KHRoaXM6IHZvaWQsICRldmVudDogTW91c2VFdmVudCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBoYW5kbGVyIGludm9rZWQgd2hlbiB0aGUgc2hvcnRjdXQgaXMgcHJlc3NlZC4gV2hlbiBvbWl0dGVkLCB0aGUgY29tbWFuZCBpcyBhIGhpbnQgb25seSBhbmQgbm9cbiAgICogc2NvcGUgaGFuZGxlciBpcyByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gJGV2ZW50IC0gVGhlIGtleWJvYXJkIGV2ZW50LlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBrZXltYXAgY29udGV4dC5cbiAgICogQHJldHVybnMgYGZhbHNlYCB0byBwcmV2ZW50IE9ic2lkaWFuJ3MgZGVmYXVsdCBoYW5kbGluZywgb3IgYHZvaWRgL2B0cnVlYCBvdGhlcndpc2UuXG4gICAqL1xuICBvbktleT8oJGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb250ZXh0OiBLZXltYXBDb250ZXh0KTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgd2F5IGVhY2ggY29udHJvbCBpcyByZW5kZXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkluc3RydWN0aW9uc31cbiAgICovXG4gIHJlYWRvbmx5IHJlbmRlck1vZGU/OiBNb2RhbENvbW1hbmRzUmVuZGVyTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW5kZXIgdGhlIGNvbnRyb2wgc3RyaXAgKGNoZWNrYm94ZXMsIGRyb3Bkb3ducywga2V5Ym9hcmQgaGludHMpIGFuZCByZWdpc3RlciB0aGVcbiAgICogb3B0aW9uLXRvZ2dsZSBrZXlib2FyZCBzaG9ydGN1dHMuIFdoZW4gYGZhbHNlYCwgbm8gY29udHJvbCBVSSBpcyBzaG93biBhbmQgdGhlIG9wdGlvbi10b2dnbGVcbiAgICogc2hvcnRjdXRzIGFyZSBub3QgcmVnaXN0ZXJlZDsgb25seSB0aGUgZXNzZW50aWFsIG5hdmlnYXRpb24ga2V5IGhhbmRsZXJzIHJlbWFpbiBhY3RpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0luc3RydWN0aW9ucz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGhhbmRsZSByZXR1cm5lZCBieSB7QGxpbmsgTW9kYWxDb21tYW5kQnVpbGRlci5idWlsZH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kcyB7XG4gIC8qKlxuICAgKiBCcmluZ3MgZXZlcnkgcmVuZGVyZWQgY29udHJvbCdzIGRpc2FibGVkIGFuZCBwcmVzc2VkIHN0YXRlIHVwIHRvIGRhdGUsIGJ5IHJlLXJlYWRpbmdcbiAgICoge0BsaW5rIENvbW1hbmRCYXNlLmNoZWNrSXNBdmFpbGFibGV9IGFuZCB7QGxpbmsgS2V5Ym9hcmRDb21tYW5kLmNoZWNrSXNPbn0uXG4gICAqXG4gICAqIFRoZSBzdHJpcCBpcyBidWlsdCBvbmNlIGFuZCBvbmx5IHJlLXN0YXRlZCBhZnRlcndhcmRzLCBiZWNhdXNlIHJlYnVpbGRpbmcgaXQgd291bGQgcmVwbGFjZSBhbiBlbGVtZW50XG4gICAqIHRoZSBwb2ludGVyIG1heSBiZSBhYm91dCB0byBjbGljay5cbiAgICovXG4gIHJlZnJlc2goKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBIGJhcmUgaG9zdCBmb3IgYSBjb250cm9sIHN0cmlwOiB0aGUgZWxlbWVudCB0byByZW5kZXIgaW50bywgcGx1cyB0aGUgc2NvcGUgdG8gcmVnaXN0ZXIgc2hvcnRjdXRzIHdpdGguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxDb21tYW5kc0hvc3Qge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhlIGNvbnRyb2wgc3RyaXAgaXMgYXBwZW5kZWQgdG8uXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJFbDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzY29wZSB0aGUgc2hvcnRjdXRzIGFyZSByZWdpc3RlcmVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBzY29wZTogU2NvcGU7XG59XG5cbi8qKlxuICogRXZlcnkgdGFyZ2V0IHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyLmJ1aWxkfSBhY2NlcHRzLlxuICovXG5leHBvcnQgdHlwZSBNb2RhbENvbW1hbmRzVGFyZ2V0ID0gTW9kYWwgfCBNb2RhbENvbW1hbmRzSG9zdCB8IFN1Z2dlc3RNb2RhbDx1bmtub3duPjtcblxuLyoqXG4gKiBPbmUgYWNjdW11bGF0ZWQgY29tbWFuZCwgcmVkdWNlZCB0byB0aGUgaGFuZGZ1bCBvZiB0aGluZ3MgYm90aCByZW5kZXJlcnMgbmVlZC5cbiAqXG4gKiBPcHRpb25hbCBjb2xsYWJvcmF0b3JzIGFyZSBgbnVsbCB8IFhgIHJlcXVpcmVkIGZpZWxkcyByYXRoZXIgdGhhbiBgP2AsIHNvIGV2ZXJ5IGNvbnN0cnVjdGlvbiBzaXRlIGhhcyB0b1xuICogc2F5IHdoaWNoIG9uZXMgaXQgaGFzLlxuICovXG4vKipcbiAqIE9uZSBjb250cm9sIHJlbmRlcmVkIGFzIGEgQlVUVE9OLlxuICpcbiAqIEl0IHJlcG9ydHMgaXRzIG93biBwcmVzc2VkIHN0YXRlLCBiZWNhdXNlIG9ubHkgdGhlIGJ1dHRvbiByZW5kZXJlciBoYXMgYW55d2hlcmUgdG8gc2hvdyBvbmUuXG4gKi9cbmludGVyZmFjZSBCdXR0b25Db250cm9sIHtcbiAgY2hlY2tJc09uKHRoaXM6IHZvaWQpOiBib29sZWFuO1xuICBzZXREaXNhYmxlZCh0aGlzOiB2b2lkLCBpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZDtcbn1cblxuaW50ZXJmYWNlIENvbW1hbmRFbnRyeSB7XG4gIHJlYWRvbmx5IGNoZWNrSXNBdmFpbGFibGU6ICgodGhpczogdm9pZCkgPT4gYm9vbGVhbikgfCBudWxsO1xuICByZWFkb25seSBjb21tYW5kVGV4dDogc3RyaW5nO1xuICByZWFkb25seSBpbml0QnV0dG9uOiAoKGJ1dHRvbkVsOiBIVE1MQnV0dG9uRWxlbWVudCwgc2NvcGU6IFNjb3BlKSA9PiBCdXR0b25Db250cm9sKSB8IG51bGw7XG4gIHJlYWRvbmx5IGluaXRJbnN0cnVjdGlvbjogKChwdXJwb3NlRWw6IEhUTUxTcGFuRWxlbWVudCwgc2NvcGU6IFNjb3BlKSA9PiBJbnN0cnVjdGlvbkNvbnRyb2wpIHwgbnVsbDtcbiAgcmVhZG9ubHkgaXNEcm9wRG93bjogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcHVycG9zZTogc3RyaW5nO1xuICByZWFkb25seSByZWdpc3RlclNjb3BlOiAoKHNjb3BlOiBTY29wZSkgPT4gdm9pZCkgfCBudWxsO1xufVxuXG4vKipcbiAqIE9uZSBjb250cm9sIHJlbmRlcmVkIGludG8gYW4gSU5TVFJVQ1RJT04gYmFyLlxuICpcbiAqIFRoZXJlIGlzIGRlbGliZXJhdGVseSBubyBwcmVzc2VkIHN0YXRlIGhlcmU6IHRoZSBjb250cm9sIFx1MjAxNCBhIGNoZWNrYm94LCBhIGRyb3Bkb3duIFx1MjAxNCBzaG93cyBpdHMgb3duLFxuICogc28gYSBzZWNvbmQgY29weSB3b3VsZCBvbmx5IGJlIGEgc2Vjb25kIHRoaW5nIHRvIGtlZXAgaW4gc3luYy5cbiAqL1xuaW50ZXJmYWNlIEluc3RydWN0aW9uQ29udHJvbCB7XG4gIHNldERpc2FibGVkKHRoaXM6IHZvaWQsIGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgSW5zdHJ1Y3Rpb25FeCBleHRlbmRzIEluc3RydWN0aW9uIHtcbiAgcmVhZG9ubHkgZW50cnk6IENvbW1hbmRFbnRyeTtcbn1cblxuLyoqXG4gKiBSZS1zdGF0ZXMgb25lIHJlbmRlcmVkIGNvbnRyb2wsIGFscmVhZHkgYm91bmQgdG8gaXRzIG93biBlbGVtZW50cy5cbiAqL1xudHlwZSBSZWZyZXNoQ29udHJvbCA9ICh0aGlzOiB2b2lkKSA9PiB2b2lkO1xuXG5jb25zdCBOT09QX01PREFMX0NPTU1BTkRTOiBNb2RhbENvbW1hbmRzID0ge1xuICByZWZyZXNoOiAoKTogdm9pZCA9PiB7XG4gICAgLy8gTm90aGluZyB3YXMgcmVuZGVyZWQsIHNvIHRoZXJlIGlzIG5vIHN0YXRlIHRvIHJlLXN0YXRlLlxuICB9XG59O1xuXG4vKipcbiAqIEJ1aWxkcyBhIG1vZGFsJ3MgY29udHJvbCBzdHJpcCBmcm9tIGtleWJvYXJkIGNvbW1hbmRzLCBpbnRlcmFjdGl2ZSBjaGVja2JveGVzLCBhbmQgZHJvcGRvd25zLCB0aGVuXG4gKiBhcHBsaWVzIHRoZW0gdG8gYSBtb2RhbCB2aWEge0BsaW5rIE1vZGFsQ29tbWFuZEJ1aWxkZXIuYnVpbGR9LlxuICovXG5leHBvcnQgY2xhc3MgTW9kYWxDb21tYW5kQnVpbGRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cmllczogQ29tbWFuZEVudHJ5W10gPSBbXTtcblxuICAvKipcbiAgICogQWRkcyBhbiBpbnRlcmFjdGl2ZSBjaGVja2JveCB0byB0aGUgY29udHJvbCBzdHJpcCwgYm91bmQgdG8gYSBtb2RpZmllcitrZXkgc2hvcnRjdXQgdGhhdCB0b2dnbGVzIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjaGVja2JveCBjb21tYW5kIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgKi9cbiAgcHVibGljIGFkZENoZWNrYm94KGNvbW1hbmQ6IENoZWNrYm94Q29tbWFuZCk6IHRoaXMge1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIGNoZWNrSXNBdmFpbGFibGU6IGNvbW1hbmQuY2hlY2tJc0F2YWlsYWJsZSA/PyBudWxsLFxuICAgICAgY29tbWFuZFRleHQ6IHRoaXMuYnVpbGRDb21tYW5kVGV4dChjb21tYW5kKSxcbiAgICAgIGluaXRCdXR0b246IChidXR0b25FbDogSFRNTEJ1dHRvbkVsZW1lbnQsIHNjb3BlOiBTY29wZSk6IEJ1dHRvbkNvbnRyb2wgPT4ge1xuICAgICAgICAvLyBDcmVhdGVkIGJ1dCBuZXZlciBhcHBlbmRlZDogdGhlIGNoZWNrYm94IGhvbGRzIHRoZSBzdGF0ZSBhbmQgdGhlIGJ1dHRvbiBpcyBhIHZpZXcgb2YgaXQsIHNvXG4gICAgICAgIC8vIGBvbkluaXRgIC8gYG9uQ2hhbmdlYCBtZWFuIGV4YWN0bHkgdGhlIHNhbWUgdGhpbmcgaW4gYm90aCByZW5kZXIgbW9kZXMuXG4gICAgICAgIGNvbnN0IGNoZWNrYm94RWwgPSBjcmVhdGVFbCgnaW5wdXQnLCB7IHR5cGU6ICdjaGVja2JveCcgfSk7XG4gICAgICAgIGluaXRDaGVja2JveChjaGVja2JveEVsLCBzY29wZSk7XG4gICAgICAgIGJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIHRvZ2dsZUNoZWNrYm94KGNoZWNrYm94RWwpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGVja0lzT246ICgpOiBib29sZWFuID0+IGNoZWNrYm94RWwuY2hlY2tlZCxcbiAgICAgICAgICBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGNoZWNrYm94RWwuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICAgICAgYnV0dG9uRWwuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBpbml0SW5zdHJ1Y3Rpb246IChwdXJwb3NlRWw6IEhUTUxTcGFuRWxlbWVudCwgc2NvcGU6IFNjb3BlKTogSW5zdHJ1Y3Rpb25Db250cm9sID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2tib3hFbCA9IHB1cnBvc2VFbC5jcmVhdGVFbCgnaW5wdXQnLCB7IHR5cGU6ICdjaGVja2JveCcgfSk7XG4gICAgICAgIC8vIFRoZSBnYXAgZ29lcyBvbiB0aGUgY29udHJvbCwgbm90IG9uIHRoZSBzdHJpcCwgc28gaXQgbGFuZHMgb24gQk9USCByZW5kZXIgcGF0aHM6IGFcbiAgICAgICAgLy8gYFN1Z2dlc3RNb2RhbGAncyBuYXRpdmUgYmFyIGhvc3RzIHRoZSBzYW1lIGNoZWNrYm94LCBhbmQgT0RVIG5ldmVyIHRvdWNoZXMgdGhhdCBiYXIncyBlbGVtZW50LlxuICAgICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGNoZWNrYm94RWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZENvbnRyb2wpO1xuICAgICAgICByZXR1cm4gaW5pdENoZWNrYm94KGNoZWNrYm94RWwsIHNjb3BlKTtcbiAgICAgIH0sXG4gICAgICBpc0Ryb3BEb3duOiBmYWxzZSxcbiAgICAgIHB1cnBvc2U6IGNvbW1hbmQucHVycG9zZSxcbiAgICAgIHJlZ2lzdGVyU2NvcGU6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcblxuICAgIGZ1bmN0aW9uIGluaXRDaGVja2JveChjaGVja2JveEVsOiBIVE1MSW5wdXRFbGVtZW50LCBzY29wZTogU2NvcGUpOiBJbnN0cnVjdGlvbkNvbnRyb2wge1xuICAgICAgY29tbWFuZC5vbkluaXQoY2hlY2tib3hFbCk7XG4gICAgICBjaGVja2JveEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgY29tbWFuZC5vbkNoYW5nZShjaGVja2JveEVsLmNoZWNrZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIHNjb3BlLnJlZ2lzdGVyKGNvbW1hbmQubW9kaWZpZXJzID8/IFtdLCBjb21tYW5kLmtleSwgKCkgPT4ge1xuICAgICAgICB0b2dnbGVDaGVja2JveChjaGVja2JveEVsKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXREaXNhYmxlZDogKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICBjaGVja2JveEVsLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGRyb3Bkb3duIHRvIHRoZSBjb250cm9sIHN0cmlwLCBib3VuZCB0byBhIG1vZGlmaWVyK2tleSBzaG9ydGN1dCB0aGF0IGN5Y2xlcyB0aHJvdWdoIGl0c1xuICAgKiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBkcm9wZG93biBjb21tYW5kIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGJ1aWxkZXIgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgKi9cbiAgcHVibGljIGFkZERyb3BEb3duKGNvbW1hbmQ6IERyb3BEb3duQ29tbWFuZCk6IHRoaXMge1xuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcbiAgICAgIGNoZWNrSXNBdmFpbGFibGU6IGNvbW1hbmQuY2hlY2tJc0F2YWlsYWJsZSA/PyBudWxsLFxuICAgICAgY29tbWFuZFRleHQ6IHRoaXMuYnVpbGRDb21tYW5kVGV4dChjb21tYW5kKSxcbiAgICAgIGluaXRCdXR0b246IG51bGwsXG4gICAgICBpbml0SW5zdHJ1Y3Rpb246IChwdXJwb3NlRWw6IEhUTUxTcGFuRWxlbWVudCwgc2NvcGU6IFNjb3BlKTogSW5zdHJ1Y3Rpb25Db250cm9sID0+IHtcbiAgICAgICAgY29uc3QgZHJvcGRvd25Db21wb25lbnQgPSBuZXcgRHJvcGRvd25Db21wb25lbnQocHVycG9zZUVsKTtcbiAgICAgICAgLy8gVGhlIHNhbWUgZ2FwIHRoZSBjaGVja2JveCBnZXRzLCBzbyB0aGUgdHdvIGNvbnRyb2xzIGFyZSBzZXBhcmF0ZWQgZnJvbSB0aGVpciBsYWJlbCB0aGUgc2FtZVxuICAgICAgICAvLyBXYXkgXHUyMDE0IGEgcmVhbCBydWxlIHJhdGhlciB0aGFuIHRoZSBsaXRlcmFsIHNwYWNlIHRoaXMgdXNlZCB0byBhcHBlbmQuXG4gICAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoZHJvcGRvd25Db21wb25lbnQuc2VsZWN0RWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZENvbnRyb2wpO1xuICAgICAgICBjb21tYW5kLm9uSW5pdChkcm9wZG93bkNvbXBvbmVudCk7XG4gICAgICAgIGRyb3Bkb3duQ29tcG9uZW50Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbW1hbmQub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gZGVmZW5zaXZlID8/IG9uIG9wdGlvbmFsIG1vZGlmaWVycy4gKi9cbiAgICAgICAgc2NvcGUucmVnaXN0ZXIoY29tbWFuZC5tb2RpZmllcnMgPz8gW10sIGNvbW1hbmQua2V5LCAoKSA9PiB7XG4gICAgICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICBpZiAoZHJvcGRvd25Db21wb25lbnQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc2VsZWN0RWwgPSBkcm9wZG93bkNvbXBvbmVudC5zZWxlY3RFbDtcbiAgICAgICAgICBzZWxlY3RFbC5zZWxlY3RlZEluZGV4ID0gKHNlbGVjdEVsLnNlbGVjdGVkSW5kZXggKyAxKSAlIHNlbGVjdEVsLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgIHNlbGVjdEVsLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNldERpc2FibGVkOiAoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgZHJvcGRvd25Db21wb25lbnQuc2V0RGlzYWJsZWQoaXNEaXNhYmxlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGlzRHJvcERvd246IHRydWUsXG4gICAgICBwdXJwb3NlOiBjb21tYW5kLnB1cnBvc2UsXG4gICAgICByZWdpc3RlclNjb3BlOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGtleWJvYXJkIGNvbW1hbmQgdG8gdGhlIGNvbnRyb2wgc3RyaXAuIFdoZW4ge0BsaW5rIEtleWJvYXJkQ29tbWFuZC5vbktleX0gaXMgcHJvdmlkZWQsIGl0c1xuICAgKiBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbW9kYWwgc2NvcGU7IG90aGVyd2lzZSB0aGUgY29tbWFuZCBpcyBhIGhpbnQgb25seS5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUga2V5Ym9hcmQgY29tbWFuZCB0byBhZGQuXG4gICAqIEByZXR1cm5zIFRoZSBidWlsZGVyIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyBhZGRLZXlib2FyZENvbW1hbmQoY29tbWFuZDogS2V5Ym9hcmRDb21tYW5kKTogdGhpcyB7XG4gICAgY29uc3QgY2hlY2tJc09uID0gY29tbWFuZC5jaGVja0lzT24gPz8gKCgpOiBib29sZWFuID0+IGZhbHNlKTtcbiAgICBjb25zdCBvbkFjdGl2YXRlID0gY29tbWFuZC5vbkFjdGl2YXRlID8/IG51bGw7XG4gICAgY29uc3Qgb25LZXkgPSBjb21tYW5kLm9uS2V5Py5iaW5kKGNvbW1hbmQpID8/IG51bGw7XG5cbiAgICB0aGlzLmVudHJpZXMucHVzaCh7XG4gICAgICBjaGVja0lzQXZhaWxhYmxlOiBjb21tYW5kLmNoZWNrSXNBdmFpbGFibGUgPz8gbnVsbCxcbiAgICAgIGNvbW1hbmRUZXh0OiB0aGlzLmJ1aWxkQ29tbWFuZFRleHQoY29tbWFuZCksXG4gICAgICBpbml0QnV0dG9uOiBvbkFjdGl2YXRlXG4gICAgICAgIC8vIE5vIGRpc2FibGVkIGd1YXJkIG9uIHRoZSBsaXN0ZW5lcjogYSBkaXNhYmxlZCBidXR0b24gZmlyZXMgbm8gY2xpY2sgYXQgYWxsLCBzbyBgc2V0RGlzYWJsZWRgXG4gICAgICAgIC8vIEJlbG93IGlzIHRoZSB3aG9sZSBnYXRlLlxuICAgICAgICA/IChidXR0b25FbDogSFRNTEJ1dHRvbkVsZW1lbnQpOiBCdXR0b25Db250cm9sID0+IHtcbiAgICAgICAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgIG9uQWN0aXZhdGUoJGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2hlY2tJc09uLFxuICAgICAgICAgICAgc2V0RGlzYWJsZWQ6IChpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGJ1dHRvbkVsLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIGluaXRJbnN0cnVjdGlvbjogbnVsbCxcbiAgICAgIGlzRHJvcERvd246IGZhbHNlLFxuICAgICAgcHVycG9zZTogY29tbWFuZC5wdXJwb3NlLFxuICAgICAgcmVnaXN0ZXJTY29wZTogb25LZXlcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0IC0tIGRlZmVuc2l2ZSA/PyBvbiBvcHRpb25hbCBtb2RpZmllcnMuICovXG4gICAgICAgID8gKHNjb3BlOiBTY29wZSk6IHZvaWQgPT4ge1xuICAgICAgICAgIHNjb3BlLnJlZ2lzdGVyKGNvbW1hbmQubW9kaWZpZXJzID8/IFtdLCBjb21tYW5kLmtleSwgb25LZXkpO1xuICAgICAgICB9XG4gICAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGFjY3VtdWxhdGVkIGNvbW1hbmRzIHRvIGEgbW9kYWwuIEFsd2F5cyByZWdpc3RlcnMgdGhlIGVzc2VudGlhbCBuYXZpZ2F0aW9uL2FjdGlvbiBrZXlcbiAgICogaGFuZGxlcnM7IG9ubHkgcmVuZGVycyB0aGUgY29udHJvbCBzdHJpcCBhbmQgcmVnaXN0ZXJzIHRoZSBvcHRpb24tdG9nZ2xlIHNob3J0Y3V0cyB3aGVuXG4gICAqIHtAbGluayBNb2RhbENvbW1hbmRCdWlsZGVyQnVpbGRPcHRpb25zLnNob3VsZFNob3dJbnN0cnVjdGlvbnN9IGlzIGB0cnVlYC5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBtb2RhbCwgb3IgdGhlIGJhcmUgZWxlbWVudCArIHNjb3BlLCB0byBhcHBseSB0aGUgY29tbWFuZHMgdG8uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGJ1aWxkIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgaGFuZGxlIHdob3NlIHtAbGluayBNb2RhbENvbW1hbmRzLnJlZnJlc2h9IHJlLXN0YXRlcyBldmVyeSByZW5kZXJlZCBjb250cm9sLlxuICAgKi9cbiAgcHVibGljIGJ1aWxkKHRhcmdldDogTW9kYWxDb21tYW5kc1RhcmdldCwgb3B0aW9uczogTW9kYWxDb21tYW5kQnVpbGRlckJ1aWxkT3B0aW9ucyA9IHt9KTogTW9kYWxDb21tYW5kcyB7XG4gICAgY29uc3Qge1xuICAgICAgcmVuZGVyTW9kZSA9IE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkluc3RydWN0aW9ucyxcbiAgICAgIHNob3VsZFNob3dJbnN0cnVjdGlvbnMgPSB0cnVlXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBzY29wZSA9IHRhcmdldC5zY29wZTtcblxuICAgIC8vIEVzc2VudGlhbCBuYXZpZ2F0aW9uL2FjdGlvbiBrZXkgaGFuZGxlcnMgbXVzdCBzdGF5IGFjdGl2ZSBldmVuIHdoZW4gdGhlIGNvbnRyb2wgc3RyaXAgaXMgaGlkZGVuLlxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBlbnRyeS5yZWdpc3RlclNjb3BlPy4oc2NvcGUpO1xuICAgIH1cblxuICAgIGlmICghc2hvdWxkU2hvd0luc3RydWN0aW9ucykge1xuICAgICAgcmV0dXJuIE5PT1BfTU9EQUxfQ09NTUFORFM7XG4gICAgfVxuXG4gICAgLy8gRWFjaCByZW5kZXJlciBoYW5kcyBiYWNrIG9uZSBjbG9zdXJlIHBlciBjb250cm9sIGl0IGFjdHVhbGx5IGRyZXcsIGFscmVhZHkgYm91bmQgdG8gdGhhdCBjb250cm9sJ3NcbiAgICAvLyBFbGVtZW50cyBcdTIwMTQgc28gYHJlZnJlc2hgIG5ldmVyIGhhcyB0byBrbm93IHdoaWNoIG9mIHRoZSB0d28gc2hhcGVzIGl0IGlzIHJlLXN0YXRpbmcuXG4gICAgY29uc3QgcmVmcmVzaGVycyA9IHJlbmRlck1vZGUgPT09IE1vZGFsQ29tbWFuZHNSZW5kZXJNb2RlLkJ1dHRvbnNcbiAgICAgID8gdGhpcy5yZW5kZXJCdXR0b25zKHRhcmdldCwgc2NvcGUpXG4gICAgICA6IHRoaXMucmVuZGVySW5zdHJ1Y3Rpb25zKHRhcmdldCwgc2NvcGUpO1xuXG4gICAgY29uc3QgbW9kYWxDb21tYW5kczogTW9kYWxDb21tYW5kcyA9IHtcbiAgICAgIHJlZnJlc2g6ICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCByZWZyZXNoQ29udHJvbCBvZiByZWZyZXNoZXJzKSB7XG4gICAgICAgICAgcmVmcmVzaENvbnRyb2woKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgbW9kYWxDb21tYW5kcy5yZWZyZXNoKCk7XG4gICAgcmV0dXJuIG1vZGFsQ29tbWFuZHM7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29tbWFuZFRleHQoY29tbWFuZDogQ29tbWFuZEJhc2UpOiBzdHJpbmcge1xuICAgIGxldCBjb21tYW5kVGV4dCA9IEtFWVNfTUFQLmdldChjb21tYW5kLmtleSkgPz8gY29tbWFuZC5rZXk7XG5cbiAgICBmb3IgKGNvbnN0IG1vZGlmaWVyIG9mIGNvbW1hbmQubW9kaWZpZXJzID8/IFtdKSB7XG4gICAgICBjb21tYW5kVGV4dCA9IGAke3RoaXMuZ2V0TW9kaWZpZXJTdHJpbmcobW9kaWZpZXIpfSAke2NvbW1hbmRUZXh0fWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbW1hbmRUZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNb2RpZmllclN0cmluZyhtb2RpZmllcjogTW9kaWZpZXIpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAobW9kaWZpZXIpIHtcbiAgICAgIGNhc2UgJ0FsdCc6IHtcbiAgICAgICAgcmV0dXJuICdhbHQnO1xuICAgICAgfVxuICAgICAgY2FzZSAnQ3RybCc6IHtcbiAgICAgICAgcmV0dXJuICdjdHJsJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ01ldGEnOiB7XG4gICAgICAgIHJldHVybiBQbGF0Zm9ybS5pc01hY09TID8gJ2NtZCcgOiAnd2luJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ01vZCc6IHtcbiAgICAgICAgcmV0dXJuIFBsYXRmb3JtLmlzTWFjT1MgPyAnY21kJyA6ICdjdHJsJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1NoaWZ0Jzoge1xuICAgICAgICByZXR1cm4gJ3NoaWZ0JztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIG1vZGlmaWVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgZWxlbWVudCBhIHNlbGYtY3JlYXRlZCBzdHJpcCBpcyBhcHBlbmRlZCB0by5cbiAgICpcbiAgICogQSB7QGxpbmsgTW9kYWx9IGNhcnJpZXMgYm90aCBgbW9kYWxFbGAgYW5kIGEgYGNvbnRhaW5lckVsYCB0aGF0IGlzIHRoZSBPVVRFUiBgLm1vZGFsLWNvbnRhaW5lcmAsIHNvXG4gICAqIGBtb2RhbEVsYCBoYXMgdG8gd2luIFx1MjAxNCBvdGhlcndpc2UgdGhlIHN0cmlwIGxhbmRzIG91dHNpZGUgdGhlIG1vZGFsIGZyYW1lLiBEaXNjcmltaW5hdGVkIHdpdGggYGluYFxuICAgKiByYXRoZXIgdGhhbiBhIHByb3BlcnR5IHJlYWQsIGJlY2F1c2UgdGVzdHMgaGFuZCBgYnVpbGRgIGEgYHN0cmljdFByb3h5YCBtb2NrIHdob3NlIGBnZXRgIHRyYXAgdGhyb3dzXG4gICAqIG9uIHVubW9ja2VkIG1lbWJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgYnVpbGQgdGFyZ2V0LlxuICAgKiBAcmV0dXJucyBUaGUgZWxlbWVudCB0byBhcHBlbmQgdGhlIHN0cmlwIHRvLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdHJpcENvbnRhaW5lckVsKHRhcmdldDogTW9kYWxDb21tYW5kc1RhcmdldCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gJ21vZGFsRWwnIGluIHRhcmdldCA/IHRhcmdldC5tb2RhbEVsIDogdGFyZ2V0LmNvbnRhaW5lckVsO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJCdXR0b25zKHRhcmdldDogTW9kYWxDb21tYW5kc1RhcmdldCwgc2NvcGU6IFNjb3BlKTogUmVmcmVzaENvbnRyb2xbXSB7XG4gICAgY29uc3Qgc3RyaXBFbCA9IHRoaXMuZ2V0U3RyaXBDb250YWluZXJFbCh0YXJnZXQpLmNyZWF0ZURpdigpO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoc3RyaXBFbCwgQ3NzQ2xhc3MuTW9kYWxDb21tYW5kcyk7XG5cbiAgICBjb25zdCByZWZyZXNoZXJzOiBSZWZyZXNoQ29udHJvbFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgaWYgKGVudHJ5LmlzRHJvcERvd24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVuZGVyIGRyb3Bkb3duIGNvbW1hbmQgXCIke2VudHJ5LnB1cnBvc2V9XCIgYXMgYSBidXR0b246IGEgY29udHJvbCB0aGF0IGN5Y2xlcyBoYXMgbm8gYnV0dG9uIGZvcm0uYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZW50cnkuaW5pdEJ1dHRvbikge1xuICAgICAgICAvLyBIaW50LW9ubHkgYW5kIGtleWJvYXJkLW9ubHkgY29tbWFuZHMgaGF2ZSBubyBwb2ludGVyIHJvdXRlLCBhbmQgYSBidXR0b24gbm9ib2R5IGNhbiBwcmVzcyBpc1xuICAgICAgICAvLyBXb3JzZSB0aGFuIG5vIGJ1dHRvbi4gVGhlaXIgc2NvcGUgaGFuZGxlcnMgYXJlIGFscmVhZHkgcmVnaXN0ZXJlZC5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJ1dHRvbkVsID0gc3RyaXBFbC5jcmVhdGVFbCgnYnV0dG9uJywgeyB0eXBlOiAnYnV0dG9uJyB9KTtcbiAgICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoYnV0dG9uRWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZCk7XG4gICAgICBidXR0b25FbC5jcmVhdGVTcGFuKHsgdGV4dDogZW50cnkucHVycG9zZSB9KTtcblxuICAgICAgLy8gVGhlIGhvdGtleSBpcyBzaG93biBvbmx5IHdoZXJlIG9uZSBjYW4gYmUgcHJlc3NlZC4gT24gYSBwaG9uZSB0aGVyZSBpcyBubyBtb2RpZmllciBrZXkgdG8gb2ZmZXIsXG4gICAgICAvLyBBbmQgdGhlIGJ1dHRvbiBJUyB0aGUgb25seSB3YXkgaW4gXHUyMDE0IHdoaWNoIGlzIHdoeSB0aGUgc3RyaXAgZXhpc3RzLlxuICAgICAgaWYgKCFQbGF0Zm9ybS5pc01vYmlsZSkge1xuICAgICAgICBjb25zdCBob3RrZXlFbCA9IGJ1dHRvbkVsLmNyZWF0ZVNwYW4oeyB0ZXh0OiBlbnRyeS5jb21tYW5kVGV4dCB9KTtcbiAgICAgICAgYWRkUGx1Z2luQ3NzQ2xhc3Nlcyhob3RrZXlFbCwgQ3NzQ2xhc3MuTW9kYWxDb21tYW5kSG90a2V5KTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGlucHV0IGtlZXBzIGZvY3VzOiBhIG1vZGFsIHRoYXQgZmlsdGVycyBhcyB5b3UgdHlwZSB3b3VsZCBlbmQgaXRzIHNlYXJjaCBtaWQtd29yZCBpZiBhIGNsaWNrXG4gICAgICAvLyBTdG9sZSBmb2N1cy5cbiAgICAgIGJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICgkZXZlbnQpID0+IHtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYnV0dG9uQ29udHJvbCA9IGVudHJ5LmluaXRCdXR0b24oYnV0dG9uRWwsIHNjb3BlKTtcbiAgICAgIGNvbnN0IGNoZWNrSXNBdmFpbGFibGUgPSBlbnRyeS5jaGVja0lzQXZhaWxhYmxlO1xuICAgICAgcmVmcmVzaGVycy5wdXNoKCgpID0+IHtcbiAgICAgICAgaWYgKGNoZWNrSXNBdmFpbGFibGUpIHtcbiAgICAgICAgICBidXR0b25Db250cm9sLnNldERpc2FibGVkKCFjaGVja0lzQXZhaWxhYmxlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzT24gPSBidXR0b25Db250cm9sLmNoZWNrSXNPbigpO1xuICAgICAgICBidXR0b25FbC50b2dnbGVDbGFzcyhDc3NDbGFzcy5Jc0FjdGl2ZSwgaXNPbik7XG4gICAgICAgIGJ1dHRvbkVsLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgU3RyaW5nKGlzT24pKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZWZyZXNoZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJJbnN0cnVjdGlvbnModGFyZ2V0OiBNb2RhbENvbW1hbmRzVGFyZ2V0LCBzY29wZTogU2NvcGUpOiBSZWZyZXNoQ29udHJvbFtdIHtcbiAgICBjb25zdCBpbnN0cnVjdGlvbnM6IEluc3RydWN0aW9uRXhbXSA9IHRoaXMuZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoe1xuICAgICAgY29tbWFuZDogZW50cnkuY29tbWFuZFRleHQsXG4gICAgICBlbnRyeSxcbiAgICAgIHB1cnBvc2U6IGVudHJ5LnB1cnBvc2VcbiAgICB9KSk7XG5cbiAgICBjb25zdCBwdXJwb3NlRWxzID0gJ3NldEluc3RydWN0aW9ucycgaW4gdGFyZ2V0XG4gICAgICA/IHRoaXMucmVuZGVyTmF0aXZlSW5zdHJ1Y3Rpb25zKHRhcmdldCwgaW5zdHJ1Y3Rpb25zKVxuICAgICAgOiB0aGlzLnJlbmRlck93bkluc3RydWN0aW9ucyh0aGlzLmdldFN0cmlwQ29udGFpbmVyRWwodGFyZ2V0KSwgaW5zdHJ1Y3Rpb25zKTtcblxuICAgIGNvbnN0IHJlZnJlc2hlcnM6IFJlZnJlc2hDb250cm9sW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgaW5zdHJ1Y3Rpb25dIG9mIGluc3RydWN0aW9ucy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHB1cnBvc2VFbCA9IHB1cnBvc2VFbHNbaW5kZXhdO1xuICAgICAgLy8gQSBob3N0IG1heSByZW5kZXIgZmV3ZXIgcHVycG9zZSBlbGVtZW50cyB0aGFuIHRoZXJlIGFyZSBpbnN0cnVjdGlvbnM7IHNraXAgcmF0aGVyIHRoYW4gdGhyb3cuXG4gICAgICBpZiAoIXB1cnBvc2VFbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Db250cm9sID0gaW5zdHJ1Y3Rpb24uZW50cnkuaW5pdEluc3RydWN0aW9uPy4ocHVycG9zZUVsLCBzY29wZSk7XG4gICAgICBjb25zdCBjaGVja0lzQXZhaWxhYmxlID0gaW5zdHJ1Y3Rpb24uZW50cnkuY2hlY2tJc0F2YWlsYWJsZTtcbiAgICAgIC8vIEEgY29udHJvbCBzaG93cyBpdHMgb3duIHByZXNzZWQgc3RhdGUgaGVyZSwgc28gYXZhaWxhYmlsaXR5IGlzIHRoZSBvbmx5IHRoaW5nIGxlZnQgdG8gcmUtc3RhdGUgXHUyMDE0XG4gICAgICAvLyBBbmQgYSBjb21tYW5kIHRoYXQgZGVjbGFyZXMgbm9uZSBuZWVkcyBubyByZWZyZXNoZXIgYXQgYWxsLlxuICAgICAgaWYgKGluc3RydWN0aW9uQ29udHJvbCAmJiBjaGVja0lzQXZhaWxhYmxlKSB7XG4gICAgICAgIHJlZnJlc2hlcnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgaW5zdHJ1Y3Rpb25Db250cm9sLnNldERpc2FibGVkKCFjaGVja0lzQXZhaWxhYmxlKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVmcmVzaGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRocm91Z2ggT2JzaWRpYW4ncyBvd24gaW5zdHJ1Y3Rpb24gYmFyLCB0aGUgd2F5IGV2ZXJ5IHtAbGluayBTdWdnZXN0TW9kYWx9IGNvbnN1bWVyIGhhcyBhbHdheXNcbiAgICogaGFkIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gbW9kYWwgLSBUaGUgc3VnZ2VzdCBtb2RhbC5cbiAgICogQHBhcmFtIGluc3RydWN0aW9ucyAtIFRoZSBpbnN0cnVjdGlvbnMgdG8gcmVuZGVyLlxuICAgKiBAcmV0dXJucyBUaGUgcHVycG9zZSBlbGVtZW50IG9mIGVhY2ggcmVuZGVyZWQgaW5zdHJ1Y3Rpb24uXG4gICAqL1xuICBwcml2YXRlIHJlbmRlck5hdGl2ZUluc3RydWN0aW9ucyhtb2RhbDogU3VnZ2VzdE1vZGFsPHVua25vd24+LCBpbnN0cnVjdGlvbnM6IEluc3RydWN0aW9uRXhbXSk6IEhUTUxTcGFuRWxlbWVudFtdIHtcbiAgICBtb2RhbC5zZXRJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKTtcbiAgICByZXR1cm4gWy4uLm1vZGFsLmluc3RydWN0aW9uc0VsLmZpbmRBbGwoJy5wcm9tcHQtaW5zdHJ1Y3Rpb24gPiBzcGFuOm50aC1jaGlsZCgyKScpXSBhcyBIVE1MU3BhbkVsZW1lbnRbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGFuIGluc3RydWN0aW9uIGJhciBvZiB0aGUgYnVpbGRlcidzIG93biwgZm9yIGEgaG9zdCB0aGF0IGhhcyBub25lLlxuICAgKlxuICAgKiBUaGUgbWFya3VwIG1pcnJvcnMgd2hhdCBgc2V0SW5zdHJ1Y3Rpb25zYCBwcm9kdWNlcyBcdTIwMTQgaW5jbHVkaW5nXG4gICAqIHtAbGluayBDc3NDbGFzcy5Qcm9tcHRJbnN0cnVjdGlvbkNvbW1hbmR9IG9uIHRoZSBrZXkgaGludCwgd2hpY2ggaXMgbm90IGRlY29yYXRpb246IE9ic2lkaWFuJ3MgcnVsZVxuICAgKiBmb3IgdGhhdCBjbGFzcyBpcyB3aGF0IHN1cHBsaWVzIHRoZSBoaW50J3MgYm9sZCB3ZWlnaHQgYW5kIHRoZSBgbWFyZ2luLWlubGluZS1lbmRgIHNlcGFyYXRpbmcgaXRcbiAgICogZnJvbSB0aGUgcHVycG9zZSB0ZXh0LiBFdmVyeSBjbGFzcyBoZXJlIGlzIHVuc2NvcGVkIGluIHRoZSBhcHAncyBzdHlsZXNoZWV0LCBzbyBhbGwgb2YgaXQgcmVhY2hlcyBhXG4gICAqIHBsYWluIHtAbGluayBNb2RhbH0gYXMgcmVhZGlseSBhcyBpdCByZWFjaGVzIHRoZSBxdWljayBzd2l0Y2hlci5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGVsZW1lbnQgdG8gYXBwZW5kIHRoZSBiYXIgdG8uXG4gICAqIEBwYXJhbSBpbnN0cnVjdGlvbnMgLSBUaGUgaW5zdHJ1Y3Rpb25zIHRvIHJlbmRlci5cbiAgICogQHJldHVybnMgVGhlIHB1cnBvc2UgZWxlbWVudCBvZiBlYWNoIHJlbmRlcmVkIGluc3RydWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJPd25JbnN0cnVjdGlvbnMoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCBpbnN0cnVjdGlvbnM6IEluc3RydWN0aW9uRXhbXSk6IEhUTUxTcGFuRWxlbWVudFtdIHtcbiAgICBjb25zdCBpbnN0cnVjdGlvbnNFbCA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdihDc3NDbGFzcy5Qcm9tcHRJbnN0cnVjdGlvbnMpO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoaW5zdHJ1Y3Rpb25zRWwsIENzc0NsYXNzLk1vZGFsQ29tbWFuZHMpO1xuXG4gICAgcmV0dXJuIGluc3RydWN0aW9ucy5tYXAoKGluc3RydWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbkVsID0gaW5zdHJ1Y3Rpb25zRWwuY3JlYXRlRGl2KENzc0NsYXNzLlByb21wdEluc3RydWN0aW9uKTtcbiAgICAgIGluc3RydWN0aW9uRWwuY3JlYXRlU3Bhbih7IGNsczogQ3NzQ2xhc3MuUHJvbXB0SW5zdHJ1Y3Rpb25Db21tYW5kLCB0ZXh0OiBpbnN0cnVjdGlvbi5jb21tYW5kIH0pO1xuICAgICAgcmV0dXJuIGluc3RydWN0aW9uRWwuY3JlYXRlU3Bhbih7IHRleHQ6IGluc3RydWN0aW9uLnB1cnBvc2UgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBGbGlwcyBhIGNoZWNrYm94IGFuZCBhbm5vdW5jZXMgaXQsIHVubGVzcyBpdCBpcyBkaXNhYmxlZC5cbiAqXG4gKiBTaGFyZWQgYnkgdGhlIHNob3J0Y3V0IGFuZCB0aGUgYnV0dG9uIHNvIHRoZSB0d28gcm91dGVzIGNhbm5vdCBkcmlmdCBcdTIwMTQgaW5jbHVkaW5nIHRoZSBkaXNhYmxlZCBndWFyZCxcbiAqIHdoaWNoIGlzIHRoZSBoYWxmIG1vc3QgZWFzaWx5IGZvcmdvdHRlbiBvbiBvbmUgb2YgdGhlbS5cbiAqXG4gKiBAcGFyYW0gY2hlY2tib3hFbCAtIFRoZSBjaGVja2JveCB0byB0b2dnbGUuXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUNoZWNrYm94KGNoZWNrYm94RWw6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgaWYgKGNoZWNrYm94RWwuZGlzYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY2hlY2tib3hFbC5jaGVja2VkID0gIWNoZWNrYm94RWwuY2hlY2tlZDtcbiAgY2hlY2tib3hFbC50cmlnZ2VyKCdjaGFuZ2UnKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7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
|
package/dist/styles.css
CHANGED
|
@@ -301,6 +301,10 @@ body:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {
|
|
|
301
301
|
padding: var(--size-4-2) var(--size-4-3);
|
|
302
302
|
border-top: 1px solid var(--background-modifier-border);
|
|
303
303
|
}
|
|
304
|
+
.obsidian-dev-utils.modal-command-control {
|
|
305
|
+
margin-inline-start: var(--size-2-2);
|
|
306
|
+
vertical-align: middle;
|
|
307
|
+
}
|
|
304
308
|
.obsidian-dev-utils.modal-command {
|
|
305
309
|
display: inline-flex;
|
|
306
310
|
align-items: baseline;
|
|
@@ -490,4 +494,4 @@ body button:not(.clickable-icon) {
|
|
|
490
494
|
width: max-content;
|
|
491
495
|
}
|
|
492
496
|
|
|
493
|
-
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-commands.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/plugin-suggestion.scss%22,%22../src/styles/popover.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;ACvBA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;;;ACFJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACpGN;EACE;EACA;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKF;EACE;EACA;EACA;;AAKF;EACE;EACA;;AAIJ;EACE;EACA;;AAGA;EACE;EACA;;;AC3DF;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;AChCF;EACE;;;ACFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;ACRJ;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACON;EACE;;;ACTE;EACE;;;ACKJ;EAPA;;AAuBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAvBJ;;AA6BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-dev-utils%60.%5Cn.obsidian-dev-utils-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-dev-utils-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-dev-utils-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-dev-utils-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20//%20The%20strip%20of%20commands%20along%20the%20bottom%20of%20a%20modal.%5Cn%20%20//%5Cn%20%20//%20In%20%60Instructions%60%20render%20mode%20it%20also%20carries%20Obsidian's%20own%20%60.prompt-instructions%60,%20so%20this%20rule%20only%5Cn%20%20//%20has%20to%20supply%20the%20separator%20and%20the%20wrapping%20that%20a%20self-created%20bar%20does%20not%20inherit;%20in%20%60Buttons%60%5Cn%20%20//%20mode%20it%20is%20the%20whole%20strip.%5Cn%20%20&.modal-commands%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20gap:%20var(--size-2-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border-top:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%7D%5Cn%5Cn%20%20//%20One%20command%20button.%20Replaces%20the%20instruction%20bar%20rather%20than%20supplementing%20it:%20the%20bar%20can%20only%20ever%5Cn%20%20//%20say%20which%20key%20to%20press,%20and%20on%20a%20phone%20there%20is%20no%20modifier%20key%20to%20press,%20so%20every%20control%20it%20names%5Cn%20%20//%20is%20unreachable%20there.%5Cn%20%20&.modal-command%20%7B%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%20%20align-items:%20baseline;%5Cn%20%20%20%20gap:%20var(--size-2-2);%5Cn%5Cn%20%20%20%20//%20Comfortably%20tappable%20on%20a%20phone,%20where%20this%20strip%20is%20the%20only%20way%20in.%5Cn%20%20%20%20min-height:%20var(--size-4-8);%5Cn%20%20%20%20padding:%20var(--size-2-1)%20var(--size-4-2);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20background-color:%20var(--background-secondary);%5Cn%20%20%20%20color:%20var(--text-muted);%5Cn%20%20%20%20font-size:%20var(--font-ui-smaller);%5Cn%20%20%20%20white-space:%20nowrap;%5Cn%20%20%20%20cursor:%20pointer;%5Cn%5Cn%20%20%20%20&:hover:not(:disabled)%20%7B%5Cn%20%20%20%20%20%20background-color:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20toggle%20that%20is%20ON.%20An%20action%20never%20carries%20it%20%E2%80%94%20it%20does%20something%20and%20is%20done,%20so%20there%20is%20no%5Cn%20%20%20%20//%20state%20for%20it%20to%20show.%5Cn%20%20%20%20&.is-active%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20background-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20Disabled%20rather%20than%20removed:%20a%20strip%20that%20lost%20buttons%20as%20modes%20change%20would%20reflow%20under%20the%5Cn%20%20%20%20//%20pointer,%20which%20on%20a%20phone%20means%20a%20mis-tap.%5Cn%20%20%20%20&:disabled%20%7B%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%20%20cursor:%20default;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.modal-command-hotkey%20%7B%5Cn%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20font-size:%20var(--font-smallest);%5Cn%5Cn%20%20%20%20//%20Faint%20against%20the%20surface%20is%20right;%20faint%20against%20the%20accent%20fill%20is%20invisible.%5Cn%20%20%20%20.modal-command.is-active%20&%20%7B%5Cn%20%20%20%20%20%20opacity:%200.7;%5Cn%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-suggestion-banner%20%7B%5Cn%20%20%20%20background-color:%20var(--background-secondary);%5Cn%20%20%20%20border-left:%20var(--size-2-1)%20solid%20var(--text-accent);%5Cn%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-4);%5Cn%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%5Cn%20%20%20%20button%20%7B%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20A%20popover%20is%20anchored%20at%20a%20point%20and%20appended%20to%20the%20document%20body,%20outside%20any%20plugin-scoped%5Cn//%20container,%20so%20it%20is%20positioned%20absolutely%20at%20the%20top%20level.%20It%20borrows%20Obsidian's%20%60.menu%60%20look,%5Cn//%20which%20already%20carries%20the%20popup%20background,%20border%20and%20shadow%20%E2%80%94%20only%20layout%20is%20set%20here.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20&.popover%20%7B%5Cn%20%20%20%20//%20Deliberately%20not%20%60calc(100vw%20-%2016px)%60:%20the%20SCSS%20compiler%20strips%20the%20%60calc(%60%20wrapper%20inside%5Cn%20%20%20%20//%20%60min()%60,%20which%20yields%20invalid%20CSS.%20A%20viewport%20percentage%20keeps%20a%20narrow%20window's%20popover%20on%5Cn%20%20%20%20//%20screen.%5Cn%20%20%20%20max-width:%20min(420px,%2090vw);%5Cn%20%20%20%20min-width:%20320px;%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20z-index:%20var(--layer-menu);%5Cn%5Cn%20%20%20%20//%20Setting%20rows%20are%20built%20for%20a%20full-width%20settings%20tab;%20compact%20them%20for%20a%20popover.%5Cn%20%20%20%20.setting-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20border-top:%20none;%5Cn%20%20%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20%20%20padding:%20var(--size-2-1)%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-info%20%7B%5Cn%20%20%20%20%20%20margin-right:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20justify-content:%20flex-end;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20input%5Btype='text'%5D%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20with%20a%5Cn//%20%60body%60-prefixed%20selector%20(specificity%200,1,2)%20so%20it%20wins%20over%20tldraw's%20(0,1,1)%20while%5Cn//%20Staying%20correct%20for%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cnbody%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn//%20An%20input%20the%20user%20has%20not%20interacted%20with%20yet%20carries%20%60.untouched%60%20(set%20by%20%60PromptModal%60),%20so%20a%20modal%20that%5Cn//%20opens%20invalid%20by%20design%20does%20not%20greet%20the%20user%20in%20red.%20Both%20blocks%20below%20must%20be%20gated:%20the%20input%20is%5Cn//%20focused%20on%20open,%20so%20the%20focus%20block%20alone%20would%20keep%20painting%20it.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */
|
|
497
|
+
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-commands.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/plugin-suggestion.scss%22,%22../src/styles/popover.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;ACvBA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;;;ACFJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACpGN;EACE;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;;AAMF;EACE;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKF;EACE;EACA;EACA;;AAKF;EACE;EACA;;AAIJ;EACE;EACA;;AAGA;EACE;EACA;;;ACpEF;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;AChCF;EACE;;;ACFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;ACRJ;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACON;EACE;;;ACTE;EACE;;;ACKJ;EAPA;;AAuBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAvBJ;;AA6BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-dev-utils%60.%5Cn.obsidian-dev-utils-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-dev-utils-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-dev-utils-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-dev-utils-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20//%20The%20strip%20of%20commands%20along%20the%20bottom%20of%20a%20modal.%5Cn%20%20//%5Cn%20%20//%20In%20%60Instructions%60%20render%20mode%20it%20also%20carries%20Obsidian's%20own%20%60.prompt-instructions%60%20%E2%80%94%20whose%20rule%20is%5Cn%20%20//%20unscoped,%20so%20it%20applies%20to%20a%20plain%20%60Modal%60%20too%20%E2%80%94%20and%20this%20one%20only%20re-tunes%20that%20rule's%20%60gap%60%20and%5Cn%20%20//%20%60padding%60%20and%20adds%20the%20separator;%20in%20%60Buttons%60%20mode%20it%20is%20the%20whole%20strip.%5Cn%20%20&.modal-commands%20%7B%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-wrap:%20wrap;%5Cn%20%20%20%20gap:%20var(--size-2-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border-top:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%7D%5Cn%5Cn%20%20//%20A%20control%20the%20%60Instructions%60%20renderer%20injects%20into%20an%20instruction's%20purpose%20text%20%E2%80%94%20a%20checkbox,%20a%5Cn%20%20//%20dropdown.%20Obsidian%20styles%20the%20instruction%20bar%20itself,%20but%20its%20own%20bar%20never%20contains%20a%20control,%20so%5Cn%20%20//%20nothing%20upstream%20separates%20one%20from%20the%20label%20it%20belongs%20to.%20Sits%20on%20the%20control%20rather%20than%20on%20the%5Cn%20%20//%20strip,%20so%20it%20reaches%20a%20%60SuggestModal%60's%20native%20bar%20as%20well%20as%20a%20self-created%20one.%5Cn%20%20&.modal-command-control%20%7B%5Cn%20%20%20%20margin-inline-start:%20var(--size-2-2);%5Cn%20%20%20%20vertical-align:%20middle;%5Cn%20%20%7D%5Cn%5Cn%20%20//%20One%20command%20button.%20Replaces%20the%20instruction%20bar%20rather%20than%20supplementing%20it:%20the%20bar%20can%20only%20ever%5Cn%20%20//%20say%20which%20key%20to%20press,%20and%20on%20a%20phone%20there%20is%20no%20modifier%20key%20to%20press,%20so%20every%20control%20it%20names%5Cn%20%20//%20is%20unreachable%20there.%5Cn%20%20&.modal-command%20%7B%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%20%20align-items:%20baseline;%5Cn%20%20%20%20gap:%20var(--size-2-2);%5Cn%5Cn%20%20%20%20//%20Comfortably%20tappable%20on%20a%20phone,%20where%20this%20strip%20is%20the%20only%20way%20in.%5Cn%20%20%20%20min-height:%20var(--size-4-8);%5Cn%20%20%20%20padding:%20var(--size-2-1)%20var(--size-4-2);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20background-color:%20var(--background-secondary);%5Cn%20%20%20%20color:%20var(--text-muted);%5Cn%20%20%20%20font-size:%20var(--font-ui-smaller);%5Cn%20%20%20%20white-space:%20nowrap;%5Cn%20%20%20%20cursor:%20pointer;%5Cn%5Cn%20%20%20%20&:hover:not(:disabled)%20%7B%5Cn%20%20%20%20%20%20background-color:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20toggle%20that%20is%20ON.%20An%20action%20never%20carries%20it%20%E2%80%94%20it%20does%20something%20and%20is%20done,%20so%20there%20is%20no%5Cn%20%20%20%20//%20state%20for%20it%20to%20show.%5Cn%20%20%20%20&.is-active%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20background-color:%20var(--interactive-accent);%5Cn%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20Disabled%20rather%20than%20removed:%20a%20strip%20that%20lost%20buttons%20as%20modes%20change%20would%20reflow%20under%20the%5Cn%20%20%20%20//%20pointer,%20which%20on%20a%20phone%20means%20a%20mis-tap.%5Cn%20%20%20%20&:disabled%20%7B%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%20%20cursor:%20default;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.modal-command-hotkey%20%7B%5Cn%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20font-size:%20var(--font-smallest);%5Cn%5Cn%20%20%20%20//%20Faint%20against%20the%20surface%20is%20right;%20faint%20against%20the%20accent%20fill%20is%20invisible.%5Cn%20%20%20%20.modal-command.is-active%20&%20%7B%5Cn%20%20%20%20%20%20opacity:%200.7;%5Cn%20%20%20%20%20%20color:%20var(--text-on-accent);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-suggestion-banner%20%7B%5Cn%20%20%20%20background-color:%20var(--background-secondary);%5Cn%20%20%20%20border-left:%20var(--size-2-1)%20solid%20var(--text-accent);%5Cn%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20flex-direction:%20column;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-4);%5Cn%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%5Cn%20%20%20%20button%20%7B%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20A%20popover%20is%20anchored%20at%20a%20point%20and%20appended%20to%20the%20document%20body,%20outside%20any%20plugin-scoped%5Cn//%20container,%20so%20it%20is%20positioned%20absolutely%20at%20the%20top%20level.%20It%20borrows%20Obsidian's%20%60.menu%60%20look,%5Cn//%20which%20already%20carries%20the%20popup%20background,%20border%20and%20shadow%20%E2%80%94%20only%20layout%20is%20set%20here.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20&.popover%20%7B%5Cn%20%20%20%20//%20Deliberately%20not%20%60calc(100vw%20-%2016px)%60:%20the%20SCSS%20compiler%20strips%20the%20%60calc(%60%20wrapper%20inside%5Cn%20%20%20%20//%20%60min()%60,%20which%20yields%20invalid%20CSS.%20A%20viewport%20percentage%20keeps%20a%20narrow%20window's%20popover%20on%5Cn%20%20%20%20//%20screen.%5Cn%20%20%20%20max-width:%20min(420px,%2090vw);%5Cn%20%20%20%20min-width:%20320px;%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20z-index:%20var(--layer-menu);%5Cn%5Cn%20%20%20%20//%20Setting%20rows%20are%20built%20for%20a%20full-width%20settings%20tab;%20compact%20them%20for%20a%20popover.%5Cn%20%20%20%20.setting-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20border-top:%20none;%5Cn%20%20%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20%20%20padding:%20var(--size-2-1)%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-info%20%7B%5Cn%20%20%20%20%20%20margin-right:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20justify-content:%20flex-end;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20input%5Btype='text'%5D%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20with%20a%5Cn//%20%60body%60-prefixed%20selector%20(specificity%200,1,2)%20so%20it%20wins%20over%20tldraw's%20(0,1,1)%20while%5Cn//%20Staying%20correct%20for%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cnbody%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn//%20An%20input%20the%20user%20has%20not%20interacted%20with%20yet%20carries%20%60.untouched%60%20(set%20by%20%60PromptModal%60),%20so%20a%20modal%20that%5Cn//%20opens%20invalid%20by%20design%20does%20not%20greet%20the%20user%20in%20red.%20Both%20blocks%20below%20must%20be%20gated:%20the%20input%20is%5Cn//%20focused%20on%20open,%20so%20the%20focus%20block%20alone%20would%20keep%20painting%20it.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */
|