@mnaoumov/obsidian-lib 7.1.0 → 8.1.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 (355) hide show
  1. package/dist/lib/cjs/__merged.cjs +8 -6
  2. package/dist/lib/cjs/__merged.d.cts +1 -1
  3. package/dist/lib/cjs/active-file-provider.cjs +6 -6
  4. package/dist/lib/cjs/active-file-provider.d.cts +1 -1
  5. package/dist/lib/cjs/app.cjs +5 -5
  6. package/dist/lib/cjs/async-with-notice.cjs +5 -5
  7. package/dist/lib/cjs/attachment-path.cjs +6 -6
  8. package/dist/lib/cjs/attachment-unit-folder.cjs +5 -5
  9. package/dist/lib/cjs/backlink-index.cjs +13 -19
  10. package/dist/lib/cjs/backlink-index.d.cts +1 -1
  11. package/dist/lib/cjs/backlink.cjs +5 -5
  12. package/dist/lib/cjs/bases-view-registrar.cjs +6 -6
  13. package/dist/lib/cjs/bases-view-registrar.d.cts +1 -1
  14. package/dist/lib/cjs/callout.cjs +5 -5
  15. package/dist/lib/cjs/canvas.cjs +5 -5
  16. package/dist/lib/cjs/case-insensitive-file-index.cjs +5 -5
  17. package/dist/lib/cjs/code-block-markdown-information.cjs +6 -6
  18. package/dist/lib/cjs/code-block-markdown-information.d.cts +9 -9
  19. package/dist/lib/cjs/code-block-reg-exp.cjs +5 -5
  20. package/dist/lib/cjs/codemirror/index.cjs +5 -5
  21. package/dist/lib/cjs/codemirror/state-field-spec.cjs +6 -6
  22. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +6 -6
  23. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +5 -5
  24. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +5 -5
  25. package/dist/lib/cjs/command-handlers/command-handler.cjs +5 -5
  26. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +5 -5
  27. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +5 -5
  28. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +5 -5
  29. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +5 -5
  30. package/dist/lib/cjs/command-handlers/index.cjs +5 -5
  31. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +5 -5
  32. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +5 -5
  33. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +5 -5
  34. package/dist/lib/cjs/command-registrar.cjs +6 -6
  35. package/dist/lib/cjs/command-registrar.d.cts +2 -2
  36. package/dist/lib/cjs/community-plugins.cjs +6 -6
  37. package/dist/lib/cjs/components/abort-signal-component.cjs +5 -5
  38. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  39. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  40. package/dist/lib/cjs/components/async-events-component.cjs +5 -5
  41. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +5 -5
  42. package/dist/lib/cjs/components/component-ex.cjs +5 -5
  43. package/dist/lib/cjs/components/console-debug-component.cjs +5 -5
  44. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +5 -5
  45. package/dist/lib/cjs/components/disposable-component.cjs +5 -5
  46. package/dist/lib/cjs/components/embed-extensions-component.cjs +5 -5
  47. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +13 -16
  48. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +5 -5
  49. package/dist/lib/cjs/components/incremental-file-index-component.cjs +74 -10
  50. package/dist/lib/cjs/components/incremental-file-index-component.d.cts +16 -1
  51. package/dist/lib/cjs/components/index.cjs +5 -5
  52. package/dist/lib/cjs/components/layout-ready-component.cjs +5 -5
  53. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +5 -5
  54. package/dist/lib/cjs/components/monkey-around-component.cjs +5 -5
  55. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  56. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  57. package/dist/lib/cjs/components/plugin-gate-component.cjs +5 -5
  58. package/dist/lib/cjs/components/plugin-notice-component.cjs +6 -6
  59. package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -3
  60. package/dist/lib/cjs/components/plugin-settings-component.cjs +6 -6
  61. package/dist/lib/cjs/components/plugin-settings-component.d.cts +5 -5
  62. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +5 -5
  63. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +5 -5
  64. package/dist/lib/cjs/components/pointer-position-component.cjs +5 -5
  65. package/dist/lib/cjs/components/registry-component.cjs +5 -5
  66. package/dist/lib/cjs/components/release-notes-component.cjs +5 -5
  67. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +6 -6
  68. package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +10 -10
  69. package/dist/lib/cjs/components/rmdir-guard-component.cjs +5 -5
  70. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  71. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +5 -5
  72. package/dist/lib/cjs/components/templates-language-component.cjs +5 -5
  73. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  74. package/dist/lib/cjs/constructors/index.cjs +5 -5
  75. package/dist/lib/cjs/css-class.cjs +5 -5
  76. package/dist/lib/cjs/data-handler.cjs +6 -6
  77. package/dist/lib/cjs/data-handler.d.cts +2 -2
  78. package/dist/lib/cjs/data-stores/data-store-replica.cjs +5 -5
  79. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  80. package/dist/lib/cjs/data-stores/data-store-transport.cjs +5 -5
  81. package/dist/lib/cjs/data-stores/index.cjs +5 -5
  82. package/dist/lib/cjs/data-stores/local-data-store.cjs +21 -18
  83. package/dist/lib/cjs/data-stores/local-data-store.d.cts +9 -1
  84. package/dist/lib/cjs/data-stores/shared-data-store.cjs +6 -6
  85. package/dist/lib/cjs/dataview-link.cjs +5 -5
  86. package/dist/lib/cjs/dataview.cjs +12 -12
  87. package/dist/lib/cjs/dataview.d.cts +6 -6
  88. package/dist/lib/cjs/debug.cjs +5 -5
  89. package/dist/lib/cjs/demo-vault-helper-settings.cjs +5 -5
  90. package/dist/lib/cjs/demo-vault-helper.cjs +5 -5
  91. package/dist/lib/cjs/demo-vault-naming.cjs +5 -5
  92. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +5 -5
  93. package/dist/lib/cjs/desktop-trusted-input.cjs +6 -6
  94. package/dist/lib/cjs/desktop-trusted-input.d.cts +1 -1
  95. package/dist/lib/cjs/editor-extension-registrar.cjs +6 -6
  96. package/dist/lib/cjs/editor-extension-registrar.d.cts +1 -1
  97. package/dist/lib/cjs/editor-suggest-registrar.cjs +6 -6
  98. package/dist/lib/cjs/editor-suggest-registrar.d.cts +1 -1
  99. package/dist/lib/cjs/editor.cjs +5 -5
  100. package/dist/lib/cjs/events.cjs +5 -5
  101. package/dist/lib/cjs/extensions-registrar.cjs +6 -6
  102. package/dist/lib/cjs/extensions-registrar.d.cts +1 -1
  103. package/dist/lib/cjs/file-change.cjs +6 -6
  104. package/dist/lib/cjs/file-change.d.cts +3 -3
  105. package/dist/lib/cjs/file-explorer.cjs +5 -5
  106. package/dist/lib/cjs/file-manager.cjs +5 -5
  107. package/dist/lib/cjs/file-system.cjs +5 -5
  108. package/dist/lib/cjs/folder-note.cjs +6 -6
  109. package/dist/lib/cjs/folder-note.d.cts +1 -1
  110. package/dist/lib/cjs/frontmatter-formatting.cjs +5 -5
  111. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +6 -6
  112. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +2 -2
  113. package/dist/lib/cjs/frontmatter.cjs +6 -6
  114. package/dist/lib/cjs/frontmatter.d.cts +7 -7
  115. package/dist/lib/cjs/generated-during-build.cjs +7 -7
  116. package/dist/lib/cjs/hover-link-source-registrar.cjs +6 -6
  117. package/dist/lib/cjs/hover-link-source-registrar.d.cts +1 -1
  118. package/dist/lib/cjs/html-element.cjs +5 -5
  119. package/dist/lib/cjs/i18n/custom-type-options.cjs +6 -6
  120. package/dist/lib/cjs/i18n/custom-type-options.d.cts +4 -4
  121. package/dist/lib/cjs/i18n/default-translations.cjs +5 -5
  122. package/dist/lib/cjs/i18n/i18n.cjs +5 -5
  123. package/dist/lib/cjs/i18n/index.cjs +5 -5
  124. package/dist/lib/cjs/i18n/locales/en.cjs +5 -5
  125. package/dist/lib/cjs/i18n/locales/index.cjs +5 -5
  126. package/dist/lib/cjs/i18n/locales/translations-map.cjs +5 -5
  127. package/dist/lib/cjs/index.cjs +5 -5
  128. package/dist/lib/cjs/is-in-obsidian.cjs +5 -5
  129. package/dist/lib/cjs/library-styles.cjs +5 -5
  130. package/dist/lib/cjs/library.cjs +5 -5
  131. package/dist/lib/cjs/link-name.cjs +5 -5
  132. package/dist/lib/cjs/link-update-progress.cjs +5 -5
  133. package/dist/lib/cjs/link.cjs +39 -15
  134. package/dist/lib/cjs/link.d.cts +49 -2
  135. package/dist/lib/cjs/logger.cjs +5 -5
  136. package/dist/lib/cjs/loop.cjs +5 -5
  137. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +6 -6
  138. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +1 -1
  139. package/dist/lib/cjs/markdown-code-block-processor.cjs +5 -5
  140. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +6 -6
  141. package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +1 -1
  142. package/dist/lib/cjs/markdown-view.cjs +5 -5
  143. package/dist/lib/cjs/markdown.cjs +5 -5
  144. package/dist/lib/cjs/menu-event-registrar.cjs +6 -6
  145. package/dist/lib/cjs/menu-event-registrar.d.cts +4 -4
  146. package/dist/lib/cjs/metadata-cache.cjs +6 -6
  147. package/dist/lib/cjs/mobile-trusted-input.cjs +6 -6
  148. package/dist/lib/cjs/modals/alert.cjs +5 -5
  149. package/dist/lib/cjs/modals/confirm.cjs +5 -5
  150. package/dist/lib/cjs/modals/index.cjs +5 -5
  151. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  152. package/dist/lib/cjs/modals/modal-command-builder.cjs +6 -6
  153. package/dist/lib/cjs/modals/modal-command-builder.d.cts +12 -12
  154. package/dist/lib/cjs/modals/modal.cjs +5 -5
  155. package/dist/lib/cjs/modals/prompt.cjs +14 -14
  156. package/dist/lib/cjs/modals/select-item.cjs +5 -5
  157. package/dist/lib/cjs/modals/select-option.cjs +5 -5
  158. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +5 -5
  159. package/dist/lib/cjs/note-priority.cjs +5 -5
  160. package/dist/lib/cjs/notebook-navigator.cjs +6 -6
  161. package/dist/lib/cjs/notebook-navigator.d.cts +3 -3
  162. package/dist/lib/cjs/obsidian-lib-state.cjs +6 -6
  163. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +6 -6
  164. package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +1 -1
  165. package/dist/lib/cjs/obsidian-settings.cjs +5 -5
  166. package/dist/lib/cjs/obsidian-word-characters.cjs +6 -6
  167. package/dist/lib/cjs/parse-link.cjs +6 -6
  168. package/dist/lib/cjs/parse-link.d.cts +2 -2
  169. package/dist/lib/cjs/path-settings.cjs +6 -6
  170. package/dist/lib/cjs/pdf.cjs +5 -5
  171. package/dist/lib/cjs/plugin/index.cjs +5 -5
  172. package/dist/lib/cjs/plugin/plugin-api.cjs +6 -6
  173. package/dist/lib/cjs/plugin/plugin-api.d.cts +2 -2
  174. package/dist/lib/cjs/plugin/plugin-context.cjs +6 -6
  175. package/dist/lib/cjs/plugin/plugin-event-source.cjs +6 -6
  176. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +1 -1
  177. package/dist/lib/cjs/plugin/plugin-install-state.cjs +5 -5
  178. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +5 -5
  179. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +6 -6
  180. package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +3 -3
  181. package/dist/lib/cjs/plugin/plugin.cjs +6 -6
  182. package/dist/lib/cjs/plugin/settings-migration-api.cjs +6 -6
  183. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +1 -1
  184. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +6 -6
  185. package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +1 -1
  186. package/dist/lib/cjs/popovers/field-popover.cjs +5 -5
  187. package/dist/lib/cjs/popovers/index.cjs +5 -5
  188. package/dist/lib/cjs/popovers/popover-anchor.cjs +5 -5
  189. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  190. package/dist/lib/cjs/property-entry.cjs +5 -5
  191. package/dist/lib/cjs/queue.cjs +6 -6
  192. package/dist/lib/cjs/react/app-context.cjs +5 -5
  193. package/dist/lib/cjs/react/index.cjs +5 -5
  194. package/dist/lib/cjs/reference.cjs +18 -6
  195. package/dist/lib/cjs/reference.d.cts +27 -7
  196. package/dist/lib/cjs/resource-lock.cjs +6 -6
  197. package/dist/lib/cjs/resource-url.cjs +5 -5
  198. package/dist/lib/cjs/ribbon-icon-registrar.cjs +6 -6
  199. package/dist/lib/cjs/ribbon-icon-registrar.d.cts +1 -1
  200. package/dist/lib/cjs/setting-components/checkbox-component.cjs +5 -5
  201. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +5 -5
  202. package/dist/lib/cjs/setting-components/date-component.cjs +5 -5
  203. package/dist/lib/cjs/setting-components/date-time-component.cjs +5 -5
  204. package/dist/lib/cjs/setting-components/email-component.cjs +5 -5
  205. package/dist/lib/cjs/setting-components/file-component.cjs +5 -5
  206. package/dist/lib/cjs/setting-components/index.cjs +5 -5
  207. package/dist/lib/cjs/setting-components/month-component.cjs +6 -6
  208. package/dist/lib/cjs/setting-components/month-component.d.cts +2 -2
  209. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +5 -5
  210. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +5 -5
  211. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +5 -5
  212. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +5 -5
  213. package/dist/lib/cjs/setting-components/number-component.cjs +5 -5
  214. package/dist/lib/cjs/setting-components/password-component.cjs +5 -5
  215. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +5 -5
  216. package/dist/lib/cjs/setting-components/telephone-component.cjs +5 -5
  217. package/dist/lib/cjs/setting-components/text-based-component.cjs +6 -6
  218. package/dist/lib/cjs/setting-components/text-based-component.d.cts +3 -3
  219. package/dist/lib/cjs/setting-components/time-component.cjs +5 -5
  220. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +5 -5
  221. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +5 -5
  222. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +5 -5
  223. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +5 -5
  224. package/dist/lib/cjs/setting-components/typed-text-component.cjs +5 -5
  225. package/dist/lib/cjs/setting-components/url-component.cjs +5 -5
  226. package/dist/lib/cjs/setting-components/validator-component.cjs +5 -5
  227. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +6 -6
  228. package/dist/lib/cjs/setting-components/week-component.cjs +6 -6
  229. package/dist/lib/cjs/setting-components/week-component.d.cts +2 -2
  230. package/dist/lib/cjs/setting-ex.cjs +5 -5
  231. package/dist/lib/cjs/setting-group-ex.cjs +5 -5
  232. package/dist/lib/cjs/status-bar-item-registrar.cjs +6 -6
  233. package/dist/lib/cjs/status-bar-item-registrar.d.cts +1 -1
  234. package/dist/lib/cjs/templater.cjs +6 -6
  235. package/dist/lib/cjs/templater.d.cts +9 -9
  236. package/dist/lib/cjs/transformers/duration-transformer.cjs +5 -5
  237. package/dist/lib/cjs/transformers/index.cjs +5 -5
  238. package/dist/lib/cjs/trusted-input.cjs +5 -5
  239. package/dist/lib/cjs/validation.cjs +6 -6
  240. package/dist/lib/cjs/validation.d.cts +1 -1
  241. package/dist/lib/cjs/vault-delete.cjs +5 -5
  242. package/dist/lib/cjs/vault-transaction.cjs +6 -6
  243. package/dist/lib/cjs/vault.cjs +5 -5
  244. package/dist/lib/cjs/view-registrar.cjs +6 -6
  245. package/dist/lib/cjs/view-registrar.d.cts +1 -1
  246. package/dist/lib/cjs/workspace.cjs +5 -5
  247. package/dist/lib/esm/__merged.d.mts +1 -1
  248. package/dist/lib/esm/__merged.mjs +3 -1
  249. package/dist/lib/esm/active-file-provider.d.mts +1 -1
  250. package/dist/lib/esm/active-file-provider.mjs +1 -1
  251. package/dist/lib/esm/attachment-path.mjs +1 -1
  252. package/dist/lib/esm/backlink-index.d.mts +1 -1
  253. package/dist/lib/esm/backlink-index.mjs +8 -14
  254. package/dist/lib/esm/bases-view-registrar.d.mts +1 -1
  255. package/dist/lib/esm/bases-view-registrar.mjs +1 -1
  256. package/dist/lib/esm/code-block-markdown-information.d.mts +9 -9
  257. package/dist/lib/esm/codemirror/state-field-spec.d.mts +6 -6
  258. package/dist/lib/esm/command-registrar.d.mts +2 -2
  259. package/dist/lib/esm/command-registrar.mjs +1 -1
  260. package/dist/lib/esm/community-plugins.mjs +1 -1
  261. package/dist/lib/esm/components/file-explorer-root-menu-component.mjs +8 -11
  262. package/dist/lib/esm/components/incremental-file-index-component.d.mts +16 -1
  263. package/dist/lib/esm/components/incremental-file-index-component.mjs +69 -5
  264. package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -3
  265. package/dist/lib/esm/components/plugin-notice-component.mjs +1 -1
  266. package/dist/lib/esm/components/plugin-settings-component.d.mts +5 -5
  267. package/dist/lib/esm/components/plugin-settings-component.mjs +1 -1
  268. package/dist/lib/esm/components/rename-delete-handler-component.d.mts +10 -10
  269. package/dist/lib/esm/components/rename-delete-handler-component.mjs +1 -1
  270. package/dist/lib/esm/data-handler.d.mts +2 -2
  271. package/dist/lib/esm/data-handler.mjs +1 -1
  272. package/dist/lib/esm/data-stores/data-store-seeds.mjs +1 -1
  273. package/dist/lib/esm/data-stores/local-data-store.d.mts +9 -1
  274. package/dist/lib/esm/data-stores/local-data-store.mjs +16 -13
  275. package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
  276. package/dist/lib/esm/dataview.d.mts +6 -6
  277. package/dist/lib/esm/dataview.mjs +7 -7
  278. package/dist/lib/esm/desktop-trusted-input.d.mts +1 -1
  279. package/dist/lib/esm/desktop-trusted-input.mjs +1 -1
  280. package/dist/lib/esm/editor-extension-registrar.d.mts +1 -1
  281. package/dist/lib/esm/editor-extension-registrar.mjs +1 -1
  282. package/dist/lib/esm/editor-suggest-registrar.d.mts +1 -1
  283. package/dist/lib/esm/editor-suggest-registrar.mjs +1 -1
  284. package/dist/lib/esm/extensions-registrar.d.mts +1 -1
  285. package/dist/lib/esm/extensions-registrar.mjs +1 -1
  286. package/dist/lib/esm/file-change.d.mts +3 -3
  287. package/dist/lib/esm/file-change.mjs +1 -1
  288. package/dist/lib/esm/folder-note.d.mts +1 -1
  289. package/dist/lib/esm/folder-note.mjs +1 -1
  290. package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +2 -2
  291. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +1 -1
  292. package/dist/lib/esm/frontmatter.d.mts +7 -7
  293. package/dist/lib/esm/frontmatter.mjs +1 -1
  294. package/dist/lib/esm/generated-during-build.mjs +2 -2
  295. package/dist/lib/esm/hover-link-source-registrar.d.mts +1 -1
  296. package/dist/lib/esm/hover-link-source-registrar.mjs +1 -1
  297. package/dist/lib/esm/i18n/custom-type-options.d.mts +4 -4
  298. package/dist/lib/esm/i18n/custom-type-options.mjs +1 -1
  299. package/dist/lib/esm/link.d.mts +49 -2
  300. package/dist/lib/esm/link.mjs +35 -10
  301. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +1 -1
  302. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +1 -1
  303. package/dist/lib/esm/markdown-post-processor-registrar.d.mts +1 -1
  304. package/dist/lib/esm/markdown-post-processor-registrar.mjs +1 -1
  305. package/dist/lib/esm/menu-event-registrar.d.mts +4 -4
  306. package/dist/lib/esm/metadata-cache.mjs +1 -1
  307. package/dist/lib/esm/mobile-trusted-input.mjs +1 -1
  308. package/dist/lib/esm/modals/minimizable-modal.mjs +1 -1
  309. package/dist/lib/esm/modals/modal-command-builder.d.mts +12 -12
  310. package/dist/lib/esm/modals/modal-command-builder.mjs +1 -1
  311. package/dist/lib/esm/modals/prompt.mjs +9 -9
  312. package/dist/lib/esm/notebook-navigator.d.mts +3 -3
  313. package/dist/lib/esm/notebook-navigator.mjs +1 -1
  314. package/dist/lib/esm/obsidian-lib-state.mjs +1 -1
  315. package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +1 -1
  316. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +1 -1
  317. package/dist/lib/esm/obsidian-word-characters.mjs +1 -1
  318. package/dist/lib/esm/parse-link.d.mts +2 -2
  319. package/dist/lib/esm/parse-link.mjs +1 -1
  320. package/dist/lib/esm/path-settings.mjs +1 -1
  321. package/dist/lib/esm/plugin/plugin-api.d.mts +2 -2
  322. package/dist/lib/esm/plugin/plugin-api.mjs +1 -1
  323. package/dist/lib/esm/plugin/plugin-context.mjs +1 -1
  324. package/dist/lib/esm/plugin/plugin-event-source.d.mts +1 -1
  325. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  326. package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +3 -3
  327. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +1 -1
  328. package/dist/lib/esm/plugin/plugin.mjs +1 -1
  329. package/dist/lib/esm/plugin/settings-migration-api.d.mts +1 -1
  330. package/dist/lib/esm/plugin/settings-migration-api.mjs +1 -1
  331. package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +1 -1
  332. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +1 -1
  333. package/dist/lib/esm/queue.mjs +1 -1
  334. package/dist/lib/esm/reference.d.mts +27 -7
  335. package/dist/lib/esm/reference.mjs +12 -1
  336. package/dist/lib/esm/resource-lock.mjs +1 -1
  337. package/dist/lib/esm/ribbon-icon-registrar.d.mts +1 -1
  338. package/dist/lib/esm/ribbon-icon-registrar.mjs +1 -1
  339. package/dist/lib/esm/setting-components/month-component.d.mts +2 -2
  340. package/dist/lib/esm/setting-components/month-component.mjs +1 -1
  341. package/dist/lib/esm/setting-components/text-based-component.d.mts +3 -3
  342. package/dist/lib/esm/setting-components/text-based-component.mjs +1 -1
  343. package/dist/lib/esm/setting-components/week-component.d.mts +2 -2
  344. package/dist/lib/esm/setting-components/week-component.mjs +1 -1
  345. package/dist/lib/esm/status-bar-item-registrar.d.mts +1 -1
  346. package/dist/lib/esm/status-bar-item-registrar.mjs +1 -1
  347. package/dist/lib/esm/templater.d.mts +9 -9
  348. package/dist/lib/esm/templater.mjs +1 -1
  349. package/dist/lib/esm/validation.d.mts +1 -1
  350. package/dist/lib/esm/validation.mjs +1 -1
  351. package/dist/lib/esm/vault-transaction.mjs +1 -1
  352. package/dist/lib/esm/view-registrar.d.mts +1 -1
  353. package/dist/lib/esm/view-registrar.mjs +1 -1
  354. package/dist/styles.css +2 -2
  355. package/package.json +6 -3
@@ -41,8 +41,8 @@ ensureBrowserProcess();
41
41
  __isPatched: true
42
42
  }
43
43
  );
44
- function extractDefault(module) {
45
- return module && module.__esModule && "default" in module ? module.default : module;
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
46
  }
47
47
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
48
  "@codemirror/autocomplete",
@@ -84,9 +84,9 @@ ensureBrowserProcess();
84
84
  return process;
85
85
  }
86
86
  } else {
87
- const module = originalRequire?.(id);
88
- if (module) {
89
- return extractDefault(module);
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
90
  }
91
91
  }
92
92
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -138,7 +138,7 @@ const ROOT_UNSAFE_ITEM_TITLE_KEYS = [
138
138
  "plugins.file-explorer.menu-opt-rename",
139
139
  "plugins.search.menu-opt-search-in-folder"
140
140
  ];
141
- const SHARED_STATE_KEY = "fileExplorerRootMenuByAppV1";
141
+ const SHARED_STATE_KEY = "fileExplorerRootMenuV1";
142
142
  var FileExplorerRootMenuSpot = /* @__PURE__ */ ((FileExplorerRootMenuSpot2) => {
143
143
  FileExplorerRootMenuSpot2["EmptyArea"] = "empty-area";
144
144
  FileExplorerRootMenuSpot2["VaultName"] = "vault-name";
@@ -173,7 +173,7 @@ class FileExplorerRootMenuComponent extends import_component_ex.ComponentEx {
173
173
  */
174
174
  onload() {
175
175
  super.onload();
176
- const state = getSharedState(this.app);
176
+ const state = getSharedState();
177
177
  const subscription = {
178
178
  handler: this.handler,
179
179
  install: () => installRootMenu(this.app, state),
@@ -216,14 +216,11 @@ function dispatchBeforeShow(state, params) {
216
216
  function getFileExplorerLeaf(app) {
217
217
  return app.workspace.getLeavesOfType(import_implementations.ViewType.FileExplorer)[0] ?? null;
218
218
  }
219
- function getSharedState(app) {
220
- const statesByApp = (0, import_obsidian_lib_state.getObsidianLibState)(SHARED_STATE_KEY, /* @__PURE__ */ new WeakMap()).value;
221
- let state = statesByApp.get(app);
222
- if (!state) {
223
- state = { installation: null, subscriptions: [] };
224
- statesByApp.set(app, state);
225
- }
226
- return state;
219
+ function getSharedState() {
220
+ return (0, import_obsidian_lib_state.getObsidianLibState)(SHARED_STATE_KEY, {
221
+ installation: null,
222
+ subscriptions: []
223
+ }).value;
227
224
  }
228
225
  function installRootMenu(app, state) {
229
226
  let isUninstalled = false;
@@ -340,4 +337,4 @@ function removeRootUnsafeItems(menu) {
340
337
  FileExplorerRootMenuSpot,
341
338
  VAULT_NAME_SELECTORS
342
339
  });
343
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXItcm9vdC1tZW51LWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogT3BlbnMgYW5kIGV4dGVuZHMgdGhlIGNvcmUgRmlsZSBFeHBsb3JlcidzIGNvbnRleHQgbWVudSBmb3IgdGhlIHZhdWx0IHJvb3QsIGF0IHRoZSB0d28gc3BvdHMgdGhhdCBzdGFuZCBmb3IgaXQ6IHRoZVxuICogdmF1bHQgbmFtZSBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIsIGFuZCB0aGUgZW1wdHkgYXJlYSBiZWxvdyB0aGUgZmlsZSBsaXN0LlxuICpcbiAqIE9ic2lkaWFuIGFscmVhZHkgb3BlbnMgYSBtZW51IGZvciB0aGUgZW1wdHkgYXJlYTogdGhlIHZpZXcncyBvd24gYGNvbnRleHRtZW51YCBsaXN0ZW5lciBvbiBpdHMgZmlsZXMgY29udGFpbmVyIGNhbGxzXG4gKiBgb25GaWxlQ29udGV4dE1lbnUoZXZ0LCB2YXVsdC5nZXRSb290KCkpYCwgd2hpY2ggYnVpbGRzIGEge0BsaW5rIE1lbnV9LCB0cmlnZ2VycyBgZmlsZS1tZW51YCB3aXRoIHRoZSByb290IGZvbGRlciBhbmRcbiAqIHRoZSBzb3VyY2UgYGZpbGUtZXhwbG9yZXItY29udGV4dC1tZW51YCwgYW5kIHNob3dzIGl0LiBUaGUgdmF1bHQgbmFtZSAoYC53b3Jrc3BhY2UtZHJhd2VyLXZhdWx0LXN3aXRjaGVyYCBvbiBkZXNrdG9wLFxuICogYC53b3Jrc3BhY2UtZHJhd2VyLWhlYWRlci1uYW1lYCBvbiBtb2JpbGUsIHdoZXJlIE9ic2lkaWFuIGJ1aWxkcyBubyBzd2l0Y2hlcikgb3BlbnMgYSBkaWZmZXJlbnQgbWVudTogb24gZGVza3RvcFxuICogT2JzaWRpYW4gYWRkcyBgU2hvdyBpbiBzeXN0ZW0gZXhwbG9yZXJgIGFuZCBgQ29weSBwYXRoYCB0byB0aGUgcGVyLWV2ZW50IG1lbnUgYE1lbnUuZm9yRXZlbnRgIGhhbmRzIG91dC4gVGhlIGhhbmRsZXJzXG4gKiBnZXQgdGhhdCBtZW51LCBzbyBhIHJpZ2h0LWNsaWNrIHRoZXJlIG5ldmVyIG9wZW5zIGEgc2Vjb25kIG9uZS4gQSBzdWJzY3JpYmVyIHRoYXQgcHJlc2VudHMgdGhlIHJvb3QgYXMgYSBmb2xkZXJcbiAqIHJlcGxhY2VzIGl0IHdpdGggdGhlIHJvb3QncyBmb2xkZXIgbWVudSBpbnN0ZWFkLiBSZWFkIGZyb20gT2JzaWRpYW4gYDEuMTUuMGAuXG4gKlxuICogRXZlcnkgcGx1Z2luIGJ1bmRsZXMgaXRzIG93biBjb3B5IG9mIHRoaXMgbGlicmFyeSwgYW5kIHNldmVyYWwgb2YgdGhlbSBtYXkgd2FudCB0aGlzIG1lbnUuIFR3byBjb3BpZXMgcGF0Y2hpbmcgdGhlXG4gKiBzYW1lIHByb3RvdHlwZSBhbmQgbGlzdGVuaW5nIG9uIHRoZSBzYW1lIGVsZW1lbnQgd291bGQgb3BlbiBpdCB0d2ljZSwgc28gdGhlcmUgaXMgT05FIGluc3RhbGxhdGlvbiBwZXIge0BsaW5rIEFwcH0sXG4gKiBrZXB0IGluIHRoZSBzaGFyZWQtc3RhdGUgYmFnIHVuZGVyIGEgdmVyc2lvbmVkIGtleSBhbmQgb3duZWQgYnkgb25lIHN1YnNjcmliZXIuIFdoZW4gdGhlIG93bmVyIHVubG9hZHMgd2hpbGUgb3RoZXJzXG4gKiByZW1haW4sIHRoZSBuZXh0IHN1YnNjcmliZXIgaW5zdGFsbHMgaXQgYWdhaW4gZnJvbSBpdHMgb3duIGNvcHkuIFdoYXQgY3Jvc3NlcyB0aGF0IGJvdW5kYXJ5IGlzIGEgd2lyZSBmb3JtYXQgYmV0d2VlblxuICogY29waWVzIG9mIGRpZmZlcmVudCB2ZXJzaW9uczogcGxhaW4gb2JqZWN0cyBhbmQgcGxhaW4gZnVuY3Rpb25zIG9ubHksIHJlYWQgc3RydWN0dXJhbGx5LCBhbmQgYSBjaGFuZ2UgdG8gd2hhdCBhIGZpZWxkXG4gKiBtZWFucyBtb3ZlcyB0byBhIG5ldyBrZXkgcmF0aGVyIHRoYW4gcmVpbnRlcnByZXRpbmcgdGhlIG9sZCBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGaWxlRXhwbG9yZXJWaWV3IH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldFByb3RvdHlwZU9mIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7XG4gIE1lbnUsXG4gIE1lbnVJdGVtLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4uL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IGFyb3VuZCB9IGZyb20gJy4vbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIFRoZSBlbGVtZW50cyB0aGF0IHN0YW5kIGZvciB0aGUgdmF1bHQgcm9vdCBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIsIGluIHByaW9yaXR5IG9yZGVyLiBPYnNpZGlhbiBidWlsZHNcbiAqIGAud29ya3NwYWNlLWRyYXdlci12YXVsdC1zd2l0Y2hlcmAgb25seSBvbiBkZXNrdG9wOyBvbiBtb2JpbGUgdGhlIHZhdWx0IG5hbWUgaXMgdGhlIGRyYXdlciBoZWFkZXIgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBVUxUX05BTUVfU0VMRUNUT1JTID0gW1xuICAnLndvcmtzcGFjZS1kcmF3ZXItdmF1bHQtc3dpdGNoZXInLFxuICAnLndvcmtzcGFjZS1kcmF3ZXItaGVhZGVyLW5hbWUnXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIFRoZSBgc291cmNlYCBPYnNpZGlhbiBwYXNzZXMgd2l0aCBgZmlsZS1tZW51YCB3aGVuIHRoZSBGaWxlIEV4cGxvcmVyIG9wZW5zIGEgbWVudS5cbiAqL1xuY29uc3QgRklMRV9FWFBMT1JFUl9NRU5VX1NPVVJDRSA9ICdmaWxlLWV4cGxvcmVyLWNvbnRleHQtbWVudSc7XG5cbi8qKlxuICogVGhlIG1lbnUgaXRlbXMgdGhhdCBtdXN0IG5vdCBhY3Qgb24gdGhlIHZhdWx0IHJvb3QsIGJ5IHRoZSBsb2NhbGl6YXRpb24ga2V5IG9mIHRoZWlyIHRpdGxlLiBUaGV5IGFwcGVhciBvbmx5IHdoZW5cbiAqIHRoZSByb290IGlzIHByZXNlbnRlZCBhcyBhbiBvcmRpbmFyeSBmb2xkZXIsIGZyb20gT2JzaWRpYW4gaXRzZWxmIG9yIGZyb20gYW5vdGhlciBwbHVnaW4ncyBgZmlsZS1tZW51YCBoYW5kbGVyLlxuICovXG5jb25zdCBST09UX1VOU0FGRV9JVEVNX1RJVExFX0tFWVMgPSBbXG4gICdwbHVnaW5zLmZpbGUtZXhwbG9yZXIuYWN0aW9uLW1vdmUtZm9sZGVyJyxcbiAgJ3BsdWdpbnMuZmlsZS1leHBsb3Jlci5tZW51LW9wdC1kZWxldGUnLFxuICAncGx1Z2lucy5maWxlLWV4cGxvcmVyLm1lbnUtb3B0LW1ha2UtY29weScsXG4gICdwbHVnaW5zLmZpbGUtZXhwbG9yZXIubWVudS1vcHQtcmVuYW1lJyxcbiAgJ3BsdWdpbnMuc2VhcmNoLm1lbnUtb3B0LXNlYXJjaC1pbi1mb2xkZXInXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBTSEFSRURfU1RBVEVfS0VZID0gJ2ZpbGVFeHBsb3JlclJvb3RNZW51QnlBcHBWMSc7XG5cbi8qKlxuICogV2hpY2ggc3BvdCBvZiB0aGUgRmlsZSBFeHBsb3JlciB0aGUgdmF1bHQtcm9vdCBtZW51IHdhcyBvcGVuZWQgZnJvbS5cbiAqL1xuZXhwb3J0IGVudW0gRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90IHtcbiAgLyoqXG4gICAqIFRoZSBlbXB0eSBhcmVhIGJlbG93IHRoZSBmaWxlIGxpc3QuXG4gICAqL1xuICBFbXB0eUFyZWEgPSAnZW1wdHktYXJlYScsXG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCBuYW1lIGF0IHRoZSB0b3Agb2YgdGhlIGxlZnQgc2lkZWJhci5cbiAgICovXG4gIFZhdWx0TmFtZSA9ICd2YXVsdC1uYW1lJ1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBGaWxlRXhwbG9yZXJSb290TWVudUNvbXBvbmVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUV4cGxvcmVyUm9vdE1lbnVDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBlYWNoIHRpbWUgdGhlIHZhdWx0LXJvb3QgbWVudSBpcyBhYm91dCB0byBiZSBzaG93bi5cbiAgICovXG4gIHJlYWRvbmx5IGhhbmRsZXI6IEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcm9vdCBpcyBwcmVzZW50ZWQgYXMgYW4gb3JkaW5hcnkgZm9sZGVyIHdoaWxlIGl0cyBtZW51IGlzIGJ1aWx0LCBzbyB0aGF0IE9ic2lkaWFuIGFuZCBvdGhlciBwbHVnaW5zIGFkZFxuICAgKiB0aGUgaXRlbXMgdGhleSBhZGQgdG8gYW55IGZvbGRlci4gVGhlIGl0ZW1zIHRoYXQgbXVzdCBub3QgYWN0IG9uIHRoZSByb290IChyZW5hbWUsIGRlbGV0ZSwgbW92ZSwgbWFrZSBhIGNvcHkgYW5kXG4gICAqIHNlYXJjaCBpbiBmb2xkZXIpIGFyZSByZW1vdmVkIGFnYWluIGJlZm9yZSB0aGUgbWVudSBpcyBzaG93bi4gT24gdGhlIHZhdWx0IG5hbWUsIHRoZSByb290J3MgZm9sZGVyIG1lbnUgdGhlbiByZXBsYWNlc1xuICAgKiBPYnNpZGlhbidzIHZhdWx0IG1lbnUuIEl0IGhvbGRzIHdoaWxlIGFueSBzdWJzY3JpYmVyIGFza3MgZm9yIGl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgb2YgdGhlIHZhdWx0LXJvb3QgbWVudS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCB0eXBlIEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlciA9IChwYXJhbXM6IEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlclBhcmFtcykgPT4gdm9pZDtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBhIHtAbGluayBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJ9LlxuICpcbiAqIFRoZSBzaGFwZSBpcyBwYXJ0IG9mIHRoZSB3aXJlIGZvcm1hdCBiZXR3ZWVuIGNvcGllcyBvZiB0aGlzIGxpYnJhcnk6IGZpZWxkcyBhcmUgb25seSBldmVyIGFkZGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbWVudSwgYWJvdXQgdG8gYmUgc2hvd246IHRoZSByb290J3MgZm9sZGVyIG1lbnUsIGFmdGVyIGV2ZXJ5IGBmaWxlLW1lbnVgIGhhbmRsZXIgaGFzIHJ1biwgb3Igb24gdGhlIHZhdWx0IG5hbWUgdGhlXG4gICAqIHZhdWx0IG1lbnUgT2JzaWRpYW4gYnVpbGRzIHRoZXJlLiBBIG1lbnUgc3RpbGwgZW1wdHkgYWZ0ZXIgZXZlcnkgaGFuZGxlciBpcyBub3Qgc2hvd24uXG4gICAqL1xuICByZWFkb25seSBtZW51OiBNZW51O1xuXG4gIC8qKlxuICAgKiBUaGUgcmlnaHQtY2xpY2sgb3IgbG9uZy1wcmVzcyB0aGF0IG9wZW5lZCB0aGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdEZvbGRlcjogVEZvbGRlcjtcblxuICAvKipcbiAgICogV2hpY2ggc3BvdCB0aGUgbWVudSB3YXMgb3BlbmVkIGZyb20uXG4gICAqL1xuICByZWFkb25seSBzcG90OiBGaWxlRXhwbG9yZXJSb290TWVudVNwb3Q7XG59XG5cbmludGVyZmFjZSBGaWxlRXhwbG9yZXJSb290TWVudUluc3RhbGxhdGlvbiB7XG4gIHJlYWRvbmx5IG93bmVyOiBGaWxlRXhwbG9yZXJSb290TWVudVN1YnNjcmlwdGlvbjtcbiAgdW5pbnN0YWxsOiAoKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSB7XG4gIGluc3RhbGxhdGlvbjogRmlsZUV4cGxvcmVyUm9vdE1lbnVJbnN0YWxsYXRpb24gfCBudWxsO1xuICByZWFkb25seSBzdWJzY3JpcHRpb25zOiBGaWxlRXhwbG9yZXJSb290TWVudVN1YnNjcmlwdGlvbltdO1xufVxuXG5pbnRlcmZhY2UgRmlsZUV4cGxvcmVyUm9vdE1lbnVTdWJzY3JpcHRpb24ge1xuICBoYW5kbGVyOiAocGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMpID0+IHZvaWQ7XG4gIGluc3RhbGw6ICgpID0+ICgpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHNob3VsZFByZXNlbnRSb290QXNGb2xkZXI6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBGaWxlRXhwbG9yZXJWaWV3V2l0aENvbnRleHRNZW51IGV4dGVuZHMgRmlsZUV4cGxvcmVyVmlldyB7XG4gIG9uRmlsZUNvbnRleHRNZW51OiAobW91c2VFdmVudDogTW91c2VFdmVudCwgZmlsZTogVEFic3RyYWN0RmlsZSkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIE9wZW5Sb290TWVudVBhcmFtcyB7XG4gIHJlYWRvbmx5IG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQ7XG4gIHJlYWRvbmx5IG9wZW5OYXRpdmU6ICgpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHJvb3RGb2xkZXI6IFRGb2xkZXI7XG4gIHJlYWRvbmx5IHNwb3Q6IEZpbGVFeHBsb3JlclJvb3RNZW51U3BvdDtcbn1cblxuLyoqXG4gKiBIYW5kcyB0aGUgY29yZSBGaWxlIEV4cGxvcmVyJ3MgdmF1bHQtcm9vdCBtZW51IHRvIGEgaGFuZGxlciwgYW5kIG9wZW5zIHRoYXQgbWVudSBmcm9tIHRoZSB2YXVsdCBuYW1lIHRvby5cbiAqXG4gKiBBbnkgbnVtYmVyIG9mIHRoZXNlLCBpbiBhbnkgbnVtYmVyIG9mIHBsdWdpbnMsIHNoYXJlIG9uZSBpbnN0YWxsYXRpb24gcGVyIHtAbGluayBBcHB9LlxuICovXG5leHBvcnQgY2xhc3MgRmlsZUV4cGxvcmVyUm9vdE1lbnVDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgZWFjaCB0aW1lIHRoZSB2YXVsdC1yb290IG1lbnUgaXMgYWJvdXQgdG8gYmUgc2hvd24uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGFuZGxlcjogRmlsZUV4cGxvcmVyUm9vdE1lbnVIYW5kbGVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSByb290IGlzIHByZXNlbnRlZCBhcyBhbiBvcmRpbmFyeSBmb2xkZXIgd2hpbGUgaXRzIG1lbnUgaXMgYnVpbHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBmaWxlIGV4cGxvcmVyIHJvb3QgbWVudSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEZpbGVFeHBsb3JlclJvb3RNZW51Q29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLmhhbmRsZXIgPSBwYXJhbXMuaGFuZGxlcjtcbiAgICB0aGlzLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXIgPSBwYXJhbXMuc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlciA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIHRoZSBzaGFyZWQgaW5zdGFsbGF0aW9uLCBpbnN0YWxsaW5nIGl0IHdoZW4gbm9ib2R5IGhhcyB5ZXQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHN1cGVyLm9ubG9hZCgpO1xuXG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTaGFyZWRTdGF0ZSh0aGlzLmFwcCk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uOiBGaWxlRXhwbG9yZXJSb290TWVudVN1YnNjcmlwdGlvbiA9IHtcbiAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlcixcbiAgICAgIGluc3RhbGw6ICgpID0+IGluc3RhbGxSb290TWVudSh0aGlzLmFwcCwgc3RhdGUpLFxuICAgICAgc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcjogdGhpcy5zaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyXG4gICAgfTtcbiAgICBzdGF0ZS5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICBzdGF0ZS5pbnN0YWxsYXRpb24gPz89IHsgb3duZXI6IHN1YnNjcmlwdGlvbiwgdW5pbnN0YWxsOiBzdWJzY3JpcHRpb24uaW5zdGFsbCgpIH07XG5cbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIHN0YXRlLnN1YnNjcmlwdGlvbnMuc3BsaWNlKHN0YXRlLnN1YnNjcmlwdGlvbnMuaW5kZXhPZihzdWJzY3JpcHRpb24pLCAxKTtcbiAgICAgIGlmIChzdGF0ZS5pbnN0YWxsYXRpb24/Lm93bmVyICE9PSBzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5pbnN0YWxsYXRpb24udW5pbnN0YWxsKCk7XG4gICAgICBjb25zdCBuZXh0T3duZXIgPSBzdGF0ZS5zdWJzY3JpcHRpb25zWzBdO1xuICAgICAgc3RhdGUuaW5zdGFsbGF0aW9uID0gbmV4dE93bmVyID8geyBvd25lcjogbmV4dE93bmVyLCB1bmluc3RhbGw6IG5leHRPd25lci5pbnN0YWxsKCkgfSA6IG51bGw7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2goc3RhdGU6IEZpbGVFeHBsb3JlclJvb3RNZW51U2hhcmVkU3RhdGUsIHBhcmFtczogRmlsZUV4cGxvcmVyUm9vdE1lbnVIYW5kbGVyUGFyYW1zKTogdm9pZCB7XG4gIGlmIChzdGF0ZS5zdWJzY3JpcHRpb25zLnNvbWUoKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXIpKSB7XG4gICAgcmVtb3ZlUm9vdFVuc2FmZUl0ZW1zKHBhcmFtcy5tZW51KTtcbiAgfVxuXG4gIC8vIEEgc25hcHNob3Q6IGEgaGFuZGxlciBtYXkgdW5sb2FkIGl0cyBvd24gY29tcG9uZW50LCBvciBhbm90aGVyIG9uZSwgd2hpbGUgdGhlIG1lbnUgaXMgZGlzcGF0Y2hlZC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdXNlbGVzcy1zcHJlYWQgLS0gVGhlIGNvcHkgaXMgdGhlIHBvaW50OiB0aGUgbGlzdCBtYXkgY2hhbmdlIGR1cmluZyB0aGUgbG9vcC5cbiAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgWy4uLnN0YXRlLnN1YnNjcmlwdGlvbnNdKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmlwdGlvbi5oYW5kbGVyKHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0EgZmlsZSBleHBsb3JlciByb290IG1lbnUgaGFuZGxlciBmYWlsZWQnLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQmVmb3JlU2hvdyhzdGF0ZTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSwgcGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgdW5pbnN0YWxsU2hvd1BhdGNoID0gYXJvdW5kKHBhcmFtcy5tZW51LCB7XG4gICAgc2hvd0F0TW91c2VFdmVudDogKG5leHQpID0+XG4gICAgICBmdW5jdGlvbiBwYXRjaGVkU2hvd0F0TW91c2VFdmVudCh0aGlzOiBNZW51LCBzaG93TW91c2VFdmVudDogTW91c2VFdmVudCk6IE1lbnUge1xuICAgICAgICB1bmluc3RhbGxTaG93UGF0Y2goKTtcbiAgICAgICAgZGlzcGF0Y2goc3RhdGUsIHBhcmFtcyk7XG4gICAgICAgIHJldHVybiBwYXJhbXMubWVudS5pdGVtcy5sZW5ndGggPT09IDAgPyB0aGlzIDogbmV4dC5jYWxsKHRoaXMsIHNob3dNb3VzZUV2ZW50KTtcbiAgICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEZpbGVFeHBsb3JlckxlYWYoYXBwOiBBcHApOiBudWxsIHwgV29ya3NwYWNlTGVhZiB7XG4gIHJldHVybiBhcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShWaWV3VHlwZS5GaWxlRXhwbG9yZXIpWzBdID8/IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXJlZFN0YXRlKGFwcDogQXBwKTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSB7XG4gIGNvbnN0IHN0YXRlc0J5QXBwID0gZ2V0T2JzaWRpYW5MaWJTdGF0ZShTSEFSRURfU1RBVEVfS0VZLCBuZXcgV2Vha01hcDxBcHAsIEZpbGVFeHBsb3JlclJvb3RNZW51U2hhcmVkU3RhdGU+KCkpLnZhbHVlO1xuICBsZXQgc3RhdGUgPSBzdGF0ZXNCeUFwcC5nZXQoYXBwKTtcbiAgaWYgKCFzdGF0ZSkge1xuICAgIHN0YXRlID0geyBpbnN0YWxsYXRpb246IG51bGwsIHN1YnNjcmlwdGlvbnM6IFtdIH07XG4gICAgc3RhdGVzQnlBcHAuc2V0KGFwcCwgc3RhdGUpO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gaW5zdGFsbFJvb3RNZW51KGFwcDogQXBwLCBzdGF0ZTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSk6ICgpID0+IHZvaWQge1xuICBsZXQgaXNVbmluc3RhbGxlZCA9IGZhbHNlO1xuICBsZXQgcGVuZGluZ1Nwb3Q6IEZpbGVFeHBsb3JlclJvb3RNZW51U3BvdCB8IG51bGwgPSBudWxsO1xuICBsZXQgdW5pbnN0YWxsUGF0Y2g6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHRyeVBhdGNoKCk6IHZvaWQge1xuICAgIGlmIChpc1VuaW5zdGFsbGVkIHx8IHVuaW5zdGFsbFBhdGNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmlldyA9IGdldEZpbGVFeHBsb3JlckxlYWYoYXBwKT8udmlldztcbiAgICBpZiAoIWlzRmlsZUV4cGxvcmVyVmlldyh2aWV3KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVuaW5zdGFsbFBhdGNoID0gYXJvdW5kKGdldFByb3RvdHlwZU9mKHZpZXcpLCB7XG4gICAgICBvbkZpbGVDb250ZXh0TWVudTogKG5leHQpID0+XG4gICAgICAgIGZ1bmN0aW9uIHBhdGNoZWRPbkZpbGVDb250ZXh0TWVudSh0aGlzOiBGaWxlRXhwbG9yZXJWaWV3V2l0aENvbnRleHRNZW51LCBtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBmaWxlOiBUQWJzdHJhY3RGaWxlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpIHx8ICFmaWxlLmlzUm9vdCgpKSB7XG4gICAgICAgICAgICBuZXh0LmNhbGwodGhpcywgbW91c2VFdmVudCwgZmlsZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb3BlblJvb3RNZW51KHtcbiAgICAgICAgICAgIG1vdXNlRXZlbnQsXG4gICAgICAgICAgICBvcGVuTmF0aXZlOiAoKSA9PiB7XG4gICAgICAgICAgICAgIG5leHQuY2FsbCh0aGlzLCBtb3VzZUV2ZW50LCBmaWxlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByb290Rm9sZGVyOiBmaWxlLFxuICAgICAgICAgICAgc3BvdDogcGVuZGluZ1Nwb3QgPz8gRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90LkVtcHR5QXJlYVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuUm9vdE1lbnUocGFyYW1zOiBPcGVuUm9vdE1lbnVQYXJhbXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IG1vdXNlRXZlbnQsIG9wZW5OYXRpdmUsIHJvb3RGb2xkZXIsIHNwb3QgfSA9IHBhcmFtcztcbiAgICBjb25zdCBldmVudFJlZiA9IGFwcC53b3Jrc3BhY2Uub24oJ2ZpbGUtbWVudScsIChtZW51LCBmaWxlLCBzb3VyY2UpID0+IHtcbiAgICAgIGlmIChmaWxlICE9PSByb290Rm9sZGVyIHx8IHNvdXJjZSAhPT0gRklMRV9FWFBMT1JFUl9NRU5VX1NPVVJDRSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwcC53b3Jrc3BhY2Uub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICAgIGRpc3BhdGNoQmVmb3JlU2hvdyhzdGF0ZSwgeyBtZW51LCBtb3VzZUV2ZW50LCByb290Rm9sZGVyLCBzcG90IH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdG9yZUlzUm9vdCA9IHN0YXRlLnN1YnNjcmlwdGlvbnMuc29tZSgoc3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24uc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcilcbiAgICAgID8gcHJlc2VudEFzRm9sZGVyKHJvb3RGb2xkZXIpXG4gICAgICA6IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgb3Blbk5hdGl2ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZXN0b3JlSXNSb290Py4oKTtcbiAgICAgIGFwcC53b3Jrc3BhY2Uub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuRnJvbVZhdWx0TmFtZShtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNPblZhdWx0TmFtZSA9IG1vdXNlRXZlbnQuY29tcG9zZWRQYXRoKCkuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBWQVVMVF9OQU1FX1NFTEVDVE9SUy5zb21lKChzZWxlY3RvcikgPT4gdGFyZ2V0Lm1hdGNoZXMoc2VsZWN0b3IpKSk7XG4gICAgaWYgKCFpc09uVmF1bHROYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYE1lbnUuZm9yRXZlbnRgIGhhbmRzIGV2ZXJ5IGxpc3RlbmVyIG9mIG9uZSBldmVudCB0aGUgc2FtZSBtZW51IGFuZCBzaG93cyBpdCBvbiB0aGUgbmV4dCB0YXNrLiBPYnNpZGlhbidzIG93blxuICAgIC8vIGxpc3RlbmVyIG9uIHRoZSB2YXVsdCBuYW1lIGFkZHMgaXRzIHZhdWx0IGl0ZW1zIHRvIGl0IGFmdGVyIHRoaXMgY2FwdHVyZS1waGFzZSBvbmUgaGFzIHJ1bi5cbiAgICBjb25zdCB2YXVsdE1lbnUgPSBNZW51LmZvckV2ZW50KG1vdXNlRXZlbnQpO1xuICAgIGNvbnN0IHJvb3RGb2xkZXIgPSBhcHAudmF1bHQuZ2V0Um9vdCgpO1xuICAgIGNvbnN0IGxlYWYgPSBnZXRGaWxlRXhwbG9yZXJMZWFmKGFwcCk7XG4gICAgaWYgKCFsZWFmIHx8IHN0YXRlLnN1YnNjcmlwdGlvbnMuZXZlcnkoKHN1YnNjcmlwdGlvbikgPT4gIXN1YnNjcmlwdGlvbi5zaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyKSkge1xuICAgICAgZGlzcGF0Y2hCZWZvcmVTaG93KHN0YXRlLCB7IG1lbnU6IHZhdWx0TWVudSwgbW91c2VFdmVudCwgcm9vdEZvbGRlciwgc3BvdDogRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90LlZhdWx0TmFtZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmVzZW50ZWQgYXMgYSBmb2xkZXIsIHRoZSByb290J3MgZm9sZGVyIG1lbnUgcmVwbGFjZXMgdGhlIHZhdWx0IG1lbnUgcmF0aGVyIHRoYW4gb3BlbmluZyBvbiB0b3Agb2YgaXQuXG4gICAgZnVuY3Rpb24gc3VwcHJlc3NWYXVsdE1lbnVTaG93KCk6IE1lbnUge1xuICAgICAgdW5pbnN0YWxsVmF1bHRNZW51U2hvd1BhdGNoKCk7XG4gICAgICByZXR1cm4gdmF1bHRNZW51O1xuICAgIH1cbiAgICBjb25zdCB1bmluc3RhbGxWYXVsdE1lbnVTaG93UGF0Y2ggPSBhcm91bmQodmF1bHRNZW51LCB7IHNob3dBdE1vdXNlRXZlbnQ6ICgpID0+IHN1cHByZXNzVmF1bHRNZW51U2hvdyB9KTtcbiAgICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBsZWFmLmxvYWRJZkRlZmVycmVkKCk7XG4gICAgICBjb25zdCB2aWV3ID0gbGVhZi52aWV3O1xuICAgICAgaWYgKGlzVW5pbnN0YWxsZWQgfHwgIWlzRmlsZUV4cGxvcmVyVmlldyh2aWV3KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRyeVBhdGNoKCk7XG4gICAgICB2aWV3LnRyZWUuY2xlYXJTZWxlY3RlZERvbXMoKTtcbiAgICAgIHBlbmRpbmdTcG90ID0gRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90LlZhdWx0TmFtZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZpZXcub25GaWxlQ29udGV4dE1lbnUobW91c2VFdmVudCwgcm9vdEZvbGRlcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBwZW5kaW5nU3BvdCA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0cnlQYXRjaCgpO1xuICBjb25zdCBsYXlvdXRDaGFuZ2VFdmVudFJlZiA9IGFwcC53b3Jrc3BhY2Uub24oJ2xheW91dC1jaGFuZ2UnLCB0cnlQYXRjaCk7XG4gIGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeSh0cnlQYXRjaCk7XG4gIGNvbnN0IGRvYyA9IGFwcC53b3Jrc3BhY2UuY29udGFpbmVyRWwuZG9jO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBvcGVuRnJvbVZhdWx0TmFtZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaXNVbmluc3RhbGxlZCA9IHRydWU7XG4gICAgdW5pbnN0YWxsUGF0Y2g/LigpO1xuICAgIGFwcC53b3Jrc3BhY2Uub2ZmcmVmKGxheW91dENoYW5nZUV2ZW50UmVmKTtcbiAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBvcGVuRnJvbVZhdWx0TmFtZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpc0ZpbGVFeHBsb3JlclZpZXcodmlldzogdW5rbm93bik6IHZpZXcgaXMgRmlsZUV4cGxvcmVyVmlld1dpdGhDb250ZXh0TWVudSB7XG4gIHJldHVybiB0eXBlb2YgKHZpZXcgYXMgUGFydGlhbDxGaWxlRXhwbG9yZXJWaWV3V2l0aENvbnRleHRNZW51PiB8IHVuZGVmaW5lZCk/Lm9uRmlsZUNvbnRleHRNZW51ID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBwcmVzZW50QXNGb2xkZXIocm9vdEZvbGRlcjogVEZvbGRlcik6ICgpID0+IHZvaWQge1xuICBjb25zdCBvd25Jc1Jvb3REZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyb290Rm9sZGVyLCAnaXNSb290Jyk7XG4gIHJvb3RGb2xkZXIuaXNSb290ID0gKCk6IGJvb2xlYW4gPT4gZmFsc2U7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKG93bklzUm9vdERlc2NyaXB0b3IpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyb290Rm9sZGVyLCAnaXNSb290Jywgb3duSXNSb290RGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSAocm9vdEZvbGRlciBhcyBQYXJ0aWFsPFRGb2xkZXI+KS5pc1Jvb3Q7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVSb290VW5zYWZlSXRlbXMobWVudTogTWVudSk6IHZvaWQge1xuICBjb25zdCB1bnNhZmVUaXRsZXMgPSBuZXcgU2V0PG51bGwgfCBzdHJpbmc+KFJPT1RfVU5TQUZFX0lURU1fVElUTEVfS0VZUy5tYXAoKGtleSkgPT4gYWN0aXZlV2luZG93LmkxOG5leHQudChrZXkpKSk7XG4gIG1lbnUuaXRlbXMgPSBtZW51Lml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIShpdGVtIGluc3RhbmNlb2YgTWVudUl0ZW0pIHx8ICF1bnNhZmVUaXRsZXMuaGFzKGl0ZW0udGl0bGVFbC50ZXh0Q29udGVudCkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTZCQSxtQkFBa0M7QUFDbEMsMEJBQStCO0FBQy9CLDZCQUF5QjtBQUN6QixzQkFJTztBQUVQLGdDQUFvQztBQUNwQywwQkFB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
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXItcm9vdC1tZW51LWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogT3BlbnMgYW5kIGV4dGVuZHMgdGhlIGNvcmUgRmlsZSBFeHBsb3JlcidzIGNvbnRleHQgbWVudSBmb3IgdGhlIHZhdWx0IHJvb3QsIGF0IHRoZSB0d28gc3BvdHMgdGhhdCBzdGFuZCBmb3IgaXQ6IHRoZVxuICogdmF1bHQgbmFtZSBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIsIGFuZCB0aGUgZW1wdHkgYXJlYSBiZWxvdyB0aGUgZmlsZSBsaXN0LlxuICpcbiAqIE9ic2lkaWFuIGFscmVhZHkgb3BlbnMgYSBtZW51IGZvciB0aGUgZW1wdHkgYXJlYTogdGhlIHZpZXcncyBvd24gYGNvbnRleHRtZW51YCBsaXN0ZW5lciBvbiBpdHMgZmlsZXMgY29udGFpbmVyIGNhbGxzXG4gKiBgb25GaWxlQ29udGV4dE1lbnUoZXZ0LCB2YXVsdC5nZXRSb290KCkpYCwgd2hpY2ggYnVpbGRzIGEge0BsaW5rIE1lbnV9LCB0cmlnZ2VycyBgZmlsZS1tZW51YCB3aXRoIHRoZSByb290IGZvbGRlciBhbmRcbiAqIHRoZSBzb3VyY2UgYGZpbGUtZXhwbG9yZXItY29udGV4dC1tZW51YCwgYW5kIHNob3dzIGl0LiBUaGUgdmF1bHQgbmFtZSAoYC53b3Jrc3BhY2UtZHJhd2VyLXZhdWx0LXN3aXRjaGVyYCBvbiBkZXNrdG9wLFxuICogYC53b3Jrc3BhY2UtZHJhd2VyLWhlYWRlci1uYW1lYCBvbiBtb2JpbGUsIHdoZXJlIE9ic2lkaWFuIGJ1aWxkcyBubyBzd2l0Y2hlcikgb3BlbnMgYSBkaWZmZXJlbnQgbWVudTogb24gZGVza3RvcFxuICogT2JzaWRpYW4gYWRkcyBgU2hvdyBpbiBzeXN0ZW0gZXhwbG9yZXJgIGFuZCBgQ29weSBwYXRoYCB0byB0aGUgcGVyLWV2ZW50IG1lbnUgYE1lbnUuZm9yRXZlbnRgIGhhbmRzIG91dC4gVGhlIGhhbmRsZXJzXG4gKiBnZXQgdGhhdCBtZW51LCBzbyBhIHJpZ2h0LWNsaWNrIHRoZXJlIG5ldmVyIG9wZW5zIGEgc2Vjb25kIG9uZS4gQSBzdWJzY3JpYmVyIHRoYXQgcHJlc2VudHMgdGhlIHJvb3QgYXMgYSBmb2xkZXJcbiAqIHJlcGxhY2VzIGl0IHdpdGggdGhlIHJvb3QncyBmb2xkZXIgbWVudSBpbnN0ZWFkLiBSZWFkIGZyb20gT2JzaWRpYW4gYDEuMTUuMGAuXG4gKlxuICogRXZlcnkgcGx1Z2luIGJ1bmRsZXMgaXRzIG93biBjb3B5IG9mIHRoaXMgbGlicmFyeSwgYW5kIHNldmVyYWwgb2YgdGhlbSBtYXkgd2FudCB0aGlzIG1lbnUuIFR3byBjb3BpZXMgcGF0Y2hpbmcgdGhlXG4gKiBzYW1lIHByb3RvdHlwZSBhbmQgbGlzdGVuaW5nIG9uIHRoZSBzYW1lIGVsZW1lbnQgd291bGQgb3BlbiBpdCB0d2ljZSwgc28gdGhlcmUgaXMgT05FIGluc3RhbGxhdGlvbiBwZXIge0BsaW5rIEFwcH0sXG4gKiBrZXB0IGluIHRoZSBzaGFyZWQtc3RhdGUgYmFnIHVuZGVyIGEgdmVyc2lvbmVkIGtleSBhbmQgb3duZWQgYnkgb25lIHN1YnNjcmliZXIuIFdoZW4gdGhlIG93bmVyIHVubG9hZHMgd2hpbGUgb3RoZXJzXG4gKiByZW1haW4sIHRoZSBuZXh0IHN1YnNjcmliZXIgaW5zdGFsbHMgaXQgYWdhaW4gZnJvbSBpdHMgb3duIGNvcHkuIFdoYXQgY3Jvc3NlcyB0aGF0IGJvdW5kYXJ5IGlzIGEgd2lyZSBmb3JtYXQgYmV0d2VlblxuICogY29waWVzIG9mIGRpZmZlcmVudCB2ZXJzaW9uczogcGxhaW4gb2JqZWN0cyBhbmQgcGxhaW4gZnVuY3Rpb25zIG9ubHksIHJlYWQgc3RydWN0dXJhbGx5LCBhbmQgYSBjaGFuZ2UgdG8gd2hhdCBhIGZpZWxkXG4gKiBtZWFucyBtb3ZlcyB0byBhIG5ldyBrZXkgcmF0aGVyIHRoYW4gcmVpbnRlcnByZXRpbmcgdGhlIG9sZCBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGaWxlRXhwbG9yZXJWaWV3IH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldFByb3RvdHlwZU9mIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcbmltcG9ydCB7XG4gIE1lbnUsXG4gIE1lbnVJdGVtLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4uL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IGFyb3VuZCB9IGZyb20gJy4vbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIFRoZSBlbGVtZW50cyB0aGF0IHN0YW5kIGZvciB0aGUgdmF1bHQgcm9vdCBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIsIGluIHByaW9yaXR5IG9yZGVyLiBPYnNpZGlhbiBidWlsZHNcbiAqIGAud29ya3NwYWNlLWRyYXdlci12YXVsdC1zd2l0Y2hlcmAgb25seSBvbiBkZXNrdG9wOyBvbiBtb2JpbGUgdGhlIHZhdWx0IG5hbWUgaXMgdGhlIGRyYXdlciBoZWFkZXIgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBVUxUX05BTUVfU0VMRUNUT1JTID0gW1xuICAnLndvcmtzcGFjZS1kcmF3ZXItdmF1bHQtc3dpdGNoZXInLFxuICAnLndvcmtzcGFjZS1kcmF3ZXItaGVhZGVyLW5hbWUnXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIFRoZSBgc291cmNlYCBPYnNpZGlhbiBwYXNzZXMgd2l0aCBgZmlsZS1tZW51YCB3aGVuIHRoZSBGaWxlIEV4cGxvcmVyIG9wZW5zIGEgbWVudS5cbiAqL1xuY29uc3QgRklMRV9FWFBMT1JFUl9NRU5VX1NPVVJDRSA9ICdmaWxlLWV4cGxvcmVyLWNvbnRleHQtbWVudSc7XG5cbi8qKlxuICogVGhlIG1lbnUgaXRlbXMgdGhhdCBtdXN0IG5vdCBhY3Qgb24gdGhlIHZhdWx0IHJvb3QsIGJ5IHRoZSBsb2NhbGl6YXRpb24ga2V5IG9mIHRoZWlyIHRpdGxlLiBUaGV5IGFwcGVhciBvbmx5IHdoZW5cbiAqIHRoZSByb290IGlzIHByZXNlbnRlZCBhcyBhbiBvcmRpbmFyeSBmb2xkZXIsIGZyb20gT2JzaWRpYW4gaXRzZWxmIG9yIGZyb20gYW5vdGhlciBwbHVnaW4ncyBgZmlsZS1tZW51YCBoYW5kbGVyLlxuICovXG5jb25zdCBST09UX1VOU0FGRV9JVEVNX1RJVExFX0tFWVMgPSBbXG4gICdwbHVnaW5zLmZpbGUtZXhwbG9yZXIuYWN0aW9uLW1vdmUtZm9sZGVyJyxcbiAgJ3BsdWdpbnMuZmlsZS1leHBsb3Jlci5tZW51LW9wdC1kZWxldGUnLFxuICAncGx1Z2lucy5maWxlLWV4cGxvcmVyLm1lbnUtb3B0LW1ha2UtY29weScsXG4gICdwbHVnaW5zLmZpbGUtZXhwbG9yZXIubWVudS1vcHQtcmVuYW1lJyxcbiAgJ3BsdWdpbnMuc2VhcmNoLm1lbnUtb3B0LXNlYXJjaC1pbi1mb2xkZXInXG5dIGFzIGNvbnN0O1xuXG5jb25zdCBTSEFSRURfU1RBVEVfS0VZID0gJ2ZpbGVFeHBsb3JlclJvb3RNZW51VjEnO1xuXG4vKipcbiAqIFdoaWNoIHNwb3Qgb2YgdGhlIEZpbGUgRXhwbG9yZXIgdGhlIHZhdWx0LXJvb3QgbWVudSB3YXMgb3BlbmVkIGZyb20uXG4gKi9cbmV4cG9ydCBlbnVtIEZpbGVFeHBsb3JlclJvb3RNZW51U3BvdCB7XG4gIC8qKlxuICAgKiBUaGUgZW1wdHkgYXJlYSBiZWxvdyB0aGUgZmlsZSBsaXN0LlxuICAgKi9cbiAgRW1wdHlBcmVhID0gJ2VtcHR5LWFyZWEnLFxuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgbmFtZSBhdCB0aGUgdG9wIG9mIHRoZSBsZWZ0IHNpZGViYXIuXG4gICAqL1xuICBWYXVsdE5hbWUgPSAndmF1bHQtbmFtZSdcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgRmlsZUV4cGxvcmVyUm9vdE1lbnVDb21wb25lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVFeHBsb3JlclJvb3RNZW51Q29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgZWFjaCB0aW1lIHRoZSB2YXVsdC1yb290IG1lbnUgaXMgYWJvdXQgdG8gYmUgc2hvd24uXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVyOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJvb3QgaXMgcHJlc2VudGVkIGFzIGFuIG9yZGluYXJ5IGZvbGRlciB3aGlsZSBpdHMgbWVudSBpcyBidWlsdCwgc28gdGhhdCBPYnNpZGlhbiBhbmQgb3RoZXIgcGx1Z2lucyBhZGRcbiAgICogdGhlIGl0ZW1zIHRoZXkgYWRkIHRvIGFueSBmb2xkZXIuIFRoZSBpdGVtcyB0aGF0IG11c3Qgbm90IGFjdCBvbiB0aGUgcm9vdCAocmVuYW1lLCBkZWxldGUsIG1vdmUsIG1ha2UgYSBjb3B5IGFuZFxuICAgKiBzZWFyY2ggaW4gZm9sZGVyKSBhcmUgcmVtb3ZlZCBhZ2FpbiBiZWZvcmUgdGhlIG1lbnUgaXMgc2hvd24uIE9uIHRoZSB2YXVsdCBuYW1lLCB0aGUgcm9vdCdzIGZvbGRlciBtZW51IHRoZW4gcmVwbGFjZXNcbiAgICogT2JzaWRpYW4ncyB2YXVsdCBtZW51LiBJdCBob2xkcyB3aGlsZSBhbnkgc3Vic2NyaWJlciBhc2tzIGZvciBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIG9mIHRoZSB2YXVsdC1yb290IG1lbnUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgdHlwZSBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXIgPSAocGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMpID0+IHZvaWQ7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgYSB7QGxpbmsgRmlsZUV4cGxvcmVyUm9vdE1lbnVIYW5kbGVyfS5cbiAqXG4gKiBUaGUgc2hhcGUgaXMgcGFydCBvZiB0aGUgd2lyZSBmb3JtYXQgYmV0d2VlbiBjb3BpZXMgb2YgdGhpcyBsaWJyYXJ5OiBmaWVsZHMgYXJlIG9ubHkgZXZlciBhZGRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1lbnUsIGFib3V0IHRvIGJlIHNob3duOiB0aGUgcm9vdCdzIGZvbGRlciBtZW51LCBhZnRlciBldmVyeSBgZmlsZS1tZW51YCBoYW5kbGVyIGhhcyBydW4sIG9yIG9uIHRoZSB2YXVsdCBuYW1lIHRoZVxuICAgKiB2YXVsdCBtZW51IE9ic2lkaWFuIGJ1aWxkcyB0aGVyZS4gQSBtZW51IHN0aWxsIGVtcHR5IGFmdGVyIGV2ZXJ5IGhhbmRsZXIgaXMgbm90IHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVudTogTWVudTtcblxuICAvKipcbiAgICogVGhlIHJpZ2h0LWNsaWNrIG9yIGxvbmctcHJlc3MgdGhhdCBvcGVuZWQgdGhlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBtb3VzZUV2ZW50OiBNb3VzZUV2ZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RGb2xkZXI6IFRGb2xkZXI7XG5cbiAgLyoqXG4gICAqIFdoaWNoIHNwb3QgdGhlIG1lbnUgd2FzIG9wZW5lZCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BvdDogRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90O1xufVxuXG5pbnRlcmZhY2UgRmlsZUV4cGxvcmVyUm9vdE1lbnVJbnN0YWxsYXRpb24ge1xuICByZWFkb25seSBvd25lcjogRmlsZUV4cGxvcmVyUm9vdE1lbnVTdWJzY3JpcHRpb247XG4gIHJlYWRvbmx5IHVuaW5zdGFsbDogKCkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIEZpbGVFeHBsb3JlclJvb3RNZW51U2hhcmVkU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBTdWJzY3JpYmVyIGNoYW5nZXMgcmVwbGFjZSBvciBjbGVhciB0aGUgc2hhcmVkIG1lbnUgaW5zdGFsbGF0aW9uLlxuICBpbnN0YWxsYXRpb246IEZpbGVFeHBsb3JlclJvb3RNZW51SW5zdGFsbGF0aW9uIHwgbnVsbDtcbiAgcmVhZG9ubHkgc3Vic2NyaXB0aW9uczogRmlsZUV4cGxvcmVyUm9vdE1lbnVTdWJzY3JpcHRpb25bXTtcbn1cblxuaW50ZXJmYWNlIEZpbGVFeHBsb3JlclJvb3RNZW51U3Vic2NyaXB0aW9uIHtcbiAgcmVhZG9ubHkgaGFuZGxlcjogKHBhcmFtczogRmlsZUV4cGxvcmVyUm9vdE1lbnVIYW5kbGVyUGFyYW1zKSA9PiB2b2lkO1xuICByZWFkb25seSBpbnN0YWxsOiAoKSA9PiAoKSA9PiB2b2lkO1xuICByZWFkb25seSBzaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRmlsZUV4cGxvcmVyVmlld1dpdGhDb250ZXh0TWVudSBleHRlbmRzIEZpbGVFeHBsb3JlclZpZXcge1xuICByZWFkb25seSBvbkZpbGVDb250ZXh0TWVudTogKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGZpbGU6IFRBYnN0cmFjdEZpbGUpID0+IHZvaWQ7XG59XG5cbmludGVyZmFjZSBPcGVuUm9vdE1lbnVQYXJhbXMge1xuICByZWFkb25seSBtb3VzZUV2ZW50OiBNb3VzZUV2ZW50O1xuICByZWFkb25seSBvcGVuTmF0aXZlOiAoKSA9PiB2b2lkO1xuICByZWFkb25seSByb290Rm9sZGVyOiBURm9sZGVyO1xuICByZWFkb25seSBzcG90OiBGaWxlRXhwbG9yZXJSb290TWVudVNwb3Q7XG59XG5cbi8qKlxuICogSGFuZHMgdGhlIGNvcmUgRmlsZSBFeHBsb3JlcidzIHZhdWx0LXJvb3QgbWVudSB0byBhIGhhbmRsZXIsIGFuZCBvcGVucyB0aGF0IG1lbnUgZnJvbSB0aGUgdmF1bHQgbmFtZSB0b28uXG4gKlxuICogQW55IG51bWJlciBvZiB0aGVzZSwgaW4gYW55IG51bWJlciBvZiBwbHVnaW5zLCBzaGFyZSBvbmUgaW5zdGFsbGF0aW9uIHBlciB7QGxpbmsgQXBwfS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVFeHBsb3JlclJvb3RNZW51Q29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogQ2FsbGVkIGVhY2ggdGltZSB0aGUgdmF1bHQtcm9vdCBtZW51IGlzIGFib3V0IHRvIGJlIHNob3duLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhbmRsZXI6IEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcm9vdCBpcyBwcmVzZW50ZWQgYXMgYW4gb3JkaW5hcnkgZm9sZGVyIHdoaWxlIGl0cyBtZW51IGlzIGJ1aWx0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3VsZFByZXNlbnRSb290QXNGb2xkZXI6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZmlsZSBleHBsb3JlciByb290IG1lbnUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5oYW5kbGVyID0gcGFyYW1zLmhhbmRsZXI7XG4gICAgdGhpcy5zaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyID0gcGFyYW1zLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXIgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgc2hhcmVkIGluc3RhbGxhdGlvbiwgaW5zdGFsbGluZyBpdCB3aGVuIG5vYm9keSBoYXMgeWV0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbmxvYWQoKTtcblxuICAgIGNvbnN0IHN0YXRlID0gZ2V0U2hhcmVkU3RhdGUoKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb246IEZpbGVFeHBsb3JlclJvb3RNZW51U3Vic2NyaXB0aW9uID0ge1xuICAgICAgaGFuZGxlcjogdGhpcy5oYW5kbGVyLFxuICAgICAgaW5zdGFsbDogKCkgPT4gaW5zdGFsbFJvb3RNZW51KHRoaXMuYXBwLCBzdGF0ZSksXG4gICAgICBzaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyOiB0aGlzLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXJcbiAgICB9O1xuICAgIHN0YXRlLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgIHN0YXRlLmluc3RhbGxhdGlvbiA/Pz0geyBvd25lcjogc3Vic2NyaXB0aW9uLCB1bmluc3RhbGw6IHN1YnNjcmlwdGlvbi5pbnN0YWxsKCkgfTtcblxuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgc3RhdGUuc3Vic2NyaXB0aW9ucy5zcGxpY2Uoc3RhdGUuc3Vic2NyaXB0aW9ucy5pbmRleE9mKHN1YnNjcmlwdGlvbiksIDEpO1xuICAgICAgaWYgKHN0YXRlLmluc3RhbGxhdGlvbj8ub3duZXIgIT09IHN1YnNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLmluc3RhbGxhdGlvbi51bmluc3RhbGwoKTtcbiAgICAgIGNvbnN0IG5leHRPd25lciA9IHN0YXRlLnN1YnNjcmlwdGlvbnNbMF07XG4gICAgICBzdGF0ZS5pbnN0YWxsYXRpb24gPSBuZXh0T3duZXIgPyB7IG93bmVyOiBuZXh0T3duZXIsIHVuaW5zdGFsbDogbmV4dE93bmVyLmluc3RhbGwoKSB9IDogbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwYXRjaChzdGF0ZTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSwgcGFyYW1zOiBGaWxlRXhwbG9yZXJSb290TWVudUhhbmRsZXJQYXJhbXMpOiB2b2lkIHtcbiAgaWYgKHN0YXRlLnN1YnNjcmlwdGlvbnMuc29tZSgoc3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24uc2hvdWxkUHJlc2VudFJvb3RBc0ZvbGRlcikpIHtcbiAgICByZW1vdmVSb290VW5zYWZlSXRlbXMocGFyYW1zLm1lbnUpO1xuICB9XG5cbiAgLy8gQSBzbmFwc2hvdDogYSBoYW5kbGVyIG1heSB1bmxvYWQgaXRzIG93biBjb21wb25lbnQsIG9yIGFub3RoZXIgb25lLCB3aGlsZSB0aGUgbWVudSBpcyBkaXNwYXRjaGVkLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXNwcmVhZCAtLSBUaGUgY29weSBpcyB0aGUgcG9pbnQ6IHRoZSBsaXN0IG1heSBjaGFuZ2UgZHVyaW5nIHRoZSBsb29wLlxuICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiBbLi4uc3RhdGUuc3Vic2NyaXB0aW9uc10pIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaXB0aW9uLmhhbmRsZXIocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignQSBmaWxlIGV4cGxvcmVyIHJvb3QgbWVudSBoYW5kbGVyIGZhaWxlZCcsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hCZWZvcmVTaG93KHN0YXRlOiBGaWxlRXhwbG9yZXJSb290TWVudVNoYXJlZFN0YXRlLCBwYXJhbXM6IEZpbGVFeHBsb3JlclJvb3RNZW51SGFuZGxlclBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB1bmluc3RhbGxTaG93UGF0Y2ggPSBhcm91bmQocGFyYW1zLm1lbnUsIHtcbiAgICBzaG93QXRNb3VzZUV2ZW50OiAobmV4dCkgPT5cbiAgICAgIGZ1bmN0aW9uIHBhdGNoZWRTaG93QXRNb3VzZUV2ZW50KHRoaXM6IE1lbnUsIHNob3dNb3VzZUV2ZW50OiBNb3VzZUV2ZW50KTogTWVudSB7XG4gICAgICAgIHVuaW5zdGFsbFNob3dQYXRjaCgpO1xuICAgICAgICBkaXNwYXRjaChzdGF0ZSwgcGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHBhcmFtcy5tZW51Lml0ZW1zLmxlbmd0aCA9PT0gMCA/IHRoaXMgOiBuZXh0LmNhbGwodGhpcywgc2hvd01vdXNlRXZlbnQpO1xuICAgICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsZUV4cGxvcmVyTGVhZihhcHA6IEFwcCk6IG51bGwgfCBXb3Jrc3BhY2VMZWFmIHtcbiAgcmV0dXJuIGFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKFZpZXdUeXBlLkZpbGVFeHBsb3JlcilbMF0gPz8gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0U2hhcmVkU3RhdGUoKTogRmlsZUV4cGxvcmVyUm9vdE1lbnVTaGFyZWRTdGF0ZSB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkxpYlN0YXRlPEZpbGVFeHBsb3JlclJvb3RNZW51U2hhcmVkU3RhdGU+KFNIQVJFRF9TVEFURV9LRVksIHtcbiAgICBpbnN0YWxsYXRpb246IG51bGwsXG4gICAgc3Vic2NyaXB0aW9uczogW11cbiAgfSkudmFsdWU7XG59XG5mdW5jdGlvbiBpbnN0YWxsUm9vdE1lbnUoYXBwOiBBcHAsIHN0YXRlOiBGaWxlRXhwbG9yZXJSb290TWVudVNoYXJlZFN0YXRlKTogKCkgPT4gdm9pZCB7XG4gIGxldCBpc1VuaW5zdGFsbGVkID0gZmFsc2U7XG4gIGxldCBwZW5kaW5nU3BvdDogRmlsZUV4cGxvcmVyUm9vdE1lbnVTcG90IHwgbnVsbCA9IG51bGw7XG4gIGxldCB1bmluc3RhbGxQYXRjaDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gdHJ5UGF0Y2goKTogdm9pZCB7XG4gICAgaWYgKGlzVW5pbnN0YWxsZWQgfHwgdW5pbnN0YWxsUGF0Y2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2aWV3ID0gZ2V0RmlsZUV4cGxvcmVyTGVhZihhcHApPy52aWV3O1xuICAgIGlmICghaXNGaWxlRXhwbG9yZXJWaWV3KHZpZXcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdW5pbnN0YWxsUGF0Y2ggPSBhcm91bmQoZ2V0UHJvdG90eXBlT2YodmlldyksIHtcbiAgICAgIG9uRmlsZUNvbnRleHRNZW51OiAobmV4dCkgPT5cbiAgICAgICAgZnVuY3Rpb24gcGF0Y2hlZE9uRmlsZUNvbnRleHRNZW51KHRoaXM6IEZpbGVFeHBsb3JlclZpZXdXaXRoQ29udGV4dE1lbnUsIG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZvbGRlcikgfHwgIWZpbGUuaXNSb290KCkpIHtcbiAgICAgICAgICAgIG5leHQuY2FsbCh0aGlzLCBtb3VzZUV2ZW50LCBmaWxlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvcGVuUm9vdE1lbnUoe1xuICAgICAgICAgICAgbW91c2VFdmVudCxcbiAgICAgICAgICAgIG9wZW5OYXRpdmU6ICgpID0+IHtcbiAgICAgICAgICAgICAgbmV4dC5jYWxsKHRoaXMsIG1vdXNlRXZlbnQsIGZpbGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJvb3RGb2xkZXI6IGZpbGUsXG4gICAgICAgICAgICBzcG90OiBwZW5kaW5nU3BvdCA/PyBGaWxlRXhwbG9yZXJSb290TWVudVNwb3QuRW1wdHlBcmVhXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Sb290TWVudShwYXJhbXM6IE9wZW5Sb290TWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgbW91c2VFdmVudCwgb3Blbk5hdGl2ZSwgcm9vdEZvbGRlciwgc3BvdCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGV2ZW50UmVmID0gYXBwLndvcmtzcGFjZS5vbignZmlsZS1tZW51JywgKG1lbnUsIGZpbGUsIHNvdXJjZSkgPT4ge1xuICAgICAgaWYgKGZpbGUgIT09IHJvb3RGb2xkZXIgfHwgc291cmNlICE9PSBGSUxFX0VYUExPUkVSX01FTlVfU09VUkNFKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBwLndvcmtzcGFjZS5vZmZyZWYoZXZlbnRSZWYpO1xuICAgICAgZGlzcGF0Y2hCZWZvcmVTaG93KHN0YXRlLCB7IG1lbnUsIG1vdXNlRXZlbnQsIHJvb3RGb2xkZXIsIHNwb3QgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN0b3JlSXNSb290ID0gc3RhdGUuc3Vic2NyaXB0aW9ucy5zb21lKChzdWJzY3JpcHRpb24pID0+IHN1YnNjcmlwdGlvbi5zaG91bGRQcmVzZW50Um9vdEFzRm9sZGVyKVxuICAgICAgPyBwcmVzZW50QXNGb2xkZXIocm9vdEZvbGRlcilcbiAgICAgIDogbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBvcGVuTmF0aXZlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlc3RvcmVJc1Jvb3Q/LigpO1xuICAgICAgYXBwLndvcmtzcGFjZS5vZmZyZWYoZXZlbnRSZWYpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Gcm9tVmF1bHROYW1lKG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc09uVmF1bHROYW1lID0gbW91c2VFdmVudC5jb21wb3NlZFBhdGgoKS5zb21lKCh0YXJnZXQpID0+IHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIFZBVUxUX05BTUVfU0VMRUNUT1JTLnNvbWUoKHNlbGVjdG9yKSA9PiB0YXJnZXQubWF0Y2hlcyhzZWxlY3RvcikpKTtcbiAgICBpZiAoIWlzT25WYXVsdE5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBgTWVudS5mb3JFdmVudGAgaGFuZHMgZXZlcnkgbGlzdGVuZXIgb2Ygb25lIGV2ZW50IHRoZSBzYW1lIG1lbnUgYW5kIHNob3dzIGl0IG9uIHRoZSBuZXh0IHRhc2suIE9ic2lkaWFuJ3Mgb3duXG4gICAgLy8gbGlzdGVuZXIgb24gdGhlIHZhdWx0IG5hbWUgYWRkcyBpdHMgdmF1bHQgaXRlbXMgdG8gaXQgYWZ0ZXIgdGhpcyBjYXB0dXJlLXBoYXNlIG9uZSBoYXMgcnVuLlxuICAgIGNvbnN0IHZhdWx0TWVudSA9IE1lbnUuZm9yRXZlbnQobW91c2VFdmVudCk7XG4gICAgY29uc3Qgcm9vdEZvbGRlciA9IGFwcC52YXVsdC5nZXRSb290KCk7XG4gICAgY29uc3QgbGVhZiA9IGdldEZpbGVFeHBsb3JlckxlYWYoYXBwKTtcbiAgICBpZiAoIWxlYWYgfHwgc3RhdGUuc3Vic2NyaXB0aW9ucy5ldmVyeSgoc3Vic2NyaXB0aW9uKSA9PiAhc3Vic2NyaXB0aW9uLnNob3VsZFByZXNlbnRSb290QXNGb2xkZXIpKSB7XG4gICAgICBkaXNwYXRjaEJlZm9yZVNob3coc3RhdGUsIHsgbWVudTogdmF1bHRNZW51LCBtb3VzZUV2ZW50LCByb290Rm9sZGVyLCBzcG90OiBGaWxlRXhwbG9yZXJSb290TWVudVNwb3QuVmF1bHROYW1lIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXNlbnRlZCBhcyBhIGZvbGRlciwgdGhlIHJvb3QncyBmb2xkZXIgbWVudSByZXBsYWNlcyB0aGUgdmF1bHQgbWVudSByYXRoZXIgdGhhbiBvcGVuaW5nIG9uIHRvcCBvZiBpdC5cbiAgICBmdW5jdGlvbiBzdXBwcmVzc1ZhdWx0TWVudVNob3coKTogTWVudSB7XG4gICAgICB1bmluc3RhbGxWYXVsdE1lbnVTaG93UGF0Y2goKTtcbiAgICAgIHJldHVybiB2YXVsdE1lbnU7XG4gICAgfVxuICAgIGNvbnN0IHVuaW5zdGFsbFZhdWx0TWVudVNob3dQYXRjaCA9IGFyb3VuZCh2YXVsdE1lbnUsIHsgc2hvd0F0TW91c2VFdmVudDogKCkgPT4gc3VwcHJlc3NWYXVsdE1lbnVTaG93IH0pO1xuICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGxlYWYubG9hZElmRGVmZXJyZWQoKTtcbiAgICAgIGNvbnN0IHZpZXcgPSBsZWFmLnZpZXc7XG4gICAgICBpZiAoaXNVbmluc3RhbGxlZCB8fCAhaXNGaWxlRXhwbG9yZXJWaWV3KHZpZXcpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5UGF0Y2goKTtcbiAgICAgIHZpZXcudHJlZS5jbGVhclNlbGVjdGVkRG9tcygpO1xuICAgICAgcGVuZGluZ1Nwb3QgPSBGaWxlRXhwbG9yZXJSb290TWVudVNwb3QuVmF1bHROYW1lO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmlldy5vbkZpbGVDb250ZXh0TWVudShtb3VzZUV2ZW50LCByb290Rm9sZGVyKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHBlbmRpbmdTcG90ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRyeVBhdGNoKCk7XG4gIGNvbnN0IGxheW91dENoYW5nZUV2ZW50UmVmID0gYXBwLndvcmtzcGFjZS5vbignbGF5b3V0LWNoYW5nZScsIHRyeVBhdGNoKTtcbiAgYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KHRyeVBhdGNoKTtcbiAgY29uc3QgZG9jID0gYXBwLndvcmtzcGFjZS5jb250YWluZXJFbC5kb2M7XG4gIGRvYy5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIG9wZW5Gcm9tVmF1bHROYW1lLCB7IGNhcHR1cmU6IHRydWUgfSk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpc1VuaW5zdGFsbGVkID0gdHJ1ZTtcbiAgICB1bmluc3RhbGxQYXRjaD8uKCk7XG4gICAgYXBwLndvcmtzcGFjZS5vZmZyZWYobGF5b3V0Q2hhbmdlRXZlbnRSZWYpO1xuICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIG9wZW5Gcm9tVmF1bHROYW1lLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzRmlsZUV4cGxvcmVyVmlldyh2aWV3OiB1bmtub3duKTogdmlldyBpcyBGaWxlRXhwbG9yZXJWaWV3V2l0aENvbnRleHRNZW51IHtcbiAgcmV0dXJuIHR5cGVvZiAodmlldyBhcyBQYXJ0aWFsPEZpbGVFeHBsb3JlclZpZXdXaXRoQ29udGV4dE1lbnU+IHwgdW5kZWZpbmVkKT8ub25GaWxlQ29udGV4dE1lbnUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIHByZXNlbnRBc0ZvbGRlcihyb290Rm9sZGVyOiBURm9sZGVyKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IG93bklzUm9vdERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHJvb3RGb2xkZXIsICdpc1Jvb3QnKTtcbiAgcm9vdEZvbGRlci5pc1Jvb3QgPSAoKTogYm9vbGVhbiA9PiBmYWxzZTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAob3duSXNSb290RGVzY3JpcHRvcikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJvb3RGb2xkZXIsICdpc1Jvb3QnLCBvd25Jc1Jvb3REZXNjcmlwdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIChyb290Rm9sZGVyIGFzIFBhcnRpYWw8VEZvbGRlcj4pLmlzUm9vdDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVJvb3RVbnNhZmVJdGVtcyhtZW51OiBNZW51KTogdm9pZCB7XG4gIGNvbnN0IHVuc2FmZVRpdGxlcyA9IG5ldyBTZXQ8bnVsbCB8IHN0cmluZz4oUk9PVF9VTlNBRkVfSVRFTV9USVRMRV9LRVlTLm1hcCgoa2V5KSA9PiBhY3RpdmVXaW5kb3cuaTE4bmV4dC50KGtleSkpKTtcbiAgbWVudS5pdGVtcyA9IG1lbnUuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiAhKGl0ZW0gaW5zdGFuY2VvZiBNZW51SXRlbSkgfHwgIXVuc2FmZVRpdGxlcy5oYXMoaXRlbS50aXRsZUVsLnRleHRDb250ZW50KSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNkJBLG1CQUFrQztBQUNsQywwQkFBK0I7QUFDL0IsNkJBQXlCO0FBQ3pCLHNCQUlPO0FBRVAsZ0NBQW9DO0FBQ3BDLDBCQUE0QjtBQUM1QixxQ0FBdUI7QUFNaEIsTUFBTSx1QkFBdUI7QUFBQSxFQUNsQztBQUFBLEVBQ0E7QUFDRjtBQUtBLE1BQU0sNEJBQTRCO0FBTWxDLE1BQU0sOEJBQThCO0FBQUEsRUFDbEM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFFQSxNQUFNLG1CQUFtQjtBQUtsQixJQUFLLDJCQUFMLGtCQUFLQSw4QkFBTDtBQUlMLEVBQUFBLDBCQUFBLGVBQVk7QUFLWixFQUFBQSwwQkFBQSxlQUFZO0FBVEYsU0FBQUE7QUFBQSxHQUFBO0FBeUdMLE1BQU0sc0NBQXNDLGdDQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJMUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9aLFlBQVksUUFBd0Q7QUFDekUsVUFBTTtBQUNOLFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssVUFBVSxPQUFPO0FBQ3RCLFNBQUssNEJBQTRCLE9BQU8sNkJBQTZCO0FBQUEsRUFDdkU7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtnQixTQUFlO0FBQzdCLFVBQU0sT0FBTztBQUViLFVBQU0sUUFBUSxlQUFlO0FBQzdCLFVBQU0sZUFBaUQ7QUFBQSxNQUNyRCxTQUFTLEtBQUs7QUFBQSxNQUNkLFNBQVMsTUFBTSxnQkFBZ0IsS0FBSyxLQUFLLEtBQUs7QUFBQSxNQUM5QywyQkFBMkIsS0FBSztBQUFBLElBQ2xDO0FBQ0EsVUFBTSxjQUFjLEtBQUssWUFBWTtBQUNyQyxVQUFNLGlCQUFpQixFQUFFLE9BQU8sY0FBYyxXQUFXLGFBQWEsUUFBUSxFQUFFO0FBRWhGLFNBQUssU0FBUyxNQUFNO0FBQ2xCLFlBQU0sY0FBYyxPQUFPLE1BQU0sY0FBYyxRQUFRLFlBQVksR0FBRyxDQUFDO0FBQ3ZFLFVBQUksTUFBTSxjQUFjLFVBQVUsY0FBYztBQUM5QztBQUFBLE1BQ0Y7QUFFQSxZQUFNLGFBQWEsVUFBVTtBQUM3QixZQUFNLFlBQVksTUFBTSxjQUFjLENBQUM7QUFDdkMsWUFBTSxlQUFlLFlBQVksRUFBRSxPQUFPLFdBQVcsV0FBVyxVQUFVLFFBQVEsRUFBRSxJQUFJO0FBQUEsSUFDMUYsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQUVBLFNBQVMsU0FBUyxPQUF3QyxRQUFpRDtBQUN6RyxNQUFJLE1BQU0sY0FBYyxLQUFLLENBQUMsaUJBQWlCLGFBQWEseUJBQXlCLEdBQUc7QUFDdEYsMEJBQXNCLE9BQU8sSUFBSTtBQUFBLEVBQ25DO0FBSUEsYUFBVyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sYUFBYSxHQUFHO0FBQ25ELFFBQUk7QUFDRixtQkFBYSxRQUFRLE1BQU07QUFBQSxJQUM3QixTQUFTLE9BQU87QUFDZCxjQUFRLE1BQU0sNENBQTRDLEtBQUs7QUFBQSxJQUNqRTtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNBQVMsbUJBQW1CLE9BQXdDLFFBQWlEO0FBQ25ILFFBQU0seUJBQXFCLHVDQUFPLE9BQU8sTUFBTTtBQUFBLElBQzdDLGtCQUFrQixDQUFDLFNBQ2pCLFNBQVMsd0JBQW9DLGdCQUFrQztBQUM3RSx5QkFBbUI7QUFDbkIsZUFBUyxPQUFPLE1BQU07QUFDdEIsYUFBTyxPQUFPLEtBQUssTUFBTSxXQUFXLElBQUksT0FBTyxLQUFLLEtBQUssTUFBTSxjQUFjO0FBQUEsSUFDL0U7QUFBQSxFQUNKLENBQUM7QUFDSDtBQUVBLFNBQVMsb0JBQW9CLEtBQWdDO0FBQzNELFNBQU8sSUFBSSxVQUFVLGdCQUFnQixnQ0FBUyxZQUFZLEVBQUUsQ0FBQyxLQUFLO0FBQ3BFO0FBRUEsU0FBUyxpQkFBa0Q7QUFDekQsYUFBTywrQ0FBcUQsa0JBQWtCO0FBQUEsSUFDNUUsY0FBYztBQUFBLElBQ2QsZUFBZSxDQUFDO0FBQUEsRUFDbEIsQ0FBQyxFQUFFO0FBQ0w7QUFDQSxTQUFTLGdCQUFnQixLQUFVLE9BQW9EO0FBQ3JGLE1BQUksZ0JBQWdCO0FBQ3BCLE1BQUksY0FBK0M7QUFDbkQsTUFBSSxpQkFBc0M7QUFFMUMsV0FBUyxXQUFpQjtBQUN4QixRQUFJLGlCQUFpQixnQkFBZ0I7QUFDbkM7QUFBQSxJQUNGO0FBRUEsVUFBTSxPQUFPLG9CQUFvQixHQUFHLEdBQUc7QUFDdkMsUUFBSSxDQUFDLG1CQUFtQixJQUFJLEdBQUc7QUFDN0I7QUFBQSxJQUNGO0FBRUEseUJBQWlCLDJDQUFPLG9DQUFlLElBQUksR0FBRztBQUFBLE1BQzVDLG1CQUFtQixDQUFDLFNBQ2xCLFNBQVMseUJBQWdFLFlBQXdCLE1BQTJCO0FBQzFILFlBQUksRUFBRSxnQkFBZ0IsNEJBQVksQ0FBQyxLQUFLLE9BQU8sR0FBRztBQUNoRCxlQUFLLEtBQUssTUFBTSxZQUFZLElBQUk7QUFDaEM7QUFBQSxRQUNGO0FBRUEscUJBQWE7QUFBQSxVQUNYO0FBQUEsVUFDQSxZQUFZLE1BQU07QUFDaEIsaUJBQUssS0FBSyxNQUFNLFlBQVksSUFBSTtBQUFBLFVBQ2xDO0FBQUEsVUFDQSxZQUFZO0FBQUEsVUFDWixNQUFNLGVBQWU7QUFBQSxRQUN2QixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0osQ0FBQztBQUFBLEVBQ0g7QUFFQSxXQUFTLGFBQWEsUUFBa0M7QUFDdEQsVUFBTSxFQUFFLFlBQVksWUFBWSxZQUFZLEtBQUssSUFBSTtBQUNyRCxVQUFNLFdBQVcsSUFBSSxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sTUFBTSxXQUFXO0FBQ3JFLFVBQUksU0FBUyxjQUFjLFdBQVcsMkJBQTJCO0FBQy9EO0FBQUEsTUFDRjtBQUVBLFVBQUksVUFBVSxPQUFPLFFBQVE7QUFDN0IseUJBQW1CLE9BQU8sRUFBRSxNQUFNLFlBQVksWUFBWSxLQUFLLENBQUM7QUFBQSxJQUNsRSxDQUFDO0FBRUQsVUFBTSxnQkFBZ0IsTUFBTSxjQUFjLEtBQUssQ0FBQyxpQkFBaUIsYUFBYSx5QkFBeUIsSUFDbkcsZ0JBQWdCLFVBQVUsSUFDMUI7QUFFSixRQUFJO0FBQ0YsaUJBQVc7QUFBQSxJQUNiLFVBQUU7QUFDQSxzQkFBZ0I7QUFDaEIsVUFBSSxVQUFVLE9BQU8sUUFBUTtBQUFBLElBQy9CO0FBQUEsRUFDRjtBQUVBLFdBQVMsa0JBQWtCLFlBQThCO0FBQ3ZELFVBQU0sZ0JBQWdCLFdBQVcsYUFBYSxFQUFFLEtBQUssQ0FBQyxXQUFXLGtCQUFrQixlQUFlLHFCQUFxQixLQUFLLENBQUMsYUFBYSxPQUFPLFFBQVEsUUFBUSxDQUFDLENBQUM7QUFDbkssUUFBSSxDQUFDLGVBQWU7QUFDbEI7QUFBQSxJQUNGO0FBSUEsVUFBTSxZQUFZLHFCQUFLLFNBQVMsVUFBVTtBQUMxQyxVQUFNLGFBQWEsSUFBSSxNQUFNLFFBQVE7QUFDckMsVUFBTSxPQUFPLG9CQUFvQixHQUFHO0FBQ3BDLFFBQUksQ0FBQyxRQUFRLE1BQU0sY0FBYyxNQUFNLENBQUMsaUJBQWlCLENBQUMsYUFBYSx5QkFBeUIsR0FBRztBQUNqRyx5QkFBbUIsT0FBTyxFQUFFLE1BQU0sV0FBVyxZQUFZLFlBQVksTUFBTSw2QkFBbUMsQ0FBQztBQUMvRztBQUFBLElBQ0Y7QUFHQSxhQUFTLHdCQUE4QjtBQUNyQyxrQ0FBNEI7QUFDNUIsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLGtDQUE4Qix1Q0FBTyxXQUFXLEVBQUUsa0JBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDdkcsd0NBQWtCLFlBQVk7QUFDNUIsWUFBTSxLQUFLLGVBQWU7QUFDMUIsWUFBTSxPQUFPLEtBQUs7QUFDbEIsVUFBSSxpQkFBaUIsQ0FBQyxtQkFBbUIsSUFBSSxHQUFHO0FBQzlDO0FBQUEsTUFDRjtBQUVBLGVBQVM7QUFDVCxXQUFLLEtBQUssa0JBQWtCO0FBQzVCLG9CQUFjO0FBQ2QsVUFBSTtBQUNGLGFBQUssa0JBQWtCLFlBQVksVUFBVTtBQUFBLE1BQy9DLFVBQUU7QUFDQSxzQkFBYztBQUFBLE1BQ2hCO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUVBLFdBQVM7QUFDVCxRQUFNLHVCQUF1QixJQUFJLFVBQVUsR0FBRyxpQkFBaUIsUUFBUTtBQUN2RSxNQUFJLFVBQVUsY0FBYyxRQUFRO0FBQ3BDLFFBQU0sTUFBTSxJQUFJLFVBQVUsWUFBWTtBQUN0QyxNQUFJLGlCQUFpQixlQUFlLG1CQUFtQixFQUFFLFNBQVMsS0FBSyxDQUFDO0FBRXhFLFNBQU8sTUFBTTtBQUNYLG9CQUFnQjtBQUNoQixxQkFBaUI7QUFDakIsUUFBSSxVQUFVLE9BQU8sb0JBQW9CO0FBQ3pDLFFBQUksb0JBQW9CLGVBQWUsbUJBQW1CLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFBQSxFQUM3RTtBQUNGO0FBRUEsU0FBUyxtQkFBbUIsTUFBd0Q7QUFDbEYsU0FBTyxPQUFRLE1BQStELHNCQUFzQjtBQUN0RztBQUVBLFNBQVMsZ0JBQWdCLFlBQWlDO0FBQ3hELFFBQU0sc0JBQXNCLE9BQU8seUJBQXlCLFlBQVksUUFBUTtBQUNoRixhQUFXLFNBQVMsTUFBZTtBQUNuQyxTQUFPLE1BQU07QUFDWCxRQUFJLHFCQUFxQjtBQUN2QixhQUFPLGVBQWUsWUFBWSxVQUFVLG1CQUFtQjtBQUFBLElBQ2pFLE9BQU87QUFDTCxhQUFRLFdBQWdDO0FBQUEsSUFDMUM7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLHNCQUFzQixNQUFrQjtBQUMvQyxRQUFNLGVBQWUsSUFBSSxJQUFtQiw0QkFBNEIsSUFBSSxDQUFDLFFBQVEsYUFBYSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakgsT0FBSyxRQUFRLEtBQUssTUFBTSxPQUFPLENBQUMsU0FBUyxFQUFFLGdCQUFnQiw2QkFBYSxDQUFDLGFBQWEsSUFBSSxLQUFLLFFBQVEsV0FBVyxDQUFDO0FBQ3JIOyIsIm5hbWVzIjpbIkZpbGVFeHBsb3JlclJvb3RNZW51U3BvdCJdfQ==
@@ -14,8 +14,8 @@ if you want to view the source, please visit the github repository of this plugi
14
14
  __isPatched: true
15
15
  }
16
16
  );
17
- function extractDefault(module) {
18
- return module && module.__esModule && "default" in module ? module.default : module;
17
+ function extractDefault($module) {
18
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
19
19
  }
20
20
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
21
21
  "@codemirror/autocomplete",
@@ -57,9 +57,9 @@ if you want to view the source, please visit the github repository of this plugi
57
57
  return process;
58
58
  }
59
59
  } else {
60
- const module = originalRequire?.(id);
61
- if (module) {
62
- return extractDefault(module);
60
+ const $module = originalRequire?.(id);
61
+ if ($module) {
62
+ return extractDefault($module);
63
63
  }
64
64
  }
65
65
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -41,8 +41,8 @@ ensureBrowserProcess();
41
41
  __isPatched: true
42
42
  }
43
43
  );
44
- function extractDefault(module) {
45
- return module && module.__esModule && "default" in module ? module.default : module;
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
46
  }
47
47
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
48
  "@codemirror/autocomplete",
@@ -84,9 +84,9 @@ ensureBrowserProcess();
84
84
  return process;
85
85
  }
86
86
  } else {
87
- const module = originalRequire?.(id);
88
- if (module) {
89
- return extractDefault(module);
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
90
  }
91
91
  }
92
92
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -150,7 +150,17 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
150
150
  */
151
151
  constructor(params) {
152
152
  super();
153
- this.options = { accepts: params.accepts, app: params.app, indexFile: params.indexFile, load: params.load, onRemove: params.onRemove, onSet: params.onSet, save: params.save };
153
+ this.options = {
154
+ accepts: params.accepts,
155
+ app: params.app,
156
+ indexFile: params.indexFile,
157
+ load: params.load,
158
+ onRemove: params.onRemove,
159
+ onSet: params.onSet,
160
+ save: params.save,
161
+ shouldAwaitMetadataChange: params.shouldAwaitMetadataChange ?? (() => false),
162
+ shouldMoveRecordsOnRename: params.shouldMoveRecordsOnRename ?? false
163
+ };
154
164
  this.requestSave = (0, import_obsidian.debounce)(
155
165
  () => {
156
166
  (0, import_async.invokeAsyncSafely)(() => this.flush());
@@ -192,8 +202,8 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
192
202
  this.registerEvent(app.metadataCache.on("changed", (file, content) => {
193
203
  this.setText(file, content);
194
204
  }));
195
- this.registerEvent(app.vault.on("create", this.queueScan.bind(this)));
196
- this.registerEvent(app.vault.on("modify", this.queueScan.bind(this)));
205
+ this.registerEvent(app.vault.on("create", this.handleContentEvent.bind(this)));
206
+ this.registerEvent(app.vault.on("modify", this.handleContentEvent.bind(this)));
197
207
  this.registerEvent(app.vault.on("delete", (file) => {
198
208
  if (file instanceof import_obsidian.TFile) {
199
209
  this.removeRecord(file.path);
@@ -254,12 +264,39 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
254
264
  await this.scanFile(file);
255
265
  }
256
266
  }
267
+ handleContentEvent(file) {
268
+ if (!(file instanceof import_obsidian.TFile)) {
269
+ return;
270
+ }
271
+ if (!this.options.shouldAwaitMetadataChange(file)) {
272
+ this.queueScan(file);
273
+ return;
274
+ }
275
+ if (!this.options.accepts(file)) {
276
+ return;
277
+ }
278
+ this.removeRecord(file.path);
279
+ this.revisions.set(file, {});
280
+ }
257
281
  markDirty() {
258
282
  this.revision++;
259
283
  if (this.isBuiltValue && !this.isUnloaded()) {
260
284
  this.requestSave();
261
285
  }
262
286
  }
287
+ moveRecord(file, oldPath) {
288
+ const entry = this.records.get(oldPath);
289
+ if (entry) {
290
+ this.removeRecord(oldPath);
291
+ if (this.options.accepts(file)) {
292
+ this.setRecord(file.path, entry);
293
+ }
294
+ return;
295
+ }
296
+ if (!this.records.has(file.path)) {
297
+ this.queueScan(file);
298
+ }
299
+ }
263
300
  queueScan(file) {
264
301
  if (file instanceof import_obsidian.TFile) {
265
302
  (0, import_async.invokeAsyncSafely)(() => this.scanFile(file));
@@ -281,6 +318,10 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
281
318
  }
282
319
  }
283
320
  rename(file, oldPath) {
321
+ if (this.options.shouldMoveRecordsOnRename) {
322
+ this.renameMovingRecords(file, oldPath);
323
+ return;
324
+ }
284
325
  if (file instanceof import_obsidian.TFile) {
285
326
  this.removeRecord(oldPath);
286
327
  } else {
@@ -291,6 +332,21 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
291
332
  import_obsidian.Vault.recurseChildren(file, this.queueScan.bind(this));
292
333
  }
293
334
  }
335
+ renameMovingRecords(file, oldPath) {
336
+ if (file instanceof import_obsidian.TFile) {
337
+ this.moveRecord(file, oldPath);
338
+ return;
339
+ }
340
+ if (!(file instanceof import_obsidian.TFolder)) {
341
+ return;
342
+ }
343
+ import_obsidian.Vault.recurseChildren(file, (child) => {
344
+ if (child instanceof import_obsidian.TFile) {
345
+ this.moveRecord(child, `${oldPath}${child.path.slice(file.path.length)}`);
346
+ }
347
+ });
348
+ this.removeTree(oldPath);
349
+ }
294
350
  async saveChanges() {
295
351
  while (this.isBuiltValue && this.savedRevision !== this.revision) {
296
352
  const revision = this.revision;
@@ -312,7 +368,15 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
312
368
  if (!isCurrent()) {
313
369
  return;
314
370
  }
315
- const content = await this.options.app.vault.cachedRead(file);
371
+ let content;
372
+ try {
373
+ content = await this.options.app.vault.cachedRead(file);
374
+ } catch (error) {
375
+ if (isCurrent()) {
376
+ throw error;
377
+ }
378
+ return;
379
+ }
316
380
  if (!isCurrent()) {
317
381
  return;
318
382
  }
@@ -337,4 +401,4 @@ class IncrementalFileIndexComponent extends import_component_ex.ComponentEx {
337
401
  0 && (module.exports = {
338
402
  IncrementalFileIndexComponent
339
403
  });
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2luY3JlbWVudGFsLWZpbGUtaW5kZXgtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbmNyZW1lbnRhbCBwZXItZmlsZSBwcm9qZWN0aW9ucyB3aXRoIHN0YXQtYmFzZWQgcmVzdG9yYXRpb24gYW5kIGluamVjdGVkIHBlcnNpc3RlbmNlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBEZWJvdW5jZXIsXG4gIFRBYnN0cmFjdEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7XG4gIGRlYm91bmNlLFxuICBURmlsZSxcbiAgVEZvbGRlcixcbiAgVmF1bHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuY29uc3QgU0FWRV9ERUJPVU5DRV9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuXG4vKipcbiAqIERlcGVuZGVuY2llcyBvZiBhbiBpbmNyZW1lbnRhbCBpbmRleC4gUGVyc2lzdGVuY2UgbXVzdCB2YWxpZGF0ZSBpdHMgb3duIHNjaGVtYS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgaW1tdXRhYmxlIHBlci1maWxlIHByb2plY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5jcmVtZW50YWxGaWxlSW5kZXhDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxUPiB7XG4gIC8qKlxuICAgKiBGaWxlcyBhY2NlcHRlZCBieSB0aGlzIGluZGV4LCBmb3IgZXhhbXBsZSBNYXJrZG93biBmaWxlcyBvbmx5LlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXB0czogKGZpbGU6IFRGaWxlKSA9PiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIG93bmluZyB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBpbW11dGFibGUgcmVjb3JkIHN5bmNocm9ub3VzbHk7IHRleHQgaXMgbmV2ZXIgcmV0YWluZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBpbmRleEZpbGU6IChwYXJhbXM6IEluZGV4RmlsZVBhcmFtcykgPT4gVDtcbiAgLyoqXG4gICAqIFJlYWRzIHZhbGlkYXRlZCByZWNvcmRzLCBvciBhbiBlbXB0eSBtYXAgZm9yIGEgbWlzc2luZy9pbmNvbXBhdGlibGUgY2FjaGUuXG4gICAqL1xuICByZWFkb25seSBsb2FkOiAoKSA9PiBQcm9taXNlPFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+PjtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByZWNvcmQgZnJvbSBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LiBDYWxsZWQgZm9yIGtub3duIHJlY29yZHMgb25seS5cbiAgICovXG4gIHJlYWRvbmx5IG9uUmVtb3ZlOiAocGF0aDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LCBpbmNsdWRpbmcgcmVzdG9yZWQgcmVjb3Jkcy5cbiAgICovXG4gIHJlYWRvbmx5IG9uU2V0OiAocGF0aDogc3RyaW5nLCByZWNvcmQ6IFQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBQZXJzaXN0cyBhIHNuYXBzaG90OyB3cml0ZXMgYXJlIHNlcmlhbGl6ZWQgYW5kIHJldHJpZWQgYnkgdGhlIG5leHQgZmx1c2ggYWZ0ZXIgZmFpbHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNhdmU6IChyZWNvcmRzOiBSZWFkb25seU1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PikgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIHByb2plY3Rpb24gYW5kIHRoZSBmaWxlIHN0YXRzIG9ic2VydmVkIGJlZm9yZSByZWFkaW5nIGl0cyB0ZXh0LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSBpbW11dGFibGUgcGVyLWZpbGUgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleGVkRmlsZVJlY29yZDxUPiB7XG4gIC8qKlxuICAgKiBMYXN0IG1vZGlmaWNhdGlvbiB0aW1lLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSBtdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGNvbnN1bWVyJ3MgaW1tdXRhYmxlIHByb2plY3Rpb24uXG4gICAqL1xuICByZWFkb25seSByZWNvcmQ6IFQ7XG4gIC8qKlxuICAgKiBGaWxlIHNpemUgaW4gYnl0ZXMuXG4gICAqL1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG59XG5cbi8qKlxuICogSW5wdXRzIHRvIGEgcGVyLWZpbGUgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleEZpbGVQYXJhbXMge1xuICAvKipcbiAgICogVGV4dCByZWFkIGZyb20gdGhlIHZhdWx0LCBvciBzdXBwbGllZCBieSBhIG1ldGFkYXRhLWNhY2hlIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZpbGUgYmVpbmcgaW5kZXhlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGU6IFRGaWxlO1xufVxuXG4vKipcbiAqIEtlZXBzIHBlci1maWxlIHByb2plY3Rpb25zIGN1cnJlbnQgd2hpbGUgbG9hZGVkLiBDYWxsIGxvYWRXaXRoUHJvbWlzZXMgYWZ0ZXIgbWV0YWRhdGEgcmVhZGluZXNzIGlmIHRoZVxuICogcHJvamVjdGlvbiBuZWVkcyBjYWNoZWQgbWV0YWRhdGEuIExpc3RlbmVycyBhcmUgaW5zdGFsbGVkIGJlZm9yZSByZXN0b3JhdGlvbiwgYW5kIGV2ZW50cyB3aW4gb3ZlciBvbGRlciByZWFkcy5cbiAqIFJlYWRzIGFyZSBzZXF1ZW50aWFsLCBib3VuZGluZyBtZW1vcnkgYW5kIEkvTzsgY29uc3VtZXJzIG93biBzY2hlbWEsIHN0b3JhZ2UgbG9jYXRpb24gYW5kIHNlY29uZGFyeSBpbmRleGVzLlxuICogVW5jaGFuZ2VkIHJlY29yZHMgYXJlIHJldXNlZCBieSBtdGltZSBhbmQgc2l6ZSwgd2hpY2ggY2Fubm90IGRldGVjdCBhIHNhbWUtc3RhdCBleHRlcm5hbCByZXdyaXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSBpbW11dGFibGUgcGVyLWZpbGUgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEluY3JlbWVudGFsRmlsZUluZGV4Q29tcG9uZW50PFQ+IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogV2hldGhlciBzdGFydHVwIHJlY29uY2lsaWF0aW9uIGhhcyBjb21wbGV0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGluZGV4IGNvbXBsZXRlZCBpdHMgZmlyc3QgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQnVpbHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNCdWlsdFZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2plY3Rpb24sIG5vdGlmaWNhdGlvbnMgYW5kIHBlcnNpc3RlbmNlIHN1cHBsaWVkIGJ5IHRoZSBjb25zdW1lci5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBvcHRpb25zOiBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFQ+O1xuXG4gIHByaXZhdGUgaXNCdWlsdFZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZFRhaWw6IFByb21pc2U8dm9pZD4gPSBub29wQXN5bmMoKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWNvcmRzID0gbmV3IE1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RTYXZlOiBEZWJvdW5jZXI8W10sIHZvaWQ+O1xuICBwcml2YXRlIHJldmlzaW9uID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSByZXZpc2lvbnMgPSBuZXcgV2Vha01hcDxURmlsZSwgb2JqZWN0PigpO1xuICBwcml2YXRlIHNhdmVkUmV2aXNpb24gPSAwO1xuICBwcml2YXRlIHNhdmVQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5kZXggd2l0aCBjb25zdW1lci1vd25lZCBwcm9qZWN0aW9uIGFuZCBwZXJzaXN0ZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBpbmRleCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7IGFjY2VwdHM6IHBhcmFtcy5hY2NlcHRzLCBhcHA6IHBhcmFtcy5hcHAsIGluZGV4RmlsZTogcGFyYW1zLmluZGV4RmlsZSwgbG9hZDogcGFyYW1zLmxvYWQsIG9uUmVtb3ZlOiBwYXJhbXMub25SZW1vdmUsIG9uU2V0OiBwYXJhbXMub25TZXQsIHNhdmU6IHBhcmFtcy5zYXZlIH07XG4gICAgdGhpcy5yZXF1ZXN0U2F2ZSA9IGRlYm91bmNlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgICAgfSxcbiAgICAgIFNBVkVfREVCT1VOQ0VfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgc25hcHNob3QgYWZ0ZXIgcHJldmlvdXMgd3JpdGVzIGZpbmlzaCwgaW5jbHVkaW5nIGNoYW5nZXMgYXJyaXZpbmcgZHVyaW5nIGEgd3JpdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIENvbXBsZXRpb24gb2YgdGhlIHNlcmlhbGl6ZWQgd3JpdGVzOyByZWplY3RzIG9uIHBlcnNpc3RlbmNlIGZhaWx1cmUgd2l0aG91dCBtYXJraW5nIGl0IHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnNhdmVQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNhdmVQcm9taXNlID0gdGhpcy5zYXZlQ2hhbmdlcygpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNhdmVQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNoYWxsb3cgc25hcHNob3Q7IGNvbnN1bWVycyBtdXN0IHRyZWF0IHJlY29yZHMgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBDdXJyZW50IHJlY29yZHMgYnkgdmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBnZXRSZWNvcmRzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLnJlY29yZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjaGFuZ2VzIGJlZm9yZSBzdGFydHVwIHJlc3RvcmF0aW9uLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAubWV0YWRhdGFDYWNoZS5vbignY2hhbmdlZCcsIChmaWxlLCBjb250ZW50KSA9PiB7XG4gICAgICB0aGlzLnNldFRleHQoZmlsZSwgY29udGVudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KGFwcC52YXVsdC5vbignY3JlYXRlJywgdGhpcy5xdWV1ZVNjYW4uYmluZCh0aGlzKSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ21vZGlmeScsIHRoaXMucXVldWVTY2FuLmJpbmQodGhpcykpKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoYXBwLnZhdWx0Lm9uKCdkZWxldGUnLCAoZmlsZSkgPT4ge1xuICAgICAgaWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUcmVlKGZpbGUucGF0aCk7XG4gICAgICB9XG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ3JlbmFtZScsIChmaWxlLCBvbGRQYXRoKSA9PiB7XG4gICAgICB0aGlzLnJlbmFtZShmaWxlLCBvbGRQYXRoKTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2VzIHVuY2hhbmdlZCBzYXZlZCByZWNvcmRzIGFuZCByZWFkcyBvdGhlciBmaWxlcyBvbmUgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHN0YXJ0dXAgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLm9wdGlvbnMubG9hZCgpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVzKCkpIHtcbiAgICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hY2NlcHRzKGZpbGUpIHx8IHRoaXMucmV2aXNpb25zLmhhcyhmaWxlKSB8fCB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgoZmlsZS5wYXRoKSAhPT0gZmlsZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJ5ID0gc2F2ZWQuZ2V0KGZpbGUucGF0aCk7XG4gICAgICBpZiAoZW50cnk/Lm10aW1lID09PSBmaWxlLnN0YXQubXRpbWUgJiYgZW50cnkuc2l6ZSA9PT0gZmlsZS5zdGF0LnNpemUpIHtcbiAgICAgICAgdGhpcy5zZXRSZWNvcmQoZmlsZS5wYXRoLCBlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLnNjYW5GaWxlKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlYWRUYWlsO1xuICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNCdWlsdFZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtEaXJ0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIGRlYm91bmNlIGFuZCBmbHVzaGVzIGNvbXBsZXRlZCBpbmRleGVzIGJlZm9yZSBkaXNwb3NpbmcgZXZlbnQgbGlzdGVuZXJzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdFNhdmUuY2FuY2VsKCk7XG4gICAgaWYgKHRoaXMuaXNCdWlsdFZhbHVlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgIH1cbiAgICBzdXBlci5vbnVubG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYnVpbGRzIHByb2plY3Rpb25zIGZvciBldmVyeSBhY2NlcHRlZCBmaWxlLCBmb3IgZXhhbXBsZSBhZnRlciBhIGNvbnN1bWVyIGxlYXJucyBuZXcgbmFtZXMgdG8gZmluZCBpbiB0ZXh0LlxuICAgKiBFdmVudHMgYXJyaXZpbmcgZHVyaW5nIHRoZSBzY2FuIHN1cGVyc2VkZSBpdHMgb2xkZXIgcmVhZHMuIENvbnN1bWVycyBjb29yZGluYXRlIGFueSBkb21haW4gc2NhbiBtYXJrZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHRoZSBib3VuZGVkIGZ1bGwgc2Nhbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNjYW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMub3B0aW9ucy5hcHAudmF1bHQuZ2V0RmlsZXMoKSkge1xuICAgICAgYXdhaXQgdGhpcy5zY2FuRmlsZShmaWxlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcmtEaXJ0eSgpOiB2b2lkIHtcbiAgICB0aGlzLnJldmlzaW9uKys7XG4gICAgaWYgKHRoaXMuaXNCdWlsdFZhbHVlICYmICF0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgdGhpcy5yZXF1ZXN0U2F2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcXVldWVTY2FuKGZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLnNjYW5GaWxlKGZpbGUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlY29yZChwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVjb3Jkcy5kZWxldGUocGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMub25SZW1vdmUocGF0aCk7XG4gICAgdGhpcy5tYXJrRGlydHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlVHJlZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLnJlY29yZHMua2V5cygpKSB7XG4gICAgICBpZiAoIShrZXkgPT09IHBhdGggfHwga2V5LnN0YXJ0c1dpdGgoYCR7cGF0aH0vYCkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuYW1lKGZpbGU6IFRBYnN0cmFjdEZpbGUsIG9sZFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgIHRoaXMucmVtb3ZlUmVjb3JkKG9sZFBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZVRyZWUob2xkUGF0aCk7XG4gICAgfVxuICAgIHRoaXMucXVldWVTY2FuKGZpbGUpO1xuICAgIGlmIChmaWxlIGluc3RhbmNlb2YgVEZvbGRlcikge1xuICAgICAgVmF1bHQucmVjdXJzZUNoaWxkcmVuKGZpbGUsIHRoaXMucXVldWVTY2FuLmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZUNoYW5nZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRoaXMuaXNCdWlsdFZhbHVlICYmIHRoaXMuc2F2ZWRSZXZpc2lvbiAhPT0gdGhpcy5yZXZpc2lvbikge1xuICAgICAgY29uc3QgcmV2aXNpb24gPSB0aGlzLnJldmlzaW9uO1xuICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLnNhdmUobmV3IE1hcCh0aGlzLnJlY29yZHMpKTtcbiAgICAgIHRoaXMuc2F2ZWRSZXZpc2lvbiA9IHJldmlzaW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2NhbkZpbGUoZmlsZTogVEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkgfHwgIXRoaXMub3B0aW9ucy5hY2NlcHRzKGZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlUmVjb3JkKGZpbGUucGF0aCk7XG4gICAgY29uc3QgdG9rZW4gPSB7fTtcbiAgICB0aGlzLnJldmlzaW9ucy5zZXQoZmlsZSwgdG9rZW4pO1xuICAgIGNvbnN0IHsgcGF0aCB9ID0gZmlsZTtcbiAgICBjb25zdCB7IG10aW1lLCBzaXplIH0gPSBmaWxlLnN0YXQ7XG4gICAgY29uc3QgaXNDdXJyZW50ID0gKCk6IGJvb2xlYW4gPT5cbiAgICAgICF0aGlzLmlzVW5sb2FkZWQoKSAmJiB0aGlzLnJldmlzaW9ucy5nZXQoZmlsZSkgPT09IHRva2VuICYmIGZpbGUucGF0aCA9PT0gcGF0aFxuICAgICAgJiYgZmlsZS5zdGF0Lm10aW1lID09PSBtdGltZSAmJiBmaWxlLnN0YXQuc2l6ZSA9PT0gc2l6ZSAmJiB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGF0aCkgPT09IGZpbGU7XG4gICAgY29uc3QgcmVhZCA9IHRoaXMucmVhZFRhaWwudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWlzQ3VycmVudCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSk7XG4gICAgICBpZiAoIWlzQ3VycmVudCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VGV4dChmaWxlLCBjb250ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLnJlYWRUYWlsID0gcmVhZC5jYXRjaChub29wKTtcbiAgICBhd2FpdCByZWFkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSZWNvcmQocGF0aDogc3RyaW5nLCBlbnRyeTogSW5kZXhlZEZpbGVSZWNvcmQ8VD4pOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZHMuc2V0KHBhdGgsIGVudHJ5KTtcbiAgICB0aGlzLm9wdGlvbnMub25TZXQocGF0aCwgZW50cnkucmVjb3JkKTtcbiAgICB0aGlzLm1hcmtEaXJ0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUZXh0KGZpbGU6IFRGaWxlLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJldmlzaW9ucy5zZXQoZmlsZSwge30pO1xuICAgIGlmICghdGhpcy5pc1VubG9hZGVkKCkgJiYgdGhpcy5vcHRpb25zLmFjY2VwdHMoZmlsZSkpIHtcbiAgICAgIHRoaXMuc2V0UmVjb3JkKGZpbGUucGF0aCwgeyBtdGltZTogZmlsZS5zdGF0Lm10aW1lLCByZWNvcmQ6IHRoaXMub3B0aW9ucy5pbmRleEZpbGUoeyBjb250ZW50LCBmaWxlIH0pLCBzaXplOiBmaWxlLnN0YXQuc2l6ZSB9KTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLG1CQUFrQztBQUNsQyxzQkFHTztBQUNQLHNCQUtPO0FBRVAsMEJBQTRCO0FBRTVCLE1BQU0sZ0NBQWdDO0FBZ0YvQixNQUFNLHNDQUF5QyxnQ0FBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1oRSxJQUFXLFVBQW1CO0FBQzVCLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUttQjtBQUFBLEVBRVgsZUFBZTtBQUFBLEVBQ2YsZUFBMEIsMkJBQVU7QUFBQSxFQUMzQixVQUFVLG9CQUFJLElBQWtDO0FBQUEsRUFDaEQ7QUFBQSxFQUNULFdBQVc7QUFBQSxFQUNGLFlBQVksb0JBQUksUUFBdUI7QUFBQSxFQUNoRCxnQkFBZ0I7QUFBQSxFQUNoQixjQUFvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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
404
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2luY3JlbWVudGFsLWZpbGUtaW5kZXgtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbmNyZW1lbnRhbCBwZXItZmlsZSBwcm9qZWN0aW9ucyB3aXRoIHN0YXQtYmFzZWQgcmVzdG9yYXRpb24gYW5kIGluamVjdGVkIHBlcnNpc3RlbmNlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBEZWJvdW5jZXIsXG4gIFRBYnN0cmFjdEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7XG4gIGRlYm91bmNlLFxuICBURmlsZSxcbiAgVEZvbGRlcixcbiAgVmF1bHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuY29uc3QgU0FWRV9ERUJPVU5DRV9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuXG4vKipcbiAqIERlcGVuZGVuY2llcyBvZiBhbiBpbmNyZW1lbnRhbCBpbmRleC4gUGVyc2lzdGVuY2UgbXVzdCB2YWxpZGF0ZSBpdHMgb3duIHNjaGVtYS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgaW1tdXRhYmxlIHBlci1maWxlIHByb2plY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5jcmVtZW50YWxGaWxlSW5kZXhDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxUPiB7XG4gIC8qKlxuICAgKiBGaWxlcyBhY2NlcHRlZCBieSB0aGlzIGluZGV4LCBmb3IgZXhhbXBsZSBNYXJrZG93biBmaWxlcyBvbmx5LlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXB0czogKGZpbGU6IFRGaWxlKSA9PiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIG93bmluZyB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBpbW11dGFibGUgcmVjb3JkIHN5bmNocm9ub3VzbHk7IHRleHQgaXMgbmV2ZXIgcmV0YWluZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBpbmRleEZpbGU6IChwYXJhbXM6IEluZGV4RmlsZVBhcmFtcykgPT4gVDtcbiAgLyoqXG4gICAqIFJlYWRzIHZhbGlkYXRlZCByZWNvcmRzLCBvciBhbiBlbXB0eSBtYXAgZm9yIGEgbWlzc2luZy9pbmNvbXBhdGlibGUgY2FjaGUuXG4gICAqL1xuICByZWFkb25seSBsb2FkOiAoKSA9PiBQcm9taXNlPFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+PjtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByZWNvcmQgZnJvbSBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LiBDYWxsZWQgZm9yIGtub3duIHJlY29yZHMgb25seS5cbiAgICovXG4gIHJlYWRvbmx5IG9uUmVtb3ZlOiAocGF0aDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LCBpbmNsdWRpbmcgcmVzdG9yZWQgcmVjb3Jkcy5cbiAgICovXG4gIHJlYWRvbmx5IG9uU2V0OiAocGF0aDogc3RyaW5nLCByZWNvcmQ6IFQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBQZXJzaXN0cyBhIHNuYXBzaG90OyB3cml0ZXMgYXJlIHNlcmlhbGl6ZWQgYW5kIHJldHJpZWQgYnkgdGhlIG5leHQgZmx1c2ggYWZ0ZXIgZmFpbHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNhdmU6IChyZWNvcmRzOiBSZWFkb25seU1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBjcmVhdGUgb3IgbW9kaWZ5IG9mIHRoZSBmaWxlIGlzIGZvbGxvd2VkIGJ5IGEgbWV0YWRhdGEtY2FjaGUgYGNoYW5nZWRgIGV2ZW50IGNhcnJ5aW5nIGl0cyB0ZXh0LCBhcyBmb3JcbiAgICogTWFya2Rvd24gbm90ZXMuIFN1Y2ggYSBmaWxlIGRyb3BzIGl0cyBzdGFsZSBwcm9qZWN0aW9uIGFuZCBpcyBub3QgcmVhZDsgaXRzIHJlY29yZCByZXR1cm5zIHdpdGggdGhhdCBldmVudCwgb3JcbiAgICogd2l0aCB0aGUgbmV4dCBzdGFydHVwIG9yIHtAbGluayBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudC5yZXNjYW59IHdoZW4gT2JzaWRpYW4gcmFpc2VzIG5vbmUgKGEgbW9kaWZ5IHRoYXQgbGVmdFxuICAgKiB0aGUgY29udGVudCB1bmNoYW5nZWQpLiBDb25zdW1lcnMgbXVzdCB0cmVhdCBhIGZpbGUgd2l0aG91dCBhIHJlY29yZCBhcyB1bmtub3duLiBEZWZhdWx0cyB0byBuZXZlci5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEF3YWl0TWV0YWRhdGFDaGFuZ2U/OiAoZmlsZTogVEZpbGUpID0+IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgcHJvamVjdGlvbiBkZXBlbmRzIG9uIHRleHQgYWxvbmUsIHNvIGEgcmVuYW1lIG1vdmVzIGl0IHdpdGggaXRzIHN0YXRzIGluc3RlYWQgb2YgcmVhZGluZyB0aGUgZmlsZSBhZ2Fpbi5cbiAgICogQSBmaWxlIHJlbmFtZWQgdG8gYSBwYXRoIHtAbGluayBhY2NlcHRzfSByZWplY3RzIGxvc2VzIGl0cyByZWNvcmQgZWl0aGVyIHdheS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZE1vdmVSZWNvcmRzT25SZW5hbWU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgcHJvamVjdGlvbiBhbmQgdGhlIGZpbGUgc3RhdHMgb2JzZXJ2ZWQgYmVmb3JlIHJlYWRpbmcgaXRzIHRleHQuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIGltbXV0YWJsZSBwZXItZmlsZSBwcm9qZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4ZWRGaWxlUmVjb3JkPFQ+IHtcbiAgLyoqXG4gICAqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIHJlYWRvbmx5IG10aW1lOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgY29uc3VtZXIncyBpbW11dGFibGUgcHJvamVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZDogVDtcbiAgLyoqXG4gICAqIEZpbGUgc2l6ZSBpbiBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNpemU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBJbnB1dHMgdG8gYSBwZXItZmlsZSBwcm9qZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4RmlsZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUZXh0IHJlYWQgZnJvbSB0aGUgdmF1bHQsIG9yIHN1cHBsaWVkIGJ5IGEgbWV0YWRhdGEtY2FjaGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBiZWluZyBpbmRleGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZTogVEZpbGU7XG59XG5cbi8qKlxuICogS2VlcHMgcGVyLWZpbGUgcHJvamVjdGlvbnMgY3VycmVudCB3aGlsZSBsb2FkZWQuIENhbGwgbG9hZFdpdGhQcm9taXNlcyBhZnRlciBtZXRhZGF0YSByZWFkaW5lc3MgaWYgdGhlXG4gKiBwcm9qZWN0aW9uIG5lZWRzIGNhY2hlZCBtZXRhZGF0YS4gTGlzdGVuZXJzIGFyZSBpbnN0YWxsZWQgYmVmb3JlIHJlc3RvcmF0aW9uLCBhbmQgZXZlbnRzIHdpbiBvdmVyIG9sZGVyIHJlYWRzLlxuICogUmVhZHMgYXJlIHNlcXVlbnRpYWwsIGJvdW5kaW5nIG1lbW9yeSBhbmQgSS9POyBjb25zdW1lcnMgb3duIHNjaGVtYSwgc3RvcmFnZSBsb2NhdGlvbiBhbmQgc2Vjb25kYXJ5IGluZGV4ZXMuXG4gKiBVbmNoYW5nZWQgcmVjb3JkcyBhcmUgcmV1c2VkIGJ5IG10aW1lIGFuZCBzaXplLCB3aGljaCBjYW5ub3QgZGV0ZWN0IGEgc2FtZS1zdGF0IGV4dGVybmFsIHJld3JpdGUuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIGltbXV0YWJsZSBwZXItZmlsZSBwcm9qZWN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSW5jcmVtZW50YWxGaWxlSW5kZXhDb21wb25lbnQ8VD4gZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHN0YXJ0dXAgcmVjb25jaWxpYXRpb24gaGFzIGNvbXBsZXRlZC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgaW5kZXggY29tcGxldGVkIGl0cyBmaXJzdCByZWNvbmNpbGlhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNCdWlsdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0J1aWx0VmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUHJvamVjdGlvbiwgbm90aWZpY2F0aW9ucyBhbmQgcGVyc2lzdGVuY2Ugc3VwcGxpZWQgYnkgdGhlIGNvbnN1bWVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wdGlvbnM6IFJlcXVpcmVkPEluY3JlbWVudGFsRmlsZUluZGV4Q29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXM8VD4+O1xuXG4gIHByaXZhdGUgaXNCdWlsdFZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZFRhaWw6IFByb21pc2U8dm9pZD4gPSBub29wQXN5bmMoKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWNvcmRzID0gbmV3IE1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RTYXZlOiBEZWJvdW5jZXI8W10sIHZvaWQ+O1xuICBwcml2YXRlIHJldmlzaW9uID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSByZXZpc2lvbnMgPSBuZXcgV2Vha01hcDxURmlsZSwgb2JqZWN0PigpO1xuICBwcml2YXRlIHNhdmVkUmV2aXNpb24gPSAwO1xuICBwcml2YXRlIHNhdmVQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5kZXggd2l0aCBjb25zdW1lci1vd25lZCBwcm9qZWN0aW9uIGFuZCBwZXJzaXN0ZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBpbmRleCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBhY2NlcHRzOiBwYXJhbXMuYWNjZXB0cyxcbiAgICAgIGFwcDogcGFyYW1zLmFwcCxcbiAgICAgIGluZGV4RmlsZTogcGFyYW1zLmluZGV4RmlsZSxcbiAgICAgIGxvYWQ6IHBhcmFtcy5sb2FkLFxuICAgICAgb25SZW1vdmU6IHBhcmFtcy5vblJlbW92ZSxcbiAgICAgIG9uU2V0OiBwYXJhbXMub25TZXQsXG4gICAgICBzYXZlOiBwYXJhbXMuc2F2ZSxcbiAgICAgIHNob3VsZEF3YWl0TWV0YWRhdGFDaGFuZ2U6IHBhcmFtcy5zaG91bGRBd2FpdE1ldGFkYXRhQ2hhbmdlID8/ICgoKTogYm9vbGVhbiA9PiBmYWxzZSksXG4gICAgICBzaG91bGRNb3ZlUmVjb3Jkc09uUmVuYW1lOiBwYXJhbXMuc2hvdWxkTW92ZVJlY29yZHNPblJlbmFtZSA/PyBmYWxzZVxuICAgIH07XG4gICAgdGhpcy5yZXF1ZXN0U2F2ZSA9IGRlYm91bmNlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgICAgfSxcbiAgICAgIFNBVkVfREVCT1VOQ0VfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgc25hcHNob3QgYWZ0ZXIgcHJldmlvdXMgd3JpdGVzIGZpbmlzaCwgaW5jbHVkaW5nIGNoYW5nZXMgYXJyaXZpbmcgZHVyaW5nIGEgd3JpdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIENvbXBsZXRpb24gb2YgdGhlIHNlcmlhbGl6ZWQgd3JpdGVzOyByZWplY3RzIG9uIHBlcnNpc3RlbmNlIGZhaWx1cmUgd2l0aG91dCBtYXJraW5nIGl0IHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnNhdmVQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNhdmVQcm9taXNlID0gdGhpcy5zYXZlQ2hhbmdlcygpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNhdmVQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNoYWxsb3cgc25hcHNob3Q7IGNvbnN1bWVycyBtdXN0IHRyZWF0IHJlY29yZHMgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBDdXJyZW50IHJlY29yZHMgYnkgdmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBnZXRSZWNvcmRzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLnJlY29yZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjaGFuZ2VzIGJlZm9yZSBzdGFydHVwIHJlc3RvcmF0aW9uLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAubWV0YWRhdGFDYWNoZS5vbignY2hhbmdlZCcsIChmaWxlLCBjb250ZW50KSA9PiB7XG4gICAgICB0aGlzLnNldFRleHQoZmlsZSwgY29udGVudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KGFwcC52YXVsdC5vbignY3JlYXRlJywgdGhpcy5oYW5kbGVDb250ZW50RXZlbnQuYmluZCh0aGlzKSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ21vZGlmeScsIHRoaXMuaGFuZGxlQ29udGVudEV2ZW50LmJpbmQodGhpcykpKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoYXBwLnZhdWx0Lm9uKCdkZWxldGUnLCAoZmlsZSkgPT4ge1xuICAgICAgaWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUcmVlKGZpbGUucGF0aCk7XG4gICAgICB9XG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ3JlbmFtZScsIChmaWxlLCBvbGRQYXRoKSA9PiB7XG4gICAgICB0aGlzLnJlbmFtZShmaWxlLCBvbGRQYXRoKTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2VzIHVuY2hhbmdlZCBzYXZlZCByZWNvcmRzIGFuZCByZWFkcyBvdGhlciBmaWxlcyBvbmUgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHN0YXJ0dXAgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLm9wdGlvbnMubG9hZCgpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVzKCkpIHtcbiAgICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hY2NlcHRzKGZpbGUpIHx8IHRoaXMucmV2aXNpb25zLmhhcyhmaWxlKSB8fCB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgoZmlsZS5wYXRoKSAhPT0gZmlsZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJ5ID0gc2F2ZWQuZ2V0KGZpbGUucGF0aCk7XG4gICAgICBpZiAoZW50cnk/Lm10aW1lID09PSBmaWxlLnN0YXQubXRpbWUgJiYgZW50cnkuc2l6ZSA9PT0gZmlsZS5zdGF0LnNpemUpIHtcbiAgICAgICAgdGhpcy5zZXRSZWNvcmQoZmlsZS5wYXRoLCBlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLnNjYW5GaWxlKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlYWRUYWlsO1xuICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNCdWlsdFZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtEaXJ0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIGRlYm91bmNlIGFuZCBmbHVzaGVzIGNvbXBsZXRlZCBpbmRleGVzIGJlZm9yZSBkaXNwb3NpbmcgZXZlbnQgbGlzdGVuZXJzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdFNhdmUuY2FuY2VsKCk7XG4gICAgaWYgKHRoaXMuaXNCdWlsdFZhbHVlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgIH1cbiAgICBzdXBlci5vbnVubG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYnVpbGRzIHByb2plY3Rpb25zIGZvciBldmVyeSBhY2NlcHRlZCBmaWxlLCBmb3IgZXhhbXBsZSBhZnRlciBhIGNvbnN1bWVyIGxlYXJucyBuZXcgbmFtZXMgdG8gZmluZCBpbiB0ZXh0LlxuICAgKiBFdmVudHMgYXJyaXZpbmcgZHVyaW5nIHRoZSBzY2FuIHN1cGVyc2VkZSBpdHMgb2xkZXIgcmVhZHMuIENvbnN1bWVycyBjb29yZGluYXRlIGFueSBkb21haW4gc2NhbiBtYXJrZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHRoZSBib3VuZGVkIGZ1bGwgc2Nhbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNjYW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMub3B0aW9ucy5hcHAudmF1bHQuZ2V0RmlsZXMoKSkge1xuICAgICAgYXdhaXQgdGhpcy5zY2FuRmlsZShmaWxlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbnRlbnRFdmVudChmaWxlOiBUQWJzdHJhY3RGaWxlKTogdm9pZCB7XG4gICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zaG91bGRBd2FpdE1ldGFkYXRhQ2hhbmdlKGZpbGUpKSB7XG4gICAgICB0aGlzLnF1ZXVlU2NhbihmaWxlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuYWNjZXB0cyhmaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgIC8vIEEgZnJlc2ggdG9rZW4gc3VwZXJzZWRlcyBxdWV1ZWQgcmVhZHMsIGFuZCBzdGFydHVwIGxlYXZlcyB0aGUgc2F2ZWQgZW50cnkgdG8gdGhlIGNvbWluZyBgY2hhbmdlZGAgZXZlbnQuXG4gICAgdGhpcy5yZXZpc2lvbnMuc2V0KGZpbGUsIHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0RpcnR5KCk6IHZvaWQge1xuICAgIHRoaXMucmV2aXNpb24rKztcbiAgICBpZiAodGhpcy5pc0J1aWx0VmFsdWUgJiYgIXRoaXMuaXNVbmxvYWRlZCgpKSB7XG4gICAgICB0aGlzLnJlcXVlc3RTYXZlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlUmVjb3JkKGZpbGU6IFRGaWxlLCBvbGRQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMucmVjb3Jkcy5nZXQob2xkUGF0aCk7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChvbGRQYXRoKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWNjZXB0cyhmaWxlKSkge1xuICAgICAgICB0aGlzLnNldFJlY29yZChmaWxlLnBhdGgsIGVudHJ5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQSByZWNvcmQgYWxyZWFkeSBhdCB0aGUgbmV3IHBhdGggbWVhbnMgYW5vdGhlciBldmVudCBmb3IgdGhpcyByZW5hbWUgbW92ZWQgaXQgZmlyc3QuXG4gICAgaWYgKCF0aGlzLnJlY29yZHMuaGFzKGZpbGUucGF0aCkpIHtcbiAgICAgIHRoaXMucXVldWVTY2FuKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcXVldWVTY2FuKGZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLnNjYW5GaWxlKGZpbGUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlY29yZChwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVjb3Jkcy5kZWxldGUocGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMub25SZW1vdmUocGF0aCk7XG4gICAgdGhpcy5tYXJrRGlydHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlVHJlZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLnJlY29yZHMua2V5cygpKSB7XG4gICAgICBpZiAoIShrZXkgPT09IHBhdGggfHwga2V5LnN0YXJ0c1dpdGgoYCR7cGF0aH0vYCkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuYW1lKGZpbGU6IFRBYnN0cmFjdEZpbGUsIG9sZFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvdWxkTW92ZVJlY29yZHNPblJlbmFtZSkge1xuICAgICAgdGhpcy5yZW5hbWVNb3ZpbmdSZWNvcmRzKGZpbGUsIG9sZFBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChvbGRQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVUcmVlKG9sZFBhdGgpO1xuICAgIH1cbiAgICB0aGlzLnF1ZXVlU2NhbihmaWxlKTtcbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpIHtcbiAgICAgIFZhdWx0LnJlY3Vyc2VDaGlsZHJlbihmaWxlLCB0aGlzLnF1ZXVlU2Nhbi5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmFtZU1vdmluZ1JlY29yZHMoZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgdGhpcy5tb3ZlUmVjb3JkKGZpbGUsIG9sZFBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZvbGRlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gT2JzaWRpYW4gbWF5IGFsc28gcmFpc2UgYSByZW5hbWUgcGVyIGRlc2NlbmRhbnQsIGluIGVpdGhlciBvcmRlcjsgbW92aW5nIGlzIGlkZW1wb3RlbnQgYWNyb3NzIGJvdGguXG4gICAgVmF1bHQucmVjdXJzZUNoaWxkcmVuKGZpbGUsIChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgdGhpcy5tb3ZlUmVjb3JkKGNoaWxkLCBgJHtvbGRQYXRofSR7Y2hpbGQucGF0aC5zbGljZShmaWxlLnBhdGgubGVuZ3RoKX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlbW92ZVRyZWUob2xkUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVDaGFuZ2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0aGlzLmlzQnVpbHRWYWx1ZSAmJiB0aGlzLnNhdmVkUmV2aXNpb24gIT09IHRoaXMucmV2aXNpb24pIHtcbiAgICAgIGNvbnN0IHJldmlzaW9uID0gdGhpcy5yZXZpc2lvbjtcbiAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5zYXZlKG5ldyBNYXAodGhpcy5yZWNvcmRzKSk7XG4gICAgICB0aGlzLnNhdmVkUmV2aXNpb24gPSByZXZpc2lvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNjYW5GaWxlKGZpbGU6IFRGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNVbmxvYWRlZCgpIHx8ICF0aGlzLm9wdGlvbnMuYWNjZXB0cyhmaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgIGNvbnN0IHRva2VuID0ge307XG4gICAgdGhpcy5yZXZpc2lvbnMuc2V0KGZpbGUsIHRva2VuKTtcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XG4gICAgY29uc3QgeyBtdGltZSwgc2l6ZSB9ID0gZmlsZS5zdGF0O1xuICAgIGNvbnN0IGlzQ3VycmVudCA9ICgpOiBib29sZWFuID0+XG4gICAgICAhdGhpcy5pc1VubG9hZGVkKCkgJiYgdGhpcy5yZXZpc2lvbnMuZ2V0KGZpbGUpID09PSB0b2tlbiAmJiBmaWxlLnBhdGggPT09IHBhdGhcbiAgICAgICYmIGZpbGUuc3RhdC5tdGltZSA9PT0gbXRpbWUgJiYgZmlsZS5zdGF0LnNpemUgPT09IHNpemUgJiYgdGhpcy5vcHRpb25zLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhdGgpID09PSBmaWxlO1xuICAgIGNvbnN0IHJlYWQgPSB0aGlzLnJlYWRUYWlsLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFpc0N1cnJlbnQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgY29udGVudDogc3RyaW5nO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29udGVudCA9IGF3YWl0IHRoaXMub3B0aW9ucy5hcHAudmF1bHQuY2FjaGVkUmVhZChmaWxlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEEgZmlsZSBkZWxldGVkIG9yIHJlbmFtZWQgZHVyaW5nIGl0cyByZWFkIGlzIHRoZSBldmVudCBoYW5kbGVycycgdG8gYWNjb3VudCBmb3IuXG4gICAgICAgIGlmIChpc0N1cnJlbnQoKSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaXNDdXJyZW50KCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRUZXh0KGZpbGUsIGNvbnRlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMucmVhZFRhaWwgPSByZWFkLmNhdGNoKG5vb3ApO1xuICAgIGF3YWl0IHJlYWQ7XG4gIH1cblxuICBwcml2YXRlIHNldFJlY29yZChwYXRoOiBzdHJpbmcsIGVudHJ5OiBJbmRleGVkRmlsZVJlY29yZDxUPik6IHZvaWQge1xuICAgIHRoaXMucmVjb3Jkcy5zZXQocGF0aCwgZW50cnkpO1xuICAgIHRoaXMub3B0aW9ucy5vblNldChwYXRoLCBlbnRyeS5yZWNvcmQpO1xuICAgIHRoaXMubWFya0RpcnR5KCk7XG4gIH1cblxuICBwcml2YXRlIHNldFRleHQoZmlsZTogVEZpbGUsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmV2aXNpb25zLnNldChmaWxlLCB7fSk7XG4gICAgaWYgKCF0aGlzLmlzVW5sb2FkZWQoKSAmJiB0aGlzLm9wdGlvbnMuYWNjZXB0cyhmaWxlKSkge1xuICAgICAgdGhpcy5zZXRSZWNvcmQoZmlsZS5wYXRoLCB7IG10aW1lOiBmaWxlLnN0YXQubXRpbWUsIHJlY29yZDogdGhpcy5vcHRpb25zLmluZGV4RmlsZSh7IGNvbnRlbnQsIGZpbGUgfSksIHNpemU6IGZpbGUuc3RhdC5zaXplIH0pO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsbUJBQWtDO0FBQ2xDLHNCQUdPO0FBQ1Asc0JBS087QUFFUCwwQkFBNEI7QUFFNUIsTUFBTSxnQ0FBZ0M7QUE0Ri9CLE1BQU0sc0NBQXlDLGdDQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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
@@ -41,6 +41,18 @@ export interface IncrementalFileIndexComponentConstructorParams<T> {
41
41
  * Persists a snapshot; writes are serialized and retried by the next flush after failure.
42
42
  */
43
43
  readonly save: (records: ReadonlyMap<string, IndexedFileRecord<T>>) => Promise<void>;
44
+ /**
45
+ * Whether a create or modify of the file is followed by a metadata-cache `changed` event carrying its text, as for
46
+ * Markdown notes. Such a file drops its stale projection and is not read; its record returns with that event, or
47
+ * with the next startup or {@link IncrementalFileIndexComponent.rescan} when Obsidian raises none (a modify that left
48
+ * the content unchanged). Consumers must treat a file without a record as unknown. Defaults to never.
49
+ */
50
+ readonly shouldAwaitMetadataChange?: (file: TFile) => boolean;
51
+ /**
52
+ * Whether a projection depends on text alone, so a rename moves it with its stats instead of reading the file again.
53
+ * A file renamed to a path {@link accepts} rejects loses its record either way. Defaults to `false`.
54
+ */
55
+ readonly shouldMoveRecordsOnRename?: boolean;
44
56
  }
45
57
  /**
46
58
  * A projection and the file stats observed before reading its text.
@@ -92,7 +104,7 @@ export declare class IncrementalFileIndexComponent<T> extends ComponentEx {
92
104
  /**
93
105
  * Projection, notifications and persistence supplied by the consumer.
94
106
  */
95
- protected readonly options: IncrementalFileIndexComponentConstructorParams<T>;
107
+ protected readonly options: Required<IncrementalFileIndexComponentConstructorParams<T>>;
96
108
  private isBuiltValue;
97
109
  private readTail;
98
110
  private readonly records;
@@ -140,11 +152,14 @@ export declare class IncrementalFileIndexComponent<T> extends ComponentEx {
140
152
  * @returns Completion of the bounded full scan.
141
153
  */
142
154
  rescan(): Promise<void>;
155
+ private handleContentEvent;
143
156
  private markDirty;
157
+ private moveRecord;
144
158
  private queueScan;
145
159
  private removeRecord;
146
160
  private removeTree;
147
161
  private rename;
162
+ private renameMovingRecords;
148
163
  private saveChanges;
149
164
  private scanFile;
150
165
  private setRecord;
@@ -14,8 +14,8 @@ if you want to view the source, please visit the github repository of this plugi
14
14
  __isPatched: true
15
15
  }
16
16
  );
17
- function extractDefault(module) {
18
- return module && module.__esModule && "default" in module ? module.default : module;
17
+ function extractDefault($module) {
18
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
19
19
  }
20
20
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
21
21
  "@codemirror/autocomplete",
@@ -57,9 +57,9 @@ if you want to view the source, please visit the github repository of this plugi
57
57
  return process;
58
58
  }
59
59
  } else {
60
- const module = originalRequire?.(id);
61
- if (module) {
62
- return extractDefault(module);
60
+ const $module = originalRequire?.(id);
61
+ if ($module) {
62
+ return extractDefault($module);
63
63
  }
64
64
  }
65
65
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -41,8 +41,8 @@ ensureBrowserProcess();
41
41
  __isPatched: true
42
42
  }
43
43
  );
44
- function extractDefault(module) {
45
- return module && module.__esModule && "default" in module ? module.default : module;
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
46
  }
47
47
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
48
  "@codemirror/autocomplete",
@@ -84,9 +84,9 @@ ensureBrowserProcess();
84
84
  return process;
85
85
  }
86
86
  } else {
87
- const module = originalRequire?.(id);
88
- if (module) {
89
- return extractDefault(module);
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
90
  }
91
91
  }
92
92
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -14,8 +14,8 @@ if you want to view the source, please visit the github repository of this plugi
14
14
  __isPatched: true
15
15
  }
16
16
  );
17
- function extractDefault(module) {
18
- return module && module.__esModule && "default" in module ? module.default : module;
17
+ function extractDefault($module) {
18
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
19
19
  }
20
20
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
21
21
  "@codemirror/autocomplete",
@@ -57,9 +57,9 @@ if you want to view the source, please visit the github repository of this plugi
57
57
  return process;
58
58
  }
59
59
  } else {
60
- const module = originalRequire?.(id);
61
- if (module) {
62
- return extractDefault(module);
60
+ const $module = originalRequire?.(id);
61
+ if ($module) {
62
+ return extractDefault($module);
63
63
  }
64
64
  }
65
65
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -41,8 +41,8 @@ ensureBrowserProcess();
41
41
  __isPatched: true
42
42
  }
43
43
  );
44
- function extractDefault(module) {
45
- return module && module.__esModule && "default" in module ? module.default : module;
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
46
  }
47
47
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
48
  "@codemirror/autocomplete",
@@ -84,9 +84,9 @@ ensureBrowserProcess();
84
84
  return process;
85
85
  }
86
86
  } else {
87
- const module = originalRequire?.(id);
88
- if (module) {
89
- return extractDefault(module);
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
90
  }
91
91
  }
92
92
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
@@ -41,8 +41,8 @@ ensureBrowserProcess();
41
41
  __isPatched: true
42
42
  }
43
43
  );
44
- function extractDefault(module) {
45
- return module && module.__esModule && "default" in module ? module.default : module;
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
46
  }
47
47
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
48
  "@codemirror/autocomplete",
@@ -84,9 +84,9 @@ ensureBrowserProcess();
84
84
  return process;
85
85
  }
86
86
  } else {
87
- const module = originalRequire?.(id);
88
- if (module) {
89
- return extractDefault(module);
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
90
  }
91
91
  }
92
92
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);