@mnaoumov/obsidian-lib 10.5.0 → 10.6.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.
Files changed (160) hide show
  1. package/README.md +6 -0
  2. package/codemirror/inline-token-widgets/package.json +6 -0
  3. package/codemirror/settings-facet/package.json +6 -0
  4. package/components/settings-facet-component/package.json +6 -0
  5. package/dist/lib/cjs/__merged.cjs +104 -1
  6. package/dist/lib/cjs/__merged.d.cts +20 -3
  7. package/dist/lib/cjs/anchored-suggest.cjs +232 -0
  8. package/dist/lib/cjs/anchored-suggest.d.cts +116 -0
  9. package/dist/lib/cjs/backlink-index.cjs +44 -8
  10. package/dist/lib/cjs/backlink-index.d.cts +23 -0
  11. package/dist/lib/cjs/bug-report.cjs +4 -2
  12. package/dist/lib/cjs/bug-report.d.cts +1 -1
  13. package/dist/lib/cjs/bulk-operation-progress.cjs +16 -1
  14. package/dist/lib/cjs/bulk-operation-progress.d.cts +22 -0
  15. package/dist/lib/cjs/case-insensitive-file-index.cjs +9 -1
  16. package/dist/lib/cjs/code-block-render-handoff.cjs +272 -0
  17. package/dist/lib/cjs/code-block-render-handoff.d.cts +131 -0
  18. package/dist/lib/cjs/codemirror/index.cjs +7 -1
  19. package/dist/lib/cjs/codemirror/index.d.cts +2 -0
  20. package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +250 -0
  21. package/dist/lib/cjs/codemirror/inline-token-widgets.d.cts +109 -0
  22. package/dist/lib/cjs/codemirror/settings-facet.cjs +132 -0
  23. package/dist/lib/cjs/codemirror/settings-facet.d.cts +19 -0
  24. package/dist/lib/cjs/community-plugins.cjs +19 -2
  25. package/dist/lib/cjs/community-plugins.d.cts +14 -0
  26. package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +5 -2
  27. package/dist/lib/cjs/components/index.cjs +4 -1
  28. package/dist/lib/cjs/components/index.d.cts +1 -0
  29. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +105 -2
  30. package/dist/lib/cjs/components/settings-facet-component.cjs +136 -0
  31. package/dist/lib/cjs/components/settings-facet-component.d.cts +68 -0
  32. package/dist/lib/cjs/css-class.cjs +8 -1
  33. package/dist/lib/cjs/css-class.d.cts +28 -0
  34. package/dist/lib/cjs/desktop-bulk-operation-git.cjs +38 -13
  35. package/dist/lib/cjs/desktop-bulk-operation-git.d.cts +21 -1
  36. package/dist/lib/cjs/desktop-request-url-stream.cjs +258 -0
  37. package/dist/lib/cjs/desktop-request-url-stream.d.cts +22 -0
  38. package/dist/lib/cjs/editor-suggest-registrar.cjs +8 -2
  39. package/dist/lib/cjs/editor-suggest-registrar.d.cts +14 -2
  40. package/dist/lib/cjs/editor-suggest.cjs +198 -0
  41. package/dist/lib/cjs/editor-suggest.d.cts +103 -0
  42. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  43. package/dist/lib/cjs/hotkey.cjs +185 -0
  44. package/dist/lib/cjs/hotkey.d.cts +59 -0
  45. package/dist/lib/cjs/i18n/locales/en.cjs +14 -1
  46. package/dist/lib/cjs/i18n/locales/en.d.cts +13 -0
  47. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +13 -0
  48. package/dist/lib/cjs/index.cjs +31 -1
  49. package/dist/lib/cjs/index.d.cts +10 -0
  50. package/dist/lib/cjs/inline-token-renderer.cjs +145 -0
  51. package/dist/lib/cjs/inline-token-renderer.d.cts +88 -0
  52. package/dist/lib/cjs/link-and-tag-input-suggest.cjs +325 -0
  53. package/dist/lib/cjs/link-and-tag-input-suggest.d.cts +229 -0
  54. package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -1
  55. package/dist/lib/cjs/markdown-code-block-processor.d.cts +18 -0
  56. package/dist/lib/cjs/markdown.cjs +6 -1
  57. package/dist/lib/cjs/markdown.d.cts +10 -1
  58. package/dist/lib/cjs/modals/modal.cjs +8 -5
  59. package/dist/lib/cjs/modals/modal.d.cts +4 -0
  60. package/dist/lib/cjs/plugin/plugin.cjs +5 -2
  61. package/dist/lib/cjs/plugin/plugin.d.cts +2 -0
  62. package/dist/lib/cjs/rendered-markdown.cjs +306 -0
  63. package/dist/lib/cjs/rendered-markdown.d.cts +77 -0
  64. package/dist/lib/cjs/request-url.cjs +523 -0
  65. package/dist/lib/cjs/request-url.d.cts +233 -0
  66. package/dist/lib/cjs/setting-components/folder-list-component.cjs +216 -0
  67. package/dist/lib/cjs/setting-components/folder-list-component.d.cts +73 -0
  68. package/dist/lib/cjs/setting-components/hotkey-component.cjs +260 -0
  69. package/dist/lib/cjs/setting-components/hotkey-component.d.cts +85 -0
  70. package/dist/lib/cjs/setting-components/index.cjs +13 -1
  71. package/dist/lib/cjs/setting-components/index.d.cts +4 -0
  72. package/dist/lib/cjs/setting-components/list-component.cjs +291 -0
  73. package/dist/lib/cjs/setting-components/list-component.d.cts +106 -0
  74. package/dist/lib/cjs/setting-components/tag-list-component.cjs +220 -0
  75. package/dist/lib/cjs/setting-components/tag-list-component.d.cts +82 -0
  76. package/dist/lib/cjs/setting-ex.cjs +51 -1
  77. package/dist/lib/cjs/setting-ex.d.cts +35 -1
  78. package/dist/lib/cjs/settings-tabs.cjs +258 -0
  79. package/dist/lib/cjs/settings-tabs.d.cts +101 -0
  80. package/dist/lib/esm/__merged.d.mts +20 -3
  81. package/dist/lib/esm/__merged.mjs +110 -2
  82. package/dist/lib/esm/anchored-suggest.d.mts +116 -0
  83. package/dist/lib/esm/anchored-suggest.mjs +144 -0
  84. package/dist/lib/esm/backlink-index.d.mts +23 -0
  85. package/dist/lib/esm/backlink-index.mjs +42 -7
  86. package/dist/lib/esm/bug-report.d.mts +1 -1
  87. package/dist/lib/esm/bug-report.mjs +4 -2
  88. package/dist/lib/esm/bulk-operation-progress.d.mts +22 -0
  89. package/dist/lib/esm/bulk-operation-progress.mjs +14 -1
  90. package/dist/lib/esm/case-insensitive-file-index.mjs +9 -1
  91. package/dist/lib/esm/code-block-render-handoff.d.mts +131 -0
  92. package/dist/lib/esm/code-block-render-handoff.mjs +183 -0
  93. package/dist/lib/esm/codemirror/index.d.mts +2 -0
  94. package/dist/lib/esm/codemirror/index.mjs +5 -1
  95. package/dist/lib/esm/codemirror/inline-token-widgets.d.mts +109 -0
  96. package/dist/lib/esm/codemirror/inline-token-widgets.mjs +167 -0
  97. package/dist/lib/esm/codemirror/settings-facet.d.mts +19 -0
  98. package/dist/lib/esm/codemirror/settings-facet.mjs +44 -0
  99. package/dist/lib/esm/community-plugins.d.mts +14 -0
  100. package/dist/lib/esm/community-plugins.mjs +18 -2
  101. package/dist/lib/esm/components/bulk-operation-commit-component.mjs +5 -2
  102. package/dist/lib/esm/components/index.d.mts +1 -0
  103. package/dist/lib/esm/components/index.mjs +3 -1
  104. package/dist/lib/esm/components/rename-delete-handler-component.mjs +105 -2
  105. package/dist/lib/esm/components/settings-facet-component.d.mts +68 -0
  106. package/dist/lib/esm/components/settings-facet-component.mjs +48 -0
  107. package/dist/lib/esm/css-class.d.mts +28 -0
  108. package/dist/lib/esm/css-class.mjs +8 -1
  109. package/dist/lib/esm/desktop-bulk-operation-git.d.mts +21 -1
  110. package/dist/lib/esm/desktop-bulk-operation-git.mjs +38 -13
  111. package/dist/lib/esm/desktop-request-url-stream.d.mts +22 -0
  112. package/dist/lib/esm/desktop-request-url-stream.mjs +170 -0
  113. package/dist/lib/esm/editor-suggest-registrar.d.mts +14 -2
  114. package/dist/lib/esm/editor-suggest-registrar.mjs +8 -2
  115. package/dist/lib/esm/editor-suggest.d.mts +103 -0
  116. package/dist/lib/esm/editor-suggest.mjs +109 -0
  117. package/dist/lib/esm/generated-during-build.mjs +2 -2
  118. package/dist/lib/esm/hotkey.d.mts +59 -0
  119. package/dist/lib/esm/hotkey.mjs +95 -0
  120. package/dist/lib/esm/i18n/locales/en.d.mts +13 -0
  121. package/dist/lib/esm/i18n/locales/en.mjs +14 -1
  122. package/dist/lib/esm/i18n/locales/translations-map.d.mts +13 -0
  123. package/dist/lib/esm/index.d.mts +10 -0
  124. package/dist/lib/esm/index.mjs +21 -1
  125. package/dist/lib/esm/inline-token-renderer.d.mts +88 -0
  126. package/dist/lib/esm/inline-token-renderer.mjs +59 -0
  127. package/dist/lib/esm/link-and-tag-input-suggest.d.mts +229 -0
  128. package/dist/lib/esm/link-and-tag-input-suggest.mjs +239 -0
  129. package/dist/lib/esm/markdown-code-block-processor.d.mts +18 -0
  130. package/dist/lib/esm/markdown-code-block-processor.mjs +16 -1
  131. package/dist/lib/esm/markdown.d.mts +10 -1
  132. package/dist/lib/esm/markdown.mjs +9 -1
  133. package/dist/lib/esm/modals/modal.d.mts +4 -0
  134. package/dist/lib/esm/modals/modal.mjs +8 -5
  135. package/dist/lib/esm/plugin/plugin.d.mts +2 -0
  136. package/dist/lib/esm/plugin/plugin.mjs +5 -2
  137. package/dist/lib/esm/rendered-markdown.d.mts +77 -0
  138. package/dist/lib/esm/rendered-markdown.mjs +219 -0
  139. package/dist/lib/esm/request-url.d.mts +233 -0
  140. package/dist/lib/esm/request-url.mjs +428 -0
  141. package/dist/lib/esm/setting-components/folder-list-component.d.mts +73 -0
  142. package/dist/lib/esm/setting-components/folder-list-component.mjs +131 -0
  143. package/dist/lib/esm/setting-components/hotkey-component.d.mts +85 -0
  144. package/dist/lib/esm/setting-components/hotkey-component.mjs +178 -0
  145. package/dist/lib/esm/setting-components/index.d.mts +4 -0
  146. package/dist/lib/esm/setting-components/index.mjs +9 -1
  147. package/dist/lib/esm/setting-components/list-component.d.mts +106 -0
  148. package/dist/lib/esm/setting-components/list-component.mjs +206 -0
  149. package/dist/lib/esm/setting-components/tag-list-component.d.mts +82 -0
  150. package/dist/lib/esm/setting-components/tag-list-component.mjs +131 -0
  151. package/dist/lib/esm/setting-ex.d.mts +35 -1
  152. package/dist/lib/esm/setting-ex.mjs +51 -1
  153. package/dist/lib/esm/settings-tabs.d.mts +101 -0
  154. package/dist/lib/esm/settings-tabs.mjs +170 -0
  155. package/dist/styles.css +83 -1
  156. package/package.json +3 -3
  157. package/setting-components/folder-list-component/package.json +6 -0
  158. package/setting-components/hotkey-component/package.json +6 -0
  159. package/setting-components/list-component/package.json +6 -0
  160. package/setting-components/tag-list-component/package.json +6 -0
@@ -38,6 +38,9 @@ import { DateComponent } from "./setting-components/date-component.mjs";
38
38
  import { DateTimeComponent } from "./setting-components/date-time-component.mjs";
39
39
  import { EmailComponent } from "./setting-components/email-component.mjs";
40
40
  import { FileComponent } from "./setting-components/file-component.mjs";
41
+ import { FolderListComponent } from "./setting-components/folder-list-component.mjs";
42
+ import { HotkeyComponent } from "./setting-components/hotkey-component.mjs";
43
+ import { ListComponent } from "./setting-components/list-component.mjs";
41
44
  import { MonthComponent } from "./setting-components/month-component.mjs";
42
45
  import { MultipleDropdownComponent } from "./setting-components/multiple-dropdown-component.mjs";
43
46
  import { MultipleEmailComponent } from "./setting-components/multiple-email-component.mjs";
@@ -45,6 +48,7 @@ import { MultipleFileComponent } from "./setting-components/multiple-file-compon
45
48
  import { MultipleTextComponent } from "./setting-components/multiple-text-component.mjs";
46
49
  import { NumberComponent } from "./setting-components/number-component.mjs";
47
50
  import { PasswordComponent } from "./setting-components/password-component.mjs";
51
+ import { TagListComponent } from "./setting-components/tag-list-component.mjs";
48
52
  import { TelephoneComponent } from "./setting-components/telephone-component.mjs";
49
53
  import { TimeComponent } from "./setting-components/time-component.mjs";
50
54
  import { TriStateCheckboxComponent } from "./setting-components/tri-state-checkbox-component.mjs";
@@ -122,6 +126,38 @@ class SettingEx extends Setting {
122
126
  addFile(callback) {
123
127
  return this.addComponentClass(FileComponent, callback);
124
128
  }
129
+ /**
130
+ * Adds a {@link FolderListComponent} to the setting.
131
+ *
132
+ * @param app - The Obsidian app, for the folder suggest.
133
+ * @param callback - The callback to call with the component.
134
+ * @returns The setting instance.
135
+ */
136
+ addFolderList(app, callback) {
137
+ return this.addComponent((element) => {
138
+ const component = new FolderListComponent(element, app);
139
+ callback(component);
140
+ return component;
141
+ });
142
+ }
143
+ /**
144
+ * Adds a {@link HotkeyComponent} to the setting.
145
+ *
146
+ * @param callback - The callback to call with the component.
147
+ * @returns The setting instance.
148
+ */
149
+ addHotkey(callback) {
150
+ return this.addComponentClass(HotkeyComponent, callback);
151
+ }
152
+ /**
153
+ * Adds a {@link ListComponent} to the setting.
154
+ *
155
+ * @param callback - The callback to call with the component.
156
+ * @returns The setting instance.
157
+ */
158
+ addList(callback) {
159
+ return this.addComponentClass(ListComponent, callback);
160
+ }
125
161
  /**
126
162
  * Adds a {@link MonthComponent} to the setting.
127
163
  *
@@ -185,6 +221,20 @@ class SettingEx extends Setting {
185
221
  addPassword(callback) {
186
222
  return this.addComponentClass(PasswordComponent, callback);
187
223
  }
224
+ /**
225
+ * Adds a {@link TagListComponent} to the setting.
226
+ *
227
+ * @param app - The Obsidian app, for the tag suggest.
228
+ * @param callback - The callback to call with the component.
229
+ * @returns The setting instance.
230
+ */
231
+ addTagList(app, callback) {
232
+ return this.addComponent((element) => {
233
+ const component = new TagListComponent(element, app);
234
+ callback(component);
235
+ return component;
236
+ });
237
+ }
188
238
  /**
189
239
  * Adds a {@link TelephoneComponent} to the setting.
190
240
  *
@@ -262,4 +312,4 @@ export {
262
312
  SettingEx,
263
313
  adoptSettingEx
264
314
  };
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXR0aW5nLWV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFeHRlbmRzIHRoZSBTZXR0aW5nIGNsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBhZGRpbmcgY29tcG9uZW50cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGNhc3RUbyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL3NldHRpbmctY29tcG9uZW50cy9jaGVja2JveC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29kZUhpZ2hsaWdodGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvY29kZS1oaWdobGlnaHRlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgRGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL2RhdGUtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IERhdGVUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvZGF0ZS10aW1lLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBFbWFpbENvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL2VtYWlsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBGaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvZmlsZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTW9udGhDb21wb25lbnQgfSBmcm9tICcuL3NldHRpbmctY29tcG9uZW50cy9tb250aC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL211bHRpcGxlLWRyb3Bkb3duLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBNdWx0aXBsZUVtYWlsQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvbXVsdGlwbGUtZW1haWwtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE11bHRpcGxlRmlsZUNvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL211bHRpcGxlLWZpbGUtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE11bHRpcGxlVGV4dENvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL211bHRpcGxlLXRleHQtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE51bWJlckNvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL251bWJlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGFzc3dvcmRDb21wb25lbnQgfSBmcm9tICcuL3NldHRpbmctY29tcG9uZW50cy9wYXNzd29yZC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVGVsZXBob25lQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvdGVsZXBob25lLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvdGltZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVHJpU3RhdGVDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL3RyaS1zdGF0ZS1jaGVja2JveC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVHlwZWREcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL3R5cGVkLWRyb3Bkb3duLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBUeXBlZE11bHRpcGxlRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL3NldHRpbmctY29tcG9uZW50cy90eXBlZC1tdWx0aXBsZS1kcm9wZG93bi1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVXJsQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvdXJsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBXZWVrQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvd2Vlay1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIEV4dGVuZHMgdGhlIFNldHRpbmcgY2xhc3Mgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGFkZGluZyBjb21wb25lbnRzLlxuICovXG5leHBvcnQgY2xhc3MgU2V0dGluZ0V4IGV4dGVuZHMgU2V0dGluZyB7XG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIENoZWNrYm94Q29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRDaGVja2JveChjYWxsYmFjazogKGNoZWNrYm94OiBDaGVja2JveENvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKENoZWNrYm94Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBDb2RlSGlnaGxpZ2h0ZXJDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZENvZGVIaWdobGlnaHRlcihjYWxsYmFjazogKGNvZGVIaWdobGlnaHRlcjogQ29kZUhpZ2hsaWdodGVyQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoQ29kZUhpZ2hsaWdodGVyQ29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNvbXBvbmVudCB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjb21wb25lbnRDbGFzcyAtIFRoZSBjbGFzcyBvZiB0aGUgY29tcG9uZW50IHRvIGFkZC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRDb21wb25lbnRDbGFzczxUIGV4dGVuZHMgQmFzZUNvbXBvbmVudD4oY29tcG9uZW50Q2xhc3M6IG5ldyAoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSA9PiBULCBjYWxsYmFjazogKGNvbXBvbmVudDogVCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudCgoZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gbmV3IGNvbXBvbmVudENsYXNzKGVsZW1lbnQpO1xuICAgICAgY2FsbGJhY2soY29tcG9uZW50KTtcbiAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBEYXRlQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGREYXRlKGNhbGxiYWNrOiAoZGF0ZTogRGF0ZUNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKERhdGVDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIERhdGVUaW1lQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGREYXRlVGltZShjYWxsYmFjazogKGRhdGVUaW1lOiBEYXRlVGltZUNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKERhdGVUaW1lQ29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiB7QGxpbmsgRW1haWxDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZEVtYWlsKGNhbGxiYWNrOiAoZW1haWw6IEVtYWlsQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoRW1haWxDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIEZpbGVDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZEZpbGUoY2FsbGJhY2s6IChmaWxlOiBGaWxlQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoRmlsZUNvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgTW9udGhDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZE1vbnRoKGNhbGxiYWNrOiAobW9udGg6IE1vbnRoQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoTW9udGhDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIE11bHRpcGxlRHJvcGRvd25Db21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZE11bHRpcGxlRHJvcGRvd24oY2FsbGJhY2s6IChtdWx0aXBsZURyb3Bkb3duOiBNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgTXVsdGlwbGVFbWFpbENvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkTXVsdGlwbGVFbWFpbChjYWxsYmFjazogKG11bHRpcGxlRW1haWw6IE11bHRpcGxlRW1haWxDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhNdWx0aXBsZUVtYWlsQ29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBNdWx0aXBsZUZpbGVDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZE11bHRpcGxlRmlsZShjYWxsYmFjazogKG11bHRpcGxlRmlsZTogTXVsdGlwbGVGaWxlQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoTXVsdGlwbGVGaWxlQ29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBNdWx0aXBsZVRleHRDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZE11bHRpcGxlVGV4dChjYWxsYmFjazogKG11bHRpcGxlVGV4dDogTXVsdGlwbGVUZXh0Q29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoTXVsdGlwbGVUZXh0Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBOdW1iZXJDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZE51bWJlcihjYWxsYmFjazogKCRudW1iZXI6IE51bWJlckNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKE51bWJlckNvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgUGFzc3dvcmRDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFBhc3N3b3JkKGNhbGxiYWNrOiAocGFzc3dvcmQ6IFBhc3N3b3JkQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoUGFzc3dvcmRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFRlbGVwaG9uZUNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkVGVsZXBob25lKGNhbGxiYWNrOiAodGVsZXBob25lOiBUZWxlcGhvbmVDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhUZWxlcGhvbmVDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFRpbWVDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFRpbWUoY2FsbGJhY2s6ICh0aW1lOiBUaW1lQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoVGltZUNvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgVHJpU3RhdGVDaGVja2JveENvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkVHJpU3RhdGVDaGVja2JveChjYWxsYmFjazogKHRyaVN0YXRlQ2hlY2tib3g6IFRyaVN0YXRlQ2hlY2tib3hDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhUcmlTdGF0ZUNoZWNrYm94Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBUeXBlZERyb3Bkb3duQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRyb3Bkb3duIGl0ZW1zLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFR5cGVkRHJvcGRvd248VD4oY2FsbGJhY2s6ICh0eXBlZERyb3Bkb3duOiBUeXBlZERyb3Bkb3duQ29tcG9uZW50PFQ+KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoVHlwZWREcm9wZG93bkNvbXBvbmVudDxUPiwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgVHlwZWRNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGl0ZW1zIGluIHRoZSBkcm9wZG93bi5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRUeXBlZE11bHRpcGxlRHJvcGRvd248VD4oY2FsbGJhY2s6ICh0eXBlZE11bHRpcGxlRHJvcGRvd246IFR5cGVkTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudDxUPikgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKFR5cGVkTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudDxUPiwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4ge0BsaW5rIFVybENvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkVXJsKGNhbGxiYWNrOiAodXJsOiBVcmxDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhVcmxDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFdlZWtDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFdlZWsoY2FsbGJhY2s6ICh3ZWVrOiBXZWVrQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoV2Vla0NvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG59XG5cbi8qKlxuICogQWRvcHRzIGEgcGxhaW4ge0BsaW5rIFNldHRpbmd9IGludG8gYSB7QGxpbmsgU2V0dGluZ0V4fSwgcmV0dXJuaW5nIHRoZSB2ZXJ5IHNhbWUgaW5zdGFuY2UuXG4gKlxuICogT2JzaWRpYW4ncyBkZWNsYXJhdGl2ZSBzZXR0aW5ncyBBUEkgY3JlYXRlcyB0aGUgcm93IGl0c2VsZiBhbmQgaGFuZHMgYSBwbGFpbiB7QGxpbmsgU2V0dGluZ30gdG8gYVxuICogYFNldHRpbmdEZWZpbml0aW9uUmVuZGVyLnJlbmRlcmAgY2FsbGJhY2ssIHNvIHRoZSBleHRlbmRlZCBhZGRlcnMgYXJlIG91dCBvZiByZWFjaCB0aGVyZS4gUmUtcG9pbnRpbmcgdGhlXG4gKiBpbnN0YW5jZSdzIHByb3RvdHlwZSBhdCB7QGxpbmsgU2V0dGluZ0V4LnByb3RvdHlwZX0gbWFrZXMgdGhlbSBhdmFpbGFibGUgb24gdGhlIG9iamVjdCBPYnNpZGlhbiBhbHJlYWR5XG4gKiBvd25zIGFuZCBrZWVwcyByZW5kZXJpbmc6IHtAbGluayBTZXR0aW5nRXh9IGRlY2xhcmVzIG5vIGluc3RhbmNlIHN0YXRlIGFuZCBpdHMgY29uc3RydWN0b3Igb25seSBkZWxlZ2F0ZXNcbiAqIHRvIGBzdXBlcmAsIGFuZCBgU2V0dGluZ0V4LnByb3RvdHlwZWAgaW5oZXJpdHMgZnJvbSB0aGUgdmVyeSBgU2V0dGluZy5wcm90b3R5cGVgIHRoZSBpbnN0YW5jZSBjYW1lIGZyb20sXG4gKiBzbyBldmVyeSBtZXRob2QgT2JzaWRpYW4gcmVsaWVzIG9uIOKAlCBpbmNsdWRpbmcgdGhlIG9uZXMgYWJzZW50IGZyb20gdGhlIHB1YmxpYyB0eXBpbmdzIOKAlCBzdGF5cyByZWFjaGFibGUuXG4gKlxuICogQHBhcmFtIHNldHRpbmcgLSBUaGUgc2V0dGluZyB0byBhZG9wdC5cbiAqIEByZXR1cm5zIFRoZSBzYW1lIGluc3RhbmNlLCB0eXBlZCBhcyBhIHtAbGluayBTZXR0aW5nRXh9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRvcHRTZXR0aW5nRXgoc2V0dGluZzogU2V0dGluZyk6IFNldHRpbmdFeCB7XG4gIGlmIChzZXR0aW5nIGluc3RhbmNlb2YgU2V0dGluZ0V4KSB7XG4gICAgcmV0dXJuIHNldHRpbmc7XG4gIH1cblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc2V0dGluZywgU2V0dGluZ0V4LnByb3RvdHlwZSk7XG4gIHJldHVybiBjYXN0VG88U2V0dGluZ0V4PihzZXR0aW5nKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLGNBQWM7QUFDdkIsU0FBUyxlQUFlO0FBRXhCLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMscUJBQXFCO0FB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
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXR0aW5nLWV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFeHRlbmRzIHRoZSBTZXR0aW5nIGNsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBhZGRpbmcgY29tcG9uZW50cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgQmFzZUNvbXBvbmVudFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGNhc3RUbyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL3NldHRpbmctY29tcG9uZW50cy9jaGVja2JveC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29kZUhpZ2hsaWdodGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvY29kZS1oaWdobGlnaHRlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgRGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL2RhdGUtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IERhdGVUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvZGF0ZS10aW1lLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBFbWFpbENvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL2VtYWlsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBGaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvZmlsZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgRm9sZGVyTGlzdENvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL2ZvbGRlci1saXN0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBIb3RrZXlDb21wb25lbnQgfSBmcm9tICcuL3NldHRpbmctY29tcG9uZW50cy9ob3RrZXktY29tcG9uZW50LnRzJztcbmltcG9ydCB7IExpc3RDb21wb25lbnQgfSBmcm9tICcuL3NldHRpbmctY29tcG9uZW50cy9saXN0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBNb250aENvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL21vbnRoLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvbXVsdGlwbGUtZHJvcGRvd24tY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE11bHRpcGxlRW1haWxDb21wb25lbnQgfSBmcm9tICcuL3NldHRpbmctY29tcG9uZW50cy9tdWx0aXBsZS1lbWFpbC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTXVsdGlwbGVGaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvbXVsdGlwbGUtZmlsZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTXVsdGlwbGVUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvbXVsdGlwbGUtdGV4dC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgTnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvbnVtYmVyLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQYXNzd29yZENvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL3Bhc3N3b3JkLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBUYWdMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvdGFnLWxpc3QtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFRlbGVwaG9uZUNvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL3RlbGVwaG9uZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVGltZUNvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL3RpbWUtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFRyaVN0YXRlQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL3NldHRpbmctY29tcG9uZW50cy90cmktc3RhdGUtY2hlY2tib3gtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFR5cGVkRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL3NldHRpbmctY29tcG9uZW50cy90eXBlZC1kcm9wZG93bi1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVHlwZWRNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9zZXR0aW5nLWNvbXBvbmVudHMvdHlwZWQtbXVsdGlwbGUtZHJvcGRvd24tY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFVybENvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL3VybC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgV2Vla0NvbXBvbmVudCB9IGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL3dlZWstY29tcG9uZW50LnRzJztcblxuLyoqXG4gKiBFeHRlbmRzIHRoZSBTZXR0aW5nIGNsYXNzIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBhZGRpbmcgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNldHRpbmdFeCBleHRlbmRzIFNldHRpbmcge1xuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBDaGVja2JveENvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkQ2hlY2tib3goY2FsbGJhY2s6IChjaGVja2JveDogQ2hlY2tib3hDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhDaGVja2JveENvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgQ29kZUhpZ2hsaWdodGVyQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRDb2RlSGlnaGxpZ2h0ZXIoY2FsbGJhY2s6IChjb2RlSGlnaGxpZ2h0ZXI6IENvZGVIaWdobGlnaHRlckNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKENvZGVIaWdobGlnaHRlckNvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb21wb25lbnQgdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnQgdG8gYWRkLlxuICAgKiBAcGFyYW0gY29tcG9uZW50Q2xhc3MgLSBUaGUgY2xhc3Mgb2YgdGhlIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkQ29tcG9uZW50Q2xhc3M8VCBleHRlbmRzIEJhc2VDb21wb25lbnQ+KGNvbXBvbmVudENsYXNzOiBuZXcgKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkgPT4gVCwgY2FsbGJhY2s6IChjb21wb25lbnQ6IFQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnQoKGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBjb21wb25lbnRDbGFzcyhlbGVtZW50KTtcbiAgICAgIGNhbGxiYWNrKGNvbXBvbmVudCk7XG4gICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgRGF0ZUNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkRGF0ZShjYWxsYmFjazogKGRhdGU6IERhdGVDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhEYXRlQ29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBEYXRlVGltZUNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkRGF0ZVRpbWUoY2FsbGJhY2s6IChkYXRlVGltZTogRGF0ZVRpbWVDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhEYXRlVGltZUNvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4ge0BsaW5rIEVtYWlsQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRFbWFpbChjYWxsYmFjazogKGVtYWlsOiBFbWFpbENvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKEVtYWlsQ29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBGaWxlQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRGaWxlKGNhbGxiYWNrOiAoZmlsZTogRmlsZUNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKEZpbGVDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIEZvbGRlckxpc3RDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCwgZm9yIHRoZSBmb2xkZXIgc3VnZ2VzdC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRGb2xkZXJMaXN0KGFwcDogQXBwLCBjYWxsYmFjazogKGZvbGRlckxpc3Q6IEZvbGRlckxpc3RDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnQoKGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBGb2xkZXJMaXN0Q29tcG9uZW50KGVsZW1lbnQsIGFwcCk7XG4gICAgICBjYWxsYmFjayhjb21wb25lbnQpO1xuICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIEhvdGtleUNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkSG90a2V5KGNhbGxiYWNrOiAoaG90a2V5OiBIb3RrZXlDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhIb3RrZXlDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIExpc3RDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZExpc3QoY2FsbGJhY2s6IChsaXN0OiBMaXN0Q29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoTGlzdENvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgTW9udGhDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZE1vbnRoKGNhbGxiYWNrOiAobW9udGg6IE1vbnRoQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoTW9udGhDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIE11bHRpcGxlRHJvcGRvd25Db21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZE11bHRpcGxlRHJvcGRvd24oY2FsbGJhY2s6IChtdWx0aXBsZURyb3Bkb3duOiBNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgTXVsdGlwbGVFbWFpbENvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkTXVsdGlwbGVFbWFpbChjYWxsYmFjazogKG11bHRpcGxlRW1haWw6IE11bHRpcGxlRW1haWxDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhNdWx0aXBsZUVtYWlsQ29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBNdWx0aXBsZUZpbGVDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZE11bHRpcGxlRmlsZShjYWxsYmFjazogKG11bHRpcGxlRmlsZTogTXVsdGlwbGVGaWxlQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoTXVsdGlwbGVGaWxlQ29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBNdWx0aXBsZVRleHRDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZE11bHRpcGxlVGV4dChjYWxsYmFjazogKG11bHRpcGxlVGV4dDogTXVsdGlwbGVUZXh0Q29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoTXVsdGlwbGVUZXh0Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBOdW1iZXJDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZE51bWJlcihjYWxsYmFjazogKCRudW1iZXI6IE51bWJlckNvbXBvbmVudCkgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKE51bWJlckNvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgUGFzc3dvcmRDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFBhc3N3b3JkKGNhbGxiYWNrOiAocGFzc3dvcmQ6IFBhc3N3b3JkQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoUGFzc3dvcmRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFRhZ0xpc3RDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCwgZm9yIHRoZSB0YWcgc3VnZ2VzdC5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRUYWdMaXN0KGFwcDogQXBwLCBjYWxsYmFjazogKHRhZ0xpc3Q6IFRhZ0xpc3RDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnQoKGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBUYWdMaXN0Q29tcG9uZW50KGVsZW1lbnQsIGFwcCk7XG4gICAgICBjYWxsYmFjayhjb21wb25lbnQpO1xuICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFRlbGVwaG9uZUNvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkVGVsZXBob25lKGNhbGxiYWNrOiAodGVsZXBob25lOiBUZWxlcGhvbmVDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhUZWxlcGhvbmVDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFRpbWVDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFRpbWUoY2FsbGJhY2s6ICh0aW1lOiBUaW1lQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoVGltZUNvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgVHJpU3RhdGVDaGVja2JveENvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkVHJpU3RhdGVDaGVja2JveChjYWxsYmFjazogKHRyaVN0YXRlQ2hlY2tib3g6IFRyaVN0YXRlQ2hlY2tib3hDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhUcmlTdGF0ZUNoZWNrYm94Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHtAbGluayBUeXBlZERyb3Bkb3duQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRyb3Bkb3duIGl0ZW1zLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFR5cGVkRHJvcGRvd248VD4oY2FsbGJhY2s6ICh0eXBlZERyb3Bkb3duOiBUeXBlZERyb3Bkb3duQ29tcG9uZW50PFQ+KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoVHlwZWREcm9wZG93bkNvbXBvbmVudDxUPiwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB7QGxpbmsgVHlwZWRNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50fSB0byB0aGUgc2V0dGluZy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGl0ZW1zIGluIHRoZSBkcm9wZG93bi5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2l0aCB0aGUgY29tcG9uZW50LlxuICAgKiBAcmV0dXJucyBUaGUgc2V0dGluZyBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRUeXBlZE11bHRpcGxlRHJvcGRvd248VD4oY2FsbGJhY2s6ICh0eXBlZE11bHRpcGxlRHJvcGRvd246IFR5cGVkTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudDxUPikgPT4gdm9pZCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENsYXNzKFR5cGVkTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudDxUPiwgY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4ge0BsaW5rIFVybENvbXBvbmVudH0gdG8gdGhlIHNldHRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdpdGggdGhlIGNvbXBvbmVudC5cbiAgICogQHJldHVybnMgVGhlIHNldHRpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkVXJsKGNhbGxiYWNrOiAodXJsOiBVcmxDb21wb25lbnQpID0+IHZvaWQpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb21wb25lbnRDbGFzcyhVcmxDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEge0BsaW5rIFdlZWtDb21wb25lbnR9IHRvIHRoZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aXRoIHRoZSBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIFRoZSBzZXR0aW5nIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFdlZWsoY2FsbGJhY2s6ICh3ZWVrOiBXZWVrQ29tcG9uZW50KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29tcG9uZW50Q2xhc3MoV2Vla0NvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG59XG5cbi8qKlxuICogQWRvcHRzIGEgcGxhaW4ge0BsaW5rIFNldHRpbmd9IGludG8gYSB7QGxpbmsgU2V0dGluZ0V4fSwgcmV0dXJuaW5nIHRoZSB2ZXJ5IHNhbWUgaW5zdGFuY2UuXG4gKlxuICogT2JzaWRpYW4ncyBkZWNsYXJhdGl2ZSBzZXR0aW5ncyBBUEkgY3JlYXRlcyB0aGUgcm93IGl0c2VsZiBhbmQgaGFuZHMgYSBwbGFpbiB7QGxpbmsgU2V0dGluZ30gdG8gYVxuICogYFNldHRpbmdEZWZpbml0aW9uUmVuZGVyLnJlbmRlcmAgY2FsbGJhY2ssIHNvIHRoZSBleHRlbmRlZCBhZGRlcnMgYXJlIG91dCBvZiByZWFjaCB0aGVyZS4gUmUtcG9pbnRpbmcgdGhlXG4gKiBpbnN0YW5jZSdzIHByb3RvdHlwZSBhdCB7QGxpbmsgU2V0dGluZ0V4LnByb3RvdHlwZX0gbWFrZXMgdGhlbSBhdmFpbGFibGUgb24gdGhlIG9iamVjdCBPYnNpZGlhbiBhbHJlYWR5XG4gKiBvd25zIGFuZCBrZWVwcyByZW5kZXJpbmc6IHtAbGluayBTZXR0aW5nRXh9IGRlY2xhcmVzIG5vIGluc3RhbmNlIHN0YXRlIGFuZCBpdHMgY29uc3RydWN0b3Igb25seSBkZWxlZ2F0ZXNcbiAqIHRvIGBzdXBlcmAsIGFuZCBgU2V0dGluZ0V4LnByb3RvdHlwZWAgaW5oZXJpdHMgZnJvbSB0aGUgdmVyeSBgU2V0dGluZy5wcm90b3R5cGVgIHRoZSBpbnN0YW5jZSBjYW1lIGZyb20sXG4gKiBzbyBldmVyeSBtZXRob2QgT2JzaWRpYW4gcmVsaWVzIG9uIOKAlCBpbmNsdWRpbmcgdGhlIG9uZXMgYWJzZW50IGZyb20gdGhlIHB1YmxpYyB0eXBpbmdzIOKAlCBzdGF5cyByZWFjaGFibGUuXG4gKlxuICogQHBhcmFtIHNldHRpbmcgLSBUaGUgc2V0dGluZyB0byBhZG9wdC5cbiAqIEByZXR1cm5zIFRoZSBzYW1lIGluc3RhbmNlLCB0eXBlZCBhcyBhIHtAbGluayBTZXR0aW5nRXh9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRvcHRTZXR0aW5nRXgoc2V0dGluZzogU2V0dGluZyk6IFNldHRpbmdFeCB7XG4gIGlmIChzZXR0aW5nIGluc3RhbmNlb2YgU2V0dGluZ0V4KSB7XG4gICAgcmV0dXJuIHNldHRpbmc7XG4gIH1cblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc2V0dGluZywgU2V0dGluZ0V4LnByb3RvdHlwZSk7XG4gIHJldHVybiBjYXN0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
@@ -0,0 +1,101 @@
1
+ /// <reference path="./library-references.d.mts" />
2
+ /// <reference lib="dom" />
3
+ /**
4
+ * @file
5
+ *
6
+ * Tabbed sections inside a plugin's settings.
7
+ */
8
+ /**
9
+ * A tab of {@link SettingsTabs}.
10
+ */
11
+ export interface SettingsTab {
12
+ /**
13
+ * The name of an Obsidian icon shown before the name.
14
+ */
15
+ readonly icon?: string;
16
+ /**
17
+ * The id of the tab, unique among the tabs.
18
+ */
19
+ readonly id: string;
20
+ /**
21
+ * The name shown on the tab button.
22
+ */
23
+ readonly name: string;
24
+ /**
25
+ * Renders the tab's settings into the panel, which is empty each time the tab is selected.
26
+ *
27
+ * @param containerEl - The panel.
28
+ */
29
+ readonly render: (containerEl: HTMLElement) => void;
30
+ }
31
+ /**
32
+ * Tabbed sections inside a plugin's settings: a row of tab buttons and one panel, which renders only the selected tab.
33
+ * The arrow keys, Home and End move between tabs, as in the WAI-ARIA tabs pattern.
34
+ *
35
+ * ```ts
36
+ * public override display(): void {
37
+ * this.containerEl.empty();
38
+ * new SettingsTabs(this.containerEl)
39
+ * .addTab({ id: 'general', name: 'General', render: (el) => this.renderGeneral(el) })
40
+ * .addTab({ id: 'advanced', name: 'Advanced', render: (el) => this.renderAdvanced(el) })
41
+ * .selectTab(this.lastTabId)
42
+ * .onTabChange((tabId) => {
43
+ * this.lastTabId = tabId;
44
+ * });
45
+ * }
46
+ * ```
47
+ *
48
+ * In order to add the styles for the component, use {@link initPluginContext} in your plugin's `onload()` function.
49
+ *
50
+ * Alternatively, you can copy styles from {@link https://unpkg.com/@mnaoumov/obsidian-lib/dist/styles.css}.
51
+ */
52
+ export declare class SettingsTabs {
53
+ /**
54
+ * The panel the selected tab renders into.
55
+ */
56
+ readonly panelEl: HTMLElement;
57
+ /**
58
+ * The row of tab buttons.
59
+ */
60
+ readonly tabBarEl: HTMLElement;
61
+ private changeCallback?;
62
+ private readonly entries;
63
+ private selectedTabId;
64
+ /**
65
+ * Creates new settings tabs.
66
+ *
67
+ * @param containerEl - The container element.
68
+ */
69
+ constructor(containerEl: HTMLElement);
70
+ /**
71
+ * Adds a tab. The first tab added is selected.
72
+ *
73
+ * @param tab - The tab.
74
+ * @returns The tabs.
75
+ * @throws If a tab with the same id was already added.
76
+ */
77
+ addTab(tab: SettingsTab): this;
78
+ /**
79
+ * Gets the id of the selected tab.
80
+ *
81
+ * @returns The id, or `null` before any tab is added.
82
+ */
83
+ getSelectedTabId(): null | string;
84
+ /**
85
+ * Sets the callback to be called when the user selects another tab.
86
+ *
87
+ * @param callback - The callback, given the id of the selected tab.
88
+ * @returns The tabs.
89
+ */
90
+ onTabChange(callback: (tabId: string) => void): this;
91
+ /**
92
+ * Selects a tab and renders it into the panel. An unknown id, such as a stored id whose tab was since removed, leaves
93
+ * the selection as it is.
94
+ *
95
+ * @param tabId - The id of the tab.
96
+ * @returns The tabs.
97
+ */
98
+ selectTab(tabId: null | string | undefined): this;
99
+ private findEntry;
100
+ private onKeyDown;
101
+ }
@@ -0,0 +1,170 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
29
+
30
+ ensureBrowserProcess();
31
+ })();
32
+
33
+ import { setIcon } from "obsidian";
34
+ import { CssClass } from "./css-class.mjs";
35
+ import { addPluginCssClasses } from "./plugin/plugin-context.mjs";
36
+ class SettingsTabs {
37
+ /**
38
+ * The panel the selected tab renders into.
39
+ */
40
+ panelEl;
41
+ /**
42
+ * The row of tab buttons.
43
+ */
44
+ tabBarEl;
45
+ changeCallback;
46
+ entries = [];
47
+ selectedTabId = null;
48
+ /**
49
+ * Creates new settings tabs.
50
+ *
51
+ * @param containerEl - The container element.
52
+ */
53
+ constructor(containerEl) {
54
+ addPluginCssClasses(containerEl, CssClass.SettingsTabs);
55
+ this.tabBarEl = containerEl.createDiv({ attr: { role: "tablist" }, cls: "settings-tabs-bar" });
56
+ this.tabBarEl.addEventListener("keydown", this.onKeyDown.bind(this));
57
+ this.panelEl = containerEl.createDiv({ attr: { role: "tabpanel" }, cls: "settings-tabs-panel" });
58
+ }
59
+ /**
60
+ * Adds a tab. The first tab added is selected.
61
+ *
62
+ * @param tab - The tab.
63
+ * @returns The tabs.
64
+ * @throws If a tab with the same id was already added.
65
+ */
66
+ addTab(tab) {
67
+ if (this.findEntry(tab.id)) {
68
+ throw new Error(`A settings tab with the id ${tab.id} was already added.`);
69
+ }
70
+ const buttonEl = this.tabBarEl.createEl("button", { attr: { "aria-selected": "false", "role": "tab", "tabindex": "-1" }, cls: "settings-tabs-button" });
71
+ if (tab.icon) {
72
+ setIcon(buttonEl.createSpan({ cls: "settings-tabs-icon" }), tab.icon);
73
+ }
74
+ buttonEl.createSpan({ text: tab.name });
75
+ buttonEl.addEventListener("click", () => {
76
+ this.selectTab(tab.id);
77
+ });
78
+ this.entries.push({ buttonEl, tab });
79
+ if (this.selectedTabId === null) {
80
+ this.selectTab(tab.id);
81
+ }
82
+ return this;
83
+ }
84
+ /**
85
+ * Gets the id of the selected tab.
86
+ *
87
+ * @returns The id, or `null` before any tab is added.
88
+ */
89
+ getSelectedTabId() {
90
+ return this.selectedTabId;
91
+ }
92
+ /**
93
+ * Sets the callback to be called when the user selects another tab.
94
+ *
95
+ * @param callback - The callback, given the id of the selected tab.
96
+ * @returns The tabs.
97
+ */
98
+ onTabChange(callback) {
99
+ this.changeCallback = callback;
100
+ return this;
101
+ }
102
+ /**
103
+ * Selects a tab and renders it into the panel. An unknown id, such as a stored id whose tab was since removed, leaves
104
+ * the selection as it is.
105
+ *
106
+ * @param tabId - The id of the tab.
107
+ * @returns The tabs.
108
+ */
109
+ selectTab(tabId) {
110
+ const entry = this.findEntry(tabId);
111
+ if (!entry) {
112
+ return this;
113
+ }
114
+ const { tab } = entry;
115
+ const isChange = this.selectedTabId !== null && this.selectedTabId !== tab.id;
116
+ this.selectedTabId = tab.id;
117
+ for (const { buttonEl, tab: candidate } of this.entries) {
118
+ const isSelected = candidate === tab;
119
+ buttonEl.toggleClass(CssClass.IsActive, isSelected);
120
+ buttonEl.setAttribute("aria-selected", String(isSelected));
121
+ buttonEl.setAttribute("tabindex", isSelected ? "0" : "-1");
122
+ }
123
+ this.panelEl.empty();
124
+ tab.render(this.panelEl);
125
+ if (isChange) {
126
+ this.changeCallback?.(tab.id);
127
+ }
128
+ return this;
129
+ }
130
+ findEntry(tabId) {
131
+ return this.entries.find((entry) => entry.tab.id === tabId);
132
+ }
133
+ onKeyDown(event_) {
134
+ const count = this.entries.length;
135
+ const index = this.entries.findIndex((entry) => entry.tab.id === this.selectedTabId);
136
+ let nextIndex;
137
+ switch (event_.key) {
138
+ case "ArrowLeft": {
139
+ nextIndex = (index - 1 + count) % count;
140
+ break;
141
+ }
142
+ case "ArrowRight": {
143
+ nextIndex = (index + 1) % count;
144
+ break;
145
+ }
146
+ case "End": {
147
+ nextIndex = count - 1;
148
+ break;
149
+ }
150
+ case "Home": {
151
+ nextIndex = 0;
152
+ break;
153
+ }
154
+ default: {
155
+ return;
156
+ }
157
+ }
158
+ const nextEntry = this.entries[nextIndex];
159
+ if (!nextEntry) {
160
+ return;
161
+ }
162
+ event_.preventDefault();
163
+ this.selectTab(nextEntry.tab.id);
164
+ nextEntry.buttonEl.focus();
165
+ }
166
+ }
167
+ export {
168
+ SettingsTabs
169
+ };
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXR0aW5ncy10YWJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUYWJiZWQgc2VjdGlvbnMgaW5zaWRlIGEgcGx1Z2luJ3Mgc2V0dGluZ3MuXG4gKi9cblxuaW1wb3J0IHsgc2V0SWNvbiB9IGZyb20gJ29ic2lkaWFuJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAtLSBXZSBuZWVkIHRvIGltcG9ydCBgaW5pdFBsdWdpbkNvbnRleHRgIHRvIHVzZSBpdCBpbiB0aGUgdHNkb2NzLlxuaW1wb3J0IHR5cGUgeyBpbml0UGx1Z2luQ29udGV4dCB9IGZyb20gJy4vcGx1Z2luL3BsdWdpbi1jb250ZXh0LnRzJztcblxuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhZGRQbHVnaW5Dc3NDbGFzc2VzIH0gZnJvbSAnLi9wbHVnaW4vcGx1Z2luLWNvbnRleHQudHMnO1xuXG4vKipcbiAqIEEgdGFiIG9mIHtAbGluayBTZXR0aW5nc1RhYnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzVGFiIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIGFuIE9ic2lkaWFuIGljb24gc2hvd24gYmVmb3JlIHRoZSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgaWNvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSB0YWIsIHVuaXF1ZSBhbW9uZyB0aGUgdGFicy5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIHNob3duIG9uIHRoZSB0YWIgYnV0dG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSB0YWIncyBzZXR0aW5ncyBpbnRvIHRoZSBwYW5lbCwgd2hpY2ggaXMgZW1wdHkgZWFjaCB0aW1lIHRoZSB0YWIgaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBwYW5lbC5cbiAgICovXG4gIHJlYWRvbmx5IHJlbmRlcjogKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIFNldHRpbmdzVGFiRW50cnkge1xuICByZWFkb25seSBidXR0b25FbDogSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gIHJlYWRvbmx5IHRhYjogU2V0dGluZ3NUYWI7XG59XG5cbi8qKlxuICogVGFiYmVkIHNlY3Rpb25zIGluc2lkZSBhIHBsdWdpbidzIHNldHRpbmdzOiBhIHJvdyBvZiB0YWIgYnV0dG9ucyBhbmQgb25lIHBhbmVsLCB3aGljaCByZW5kZXJzIG9ubHkgdGhlIHNlbGVjdGVkIHRhYi5cbiAqIFRoZSBhcnJvdyBrZXlzLCBIb21lIGFuZCBFbmQgbW92ZSBiZXR3ZWVuIHRhYnMsIGFzIGluIHRoZSBXQUktQVJJQSB0YWJzIHBhdHRlcm4uXG4gKlxuICogYGBgdHNcbiAqIHB1YmxpYyBvdmVycmlkZSBkaXNwbGF5KCk6IHZvaWQge1xuICogICB0aGlzLmNvbnRhaW5lckVsLmVtcHR5KCk7XG4gKiAgIG5ldyBTZXR0aW5nc1RhYnModGhpcy5jb250YWluZXJFbClcbiAqICAgICAuYWRkVGFiKHsgaWQ6ICdnZW5lcmFsJywgbmFtZTogJ0dlbmVyYWwnLCByZW5kZXI6IChlbCkgPT4gdGhpcy5yZW5kZXJHZW5lcmFsKGVsKSB9KVxuICogICAgIC5hZGRUYWIoeyBpZDogJ2FkdmFuY2VkJywgbmFtZTogJ0FkdmFuY2VkJywgcmVuZGVyOiAoZWwpID0+IHRoaXMucmVuZGVyQWR2YW5jZWQoZWwpIH0pXG4gKiAgICAgLnNlbGVjdFRhYih0aGlzLmxhc3RUYWJJZClcbiAqICAgICAub25UYWJDaGFuZ2UoKHRhYklkKSA9PiB7XG4gKiAgICAgICB0aGlzLmxhc3RUYWJJZCA9IHRhYklkO1xuICogICAgIH0pO1xuICogfVxuICogYGBgXG4gKlxuICogSW4gb3JkZXIgdG8gYWRkIHRoZSBzdHlsZXMgZm9yIHRoZSBjb21wb25lbnQsIHVzZSB7QGxpbmsgaW5pdFBsdWdpbkNvbnRleHR9IGluIHlvdXIgcGx1Z2luJ3MgYG9ubG9hZCgpYCBmdW5jdGlvbi5cbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNvcHkgc3R5bGVzIGZyb20ge0BsaW5rIGh0dHBzOi8vdW5wa2cuY29tL0BtbmFvdW1vdi9vYnNpZGlhbi1saWIvZGlzdC9zdHlsZXMuY3NzfS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNldHRpbmdzVGFicyB7XG4gIC8qKlxuICAgKiBUaGUgcGFuZWwgdGhlIHNlbGVjdGVkIHRhYiByZW5kZXJzIGludG8uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGFuZWxFbDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSByb3cgb2YgdGFiIGJ1dHRvbnMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFiQmFyRWw6IEhUTUxFbGVtZW50O1xuXG4gIHByaXZhdGUgY2hhbmdlQ2FsbGJhY2s/OiAodGFiSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBlbnRyaWVzOiBTZXR0aW5nc1RhYkVudHJ5W10gPSBbXTtcbiAgcHJpdmF0ZSBzZWxlY3RlZFRhYklkOiBudWxsIHwgc3RyaW5nID0gbnVsbDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBuZXcgc2V0dGluZ3MgdGFicy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkge1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoY29udGFpbmVyRWwsIENzc0NsYXNzLlNldHRpbmdzVGFicyk7XG4gICAgdGhpcy50YWJCYXJFbCA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdih7IGF0dHI6IHsgcm9sZTogJ3RhYmxpc3QnIH0sIGNsczogJ3NldHRpbmdzLXRhYnMtYmFyJyB9KTtcbiAgICB0aGlzLnRhYkJhckVsLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93bi5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnBhbmVsRWwgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoeyBhdHRyOiB7IHJvbGU6ICd0YWJwYW5lbCcgfSwgY2xzOiAnc2V0dGluZ3MtdGFicy1wYW5lbCcgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHRhYi4gVGhlIGZpcnN0IHRhYiBhZGRlZCBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHRhYiAtIFRoZSB0YWIuXG4gICAqIEByZXR1cm5zIFRoZSB0YWJzLlxuICAgKiBAdGhyb3dzIElmIGEgdGFiIHdpdGggdGhlIHNhbWUgaWQgd2FzIGFscmVhZHkgYWRkZWQuXG4gICAqL1xuICBwdWJsaWMgYWRkVGFiKHRhYjogU2V0dGluZ3NUYWIpOiB0aGlzIHtcbiAgICBpZiAodGhpcy5maW5kRW50cnkodGFiLmlkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIHNldHRpbmdzIHRhYiB3aXRoIHRoZSBpZCAke3RhYi5pZH0gd2FzIGFscmVhZHkgYWRkZWQuYCk7XG4gICAgfVxuICAgIGNvbnN0IGJ1dHRvbkVsID0gdGhpcy50YWJCYXJFbC5jcmVhdGVFbCgnYnV0dG9uJywgeyBhdHRyOiB7ICdhcmlhLXNlbGVjdGVkJzogJ2ZhbHNlJywgJ3JvbGUnOiAndGFiJywgJ3RhYmluZGV4JzogJy0xJyB9LCBjbHM6ICdzZXR0aW5ncy10YWJzLWJ1dHRvbicgfSk7XG4gICAgaWYgKHRhYi5pY29uKSB7XG4gICAgICBzZXRJY29uKGJ1dHRvbkVsLmNyZWF0ZVNwYW4oeyBjbHM6ICdzZXR0aW5ncy10YWJzLWljb24nIH0pLCB0YWIuaWNvbik7XG4gICAgfVxuICAgIGJ1dHRvbkVsLmNyZWF0ZVNwYW4oeyB0ZXh0OiB0YWIubmFtZSB9KTtcbiAgICBidXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0VGFiKHRhYi5pZCk7XG4gICAgfSk7XG4gICAgdGhpcy5lbnRyaWVzLnB1c2goeyBidXR0b25FbCwgdGFiIH0pO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSWQgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0VGFiKHRhYi5pZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGlkIG9mIHRoZSBzZWxlY3RlZCB0YWIuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpZCwgb3IgYG51bGxgIGJlZm9yZSBhbnkgdGFiIGlzIGFkZGVkLlxuICAgKi9cbiAgcHVibGljIGdldFNlbGVjdGVkVGFiSWQoKTogbnVsbCB8IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWJJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgdXNlciBzZWxlY3RzIGFub3RoZXIgdGFiLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2ssIGdpdmVuIHRoZSBpZCBvZiB0aGUgc2VsZWN0ZWQgdGFiLlxuICAgKiBAcmV0dXJucyBUaGUgdGFicy5cbiAgICovXG4gIHB1YmxpYyBvblRhYkNoYW5nZShjYWxsYmFjazogKHRhYklkOiBzdHJpbmcpID0+IHZvaWQpOiB0aGlzIHtcbiAgICB0aGlzLmNoYW5nZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyBhIHRhYiBhbmQgcmVuZGVycyBpdCBpbnRvIHRoZSBwYW5lbC4gQW4gdW5rbm93biBpZCwgc3VjaCBhcyBhIHN0b3JlZCBpZCB3aG9zZSB0YWIgd2FzIHNpbmNlIHJlbW92ZWQsIGxlYXZlc1xuICAgKiB0aGUgc2VsZWN0aW9uIGFzIGl0IGlzLlxuICAgKlxuICAgKiBAcGFyYW0gdGFiSWQgLSBUaGUgaWQgb2YgdGhlIHRhYi5cbiAgICogQHJldHVybnMgVGhlIHRhYnMuXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0VGFiKHRhYklkOiBudWxsIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmZpbmRFbnRyeSh0YWJJZCk7XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNvbnN0IHsgdGFiIH0gPSBlbnRyeTtcbiAgICBjb25zdCBpc0NoYW5nZSA9IHRoaXMuc2VsZWN0ZWRUYWJJZCAhPT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkVGFiSWQgIT09IHRhYi5pZDtcbiAgICB0aGlzLnNlbGVjdGVkVGFiSWQgPSB0YWIuaWQ7XG4gICAgZm9yIChjb25zdCB7IGJ1dHRvbkVsLCB0YWI6IGNhbmRpZGF0ZSB9IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGNhbmRpZGF0ZSA9PT0gdGFiO1xuICAgICAgYnV0dG9uRWwudG9nZ2xlQ2xhc3MoQ3NzQ2xhc3MuSXNBY3RpdmUsIGlzU2VsZWN0ZWQpO1xuICAgICAgYnV0dG9uRWwuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgU3RyaW5nKGlzU2VsZWN0ZWQpKTtcbiAgICAgIGJ1dHRvbkVsLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCBpc1NlbGVjdGVkID8gJzAnIDogJy0xJyk7XG4gICAgfVxuICAgIHRoaXMucGFuZWxFbC5lbXB0eSgpO1xuICAgIHRhYi5yZW5kZXIodGhpcy5wYW5lbEVsKTtcbiAgICBpZiAoaXNDaGFuZ2UpIHtcbiAgICAgIHRoaXMuY2hhbmdlQ2FsbGJhY2s/Lih0YWIuaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgZmluZEVudHJ5KHRhYklkOiBudWxsIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogU2V0dGluZ3NUYWJFbnRyeSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkudGFiLmlkID09PSB0YWJJZCk7XG4gIH1cblxuICBwcml2YXRlIG9uS2V5RG93bihldmVudF86IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuZW50cmllcy5sZW5ndGg7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmVudHJpZXMuZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkudGFiLmlkID09PSB0aGlzLnNlbGVjdGVkVGFiSWQpO1xuICAgIGxldCBuZXh0SW5kZXg6IG51bWJlcjtcbiAgICBzd2l0Y2ggKGV2ZW50Xy5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6IHtcbiAgICAgICAgbmV4dEluZGV4ID0gKGluZGV4IC0gMSArIGNvdW50KSAlIGNvdW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOiB7XG4gICAgICAgIG5leHRJbmRleCA9IChpbmRleCArIDEpICUgY291bnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRW5kJzoge1xuICAgICAgICBuZXh0SW5kZXggPSBjb3VudCAtIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnSG9tZSc6IHtcbiAgICAgICAgbmV4dEluZGV4ID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmV4dEVudHJ5ID0gdGhpcy5lbnRyaWVzW25leHRJbmRleF07XG4gICAgaWYgKCFuZXh0RW50cnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnRfLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zZWxlY3RUYWIobmV4dEVudHJ5LnRhYi5p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