@mnaoumov/obsidian-lib 10.11.0 → 11.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 (460) hide show
  1. package/README.md +26 -0
  2. package/components/all-windows-status-bar-item-component/package.json +6 -0
  3. package/components/shared-component-pool-component/package.json +6 -0
  4. package/components/worker-component/package.json +6 -0
  5. package/components/worker-pool-component/package.json +6 -0
  6. package/components/workspace-layout-state-component/package.json +6 -0
  7. package/dist/lib/cjs/__merged.cjs +477 -285
  8. package/dist/lib/cjs/__merged.d.cts +26 -10
  9. package/dist/lib/cjs/anchored-suggest.cjs +1 -1
  10. package/dist/lib/cjs/app.cjs +2 -2
  11. package/dist/lib/cjs/async-with-notice.cjs +4 -4
  12. package/dist/lib/cjs/attachment-path.cjs +9 -9
  13. package/dist/lib/cjs/attachment-path.d.cts +3 -3
  14. package/dist/lib/cjs/attachment-unit-folder.cjs +2 -2
  15. package/dist/lib/cjs/backlink-index.cjs +5 -5
  16. package/dist/lib/cjs/backlink.cjs +7 -7
  17. package/dist/lib/cjs/bases-view-registrar.cjs +1 -1
  18. package/dist/lib/cjs/broken-link-candidates.cjs +1 -1
  19. package/dist/lib/cjs/bug-report-diagnostics.cjs +222 -0
  20. package/dist/lib/cjs/bug-report-diagnostics.d.cts +186 -0
  21. package/dist/lib/cjs/bug-report.cjs +38 -12
  22. package/dist/lib/cjs/bug-report.d.cts +65 -0
  23. package/dist/lib/cjs/bulk-operation-progress.cjs +1 -1
  24. package/dist/lib/cjs/bulk-operation.cjs +2 -2
  25. package/dist/lib/cjs/callout.cjs +6 -6
  26. package/dist/lib/cjs/canvas.cjs +11 -9
  27. package/dist/lib/cjs/canvas.d.cts +13 -0
  28. package/dist/lib/cjs/case-insensitive-file-index.cjs +3 -3
  29. package/dist/lib/cjs/code-block-render-handoff.cjs +5 -5
  30. package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +4 -4
  31. package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +2 -2
  32. package/dist/lib/cjs/codemirror/index.cjs +7 -7
  33. package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +5 -5
  34. package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +2 -2
  35. package/dist/lib/cjs/codemirror/settings-facet.cjs +1 -1
  36. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +17 -17
  37. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +13 -13
  38. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -2
  39. package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -2
  40. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +10 -10
  41. package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +7 -7
  42. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +3 -3
  43. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +3 -3
  44. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +2 -2
  45. package/dist/lib/cjs/command-handlers/index.cjs +15 -15
  46. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +95 -4
  47. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +34 -2
  48. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -2
  49. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +2 -2
  50. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +2 -2
  51. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +1 -1
  52. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +2 -2
  53. package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.cjs +2 -2
  54. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -1
  55. package/dist/lib/cjs/community-plugins.cjs +3 -3
  56. package/dist/lib/cjs/components/abort-signal-component.cjs +2 -2
  57. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  58. package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +245 -0
  59. package/dist/lib/cjs/components/all-windows-status-bar-item-component.d.cts +146 -0
  60. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  61. package/dist/lib/cjs/components/async-events-component.cjs +1 -1
  62. package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +12 -12
  63. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +2 -2
  64. package/dist/lib/cjs/components/component-ex.cjs +21 -11
  65. package/dist/lib/cjs/components/component-ex.d.cts +11 -0
  66. package/dist/lib/cjs/components/console-debug-component.cjs +2 -2
  67. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -2
  68. package/dist/lib/cjs/components/disposable-component.cjs +2 -2
  69. package/dist/lib/cjs/components/embed-extensions-component.cjs +21 -4
  70. package/dist/lib/cjs/components/embed-extensions-component.d.cts +8 -0
  71. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +24 -10
  72. package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +9 -0
  73. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +7 -7
  74. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +2 -2
  75. package/dist/lib/cjs/components/incremental-file-index-component.cjs +4 -4
  76. package/dist/lib/cjs/components/index.cjs +54 -39
  77. package/dist/lib/cjs/components/index.d.cts +5 -0
  78. package/dist/lib/cjs/components/layout-ready-component.cjs +3 -3
  79. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +2 -2
  80. package/dist/lib/cjs/components/monkey-around-component.cjs +3 -3
  81. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  82. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  83. package/dist/lib/cjs/components/plugin-gate-component.cjs +69 -36
  84. package/dist/lib/cjs/components/plugin-gate-component.d.cts +36 -13
  85. package/dist/lib/cjs/components/plugin-notice-component.cjs +39 -33
  86. package/dist/lib/cjs/components/plugin-notice-component.d.cts +4 -3
  87. package/dist/lib/cjs/components/plugin-settings-component.cjs +119 -18
  88. package/dist/lib/cjs/components/plugin-settings-component.d.cts +35 -5
  89. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -2
  90. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +8 -8
  91. package/dist/lib/cjs/components/pointer-position-component.cjs +2 -2
  92. package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +3 -3
  93. package/dist/lib/cjs/components/registry-component.cjs +2 -2
  94. package/dist/lib/cjs/components/release-notes-component.cjs +6 -6
  95. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +25 -25
  96. package/dist/lib/cjs/components/rmdir-guard-component.cjs +2 -2
  97. package/dist/lib/cjs/components/settings-facet-component.cjs +1 -1
  98. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  99. package/dist/lib/cjs/components/shared-component-pool-component.cjs +368 -0
  100. package/dist/lib/cjs/components/shared-component-pool-component.d.cts +129 -0
  101. package/dist/lib/cjs/components/style-sheet-component.cjs +3 -3
  102. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +3 -3
  103. package/dist/lib/cjs/components/templates-language-component.cjs +1 -1
  104. package/dist/lib/cjs/components/worker-component.cjs +363 -0
  105. package/dist/lib/cjs/components/worker-component.d.cts +156 -0
  106. package/dist/lib/cjs/components/worker-pool-component.cjs +185 -0
  107. package/dist/lib/cjs/components/worker-pool-component.d.cts +102 -0
  108. package/dist/lib/cjs/components/workspace-layout-state-component.cjs +495 -0
  109. package/dist/lib/cjs/components/workspace-layout-state-component.d.cts +239 -0
  110. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  111. package/dist/lib/cjs/constructors/index.cjs +1 -1
  112. package/dist/lib/cjs/css-class.cjs +5 -1
  113. package/dist/lib/cjs/css-class.d.cts +16 -0
  114. package/dist/lib/cjs/data-handler.cjs +264 -6
  115. package/dist/lib/cjs/data-handler.d.cts +219 -2
  116. package/dist/lib/cjs/data-stores/data-store-locations.cjs +82 -24
  117. package/dist/lib/cjs/data-stores/data-store-locations.d.cts +15 -0
  118. package/dist/lib/cjs/data-stores/data-store-replica.cjs +33 -5
  119. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  120. package/dist/lib/cjs/data-stores/data-store-seeds.d.cts +2 -2
  121. package/dist/lib/cjs/data-stores/data-store-transport.cjs +81 -8
  122. package/dist/lib/cjs/data-stores/data-store-transport.d.cts +30 -1
  123. package/dist/lib/cjs/data-stores/index.cjs +6 -6
  124. package/dist/lib/cjs/data-stores/local-data-store.cjs +74 -10
  125. package/dist/lib/cjs/data-stores/local-data-store.d.cts +58 -1
  126. package/dist/lib/cjs/data-stores/shared-data-store.cjs +76 -19
  127. package/dist/lib/cjs/data-stores/shared-data-store.d.cts +18 -1
  128. package/dist/lib/cjs/dataview-link.cjs +2 -2
  129. package/dist/lib/cjs/dataview.cjs +27 -7
  130. package/dist/lib/cjs/dataview.d.cts +14 -0
  131. package/dist/lib/cjs/debug.cjs +3 -3
  132. package/dist/lib/cjs/demo-vault-helper.cjs +34 -6
  133. package/dist/lib/cjs/demo-vault-helper.d.cts +6 -2
  134. package/dist/lib/cjs/desktop-bulk-operation-git.cjs +10 -10
  135. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +13 -13
  136. package/dist/lib/cjs/desktop-git-runner.cjs +4 -14
  137. package/dist/lib/cjs/desktop-git-runner.d.cts +8 -2
  138. package/dist/lib/cjs/desktop-operating-system.cjs +1 -1
  139. package/dist/lib/cjs/desktop-request-url-stream.cjs +8 -14
  140. package/dist/lib/cjs/desktop-trusted-input.cjs +2 -2
  141. package/dist/lib/cjs/disposable.cjs +150 -0
  142. package/dist/lib/cjs/disposable.d.cts +39 -0
  143. package/dist/lib/cjs/editor-extension-registrar.cjs +1 -1
  144. package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -2
  145. package/dist/lib/cjs/editor-suggest.cjs +1 -1
  146. package/dist/lib/cjs/editor.cjs +6 -6
  147. package/dist/lib/cjs/events.cjs +2 -2
  148. package/dist/lib/cjs/extensions-registrar.cjs +1 -1
  149. package/dist/lib/cjs/feature-request.cjs +1 -1
  150. package/dist/lib/cjs/file-change.cjs +10 -10
  151. package/dist/lib/cjs/file-explorer.cjs +2 -2
  152. package/dist/lib/cjs/file-manager.cjs +5 -5
  153. package/dist/lib/cjs/file-system.cjs +10 -10
  154. package/dist/lib/cjs/folder-note.cjs +4 -4
  155. package/dist/lib/cjs/frontmatter-formatting.cjs +7 -6
  156. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +1 -1
  157. package/dist/lib/cjs/frontmatter.cjs +5 -5
  158. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  159. package/dist/lib/cjs/git-rename-history.cjs +1 -1
  160. package/dist/lib/cjs/git-rename-history.d.cts +2 -2
  161. package/dist/lib/cjs/hotkey.cjs +1 -1
  162. package/dist/lib/cjs/hover-link-source-registrar.cjs +1 -1
  163. package/dist/lib/cjs/html-element.cjs +2 -2
  164. package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -1
  165. package/dist/lib/cjs/i18n/default-translations.cjs +1 -1
  166. package/dist/lib/cjs/i18n/i18n.cjs +7 -7
  167. package/dist/lib/cjs/i18n/index.cjs +4 -4
  168. package/dist/lib/cjs/i18n/locales/en.cjs +27 -1
  169. package/dist/lib/cjs/i18n/locales/en.d.cts +26 -0
  170. package/dist/lib/cjs/i18n/locales/index.cjs +2 -2
  171. package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -1
  172. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +26 -0
  173. package/dist/lib/cjs/index.cjs +147 -126
  174. package/dist/lib/cjs/index.d.cts +7 -0
  175. package/dist/lib/cjs/inline-token-renderer.cjs +2 -2
  176. package/dist/lib/cjs/is-in-obsidian.cjs +1 -1
  177. package/dist/lib/cjs/library-styles.cjs +3 -3
  178. package/dist/lib/cjs/link-and-tag-input-suggest.cjs +2 -2
  179. package/dist/lib/cjs/link.cjs +76 -56
  180. package/dist/lib/cjs/link.d.cts +20 -14
  181. package/dist/lib/cjs/logger.cjs +4 -4
  182. package/dist/lib/cjs/loop.cjs +10 -16
  183. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +17 -2
  184. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +7 -0
  185. package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -13
  186. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -2
  187. package/dist/lib/cjs/markdown-view.cjs +191 -3
  188. package/dist/lib/cjs/markdown-view.d.cts +48 -1
  189. package/dist/lib/cjs/markdown.cjs +12 -12
  190. package/dist/lib/cjs/metadata-cache.cjs +23 -23
  191. package/dist/lib/cjs/metadata-cache.d.cts +5 -4
  192. package/dist/lib/cjs/misplaced-attachment.cjs +297 -0
  193. package/dist/lib/cjs/misplaced-attachment.d.cts +228 -0
  194. package/dist/lib/cjs/mobile-app-info.cjs +1 -1
  195. package/dist/lib/cjs/modals/alert.cjs +4 -4
  196. package/dist/lib/cjs/modals/code-block-builder.cjs +7 -7
  197. package/dist/lib/cjs/modals/confirm.cjs +4 -4
  198. package/dist/lib/cjs/modals/copy-text-manually.cjs +181 -0
  199. package/dist/lib/cjs/modals/copy-text-manually.d.cts +38 -0
  200. package/dist/lib/cjs/modals/index.cjs +17 -11
  201. package/dist/lib/cjs/modals/index.d.cts +2 -0
  202. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  203. package/dist/lib/cjs/modals/modal-command-builder.cjs +3 -3
  204. package/dist/lib/cjs/modals/modal.cjs +3 -3
  205. package/dist/lib/cjs/modals/prompt.cjs +10 -10
  206. package/dist/lib/cjs/modals/prompt.d.cts +1 -1
  207. package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +202 -0
  208. package/dist/lib/cjs/modals/review-bug-report-diagnostics.d.cts +30 -0
  209. package/dist/lib/cjs/modals/select-item.cjs +6 -6
  210. package/dist/lib/cjs/modals/select-option.cjs +3 -3
  211. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
  212. package/dist/lib/cjs/note-priority.cjs +2 -2
  213. package/dist/lib/cjs/notebook-navigator.cjs +12 -2
  214. package/dist/lib/cjs/notebook-navigator.d.cts +6 -0
  215. package/dist/lib/cjs/obsidian-lib-state.cjs +1 -1
  216. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +1 -1
  217. package/dist/lib/cjs/obsidian-settings.cjs +1 -1
  218. package/dist/lib/cjs/obsidian-word-characters.cjs +1 -1
  219. package/dist/lib/cjs/parse-link.cjs +14 -14
  220. package/dist/lib/cjs/path-compatibility.cjs +368 -0
  221. package/dist/lib/cjs/path-compatibility.d.cts +263 -0
  222. package/dist/lib/cjs/path-settings.cjs +3 -3
  223. package/dist/lib/cjs/pdf.cjs +2 -2
  224. package/dist/lib/cjs/plugin/index.cjs +18 -12
  225. package/dist/lib/cjs/plugin/index.d.cts +2 -0
  226. package/dist/lib/cjs/plugin/plugin-api.cjs +21 -12
  227. package/dist/lib/cjs/plugin/plugin-api.d.cts +5 -1
  228. package/dist/lib/cjs/plugin/plugin-async-cleanup.cjs +6 -3
  229. package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +5 -0
  230. package/dist/lib/cjs/plugin/plugin-context.cjs +10 -9
  231. package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -1
  232. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +4 -4
  233. package/dist/lib/cjs/plugin/plugin-install-state.cjs +49 -4
  234. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +30 -0
  235. package/dist/lib/cjs/plugin/plugin-instance.cjs +450 -0
  236. package/dist/lib/cjs/plugin/plugin-instance.d.cts +258 -0
  237. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -1
  238. package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +6 -4
  239. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +15 -15
  240. package/dist/lib/cjs/plugin/plugin.cjs +133 -34
  241. package/dist/lib/cjs/plugin/plugin.d.cts +35 -5
  242. package/dist/lib/cjs/plugin/settings-migration-api.cjs +1 -1
  243. package/dist/lib/cjs/plugin/third-party-plugin.cjs +231 -0
  244. package/dist/lib/cjs/plugin/third-party-plugin.d.cts +244 -0
  245. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -2
  246. package/dist/lib/cjs/popovers/field-popover.cjs +4 -4
  247. package/dist/lib/cjs/popovers/index.cjs +3 -3
  248. package/dist/lib/cjs/popovers/popover-anchor.cjs +1 -1
  249. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  250. package/dist/lib/cjs/queue.cjs +8 -8
  251. package/dist/lib/cjs/react/app-context.cjs +3 -3
  252. package/dist/lib/cjs/react/index.cjs +1 -1
  253. package/dist/lib/cjs/reference-definition.cjs +1 -1
  254. package/dist/lib/cjs/reference.cjs +3 -3
  255. package/dist/lib/cjs/release-asset.cjs +5 -5
  256. package/dist/lib/cjs/rendered-markdown.cjs +4 -4
  257. package/dist/lib/cjs/request-url.cjs +4 -4
  258. package/dist/lib/cjs/resource-lock.cjs +46 -42
  259. package/dist/lib/cjs/resource-lock.d.cts +8 -7
  260. package/dist/lib/cjs/resource-url.cjs +3 -3
  261. package/dist/lib/cjs/ribbon-icon-registrar.cjs +1 -1
  262. package/dist/lib/cjs/setting-components/checkbox-component.cjs +3 -3
  263. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +7 -7
  264. package/dist/lib/cjs/setting-components/date-component.cjs +4 -4
  265. package/dist/lib/cjs/setting-components/date-time-component.cjs +4 -4
  266. package/dist/lib/cjs/setting-components/email-component.cjs +2 -2
  267. package/dist/lib/cjs/setting-components/file-component.cjs +2 -2
  268. package/dist/lib/cjs/setting-components/folder-list-component.cjs +3 -3
  269. package/dist/lib/cjs/setting-components/hotkey-component.cjs +5 -5
  270. package/dist/lib/cjs/setting-components/index.cjs +30 -30
  271. package/dist/lib/cjs/setting-components/list-component.cjs +5 -5
  272. package/dist/lib/cjs/setting-components/month-component.cjs +4 -4
  273. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +3 -3
  274. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +2 -2
  275. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +3 -3
  276. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +9 -6
  277. package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +4 -1
  278. package/dist/lib/cjs/setting-components/number-component.cjs +2 -2
  279. package/dist/lib/cjs/setting-components/password-component.cjs +2 -2
  280. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +3 -3
  281. package/dist/lib/cjs/setting-components/tag-list-component.cjs +4 -4
  282. package/dist/lib/cjs/setting-components/telephone-component.cjs +2 -2
  283. package/dist/lib/cjs/setting-components/text-based-component.cjs +1 -1
  284. package/dist/lib/cjs/setting-components/time-component.cjs +3 -3
  285. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +3 -3
  286. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +3 -3
  287. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +4 -4
  288. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -1
  289. package/dist/lib/cjs/setting-components/typed-text-component.cjs +3 -3
  290. package/dist/lib/cjs/setting-components/url-component.cjs +2 -2
  291. package/dist/lib/cjs/setting-components/validator-component.cjs +4 -4
  292. package/dist/lib/cjs/setting-components/week-component.cjs +4 -4
  293. package/dist/lib/cjs/setting-ex.cjs +26 -26
  294. package/dist/lib/cjs/setting-group-ex.cjs +2 -2
  295. package/dist/lib/cjs/settings-recovery.cjs +217 -0
  296. package/dist/lib/cjs/settings-recovery.d.cts +178 -0
  297. package/dist/lib/cjs/settings-tabs.cjs +5 -5
  298. package/dist/lib/cjs/status-bar-item-registrar.cjs +1 -1
  299. package/dist/lib/cjs/templater.cjs +14 -4
  300. package/dist/lib/cjs/templater.d.cts +6 -0
  301. package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -2
  302. package/dist/lib/cjs/transformers/index.cjs +1 -1
  303. package/dist/lib/cjs/trusted-input.cjs +1 -1
  304. package/dist/lib/cjs/validation.cjs +4 -4
  305. package/dist/lib/cjs/vault-delete.cjs +6 -6
  306. package/dist/lib/cjs/vault-transaction.cjs +5 -5
  307. package/dist/lib/cjs/vault.cjs +12 -12
  308. package/dist/lib/cjs/view-registrar.cjs +1 -1
  309. package/dist/lib/cjs/virtual-file.cjs +16 -14
  310. package/dist/lib/cjs/virtual-file.d.cts +2 -1
  311. package/dist/lib/cjs/wasm.cjs +119 -0
  312. package/dist/lib/cjs/wasm.d.cts +54 -0
  313. package/dist/lib/cjs/worker-protocol.cjs +209 -0
  314. package/dist/lib/cjs/worker-protocol.d.cts +282 -0
  315. package/dist/lib/cjs/workspace.cjs +1 -1
  316. package/dist/lib/esm/__merged.d.mts +26 -10
  317. package/dist/lib/esm/__merged.mjs +215 -5
  318. package/dist/lib/esm/app.mjs +2 -2
  319. package/dist/lib/esm/attachment-path.d.mts +3 -3
  320. package/dist/lib/esm/attachment-path.mjs +2 -2
  321. package/dist/lib/esm/backlink-index.mjs +2 -2
  322. package/dist/lib/esm/bug-report-diagnostics.d.mts +186 -0
  323. package/dist/lib/esm/bug-report-diagnostics.mjs +127 -0
  324. package/dist/lib/esm/bug-report.d.mts +65 -0
  325. package/dist/lib/esm/bug-report.mjs +33 -10
  326. package/dist/lib/esm/canvas.d.mts +13 -0
  327. package/dist/lib/esm/canvas.mjs +6 -5
  328. package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +13 -13
  329. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +14 -14
  330. package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +7 -7
  331. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +8 -8
  332. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +34 -2
  333. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +99 -3
  334. package/dist/lib/esm/components/all-windows-status-bar-item-component.d.mts +146 -0
  335. package/dist/lib/esm/components/all-windows-status-bar-item-component.mjs +154 -0
  336. package/dist/lib/esm/components/component-ex.d.mts +11 -0
  337. package/dist/lib/esm/components/component-ex.mjs +19 -6
  338. package/dist/lib/esm/components/disposable-component.mjs +1 -1
  339. package/dist/lib/esm/components/embed-extensions-component.d.mts +8 -0
  340. package/dist/lib/esm/components/embed-extensions-component.mjs +20 -3
  341. package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +9 -0
  342. package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +16 -2
  343. package/dist/lib/esm/components/index.d.mts +5 -0
  344. package/dist/lib/esm/components/index.mjs +12 -2
  345. package/dist/lib/esm/components/plugin-gate-component.d.mts +36 -13
  346. package/dist/lib/esm/components/plugin-gate-component.mjs +61 -26
  347. package/dist/lib/esm/components/plugin-notice-component.d.mts +4 -3
  348. package/dist/lib/esm/components/plugin-notice-component.mjs +30 -21
  349. package/dist/lib/esm/components/plugin-settings-component.d.mts +35 -5
  350. package/dist/lib/esm/components/plugin-settings-component.mjs +105 -4
  351. package/dist/lib/esm/components/rename-delete-handler-component.mjs +2 -2
  352. package/dist/lib/esm/components/shared-component-pool-component.d.mts +129 -0
  353. package/dist/lib/esm/components/shared-component-pool-component.mjs +280 -0
  354. package/dist/lib/esm/components/worker-component.d.mts +156 -0
  355. package/dist/lib/esm/components/worker-component.mjs +279 -0
  356. package/dist/lib/esm/components/worker-pool-component.d.mts +102 -0
  357. package/dist/lib/esm/components/worker-pool-component.mjs +95 -0
  358. package/dist/lib/esm/components/workspace-layout-state-component.d.mts +239 -0
  359. package/dist/lib/esm/components/workspace-layout-state-component.mjs +404 -0
  360. package/dist/lib/esm/css-class.d.mts +16 -0
  361. package/dist/lib/esm/css-class.mjs +5 -1
  362. package/dist/lib/esm/data-handler.d.mts +219 -2
  363. package/dist/lib/esm/data-handler.mjs +262 -5
  364. package/dist/lib/esm/data-stores/data-store-locations.d.mts +15 -0
  365. package/dist/lib/esm/data-stores/data-store-locations.mjs +80 -22
  366. package/dist/lib/esm/data-stores/data-store-replica.mjs +33 -5
  367. package/dist/lib/esm/data-stores/data-store-seeds.d.mts +2 -2
  368. package/dist/lib/esm/data-stores/data-store-seeds.mjs +4 -4
  369. package/dist/lib/esm/data-stores/data-store-transport.d.mts +30 -1
  370. package/dist/lib/esm/data-stores/data-store-transport.mjs +78 -5
  371. package/dist/lib/esm/data-stores/local-data-store.d.mts +58 -1
  372. package/dist/lib/esm/data-stores/local-data-store.mjs +71 -9
  373. package/dist/lib/esm/data-stores/shared-data-store.d.mts +18 -1
  374. package/dist/lib/esm/data-stores/shared-data-store.mjs +72 -15
  375. package/dist/lib/esm/dataview.d.mts +14 -0
  376. package/dist/lib/esm/dataview.mjs +19 -1
  377. package/dist/lib/esm/demo-vault-helper.d.mts +6 -2
  378. package/dist/lib/esm/demo-vault-helper.mjs +29 -1
  379. package/dist/lib/esm/desktop-demo-vault-opener.mjs +1 -1
  380. package/dist/lib/esm/desktop-git-runner.d.mts +8 -2
  381. package/dist/lib/esm/desktop-git-runner.mjs +3 -3
  382. package/dist/lib/esm/desktop-request-url-stream.mjs +4 -10
  383. package/dist/lib/esm/disposable.d.mts +39 -0
  384. package/dist/lib/esm/disposable.mjs +64 -0
  385. package/dist/lib/esm/file-system.mjs +2 -2
  386. package/dist/lib/esm/frontmatter-formatting.mjs +2 -1
  387. package/dist/lib/esm/generated-during-build.mjs +2 -2
  388. package/dist/lib/esm/git-rename-history.d.mts +2 -2
  389. package/dist/lib/esm/git-rename-history.mjs +1 -1
  390. package/dist/lib/esm/i18n/locales/en.d.mts +26 -0
  391. package/dist/lib/esm/i18n/locales/en.mjs +27 -1
  392. package/dist/lib/esm/i18n/locales/translations-map.d.mts +26 -0
  393. package/dist/lib/esm/index.d.mts +7 -0
  394. package/dist/lib/esm/index.mjs +15 -1
  395. package/dist/lib/esm/link.d.mts +20 -14
  396. package/dist/lib/esm/link.mjs +57 -38
  397. package/dist/lib/esm/loop.mjs +2 -8
  398. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +7 -0
  399. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +16 -1
  400. package/dist/lib/esm/markdown-view.d.mts +48 -1
  401. package/dist/lib/esm/markdown-view.mjs +192 -2
  402. package/dist/lib/esm/metadata-cache.d.mts +5 -4
  403. package/dist/lib/esm/metadata-cache.mjs +6 -6
  404. package/dist/lib/esm/misplaced-attachment.d.mts +228 -0
  405. package/dist/lib/esm/misplaced-attachment.mjs +212 -0
  406. package/dist/lib/esm/modals/copy-text-manually.d.mts +38 -0
  407. package/dist/lib/esm/modals/copy-text-manually.mjs +99 -0
  408. package/dist/lib/esm/modals/index.d.mts +2 -0
  409. package/dist/lib/esm/modals/index.mjs +5 -1
  410. package/dist/lib/esm/modals/prompt.d.mts +1 -1
  411. package/dist/lib/esm/modals/prompt.mjs +1 -1
  412. package/dist/lib/esm/modals/review-bug-report-diagnostics.d.mts +30 -0
  413. package/dist/lib/esm/modals/review-bug-report-diagnostics.mjs +120 -0
  414. package/dist/lib/esm/notebook-navigator.d.mts +6 -0
  415. package/dist/lib/esm/notebook-navigator.mjs +11 -2
  416. package/dist/lib/esm/parse-link.mjs +4 -4
  417. package/dist/lib/esm/path-compatibility.d.mts +263 -0
  418. package/dist/lib/esm/path-compatibility.mjs +277 -0
  419. package/dist/lib/esm/plugin/index.d.mts +2 -0
  420. package/dist/lib/esm/plugin/index.mjs +6 -2
  421. package/dist/lib/esm/plugin/plugin-api.d.mts +5 -1
  422. package/dist/lib/esm/plugin/plugin-api.mjs +13 -4
  423. package/dist/lib/esm/plugin/plugin-async-cleanup.d.mts +5 -0
  424. package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +3 -1
  425. package/dist/lib/esm/plugin/plugin-context.mjs +2 -1
  426. package/dist/lib/esm/plugin/plugin-event-source.d.mts +4 -4
  427. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  428. package/dist/lib/esm/plugin/plugin-install-state.d.mts +30 -0
  429. package/dist/lib/esm/plugin/plugin-install-state.mjs +44 -1
  430. package/dist/lib/esm/plugin/plugin-instance.d.mts +258 -0
  431. package/dist/lib/esm/plugin/plugin-instance.mjs +367 -0
  432. package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +6 -4
  433. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -1
  434. package/dist/lib/esm/plugin/plugin.d.mts +35 -5
  435. package/dist/lib/esm/plugin/plugin.mjs +118 -9
  436. package/dist/lib/esm/plugin/third-party-plugin.d.mts +244 -0
  437. package/dist/lib/esm/plugin/third-party-plugin.mjs +147 -0
  438. package/dist/lib/esm/release-asset.mjs +1 -1
  439. package/dist/lib/esm/resource-lock.d.mts +8 -7
  440. package/dist/lib/esm/resource-lock.mjs +31 -26
  441. package/dist/lib/esm/setting-components/multiple-text-component.d.mts +4 -1
  442. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -3
  443. package/dist/lib/esm/settings-recovery.d.mts +178 -0
  444. package/dist/lib/esm/settings-recovery.mjs +125 -0
  445. package/dist/lib/esm/settings-tabs.mjs +2 -2
  446. package/dist/lib/esm/templater.d.mts +6 -0
  447. package/dist/lib/esm/templater.mjs +11 -2
  448. package/dist/lib/esm/vault.mjs +1 -1
  449. package/dist/lib/esm/virtual-file.d.mts +2 -1
  450. package/dist/lib/esm/virtual-file.mjs +7 -5
  451. package/dist/lib/esm/wasm.d.mts +54 -0
  452. package/dist/lib/esm/wasm.mjs +30 -0
  453. package/dist/lib/esm/worker-protocol.d.mts +282 -0
  454. package/dist/lib/esm/worker-protocol.mjs +113 -0
  455. package/dist/styles.css +16 -1
  456. package/modals/copy-text-manually/package.json +6 -0
  457. package/modals/review-bug-report-diagnostics/package.json +6 -0
  458. package/package.json +10 -8
  459. package/plugin/plugin-instance/package.json +6 -0
  460. package/plugin/third-party-plugin/package.json +6 -0
@@ -48,50 +48,50 @@ class AbstractFileCommandHandler extends GlobalCommandHandler {
48
48
  /**
49
49
  * Gets the item name to use in the single-file menu.
50
50
  *
51
- * @returns The item name, or `undefined` to use the command name.
51
+ * @returns The item name, or `null` to use the command name.
52
52
  */
53
53
  get fileMenuItemName() {
54
- return this._fileMenuItemName;
54
+ return this._fileMenuItemName ?? null;
55
55
  }
56
56
  /**
57
57
  * Gets the section to use in the single-file menu.
58
58
  *
59
- * @returns The section name, or `undefined` to use the plugin name.
59
+ * @returns The section name, or `null` to use the plugin name.
60
60
  */
61
61
  get fileMenuSection() {
62
- return this._fileMenuSection;
62
+ return this._fileMenuSection ?? null;
63
63
  }
64
64
  /**
65
65
  * Gets the icon to use in the single-file menu submenu.
66
66
  *
67
- * @returns The icon, or `undefined` for no icon.
67
+ * @returns The icon, or `null` for no icon.
68
68
  */
69
69
  get fileMenuSubmenuIcon() {
70
- return this._fileMenuSubmenuIcon;
70
+ return this._fileMenuSubmenuIcon ?? null;
71
71
  }
72
72
  /**
73
73
  * Gets the item name to use in the multi-file menu.
74
74
  *
75
- * @returns The item name, or `undefined` to fall back to single-file item name.
75
+ * @returns The item name, or `null` to fall back to single-file item name.
76
76
  */
77
77
  get filesMenuItemName() {
78
- return this._filesMenuItemName;
78
+ return this._filesMenuItemName ?? null;
79
79
  }
80
80
  /**
81
81
  * Gets the section to use in the multi-file menu.
82
82
  *
83
- * @returns The section name, or `undefined` to fall back to single-file section.
83
+ * @returns The section name, or `null` to fall back to single-file section.
84
84
  */
85
85
  get filesMenuSection() {
86
- return this._filesMenuSection;
86
+ return this._filesMenuSection ?? null;
87
87
  }
88
88
  /**
89
89
  * Gets the icon to use in the multi-file menu submenu.
90
90
  *
91
- * @returns The icon, or `undefined` to fall back to single-file submenu icon.
91
+ * @returns The icon, or `null` to fall back to single-file submenu icon.
92
92
  */
93
93
  get filesMenuSubmenuIcon() {
94
- return this._filesMenuSubmenuIcon;
94
+ return this._filesMenuSubmenuIcon ?? null;
95
95
  }
96
96
  _activeFileProvider;
97
97
  _fileMenuItemName;
@@ -220,7 +220,7 @@ class AbstractFileCommandHandler extends GlobalCommandHandler {
220
220
  * @returns Whether to add to a submenu.
221
221
  */
222
222
  shouldAddCommandToSubmenu() {
223
- return this._registrationShouldAddCommandToSubmenu ?? this._shouldAddCommandToSubmenu;
223
+ return this._registrationShouldAddCommandToSubmenu ?? this._shouldAddCommandToSubmenu ?? false;
224
224
  }
225
225
  /**
226
226
  * Checks whether the command should appear in the single-file context menu.
@@ -310,4 +310,4 @@ class AbstractFileCommandHandler extends GlobalCommandHandler {
310
310
  export {
311
311
  AbstractFileCommandHandler
312
312
  };
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tYW5kLWhhbmRsZXJzL2Fic3RyYWN0LWZpbGUtY29tbWFuZC1oYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGFic3RyYWN0IGZpbGUgY29tbWFuZHMgd2l0aCBmaWxlL2ZpbGVzIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBJY29uTmFtZSxcbiAgTWVudSxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBjaGFpbixcbiAgY29udmVydEFzeW5jVG9TeW5jXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHsgQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zLFxuICBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHRcbn0gZnJvbSAnLi9jb21tYW5kLWhhbmRsZXIudHMnO1xuXG5pbXBvcnQgeyBHbG9iYWxDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vZ2xvYmFsLWNvbW1hbmQtaGFuZGxlci50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgYW4gYWJzdHJhY3QgZmlsZSBjb21tYW5kIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyBleHRlbmRzIENvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIHNpbmdsZS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudUl0ZW1OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIHNpbmdsZS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGljb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUgc3VibWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgc3VibWVudS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyLmhhbmRsZUFic3RyYWN0RmlsZU1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVySGFuZGxlQWJzdHJhY3RGaWxlTWVudVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBvciBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3Jrc3BhY2UgbGVhZiwgaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGVhZj86IHVuZGVmaW5lZCB8IFdvcmtzcGFjZUxlYWY7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW51IHRvIGFkZCBpdGVtcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IG1lbnU6IE1lbnU7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyLmhhbmRsZUFic3RyYWN0RmlsZXNNZW51fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckhhbmRsZUFic3RyYWN0RmlsZXNNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGxlYWY/OiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVudSB0byBhZGQgaXRlbXMgdG8uXG4gICAqL1xuICByZWFkb25seSBtZW51OiBNZW51O1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlci5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyU2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSBsZWFmPzogdW5kZWZpbmVkIHwgV29ya3NwYWNlTGVhZjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXIuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGxlYWY/OiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgYWJzdHJhY3QgZmlsZSBjb21tYW5kcy5cbiAqXG4gKiBIYW5kbGVzIGJvdGggc2luZ2xlLWZpbGUgYW5kIG11bHRpLWZpbGUgY29udGV4dCBtZW51cy5cbiAqIFN1YmNsYXNzZXMgb3ZlcnJpZGUge0BsaW5rIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGV9IGFuZCB7QGxpbmsgZXhlY3V0ZUFic3RyYWN0RmlsZX0uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlciBleHRlbmRzIEdsb2JhbENvbW1hbmRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIEdldCB0aGUgYWN0aXZlIGZpbGUgcHJvdmlkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhY3RpdmUgZmlsZSBwcm92aWRlci5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYWN0aXZlRmlsZVByb3ZpZGVyKCk6IEFjdGl2ZUZpbGVQcm92aWRlciB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuX2FjdGl2ZUZpbGVQcm92aWRlcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBjb21tYW5kIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51SXRlbU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZU1lbnVJdGVtTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBwbHVnaW4gbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZU1lbnVTZWN0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiwgb3IgYHVuZGVmaW5lZGAgZm9yIG5vIGljb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWxlTWVudVN1Ym1lbnVJY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gZmFsbCBiYWNrIHRvIHNpbmdsZS1maWxlIGl0ZW0gbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZXNNZW51SXRlbU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51SXRlbU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gZmFsbCBiYWNrIHRvIHNpbmdsZS1maWxlIHNlY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVzTWVudVNlY3Rpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgdW5kZWZpbmVkYCB0byBmYWxsIGJhY2sgdG8gc2luZ2xlLWZpbGUgc3VibWVudSBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlc01lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVzTWVudVN1Ym1lbnVJY29uO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlRmlsZVByb3ZpZGVyPzogQWN0aXZlRmlsZVByb3ZpZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlTWVudUl0ZW1OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfcmVnaXN0cmF0aW9uU2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGFic3RyYWN0IGZpbGUgY29tbWFuZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuX2ZpbGVNZW51SXRlbU5hbWUgPSBwYXJhbXMuZmlsZU1lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9maWxlTWVudVNlY3Rpb24gPSBwYXJhbXMuZmlsZU1lbnVTZWN0aW9uO1xuICAgIHRoaXMuX2ZpbGVNZW51U3VibWVudUljb24gPSBwYXJhbXMuZmlsZU1lbnVTdWJtZW51SWNvbjtcbiAgICB0aGlzLl9maWxlc01lbnVJdGVtTmFtZSA9IHBhcmFtcy5maWxlc01lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9maWxlc01lbnVTZWN0aW9uID0gcGFyYW1zLmZpbGVzTWVudVNlY3Rpb247XG4gICAgdGhpcy5fZmlsZXNNZW51U3VibWVudUljb24gPSBwYXJhbXMuZmlsZXNNZW51U3VibWVudUljb247XG4gICAgdGhpcy5fc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSA9IHBhcmFtcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBmaWxlLW1lbnUgYW5kIGZpbGVzLW1lbnUgZXZlbnQgaGFuZGxlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJlZ2lzdHJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9uUmVnaXN0ZXJlZChjb250ZXh0OiBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzdXBlci5vblJlZ2lzdGVyZWQoY29udGV4dCk7XG4gICAgdGhpcy5fYWN0aXZlRmlsZVByb3ZpZGVyID0gY29udGV4dC5hY3RpdmVGaWxlUHJvdmlkZXI7XG4gICAgdGhpcy5fcmVnaXN0cmF0aW9uU2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSA9IGNvbnRleHQuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgICBjb250ZXh0Lm1lbnVFdmVudFJlZ2lzdHJhci5yZWdpc3RlckZpbGVNZW51RXZlbnRIYW5kbGVyKChtZW51LCBhYnN0cmFjdEZpbGUsIHNvdXJjZSwgbGVhZikgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVBYnN0cmFjdEZpbGVNZW51KHtcbiAgICAgICAgYWJzdHJhY3RGaWxlLFxuICAgICAgICBsZWFmLFxuICAgICAgICBtZW51LFxuICAgICAgICBzb3VyY2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKChtZW51LCBhYnN0cmFjdEZpbGVzLCBzb3VyY2UsIGxlYWYpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlQWJzdHJhY3RGaWxlc01lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGVzLFxuICAgICAgICBsZWFmLFxuICAgICAgICBtZW51LFxuICAgICAgICBzb3VyY2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICogVXNlcyB0aGUgYWN0aXZlIGZpbGUgYXMgdGhlIHRhcmdldC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjYW5FeGVjdXRlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zaG91bGRBZGRUb0NvbW1hbmRQYWxldHRlKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVGaWxlID0gdGhpcy5nZXRBY3RpdmVGaWxlKCk7XG4gICAgcmV0dXJuICEhYWN0aXZlRmlsZSAmJiB0aGlzLmNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoYWN0aXZlRmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIGEgc2luZ2xlIGFic3RyYWN0IGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBfYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoX2Fic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZvciBtdWx0aXBsZSBhYnN0cmFjdCBmaWxlcy5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZWFjaCBmaWxlIGluZGl2aWR1YWxseS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZXMgLSBUaGUgZmlsZXMgb3IgZm9sZGVycy5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBjYW5FeGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlcy5sZW5ndGggPiAwICYmIGFic3RyYWN0RmlsZXMuZXZlcnkoKGYpID0+IHRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShmKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZnJvbSB0aGUgY29tbWFuZCBwYWxldHRlIHVzaW5nIHRoZSBhY3RpdmUgZmlsZS5cbiAgICpcbiAgICogQHJldHVybnMgYFByb21pc2FibGU8dm9pZD5gIHRoYXQgcmVzb2x2ZXMgd2hlbiBjb21tYW5kIGhhZCBiZWVuIGV4ZWN1dGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGV4ZWN1dGUoKTogUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgY29uc3QgYWN0aXZlRmlsZSA9IHRoaXMuZ2V0QWN0aXZlRmlsZSgpO1xuICAgIGlmIChhY3RpdmVGaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGFjdGl2ZUZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCBmb3IgYSBzaW5nbGUgYWJzdHJhY3QgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciBtdWx0aXBsZSBhYnN0cmFjdCBmaWxlcy5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBleGVjdXRlcyBzZXF1ZW50aWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEByZXR1cm5zIGBQcm9taXNhYmxlPHZvaWQ+YCB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGFic3RyYWN0IGZpbGVzIGhhdmUgYmVlbiBleGVjdXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBleGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBsZXQgcHJvbWlzZTogbnVsbCB8IFByb21pc2U8dm9pZD4gPSBudWxsO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBhYnN0cmFjdEZpbGVzKSB7XG4gICAgICBwcm9taXNlID0gY2hhaW4ocHJvbWlzZSwgKCkgPT4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFjdGl2ZSBmaWxlLCBpZiBhbnksIHRvIHVzZSBhcyB0aGUgdGFyZ2V0IHdoZW4gZXhlY3V0aW5nIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFjdGl2ZSBmaWxlIG9yIGBudWxsYCBpZiBub25lIGlzIGFjdGl2ZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRBY3RpdmVGaWxlKCk6IG51bGwgfCBUQWJzdHJhY3RGaWxlIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGaWxlUHJvdmlkZXIuZ2V0QWN0aXZlRmlsZSgpID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRvIGFkZCB0aGUgY29tbWFuZCB0byBhIHN1Ym1lbnUuXG4gICAqXG4gICAqIFRoZSByZWdpc3RyYXRpb24gY29udGV4dCB3aW5zIG92ZXIgdGhlIGNvbnN0cnVjdG9yIHZhbHVlOiBhIG1lbnUgc3VyZmFjZSB0aGF0IGFscmVhZHkgd3JhcHMgZXZlcnlcbiAgICogY29udHJpYnV0ZWQgaXRlbSBpbiBhIHBsdWdpbi10aXRsZWQgcGFyZW50IGVudHJ5IGZvcmNlcyB0aGlzIG9mZiwgYmVjYXVzZSBhIHNlY3Rpb24gc3VibWVudVxuICAgKiBkZWNsYXJlZCBoZXJlIHdvdWxkIG1ha2UgYE1lbnUuc29ydCgpYCBuZXN0IGEgc2Vjb25kIHBsdWdpbi10aXRsZWQgZW50cnkgaW5zaWRlIHRoZSBmaXJzdC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJhdGlvblNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPz8gdGhpcy5fc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBzaW5nbGUtZmlsZSBjb250ZXh0IG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHNpbmdsZS1maWxlIG1lbnUgY2hlY2suXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnVQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGFic3RyYWN0RmlsZTogX2Fic3RyYWN0RmlsZSwgbGVhZjogX2xlYWYsIHNvdXJjZTogX3NvdXJjZSB9ID0gcGFyYW1zO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBtdWx0aS1maWxlIGNvbnRleHQgbWVudS5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZWFjaCBmaWxlIGluZGl2aWR1YWxseS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbXVsdGktZmlsZSBtZW51IGNoZWNrLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgZmlsZXMgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51UGFyYW1zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhcmFtcy5hYnN0cmFjdEZpbGVzLmV2ZXJ5KChmKSA9PlxuICAgICAgdGhpcy5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGU6IGYsXG4gICAgICAgIGxlYWY6IHBhcmFtcy5sZWFmLFxuICAgICAgICBzb3VyY2U6IHBhcmFtcy5zb3VyY2VcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9Db21tYW5kUGFsZXR0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWJzdHJhY3RGaWxlTWVudShwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVySGFuZGxlQWJzdHJhY3RGaWxlTWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGFic3RyYWN0RmlsZSxcbiAgICAgIGxlYWYsXG4gICAgICBtZW51LFxuICAgICAgc291cmNlXG4gICAgfSA9IHBhcmFtcztcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGUsXG4gICAgICAgIGxlYWYsXG4gICAgICAgIHNvdXJjZVxuICAgICAgfSkgfHwgIXRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGUpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZmlsZU1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmZpbGVNZW51U3VibWVudUljb24gPz8gJycsXG4gICAgICAgIHRpdGxlOiBzZWN0aW9uXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtZW51LmFkZEl0ZW0oKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW1cbiAgICAgICAgLnNldFRpdGxlKHRoaXMuZmlsZU1lbnVJdGVtTmFtZSA/PyB0aGlzLm5hbWUpXG4gICAgICAgIC5zZXRJY29uKHRoaXMuaWNvbilcbiAgICAgICAgLnNldFNlY3Rpb24oc2VjdGlvbilcbiAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHRoaXMuZXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFic3RyYWN0RmlsZXNNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJIYW5kbGVBYnN0cmFjdEZpbGVzTWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGFic3RyYWN0RmlsZXMsXG4gICAgICBsZWFmLFxuICAgICAgbWVudSxcbiAgICAgIHNvdXJjZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudSh7XG4gICAgICAgIGFic3RyYWN0RmlsZXMsXG4gICAgICAgIGxlYWYsXG4gICAgICAgIHNvdXJjZVxuICAgICAgfSkgfHwgIXRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlcylcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5maWxlc01lbnVTZWN0aW9uID8/IHRoaXMuZmlsZU1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmZpbGVzTWVudVN1Ym1lbnVJY29uID8/IHRoaXMuZmlsZU1lbnVTdWJtZW51SWNvbiA/PyAnJyxcbiAgICAgICAgdGl0bGU6IHNlY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgaXRlbVxuICAgICAgICAuc2V0VGl0bGUodGhpcy5maWxlc01lbnVJdGVtTmFtZSA/PyB0aGlzLmZpbGVNZW51SXRlbU5hbWUgPz8gdGhpcy5uYW1lKVxuICAgICAgICAuc2V0SWNvbih0aGlzLmljb24pXG4gICAgICAgIC5zZXRTZWN0aW9uKHNlY3Rpb24pXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB0aGlzLmV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXMpKSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMseUJBQXlCO0FBUWxDLFNBQVMsNEJBQTRCO0FBNEk5QixNQUFlLG1DQUFtQyxxQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFN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
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tYW5kLWhhbmRsZXJzL2Fic3RyYWN0LWZpbGUtY29tbWFuZC1oYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGFic3RyYWN0IGZpbGUgY29tbWFuZHMgd2l0aCBmaWxlL2ZpbGVzIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBJY29uTmFtZSxcbiAgTWVudSxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBjaGFpbixcbiAgY29udmVydEFzeW5jVG9TeW5jXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHsgQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zLFxuICBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHRcbn0gZnJvbSAnLi9jb21tYW5kLWhhbmRsZXIudHMnO1xuXG5pbXBvcnQgeyBHbG9iYWxDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vZ2xvYmFsLWNvbW1hbmQtaGFuZGxlci50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgYW4gYWJzdHJhY3QgZmlsZSBjb21tYW5kIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyBleHRlbmRzIENvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIHNpbmdsZS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudUl0ZW1OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIHNpbmdsZS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGljb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUgc3VibWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgc3VibWVudS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyLmhhbmRsZUFic3RyYWN0RmlsZU1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVySGFuZGxlQWJzdHJhY3RGaWxlTWVudVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBvciBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3Jrc3BhY2UgbGVhZiwgaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGVhZj86IHVuZGVmaW5lZCB8IFdvcmtzcGFjZUxlYWY7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW51IHRvIGFkZCBpdGVtcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IG1lbnU6IE1lbnU7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyLmhhbmRsZUFic3RyYWN0RmlsZXNNZW51fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckhhbmRsZUFic3RyYWN0RmlsZXNNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGxlYWY/OiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVudSB0byBhZGQgaXRlbXMgdG8uXG4gICAqL1xuICByZWFkb25seSBtZW51OiBNZW51O1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlci5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyU2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSBsZWFmPzogdW5kZWZpbmVkIHwgV29ya3NwYWNlTGVhZjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXIuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGxlYWY/OiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgYWJzdHJhY3QgZmlsZSBjb21tYW5kcy5cbiAqXG4gKiBIYW5kbGVzIGJvdGggc2luZ2xlLWZpbGUgYW5kIG11bHRpLWZpbGUgY29udGV4dCBtZW51cy5cbiAqIFN1YmNsYXNzZXMgb3ZlcnJpZGUge0BsaW5rIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGV9IGFuZCB7QGxpbmsgZXhlY3V0ZUFic3RyYWN0RmlsZX0uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlciBleHRlbmRzIEdsb2JhbENvbW1hbmRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIEdldCB0aGUgYWN0aXZlIGZpbGUgcHJvdmlkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhY3RpdmUgZmlsZSBwcm92aWRlci5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYWN0aXZlRmlsZVByb3ZpZGVyKCk6IEFjdGl2ZUZpbGVQcm92aWRlciB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuX2FjdGl2ZUZpbGVQcm92aWRlcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYG51bGxgIHRvIHVzZSB0aGUgY29tbWFuZCBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlTWVudUl0ZW1OYW1lKCk6IG51bGwgfCBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9maWxlTWVudUl0ZW1OYW1lID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIHNpbmdsZS1maWxlIG1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBzZWN0aW9uIG5hbWUsIG9yIGBudWxsYCB0byB1c2UgdGhlIHBsdWdpbiBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlTWVudVNlY3Rpb24oKTogbnVsbCB8IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVNZW51U2VjdGlvbiA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGljb24gdG8gdXNlIGluIHRoZSBzaW5nbGUtZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgbnVsbGAgZm9yIG5vIGljb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZU1lbnVTdWJtZW51SWNvbiA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYG51bGxgIHRvIGZhbGwgYmFjayB0byBzaW5nbGUtZmlsZSBpdGVtIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVzTWVudUl0ZW1OYW1lKCk6IG51bGwgfCBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9maWxlc01lbnVJdGVtTmFtZSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBzZWN0aW9uIG5hbWUsIG9yIGBudWxsYCB0byBmYWxsIGJhY2sgdG8gc2luZ2xlLWZpbGUgc2VjdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZXNNZW51U2VjdGlvbigpOiBudWxsIHwgc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51U2VjdGlvbiA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGljb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGljb24sIG9yIGBudWxsYCB0byBmYWxsIGJhY2sgdG8gc2luZ2xlLWZpbGUgc3VibWVudSBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlc01lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9maWxlc01lbnVTdWJtZW51SWNvbiA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlRmlsZVByb3ZpZGVyPzogQWN0aXZlRmlsZVByb3ZpZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlTWVudUl0ZW1OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfcmVnaXN0cmF0aW9uU2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGFic3RyYWN0IGZpbGUgY29tbWFuZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuX2ZpbGVNZW51SXRlbU5hbWUgPSBwYXJhbXMuZmlsZU1lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9maWxlTWVudVNlY3Rpb24gPSBwYXJhbXMuZmlsZU1lbnVTZWN0aW9uO1xuICAgIHRoaXMuX2ZpbGVNZW51U3VibWVudUljb24gPSBwYXJhbXMuZmlsZU1lbnVTdWJtZW51SWNvbjtcbiAgICB0aGlzLl9maWxlc01lbnVJdGVtTmFtZSA9IHBhcmFtcy5maWxlc01lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9maWxlc01lbnVTZWN0aW9uID0gcGFyYW1zLmZpbGVzTWVudVNlY3Rpb247XG4gICAgdGhpcy5fZmlsZXNNZW51U3VibWVudUljb24gPSBwYXJhbXMuZmlsZXNNZW51U3VibWVudUljb247XG4gICAgdGhpcy5fc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSA9IHBhcmFtcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBmaWxlLW1lbnUgYW5kIGZpbGVzLW1lbnUgZXZlbnQgaGFuZGxlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJlZ2lzdHJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9uUmVnaXN0ZXJlZChjb250ZXh0OiBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzdXBlci5vblJlZ2lzdGVyZWQoY29udGV4dCk7XG4gICAgdGhpcy5fYWN0aXZlRmlsZVByb3ZpZGVyID0gY29udGV4dC5hY3RpdmVGaWxlUHJvdmlkZXI7XG4gICAgdGhpcy5fcmVnaXN0cmF0aW9uU2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSA9IGNvbnRleHQuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgICBjb250ZXh0Lm1lbnVFdmVudFJlZ2lzdHJhci5yZWdpc3RlckZpbGVNZW51RXZlbnRIYW5kbGVyKChtZW51LCBhYnN0cmFjdEZpbGUsIHNvdXJjZSwgbGVhZikgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVBYnN0cmFjdEZpbGVNZW51KHtcbiAgICAgICAgYWJzdHJhY3RGaWxlLFxuICAgICAgICBsZWFmLFxuICAgICAgICBtZW51LFxuICAgICAgICBzb3VyY2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKChtZW51LCBhYnN0cmFjdEZpbGVzLCBzb3VyY2UsIGxlYWYpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlQWJzdHJhY3RGaWxlc01lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGVzLFxuICAgICAgICBsZWFmLFxuICAgICAgICBtZW51LFxuICAgICAgICBzb3VyY2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICogVXNlcyB0aGUgYWN0aXZlIGZpbGUgYXMgdGhlIHRhcmdldC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjYW5FeGVjdXRlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zaG91bGRBZGRUb0NvbW1hbmRQYWxldHRlKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVGaWxlID0gdGhpcy5nZXRBY3RpdmVGaWxlKCk7XG4gICAgcmV0dXJuICEhYWN0aXZlRmlsZSAmJiB0aGlzLmNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoYWN0aXZlRmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIGEgc2luZ2xlIGFic3RyYWN0IGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBfYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoX2Fic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZvciBtdWx0aXBsZSBhYnN0cmFjdCBmaWxlcy5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZWFjaCBmaWxlIGluZGl2aWR1YWxseS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZXMgLSBUaGUgZmlsZXMgb3IgZm9sZGVycy5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBjYW5FeGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlcy5sZW5ndGggPiAwICYmIGFic3RyYWN0RmlsZXMuZXZlcnkoKGYpID0+IHRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShmKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZnJvbSB0aGUgY29tbWFuZCBwYWxldHRlIHVzaW5nIHRoZSBhY3RpdmUgZmlsZS5cbiAgICpcbiAgICogQHJldHVybnMgYFByb21pc2FibGU8dm9pZD5gIHRoYXQgcmVzb2x2ZXMgd2hlbiBjb21tYW5kIGhhZCBiZWVuIGV4ZWN1dGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGV4ZWN1dGUoKTogUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgY29uc3QgYWN0aXZlRmlsZSA9IHRoaXMuZ2V0QWN0aXZlRmlsZSgpO1xuICAgIGlmIChhY3RpdmVGaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGFjdGl2ZUZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCBmb3IgYSBzaW5nbGUgYWJzdHJhY3QgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciBtdWx0aXBsZSBhYnN0cmFjdCBmaWxlcy5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBleGVjdXRlcyBzZXF1ZW50aWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEByZXR1cm5zIGBQcm9taXNhYmxlPHZvaWQ+YCB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGFic3RyYWN0IGZpbGVzIGhhdmUgYmVlbiBleGVjdXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBleGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBsZXQgcHJvbWlzZTogbnVsbCB8IFByb21pc2U8dm9pZD4gPSBudWxsO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBhYnN0cmFjdEZpbGVzKSB7XG4gICAgICBwcm9taXNlID0gY2hhaW4ocHJvbWlzZSwgKCkgPT4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFjdGl2ZSBmaWxlLCBpZiBhbnksIHRvIHVzZSBhcyB0aGUgdGFyZ2V0IHdoZW4gZXhlY3V0aW5nIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFjdGl2ZSBmaWxlIG9yIGBudWxsYCBpZiBub25lIGlzIGFjdGl2ZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRBY3RpdmVGaWxlKCk6IG51bGwgfCBUQWJzdHJhY3RGaWxlIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGaWxlUHJvdmlkZXIuZ2V0QWN0aXZlRmlsZSgpID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRvIGFkZCB0aGUgY29tbWFuZCB0byBhIHN1Ym1lbnUuXG4gICAqXG4gICAqIFRoZSByZWdpc3RyYXRpb24gY29udGV4dCB3aW5zIG92ZXIgdGhlIGNvbnN0cnVjdG9yIHZhbHVlOiBhIG1lbnUgc3VyZmFjZSB0aGF0IGFscmVhZHkgd3JhcHMgZXZlcnlcbiAgICogY29udHJpYnV0ZWQgaXRlbSBpbiBhIHBsdWdpbi10aXRsZWQgcGFyZW50IGVudHJ5IGZvcmNlcyB0aGlzIG9mZiwgYmVjYXVzZSBhIHNlY3Rpb24gc3VibWVudVxuICAgKiBkZWNsYXJlZCBoZXJlIHdvdWxkIG1ha2UgYE1lbnUuc29ydCgpYCBuZXN0IGEgc2Vjb25kIHBsdWdpbi10aXRsZWQgZW50cnkgaW5zaWRlIHRoZSBmaXJzdC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJhdGlvblNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPz8gdGhpcy5fc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBzaW5nbGUtZmlsZSBjb250ZXh0IG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHNpbmdsZS1maWxlIG1lbnUgY2hlY2suXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnVQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGFic3RyYWN0RmlsZTogX2Fic3RyYWN0RmlsZSwgbGVhZjogX2xlYWYsIHNvdXJjZTogX3NvdXJjZSB9ID0gcGFyYW1zO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBtdWx0aS1maWxlIGNvbnRleHQgbWVudS5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZWFjaCBmaWxlIGluZGl2aWR1YWxseS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbXVsdGktZmlsZSBtZW51IGNoZWNrLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgZmlsZXMgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51UGFyYW1zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhcmFtcy5hYnN0cmFjdEZpbGVzLmV2ZXJ5KChmKSA9PlxuICAgICAgdGhpcy5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGU6IGYsXG4gICAgICAgIGxlYWY6IHBhcmFtcy5sZWFmLFxuICAgICAgICBzb3VyY2U6IHBhcmFtcy5zb3VyY2VcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9Db21tYW5kUGFsZXR0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWJzdHJhY3RGaWxlTWVudShwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVySGFuZGxlQWJzdHJhY3RGaWxlTWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGFic3RyYWN0RmlsZSxcbiAgICAgIGxlYWYsXG4gICAgICBtZW51LFxuICAgICAgc291cmNlXG4gICAgfSA9IHBhcmFtcztcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGUsXG4gICAgICAgIGxlYWYsXG4gICAgICAgIHNvdXJjZVxuICAgICAgfSkgfHwgIXRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGUpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZmlsZU1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmZpbGVNZW51U3VibWVudUljb24gPz8gJycsXG4gICAgICAgIHRpdGxlOiBzZWN0aW9uXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtZW51LmFkZEl0ZW0oKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW1cbiAgICAgICAgLnNldFRpdGxlKHRoaXMuZmlsZU1lbnVJdGVtTmFtZSA/PyB0aGlzLm5hbWUpXG4gICAgICAgIC5zZXRJY29uKHRoaXMuaWNvbilcbiAgICAgICAgLnNldFNlY3Rpb24oc2VjdGlvbilcbiAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHRoaXMuZXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFic3RyYWN0RmlsZXNNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJIYW5kbGVBYnN0cmFjdEZpbGVzTWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGFic3RyYWN0RmlsZXMsXG4gICAgICBsZWFmLFxuICAgICAgbWVudSxcbiAgICAgIHNvdXJjZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudSh7XG4gICAgICAgIGFic3RyYWN0RmlsZXMsXG4gICAgICAgIGxlYWYsXG4gICAgICAgIHNvdXJjZVxuICAgICAgfSkgfHwgIXRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlcylcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5maWxlc01lbnVTZWN0aW9uID8/IHRoaXMuZmlsZU1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmZpbGVzTWVudVN1Ym1lbnVJY29uID8/IHRoaXMuZmlsZU1lbnVTdWJtZW51SWNvbiA/PyAnJyxcbiAgICAgICAgdGl0bGU6IHNlY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgaXRlbVxuICAgICAgICAuc2V0VGl0bGUodGhpcy5maWxlc01lbnVJdGVtTmFtZSA/PyB0aGlzLmZpbGVNZW51SXRlbU5hbWUgPz8gdGhpcy5uYW1lKVxuICAgICAgICAuc2V0SWNvbih0aGlzLmljb24pXG4gICAgICAgIC5zZXRTZWN0aW9uKHNlY3Rpb24pXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB0aGlzLmV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXMpKSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMseUJBQXlCO0FBUWxDLFNBQVMsNEJBQTRCO0FBNEk5QixNQUFlLG1DQUFtQyxxQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNNUUsSUFBYyxxQkFBeUM7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
@@ -98,21 +98,21 @@ export declare abstract class EditorCommandHandler extends CommandHandler {
98
98
  /**
99
99
  * Gets the item name to use in the editor menu.
100
100
  *
101
- * @returns The item name, or `undefined` to use the command name.
101
+ * @returns The item name, or `null` to use the command name.
102
102
  */
103
- protected get editorMenuItemName(): string | undefined;
103
+ protected get editorMenuItemName(): null | string;
104
104
  /**
105
105
  * Gets the section to use in the editor menu.
106
106
  *
107
- * @returns The section name, or `undefined` to use the plugin name.
107
+ * @returns The section name, or `null` to use the plugin name.
108
108
  */
109
- protected get editorMenuSection(): string | undefined;
109
+ protected get editorMenuSection(): null | string;
110
110
  /**
111
111
  * Gets the icon to use in the editor menu submenu.
112
112
  *
113
- * @returns The icon, or `undefined` for no icon.
113
+ * @returns The icon, or `null` for no icon.
114
114
  */
115
- protected get editorMenuSubmenuIcon(): IconName | undefined;
115
+ protected get editorMenuSubmenuIcon(): IconName | null;
116
116
  private readonly _editorMenuItemName?;
117
117
  private readonly _editorMenuSection?;
118
118
  private readonly _editorMenuSubmenuIcon?;
@@ -158,7 +158,7 @@ export declare abstract class EditorCommandHandler extends CommandHandler {
158
158
  *
159
159
  * @returns Whether to add to a submenu.
160
160
  */
161
- protected shouldAddCommandToSubmenu(): boolean | undefined;
161
+ protected shouldAddCommandToSubmenu(): boolean;
162
162
  /**
163
163
  * Checks whether the command should appear in the command palette.
164
164
  *
@@ -39,26 +39,26 @@ class EditorCommandHandler extends CommandHandler {
39
39
  /**
40
40
  * Gets the item name to use in the editor menu.
41
41
  *
42
- * @returns The item name, or `undefined` to use the command name.
42
+ * @returns The item name, or `null` to use the command name.
43
43
  */
44
44
  get editorMenuItemName() {
45
- return this._editorMenuItemName;
45
+ return this._editorMenuItemName ?? null;
46
46
  }
47
47
  /**
48
48
  * Gets the section to use in the editor menu.
49
49
  *
50
- * @returns The section name, or `undefined` to use the plugin name.
50
+ * @returns The section name, or `null` to use the plugin name.
51
51
  */
52
52
  get editorMenuSection() {
53
- return this._editorMenuSection;
53
+ return this._editorMenuSection ?? null;
54
54
  }
55
55
  /**
56
56
  * Gets the icon to use in the editor menu submenu.
57
57
  *
58
- * @returns The icon, or `undefined` for no icon.
58
+ * @returns The icon, or `null` for no icon.
59
59
  */
60
60
  get editorMenuSubmenuIcon() {
61
- return this._editorMenuSubmenuIcon;
61
+ return this._editorMenuSubmenuIcon ?? null;
62
62
  }
63
63
  _editorMenuItemName;
64
64
  _editorMenuSection;
@@ -135,7 +135,7 @@ class EditorCommandHandler extends CommandHandler {
135
135
  * @returns Whether to add to a submenu.
136
136
  */
137
137
  shouldAddCommandToSubmenu() {
138
- return this._shouldAddCommandToSubmenu;
138
+ return this._shouldAddCommandToSubmenu ?? false;
139
139
  }
140
140
  /**
141
141
  * Checks whether the command should appear in the command palette.
@@ -242,4 +242,4 @@ class EditorCommandHandler extends CommandHandler {
242
242
  export {
243
243
  EditorCommandHandler
244
244
  };
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tYW5kLWhhbmRsZXJzL2VkaXRvci1jb21tYW5kLWhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgZWRpdG9yIGNvbW1hbmRzIHdpdGggb3B0aW9uYWwgZWRpdG9yIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kLFxuICBFZGl0b3IsXG4gIEljb25OYW1lLFxuICBNYXJrZG93bkZpbGVJbmZvLFxuICBNYXJrZG93blZpZXcsXG4gIE1lbnVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMsXG4gIENvbW1hbmRIYW5kbGVyUmVnaXN0cmF0aW9uQ29udGV4dFxufSBmcm9tICcuL2NvbW1hbmQtaGFuZGxlci50cyc7XG5cbmltcG9ydCB7IENvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi9jb21tYW5kLWhhbmRsZXIudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIGFuIGVkaXRvciBjb21tYW5kIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyBleHRlbmRzIENvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yTWVudUl0ZW1OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIHVzZSBpbiB0aGUgZWRpdG9yIG1lbnUgc3VibWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvck1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCB0aGUgY29tbWFuZCB0byBhIHN1Ym1lbnUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBFZGl0b3JDb21tYW5kSGFuZGxlci5lZGl0b3JDaGVja0NhbGxiYWNrfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGl0b3JDb21tYW5kSGFuZGxlckVkaXRvckNoZWNrQ2FsbGJhY2tQYXJhbXMge1xuICAvKipcbiAgICogV2hldGhlciBPYnNpZGlhbiBpcyBvbmx5IGNoZWNraW5nIGF2YWlsYWJpbGl0eSAobm90IGV4ZWN1dGluZykuXG4gICAqL1xuICByZWFkb25seSBjaGVja2luZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1hcmtkb3duIGZpbGUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IE1hcmtkb3duRmlsZUluZm87XG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3IgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3I6IEVkaXRvcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgRWRpdG9yQ29tbWFuZEhhbmRsZXIuaGFuZGxlRWRpdG9yTWVudX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yQ29tbWFuZEhhbmRsZXJIYW5kbGVFZGl0b3JNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBtYXJrZG93biBmaWxlIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBNYXJrZG93bkZpbGVJbmZvO1xuXG4gIC8qKlxuICAgKiBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yOiBFZGl0b3I7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW51IHRvIGFkZCBpdGVtcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IG1lbnU6IE1lbnU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEVkaXRvckNvbW1hbmRIYW5kbGVyLmhhbmRsZVZpZXdwb3J0TWVudX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yQ29tbWFuZEhhbmRsZXJIYW5kbGVWaWV3cG9ydE1lbnVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1lbnUgdG8gYWRkIGl0ZW1zIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVudTogTWVudTtcblxuICAvKipcbiAgICogVGhlIHZpZXcgbW9kZSAoYCdzb3VyY2UnYCBvciBgJ3ByZXZpZXcnYCkuXG4gICAqL1xuICByZWFkb25seSBtb2RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgcmFpc2VkIHRoZSBtZW51LiBPYnNpZGlhbiAxLjEzLjcgYWx3YXlzIHBhc3NlcyBgJ2d1dHRlcidgIC0gc2VlXG4gICAqIHtAbGluayBNYXJrZG93blZpZXdwb3J0TWVudUV2ZW50SGFuZGxlcn0uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1hcmtkb3duIHZpZXcgdGhlIG1lbnUgd2FzIHJhaXNlZCBvdmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdmlldzogTWFya2Rvd25WaWV3O1xufVxuXG4vKipcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgZWRpdG9yIGNvbW1hbmRzLlxuICpcbiAqIFN1YmNsYXNzZXMgb3ZlcnJpZGUge0BsaW5rIGNhbkV4ZWN1dGVFZGl0b3J9IGFuZCB7QGxpbmsgZXhlY3V0ZUVkaXRvcn0gdG8gcHJvdmlkZSBiZWhhdmlvci5cbiAqIE9wdGlvbmFsbHkgaW50ZWdyYXRlcyB3aXRoIHRoZSBlZGl0b3IgY29udGV4dCBtZW51IHZpYSB7QGxpbmsgc2hvdWxkQWRkVG9FZGl0b3JNZW51fSwgYW5kIHdpdGggdGhlXG4gKiBtYXJrZG93biB2aWV3cG9ydCAobWFyZ2luKSBtZW51IHZpYSB7QGxpbmsgc2hvdWxkQWRkVG9WaWV3cG9ydE1lbnV9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWRpdG9yQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBDb21tYW5kSGFuZGxlciB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBjb21tYW5kIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGVkaXRvck1lbnVJdGVtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51SXRlbU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2VjdGlvbiBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byB1c2UgdGhlIHBsdWdpbiBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBlZGl0b3JNZW51U2VjdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgZWRpdG9yIG1lbnUgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGljb24sIG9yIGB1bmRlZmluZWRgIGZvciBubyBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBlZGl0b3JNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51U3VibWVudUljb247XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZWRpdG9yTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRvck1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRWRpdG9yQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5fZWRpdG9yTWVudUl0ZW1OYW1lID0gcGFyYW1zLmVkaXRvck1lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9lZGl0b3JNZW51U2VjdGlvbiA9IHBhcmFtcy5lZGl0b3JNZW51U2VjdGlvbjtcbiAgICB0aGlzLl9lZGl0b3JNZW51U3VibWVudUljb24gPSBwYXJhbXMuZWRpdG9yTWVudVN1Ym1lbnVJY29uO1xuICAgIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPSBwYXJhbXMuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBwbGFpbiBPYnNpZGlhbiB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0IHdpdGggYW4gYGVkaXRvckNoZWNrQ2FsbGJhY2tgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGJ1aWxkQ29tbWFuZCgpOiBDb21tYW5kIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yQ2hlY2tDYWxsYmFjazogKGNoZWNraW5nLCBlZGl0b3IsIGNvbnRleHQpID0+XG4gICAgICAgIHRoaXMuZWRpdG9yQ2hlY2tDYWxsYmFjayh7XG4gICAgICAgICAgY2hlY2tpbmcsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgfSksXG4gICAgICBpY29uOiB0aGlzLmljb24sXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBlZGl0b3ItbWVudSBhbmQgbWFya2Rvd24tdmlld3BvcnQtbWVudSBldmVudCBoYW5kbGVycy5cbiAgICpcbiAgICogQm90aCBhcmUgcmVnaXN0ZXJlZCB1bmNvbmRpdGlvbmFsbHk7IHdoZXRoZXIgYW4gaXRlbSBhY3R1YWxseSBhcHBlYXJzIGlzIGRlY2lkZWQgcGVyIG1lbnUgcmVuZGVyIGJ5XG4gICAqIHtAbGluayBzaG91bGRBZGRUb0VkaXRvck1lbnV9IC8ge0BsaW5rIHNob3VsZEFkZFRvVmlld3BvcnRNZW51fSwgd2hpY2ggYm90aCBkZWZhdWx0IHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJlZ2lzdHJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9uUmVnaXN0ZXJlZChjb250ZXh0OiBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzdXBlci5vblJlZ2lzdGVyZWQoY29udGV4dCk7XG4gICAgY29udGV4dC5tZW51RXZlbnRSZWdpc3RyYXIucmVnaXN0ZXJFZGl0b3JNZW51RXZlbnRIYW5kbGVyKChtZW51LCBlZGl0b3IsICRjb250ZXh0KSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZUVkaXRvck1lbnUoe1xuICAgICAgICBjb250ZXh0OiAkY29udGV4dCxcbiAgICAgICAgZWRpdG9yLFxuICAgICAgICBtZW51XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb250ZXh0Lm1lbnVFdmVudFJlZ2lzdHJhci5yZWdpc3Rlck1hcmtkb3duVmlld3BvcnRNZW51RXZlbnRIYW5kbGVyKChtZW51LCB2aWV3LCBtb2RlLCBzb3VyY2UpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlVmlld3BvcnRNZW51KHtcbiAgICAgICAgbWVudSxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICB2aWV3XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZSBmb3IgdGhlIGdpdmVuIGVkaXRvciBhbmQgY29udGV4dC5cbiAgICpcbiAgICogQHBhcmFtIF9lZGl0b3IgLSBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gX2NvbnRleHQgLSBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVFZGl0b3IoX2VkaXRvcjogRWRpdG9yLCBfY29udGV4dDogTWFya2Rvd25GaWxlSW5mbyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciB0aGUgZ2l2ZW4gZWRpdG9yIGFuZCBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gZWRpdG9yIC0gVGhlIGVkaXRvciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGV4ZWN1dGVFZGl0b3IoZWRpdG9yOiBFZGl0b3IsIGNvbnRleHQ6IE1hcmtkb3duRmlsZUluZm8pOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvQ29tbWFuZFBhbGV0dGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgZWRpdG9yIGNvbnRleHQgbWVudS5cbiAgICpcbiAgICogQHBhcmFtIF9lZGl0b3IgLSBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gX2NvbnRleHQgLSBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgZWRpdG9yIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9FZGl0b3JNZW51KF9lZGl0b3I6IEVkaXRvciwgX2NvbnRleHQ6IE1hcmtkb3duRmlsZUluZm8pOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgbWFya2Rvd24gdmlld3BvcnQgKG1hcmdpbikgY29udGV4dCBtZW51LlxuICAgKlxuICAgKiBUaGF0IGlzIHRoZSBtZW51IGNhcnJ5aW5nIGBSZWFkYWJsZSBsaW5lIGxlbmd0aGAgLyBgTGluZSBudW1iZXJzYCAvIGBJbmxpbmUgdGl0bGVgLCByYWlzZWQgYnlcbiAgICogcmlnaHQtY2xpY2tpbmcgdGhlIGVtcHR5IHNwYWNlIGJlc2lkZSB0aGUgdGV4dCBvciB0aGUgbGluZS1udW1iZXIgZ3V0dGVyIOKAlCBhIG1lbnVcbiAgICoge0BsaW5rIHNob3VsZEFkZFRvRWRpdG9yTWVudX0gY2FuIG5ldmVyIHJlYWNoLCBiZWNhdXNlIGEgbWFyZ2luIGNsaWNrIGxhbmRzIG91dHNpZGUgdGhlIGVkaXRvcidzXG4gICAqIGBjb250ZW50RE9NYC4gSXQgaXMgYSBuYXR1cmFsIGhvbWUgZm9yIHdob2xlLW5vdGUgY29tbWFuZHMgb25jZSB0aGUgZWRpdG9yIG1lbnUgZ2V0cyBjcm93ZGVkLlxuICAgKlxuICAgKiBgbW9kZWAgYW5kIGBzb3VyY2VgIGFyZSBwYXNzZWQgdGhyb3VnaCByYXRoZXIgdGhhbiBmaWx0ZXJlZCBoZXJlOiB3aGV0aGVyIGEgY29tbWFuZCBiZWxvbmdzIGluXG4gICAqIHJlYWRpbmcgbW9kZSBpcyB0aGUgY29uc3VtaW5nIHBsdWdpbidzIGNhbGwuIE5vdGUgdGhhdCBPYnNpZGlhbiAxLjEzLjcgYWx3YXlzIHBhc3NlcyBgJ2d1dHRlcidgIGFzXG4gICAqIGBzb3VyY2VgLCBzbyBvbmx5IGBtb2RlYCBjdXJyZW50bHkgZGlzY3JpbWluYXRlcyAtIHNlZSB7QGxpbmsgTWFya2Rvd25WaWV3cG9ydE1lbnVFdmVudEhhbmRsZXJ9LlxuICAgKlxuICAgKiBAcGFyYW0gX3ZpZXcgLSBUaGUgbWFya2Rvd24gdmlldyB0aGUgbWVudSB3YXMgcmFpc2VkIG92ZXIuXG4gICAqIEBwYXJhbSBfbW9kZSAtIFRoZSB2aWV3IG1vZGUgKGAnc291cmNlJ2Agb3IgYCdwcmV2aWV3J2ApLlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFdoYXQgcmFpc2VkIHRoZSBtZW51LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgdmlld3BvcnQgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb1ZpZXdwb3J0TWVudShfdmlldzogTWFya2Rvd25WaWV3LCBfbW9kZTogc3RyaW5nLCBfc291cmNlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyB0aGUgY29tbWFuZCdzIGl0ZW0gdG8gYSBtZW51LCBpbiB0aGUgaGFuZGxlcidzIG93biBzZWN0aW9uLlxuICAgKlxuICAgKiBTaGFyZWQgYnkgYm90aCBtZW51IHN1cmZhY2VzOiBhbiBpdGVtIHByZXNlbnRzIGlkZW50aWNhbGx5IHdoaWNoZXZlciBvZiB0aGUgdHdvIGl0IHdhcyBvcHRlZCBpbnRvLFxuICAgKiBzbyB0aGUgc2VjdGlvbiAvIHN1Ym1lbnUgLyBpY29uIHBsdW1iaW5nIGxpdmVzIGhlcmUgb25jZS5cbiAgICpcbiAgICogQHBhcmFtIG1lbnUgLSBUaGUgbWVudSB0byBhZGQgdGhlIGl0ZW0gdG8uXG4gICAqIEBwYXJhbSBlZGl0b3IgLSBUaGUgZWRpdG9yIHRoZSBjb21tYW5kIHdpbGwgcnVuIGFnYWluc3QuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIG1hcmtkb3duIGZpbGUgY29udGV4dCB0aGUgY29tbWFuZCB3aWxsIHJ1biBhZ2FpbnN0LlxuICAgKi9cbiAgcHJpdmF0ZSBhZGRNZW51SXRlbShtZW51OiBNZW51LCBlZGl0b3I6IEVkaXRvciwgY29udGV4dDogTWFya2Rvd25GaWxlSW5mbyk6IHZvaWQge1xuICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmVkaXRvck1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmVkaXRvck1lbnVTdWJtZW51SWNvbiA/PyAnJyxcbiAgICAgICAgdGl0bGU6IHNlY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgaXRlbVxuICAgICAgICAuc2V0VGl0bGUodGhpcy5lZGl0b3JNZW51SXRlbU5hbWUgPz8gdGhpcy5uYW1lKVxuICAgICAgICAuc2V0SWNvbih0aGlzLmljb24pXG4gICAgICAgIC5zZXRTZWN0aW9uKHNlY3Rpb24pXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB0aGlzLmV4ZWN1dGVFZGl0b3IoZWRpdG9yLCBjb250ZXh0KSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlZGl0b3JDaGVja0NhbGxiYWNrKHBhcmFtczogRWRpdG9yQ29tbWFuZEhhbmRsZXJFZGl0b3JDaGVja0NhbGxiYWNrUGFyYW1zKTogYm9vbGVhbiB7XG4gICAgY29uc3Qge1xuICAgICAgY2hlY2tpbmcsXG4gICAgICBjb250ZXh0LFxuICAgICAgZWRpdG9yXG4gICAgfSA9IHBhcmFtcztcbiAgICBpZiAoIXRoaXMuc2hvdWxkQWRkVG9Db21tYW5kUGFsZXR0ZSgpIHx8ICF0aGlzLmNhbkV4ZWN1dGVFZGl0b3IoZWRpdG9yLCBjb250ZXh0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghY2hlY2tpbmcpIHtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHRoaXMuZXhlY3V0ZUVkaXRvcihlZGl0b3IsIGNvbnRleHQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRWRpdG9yTWVudShwYXJhbXM6IEVkaXRvckNvbW1hbmRIYW5kbGVySGFuZGxlRWRpdG9yTWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBlZGl0b3IsXG4gICAgICBtZW51XG4gICAgfSA9IHBhcmFtcztcbiAgICBpZiAoIXRoaXMuc2hvdWxkQWRkVG9FZGl0b3JNZW51KGVkaXRvciwgY29udGV4dCkgfHwgIXRoaXMuY2FuRXhlY3V0ZUVkaXRvcihlZGl0b3IsIGNvbnRleHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hZGRNZW51SXRlbShtZW51LCBlZGl0b3IsIGNvbnRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWV3cG9ydE1lbnUocGFyYW1zOiBFZGl0b3JDb21tYW5kSGFuZGxlckhhbmRsZVZpZXdwb3J0TWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIG1lbnUsXG4gICAgICBtb2RlLFxuICAgICAgc291cmNlLFxuICAgICAgdmlld1xuICAgIH0gPSBwYXJhbXM7XG4gICAgaWYgKCF0aGlzLnNob3VsZEFkZFRvVmlld3BvcnRNZW51KHZpZXcsIG1vZGUsIHNvdXJjZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBIGBNYXJrZG93blZpZXdgIElTIGEgYE1hcmtkb3duRmlsZUluZm9gLCBzbyB0aGUgZXhpc3RpbmcgZWRpdG9yLXNpZGUgZ2F0ZSBhbmQgYm9keSBzZXJ2ZSB0aGlzXG4gICAgLy8gbWVudSB1bmNoYW5nZWQsIHdpdGggbm8gbmV3IGFic3RyYWN0IHN1cmZhY2UgZm9yIHN1YmNsYXNzZXMgdG8gaW1wbGVtZW50LlxuICAgIGNvbnN0IGVkaXRvciA9IHZpZXcuZWRpdG9yO1xuICAgIGlmICghdGhpcy5jYW5FeGVjdXRlRWRpdG9yKGVkaXRvciwgdmlldykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXZlbnQncyBtZW51IGFscmVhZHkgZGVjbGFyZXMgc2VjdGlvbnMgYFsndmlldycsICcnXWAuIEFuIGl0ZW0gaW4gdGhlIGhhbmRsZXIncyBvd24gc2VjdGlvblxuICAgIC8vIHRoZXJlZm9yZSBzb3J0cyBiZWxvdyBPYnNpZGlhbidzIGBSZWFkYWJsZSBsaW5lIGxlbmd0aGAgLyBgTGluZSBudW1iZXJzYCAvIGBJbmxpbmUgdGl0bGVgIHRvZ2dsZXMuXG4gICAgdGhpcy5hZGRNZW51SXRlbShtZW51LCBlZGl0b3IsIHZpZXcpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBT1AsU0FBUyxzQkFBc0I7QUFzR3hCLE1BQWUsNkJBQTZCLGVBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNaEUsSUFBYyxxQkFBeUM7QUFDckQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsb0JBQXdDO0FBQ3BELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHdCQUE4QztBQUMxRCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFaUI7QUFBQSxFQUVBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVixZQUFZLFFBQStDO0FBQ2hFLFVBQU0sTUFBTTtBQUNaLFNBQUssc0JBQXNCLE9BQU87QUFDbEMsU0FBSyxxQkFBcUIsT0FBTztBQUNqQyxTQUFLLHlC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
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tYW5kLWhhbmRsZXJzL2VkaXRvci1jb21tYW5kLWhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgZWRpdG9yIGNvbW1hbmRzIHdpdGggb3B0aW9uYWwgZWRpdG9yIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kLFxuICBFZGl0b3IsXG4gIEljb25OYW1lLFxuICBNYXJrZG93bkZpbGVJbmZvLFxuICBNYXJrZG93blZpZXcsXG4gIE1lbnVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIENvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMsXG4gIENvbW1hbmRIYW5kbGVyUmVnaXN0cmF0aW9uQ29udGV4dFxufSBmcm9tICcuL2NvbW1hbmQtaGFuZGxlci50cyc7XG5cbmltcG9ydCB7IENvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi9jb21tYW5kLWhhbmRsZXIudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIGFuIGVkaXRvciBjb21tYW5kIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyBleHRlbmRzIENvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yTWVudUl0ZW1OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIHVzZSBpbiB0aGUgZWRpdG9yIG1lbnUgc3VibWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvck1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCB0aGUgY29tbWFuZCB0byBhIHN1Ym1lbnUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBFZGl0b3JDb21tYW5kSGFuZGxlci5lZGl0b3JDaGVja0NhbGxiYWNrfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFZGl0b3JDb21tYW5kSGFuZGxlckVkaXRvckNoZWNrQ2FsbGJhY2tQYXJhbXMge1xuICAvKipcbiAgICogV2hldGhlciBPYnNpZGlhbiBpcyBvbmx5IGNoZWNraW5nIGF2YWlsYWJpbGl0eSAobm90IGV4ZWN1dGluZykuXG4gICAqL1xuICByZWFkb25seSBjaGVja2luZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1hcmtkb3duIGZpbGUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IE1hcmtkb3duRmlsZUluZm87XG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3IgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3I6IEVkaXRvcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgRWRpdG9yQ29tbWFuZEhhbmRsZXIuaGFuZGxlRWRpdG9yTWVudX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yQ29tbWFuZEhhbmRsZXJIYW5kbGVFZGl0b3JNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBtYXJrZG93biBmaWxlIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBNYXJrZG93bkZpbGVJbmZvO1xuXG4gIC8qKlxuICAgKiBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yOiBFZGl0b3I7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW51IHRvIGFkZCBpdGVtcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IG1lbnU6IE1lbnU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEVkaXRvckNvbW1hbmRIYW5kbGVyLmhhbmRsZVZpZXdwb3J0TWVudX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yQ29tbWFuZEhhbmRsZXJIYW5kbGVWaWV3cG9ydE1lbnVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1lbnUgdG8gYWRkIGl0ZW1zIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVudTogTWVudTtcblxuICAvKipcbiAgICogVGhlIHZpZXcgbW9kZSAoYCdzb3VyY2UnYCBvciBgJ3ByZXZpZXcnYCkuXG4gICAqL1xuICByZWFkb25seSBtb2RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgcmFpc2VkIHRoZSBtZW51LiBPYnNpZGlhbiAxLjEzLjcgYWx3YXlzIHBhc3NlcyBgJ2d1dHRlcidgIC0gc2VlXG4gICAqIHtAbGluayBNYXJrZG93blZpZXdwb3J0TWVudUV2ZW50SGFuZGxlcn0uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1hcmtkb3duIHZpZXcgdGhlIG1lbnUgd2FzIHJhaXNlZCBvdmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdmlldzogTWFya2Rvd25WaWV3O1xufVxuXG4vKipcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgZWRpdG9yIGNvbW1hbmRzLlxuICpcbiAqIFN1YmNsYXNzZXMgb3ZlcnJpZGUge0BsaW5rIGNhbkV4ZWN1dGVFZGl0b3J9IGFuZCB7QGxpbmsgZXhlY3V0ZUVkaXRvcn0gdG8gcHJvdmlkZSBiZWhhdmlvci5cbiAqIE9wdGlvbmFsbHkgaW50ZWdyYXRlcyB3aXRoIHRoZSBlZGl0b3IgY29udGV4dCBtZW51IHZpYSB7QGxpbmsgc2hvdWxkQWRkVG9FZGl0b3JNZW51fSwgYW5kIHdpdGggdGhlXG4gKiBtYXJrZG93biB2aWV3cG9ydCAobWFyZ2luKSBtZW51IHZpYSB7QGxpbmsgc2hvdWxkQWRkVG9WaWV3cG9ydE1lbnV9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWRpdG9yQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBDb21tYW5kSGFuZGxlciB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYG51bGxgIHRvIHVzZSB0aGUgY29tbWFuZCBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBlZGl0b3JNZW51SXRlbU5hbWUoKTogbnVsbCB8IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRvck1lbnVJdGVtTmFtZSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYG51bGxgIHRvIHVzZSB0aGUgcGx1Z2luIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGVkaXRvck1lbnVTZWN0aW9uKCk6IG51bGwgfCBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51U2VjdGlvbiA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGljb24gdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudSBzdWJtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiwgb3IgYG51bGxgIGZvciBubyBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBlZGl0b3JNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdG9yTWVudVN1Ym1lbnVJY29uID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZWRpdG9yTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRvck1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRWRpdG9yQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5fZWRpdG9yTWVudUl0ZW1OYW1lID0gcGFyYW1zLmVkaXRvck1lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9lZGl0b3JNZW51U2VjdGlvbiA9IHBhcmFtcy5lZGl0b3JNZW51U2VjdGlvbjtcbiAgICB0aGlzLl9lZGl0b3JNZW51U3VibWVudUljb24gPSBwYXJhbXMuZWRpdG9yTWVudVN1Ym1lbnVJY29uO1xuICAgIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPSBwYXJhbXMuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBwbGFpbiBPYnNpZGlhbiB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0IHdpdGggYW4gYGVkaXRvckNoZWNrQ2FsbGJhY2tgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGJ1aWxkQ29tbWFuZCgpOiBDb21tYW5kIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yQ2hlY2tDYWxsYmFjazogKGNoZWNraW5nLCBlZGl0b3IsIGNvbnRleHQpID0+XG4gICAgICAgIHRoaXMuZWRpdG9yQ2hlY2tDYWxsYmFjayh7XG4gICAgICAgICAgY2hlY2tpbmcsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgfSksXG4gICAgICBpY29uOiB0aGlzLmljb24sXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBlZGl0b3ItbWVudSBhbmQgbWFya2Rvd24tdmlld3BvcnQtbWVudSBldmVudCBoYW5kbGVycy5cbiAgICpcbiAgICogQm90aCBhcmUgcmVnaXN0ZXJlZCB1bmNvbmRpdGlvbmFsbHk7IHdoZXRoZXIgYW4gaXRlbSBhY3R1YWxseSBhcHBlYXJzIGlzIGRlY2lkZWQgcGVyIG1lbnUgcmVuZGVyIGJ5XG4gICAqIHtAbGluayBzaG91bGRBZGRUb0VkaXRvck1lbnV9IC8ge0BsaW5rIHNob3VsZEFkZFRvVmlld3BvcnRNZW51fSwgd2hpY2ggYm90aCBkZWZhdWx0IHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJlZ2lzdHJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9uUmVnaXN0ZXJlZChjb250ZXh0OiBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzdXBlci5vblJlZ2lzdGVyZWQoY29udGV4dCk7XG4gICAgY29udGV4dC5tZW51RXZlbnRSZWdpc3RyYXIucmVnaXN0ZXJFZGl0b3JNZW51RXZlbnRIYW5kbGVyKChtZW51LCBlZGl0b3IsICRjb250ZXh0KSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZUVkaXRvck1lbnUoe1xuICAgICAgICBjb250ZXh0OiAkY29udGV4dCxcbiAgICAgICAgZWRpdG9yLFxuICAgICAgICBtZW51XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb250ZXh0Lm1lbnVFdmVudFJlZ2lzdHJhci5yZWdpc3Rlck1hcmtkb3duVmlld3BvcnRNZW51RXZlbnRIYW5kbGVyKChtZW51LCB2aWV3LCBtb2RlLCBzb3VyY2UpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlVmlld3BvcnRNZW51KHtcbiAgICAgICAgbWVudSxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICB2aWV3XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZSBmb3IgdGhlIGdpdmVuIGVkaXRvciBhbmQgY29udGV4dC5cbiAgICpcbiAgICogQHBhcmFtIF9lZGl0b3IgLSBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gX2NvbnRleHQgLSBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVFZGl0b3IoX2VkaXRvcjogRWRpdG9yLCBfY29udGV4dDogTWFya2Rvd25GaWxlSW5mbyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciB0aGUgZ2l2ZW4gZWRpdG9yIGFuZCBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gZWRpdG9yIC0gVGhlIGVkaXRvciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGV4ZWN1dGVFZGl0b3IoZWRpdG9yOiBFZGl0b3IsIGNvbnRleHQ6IE1hcmtkb3duRmlsZUluZm8pOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvQ29tbWFuZFBhbGV0dGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgZWRpdG9yIGNvbnRleHQgbWVudS5cbiAgICpcbiAgICogQHBhcmFtIF9lZGl0b3IgLSBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gX2NvbnRleHQgLSBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgZWRpdG9yIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9FZGl0b3JNZW51KF9lZGl0b3I6IEVkaXRvciwgX2NvbnRleHQ6IE1hcmtkb3duRmlsZUluZm8pOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgbWFya2Rvd24gdmlld3BvcnQgKG1hcmdpbikgY29udGV4dCBtZW51LlxuICAgKlxuICAgKiBUaGF0IGlzIHRoZSBtZW51IGNhcnJ5aW5nIGBSZWFkYWJsZSBsaW5lIGxlbmd0aGAgLyBgTGluZSBudW1iZXJzYCAvIGBJbmxpbmUgdGl0bGVgLCByYWlzZWQgYnlcbiAgICogcmlnaHQtY2xpY2tpbmcgdGhlIGVtcHR5IHNwYWNlIGJlc2lkZSB0aGUgdGV4dCBvciB0aGUgbGluZS1udW1iZXIgZ3V0dGVyIOKAlCBhIG1lbnVcbiAgICoge0BsaW5rIHNob3VsZEFkZFRvRWRpdG9yTWVudX0gY2FuIG5ldmVyIHJlYWNoLCBiZWNhdXNlIGEgbWFyZ2luIGNsaWNrIGxhbmRzIG91dHNpZGUgdGhlIGVkaXRvcidzXG4gICAqIGBjb250ZW50RE9NYC4gSXQgaXMgYSBuYXR1cmFsIGhvbWUgZm9yIHdob2xlLW5vdGUgY29tbWFuZHMgb25jZSB0aGUgZWRpdG9yIG1lbnUgZ2V0cyBjcm93ZGVkLlxuICAgKlxuICAgKiBgbW9kZWAgYW5kIGBzb3VyY2VgIGFyZSBwYXNzZWQgdGhyb3VnaCByYXRoZXIgdGhhbiBmaWx0ZXJlZCBoZXJlOiB3aGV0aGVyIGEgY29tbWFuZCBiZWxvbmdzIGluXG4gICAqIHJlYWRpbmcgbW9kZSBpcyB0aGUgY29uc3VtaW5nIHBsdWdpbidzIGNhbGwuIE5vdGUgdGhhdCBPYnNpZGlhbiAxLjEzLjcgYWx3YXlzIHBhc3NlcyBgJ2d1dHRlcidgIGFzXG4gICAqIGBzb3VyY2VgLCBzbyBvbmx5IGBtb2RlYCBjdXJyZW50bHkgZGlzY3JpbWluYXRlcyAtIHNlZSB7QGxpbmsgTWFya2Rvd25WaWV3cG9ydE1lbnVFdmVudEhhbmRsZXJ9LlxuICAgKlxuICAgKiBAcGFyYW0gX3ZpZXcgLSBUaGUgbWFya2Rvd24gdmlldyB0aGUgbWVudSB3YXMgcmFpc2VkIG92ZXIuXG4gICAqIEBwYXJhbSBfbW9kZSAtIFRoZSB2aWV3IG1vZGUgKGAnc291cmNlJ2Agb3IgYCdwcmV2aWV3J2ApLlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFdoYXQgcmFpc2VkIHRoZSBtZW51LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgdmlld3BvcnQgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb1ZpZXdwb3J0TWVudShfdmlldzogTWFya2Rvd25WaWV3LCBfbW9kZTogc3RyaW5nLCBfc291cmNlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyB0aGUgY29tbWFuZCdzIGl0ZW0gdG8gYSBtZW51LCBpbiB0aGUgaGFuZGxlcidzIG93biBzZWN0aW9uLlxuICAgKlxuICAgKiBTaGFyZWQgYnkgYm90aCBtZW51IHN1cmZhY2VzOiBhbiBpdGVtIHByZXNlbnRzIGlkZW50aWNhbGx5IHdoaWNoZXZlciBvZiB0aGUgdHdvIGl0IHdhcyBvcHRlZCBpbnRvLFxuICAgKiBzbyB0aGUgc2VjdGlvbiAvIHN1Ym1lbnUgLyBpY29uIHBsdW1iaW5nIGxpdmVzIGhlcmUgb25jZS5cbiAgICpcbiAgICogQHBhcmFtIG1lbnUgLSBUaGUgbWVudSB0byBhZGQgdGhlIGl0ZW0gdG8uXG4gICAqIEBwYXJhbSBlZGl0b3IgLSBUaGUgZWRpdG9yIHRoZSBjb21tYW5kIHdpbGwgcnVuIGFnYWluc3QuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIG1hcmtkb3duIGZpbGUgY29udGV4dCB0aGUgY29tbWFuZCB3aWxsIHJ1biBhZ2FpbnN0LlxuICAgKi9cbiAgcHJpdmF0ZSBhZGRNZW51SXRlbShtZW51OiBNZW51LCBlZGl0b3I6IEVkaXRvciwgY29udGV4dDogTWFya2Rvd25GaWxlSW5mbyk6IHZvaWQge1xuICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmVkaXRvck1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmVkaXRvck1lbnVTdWJtZW51SWNvbiA/PyAnJyxcbiAgICAgICAgdGl0bGU6IHNlY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgaXRlbVxuICAgICAgICAuc2V0VGl0bGUodGhpcy5lZGl0b3JNZW51SXRlbU5hbWUgPz8gdGhpcy5uYW1lKVxuICAgICAgICAuc2V0SWNvbih0aGlzLmljb24pXG4gICAgICAgIC5zZXRTZWN0aW9uKHNlY3Rpb24pXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB0aGlzLmV4ZWN1dGVFZGl0b3IoZWRpdG9yLCBjb250ZXh0KSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlZGl0b3JDaGVja0NhbGxiYWNrKHBhcmFtczogRWRpdG9yQ29tbWFuZEhhbmRsZXJFZGl0b3JDaGVja0NhbGxiYWNrUGFyYW1zKTogYm9vbGVhbiB7XG4gICAgY29uc3Qge1xuICAgICAgY2hlY2tpbmcsXG4gICAgICBjb250ZXh0LFxuICAgICAgZWRpdG9yXG4gICAgfSA9IHBhcmFtcztcbiAgICBpZiAoIXRoaXMuc2hvdWxkQWRkVG9Db21tYW5kUGFsZXR0ZSgpIHx8ICF0aGlzLmNhbkV4ZWN1dGVFZGl0b3IoZWRpdG9yLCBjb250ZXh0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghY2hlY2tpbmcpIHtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHRoaXMuZXhlY3V0ZUVkaXRvcihlZGl0b3IsIGNvbnRleHQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRWRpdG9yTWVudShwYXJhbXM6IEVkaXRvckNvbW1hbmRIYW5kbGVySGFuZGxlRWRpdG9yTWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBlZGl0b3IsXG4gICAgICBtZW51XG4gICAgfSA9IHBhcmFtcztcbiAgICBpZiAoIXRoaXMuc2hvdWxkQWRkVG9FZGl0b3JNZW51KGVkaXRvciwgY29udGV4dCkgfHwgIXRoaXMuY2FuRXhlY3V0ZUVkaXRvcihlZGl0b3IsIGNvbnRleHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hZGRNZW51SXRlbShtZW51LCBlZGl0b3IsIGNvbnRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWV3cG9ydE1lbnUocGFyYW1zOiBFZGl0b3JDb21tYW5kSGFuZGxlckhhbmRsZVZpZXdwb3J0TWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIG1lbnUsXG4gICAgICBtb2RlLFxuICAgICAgc291cmNlLFxuICAgICAgdmlld1xuICAgIH0gPSBwYXJhbXM7XG4gICAgaWYgKCF0aGlzLnNob3VsZEFkZFRvVmlld3BvcnRNZW51KHZpZXcsIG1vZGUsIHNvdXJjZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBIGBNYXJrZG93blZpZXdgIElTIGEgYE1hcmtkb3duRmlsZUluZm9gLCBzbyB0aGUgZXhpc3RpbmcgZWRpdG9yLXNpZGUgZ2F0ZSBhbmQgYm9keSBzZXJ2ZSB0aGlzXG4gICAgLy8gbWVudSB1bmNoYW5nZWQsIHdpdGggbm8gbmV3IGFic3RyYWN0IHN1cmZhY2UgZm9yIHN1YmNsYXNzZXMgdG8gaW1wbGVtZW50LlxuICAgIGNvbnN0IGVkaXRvciA9IHZpZXcuZWRpdG9yO1xuICAgIGlmICghdGhpcy5jYW5FeGVjdXRlRWRpdG9yKGVkaXRvciwgdmlldykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXZlbnQncyBtZW51IGFscmVhZHkgZGVjbGFyZXMgc2VjdGlvbnMgYFsndmlldycsICcnXWAuIEFuIGl0ZW0gaW4gdGhlIGhhbmRsZXIncyBvd24gc2VjdGlvblxuICAgIC8vIHRoZXJlZm9yZSBzb3J0cyBiZWxvdyBPYnNpZGlhbidzIGBSZWFkYWJsZSBsaW5lIGxlbmd0aGAgLyBgTGluZSBudW1iZXJzYCAvIGBJbmxpbmUgdGl0bGVgIHRvZ2dsZXMuXG4gICAgdGhpcy5hZGRNZW51SXRlbShtZW51LCBlZGl0b3IsIHZpZXcpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBT1AsU0FBUyxzQkFBc0I7QUFzR3hCLE1BQWUsNkJBQTZCLGVBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNaEUsSUFBYyxxQkFBb0M7QUFDaEQsV0FBTyxLQUFLLHVCQUF1QjtBQUFBLEVBQ3JDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyxvQkFBbUM7QUFDL0MsV0FBTyxLQUFLLHNCQUFzQjtBQUFBLEVBQ3BDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyx3QkFBeUM7QUFDckQsV0FBTyxLQUFLLDBCQUEwQjtBQUFBLEVBQ3hDO0FBQUEsRUFFaUI7QUFBQSxFQUVBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVixZQUFZLFFBQStDO0FBQ2hFLFVBQU0sTUFBTTtBQUNaLFNBQUssc0JBQXNCLE9BQU87QUFDbEMsU0FBSyxxQkFBcUIsT0FB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
@@ -5,6 +5,8 @@
5
5
  * Handles the "Report a bug" command.
6
6
  */
7
7
  import type { App } from 'obsidian';
8
+ import type { Promisable } from 'type-fest';
9
+ import type { BugReportDiagnosticSection } from '../bug-report-diagnostics.mjs';
8
10
  import { OpenGitHubCommandHandler } from './open-git-hub-command-handler.mjs';
9
11
  /**
10
12
  * Constructor parameters for {@link OpenBugReportCommandHandler}.
@@ -14,10 +16,23 @@ export interface OpenBugReportCommandHandlerConstructorParams {
14
16
  * The Obsidian app instance.
15
17
  */
16
18
  readonly app: App;
19
+ /**
20
+ * Gets the optional diagnostics the report can carry, such as a `BugReportLogBuffer`'s section or the
21
+ * plugin's own redacted settings. Called each time the command runs. When it returns any section, the
22
+ * user reviews them and chooses which to include before the form opens; a potentially private section
23
+ * starts excluded. Leave it out to open the form with the environment only, as before.
24
+ */
25
+ readonly getDiagnostics?: () => Promisable<readonly BugReportDiagnosticSection[]>;
17
26
  /**
18
27
  * The plugin's GitHub repository, as `owner/name`.
19
28
  */
20
29
  readonly gitHubRepo: string;
30
+ /**
31
+ * The most characters the encoded link may have before the report moves to the clipboard.
32
+ *
33
+ * @default `DEFAULT_BUG_REPORT_MAX_URL_LENGTH`
34
+ */
35
+ readonly maxUrlLength?: number;
21
36
  /**
22
37
  * The id of the reporting plugin.
23
38
  */
@@ -25,13 +40,23 @@ export interface OpenBugReportCommandHandlerConstructorParams {
25
40
  }
26
41
  /**
27
42
  * A command handler that opens the plugin's bug-report issue form on GitHub, prefilled with the
28
- * environment. See {@link getBugReportIssueFormUrl} for the field ids the form must use.
43
+ * environment and any diagnostics the user agreed to include. See {@link getBugReportIssueFormUrl} for the
44
+ * field ids the form must use, and {@link buildBugReportIssueFormLink} for what happens to a report too long
45
+ * for a link.
29
46
  */
30
47
  export declare class OpenBugReportCommandHandler extends OpenGitHubCommandHandler {
31
48
  /**
32
49
  * The Obsidian app instance.
33
50
  */
34
51
  protected readonly app: App;
52
+ /**
53
+ * Gets the optional diagnostics the report can carry.
54
+ */
55
+ protected readonly getDiagnostics: (() => Promisable<readonly BugReportDiagnosticSection[]>) | undefined;
56
+ /**
57
+ * The most characters the encoded link may have before the report moves to the clipboard.
58
+ */
59
+ protected readonly maxUrlLength: number | undefined;
35
60
  /**
36
61
  * The id of the reporting plugin.
37
62
  */
@@ -43,9 +68,16 @@ export declare class OpenBugReportCommandHandler extends OpenGitHubCommandHandle
43
68
  */
44
69
  constructor(params: OpenBugReportCommandHandlerConstructorParams);
45
70
  /**
46
- * Builds the prefilled bug-report URL.
71
+ * Lets the user review the diagnostics, if any, then opens the issue form. When the report is too long
72
+ * for a link, it is copied to the clipboard first, or shown for copying by hand when the clipboard
73
+ * refuses it.
74
+ */
75
+ execute(): Promise<void>;
76
+ /**
77
+ * Builds the prefilled bug-report URL, with the environment only.
47
78
  *
48
79
  * @returns The link.
49
80
  */
50
81
  protected getUrl(): Promise<string>;
82
+ private copyReport;
51
83
  }
@@ -2,14 +2,59 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
5
29
 
6
- import { getBugReportIssueFormUrl } from "../bug-report.mjs";
30
+ ensureBrowserProcess();
31
+ })();
32
+
33
+ import { Notice } from "obsidian";
34
+ import {
35
+ buildBugReportIssueFormLink,
36
+ formatBugReportEnvironment,
37
+ getBugReportEnvironment,
38
+ getBugReportIssueFormUrl
39
+ } from "../bug-report.mjs";
40
+ import { t } from "../i18n/i18n.mjs";
41
+ import { copyTextManually } from "../modals/copy-text-manually.mjs";
42
+ import { reviewBugReportDiagnostics } from "../modals/review-bug-report-diagnostics.mjs";
7
43
  import { OpenGitHubCommandHandler } from "./open-git-hub-command-handler.mjs";
44
+ const CLIPBOARD_NOTICE_DURATION_IN_MILLISECONDS = 15e3;
8
45
  class OpenBugReportCommandHandler extends OpenGitHubCommandHandler {
9
46
  /**
10
47
  * The Obsidian app instance.
11
48
  */
12
49
  app;
50
+ /**
51
+ * Gets the optional diagnostics the report can carry.
52
+ */
53
+ getDiagnostics;
54
+ /**
55
+ * The most characters the encoded link may have before the report moves to the clipboard.
56
+ */
57
+ maxUrlLength;
13
58
  /**
14
59
  * The id of the reporting plugin.
15
60
  */
@@ -27,10 +72,46 @@ class OpenBugReportCommandHandler extends OpenGitHubCommandHandler {
27
72
  name: "Report a bug"
28
73
  });
29
74
  this.app = params.app;
75
+ this.getDiagnostics = params.getDiagnostics;
76
+ this.maxUrlLength = params.maxUrlLength;
30
77
  this.pluginId = params.pluginId;
31
78
  }
32
79
  /**
33
- * Builds the prefilled bug-report URL.
80
+ * Lets the user review the diagnostics, if any, then opens the issue form. When the report is too long
81
+ * for a link, it is copied to the clipboard first, or shown for copying by hand when the clipboard
82
+ * refuses it.
83
+ */
84
+ async execute() {
85
+ if (!this.canExecute()) {
86
+ return;
87
+ }
88
+ const environment = await getBugReportEnvironment({ app: this.app, pluginId: this.pluginId });
89
+ const sections = await this.getDiagnostics?.() ?? [];
90
+ let diagnostics = [];
91
+ if (sections.length > 0) {
92
+ const reviewedSections = await reviewBugReportDiagnostics({
93
+ alwaysIncludedText: formatBugReportEnvironment(environment),
94
+ app: this.app,
95
+ sections
96
+ });
97
+ if (reviewedSections === null) {
98
+ return;
99
+ }
100
+ diagnostics = reviewedSections;
101
+ }
102
+ const link = buildBugReportIssueFormLink({
103
+ diagnostics,
104
+ environment,
105
+ gitHubRepo: this.gitHubRepo,
106
+ ...this.maxUrlLength !== void 0 && { maxUrlLength: this.maxUrlLength }
107
+ });
108
+ if (link.clipboardText !== null && !await this.copyReport(link.clipboardText)) {
109
+ return;
110
+ }
111
+ window.open(link.url, "_blank");
112
+ }
113
+ /**
114
+ * Builds the prefilled bug-report URL, with the environment only.
34
115
  *
35
116
  * @returns The link.
36
117
  */
@@ -41,8 +122,23 @@ class OpenBugReportCommandHandler extends OpenGitHubCommandHandler {
41
122
  pluginId: this.pluginId
42
123
  });
43
124
  }
125
+ async copyReport(text) {
126
+ try {
127
+ await activeWindow.navigator.clipboard.writeText(text);
128
+ new Notice(t(($) => $.obsidianLib.bugReport.clipboardCopied), CLIPBOARD_NOTICE_DURATION_IN_MILLISECONDS);
129
+ return true;
130
+ } catch {
131
+ return await copyTextManually({
132
+ app: this.app,
133
+ message: t(($) => $.obsidianLib.bugReport.copyManuallyMessage),
134
+ okButtonText: t(($) => $.obsidianLib.bugReport.openIssueForm),
135
+ text,
136
+ title: t(($) => $.obsidianLib.bugReport.copyManuallyTitle)
137
+ });
138
+ }
139
+ }
44
140
  }
45
141
  export {
46
142
  OpenBugReportCommandHandler
47
143
  };
48
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvb3Blbi1idWctcmVwb3J0LWNvbW1hbmQtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhhbmRsZXMgdGhlIFwiUmVwb3J0IGEgYnVnXCIgY29tbWFuZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsIH0gZnJvbSAnLi4vYnVnLXJlcG9ydC50cyc7XG5pbXBvcnQgeyBPcGVuR2l0SHViQ29tbWFuZEhhbmRsZXIgfSBmcm9tICcuL29wZW4tZ2l0LWh1Yi1jb21tYW5kLWhhbmRsZXIudHMnO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZm9yIHtAbGluayBPcGVuQnVnUmVwb3J0Q29tbWFuZEhhbmRsZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5CdWdSZXBvcnRDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBsdWdpbidzIEdpdEh1YiByZXBvc2l0b3J5LCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSBnaXRIdWJSZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgcmVwb3J0aW5nIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBjb21tYW5kIGhhbmRsZXIgdGhhdCBvcGVucyB0aGUgcGx1Z2luJ3MgYnVnLXJlcG9ydCBpc3N1ZSBmb3JtIG9uIEdpdEh1YiwgcHJlZmlsbGVkIHdpdGggdGhlXG4gKiBlbnZpcm9ubWVudC4gU2VlIHtAbGluayBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmx9IGZvciB0aGUgZmllbGQgaWRzIHRoZSBmb3JtIG11c3QgdXNlLlxuICovXG5leHBvcnQgY2xhc3MgT3BlbkJ1Z1JlcG9ydENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgT3BlbkdpdEh1YkNvbW1hbmRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgcmVwb3J0aW5nIHBsdWdpbi5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gQ29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IE9wZW5CdWdSZXBvcnRDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgZ2l0SHViUmVwbzogcGFyYW1zLmdpdEh1YlJlcG8sXG4gICAgICBpY29uOiAnYnVnJyxcbiAgICAgIGlkOiAncmVwb3J0LWJ1ZycsXG4gICAgICBuYW1lOiAnUmVwb3J0IGEgYnVnJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMucGx1Z2luSWQgPSBwYXJhbXMucGx1Z2luSWQ7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBwcmVmaWxsZWQgYnVnLXJlcG9ydCBVUkwuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGdldFVybCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBnZXRCdWdSZXBvcnRJc3N1ZUZvcm1Vcmwoe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIGdpdEh1YlJlcG86IHRoaXMuZ2l0SHViUmVwbyxcbiAgICAgIHBsdWdpbklkOiB0aGlzLnBsdWdpbklkXG4gICAgfSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBUUEsU0FBUyxnQ0FBZ0M7QUFDekMsU0FBUyxnQ0FBZ0M7QUEwQmxDLE1BQU0sb0NBQW9DLHlCQUF5QjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSXJEO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9aLFlBQVksUUFBc0Q7QUFDdkUsVUFBTTtBQUFBLE1BQ0osWUFBWSxPQUFPO0FBQUEsTUFDbkIsTUFBTTtBQUFBLE1BQ04sSUFBSTtBQUFBLE1BQ0osTUFBTTtBQUFBLElBQ1IsQ0FBQztBQUVELFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssV0FBVyxPQUFPO0FBQUEsRUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxNQUF5QixTQUEwQjtBQUNqRCxXQUFPLHlCQUF5QjtBQUFBLE1BQzlCLEtBQUssS0FBSztBQUFBLE1BQ1YsWUFBWSxLQUFLO0FBQUEsTUFDakIsVUFBVSxLQUFLO0FBQUEsSUFDakIsQ0FBQztBQUFBLEVBQ0g7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tYW5kLWhhbmRsZXJzL29wZW4tYnVnLXJlcG9ydC1jb21tYW5kLWhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEhhbmRsZXMgdGhlIFwiUmVwb3J0IGEgYnVnXCIgY29tbWFuZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IE5vdGljZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBCdWdSZXBvcnREaWFnbm9zdGljU2VjdGlvbiB9IGZyb20gJy4uL2J1Zy1yZXBvcnQtZGlhZ25vc3RpY3MudHMnO1xuXG5pbXBvcnQge1xuICBidWlsZEJ1Z1JlcG9ydElzc3VlRm9ybUxpbmssXG4gIGZvcm1hdEJ1Z1JlcG9ydEVudmlyb25tZW50LFxuICBnZXRCdWdSZXBvcnRFbnZpcm9ubWVudCxcbiAgZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsXG59IGZyb20gJy4uL2J1Zy1yZXBvcnQudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyBjb3B5VGV4dE1hbnVhbGx5IH0gZnJvbSAnLi4vbW9kYWxzL2NvcHktdGV4dC1tYW51YWxseS50cyc7XG5pbXBvcnQgeyByZXZpZXdCdWdSZXBvcnREaWFnbm9zdGljcyB9IGZyb20gJy4uL21vZGFscy9yZXZpZXctYnVnLXJlcG9ydC1kaWFnbm9zdGljcy50cyc7XG5pbXBvcnQgeyBPcGVuR2l0SHViQ29tbWFuZEhhbmRsZXIgfSBmcm9tICcuL29wZW4tZ2l0LWh1Yi1jb21tYW5kLWhhbmRsZXIudHMnO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZm9yIHtAbGluayBPcGVuQnVnUmVwb3J0Q29tbWFuZEhhbmRsZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5CdWdSZXBvcnRDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogR2V0cyB0aGUgb3B0aW9uYWwgZGlhZ25vc3RpY3MgdGhlIHJlcG9ydCBjYW4gY2FycnksIHN1Y2ggYXMgYSBgQnVnUmVwb3J0TG9nQnVmZmVyYCdzIHNlY3Rpb24gb3IgdGhlXG4gICAqIHBsdWdpbidzIG93biByZWRhY3RlZCBzZXR0aW5ncy4gQ2FsbGVkIGVhY2ggdGltZSB0aGUgY29tbWFuZCBydW5zLiBXaGVuIGl0IHJldHVybnMgYW55IHNlY3Rpb24sIHRoZVxuICAgKiB1c2VyIHJldmlld3MgdGhlbSBhbmQgY2hvb3NlcyB3aGljaCB0byBpbmNsdWRlIGJlZm9yZSB0aGUgZm9ybSBvcGVuczsgYSBwb3RlbnRpYWxseSBwcml2YXRlIHNlY3Rpb25cbiAgICogc3RhcnRzIGV4Y2x1ZGVkLiBMZWF2ZSBpdCBvdXQgdG8gb3BlbiB0aGUgZm9ybSB3aXRoIHRoZSBlbnZpcm9ubWVudCBvbmx5LCBhcyBiZWZvcmUuXG4gICAqL1xuICByZWFkb25seSBnZXREaWFnbm9zdGljcz86ICgpID0+IFByb21pc2FibGU8cmVhZG9ubHkgQnVnUmVwb3J0RGlhZ25vc3RpY1NlY3Rpb25bXT47XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBHaXRIdWIgcmVwb3NpdG9yeSwgYXMgYG93bmVyL25hbWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SHViUmVwbzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9zdCBjaGFyYWN0ZXJzIHRoZSBlbmNvZGVkIGxpbmsgbWF5IGhhdmUgYmVmb3JlIHRoZSByZXBvcnQgbW92ZXMgdG8gdGhlIGNsaXBib2FyZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYERFRkFVTFRfQlVHX1JFUE9SVF9NQVhfVVJMX0xFTkdUSGBcbiAgICovXG4gIHJlYWRvbmx5IG1heFVybExlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSByZXBvcnRpbmcgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLy8gTG9uZyBlbm91Z2ggdG8gcmVhZCB0aGUgcGFzdGUgaW5zdHJ1Y3Rpb24gd2hpbGUgdGhlIGJyb3dzZXIgb3BlbnMuXG5jb25zdCBDTElQQk9BUkRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA9IDE1XzAwMDtcblxuLyoqXG4gKiBBIGNvbW1hbmQgaGFuZGxlciB0aGF0IG9wZW5zIHRoZSBwbHVnaW4ncyBidWctcmVwb3J0IGlzc3VlIGZvcm0gb24gR2l0SHViLCBwcmVmaWxsZWQgd2l0aCB0aGVcbiAqIGVudmlyb25tZW50IGFuZCBhbnkgZGlhZ25vc3RpY3MgdGhlIHVzZXIgYWdyZWVkIHRvIGluY2x1ZGUuIFNlZSB7QGxpbmsgZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsfSBmb3IgdGhlXG4gKiBmaWVsZCBpZHMgdGhlIGZvcm0gbXVzdCB1c2UsIGFuZCB7QGxpbmsgYnVpbGRCdWdSZXBvcnRJc3N1ZUZvcm1MaW5rfSBmb3Igd2hhdCBoYXBwZW5zIHRvIGEgcmVwb3J0IHRvbyBsb25nXG4gKiBmb3IgYSBsaW5rLlxuICovXG5leHBvcnQgY2xhc3MgT3BlbkJ1Z1JlcG9ydENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgT3BlbkdpdEh1YkNvbW1hbmRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG9wdGlvbmFsIGRpYWdub3N0aWNzIHRoZSByZXBvcnQgY2FuIGNhcnJ5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGdldERpYWdub3N0aWNzOiAoKCkgPT4gUHJvbWlzYWJsZTxyZWFkb25seSBCdWdSZXBvcnREaWFnbm9zdGljU2VjdGlvbltdPikgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtb3N0IGNoYXJhY3RlcnMgdGhlIGVuY29kZWQgbGluayBtYXkgaGF2ZSBiZWZvcmUgdGhlIHJlcG9ydCBtb3ZlcyB0byB0aGUgY2xpcGJvYXJkLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1heFVybExlbmd0aDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHJlcG9ydGluZyBwbHVnaW4uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIENvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBPcGVuQnVnUmVwb3J0Q29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHtcbiAgICAgIGdpdEh1YlJlcG86IHBhcmFtcy5naXRIdWJSZXBvLFxuICAgICAgaWNvbjogJ2J1ZycsXG4gICAgICBpZDogJ3JlcG9ydC1idWcnLFxuICAgICAgbmFtZTogJ1JlcG9ydCBhIGJ1ZydcbiAgICB9KTtcblxuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLmdldERpYWdub3N0aWNzID0gcGFyYW1zLmdldERpYWdub3N0aWNzO1xuICAgIHRoaXMubWF4VXJsTGVuZ3RoID0gcGFyYW1zLm1heFVybExlbmd0aDtcbiAgICB0aGlzLnBsdWdpbklkID0gcGFyYW1zLnBsdWdpbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIExldHMgdGhlIHVzZXIgcmV2aWV3IHRoZSBkaWFnbm9zdGljcywgaWYgYW55LCB0aGVuIG9wZW5zIHRoZSBpc3N1ZSBmb3JtLiBXaGVuIHRoZSByZXBvcnQgaXMgdG9vIGxvbmdcbiAgICogZm9yIGEgbGluaywgaXQgaXMgY29waWVkIHRvIHRoZSBjbGlwYm9hcmQgZmlyc3QsIG9yIHNob3duIGZvciBjb3B5aW5nIGJ5IGhhbmQgd2hlbiB0aGUgY2xpcGJvYXJkXG4gICAqIHJlZnVzZXMgaXQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FuRXhlY3V0ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBnZXRCdWdSZXBvcnRFbnZpcm9ubWVudCh7IGFwcDogdGhpcy5hcHAsIHBsdWdpbklkOiB0aGlzLnBsdWdpbklkIH0pO1xuICAgIGNvbnN0IHNlY3Rpb25zID0gYXdhaXQgdGhpcy5nZXREaWFnbm9zdGljcz8uKCkgPz8gW107XG4gICAgbGV0IGRpYWdub3N0aWNzOiByZWFkb25seSBCdWdSZXBvcnREaWFnbm9zdGljU2VjdGlvbltdID0gW107XG4gICAgaWYgKHNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJldmlld2VkU2VjdGlvbnMgPSBhd2FpdCByZXZpZXdCdWdSZXBvcnREaWFnbm9zdGljcyh7XG4gICAgICAgIGFsd2F5c0luY2x1ZGVkVGV4dDogZm9ybWF0QnVnUmVwb3J0RW52aXJvbm1lbnQoZW52aXJvbm1lbnQpLFxuICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICBzZWN0aW9uc1xuICAgICAgfSk7XG4gICAgICBpZiAocmV2aWV3ZWRTZWN0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkaWFnbm9zdGljcyA9IHJldmlld2VkU2VjdGlvbnM7XG4gICAgfVxuXG4gICAgY29uc3QgbGluayA9IGJ1aWxkQnVnUmVwb3J0SXNzdWVGb3JtTGluayh7XG4gICAgICBkaWFnbm9zdGljcyxcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgZ2l0SHViUmVwbzogdGhpcy5naXRIdWJSZXBvLFxuICAgICAgLi4udGhpcy5tYXhVcmxMZW5ndGggIT09IHVuZGVmaW5lZCAmJiB7IG1heFVybExlbmd0aDogdGhpcy5tYXhVcmxMZW5ndGggfVxuICAgIH0pO1xuXG4gICAgaWYgKGxpbmsuY2xpcGJvYXJkVGV4dCAhPT0gbnVsbCAmJiAhYXdhaXQgdGhpcy5jb3B5UmVwb3J0KGxpbmsuY2xpcGJvYXJkVGV4dCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aW5kb3cub3BlbihsaW5rLnVybCwgJ19ibGFuaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgcHJlZmlsbGVkIGJ1Zy1yZXBvcnQgVVJMLCB3aXRoIHRoZSBlbnZpcm9ubWVudCBvbmx5LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbGluay5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBnZXRVcmwoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gZ2V0QnVnUmVwb3J0SXNzdWVGb3JtVXJsKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBnaXRIdWJSZXBvOiB0aGlzLmdpdEh1YlJlcG8sXG4gICAgICBwbHVnaW5JZDogdGhpcy5wbHVnaW5JZFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb3B5UmVwb3J0KHRleHQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGUgY2xpcGJvYXJkIG9mIHRoZSBmb2N1c2VkIHdpbmRvdzogYSBwb3BvdXQncyBkb2N1bWVudCBpcyB0aGUgb25lIHRoYXQgaG9sZHMgdGhlIGZvY3VzLlxuICAgICAgYXdhaXQgYWN0aXZlV2luZG93Lm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpO1xuICAgICAgbmV3IE5vdGljZSh0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmJ1Z1JlcG9ydC5jbGlwYm9hcmRDb3BpZWQpLCBDTElQQk9BUkRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBhd2FpdCBjb3B5VGV4dE1hbnVhbGx5KHtcbiAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgbWVzc2FnZTogdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idWdSZXBvcnQuY29weU1hbnVhbGx5TWVzc2FnZSksXG4gICAgICAgIG9rQnV0dG9uVGV4dDogdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idWdSZXBvcnQub3Blbklzc3VlRm9ybSksXG4gICAgICAgIHRleHQsXG4gICAgICAgIHRpdGxlOiB0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmJ1Z1JlcG9ydC5jb3B5TWFudWFsbHlUaXRsZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLFNBQVMsY0FBYztBQUl2QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxTQUFTO0FBQ2xCLFNBQVMsd0JBQXdCO0FBQ2pDLFNBQVMsa0NBQWtDO0FBQzNDLFNBQVMsZ0NBQWdDO0FBc0N6QyxNQUFNLDRDQUE0QztBQVEzQyxNQUFNLG9DQUFvQyx5QkFBeUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlyRDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9aLFlBQVksUUFBc0Q7QUFDdkUsVUFBTTtBQUFBLE1BQ0osWUFBWSxPQUFPO0FBQUEsTUFDbkIsTUFBTTtBQUFBLE1BQ04sSUFBSTtBQUFBLE1BQ0osTUFBTTtBQUFBLElBQ1IsQ0FBQztBQUVELFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssaUJBQWlCLE9BQU87QUFDN0IsU0FBSyxlQUFlLE9BQU87QUFDM0IsU0FBSyxXQUFXLE9BQU87QUFBQSxFQUN6QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE1BQXNCLFVBQXlCO0FBQzdDLFFBQUksQ0FBQyxLQUFLLFdBQVcsR0FBRztBQUN0QjtBQUFBLElBQ0Y7QUFFQSxVQUFNLGNBQWMsTUFBTSx3QkFBd0IsRUFBRSxLQUFLLEtBQUssS0FBSyxVQUFVLEtBQUssU0FBUyxDQUFDO0FBQzVGLFVBQU0sV0FBVyxNQUFNLEtBQUssaUJBQWlCLEtBQUssQ0FBQztBQUNuRCxRQUFJLGNBQXFELENBQUM7QUFDMUQsUUFBSSxTQUFTLFNBQVMsR0FBRztBQUN2QixZQUFNLG1CQUFtQixNQUFNLDJCQUEyQjtBQUFBLFFBQ3hELG9CQUFvQiwyQkFBMkIsV0FBVztBQUFBLFFBQzFELEtBQUssS0FBSztBQUFBLFFBQ1Y7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLHFCQUFxQixNQUFNO0FBQzdCO0FBQUEsTUFDRjtBQUNBLG9CQUFjO0FBQUEsSUFDaEI7QUFFQSxVQUFNLE9BQU8sNEJBQTRCO0FBQUEsTUFDdkM7QUFBQSxNQUNBO0FBQUEsTUFDQSxZQUFZLEtBQUs7QUFBQSxNQUNqQixHQUFHLEtBQUssaUJBQWlCLFVBQWEsRUFBRSxjQUFjLEtBQUssYUFBYTtBQUFBLElBQzFFLENBQUM7QUFFRCxRQUFJLEtBQUssa0JBQWtCLFFBQVEsQ0FBQyxNQUFNLEtBQUssV0FBVyxLQUFLLGFBQWEsR0FBRztBQUM3RTtBQUFBLElBQ0Y7QUFFQSxXQUFPLEtBQUssS0FBSyxLQUFLLFFBQVE7QUFBQSxFQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE1BQXlCLFNBQTBCO0FBQ2pELFdBQU8seUJBQXlCO0FBQUEsTUFDOUIsS0FBSyxLQUFLO0FBQUEsTUFDVixZQUFZLEtBQUs7QUFBQSxNQUNqQixVQUFVLEtBQUs7QUFBQSxJQUNqQixDQUFDO0FBQUEsRUFDSDtBQUFBLEVBRUEsTUFBYyxXQUFXLE1BQWdDO0FBQ3ZELFFBQUk7QUFFRixZQUFNLGFBQWEsVUFBVSxVQUFVLFVBQVUsSUFBSTtBQUNyRCxVQUFJLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLFVBQVUsZUFBZSxHQUFHLHlDQUF5QztBQUN2RyxhQUFPO0FBQUEsSUFDVCxRQUFRO0FBQ04sYUFBTyxNQUFNLGlCQUFpQjtBQUFBLFFBQzVCLEtBQUssS0FBSztBQUFBLFFBQ1YsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLFlBQVksVUFBVSxtQkFBbUI7QUFBQSxRQUM3RCxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxVQUFVLGFBQWE7QUFBQSxRQUM1RDtBQUFBLFFBQ0EsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLFlBQVksVUFBVSxpQkFBaUI7QUFBQSxNQUMzRCxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjsiLCJuYW1lcyI6W119