@mnaoumov/obsidian-lib 7.0.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/components/incremental-file-index-component/package.json +6 -0
  2. package/dist/lib/cjs/__merged.cjs +20 -6
  3. package/dist/lib/cjs/__merged.d.cts +2 -0
  4. package/dist/lib/cjs/active-file-provider.cjs +6 -6
  5. package/dist/lib/cjs/active-file-provider.d.cts +1 -1
  6. package/dist/lib/cjs/app.cjs +5 -5
  7. package/dist/lib/cjs/async-with-notice.cjs +5 -5
  8. package/dist/lib/cjs/attachment-path.cjs +6 -6
  9. package/dist/lib/cjs/attachment-unit-folder.cjs +5 -5
  10. package/dist/lib/cjs/backlink-index.cjs +13 -19
  11. package/dist/lib/cjs/backlink-index.d.cts +1 -1
  12. package/dist/lib/cjs/backlink.cjs +5 -5
  13. package/dist/lib/cjs/bases-view-registrar.cjs +6 -6
  14. package/dist/lib/cjs/bases-view-registrar.d.cts +1 -1
  15. package/dist/lib/cjs/callout.cjs +5 -5
  16. package/dist/lib/cjs/canvas.cjs +5 -5
  17. package/dist/lib/cjs/case-insensitive-file-index.cjs +5 -5
  18. package/dist/lib/cjs/code-block-markdown-information.cjs +6 -6
  19. package/dist/lib/cjs/code-block-markdown-information.d.cts +9 -9
  20. package/dist/lib/cjs/code-block-reg-exp.cjs +5 -5
  21. package/dist/lib/cjs/codemirror/index.cjs +5 -5
  22. package/dist/lib/cjs/codemirror/state-field-spec.cjs +6 -6
  23. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +6 -6
  24. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +5 -5
  25. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +5 -5
  26. package/dist/lib/cjs/command-handlers/command-handler.cjs +5 -5
  27. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +5 -5
  28. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +5 -5
  29. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +5 -5
  30. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +5 -5
  31. package/dist/lib/cjs/command-handlers/index.cjs +5 -5
  32. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +5 -5
  33. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +5 -5
  34. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +5 -5
  35. package/dist/lib/cjs/command-registrar.cjs +6 -6
  36. package/dist/lib/cjs/command-registrar.d.cts +2 -2
  37. package/dist/lib/cjs/community-plugins.cjs +6 -6
  38. package/dist/lib/cjs/components/abort-signal-component.cjs +5 -5
  39. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  40. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  41. package/dist/lib/cjs/components/async-events-component.cjs +5 -5
  42. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +5 -5
  43. package/dist/lib/cjs/components/component-ex.cjs +5 -5
  44. package/dist/lib/cjs/components/console-debug-component.cjs +5 -5
  45. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +5 -5
  46. package/dist/lib/cjs/components/disposable-component.cjs +5 -5
  47. package/dist/lib/cjs/components/embed-extensions-component.cjs +5 -5
  48. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +13 -16
  49. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +5 -5
  50. package/dist/lib/cjs/components/incremental-file-index-component.cjs +340 -0
  51. package/dist/lib/cjs/components/incremental-file-index-component.d.cts +152 -0
  52. package/dist/lib/cjs/components/index.cjs +9 -6
  53. package/dist/lib/cjs/components/index.d.cts +1 -0
  54. package/dist/lib/cjs/components/layout-ready-component.cjs +5 -5
  55. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +5 -5
  56. package/dist/lib/cjs/components/monkey-around-component.cjs +5 -5
  57. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  58. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  59. package/dist/lib/cjs/components/plugin-gate-component.cjs +5 -5
  60. package/dist/lib/cjs/components/plugin-notice-component.cjs +6 -6
  61. package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -3
  62. package/dist/lib/cjs/components/plugin-settings-component.cjs +6 -6
  63. package/dist/lib/cjs/components/plugin-settings-component.d.cts +5 -5
  64. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +5 -5
  65. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +5 -5
  66. package/dist/lib/cjs/components/pointer-position-component.cjs +5 -5
  67. package/dist/lib/cjs/components/registry-component.cjs +5 -5
  68. package/dist/lib/cjs/components/release-notes-component.cjs +5 -5
  69. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +6 -6
  70. package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +10 -10
  71. package/dist/lib/cjs/components/rmdir-guard-component.cjs +5 -5
  72. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  73. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +5 -5
  74. package/dist/lib/cjs/components/templates-language-component.cjs +5 -5
  75. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  76. package/dist/lib/cjs/constructors/index.cjs +5 -5
  77. package/dist/lib/cjs/css-class.cjs +5 -5
  78. package/dist/lib/cjs/data-handler.cjs +6 -6
  79. package/dist/lib/cjs/data-handler.d.cts +2 -2
  80. package/dist/lib/cjs/data-stores/data-store-replica.cjs +5 -5
  81. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  82. package/dist/lib/cjs/data-stores/data-store-transport.cjs +5 -5
  83. package/dist/lib/cjs/data-stores/index.cjs +5 -5
  84. package/dist/lib/cjs/data-stores/local-data-store.cjs +5 -5
  85. package/dist/lib/cjs/data-stores/shared-data-store.cjs +6 -6
  86. package/dist/lib/cjs/dataview-link.cjs +5 -5
  87. package/dist/lib/cjs/dataview.cjs +12 -12
  88. package/dist/lib/cjs/dataview.d.cts +6 -6
  89. package/dist/lib/cjs/debug.cjs +5 -5
  90. package/dist/lib/cjs/demo-vault-helper-settings.cjs +5 -5
  91. package/dist/lib/cjs/demo-vault-helper.cjs +5 -5
  92. package/dist/lib/cjs/demo-vault-naming.cjs +5 -5
  93. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +5 -5
  94. package/dist/lib/cjs/desktop-trusted-input.cjs +6 -6
  95. package/dist/lib/cjs/desktop-trusted-input.d.cts +1 -1
  96. package/dist/lib/cjs/editor-extension-registrar.cjs +6 -6
  97. package/dist/lib/cjs/editor-extension-registrar.d.cts +1 -1
  98. package/dist/lib/cjs/editor-suggest-registrar.cjs +6 -6
  99. package/dist/lib/cjs/editor-suggest-registrar.d.cts +1 -1
  100. package/dist/lib/cjs/editor.cjs +5 -5
  101. package/dist/lib/cjs/events.cjs +5 -5
  102. package/dist/lib/cjs/extensions-registrar.cjs +6 -6
  103. package/dist/lib/cjs/extensions-registrar.d.cts +1 -1
  104. package/dist/lib/cjs/file-change.cjs +6 -6
  105. package/dist/lib/cjs/file-change.d.cts +3 -3
  106. package/dist/lib/cjs/file-explorer.cjs +5 -5
  107. package/dist/lib/cjs/file-manager.cjs +5 -5
  108. package/dist/lib/cjs/file-system.cjs +5 -5
  109. package/dist/lib/cjs/folder-note.cjs +6 -6
  110. package/dist/lib/cjs/folder-note.d.cts +1 -1
  111. package/dist/lib/cjs/frontmatter-formatting.cjs +5 -5
  112. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +6 -6
  113. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +2 -2
  114. package/dist/lib/cjs/frontmatter.cjs +6 -6
  115. package/dist/lib/cjs/frontmatter.d.cts +7 -7
  116. package/dist/lib/cjs/generated-during-build.cjs +7 -7
  117. package/dist/lib/cjs/hover-link-source-registrar.cjs +6 -6
  118. package/dist/lib/cjs/hover-link-source-registrar.d.cts +1 -1
  119. package/dist/lib/cjs/html-element.cjs +5 -5
  120. package/dist/lib/cjs/i18n/custom-type-options.cjs +6 -6
  121. package/dist/lib/cjs/i18n/custom-type-options.d.cts +4 -4
  122. package/dist/lib/cjs/i18n/default-translations.cjs +5 -5
  123. package/dist/lib/cjs/i18n/i18n.cjs +5 -5
  124. package/dist/lib/cjs/i18n/index.cjs +5 -5
  125. package/dist/lib/cjs/i18n/locales/en.cjs +5 -5
  126. package/dist/lib/cjs/i18n/locales/index.cjs +5 -5
  127. package/dist/lib/cjs/i18n/locales/translations-map.cjs +5 -5
  128. package/dist/lib/cjs/index.cjs +9 -6
  129. package/dist/lib/cjs/index.d.cts +1 -0
  130. package/dist/lib/cjs/is-in-obsidian.cjs +5 -5
  131. package/dist/lib/cjs/library-styles.cjs +5 -5
  132. package/dist/lib/cjs/library.cjs +5 -5
  133. package/dist/lib/cjs/link-name.cjs +5 -5
  134. package/dist/lib/cjs/link-update-progress.cjs +5 -5
  135. package/dist/lib/cjs/link.cjs +7 -7
  136. package/dist/lib/cjs/link.d.cts +2 -2
  137. package/dist/lib/cjs/logger.cjs +5 -5
  138. package/dist/lib/cjs/loop.cjs +5 -5
  139. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +6 -6
  140. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +1 -1
  141. package/dist/lib/cjs/markdown-code-block-processor.cjs +5 -5
  142. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +6 -6
  143. package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +1 -1
  144. package/dist/lib/cjs/markdown-view.cjs +5 -5
  145. package/dist/lib/cjs/markdown.cjs +5 -5
  146. package/dist/lib/cjs/menu-event-registrar.cjs +6 -6
  147. package/dist/lib/cjs/menu-event-registrar.d.cts +4 -4
  148. package/dist/lib/cjs/metadata-cache.cjs +6 -6
  149. package/dist/lib/cjs/mobile-trusted-input.cjs +6 -6
  150. package/dist/lib/cjs/modals/alert.cjs +5 -5
  151. package/dist/lib/cjs/modals/confirm.cjs +5 -5
  152. package/dist/lib/cjs/modals/index.cjs +5 -5
  153. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  154. package/dist/lib/cjs/modals/modal-command-builder.cjs +6 -6
  155. package/dist/lib/cjs/modals/modal-command-builder.d.cts +12 -12
  156. package/dist/lib/cjs/modals/modal.cjs +5 -5
  157. package/dist/lib/cjs/modals/prompt.cjs +14 -14
  158. package/dist/lib/cjs/modals/select-item.cjs +5 -5
  159. package/dist/lib/cjs/modals/select-option.cjs +5 -5
  160. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +5 -5
  161. package/dist/lib/cjs/note-priority.cjs +5 -5
  162. package/dist/lib/cjs/notebook-navigator.cjs +6 -6
  163. package/dist/lib/cjs/notebook-navigator.d.cts +3 -3
  164. package/dist/lib/cjs/obsidian-lib-state.cjs +6 -6
  165. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +6 -6
  166. package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +1 -1
  167. package/dist/lib/cjs/obsidian-settings.cjs +5 -5
  168. package/dist/lib/cjs/obsidian-word-characters.cjs +231 -0
  169. package/dist/lib/cjs/obsidian-word-characters.d.cts +59 -0
  170. package/dist/lib/cjs/parse-link.cjs +6 -6
  171. package/dist/lib/cjs/parse-link.d.cts +2 -2
  172. package/dist/lib/cjs/path-settings.cjs +6 -6
  173. package/dist/lib/cjs/pdf.cjs +5 -5
  174. package/dist/lib/cjs/plugin/index.cjs +5 -5
  175. package/dist/lib/cjs/plugin/plugin-api.cjs +6 -6
  176. package/dist/lib/cjs/plugin/plugin-api.d.cts +2 -2
  177. package/dist/lib/cjs/plugin/plugin-context.cjs +6 -6
  178. package/dist/lib/cjs/plugin/plugin-event-source.cjs +6 -6
  179. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +1 -1
  180. package/dist/lib/cjs/plugin/plugin-install-state.cjs +5 -5
  181. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +5 -5
  182. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +6 -6
  183. package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +3 -3
  184. package/dist/lib/cjs/plugin/plugin.cjs +6 -6
  185. package/dist/lib/cjs/plugin/settings-migration-api.cjs +6 -6
  186. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +1 -1
  187. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +6 -6
  188. package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +1 -1
  189. package/dist/lib/cjs/popovers/field-popover.cjs +5 -5
  190. package/dist/lib/cjs/popovers/index.cjs +5 -5
  191. package/dist/lib/cjs/popovers/popover-anchor.cjs +5 -5
  192. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  193. package/dist/lib/cjs/property-entry.cjs +5 -5
  194. package/dist/lib/cjs/queue.cjs +6 -6
  195. package/dist/lib/cjs/react/app-context.cjs +5 -5
  196. package/dist/lib/cjs/react/index.cjs +5 -5
  197. package/dist/lib/cjs/reference.cjs +6 -6
  198. package/dist/lib/cjs/reference.d.cts +6 -6
  199. package/dist/lib/cjs/resource-lock.cjs +6 -6
  200. package/dist/lib/cjs/resource-url.cjs +5 -5
  201. package/dist/lib/cjs/ribbon-icon-registrar.cjs +6 -6
  202. package/dist/lib/cjs/ribbon-icon-registrar.d.cts +1 -1
  203. package/dist/lib/cjs/setting-components/checkbox-component.cjs +5 -5
  204. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +5 -5
  205. package/dist/lib/cjs/setting-components/date-component.cjs +5 -5
  206. package/dist/lib/cjs/setting-components/date-time-component.cjs +5 -5
  207. package/dist/lib/cjs/setting-components/email-component.cjs +5 -5
  208. package/dist/lib/cjs/setting-components/file-component.cjs +5 -5
  209. package/dist/lib/cjs/setting-components/index.cjs +5 -5
  210. package/dist/lib/cjs/setting-components/month-component.cjs +6 -6
  211. package/dist/lib/cjs/setting-components/month-component.d.cts +2 -2
  212. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +5 -5
  213. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +5 -5
  214. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +5 -5
  215. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +5 -5
  216. package/dist/lib/cjs/setting-components/number-component.cjs +5 -5
  217. package/dist/lib/cjs/setting-components/password-component.cjs +5 -5
  218. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +5 -5
  219. package/dist/lib/cjs/setting-components/telephone-component.cjs +5 -5
  220. package/dist/lib/cjs/setting-components/text-based-component.cjs +6 -6
  221. package/dist/lib/cjs/setting-components/text-based-component.d.cts +3 -3
  222. package/dist/lib/cjs/setting-components/time-component.cjs +5 -5
  223. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +5 -5
  224. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +5 -5
  225. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +5 -5
  226. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +5 -5
  227. package/dist/lib/cjs/setting-components/typed-text-component.cjs +5 -5
  228. package/dist/lib/cjs/setting-components/url-component.cjs +5 -5
  229. package/dist/lib/cjs/setting-components/validator-component.cjs +5 -5
  230. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +6 -6
  231. package/dist/lib/cjs/setting-components/week-component.cjs +6 -6
  232. package/dist/lib/cjs/setting-components/week-component.d.cts +2 -2
  233. package/dist/lib/cjs/setting-ex.cjs +5 -5
  234. package/dist/lib/cjs/setting-group-ex.cjs +5 -5
  235. package/dist/lib/cjs/status-bar-item-registrar.cjs +6 -6
  236. package/dist/lib/cjs/status-bar-item-registrar.d.cts +1 -1
  237. package/dist/lib/cjs/templater.cjs +6 -6
  238. package/dist/lib/cjs/templater.d.cts +9 -9
  239. package/dist/lib/cjs/transformers/duration-transformer.cjs +5 -5
  240. package/dist/lib/cjs/transformers/index.cjs +5 -5
  241. package/dist/lib/cjs/trusted-input.cjs +5 -5
  242. package/dist/lib/cjs/validation.cjs +6 -6
  243. package/dist/lib/cjs/validation.d.cts +1 -1
  244. package/dist/lib/cjs/vault-delete.cjs +5 -5
  245. package/dist/lib/cjs/vault-transaction.cjs +6 -6
  246. package/dist/lib/cjs/vault.cjs +5 -5
  247. package/dist/lib/cjs/view-registrar.cjs +6 -6
  248. package/dist/lib/cjs/view-registrar.d.cts +1 -1
  249. package/dist/lib/cjs/workspace.cjs +5 -5
  250. package/dist/lib/esm/__merged.d.mts +2 -0
  251. package/dist/lib/esm/__merged.mjs +15 -1
  252. package/dist/lib/esm/active-file-provider.d.mts +1 -1
  253. package/dist/lib/esm/active-file-provider.mjs +1 -1
  254. package/dist/lib/esm/attachment-path.mjs +1 -1
  255. package/dist/lib/esm/backlink-index.d.mts +1 -1
  256. package/dist/lib/esm/backlink-index.mjs +8 -14
  257. package/dist/lib/esm/bases-view-registrar.d.mts +1 -1
  258. package/dist/lib/esm/bases-view-registrar.mjs +1 -1
  259. package/dist/lib/esm/code-block-markdown-information.d.mts +9 -9
  260. package/dist/lib/esm/codemirror/state-field-spec.d.mts +6 -6
  261. package/dist/lib/esm/command-registrar.d.mts +2 -2
  262. package/dist/lib/esm/command-registrar.mjs +1 -1
  263. package/dist/lib/esm/community-plugins.mjs +1 -1
  264. package/dist/lib/esm/components/file-explorer-root-menu-component.mjs +8 -11
  265. package/dist/lib/esm/components/incremental-file-index-component.d.mts +152 -0
  266. package/dist/lib/esm/components/incremental-file-index-component.mjs +260 -0
  267. package/dist/lib/esm/components/index.d.mts +1 -0
  268. package/dist/lib/esm/components/index.mjs +3 -1
  269. package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -3
  270. package/dist/lib/esm/components/plugin-notice-component.mjs +1 -1
  271. package/dist/lib/esm/components/plugin-settings-component.d.mts +5 -5
  272. package/dist/lib/esm/components/plugin-settings-component.mjs +1 -1
  273. package/dist/lib/esm/components/rename-delete-handler-component.d.mts +10 -10
  274. package/dist/lib/esm/components/rename-delete-handler-component.mjs +1 -1
  275. package/dist/lib/esm/data-handler.d.mts +2 -2
  276. package/dist/lib/esm/data-handler.mjs +1 -1
  277. package/dist/lib/esm/data-stores/data-store-seeds.mjs +1 -1
  278. package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
  279. package/dist/lib/esm/dataview.d.mts +6 -6
  280. package/dist/lib/esm/dataview.mjs +7 -7
  281. package/dist/lib/esm/desktop-trusted-input.d.mts +1 -1
  282. package/dist/lib/esm/desktop-trusted-input.mjs +1 -1
  283. package/dist/lib/esm/editor-extension-registrar.d.mts +1 -1
  284. package/dist/lib/esm/editor-extension-registrar.mjs +1 -1
  285. package/dist/lib/esm/editor-suggest-registrar.d.mts +1 -1
  286. package/dist/lib/esm/editor-suggest-registrar.mjs +1 -1
  287. package/dist/lib/esm/extensions-registrar.d.mts +1 -1
  288. package/dist/lib/esm/extensions-registrar.mjs +1 -1
  289. package/dist/lib/esm/file-change.d.mts +3 -3
  290. package/dist/lib/esm/file-change.mjs +1 -1
  291. package/dist/lib/esm/folder-note.d.mts +1 -1
  292. package/dist/lib/esm/folder-note.mjs +1 -1
  293. package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +2 -2
  294. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +1 -1
  295. package/dist/lib/esm/frontmatter.d.mts +7 -7
  296. package/dist/lib/esm/frontmatter.mjs +1 -1
  297. package/dist/lib/esm/generated-during-build.mjs +2 -2
  298. package/dist/lib/esm/hover-link-source-registrar.d.mts +1 -1
  299. package/dist/lib/esm/hover-link-source-registrar.mjs +1 -1
  300. package/dist/lib/esm/i18n/custom-type-options.d.mts +4 -4
  301. package/dist/lib/esm/i18n/custom-type-options.mjs +1 -1
  302. package/dist/lib/esm/index.d.mts +1 -0
  303. package/dist/lib/esm/index.mjs +3 -1
  304. package/dist/lib/esm/link.d.mts +2 -2
  305. package/dist/lib/esm/link.mjs +2 -2
  306. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +1 -1
  307. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +1 -1
  308. package/dist/lib/esm/markdown-post-processor-registrar.d.mts +1 -1
  309. package/dist/lib/esm/markdown-post-processor-registrar.mjs +1 -1
  310. package/dist/lib/esm/menu-event-registrar.d.mts +4 -4
  311. package/dist/lib/esm/metadata-cache.mjs +1 -1
  312. package/dist/lib/esm/mobile-trusted-input.mjs +1 -1
  313. package/dist/lib/esm/modals/minimizable-modal.mjs +1 -1
  314. package/dist/lib/esm/modals/modal-command-builder.d.mts +12 -12
  315. package/dist/lib/esm/modals/modal-command-builder.mjs +1 -1
  316. package/dist/lib/esm/modals/prompt.mjs +9 -9
  317. package/dist/lib/esm/notebook-navigator.d.mts +3 -3
  318. package/dist/lib/esm/notebook-navigator.mjs +1 -1
  319. package/dist/lib/esm/obsidian-lib-state.mjs +1 -1
  320. package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +1 -1
  321. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +1 -1
  322. package/dist/lib/esm/obsidian-word-characters.d.mts +59 -0
  323. package/dist/lib/esm/obsidian-word-characters.mjs +139 -0
  324. package/dist/lib/esm/parse-link.d.mts +2 -2
  325. package/dist/lib/esm/parse-link.mjs +1 -1
  326. package/dist/lib/esm/path-settings.mjs +1 -1
  327. package/dist/lib/esm/plugin/plugin-api.d.mts +2 -2
  328. package/dist/lib/esm/plugin/plugin-api.mjs +1 -1
  329. package/dist/lib/esm/plugin/plugin-context.mjs +1 -1
  330. package/dist/lib/esm/plugin/plugin-event-source.d.mts +1 -1
  331. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  332. package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +3 -3
  333. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +1 -1
  334. package/dist/lib/esm/plugin/plugin.mjs +1 -1
  335. package/dist/lib/esm/plugin/settings-migration-api.d.mts +1 -1
  336. package/dist/lib/esm/plugin/settings-migration-api.mjs +1 -1
  337. package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +1 -1
  338. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +1 -1
  339. package/dist/lib/esm/queue.mjs +1 -1
  340. package/dist/lib/esm/reference.d.mts +6 -6
  341. package/dist/lib/esm/reference.mjs +1 -1
  342. package/dist/lib/esm/resource-lock.mjs +1 -1
  343. package/dist/lib/esm/ribbon-icon-registrar.d.mts +1 -1
  344. package/dist/lib/esm/ribbon-icon-registrar.mjs +1 -1
  345. package/dist/lib/esm/setting-components/month-component.d.mts +2 -2
  346. package/dist/lib/esm/setting-components/month-component.mjs +1 -1
  347. package/dist/lib/esm/setting-components/text-based-component.d.mts +3 -3
  348. package/dist/lib/esm/setting-components/text-based-component.mjs +1 -1
  349. package/dist/lib/esm/setting-components/week-component.d.mts +2 -2
  350. package/dist/lib/esm/setting-components/week-component.mjs +1 -1
  351. package/dist/lib/esm/status-bar-item-registrar.d.mts +1 -1
  352. package/dist/lib/esm/status-bar-item-registrar.mjs +1 -1
  353. package/dist/lib/esm/templater.d.mts +9 -9
  354. package/dist/lib/esm/templater.mjs +1 -1
  355. package/dist/lib/esm/validation.d.mts +1 -1
  356. package/dist/lib/esm/validation.mjs +1 -1
  357. package/dist/lib/esm/vault-transaction.mjs +1 -1
  358. package/dist/lib/esm/view-registrar.d.mts +1 -1
  359. package/dist/lib/esm/view-registrar.mjs +1 -1
  360. package/dist/styles.css +2 -2
  361. 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.`);
@@ -343,4 +343,4 @@ async function resolveCommunityPluginId(reference) {
343
343
  uninstallCommunityPlugin,
344
344
  updateCommunityPlugin
345
345
  });
346
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tdW5pdHktcGx1Z2lucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMsIHNlYXJjaGVzIGFuZCBtYW5hZ2VzIGNvbW11bml0eSBwbHVnaW5zIHRocm91Z2ggT2JzaWRpYW4ncyBwdWJsaWMgcGx1Z2luIHJlZ2lzdHJ5IGFuZFxuICogc3RvcmUtaW5zdGFsbCBwYXRoLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSB0aGF0IG1hcHMgYSBwbHVnaW4gYGlkYCB0byBpdHNcbiAqIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSDigJQgdGhlIHBsdWdpbiBtYW5pZmVzdCBpdHNlbGYgY2FycmllcyBubyByZXBvc2l0b3J5LiBUaGlzIG1vZHVsZSB1c2VzXG4gKiBpdCB0byBzZWFyY2ggdGhlIHJlZ2lzdHJ5LCB0byBsb2NhdGUgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZXMgKGUuZy4gdG8gZG93bmxvYWQgaXRzIHNoaXBwZWRcbiAqIGRlbW8tdmF1bHQgYXJjaGl2ZSksIGFuZCB0byBpbnN0YWxsL3VwZGF0ZS91bmluc3RhbGwvZW5hYmxlL2Rpc2FibGUgYW4gYXJiaXRyYXJ5IGNvbW11bml0eSBwbHVnaW4g4oCUIHNlbGVjdGVkXG4gKiBieSBlaXRoZXIgaXRzIGBpZGAgb3IgaXRzIGRpc3BsYXkgYG5hbWVgIOKAlCB2aWEgT2JzaWRpYW4ncyBvd24gc3RvcmUgcGF0aCAoYGFwcC5wbHVnaW5zLmluc3RhbGxQbHVnaW5gXG4gKiArIGBlbmFibGVQbHVnaW5BbmRTYXZlYCksIHNvIGFueSBkZXYvZGVwbG95IG9yIHRvb2xpbmcgZmxvdyBjYW4gcmV1c2UgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFBsdWdpbk1hbmlmZXN0XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgY29tcGFyZSBhcyBjb21wYXJlVmVyc2lvbnMgfSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcbmltcG9ydCB7IHJlcXVlc3RVcmwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldE9ic2lkaWFuTGliU3RhdGUgfSBmcm9tICcuL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gZWl0aGVyIGJ5IGl0cyBpZCAoe0BsaW5rIENvbW11bml0eVBsdWdpbkJ5SWRSZWZ9KSBvciBieSBpdHMgZGlzcGxheSBuYW1lXG4gKiAoe0BsaW5rIENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZn0pLlxuICovXG5leHBvcnQgdHlwZSBDb21tdW5pdHlQbHVnaW5SZWYgPSBDb21tdW5pdHlQbHVnaW5CeUlkUmVmIHwgQ29tbXVuaXR5UGx1Z2luQnlOYW1lUmVmO1xuXG4vKipcbiAqIEEgc2luZ2xlIHJlc3VsdCBvZiB7QGxpbmsgc2VhcmNoQ29tbXVuaXR5UGx1Z2luc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5TZXR0aW5ncztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBEaXNhYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGluc3RhbGxDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGBcbiAqIG9yIGBwbHVnaW5OYW1lYDsgYHNldHRpbmdzYCBpcyBvcHRpb25hbCAob21pdCBmb3IgYSBwbHVnaW4gdGhhdCBuZWVkcyBubyBjb25maWd1cmF0aW9uKS5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBQYXJ0aWFsPENvbW11bml0eVBsdWdpblNldHRpbmdzPjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5Ub2dnbGVFbmFibGVTdGF0ZTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZiAmIENvbW11bml0eVBsdWdpblRvZ2dsZUluc3RhbGxTdGF0ZTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFVuaW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHVwZGF0ZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvciBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gYnkgaXRzIGlkLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luQnlJZFJlZiB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3RzIGEgY29tbXVuaXR5IHBsdWdpbiBieSBpdHMgZGlzcGxheSBuYW1lIChhcyBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcmVnaXN0cnkpLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luQnlOYW1lUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGlzcGxheSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIGVudHJ5IGluIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIHJlZ2lzdHJ5LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luRW50cnkge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBhdXRob3IuXG4gICAqL1xuICByZWFkb25seSBhdXRob3I6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkZXNjcmlwdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlIGEgY29tbXVuaXR5LXBsdWdpbiBvcGVyYXRpb24gcnVucyBhZ2FpbnN0LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG59XG5cbi8qKlxuICogVGhlIHNldHRpbmdzIHRvIG1lcmdlIGludG8gYSBjb21tdW5pdHkgcGx1Z2luJ3MgYGRhdGEuanNvbmAuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5TZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3Mgb2JqZWN0IHNoYWxsb3ctbWVyZ2VkIG92ZXIgdGhlIHBsdWdpbidzIGV4aXN0aW5nIGBkYXRhLmpzb25gICh0aGUgZmlsZSBpcyBjcmVhdGVkIGlmXG4gICAqIGFic2VudCkuXG4gICAqL1xuICByZWFkb25seSBzZXR0aW5nczogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGUgZm9yIHtAbGluayB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW59LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlRW5hYmxlU3RhdGUge1xuICAvKipcbiAgICogVGhlIGRlc2lyZWQgZW5hYmxlZCBzdGF0ZTogYHRydWVgIGVuYWJsZXMgdGhlIHBsdWdpbiwgYGZhbHNlYCBkaXNhYmxlcyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgZGVzaXJlZCBpbnN0YWxsZWQgc3RhdGUgZm9yIHtAbGluayB0b2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblRvZ2dsZUluc3RhbGxTdGF0ZSB7XG4gIC8qKlxuICAgKiBUaGUgZGVzaXJlZCBpbnN0YWxsZWQgc3RhdGU6IGB0cnVlYCBpbnN0YWxscyB0aGUgcGx1Z2luLCBgZmFsc2VgIHVuaW5zdGFsbHMgaXQuXG4gICAqL1xuICByZWFkb25seSBpc0luc3RhbGxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgb25lIG1ldGhvZCB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufSBuZWVkcyBmcm9tIGEgcGx1Z2luJ3Mgc2V0dGluZ3MgY29tcG9uZW50IHRvIGNvbmZpZ3VyZVxuICogaXQgbGl2ZS4gRGVjbGFyZWQgc3RydWN0dXJhbGx5IHJhdGhlciB0aGFuIGltcG9ydGluZyBgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRgLCBzbyBhIHBsdWdpbiBidWlsdCBvblxuICogYW55IHZlcnNpb24gb2YgaXQgLS0gb3Igb24gaXRzIG93biBlcXVpdmFsZW50IC0tIGlzIGNvbmZpZ3VyYWJsZSB3aXRob3V0IGEgc2hhcmVkIG5vbWluYWwgdHlwZS5cbiAqL1xuaW50ZXJmYWNlIEVkaXRhYmxlU2V0dGluZ3NDb21wb25lbnQge1xuICBlZGl0QW5kU2F2ZTogKHNldHRpbmdzRWRpdG9yOiAoc2V0dGluZ3M6IG9iamVjdCkgPT4gdm9pZCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGEgR2l0SHViIHJlbGVhc2Ugd2UgcmVhZC5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2Uge1xuICAvKipcbiAgICogVGhlIHJlbGVhc2UgdGFnLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2AuXG4gICAqL1xuICByZWFkb25seSB0YWdfbmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19TVEFURV9LRVkgPSAnY29tbXVuaXR5UGx1Z2luRW50cmllc1Byb21pc2UnO1xuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfVVJMID0gJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL0hFQUQvY29tbXVuaXR5LXBsdWdpbnMuanNvbic7XG5jb25zdCBEQVRBX0pTT05fSU5ERU5UID0gMjtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIHtAbGluayBjb25maWd1cmVDb21tdW5pdHlQbHVnaW59LlxuICovXG5leHBvcnQgZW51bSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQge1xuICAvKipcbiAgICogVGhlIHNldHRpbmdzIHdlcmUgYXBwbGllZCB0aHJvdWdoIHRoZSBydW5uaW5nIHBsdWdpbidzIG93biBzZXR0aW5ncyBjb21wb25lbnQsIHdoaWNoIGJvdGggdXBkYXRlZFxuICAgKiB0aGVtIGluIG1lbW9yeSBhbmQgcGVyc2lzdGVkIHRoZW0uIFRoZSBwbHVnaW4gaXMgYWxyZWFkeSB1c2luZyB0aGVtLCBzbyBpdCBtdXN0IE5PVCBiZSByZWxvYWRlZC5cbiAgICovXG4gIEFwcGxpZWRMaXZlID0gJ2FwcGxpZWRMaXZlJyxcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgc28gbm90aGluZyB3YXMgd3JpdHRlbi5cbiAgICovXG4gIFNraXBwZWQgPSAnc2tpcHBlZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyB3ZXJlIG1lcmdlZCBpbnRvIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgd2hpY2ggd2FzIHdyaXR0ZW4uXG4gICAqL1xuICBTdWNjZXNzID0gJ3N1Y2Nlc3MnXG59XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiB7QGxpbmsgdXBkYXRlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuZXhwb3J0IGVudW0gVXBkYXRlQ29tbXVuaXR5UGx1Z2luUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YWxsZWQgY29weSBpcyBhbHJlYWR5IGF0IChvciBwYXN0KSB0aGUgbGF0ZXN0IHJlbGVhc2UsIHNvIG5vdGhpbmcgd2FzIGRvd25sb2FkZWQuXG4gICAqL1xuICBBbHJlYWR5VXBUb0RhdGUgPSAnYWxyZWFkeVVwVG9EYXRlJyxcblxuICAvKipcbiAgICogVGhlIGxhdGVzdCByZWxlYXNlIHdhcyBpbnN0YWxsZWQgb3ZlciB0aGUgb2xkIGNvcHksIHdoaWNoIE9ic2lkaWFuIHJlbG9hZGVkIGlmIGl0IHdhcyBydW5uaW5nLlxuICAgKi9cbiAgVXBkYXRlZCA9ICd1cGRhdGVkJ1xufVxuXG4vKipcbiAqIENvbmZpZ3VyZXMgYSBjb21tdW5pdHkgcGx1Z2luLCBwcmVmZXJyaW5nIHRoZSBydW5uaW5nIHBsdWdpbidzIG93biBzZXR0aW5ncyBjb21wb25lbnQgb3ZlciBpdHNcbiAqIGBkYXRhLmpzb25gLlxuICpcbiAqIFdoZW4gdGhlIHBsdWdpbiBpcyBsb2FkZWQgQU5EIGV4cG9zZXMgYSBgcGx1Z2luU2V0dGluZ3NDb21wb25lbnRgIHdpdGggYW4gYGVkaXRBbmRTYXZlYCBtZXRob2QsIHRoZVxuICogc2V0dGluZ3MgYXJlIHNoYWxsb3ctbWVyZ2VkIHRocm91Z2ggaXQ6IHRoZXkgdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkgYW5kIGFyZSBwZXJzaXN0ZWQsIHNvIHRoZSBwbHVnaW5cbiAqIG5lZWRzIG5vIHJlbG9hZCBhbmQge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5BcHBsaWVkTGl2ZX0gaXMgcmV0dXJuZWQuIFRoaXMgaXMgd2hhdCBsZXRzIGFcbiAqIHBsdWdpbidzIG93biBzY3JpcHQgcmVjb25maWd1cmUgaXQgd2l0aG91dCB0aGUgZGlzYWJsZS9lbmFibGUgY3ljbGUgdGhhdCB3b3VsZCB0ZWFyIGRvd24gdGhlIHZlcnkgY29kZVxuICogZG9pbmcgdGhlIHJlY29uZmlndXJpbmcuIE5vdGUgdGhhdCB0aGlzIHBhdGggcnVucyB0aGUgcGx1Z2luJ3Mgc2V0dGluZyB2YWxpZGF0b3JzLCBzbyBhbiBpbnZhbGlkIHZhbHVlXG4gKiBpcyByZXBsYWNlZCBieSBpdHMgZGVmYXVsdCByYXRoZXIgdGhhbiB3cml0dGVuIHRocm91Z2ggdmVyYmF0aW0uXG4gKlxuICogT3RoZXJ3aXNlIHRoZSBzZXR0aW5ncyBhcmUgd3JpdHRlbiBpbnRvIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgc2hhbGxvdy1tZXJnZWQgb3ZlciBhbnkgZXhpc3RpbmdcbiAqIHNldHRpbmdzIChjcmVhdGluZyB0aGUgZmlsZSBpZiBhYnNlbnQpLiBXcml0aW5nIHNldHRpbmdzIEJFRk9SRSB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgbWFrZXMgaXQgbG9hZFxuICogYWxyZWFkeSBjb25maWd1cmVkLCB3aXRoIG5vIHJlbG9hZC4gQSBuby1vcCB3cml0ZSBpcyBza2lwcGVkOiB3aGVuIHRoZSBtZXJnZSBjaGFuZ2VzIG5vdGhpbmcsIHRoZSBmaWxlXG4gKiBpcyBsZWZ0IHVudG91Y2hlZCBhbmQge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5Ta2lwcGVkfSBpcyByZXR1cm5lZCwgc28gYSBjYWxsZXIgY2FuIGF2b2lkXG4gKiByZWxvYWRpbmcgYW4gYWxyZWFkeS1jb3JyZWN0bHktY29uZmlndXJlZCBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8ge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5BcHBsaWVkTGl2ZX0gaWYgdGhlXG4gKiBydW5uaW5nIHBsdWdpbiBhcHBsaWVkIHRoZW0gaXRzZWxmIChubyByZWxvYWQgbmVlZGVkKSwge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5TdWNjZXNzfSBpZlxuICogdGhlIGBkYXRhLmpzb25gIGNvbnRlbnQgY2hhbmdlZCAoYW5kIHdhcyB3cml0dGVuKSwgb3Ige0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5Ta2lwcGVkfSBpZlxuICogdGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBwcmVzZW50IChub3RoaW5nIHdyaXR0ZW4pLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8Q29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0PiB7XG4gIGNvbnN0IHsgYXBwLCBzZXR0aW5ncyB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuXG4gIGNvbnN0IHNldHRpbmdzQ29tcG9uZW50ID0gZ2V0U2V0dGluZ3NDb21wb25lbnQoYXBwLnBsdWdpbnMucGx1Z2luc1twbHVnaW5JZF0pO1xuICBpZiAoY2hlY2tIYXNFZGl0QW5kU2F2ZShzZXR0aW5nc0NvbXBvbmVudCkpIHtcbiAgICBhd2FpdCBzZXR0aW5nc0NvbXBvbmVudC5lZGl0QW5kU2F2ZSgocGx1Z2luU2V0dGluZ3MpID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocGx1Z2luU2V0dGluZ3MsIHNldHRpbmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LkFwcGxpZWRMaXZlO1xuICB9XG5cbiAgY29uc3QgZGF0YVBhdGggPSBgJHthcHAudmF1bHQuY29uZmlnRGlyfS9wbHVnaW5zLyR7cGx1Z2luSWR9L2RhdGEuanNvbmA7XG5cbiAgbGV0IGRhdGE6IG9iamVjdCA9IHt9O1xuICBpZiAoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGRhdGFQYXRoKSkge1xuICAgIGNvbnN0IHBhcnNlZDogdW5rbm93biA9IEpTT04ucGFyc2UoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChkYXRhUGF0aCkpO1xuICAgIGlmIChwYXJzZWQgIT09IG51bGwgJiYgdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGRhdGEgPSBwYXJzZWQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZEJlZm9yZSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICBPYmplY3QuYXNzaWduKGRhdGEsIHNldHRpbmdzKTtcbiAgaWYgKEpTT04uc3RyaW5naWZ5KGRhdGEpID09PSBzZXJpYWxpemVkQmVmb3JlKSB7XG4gICAgcmV0dXJuIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5Ta2lwcGVkO1xuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IFN0cmluZyhKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCBEQVRBX0pTT05fSU5ERU5UKSk7XG4gIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLndyaXRlKGRhdGFQYXRoLCBgJHtzZXJpYWxpemVkfVxcbmApO1xuICByZXR1cm4gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlN1Y2Nlc3M7XG59XG5cbi8qKlxuICogRGlzYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIChwZXJzaXN0aW5nIHRoZSBjaGFuZ2UpIGlmIGl0IGlzIGN1cnJlbnRseSBlbmFibGVkLiBJZGVtcG90ZW50IOKAlCBhIG5vLW9wXG4gKiB3aGVuIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBkaXNhYmxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBEaXNhYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc2FibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBEaXNhYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy5kaXNhYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogRW5hYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gKHBlcnNpc3RpbmcgdGhlIGNoYW5nZSkgaWYgaXQgaXMgbm90IGFscmVhZHkgZW5hYmxlZC4gSWRlbXBvdGVudCDigJQgYSBuby1vcFxuICogd2hlbiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgZW5hYmxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKGFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSBvZiBhIGNvbW11bml0eSBwbHVnaW4gZnJvbSBPYnNpZGlhbidzIHB1YmxpY1xuICogYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIHJlZ2lzdHJ5LlxuICpcbiAqIFRoZSByZWdpc3RyeSBpcyBmZXRjaGVkIG9uY2UgYW5kIGNhY2hlZCBvbiB0aGUgc2hhcmVkIHBsdWdpbiBzdGF0ZSBmb3Igc3Vic2VxdWVudCBjYWxsczsgYSBmYWlsZWRcbiAqIGZldGNoIGlzIG5vdCBjYWNoZWQsIHNvIGEgbGF0ZXIgY2FsbCByZXRyaWVzLlxuICpcbiAqIEBwYXJhbSBwbHVnaW5JZCAtIFRoZSBwbHVnaW4gaWQgdG8gbG9vayB1cC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgcGx1Z2luJ3MgYG93bmVyL25hbWVgIHJlcG9zaXRvcnksIG9yIGBudWxsYCBpZiB0aGVcbiAqIHBsdWdpbiBpcyBub3QgbGlzdGVkIGluIHRoZSByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbW11bml0eVBsdWdpblJlcG8ocGx1Z2luSWQ6IHN0cmluZyk6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuICBjb25zdCBlbnRyeSA9IGVudHJpZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT09IHBsdWdpbklkKTtcbiAgcmV0dXJuIGVudHJ5Py5yZXBvID8/IG51bGw7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGxhdGVzdCByZWxlYXNlIHZlcnNpb24gKHRoZSByZWxlYXNlIGB0YWdfbmFtZWAsIGEgYmFyZSB2ZXJzaW9uIHN1Y2ggYXMgYDEuMi4zYCkgb2YgYVxuICogR2l0SHViIHJlcG9zaXRvcnkuXG4gKlxuICogQHBhcmFtIHJlcG8gLSBUaGUgYG93bmVyL25hbWVgIEdpdEh1YiByZXBvc2l0b3J5LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0UmVsZWFzZVZlcnNpb24ocmVwbzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vcmVsZWFzZXMvbGF0ZXN0YCk7XG4gIGNvbnN0IHJlbGVhc2UgPSByZXNwb25zZS5qc29uIGFzIEdpdEh1YlJlbGVhc2U7XG4gIHJldHVybiByZWxlYXNlLnRhZ19uYW1lO1xufVxuXG4vKipcbiAqIEluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiBmcm9tIHRoZSBvZmZpY2lhbCBzdG9yZSBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQuIElkZW1wb3RlbnQg4oCUIGFcbiAqIG5vLW9wIHdoZW4gdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGluc3RhbGxlZC4gUmVzb2x2ZXMgdGhlIHBsdWdpbidzIHJlcG9zaXRvcnkgZnJvbSBPYnNpZGlhbidzXG4gKiBjb21tdW5pdHkgcmVnaXN0cnksIHJlYWRzIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uIGFuZCBpdHMgbWFuaWZlc3QsIGFuZCBpbnN0YWxscyBpdCB0aHJvdWdoXG4gKiBPYnNpZGlhbidzIG93biBgaW5zdGFsbFBsdWdpbmAgcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZC5cbiAqIEB0aHJvd3MgSWYgdGhlIHBsdWdpbiBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoT2JqZWN0Lmhhc093bihhcHAucGx1Z2lucy5tYW5pZmVzdHMsIHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlcG8gPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5SZXBvKHBsdWdpbklkKTtcbiAgaWYgKCFyZXBvKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gJyR7cGx1Z2luSWR9JyB3YXMgbm90IGZvdW5kIGluIHRoZSBPYnNpZGlhbiBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5gKTtcbiAgfVxuXG4gIGNvbnN0IHZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RSZWxlYXNlVmVyc2lvbihyZXBvKTtcbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBnZXRQbHVnaW5NYW5pZmVzdChyZXBvLCB2ZXJzaW9uKTtcbiAgYXdhaXQgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbihyZXBvLCB2ZXJzaW9uLCBtYW5pZmVzdCk7XG59XG5cbi8qKlxuICogSW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luLCB3cml0ZXMgaXRzIHNldHRpbmdzLCBUSEVOIGVuYWJsZXMgaXQg4oCUIGluIHRoYXQgb3JkZXIg4oCUIHNvIHRoZSBwbHVnaW5cbiAqIGxvYWRzIGFscmVhZHkgY29uZmlndXJlZCAoYSBwbHVnaW4gZW5hYmxlZCBiZWZvcmUgaXQgaXMgY29uZmlndXJlZCBydW5zIGl0cyBgb25sb2FkYCB3aXRoIGRlZmF1bHRcbiAqIHNldHRpbmdzIGFuZCBkb2VzIG5vdGhpbmcgdXNlZnVsKS4gSWYgdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGVuYWJsZWQgYW5kIHRoZSBzZXR0aW5ncyBjaGFuZ2VkLCBpdCBpc1xuICogZGlzYWJsZWQgYW5kIHJlLWVuYWJsZWQgc28gdGhlIG5ldyBzZXR0aW5ncyB0YWtlIGVmZmVjdC4gYHNldHRpbmdzYCBpcyBvcHRpb25hbDogb21pdCBpdCBmb3IgYSBwbHVnaW5cbiAqIHRoYXQgbmVlZHMgbm8gY29uZmlndXJhdGlvbi4gQ29tcG9zZXMge0BsaW5rIGluc3RhbGxDb21tdW5pdHlQbHVnaW59LCB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufSxcbiAqIHtAbGluayBlbmFibGVDb21tdW5pdHlQbHVnaW59IGFuZCB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgSW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQsIGNvbmZpZ3VyZWQgYW5kIGVuYWJsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAsIHNldHRpbmdzIH0gPSBwYXJhbXM7XG4gIGF3YWl0IGluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgY29uc3QgZGlkU2V0dGluZ3NDaGFuZ2UgPSBzZXR0aW5ncyA/IGF3YWl0IGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbih7IC4uLnBhcmFtcywgc2V0dGluZ3MgfSkgPT09IENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5TdWNjZXNzIDogZmFsc2U7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKGRpZFNldHRpbmdzQ2hhbmdlKSB7XG4gICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9XG59XG5cbi8qKlxuICogU2VhcmNoZXMgT2JzaWRpYW4ncyBwdWJsaWMgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnksIHJldHVybmluZyB0aGUgaWQgYW5kIGRpc3BsYXkgbmFtZSBvZiBldmVyeVxuICogcGx1Z2luIHdob3NlIGlkLCBuYW1lLCBhdXRob3Igb3IgZGVzY3JpcHRpb24gY29udGFpbnMgdGhlIHF1ZXJ5IChjYXNlLWluc2Vuc2l0aXZlKS4gQW4gZW1wdHkgcXVlcnlcbiAqIG1hdGNoZXMgZXZlcnkgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBxdWVyeSAtIFRoZSBzZWFyY2ggcXVlcnkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIG1hdGNoaW5nIHBsdWdpbnMnIHtAbGluayBDb21tdW5pdHlQbHVnaW5TZWFyY2hSZXN1bHR9cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlYXJjaENvbW11bml0eVBsdWdpbnMocXVlcnk6IHN0cmluZyk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0W10+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGVudHJpZXNcbiAgICAuZmlsdGVyKChlbnRyeSkgPT5cbiAgICAgIGVudHJ5LmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgfHwgZW50cnkubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5LmF1dGhvci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5LmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgIClcbiAgICAubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIGlkOiBlbnRyeS5pZCxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWVcbiAgICB9KSk7XG59XG5cbi8qKlxuICogRW5hYmxlcyBvciBkaXNhYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gdG8gbWF0Y2ggdGhlIGRlc2lyZWQgc3RhdGUuIERlbGVnYXRlcyB0b1xuICoge0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0gLyB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0sIHNvIGl0IGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIG1hdGNoZXMgdGhlIGRlc2lyZWQgZW5hYmxlZCBzdGF0ZS5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHBhcmFtcy5pc0VuYWJsZWQpIHtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnN0YWxscyBvciB1bmluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiB0byBtYXRjaCB0aGUgZGVzaXJlZCBzdGF0ZS4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgaW5zdGFsbENvbW11bml0eVBsdWdpbn0gLyB7QGxpbmsgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSwgc28gaXQgaXMgaWRlbXBvdGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIG1hdGNoZXMgdGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlLlxuICogQHRocm93cyBJZiBpbnN0YWxsaW5nIGFuZCB0aGUgcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwYXJhbXMuaXNJbnN0YWxsZWQpIHtcbiAgICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVbmluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiBpZiBpdCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkLiBJZGVtcG90ZW50IOKAlCBhIG5vLW9wIHdoZW4gdGhlIHBsdWdpbiBpc1xuICogbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgdW5pbnN0YWxsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogVW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghT2JqZWN0Lmhhc093bihhcHAucGx1Z2lucy5tYW5pZmVzdHMsIHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy51bmluc3RhbGxQbHVnaW4ocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW4gaW5zdGFsbGVkIGNvbW11bml0eSBwbHVnaW4gdG8gaXRzIGxhdGVzdCByZWxlYXNlLCB0aGUgd2F5IHRoZSBjb21tdW5pdHkgcGx1Z2luIGJyb3dzZXIncyBvd25cbiAqIGBVcGRhdGVgIGJ1dHRvbiBkb2VzLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGluc3RhbGxQbHVnaW5gIHdyaXRlcyB0aGUgcmVsZWFzZSdzIGZpbGVzIG92ZXIgdGhlIGluc3RhbGxlZCBjb3B5IGFuZCwgd2hlbiB0aGUgcGx1Z2luIGlzXG4gKiBydW5uaW5nLCBkaXNhYmxlcyBhbmQgcmUtZW5hYmxlcyBpdCBzbyB0aGUgbmV3IGNvZGUgbG9hZHMg4oCUIHJlYWQgZnJvbSB0aGUgc2hpcHBlZCBidW5kbGUgKGAxLjE0LjRgKSwgbm90XG4gKiBhc3N1bWVkLiBJdCByZXBvcnRzIGl0cyBvd24gZmFpbHVyZXMgKGEgZmFpbGVkIGRvd25sb2FkLCBhIG1hbmlmZXN0IHdob3NlIGlkIGRvZXMgbm90IG1hdGNoKSBhcyBhIG5vdGljZVxuICogYW5kIFJFVFVSTlMgcmF0aGVyIHRoYW4gdGhyb3dpbmcsIHNvIHRoZSBpbnN0YWxsZWQgbWFuaWZlc3QgaXMgcmUtcmVhZCBhZnRlcndhcmRzIGFuZCBhIHZlcnNpb24gdGhhdCBkaWRcbiAqIG5vdCBtb3ZlIHRvIHRoZSByZWxlYXNlIGlzIHRocm93biBhcyBhIGZhaWx1cmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVXBkYXRlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB7QGxpbmsgVXBkYXRlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlVwZGF0ZWR9IG9uY2UgdGhlIGxhdGVzdCByZWxlYXNlXG4gKiBpcyBpbnN0YWxsZWQsIG9yIHtAbGluayBVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQuQWxyZWFkeVVwVG9EYXRlfSB3aGVuIHRoZSBpbnN0YWxsZWQgY29weSBpcyBub3Qgb2xkZXJcbiAqIHRoYW4gaXQuXG4gKiBAdGhyb3dzIElmIHRoZSBwbHVnaW4gaXMgbm90IGluc3RhbGxlZCwgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LCBvciB0aGVcbiAqIGluc3RhbGwgZGlkIG5vdCBsZWF2ZSB0aGUgbGF0ZXN0IHJlbGVhc2UgaW4gcGxhY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBVcGRhdGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPFVwZGF0ZUNvbW11bml0eVBsdWdpblJlc3VsdD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBjb25zdCBpbnN0YWxsZWRNYW5pZmVzdCA9IGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF07XG4gIGlmICghaW5zdGFsbGVkTWFuaWZlc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtwbHVnaW5JZH0nIGlzIG5vdCBpbnN0YWxsZWQsIHNvIGl0IGNhbm5vdCBiZSB1cGRhdGVkLmApO1xuICB9XG5cbiAgY29uc3QgcmVwbyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpblJlcG8ocGx1Z2luSWQpO1xuICBpZiAoIXJlcG8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtwbHVnaW5JZH0nIHdhcyBub3QgZm91bmQgaW4gdGhlIE9ic2lkaWFuIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG8pO1xuICBpZiAoaXNBdExlYXN0VmVyc2lvbihpbnN0YWxsZWRNYW5pZmVzdC52ZXJzaW9uLCB2ZXJzaW9uKSkge1xuICAgIHJldHVybiBVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQuQWxyZWFkeVVwVG9EYXRlO1xuICB9XG5cbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBnZXRQbHVnaW5NYW5pZmVzdChyZXBvLCB2ZXJzaW9uKTtcbiAgYXdhaXQgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbihyZXBvLCB2ZXJzaW9uLCBtYW5pZmVzdCk7XG5cbiAgY29uc3QgdXBkYXRlZFZlcnNpb24gPSBhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdPy52ZXJzaW9uO1xuICBpZiAodXBkYXRlZFZlcnNpb24gIT09IG1hbmlmZXN0LnZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVXBkYXRpbmcgcGx1Z2luICcke3BsdWdpbklkfScgdG8gJHttYW5pZmVzdC52ZXJzaW9ufSBsZWZ0IHZlcnNpb24gJHt1cGRhdGVkVmVyc2lvbiA/PyAnKG5vbmUpJ30gaW5zdGFsbGVkLiBPYnNpZGlhbiByZXBvcnRzIHRoZSBjYXVzZSBhcyBhIG5vdGljZS5gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQuVXBkYXRlZDtcbn1cblxuLy8gV2hldGhlciBhIHBsdWdpbidzIGBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudGAgY2FuIGNvbmZpZ3VyZSBpdHNlbGYgaW4gcGxhY2UuIFN0cnVjdHVyYWwgcmF0aGVyIHRoYW4gYW5cbi8vIGBpbnN0YW5jZW9mYDogdGhlIHBsdWdpbiB3YXMgbG9hZGVkIGZyb20gaXRzIG93biBidW5kbGUsIHNvIGV2ZW4gYSBwbHVnaW4gYnVpbHQgb24gdGhpcyB2ZXJ5IGxpYnJhcnlcbi8vIGNhcnJpZXMgaXRzIG93biBjb3B5IG9mIHRoZSBjbGFzcyBhbmQgd291bGQgZmFpbCBhbiBpZGVudGl0eSBjaGVjay5cbmZ1bmN0aW9uIGNoZWNrSGFzRWRpdEFuZFNhdmUoc2V0dGluZ3NDb21wb25lbnQ6IHVua25vd24pOiBzZXR0aW5nc0NvbXBvbmVudCBpcyBFZGl0YWJsZVNldHRpbmdzQ29tcG9uZW50IHtcbiAgcmV0dXJuIHR5cGVvZiBzZXR0aW5nc0NvbXBvbmVudCA9PT0gJ29iamVjdCdcbiAgICAmJiBzZXR0aW5nc0NvbXBvbmVudCAhPT0gbnVsbFxuICAgICYmICdlZGl0QW5kU2F2ZScgaW4gc2V0dGluZ3NDb21wb25lbnRcbiAgICAmJiB0eXBlb2Ygc2V0dGluZ3NDb21wb25lbnQuZWRpdEFuZFNhdmUgPT09ICdmdW5jdGlvbic7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpOiBQcm9taXNlPENvbW11bml0eVBsdWdpbkVudHJ5W10+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKENPTU1VTklUWV9QTFVHSU5TX1VSTCk7XG4gIHJldHVybiByZXNwb25zZS5qc29uIGFzIENvbW11bml0eVBsdWdpbkVudHJ5W107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTogUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0T2JzaWRpYW5MaWJTdGF0ZTxudWxsIHwgUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPj4oQ09NTVVOSVRZX1BMVUdJTlNfU1RBVEVfS0VZLCBudWxsKTtcbiAgY2FjaGUudmFsdWUgPz89IGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGNhY2hlLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhY2hlLnZhbHVlID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQbHVnaW5NYW5pZmVzdChyZXBvOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8UGx1Z2luTWFuaWZlc3Q+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvfS9yZWxlYXNlcy9kb3dubG9hZC8ke3ZlcnNpb259L21hbmlmZXN0Lmpzb25gKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24gYXMgUGx1Z2luTWFuaWZlc3Q7XG59XG5cbi8vIFJlYWRzIGEgbG9hZGVkIHBsdWdpbidzIGBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudGAsIG9yIGBudWxsYCB3aGVuIGl0IGhhcyBub25lLiBUYWtlcyBgdW5rbm93bmAgYmVjYXVzZVxuLy8gQSBwbHVnaW4gaXMgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBleHBvc2Ugb25lLCBzbyB0aGVyZSBpcyBubyB0eXBlIHRvIG5hcnJvdyBmcm9tLlxuZnVuY3Rpb24gZ2V0U2V0dGluZ3NDb21wb25lbnQocGx1Z2luOiB1bmtub3duKTogdW5rbm93biB7XG4gIHJldHVybiB0eXBlb2YgcGx1Z2luICE9PSAnb2JqZWN0JyB8fCBwbHVnaW4gPT09IG51bGwgfHwgISgncGx1Z2luU2V0dGluZ3NDb21wb25lbnQnIGluIHBsdWdpbikgPyBudWxsIDogcGx1Z2luLnBsdWdpblNldHRpbmdzQ29tcG9uZW50O1xufVxuXG4vLyBBIHZlcnNpb24gdGhhdCBjYW5ub3QgYmUgcGFyc2VkIHJlYWRzIGFzIG9sZGVyLCBzbyBhbiB1cGRhdGUgaXMgYXR0ZW1wdGVkIHJhdGhlciB0aGFuIHNraXBwZWQ6IHRoZSBpbnN0YWxsJ3Ncbi8vIG93biB2ZXJzaW9uIGNoZWNrIGFmdGVyd2FyZHMgc3RpbGwgY2F0Y2hlcyBhIHJlbGVhc2UgdGhhdCBkb2VzIG5vdCBtb3ZlIGl0LlxuZnVuY3Rpb24gaXNBdExlYXN0VmVyc2lvbihpbnN0YWxsZWRWZXJzaW9uOiBzdHJpbmcsIGxhdGVzdFZlcnNpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb21wYXJlVmVyc2lvbnMoaW5zdGFsbGVkVmVyc2lvbiwgbGF0ZXN0VmVyc2lvbiwgJz49Jyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocmVmZXJlbmNlOiBDb21tdW5pdHlQbHVnaW5SZWYpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoJ3BsdWdpbklkJyBpbiByZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlLnBsdWdpbklkO1xuICB9XG5cbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IHJlZmVyZW5jZS5wbHVnaW5OYW1lKTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIG5hbWVkICcke3JlZmVyZW5jZS5wbHVnaW5OYW1lfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gIH1cbiAgcmV0dXJuIGVudHJ5LmlkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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UUFBTSxXQUFXLE1BQU0sa0JBQWtCLE1BQU0sT0FBTztBQUN0RCxRQUFNLElBQUksUUFBUSxjQUFjLE1BQU0sU0FBUyxRQUFRO0FBRXZELFFBQU0saUJBQWlCLElBQUksUUFBUSxVQUFVLFFBQVEsR0FBRztBQUN4RCxNQUFJLG1CQUFtQixTQUFTLFNBQVM7QUFDdkMsVUFBTSxJQUFJO0FBQUEsTUFDUixvQkFBb0IsUUFBUSxRQUFRLFNBQVMsT0FBTyxpQkFBaUIsa0JBQWtCLFFBQVE7QUFBQSxJQUNqRztBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFLQSxTQUFTLG9CQUFvQixtQkFBNEU7QUFDdkcsU0FBTyxPQUFPLHNCQUFzQixZQUMvQixzQkFBc0IsUUFDdEIsaUJBQWlCLHFCQUNqQixPQUFPLGtCQUFrQixnQkFBZ0I7QUFDaEQ7QUFFQSxlQUFlLDhCQUErRDtBQUM1RSxRQUFNLFdBQVcsVUFBTSw0QkFBVyxxQkFBcUI7QUFDdkQsU0FBTyxTQUFTO0FBQ2xCO0FBRUEsZUFBZSw0QkFBNkQ7QUFDMUUsUUFBTSxZQUFRLCtDQUE0RCw2QkFBNkIsSUFBSTtBQUMzRyxRQUFNLFVBQVUsNEJBQTRCO0FBRTVDLE1BQUk7QUFDRixXQUFPLE1BQU0sTUFBTTtBQUFBLEVBQ3JCLFNBQVMsT0FBTztBQUNkLFVBQU0sUUFBUTtBQUNkLFVBQU07QUFBQSxFQUNSO0FBQ0Y7QUFFQSxlQUFlLGtCQUFrQixNQUFjLFNBQTBDO0FBQ3ZGLFFBQU0sV0FBVyxVQUFNLDRCQUFXLHNCQUFzQixJQUFJLHNCQUFzQixPQUFPLGdCQUFnQjtBQUN6RyxTQUFPLFNBQVM7QUFDbEI7QUFJQSxTQUFTLHFCQUFxQixRQUEwQjtBQUN0RCxTQUFPLE9BQU8sV0FBVyxZQUFZLFdBQVcsUUFBUSxFQUFFLDZCQUE2QixVQUFVLE9BQU8sT0FBTztBQUNqSDtBQUlBLFNBQVMsaUJBQWlCLGtCQUEwQixlQUFnQztBQUNsRixNQUFJO0FBQ0YsZUFBTyx3QkFBQUMsU0FBZ0Isa0JBQWtCLGVBQWUsSUFBSTtBQUFBLEVBQzlELFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUNGO0FBRUEsZUFBZSx5QkFBeUIsV0FBZ0Q7QUFDdEYsTUFBSSxjQUFjLFdBQVc7QUFDM0IsV0FBTyxVQUFVO0FBQUEsRUFDbkI7QUFFQSxRQUFNLFVBQVUsTUFBTSwwQkFBMEI7QUFDaEQsUUFBTSxRQUFRLFFBQVEsS0FBSyxDQUFDLGNBQWMsVUFBVSxTQUFTLFVBQVUsVUFBVTtBQUNqRixNQUFJLENBQUMsT0FBTztBQUNWLFVBQU0sSUFBSSxNQUFNLGlCQUFpQixVQUFVLFVBQVUsNkRBQTZEO0FBQUEsRUFDcEg7QUFDQSxTQUFPLE1BQU07QUFDZjsiLCJuYW1lcyI6WyJDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQiLCJVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQiLCJjb21wYXJlVmVyc2lvbnMiXX0=
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tdW5pdHktcGx1Z2lucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVzb2x2ZXMsIHNlYXJjaGVzIGFuZCBtYW5hZ2VzIGNvbW11bml0eSBwbHVnaW5zIHRocm91Z2ggT2JzaWRpYW4ncyBwdWJsaWMgcGx1Z2luIHJlZ2lzdHJ5IGFuZFxuICogc3RvcmUtaW5zdGFsbCBwYXRoLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIGlzIHRoZSBhdXRob3JpdGF0aXZlIHNvdXJjZSB0aGF0IG1hcHMgYSBwbHVnaW4gYGlkYCB0byBpdHNcbiAqIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSDigJQgdGhlIHBsdWdpbiBtYW5pZmVzdCBpdHNlbGYgY2FycmllcyBubyByZXBvc2l0b3J5LiBUaGlzIG1vZHVsZSB1c2VzXG4gKiBpdCB0byBzZWFyY2ggdGhlIHJlZ2lzdHJ5LCB0byBsb2NhdGUgYSBwbHVnaW4ncyBHaXRIdWIgcmVsZWFzZXMgKGUuZy4gdG8gZG93bmxvYWQgaXRzIHNoaXBwZWRcbiAqIGRlbW8tdmF1bHQgYXJjaGl2ZSksIGFuZCB0byBpbnN0YWxsL3VwZGF0ZS91bmluc3RhbGwvZW5hYmxlL2Rpc2FibGUgYW4gYXJiaXRyYXJ5IGNvbW11bml0eSBwbHVnaW4g4oCUIHNlbGVjdGVkXG4gKiBieSBlaXRoZXIgaXRzIGBpZGAgb3IgaXRzIGRpc3BsYXkgYG5hbWVgIOKAlCB2aWEgT2JzaWRpYW4ncyBvd24gc3RvcmUgcGF0aCAoYGFwcC5wbHVnaW5zLmluc3RhbGxQbHVnaW5gXG4gKiArIGBlbmFibGVQbHVnaW5BbmRTYXZlYCksIHNvIGFueSBkZXYvZGVwbG95IG9yIHRvb2xpbmcgZmxvdyBjYW4gcmV1c2UgaXQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFBsdWdpbk1hbmlmZXN0XG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgY29tcGFyZSBhcyBjb21wYXJlVmVyc2lvbnMgfSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcbmltcG9ydCB7IHJlcXVlc3RVcmwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldE9ic2lkaWFuTGliU3RhdGUgfSBmcm9tICcuL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gZWl0aGVyIGJ5IGl0cyBpZCAoe0BsaW5rIENvbW11bml0eVBsdWdpbkJ5SWRSZWZ9KSBvciBieSBpdHMgZGlzcGxheSBuYW1lXG4gKiAoe0BsaW5rIENvbW11bml0eVBsdWdpbkJ5TmFtZVJlZn0pLlxuICovXG5leHBvcnQgdHlwZSBDb21tdW5pdHlQbHVnaW5SZWYgPSBDb21tdW5pdHlQbHVnaW5CeUlkUmVmIHwgQ29tbXVuaXR5UGx1Z2luQnlOYW1lUmVmO1xuXG4vKipcbiAqIEEgc2luZ2xlIHJlc3VsdCBvZiB7QGxpbmsgc2VhcmNoQ29tbXVuaXR5UGx1Z2luc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5TZXR0aW5ncztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBEaXNhYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIEVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGluc3RhbGxDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGAgb3JcbiAqIGBwbHVnaW5OYW1lYC5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW59LiBTZWxlY3RzIHRoZSBwbHVnaW4gYnkgZWl0aGVyIGBwbHVnaW5JZGBcbiAqIG9yIGBwbHVnaW5OYW1lYDsgYHNldHRpbmdzYCBpcyBvcHRpb25hbCAob21pdCBmb3IgYSBwbHVnaW4gdGhhdCBuZWVkcyBubyBjb25maWd1cmF0aW9uKS5cbiAqL1xuZXhwb3J0IHR5cGUgSW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBQYXJ0aWFsPENvbW11bml0eVBsdWdpblNldHRpbmdzPjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFRvZ2dsZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWYgJiBDb21tdW5pdHlQbHVnaW5Ub2dnbGVFbmFibGVTdGF0ZTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdG9nZ2xlSW5zdGFsbENvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvclxuICogYHBsdWdpbk5hbWVgLlxuICovXG5leHBvcnQgdHlwZSBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zID0gQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCAmIENvbW11bml0eVBsdWdpblJlZiAmIENvbW11bml0eVBsdWdpblRvZ2dsZUluc3RhbGxTdGF0ZTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS4gU2VsZWN0cyB0aGUgcGx1Z2luIGJ5IGVpdGhlciBgcGx1Z2luSWRgIG9yXG4gKiBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFVuaW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHVwZGF0ZUNvbW11bml0eVBsdWdpbn0uIFNlbGVjdHMgdGhlIHBsdWdpbiBieSBlaXRoZXIgYHBsdWdpbklkYCBvciBgcGx1Z2luTmFtZWAuXG4gKi9cbmV4cG9ydCB0eXBlIFVwZGF0ZUNvbW11bml0eVBsdWdpblBhcmFtcyA9IENvbW11bml0eVBsdWdpbk9wZXJhdGlvbkNvbnRleHQgJiBDb21tdW5pdHlQbHVnaW5SZWY7XG5cbi8qKlxuICogU2VsZWN0cyBhIGNvbW11bml0eSBwbHVnaW4gYnkgaXRzIGlkLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luQnlJZFJlZiB7XG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3RzIGEgY29tbXVuaXR5IHBsdWdpbiBieSBpdHMgZGlzcGxheSBuYW1lIChhcyBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcmVnaXN0cnkpLlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luQnlOYW1lUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gZGlzcGxheSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIGVudHJ5IGluIE9ic2lkaWFuJ3MgYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIHJlZ2lzdHJ5LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luRW50cnkge1xuICAvKipcbiAgICogVGhlIHBsdWdpbiBhdXRob3IuXG4gICAqL1xuICByZWFkb25seSBhdXRob3I6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbiBkZXNjcmlwdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gaWQuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGx1Z2luIGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlIGEgY29tbXVuaXR5LXBsdWdpbiBvcGVyYXRpb24gcnVucyBhZ2FpbnN0LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luT3BlcmF0aW9uQ29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG59XG5cbi8qKlxuICogVGhlIHNldHRpbmdzIHRvIG1lcmdlIGludG8gYSBjb21tdW5pdHkgcGx1Z2luJ3MgYGRhdGEuanNvbmAuXG4gKi9cbmludGVyZmFjZSBDb21tdW5pdHlQbHVnaW5TZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBUaGUgc2V0dGluZ3Mgb2JqZWN0IHNoYWxsb3ctbWVyZ2VkIG92ZXIgdGhlIHBsdWdpbidzIGV4aXN0aW5nIGBkYXRhLmpzb25gICh0aGUgZmlsZSBpcyBjcmVhdGVkIGlmXG4gICAqIGFic2VudCkuXG4gICAqL1xuICByZWFkb25seSBzZXR0aW5nczogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBkZXNpcmVkIGVuYWJsZWQgc3RhdGUgZm9yIHtAbGluayB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW59LlxuICovXG5pbnRlcmZhY2UgQ29tbXVuaXR5UGx1Z2luVG9nZ2xlRW5hYmxlU3RhdGUge1xuICAvKipcbiAgICogVGhlIGRlc2lyZWQgZW5hYmxlZCBzdGF0ZTogYHRydWVgIGVuYWJsZXMgdGhlIHBsdWdpbiwgYGZhbHNlYCBkaXNhYmxlcyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgZGVzaXJlZCBpbnN0YWxsZWQgc3RhdGUgZm9yIHtAbGluayB0b2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuaW50ZXJmYWNlIENvbW11bml0eVBsdWdpblRvZ2dsZUluc3RhbGxTdGF0ZSB7XG4gIC8qKlxuICAgKiBUaGUgZGVzaXJlZCBpbnN0YWxsZWQgc3RhdGU6IGB0cnVlYCBpbnN0YWxscyB0aGUgcGx1Z2luLCBgZmFsc2VgIHVuaW5zdGFsbHMgaXQuXG4gICAqL1xuICByZWFkb25seSBpc0luc3RhbGxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgb25lIG1ldGhvZCB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufSBuZWVkcyBmcm9tIGEgcGx1Z2luJ3Mgc2V0dGluZ3MgY29tcG9uZW50IHRvIGNvbmZpZ3VyZVxuICogaXQgbGl2ZS4gRGVjbGFyZWQgc3RydWN0dXJhbGx5IHJhdGhlciB0aGFuIGltcG9ydGluZyBgUGx1Z2luU2V0dGluZ3NDb21wb25lbnRgLCBzbyBhIHBsdWdpbiBidWlsdCBvblxuICogYW55IHZlcnNpb24gb2YgaXQgLS0gb3Igb24gaXRzIG93biBlcXVpdmFsZW50IC0tIGlzIGNvbmZpZ3VyYWJsZSB3aXRob3V0IGEgc2hhcmVkIG5vbWluYWwgdHlwZS5cbiAqL1xuaW50ZXJmYWNlIEVkaXRhYmxlU2V0dGluZ3NDb21wb25lbnQge1xuICByZWFkb25seSBlZGl0QW5kU2F2ZTogKHNldHRpbmdzRWRpdG9yOiAoc2V0dGluZ3M6IG9iamVjdCkgPT4gdm9pZCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBUaGUgc3Vic2V0IG9mIGEgR2l0SHViIHJlbGVhc2Ugd2UgcmVhZC5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2Uge1xuICAvKipcbiAgICogVGhlIHJlbGVhc2UgdGFnLCBhIGJhcmUgdmVyc2lvbiBzdWNoIGFzIGAxLjIuM2AuXG4gICAqL1xuICByZWFkb25seSB0YWdfbmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBDT01NVU5JVFlfUExVR0lOU19TVEFURV9LRVkgPSAnY29tbXVuaXR5UGx1Z2luRW50cmllc1Byb21pc2UnO1xuY29uc3QgQ09NTVVOSVRZX1BMVUdJTlNfVVJMID0gJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL0hFQUQvY29tbXVuaXR5LXBsdWdpbnMuanNvbic7XG5jb25zdCBEQVRBX0pTT05fSU5ERU5UID0gMjtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIHtAbGluayBjb25maWd1cmVDb21tdW5pdHlQbHVnaW59LlxuICovXG5leHBvcnQgZW51bSBDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQge1xuICAvKipcbiAgICogVGhlIHNldHRpbmdzIHdlcmUgYXBwbGllZCB0aHJvdWdoIHRoZSBydW5uaW5nIHBsdWdpbidzIG93biBzZXR0aW5ncyBjb21wb25lbnQsIHdoaWNoIGJvdGggdXBkYXRlZFxuICAgKiB0aGVtIGluIG1lbW9yeSBhbmQgcGVyc2lzdGVkIHRoZW0uIFRoZSBwbHVnaW4gaXMgYWxyZWFkeSB1c2luZyB0aGVtLCBzbyBpdCBtdXN0IE5PVCBiZSByZWxvYWRlZC5cbiAgICovXG4gIEFwcGxpZWRMaXZlID0gJ2FwcGxpZWRMaXZlJyxcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgc28gbm90aGluZyB3YXMgd3JpdHRlbi5cbiAgICovXG4gIFNraXBwZWQgPSAnc2tpcHBlZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyB3ZXJlIG1lcmdlZCBpbnRvIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgd2hpY2ggd2FzIHdyaXR0ZW4uXG4gICAqL1xuICBTdWNjZXNzID0gJ3N1Y2Nlc3MnXG59XG5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiB7QGxpbmsgdXBkYXRlQ29tbXVuaXR5UGx1Z2lufS5cbiAqL1xuZXhwb3J0IGVudW0gVXBkYXRlQ29tbXVuaXR5UGx1Z2luUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YWxsZWQgY29weSBpcyBhbHJlYWR5IGF0IChvciBwYXN0KSB0aGUgbGF0ZXN0IHJlbGVhc2UsIHNvIG5vdGhpbmcgd2FzIGRvd25sb2FkZWQuXG4gICAqL1xuICBBbHJlYWR5VXBUb0RhdGUgPSAnYWxyZWFkeVVwVG9EYXRlJyxcblxuICAvKipcbiAgICogVGhlIGxhdGVzdCByZWxlYXNlIHdhcyBpbnN0YWxsZWQgb3ZlciB0aGUgb2xkIGNvcHksIHdoaWNoIE9ic2lkaWFuIHJlbG9hZGVkIGlmIGl0IHdhcyBydW5uaW5nLlxuICAgKi9cbiAgVXBkYXRlZCA9ICd1cGRhdGVkJ1xufVxuXG4vKipcbiAqIENvbmZpZ3VyZXMgYSBjb21tdW5pdHkgcGx1Z2luLCBwcmVmZXJyaW5nIHRoZSBydW5uaW5nIHBsdWdpbidzIG93biBzZXR0aW5ncyBjb21wb25lbnQgb3ZlciBpdHNcbiAqIGBkYXRhLmpzb25gLlxuICpcbiAqIFdoZW4gdGhlIHBsdWdpbiBpcyBsb2FkZWQgQU5EIGV4cG9zZXMgYSBgcGx1Z2luU2V0dGluZ3NDb21wb25lbnRgIHdpdGggYW4gYGVkaXRBbmRTYXZlYCBtZXRob2QsIHRoZVxuICogc2V0dGluZ3MgYXJlIHNoYWxsb3ctbWVyZ2VkIHRocm91Z2ggaXQ6IHRoZXkgdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkgYW5kIGFyZSBwZXJzaXN0ZWQsIHNvIHRoZSBwbHVnaW5cbiAqIG5lZWRzIG5vIHJlbG9hZCBhbmQge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5BcHBsaWVkTGl2ZX0gaXMgcmV0dXJuZWQuIFRoaXMgaXMgd2hhdCBsZXRzIGFcbiAqIHBsdWdpbidzIG93biBzY3JpcHQgcmVjb25maWd1cmUgaXQgd2l0aG91dCB0aGUgZGlzYWJsZS9lbmFibGUgY3ljbGUgdGhhdCB3b3VsZCB0ZWFyIGRvd24gdGhlIHZlcnkgY29kZVxuICogZG9pbmcgdGhlIHJlY29uZmlndXJpbmcuIE5vdGUgdGhhdCB0aGlzIHBhdGggcnVucyB0aGUgcGx1Z2luJ3Mgc2V0dGluZyB2YWxpZGF0b3JzLCBzbyBhbiBpbnZhbGlkIHZhbHVlXG4gKiBpcyByZXBsYWNlZCBieSBpdHMgZGVmYXVsdCByYXRoZXIgdGhhbiB3cml0dGVuIHRocm91Z2ggdmVyYmF0aW0uXG4gKlxuICogT3RoZXJ3aXNlIHRoZSBzZXR0aW5ncyBhcmUgd3JpdHRlbiBpbnRvIHRoZSBwbHVnaW4ncyBgZGF0YS5qc29uYCwgc2hhbGxvdy1tZXJnZWQgb3ZlciBhbnkgZXhpc3RpbmdcbiAqIHNldHRpbmdzIChjcmVhdGluZyB0aGUgZmlsZSBpZiBhYnNlbnQpLiBXcml0aW5nIHNldHRpbmdzIEJFRk9SRSB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgbWFrZXMgaXQgbG9hZFxuICogYWxyZWFkeSBjb25maWd1cmVkLCB3aXRoIG5vIHJlbG9hZC4gQSBuby1vcCB3cml0ZSBpcyBza2lwcGVkOiB3aGVuIHRoZSBtZXJnZSBjaGFuZ2VzIG5vdGhpbmcsIHRoZSBmaWxlXG4gKiBpcyBsZWZ0IHVudG91Y2hlZCBhbmQge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5Ta2lwcGVkfSBpcyByZXR1cm5lZCwgc28gYSBjYWxsZXIgY2FuIGF2b2lkXG4gKiByZWxvYWRpbmcgYW4gYWxyZWFkeS1jb3JyZWN0bHktY29uZmlndXJlZCBwbHVnaW4uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8ge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5BcHBsaWVkTGl2ZX0gaWYgdGhlXG4gKiBydW5uaW5nIHBsdWdpbiBhcHBsaWVkIHRoZW0gaXRzZWxmIChubyByZWxvYWQgbmVlZGVkKSwge0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5TdWNjZXNzfSBpZlxuICogdGhlIGBkYXRhLmpzb25gIGNvbnRlbnQgY2hhbmdlZCAoYW5kIHdhcyB3cml0dGVuKSwgb3Ige0BsaW5rIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5Ta2lwcGVkfSBpZlxuICogdGhlIHNldHRpbmdzIHdlcmUgYWxyZWFkeSBwcmVzZW50IChub3RoaW5nIHdyaXR0ZW4pLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8Q29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0PiB7XG4gIGNvbnN0IHsgYXBwLCBzZXR0aW5ncyB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuXG4gIGNvbnN0IHNldHRpbmdzQ29tcG9uZW50ID0gZ2V0U2V0dGluZ3NDb21wb25lbnQoYXBwLnBsdWdpbnMucGx1Z2luc1twbHVnaW5JZF0pO1xuICBpZiAoY2hlY2tIYXNFZGl0QW5kU2F2ZShzZXR0aW5nc0NvbXBvbmVudCkpIHtcbiAgICBhd2FpdCBzZXR0aW5nc0NvbXBvbmVudC5lZGl0QW5kU2F2ZSgocGx1Z2luU2V0dGluZ3MpID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocGx1Z2luU2V0dGluZ3MsIHNldHRpbmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LkFwcGxpZWRMaXZlO1xuICB9XG5cbiAgY29uc3QgZGF0YVBhdGggPSBgJHthcHAudmF1bHQuY29uZmlnRGlyfS9wbHVnaW5zLyR7cGx1Z2luSWR9L2RhdGEuanNvbmA7XG5cbiAgbGV0IGRhdGE6IG9iamVjdCA9IHt9O1xuICBpZiAoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGRhdGFQYXRoKSkge1xuICAgIGNvbnN0IHBhcnNlZDogdW5rbm93biA9IEpTT04ucGFyc2UoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChkYXRhUGF0aCkpO1xuICAgIGlmIChwYXJzZWQgIT09IG51bGwgJiYgdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGRhdGEgPSBwYXJzZWQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZEJlZm9yZSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICBPYmplY3QuYXNzaWduKGRhdGEsIHNldHRpbmdzKTtcbiAgaWYgKEpTT04uc3RyaW5naWZ5KGRhdGEpID09PSBzZXJpYWxpemVkQmVmb3JlKSB7XG4gICAgcmV0dXJuIENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5Ta2lwcGVkO1xuICB9XG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IFN0cmluZyhKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCBEQVRBX0pTT05fSU5ERU5UKSk7XG4gIGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLndyaXRlKGRhdGFQYXRoLCBgJHtzZXJpYWxpemVkfVxcbmApO1xuICByZXR1cm4gQ29uZmlndXJlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlN1Y2Nlc3M7XG59XG5cbi8qKlxuICogRGlzYWJsZXMgYSBjb21tdW5pdHkgcGx1Z2luIChwZXJzaXN0aW5nIHRoZSBjaGFuZ2UpIGlmIGl0IGlzIGN1cnJlbnRseSBlbmFibGVkLiBJZGVtcG90ZW50IOKAlCBhIG5vLW9wXG4gKiB3aGVuIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBkaXNhYmxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBEaXNhYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICogQHRocm93cyBJZiBzZWxlY3RlZCBieSBgcGx1Z2luTmFtZWAgYW5kIHRoZSBuYW1lIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc2FibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBEaXNhYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy5kaXNhYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogRW5hYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gKHBlcnNpc3RpbmcgdGhlIGNoYW5nZSkgaWYgaXQgaXMgbm90IGFscmVhZHkgZW5hYmxlZC4gSWRlbXBvdGVudCDigJQgYSBuby1vcFxuICogd2hlbiB0aGUgcGx1Z2luIGlzIGFscmVhZHkgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgZW5hYmxlZC5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAgfSA9IHBhcmFtcztcbiAgY29uc3QgcGx1Z2luSWQgPSBhd2FpdCByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocGFyYW1zKTtcbiAgaWYgKGFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGBvd25lci9uYW1lYCBHaXRIdWIgcmVwb3NpdG9yeSBvZiBhIGNvbW11bml0eSBwbHVnaW4gZnJvbSBPYnNpZGlhbidzIHB1YmxpY1xuICogYGNvbW11bml0eS1wbHVnaW5zLmpzb25gIHJlZ2lzdHJ5LlxuICpcbiAqIFRoZSByZWdpc3RyeSBpcyBmZXRjaGVkIG9uY2UgYW5kIGNhY2hlZCBvbiB0aGUgc2hhcmVkIHBsdWdpbiBzdGF0ZSBmb3Igc3Vic2VxdWVudCBjYWxsczsgYSBmYWlsZWRcbiAqIGZldGNoIGlzIG5vdCBjYWNoZWQsIHNvIGEgbGF0ZXIgY2FsbCByZXRyaWVzLlxuICpcbiAqIEBwYXJhbSBwbHVnaW5JZCAtIFRoZSBwbHVnaW4gaWQgdG8gbG9vayB1cC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgcGx1Z2luJ3MgYG93bmVyL25hbWVgIHJlcG9zaXRvcnksIG9yIGBudWxsYCBpZiB0aGVcbiAqIHBsdWdpbiBpcyBub3QgbGlzdGVkIGluIHRoZSByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbW11bml0eVBsdWdpblJlcG8ocGx1Z2luSWQ6IHN0cmluZyk6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZ2V0Q29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuICBjb25zdCBlbnRyeSA9IGVudHJpZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT09IHBsdWdpbklkKTtcbiAgcmV0dXJuIGVudHJ5Py5yZXBvID8/IG51bGw7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGxhdGVzdCByZWxlYXNlIHZlcnNpb24gKHRoZSByZWxlYXNlIGB0YWdfbmFtZWAsIGEgYmFyZSB2ZXJzaW9uIHN1Y2ggYXMgYDEuMi4zYCkgb2YgYVxuICogR2l0SHViIHJlcG9zaXRvcnkuXG4gKlxuICogQHBhcmFtIHJlcG8gLSBUaGUgYG93bmVyL25hbWVgIEdpdEh1YiByZXBvc2l0b3J5LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGF0ZXN0UmVsZWFzZVZlcnNpb24ocmVwbzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vcmVsZWFzZXMvbGF0ZXN0YCk7XG4gIGNvbnN0IHJlbGVhc2UgPSByZXNwb25zZS5qc29uIGFzIEdpdEh1YlJlbGVhc2U7XG4gIHJldHVybiByZWxlYXNlLnRhZ19uYW1lO1xufVxuXG4vKipcbiAqIEluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiBmcm9tIHRoZSBvZmZpY2lhbCBzdG9yZSBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQuIElkZW1wb3RlbnQg4oCUIGFcbiAqIG5vLW9wIHdoZW4gdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGluc3RhbGxlZC4gUmVzb2x2ZXMgdGhlIHBsdWdpbidzIHJlcG9zaXRvcnkgZnJvbSBPYnNpZGlhbidzXG4gKiBjb21tdW5pdHkgcmVnaXN0cnksIHJlYWRzIHRoZSBsYXRlc3QgcmVsZWFzZSB2ZXJzaW9uIGFuZCBpdHMgbWFuaWZlc3QsIGFuZCBpbnN0YWxscyBpdCB0aHJvdWdoXG4gKiBPYnNpZGlhbidzIG93biBgaW5zdGFsbFBsdWdpbmAgcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZC5cbiAqIEB0aHJvd3MgSWYgdGhlIHBsdWdpbiBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogSW5zdGFsbENvbW11bml0eVBsdWdpblBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBpZiAoT2JqZWN0Lmhhc093bihhcHAucGx1Z2lucy5tYW5pZmVzdHMsIHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlcG8gPSBhd2FpdCBnZXRDb21tdW5pdHlQbHVnaW5SZXBvKHBsdWdpbklkKTtcbiAgaWYgKCFyZXBvKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gJyR7cGx1Z2luSWR9JyB3YXMgbm90IGZvdW5kIGluIHRoZSBPYnNpZGlhbiBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5gKTtcbiAgfVxuXG4gIGNvbnN0IHZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RSZWxlYXNlVmVyc2lvbihyZXBvKTtcbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBnZXRQbHVnaW5NYW5pZmVzdChyZXBvLCB2ZXJzaW9uKTtcbiAgYXdhaXQgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbihyZXBvLCB2ZXJzaW9uLCBtYW5pZmVzdCk7XG59XG5cbi8qKlxuICogSW5zdGFsbHMgYSBjb21tdW5pdHkgcGx1Z2luLCB3cml0ZXMgaXRzIHNldHRpbmdzLCBUSEVOIGVuYWJsZXMgaXQg4oCUIGluIHRoYXQgb3JkZXIg4oCUIHNvIHRoZSBwbHVnaW5cbiAqIGxvYWRzIGFscmVhZHkgY29uZmlndXJlZCAoYSBwbHVnaW4gZW5hYmxlZCBiZWZvcmUgaXQgaXMgY29uZmlndXJlZCBydW5zIGl0cyBgb25sb2FkYCB3aXRoIGRlZmF1bHRcbiAqIHNldHRpbmdzIGFuZCBkb2VzIG5vdGhpbmcgdXNlZnVsKS4gSWYgdGhlIHBsdWdpbiBpcyBhbHJlYWR5IGVuYWJsZWQgYW5kIHRoZSBzZXR0aW5ncyBjaGFuZ2VkLCBpdCBpc1xuICogZGlzYWJsZWQgYW5kIHJlLWVuYWJsZWQgc28gdGhlIG5ldyBzZXR0aW5ncyB0YWtlIGVmZmVjdC4gYHNldHRpbmdzYCBpcyBvcHRpb25hbDogb21pdCBpdCBmb3IgYSBwbHVnaW5cbiAqIHRoYXQgbmVlZHMgbm8gY29uZmlndXJhdGlvbi4gQ29tcG9zZXMge0BsaW5rIGluc3RhbGxDb21tdW5pdHlQbHVnaW59LCB7QGxpbmsgY29uZmlndXJlQ29tbXVuaXR5UGx1Z2lufSxcbiAqIHtAbGluayBlbmFibGVDb21tdW5pdHlQbHVnaW59IGFuZCB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgSW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpblBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQsIGNvbmZpZ3VyZWQgYW5kIGVuYWJsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbENvbmZpZ3VyZUVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXM6IEluc3RhbGxDb25maWd1cmVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAsIHNldHRpbmdzIH0gPSBwYXJhbXM7XG4gIGF3YWl0IGluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgY29uc3QgZGlkU2V0dGluZ3NDaGFuZ2UgPSBzZXR0aW5ncyA/IGF3YWl0IGNvbmZpZ3VyZUNvbW11bml0eVBsdWdpbih7IC4uLnBhcmFtcywgc2V0dGluZ3MgfSkgPT09IENvbmZpZ3VyZUNvbW11bml0eVBsdWdpblJlc3VsdC5TdWNjZXNzIDogZmFsc2U7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKGRpZFNldHRpbmdzQ2hhbmdlKSB7XG4gICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICAgIGF3YWl0IGVuYWJsZUNvbW11bml0eVBsdWdpbihwYXJhbXMpO1xuICB9XG59XG5cbi8qKlxuICogU2VhcmNoZXMgT2JzaWRpYW4ncyBwdWJsaWMgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnksIHJldHVybmluZyB0aGUgaWQgYW5kIGRpc3BsYXkgbmFtZSBvZiBldmVyeVxuICogcGx1Z2luIHdob3NlIGlkLCBuYW1lLCBhdXRob3Igb3IgZGVzY3JpcHRpb24gY29udGFpbnMgdGhlIHF1ZXJ5IChjYXNlLWluc2Vuc2l0aXZlKS4gQW4gZW1wdHkgcXVlcnlcbiAqIG1hdGNoZXMgZXZlcnkgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSBxdWVyeSAtIFRoZSBzZWFyY2ggcXVlcnkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIG1hdGNoaW5nIHBsdWdpbnMnIHtAbGluayBDb21tdW5pdHlQbHVnaW5TZWFyY2hSZXN1bHR9cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlYXJjaENvbW11bml0eVBsdWdpbnMocXVlcnk6IHN0cmluZyk6IFByb21pc2U8Q29tbXVuaXR5UGx1Z2luU2VhcmNoUmVzdWx0W10+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGVudHJpZXNcbiAgICAuZmlsdGVyKChlbnRyeSkgPT5cbiAgICAgIGVudHJ5LmlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgICAgfHwgZW50cnkubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5LmF1dGhvci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICAgIHx8IGVudHJ5LmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KVxuICAgIClcbiAgICAubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIGlkOiBlbnRyeS5pZCxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWVcbiAgICB9KSk7XG59XG5cbi8qKlxuICogRW5hYmxlcyBvciBkaXNhYmxlcyBhIGNvbW11bml0eSBwbHVnaW4gdG8gbWF0Y2ggdGhlIGRlc2lyZWQgc3RhdGUuIERlbGVnYXRlcyB0b1xuICoge0BsaW5rIGVuYWJsZUNvbW11bml0eVBsdWdpbn0gLyB7QGxpbmsgZGlzYWJsZUNvbW11bml0eVBsdWdpbn0sIHNvIGl0IGlzIGlkZW1wb3RlbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVG9nZ2xlRW5hYmxlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIG1hdGNoZXMgdGhlIGRlc2lyZWQgZW5hYmxlZCBzdGF0ZS5cbiAqIEB0aHJvd3MgSWYgc2VsZWN0ZWQgYnkgYHBsdWdpbk5hbWVgIGFuZCB0aGUgbmFtZSBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBUb2dnbGVFbmFibGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHBhcmFtcy5pc0VuYWJsZWQpIHtcbiAgICBhd2FpdCBlbmFibGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnN0YWxscyBvciB1bmluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiB0byBtYXRjaCB0aGUgZGVzaXJlZCBzdGF0ZS4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgaW5zdGFsbENvbW11bml0eVBsdWdpbn0gLyB7QGxpbmsgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2lufSwgc28gaXQgaXMgaWRlbXBvdGVudC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIG1hdGNoZXMgdGhlIGRlc2lyZWQgaW5zdGFsbGVkIHN0YXRlLlxuICogQHRocm93cyBJZiBpbnN0YWxsaW5nIGFuZCB0aGUgcGx1Z2luIGlzIG5vdCBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2lucyByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZUluc3RhbGxDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBUb2dnbGVJbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwYXJhbXMuaXNJbnN0YWxsZWQpIHtcbiAgICBhd2FpdCBpbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBVbmluc3RhbGxzIGEgY29tbXVuaXR5IHBsdWdpbiBpZiBpdCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkLiBJZGVtcG90ZW50IOKAlCBhIG5vLW9wIHdoZW4gdGhlIHBsdWdpbiBpc1xuICogbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBVbmluc3RhbGxDb21tdW5pdHlQbHVnaW5QYXJhbXN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgdW5pbnN0YWxsZWQuXG4gKiBAdGhyb3dzIElmIHNlbGVjdGVkIGJ5IGBwbHVnaW5OYW1lYCBhbmQgdGhlIG5hbWUgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luKHBhcmFtczogVW5pbnN0YWxsQ29tbXVuaXR5UGx1Z2luUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBsdWdpbklkID0gYXdhaXQgcmVzb2x2ZUNvbW11bml0eVBsdWdpbklkKHBhcmFtcyk7XG4gIGlmICghT2JqZWN0Lmhhc093bihhcHAucGx1Z2lucy5tYW5pZmVzdHMsIHBsdWdpbklkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBhcHAucGx1Z2lucy51bmluc3RhbGxQbHVnaW4ocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYW4gaW5zdGFsbGVkIGNvbW11bml0eSBwbHVnaW4gdG8gaXRzIGxhdGVzdCByZWxlYXNlLCB0aGUgd2F5IHRoZSBjb21tdW5pdHkgcGx1Z2luIGJyb3dzZXIncyBvd25cbiAqIGBVcGRhdGVgIGJ1dHRvbiBkb2VzLlxuICpcbiAqIE9ic2lkaWFuJ3MgYGluc3RhbGxQbHVnaW5gIHdyaXRlcyB0aGUgcmVsZWFzZSdzIGZpbGVzIG92ZXIgdGhlIGluc3RhbGxlZCBjb3B5IGFuZCwgd2hlbiB0aGUgcGx1Z2luIGlzXG4gKiBydW5uaW5nLCBkaXNhYmxlcyBhbmQgcmUtZW5hYmxlcyBpdCBzbyB0aGUgbmV3IGNvZGUgbG9hZHMg4oCUIHJlYWQgZnJvbSB0aGUgc2hpcHBlZCBidW5kbGUgKGAxLjE0LjRgKSwgbm90XG4gKiBhc3N1bWVkLiBJdCByZXBvcnRzIGl0cyBvd24gZmFpbHVyZXMgKGEgZmFpbGVkIGRvd25sb2FkLCBhIG1hbmlmZXN0IHdob3NlIGlkIGRvZXMgbm90IG1hdGNoKSBhcyBhIG5vdGljZVxuICogYW5kIFJFVFVSTlMgcmF0aGVyIHRoYW4gdGhyb3dpbmcsIHNvIHRoZSBpbnN0YWxsZWQgbWFuaWZlc3QgaXMgcmUtcmVhZCBhZnRlcndhcmRzIGFuZCBhIHZlcnNpb24gdGhhdCBkaWRcbiAqIG5vdCBtb3ZlIHRvIHRoZSByZWxlYXNlIGlzIHRocm93biBhcyBhIGZhaWx1cmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgVXBkYXRlQ29tbXVuaXR5UGx1Z2luUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB7QGxpbmsgVXBkYXRlQ29tbXVuaXR5UGx1Z2luUmVzdWx0LlVwZGF0ZWR9IG9uY2UgdGhlIGxhdGVzdCByZWxlYXNlXG4gKiBpcyBpbnN0YWxsZWQsIG9yIHtAbGluayBVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQuQWxyZWFkeVVwVG9EYXRlfSB3aGVuIHRoZSBpbnN0YWxsZWQgY29weSBpcyBub3Qgb2xkZXJcbiAqIHRoYW4gaXQuXG4gKiBAdGhyb3dzIElmIHRoZSBwbHVnaW4gaXMgbm90IGluc3RhbGxlZCwgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LCBvciB0aGVcbiAqIGluc3RhbGwgZGlkIG5vdCBsZWF2ZSB0aGUgbGF0ZXN0IHJlbGVhc2UgaW4gcGxhY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVDb21tdW5pdHlQbHVnaW4ocGFyYW1zOiBVcGRhdGVDb21tdW5pdHlQbHVnaW5QYXJhbXMpOiBQcm9taXNlPFVwZGF0ZUNvbW11bml0eVBsdWdpblJlc3VsdD4ge1xuICBjb25zdCB7IGFwcCB9ID0gcGFyYW1zO1xuICBjb25zdCBwbHVnaW5JZCA9IGF3YWl0IHJlc29sdmVDb21tdW5pdHlQbHVnaW5JZChwYXJhbXMpO1xuICBjb25zdCBpbnN0YWxsZWRNYW5pZmVzdCA9IGFwcC5wbHVnaW5zLm1hbmlmZXN0c1twbHVnaW5JZF07XG4gIGlmICghaW5zdGFsbGVkTWFuaWZlc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtwbHVnaW5JZH0nIGlzIG5vdCBpbnN0YWxsZWQsIHNvIGl0IGNhbm5vdCBiZSB1cGRhdGVkLmApO1xuICB9XG5cbiAgY29uc3QgcmVwbyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpblJlcG8ocGx1Z2luSWQpO1xuICBpZiAoIXJlcG8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAnJHtwbHVnaW5JZH0nIHdhcyBub3QgZm91bmQgaW4gdGhlIE9ic2lkaWFuIGNvbW11bml0eSBwbHVnaW5zIHJlZ2lzdHJ5LmApO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdFJlbGVhc2VWZXJzaW9uKHJlcG8pO1xuICBpZiAoaXNBdExlYXN0VmVyc2lvbihpbnN0YWxsZWRNYW5pZmVzdC52ZXJzaW9uLCB2ZXJzaW9uKSkge1xuICAgIHJldHVybiBVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQuQWxyZWFkeVVwVG9EYXRlO1xuICB9XG5cbiAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBnZXRQbHVnaW5NYW5pZmVzdChyZXBvLCB2ZXJzaW9uKTtcbiAgYXdhaXQgYXBwLnBsdWdpbnMuaW5zdGFsbFBsdWdpbihyZXBvLCB2ZXJzaW9uLCBtYW5pZmVzdCk7XG5cbiAgY29uc3QgdXBkYXRlZFZlcnNpb24gPSBhcHAucGx1Z2lucy5tYW5pZmVzdHNbcGx1Z2luSWRdPy52ZXJzaW9uO1xuICBpZiAodXBkYXRlZFZlcnNpb24gIT09IG1hbmlmZXN0LnZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVXBkYXRpbmcgcGx1Z2luICcke3BsdWdpbklkfScgdG8gJHttYW5pZmVzdC52ZXJzaW9ufSBsZWZ0IHZlcnNpb24gJHt1cGRhdGVkVmVyc2lvbiA/PyAnKG5vbmUpJ30gaW5zdGFsbGVkLiBPYnNpZGlhbiByZXBvcnRzIHRoZSBjYXVzZSBhcyBhIG5vdGljZS5gXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQuVXBkYXRlZDtcbn1cblxuLy8gV2hldGhlciBhIHBsdWdpbidzIGBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudGAgY2FuIGNvbmZpZ3VyZSBpdHNlbGYgaW4gcGxhY2UuIFN0cnVjdHVyYWwgcmF0aGVyIHRoYW4gYW5cbi8vIGBpbnN0YW5jZW9mYDogdGhlIHBsdWdpbiB3YXMgbG9hZGVkIGZyb20gaXRzIG93biBidW5kbGUsIHNvIGV2ZW4gYSBwbHVnaW4gYnVpbHQgb24gdGhpcyB2ZXJ5IGxpYnJhcnlcbi8vIGNhcnJpZXMgaXRzIG93biBjb3B5IG9mIHRoZSBjbGFzcyBhbmQgd291bGQgZmFpbCBhbiBpZGVudGl0eSBjaGVjay5cbmZ1bmN0aW9uIGNoZWNrSGFzRWRpdEFuZFNhdmUoc2V0dGluZ3NDb21wb25lbnQ6IHVua25vd24pOiBzZXR0aW5nc0NvbXBvbmVudCBpcyBFZGl0YWJsZVNldHRpbmdzQ29tcG9uZW50IHtcbiAgcmV0dXJuIHR5cGVvZiBzZXR0aW5nc0NvbXBvbmVudCA9PT0gJ29iamVjdCdcbiAgICAmJiBzZXR0aW5nc0NvbXBvbmVudCAhPT0gbnVsbFxuICAgICYmICdlZGl0QW5kU2F2ZScgaW4gc2V0dGluZ3NDb21wb25lbnRcbiAgICAmJiB0eXBlb2Ygc2V0dGluZ3NDb21wb25lbnQuZWRpdEFuZFNhdmUgPT09ICdmdW5jdGlvbic7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpOiBQcm9taXNlPENvbW11bml0eVBsdWdpbkVudHJ5W10+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKENPTU1VTklUWV9QTFVHSU5TX1VSTCk7XG4gIHJldHVybiByZXNwb25zZS5qc29uIGFzIENvbW11bml0eVBsdWdpbkVudHJ5W107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTogUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPiB7XG4gIGNvbnN0IGNhY2hlID0gZ2V0T2JzaWRpYW5MaWJTdGF0ZTxudWxsIHwgUHJvbWlzZTxDb21tdW5pdHlQbHVnaW5FbnRyeVtdPj4oQ09NTVVOSVRZX1BMVUdJTlNfU1RBVEVfS0VZLCBudWxsKTtcbiAgY2FjaGUudmFsdWUgPz89IGZldGNoQ29tbXVuaXR5UGx1Z2luRW50cmllcygpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGNhY2hlLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhY2hlLnZhbHVlID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQbHVnaW5NYW5pZmVzdChyZXBvOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8UGx1Z2luTWFuaWZlc3Q+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0VXJsKGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvfS9yZWxlYXNlcy9kb3dubG9hZC8ke3ZlcnNpb259L21hbmlmZXN0Lmpzb25gKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmpzb24gYXMgUGx1Z2luTWFuaWZlc3Q7XG59XG5cbi8vIFJlYWRzIGEgbG9hZGVkIHBsdWdpbidzIGBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudGAsIG9yIGBudWxsYCB3aGVuIGl0IGhhcyBub25lLiBUYWtlcyBgdW5rbm93bmAgYmVjYXVzZVxuLy8gQSBwbHVnaW4gaXMgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBleHBvc2Ugb25lLCBzbyB0aGVyZSBpcyBubyB0eXBlIHRvIG5hcnJvdyBmcm9tLlxuZnVuY3Rpb24gZ2V0U2V0dGluZ3NDb21wb25lbnQocGx1Z2luOiB1bmtub3duKTogdW5rbm93biB7XG4gIHJldHVybiB0eXBlb2YgcGx1Z2luICE9PSAnb2JqZWN0JyB8fCBwbHVnaW4gPT09IG51bGwgfHwgISgncGx1Z2luU2V0dGluZ3NDb21wb25lbnQnIGluIHBsdWdpbikgPyBudWxsIDogcGx1Z2luLnBsdWdpblNldHRpbmdzQ29tcG9uZW50O1xufVxuXG4vLyBBIHZlcnNpb24gdGhhdCBjYW5ub3QgYmUgcGFyc2VkIHJlYWRzIGFzIG9sZGVyLCBzbyBhbiB1cGRhdGUgaXMgYXR0ZW1wdGVkIHJhdGhlciB0aGFuIHNraXBwZWQ6IHRoZSBpbnN0YWxsJ3Ncbi8vIG93biB2ZXJzaW9uIGNoZWNrIGFmdGVyd2FyZHMgc3RpbGwgY2F0Y2hlcyBhIHJlbGVhc2UgdGhhdCBkb2VzIG5vdCBtb3ZlIGl0LlxuZnVuY3Rpb24gaXNBdExlYXN0VmVyc2lvbihpbnN0YWxsZWRWZXJzaW9uOiBzdHJpbmcsIGxhdGVzdFZlcnNpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb21wYXJlVmVyc2lvbnMoaW5zdGFsbGVkVmVyc2lvbiwgbGF0ZXN0VmVyc2lvbiwgJz49Jyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQ29tbXVuaXR5UGx1Z2luSWQocmVmZXJlbmNlOiBDb21tdW5pdHlQbHVnaW5SZWYpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoJ3BsdWdpbklkJyBpbiByZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlLnBsdWdpbklkO1xuICB9XG5cbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IGdldENvbW11bml0eVBsdWdpbkVudHJpZXMoKTtcbiAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IHJlZmVyZW5jZS5wbHVnaW5OYW1lKTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIG5hbWVkICcke3JlZmVyZW5jZS5wbHVnaW5OYW1lfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgT2JzaWRpYW4gY29tbXVuaXR5IHBsdWdpbnMgcmVnaXN0cnkuYCk7XG4gIH1cbiAgcmV0dXJuIGVudHJ5LmlkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7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QUNUO0FBRUEsUUFBTSxXQUFXLE1BQU0sa0JBQWtCLE1BQU0sT0FBTztBQUN0RCxRQUFNLElBQUksUUFBUSxjQUFjLE1BQU0sU0FBUyxRQUFRO0FBRXZELFFBQU0saUJBQWlCLElBQUksUUFBUSxVQUFVLFFBQVEsR0FBRztBQUN4RCxNQUFJLG1CQUFtQixTQUFTLFNBQVM7QUFDdkMsVUFBTSxJQUFJO0FBQUEsTUFDUixvQkFBb0IsUUFBUSxRQUFRLFNBQVMsT0FBTyxpQkFBaUIsa0JBQWtCLFFBQVE7QUFBQSxJQUNqRztBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFLQSxTQUFTLG9CQUFvQixtQkFBNEU7QUFDdkcsU0FBTyxPQUFPLHNCQUFzQixZQUMvQixzQkFBc0IsUUFDdEIsaUJBQWlCLHFCQUNqQixPQUFPLGtCQUFrQixnQkFBZ0I7QUFDaEQ7QUFFQSxlQUFlLDhCQUErRDtBQUM1RSxRQUFNLFdBQVcsVUFBTSw0QkFBVyxxQkFBcUI7QUFDdkQsU0FBTyxTQUFTO0FBQ2xCO0FBRUEsZUFBZSw0QkFBNkQ7QUFDMUUsUUFBTSxZQUFRLCtDQUE0RCw2QkFBNkIsSUFBSTtBQUMzRyxRQUFNLFVBQVUsNEJBQTRCO0FBRTVDLE1BQUk7QUFDRixXQUFPLE1BQU0sTUFBTTtBQUFBLEVBQ3JCLFNBQVMsT0FBTztBQUNkLFVBQU0sUUFBUTtBQUNkLFVBQU07QUFBQSxFQUNSO0FBQ0Y7QUFFQSxlQUFlLGtCQUFrQixNQUFjLFNBQTBDO0FBQ3ZGLFFBQU0sV0FBVyxVQUFNLDRCQUFXLHNCQUFzQixJQUFJLHNCQUFzQixPQUFPLGdCQUFnQjtBQUN6RyxTQUFPLFNBQVM7QUFDbEI7QUFJQSxTQUFTLHFCQUFxQixRQUEwQjtBQUN0RCxTQUFPLE9BQU8sV0FBVyxZQUFZLFdBQVcsUUFBUSxFQUFFLDZCQUE2QixVQUFVLE9BQU8sT0FBTztBQUNqSDtBQUlBLFNBQVMsaUJBQWlCLGtCQUEwQixlQUFnQztBQUNsRixNQUFJO0FBQ0YsZUFBTyx3QkFBQUMsU0FBZ0Isa0JBQWtCLGVBQWUsSUFBSTtBQUFBLEVBQzlELFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUNGO0FBRUEsZUFBZSx5QkFBeUIsV0FBZ0Q7QUFDdEYsTUFBSSxjQUFjLFdBQVc7QUFDM0IsV0FBTyxVQUFVO0FBQUEsRUFDbkI7QUFFQSxRQUFNLFVBQVUsTUFBTSwwQkFBMEI7QUFDaEQsUUFBTSxRQUFRLFFBQVEsS0FBSyxDQUFDLGNBQWMsVUFBVSxTQUFTLFVBQVUsVUFBVTtBQUNqRixNQUFJLENBQUMsT0FBTztBQUNWLFVBQU0sSUFBSSxNQUFNLGlCQUFpQixVQUFVLFVBQVUsNkRBQTZEO0FBQUEsRUFDcEg7QUFDQSxTQUFPLE1BQU07QUFDZjsiLCJuYW1lcyI6WyJDb25maWd1cmVDb21tdW5pdHlQbHVnaW5SZXN1bHQiLCJVcGRhdGVDb21tdW5pdHlQbHVnaW5SZXN1bHQiLCJjb21wYXJlVmVyc2lvbnMiXX0=
@@ -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.`);
@@ -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.`);
@@ -47,8 +47,8 @@ ensureBrowserProcess();
47
47
  __isPatched: true
48
48
  }
49
49
  );
50
- function extractDefault(module) {
51
- return module && module.__esModule && "default" in module ? module.default : module;
50
+ function extractDefault($module) {
51
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
52
52
  }
53
53
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
54
54
  "@codemirror/autocomplete",
@@ -90,9 +90,9 @@ ensureBrowserProcess();
90
90
  return process;
91
91
  }
92
92
  } else {
93
- const module = originalRequire?.(id);
94
- if (module) {
95
- return extractDefault(module);
93
+ const $module = originalRequire?.(id);
94
+ if ($module) {
95
+ return extractDefault($module);
96
96
  }
97
97
  }
98
98
  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.`);
@@ -47,8 +47,8 @@ ensureBrowserProcess();
47
47
  __isPatched: true
48
48
  }
49
49
  );
50
- function extractDefault(module) {
51
- return module && module.__esModule && "default" in module ? module.default : module;
50
+ function extractDefault($module) {
51
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
52
52
  }
53
53
  const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
54
54
  "@codemirror/autocomplete",
@@ -90,9 +90,9 @@ ensureBrowserProcess();
90
90
  return process;
91
91
  }
92
92
  } else {
93
- const module = originalRequire?.(id);
94
- if (module) {
95
- return extractDefault(module);
93
+ const $module = originalRequire?.(id);
94
+ if ($module) {
95
+ return extractDefault($module);
96
96
  }
97
97
  }
98
98
  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.`);