@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
@@ -0,0 +1,404 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
29
+
30
+ ensureBrowserProcess();
31
+ })();
32
+
33
+ import { snapshot } from "@mnaoumov/typescript-lib/array";
34
+ import { invokeAsyncSafely } from "@mnaoumov/typescript-lib/async";
35
+ import { isDataStoreJsonValue } from "../data-stores/data-store-replica.mjs";
36
+ import { getObsidianLibState } from "../obsidian-lib-state.mjs";
37
+ import { ComponentEx } from "./component-ex.mjs";
38
+ import { around } from "./monkey-around-component.mjs";
39
+ const WORKSPACE_LAYOUT_STATE_LAYOUT_KEY = "obsidianLibLayoutStateV1";
40
+ const SHARED_STATE_KEY = "workspaceLayoutStateV1";
41
+ const KNOWN_PLUGIN_RECORD_FIELD_COUNT = 2;
42
+ class WorkspaceLayoutStateKeyImpl {
43
+ key;
44
+ app;
45
+ defaultValue;
46
+ isValid;
47
+ pluginId;
48
+ subscribe;
49
+ constructor(params) {
50
+ this.app = params.app;
51
+ this.defaultValue = params.defaultValue;
52
+ this.isValid = params.isValid;
53
+ this.key = params.key;
54
+ this.pluginId = params.pluginId;
55
+ this.subscribe = params.subscribe;
56
+ }
57
+ get(leaf) {
58
+ return this.resolve(readRawValue(getSharedState(), this.pluginId, this.key, getLeafId(leaf)));
59
+ }
60
+ has(leaf) {
61
+ return readRawValue(getSharedState(), this.pluginId, this.key, getLeafId(leaf)) !== void 0;
62
+ }
63
+ onChange(callback) {
64
+ return this.subscribe((change) => {
65
+ if (change.key !== this.key) {
66
+ return;
67
+ }
68
+ callback({
69
+ leaf: change.leafId === null ? null : this.app.workspace.getLeafById(change.leafId),
70
+ leafId: change.leafId,
71
+ oldValue: this.resolve(change.oldValue),
72
+ value: this.resolve(change.newValue)
73
+ });
74
+ });
75
+ }
76
+ set(value, leaf) {
77
+ assertJsonValue(value);
78
+ this.write(cloneJson(value), getLeafId(leaf));
79
+ }
80
+ unset(leaf) {
81
+ this.write(void 0, getLeafId(leaf));
82
+ }
83
+ resolve(rawValue) {
84
+ return cloneJson(rawValue !== void 0 && this.isValid(rawValue) ? rawValue : this.defaultValue);
85
+ }
86
+ write(newValue, leafId) {
87
+ const state = getSharedState();
88
+ const oldValue = readRawValue(state, this.pluginId, this.key, leafId);
89
+ if (JSON.stringify(oldValue) === JSON.stringify(newValue)) {
90
+ return;
91
+ }
92
+ if (newValue === void 0) {
93
+ delete ensureBucket(state, this.pluginId, leafId)[this.key];
94
+ } else {
95
+ ensureBucket(state, this.pluginId, leafId)[this.key] = newValue;
96
+ }
97
+ this.app.workspace.requestSaveLayout();
98
+ const change = { key: this.key, leafId, newValue, oldValue, pluginId: this.pluginId };
99
+ for (const subscription of snapshot(state.subscriptions)) {
100
+ subscription.onRecordChange(change);
101
+ }
102
+ }
103
+ }
104
+ class WorkspaceLayoutStateComponent extends ComponentEx {
105
+ /**
106
+ * The Obsidian app instance.
107
+ */
108
+ app;
109
+ /**
110
+ * The id of the plugin the values belong to.
111
+ */
112
+ pluginId;
113
+ layoutLoadListeners = /* @__PURE__ */ new Set();
114
+ recordChangeListeners = /* @__PURE__ */ new Set();
115
+ /**
116
+ * Creates a new workspace layout state component.
117
+ *
118
+ * @param params - The parameters.
119
+ * @throws A `TypeError` if the plugin id is empty.
120
+ */
121
+ constructor(params) {
122
+ super();
123
+ if (!params.pluginId) {
124
+ throw new TypeError("The plugin id must not be empty");
125
+ }
126
+ this.app = params.app;
127
+ this.pluginId = params.pluginId;
128
+ }
129
+ /**
130
+ * Defines a typed key.
131
+ *
132
+ * @typeParam T - The value type.
133
+ * @param definition - The key definition.
134
+ * @returns The key handle.
135
+ * @throws A `TypeError` if the key is empty or the default value is not JSON-safe.
136
+ */
137
+ defineKey(definition) {
138
+ if (!definition.key) {
139
+ throw new TypeError("The key must not be empty");
140
+ }
141
+ assertJsonValue(definition.defaultValue);
142
+ return new WorkspaceLayoutStateKeyImpl({
143
+ app: this.app,
144
+ defaultValue: cloneJson(definition.defaultValue),
145
+ isValid: definition.isValid ?? ((_value) => true),
146
+ key: definition.key,
147
+ pluginId: this.pluginId,
148
+ subscribe: (listener) => this.subscribeToRecordChanges(listener)
149
+ });
150
+ }
151
+ /**
152
+ * Subscribes to layout loads: a saved workspace loaded, the layout restored at startup, or the saved layout read when
153
+ * the component is first loaded after layout-ready. Every value may have changed.
154
+ *
155
+ * @param callback - Called after the layout is loaded, once its leaves exist.
156
+ * @returns A function that unsubscribes. Unloading the component unsubscribes too.
157
+ */
158
+ onLayoutLoad(callback) {
159
+ this.layoutLoadListeners.add(callback);
160
+ return () => {
161
+ this.layoutLoadListeners.delete(callback);
162
+ };
163
+ }
164
+ /**
165
+ * Subscribes to the shared installation, installing it when nobody has yet.
166
+ */
167
+ onload() {
168
+ super.onload();
169
+ const state = getSharedState();
170
+ const subscription = {
171
+ install: () => installLayoutState(this.app, state),
172
+ onLayoutLoad: () => {
173
+ for (const listener of snapshot(this.layoutLoadListeners)) {
174
+ invokeListener(listener);
175
+ }
176
+ },
177
+ onRecordChange: (change) => {
178
+ if (change.pluginId !== this.pluginId) {
179
+ return;
180
+ }
181
+ for (const listener of snapshot(this.recordChangeListeners)) {
182
+ invokeListener(() => {
183
+ listener(change);
184
+ });
185
+ }
186
+ }
187
+ };
188
+ state.subscriptions.push(subscription);
189
+ state.installation ??= { owner: subscription, uninstall: subscription.install() };
190
+ this.register(() => {
191
+ this.layoutLoadListeners.clear();
192
+ this.recordChangeListeners.clear();
193
+ state.subscriptions.splice(state.subscriptions.indexOf(subscription), 1);
194
+ if (state.installation?.owner !== subscription) {
195
+ return;
196
+ }
197
+ state.installation.uninstall();
198
+ const nextOwner = state.subscriptions[0];
199
+ state.installation = nextOwner ? { owner: nextOwner, uninstall: nextOwner.install() } : null;
200
+ });
201
+ }
202
+ subscribeToRecordChanges(listener) {
203
+ this.recordChangeListeners.add(listener);
204
+ return () => {
205
+ this.recordChangeListeners.delete(listener);
206
+ };
207
+ }
208
+ }
209
+ function parseWorkspaceLayoutStateRecord(value) {
210
+ if (!isJsonObject(value)) {
211
+ return { plugins: {} };
212
+ }
213
+ const plugins = {};
214
+ const rawPlugins = value["plugins"];
215
+ if (isJsonObject(rawPlugins)) {
216
+ for (const [pluginId, rawPluginRecord] of Object.entries(rawPlugins)) {
217
+ const pluginRecord = parsePluginRecord(rawPluginRecord);
218
+ if (pluginRecord) {
219
+ plugins[pluginId] = pluginRecord;
220
+ }
221
+ }
222
+ }
223
+ return { ...cloneJson(value), plugins };
224
+ }
225
+ function serializeWorkspaceLayoutStateRecord(record, layout) {
226
+ const leafIds = collectLeafIds(layout);
227
+ const serialized = cloneJson(record);
228
+ const plugins = serialized.plugins;
229
+ for (const [pluginId, pluginRecord] of Object.entries(plugins)) {
230
+ for (const [leafId, bucket] of Object.entries(pluginRecord.leaves)) {
231
+ if (!leafIds.has(leafId) || Object.keys(bucket).length === 0) {
232
+ delete pluginRecord.leaves[leafId];
233
+ }
234
+ }
235
+ const isEmpty = Object.keys(pluginRecord.workspace).length === 0 && Object.keys(pluginRecord.leaves).length === 0 && Object.keys(pluginRecord).length === KNOWN_PLUGIN_RECORD_FIELD_COUNT;
236
+ if (isEmpty) {
237
+ delete plugins[pluginId];
238
+ }
239
+ }
240
+ return Object.keys(plugins).length === 0 && Object.keys(serialized).length === 1 ? null : serialized;
241
+ }
242
+ function assertJsonValue(value) {
243
+ if (!isDataStoreJsonValue(value)) {
244
+ throw new TypeError("A workspace layout state value must be JSON-safe");
245
+ }
246
+ }
247
+ function cloneJson(value) {
248
+ return JSON.parse(JSON.stringify(value));
249
+ }
250
+ function collectLeafIds(layout) {
251
+ const leafIds = /* @__PURE__ */ new Set();
252
+ function visit(item) {
253
+ if (!isPlainRecord(item)) {
254
+ return;
255
+ }
256
+ const id = item["id"];
257
+ if (item["type"] === "leaf" && typeof id === "string") {
258
+ leafIds.add(id);
259
+ }
260
+ const children = item["children"];
261
+ if (Array.isArray(children)) {
262
+ for (const child of children) {
263
+ visit(child);
264
+ }
265
+ }
266
+ }
267
+ if (isPlainRecord(layout)) {
268
+ for (const rootKey of ["main", "left", "right", "floating"]) {
269
+ visit(layout[rootKey]);
270
+ }
271
+ }
272
+ return leafIds;
273
+ }
274
+ function ensureBucket(state, pluginId, leafId) {
275
+ const pluginRecord = state.record.plugins[pluginId] ?? { leaves: {}, workspace: {} };
276
+ state.record.plugins[pluginId] = pluginRecord;
277
+ if (leafId === null) {
278
+ return pluginRecord.workspace;
279
+ }
280
+ const bucket = pluginRecord.leaves[leafId] ?? {};
281
+ pluginRecord.leaves[leafId] = bucket;
282
+ return bucket;
283
+ }
284
+ function getBucket(state, pluginId, leafId) {
285
+ const pluginRecord = state.record.plugins[pluginId];
286
+ if (!pluginRecord) {
287
+ return null;
288
+ }
289
+ return leafId === null ? pluginRecord.workspace : pluginRecord.leaves[leafId] ?? null;
290
+ }
291
+ function getLayoutRecordValue(layout) {
292
+ return isPlainRecord(layout) ? layout[WORKSPACE_LAYOUT_STATE_LAYOUT_KEY] : void 0;
293
+ }
294
+ function getLeafId(leaf) {
295
+ return leaf ? leaf.id : null;
296
+ }
297
+ function getSharedState() {
298
+ return getObsidianLibState(SHARED_STATE_KEY, {
299
+ installation: null,
300
+ isHydrated: false,
301
+ record: { plugins: {} },
302
+ subscriptions: []
303
+ }).value;
304
+ }
305
+ function installLayoutState(app, state) {
306
+ let isUninstalled = false;
307
+ const uninstallPatch = around(app.workspace, {
308
+ getLayout: (next) => function patchedGetLayout() {
309
+ const layout = next.call(this);
310
+ const record = serializeWorkspaceLayoutStateRecord(state.record, layout);
311
+ if (record) {
312
+ layout[WORKSPACE_LAYOUT_STATE_LAYOUT_KEY] = record;
313
+ }
314
+ return layout;
315
+ },
316
+ setLayout: (next) => async function patchedSetLayout(layout) {
317
+ state.record = parseWorkspaceLayoutStateRecord(getLayoutRecordValue(layout));
318
+ state.isHydrated = true;
319
+ try {
320
+ await next.call(this, layout);
321
+ } finally {
322
+ notifyLayoutLoad(state);
323
+ }
324
+ }
325
+ });
326
+ if (!state.isHydrated && app.workspace.layoutReady) {
327
+ invokeAsyncSafely(async () => {
328
+ const saved = await app.workspace.readWorkspaceFile();
329
+ if (isUninstalled || state.isHydrated) {
330
+ return;
331
+ }
332
+ mergeMissing(state.record, parseWorkspaceLayoutStateRecord(getLayoutRecordValue(saved)));
333
+ state.isHydrated = true;
334
+ notifyLayoutLoad(state);
335
+ });
336
+ }
337
+ return () => {
338
+ isUninstalled = true;
339
+ uninstallPatch();
340
+ };
341
+ }
342
+ function invokeListener(listener) {
343
+ try {
344
+ listener();
345
+ } catch (error) {
346
+ console.error("A workspace layout state listener failed", error);
347
+ }
348
+ }
349
+ function isJsonObject(value) {
350
+ return isPlainRecord(value) && isDataStoreJsonValue(value);
351
+ }
352
+ function isPlainRecord(value) {
353
+ return typeof value === "object" && value !== null && !Array.isArray(value);
354
+ }
355
+ function mergeMissing(target, source) {
356
+ for (const [pluginId, sourcePlugin] of Object.entries(source.plugins)) {
357
+ const targetPlugin = target.plugins[pluginId];
358
+ if (!targetPlugin) {
359
+ target.plugins[pluginId] = sourcePlugin;
360
+ continue;
361
+ }
362
+ for (const [key, value] of Object.entries(sourcePlugin.workspace)) {
363
+ targetPlugin.workspace[key] ??= value;
364
+ }
365
+ for (const [leafId, bucket] of Object.entries(sourcePlugin.leaves)) {
366
+ targetPlugin.leaves[leafId] ??= bucket;
367
+ }
368
+ }
369
+ }
370
+ function notifyLayoutLoad(state) {
371
+ for (const subscription of snapshot(state.subscriptions)) {
372
+ subscription.onLayoutLoad();
373
+ }
374
+ }
375
+ function parsePluginRecord(value) {
376
+ if (!isJsonObject(value)) {
377
+ return null;
378
+ }
379
+ const leaves = {};
380
+ const rawLeaves = value["leaves"];
381
+ if (isJsonObject(rawLeaves)) {
382
+ for (const [leafId, bucket] of Object.entries(rawLeaves)) {
383
+ if (isJsonObject(bucket)) {
384
+ leaves[leafId] = cloneJson(bucket);
385
+ }
386
+ }
387
+ }
388
+ const rawWorkspace = value["workspace"];
389
+ return {
390
+ ...cloneJson(value),
391
+ leaves,
392
+ workspace: isJsonObject(rawWorkspace) ? cloneJson(rawWorkspace) : {}
393
+ };
394
+ }
395
+ function readRawValue(state, pluginId, key, leafId) {
396
+ return getBucket(state, pluginId, leafId)?.[key];
397
+ }
398
+ export {
399
+ WORKSPACE_LAYOUT_STATE_LAYOUT_KEY,
400
+ WorkspaceLayoutStateComponent,
401
+ parseWorkspaceLayoutStateRecord,
402
+ serializeWorkspaceLayoutStateRecord
403
+ };
404
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3dvcmtzcGFjZS1sYXlvdXQtc3RhdGUtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBLZWVwcyBhIHBsdWdpbidzIGxheW91dC1zY29wZWQgc3RhdGUgaW4gdGhlIHdvcmtzcGFjZSBsYXlvdXQgaXRzZWxmLCBzbyBlYWNoIHNhdmVkIHdvcmtzcGFjZSByZW1lbWJlcnMgaXRzIG93biB2YWx1ZVxuICogYW5kIHN3aXRjaGluZyB3b3Jrc3BhY2VzIHJlc3RvcmVzIGl0LCBpbnN0ZWFkIG9mIG9uZSBnbG9iYWwgdmFsdWUgaW4gYGRhdGEuanNvbmAuXG4gKlxuICogUmVhZCBmcm9tIE9ic2lkaWFuIGAxLjE1LjFgOiBgV29ya3NwYWNlLmdldExheW91dCgpYCBidWlsZHMgYSBmcmVzaCBvYmplY3QgKGBtYWluYCwgYGxlZnRgLCBgcmlnaHRgLCBgbGVmdC1yaWJib25gLFxuICogYGZsb2F0aW5nYCwgYGFjdGl2ZWApIGFuZCBgV29ya3NwYWNlLnNldExheW91dCgpYCBpZ25vcmVzIGV2ZXJ5IG90aGVyIHRvcC1sZXZlbCBrZXkuIGBkZXNlcmlhbGl6ZUxheW91dGAga2VlcHMgZWFjaFxuICogaXRlbSdzIGBpZGAsIHBvcG91dCBsZWF2ZXMgaW5jbHVkZWQuIFRoZSBXb3Jrc3BhY2VzIGNvcmUgcGx1Z2luIHNhdmVzIHRocm91Z2ggYGdldExheW91dCgpYCBhbmQgbG9hZHMgdGhyb3VnaFxuICogYGNoYW5nZUxheW91dCgpYCwgd2hpY2ggY2FsbHMgYHNldExheW91dCgpYC4gU3RhcnR1cCBnb2VzIHRocm91Z2ggYGxvYWRMYXlvdXQoKWAsIGByZWFkV29ya3NwYWNlRmlsZSgpYCBhbmRcbiAqIGBzZXRMYXlvdXQoKWAsIGFmdGVyIHRoZSBwbHVnaW5zIGVuYWJsZWQgYXQgc3RhcnR1cCBoYXZlIGxvYWRlZC4gU28gdHdvIHBhdGNoZXMgb24gdGhlIGBhcHAud29ya3NwYWNlYCBpbnN0YW5jZSBjYXJyeVxuICogdGhlIHdob2xlIHRoaW5nOiBgZ2V0TGF5b3V0YCB3cml0ZXMgdGhlIHJlY29yZHMgdW5kZXIge0BsaW5rIFdPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWX0sIGFuZCBgc2V0TGF5b3V0YFxuICogcmVwbGFjZXMgdGhlbSBmcm9tIHRoZSBsYXlvdXQgaXQgaXMgaGFuZGVkIGJlZm9yZSBhbnkgdmlldyBpcyByZXN0b3JlZC4gUGVyLWxlYWYgc3RhdGUgaXMga2V5ZWQgYnkgbGVhZiBpZCBhdCB0aGVcbiAqIGxheW91dCBsZXZlbCwgc28gbm8gYFdvcmtzcGFjZUl0ZW0uc2VyaWFsaXplYCBvciBgZGVzZXJpYWxpemVMYXlvdXRgIHBhdGNoIGlzIG5lZWRlZC5cbiAqXG4gKiBBIHZpZXcgdGhlIHBsdWdpbiBvd25zIG5lZWRzIG5vbmUgb2YgdGhpczogYFZpZXcuZ2V0U3RhdGVgIC8gYHNldFN0YXRlYCBhbHJlYWR5IHJpZGUgaW4gZWFjaCBsZWFmJ3Mgc3RhdGUuIFRoaXNcbiAqIGNvbXBvbmVudCBpcyBmb3IgdGhlIHNjb3BlIHRob3NlIG1ldGhvZHMgY2Fubm90IHJlcHJlc2VudDogdGhlIHdob2xlIGxheW91dCwgYW5kIGxlYXZlcyBvZiB2aWV3cyB0aGUgcGx1Z2luIGRvZXMgbm90XG4gKiBvd24uXG4gKlxuICogRXZlcnkgcGx1Z2luIGJ1bmRsZXMgaXRzIG93biBjb3B5IG9mIHRoaXMgbGlicmFyeSwgc28gdGhlIHJlY29yZHMsIHRoZSBzdWJzY3JpcHRpb25zIGFuZCBPTkUgaW5zdGFsbGF0aW9uIG9mIHRoZVxuICogcGF0Y2hlcyBsaXZlIGluIHRoZSBzaGFyZWQtc3RhdGUgYmFnIHVuZGVyIGEgdmVyc2lvbmVkIGtleSwgb3duZWQgYnkgb25lIHN1YnNjcmliZXIuIFdoZW4gdGhlIG93bmVyIHVubG9hZHMgd2hpbGVcbiAqIG90aGVycyByZW1haW4sIHRoZSBuZXh0IHN1YnNjcmliZXIgaW5zdGFsbHMgYWdhaW4gZnJvbSBpdHMgb3duIGNvcHkuIFdoYXQgY3Jvc3NlcyB0aGF0IGJvdW5kYXJ5IGlzIGEgd2lyZSBmb3JtYXRcbiAqIGJldHdlZW4gY29waWVzIG9mIGRpZmZlcmVudCB2ZXJzaW9uczogcGxhaW4gb2JqZWN0cyBhbmQgcGxhaW4gZnVuY3Rpb25zIG9ubHksIGZpZWxkcyBvbmx5IGV2ZXIgYWRkZWQsIGFuZCBhIGNoYW5nZSBvZlxuICogbWVhbmluZyBtb3ZlcyB0byBhIG5ldyBrZXkuIFRoZSBsYXlvdXQgcmVjb3JkIGlzIGEgd2lyZSBmb3JtYXQgdG9vLCBwZXJzaXN0ZWQgaW4gYHdvcmtzcGFjZS5qc29uYCBhbmQgaW4gZXZlcnkgc2F2ZWRcbiAqIHdvcmtzcGFjZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgV29ya3NwYWNlLFxuICBXb3Jrc3BhY2VMZWFmXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHtcbiAgSnNvbk9iamVjdCxcbiAgSnNvblZhbHVlXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IHNuYXBzaG90IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FycmF5JztcbmltcG9ydCB7IGludm9rZUFzeW5jU2FmZWx5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcblxuaW1wb3J0IHsgaXNEYXRhU3RvcmVKc29uVmFsdWUgfSBmcm9tICcuLi9kYXRhLXN0b3Jlcy9kYXRhLXN0b3JlLXJlcGxpY2EudHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5MaWJTdGF0ZSB9IGZyb20gJy4uL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IGFyb3VuZCB9IGZyb20gJy4vbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIFRoZSB0b3AtbGV2ZWwga2V5IG9mIGEgc2VyaWFsaXplZCBsYXlvdXQgdGhhdCBob2xkcyB0aGUgcmVjb3Jkcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFdPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWSA9ICdvYnNpZGlhbkxpYkxheW91dFN0YXRlVjEnO1xuXG5jb25zdCBTSEFSRURfU1RBVEVfS0VZID0gJ3dvcmtzcGFjZUxheW91dFN0YXRlVjEnO1xuXG4vKipcbiAqIFRoZSBmaWVsZHMgb2YgYSBwbHVnaW4gcmVjb3JkIHRoaXMgdmVyc2lvbiBrbm93czogYGxlYXZlc2AgYW5kIGB3b3Jrc3BhY2VgLlxuICovXG5jb25zdCBLTk9XTl9QTFVHSU5fUkVDT1JEX0ZJRUxEX0NPVU5UID0gMjtcblxuLyoqXG4gKiBBIGNoYW5nZSBvZiBvbmUga2V5J3MgdmFsdWUsIGluIG9uZSBzY29wZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdmFsdWUgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUNoYW5nZTxUPiB7XG4gIC8qKlxuICAgKiBUaGUgbGVhZiB3aG9zZSB2YWx1ZSBjaGFuZ2VkLCBvciBgbnVsbGAgZm9yIHRoZSB3b3Jrc3BhY2Ugc2NvcGUgb3IgYSBsZWFmIG5vIGxvbmdlciBpbiB0aGUgbGF5b3V0LlxuICAgKi9cbiAgcmVhZG9ubHkgbGVhZjogbnVsbCB8IFdvcmtzcGFjZUxlYWY7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgbGVhZiB3aG9zZSB2YWx1ZSBjaGFuZ2VkLCBvciBgbnVsbGAgZm9yIHRoZSB3b3Jrc3BhY2Ugc2NvcGUuXG4gICAqL1xuICByZWFkb25seSBsZWFmSWQ6IG51bGwgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBiZWZvcmUgdGhlIGNoYW5nZSwgYXMge0BsaW5rIFdvcmtzcGFjZUxheW91dFN0YXRlS2V5LmdldH0gcmVhZCBpdC5cbiAgICovXG4gIHJlYWRvbmx5IG9sZFZhbHVlOiBUO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgYWZ0ZXIgdGhlIGNoYW5nZSwgYXMge0BsaW5rIFdvcmtzcGFjZUxheW91dFN0YXRlS2V5LmdldH0gcmVhZHMgaXQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogVDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgV29ya3NwYWNlTGF5b3V0U3RhdGVDb21wb25lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUxheW91dFN0YXRlQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHBsdWdpbiB0aGUgdmFsdWVzIGJlbG9uZyB0by4gRXZlcnkgdmFsdWUgaXMgbmFtZXNwYWNlZCBieSBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSB0eXBlZCBoYW5kbGUgdG8gb25lIGxheW91dC1zY29wZWQga2V5LlxuICpcbiAqIEV2ZXJ5IG1ldGhvZCB0YWtlcyBhbiBvcHRpb25hbCBsZWFmLiBXaXRob3V0IG9uZSwgdGhlIHZhbHVlIGJlbG9uZ3MgdG8gdGhlIHdob2xlIGxheW91dCAodGhlIHdvcmtzcGFjZSBzY29wZSkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHZhbHVlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlTGF5b3V0U3RhdGVLZXk8VD4ge1xuICAvKipcbiAgICogUmVhZHMgdGhlIHZhbHVlOiBhIGNsb25lIG9mIHRoZSBzdG9yZWQgb25lLCBvciBvZiB0aGUgZGVmYXVsdCB3aGVuIG5vdGhpbmcgaXMgc3RvcmVkIG9yIHRoZSBzdG9yZWQgdmFsdWUgZmFpbHMgdGhlXG4gICAqIGtleSdzIGd1YXJkLlxuICAgKlxuICAgKiBAcGFyYW0gbGVhZiAtIFRoZSBsZWFmLCBvciBub3RoaW5nIGZvciB0aGUgd29ya3NwYWNlIHNjb3BlLlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBnZXQ6IChsZWFmPzogV29ya3NwYWNlTGVhZikgPT4gVDtcblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSB2YWx1ZSBpcyBzdG9yZWQsIHZhbGlkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIGxlYWYgLSBUaGUgbGVhZiwgb3Igbm90aGluZyBmb3IgdGhlIHdvcmtzcGFjZSBzY29wZS5cbiAgICogQHJldHVybnMgV2hldGhlciBhIHZhbHVlIGlzIHN0b3JlZC5cbiAgICovXG4gIHJlYWRvbmx5IGhhczogKGxlYWY/OiBXb3Jrc3BhY2VMZWFmKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IG5hbWUsIHVuaXF1ZSB3aXRoaW4gdGhlIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIGNoYW5nZXMgb2YgdGhpcyBrZXkgbWFkZSB0aHJvdWdoIGBzZXRgIG9yIGB1bnNldGAsIGluIGFueSBzY29wZSBhbmQgZnJvbSBhbnkgY29weSBvZiB0aGUgbGlicmFyeS4gQVxuICAgKiBsYXlvdXQgbG9hZCBpcyByZXBvcnRlZCB0aHJvdWdoIHtAbGluayBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUNvbXBvbmVudC5vbkxheW91dExvYWR9IGluc3RlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxlZCBhZnRlciBlYWNoIGNoYW5nZS5cbiAgICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHVuc3Vic2NyaWJlcy4gVW5sb2FkaW5nIHRoZSBjb21wb25lbnQgdW5zdWJzY3JpYmVzIHRvby5cbiAgICovXG4gIHJlYWRvbmx5IG9uQ2hhbmdlOiAoY2FsbGJhY2s6IChjaGFuZ2U6IFdvcmtzcGFjZUxheW91dFN0YXRlQ2hhbmdlPFQ+KSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgYSBjbG9uZSBvZiB0aGUgdmFsdWUgYW5kIHJlcXVlc3RzIGEgbGF5b3V0IHNhdmUuIFN0b3JpbmcgYSB2YWx1ZSBlcXVhbCB0byB0aGUgc3RvcmVkIG9uZSBkb2VzIG5vdGhpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZS4gSXQgbXVzdCBiZSBKU09OLXNhZmU7IGBudWxsYCBpcyBzdG9yZWQgYXMgYG51bGxgLlxuICAgKiBAcGFyYW0gbGVhZiAtIFRoZSBsZWFmLCBvciBub3RoaW5nIGZvciB0aGUgd29ya3NwYWNlIHNjb3BlLlxuICAgKiBAdGhyb3dzIEEgYFR5cGVFcnJvcmAgaWYgdGhlIHZhbHVlIGlzIG5vdCBKU09OLXNhZmUuXG4gICAqL1xuICByZWFkb25seSBzZXQ6ICh2YWx1ZTogVCwgbGVhZj86IFdvcmtzcGFjZUxlYWYpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHN0b3JlZCB2YWx1ZSwgc28gYGdldGAgcmVhZHMgdGhlIGRlZmF1bHQgYWdhaW4sIGFuZCByZXF1ZXN0cyBhIGxheW91dCBzYXZlLlxuICAgKlxuICAgKiBAcGFyYW0gbGVhZiAtIFRoZSBsZWFmLCBvciBub3RoaW5nIGZvciB0aGUgd29ya3NwYWNlIHNjb3BlLlxuICAgKi9cbiAgcmVhZG9ubHkgdW5zZXQ6IChsZWFmPzogV29ya3NwYWNlTGVhZikgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgbGF5b3V0LXNjb3BlZCBrZXkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHZhbHVlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlTGF5b3V0U3RhdGVLZXlEZWZpbml0aW9uPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSByZWFkIHdoZW4gbm90aGluZyB2YWxpZCBpcyBzdG9yZWQuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0VmFsdWU6IFQ7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBhIHN0b3JlZCB2YWx1ZS4gQSB2YWx1ZSB0aGF0IGZhaWxzIHJlYWRzIGFzIHRoZSBkZWZhdWx0IGFuZCBzdGF5cyBzdG9yZWQgdW50aWwgaXQgaXMgcmVwbGFjZWQgb3IgdW5zZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFjY2VwdHMgZXZlcnkgSlNPTiB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzVmFsaWQ/OiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFQ7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgbmFtZSwgdW5pcXVlIHdpdGhpbiB0aGUgcGx1Z2luLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT25lIHBsdWdpbidzIHJlY29yZHMuIEZpZWxkcyBhIG5ld2VyIGNvcHkgYWRkcyBhcmUgcHJlc2VydmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUxheW91dFN0YXRlUGx1Z2luUmVjb3JkIHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMgYnkgbGVhZiBpZCwgdGhlbiBieSBrZXkuXG4gICAqL1xuICByZWFkb25seSBsZWF2ZXM6IFJlY29yZDxzdHJpbmcsIEpzb25SZWNvcmQ+O1xuXG4gIC8qKlxuICAgKiBGaWVsZHMgYSBuZXdlciBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFkZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgW2ZpZWxkOiBzdHJpbmddOiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlLXNjb3BlIHZhbHVlcyBieSBrZXkuXG4gICAqL1xuICByZWFkb25seSB3b3Jrc3BhY2U6IEpzb25SZWNvcmQ7XG59XG5cbi8qKlxuICogVGhlIHJlY29yZCBwZXJzaXN0ZWQgdW5kZXIge0BsaW5rIFdPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWX0uIEZpZWxkcyBhIG5ld2VyIGNvcHkgYWRkcyBhcmUgcHJlc2VydmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkIHtcbiAgLyoqXG4gICAqIFRoZSByZWNvcmRzIGJ5IHBsdWdpbiBpZC5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbnM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUxheW91dFN0YXRlUGx1Z2luUmVjb3JkPjtcblxuICAvKipcbiAgICogRmllbGRzIGEgbmV3ZXIgY29weSBvZiB0aGUgbGlicmFyeSBhZGRlZC5cbiAgICovXG4gIHJlYWRvbmx5IFtmaWVsZDogc3RyaW5nXTogdW5rbm93bjtcbn1cblxudHlwZSBKc29uUmVjb3JkID0gUmVjb3JkPHN0cmluZywgSnNvblZhbHVlPjtcblxuaW50ZXJmYWNlIFJlY29yZENoYW5nZSB7XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICByZWFkb25seSBsZWFmSWQ6IG51bGwgfCBzdHJpbmc7XG4gIHJlYWRvbmx5IG5ld1ZhbHVlOiBKc29uVmFsdWUgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG9sZFZhbHVlOiBKc29uVmFsdWUgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUluc3RhbGxhdGlvbiB7XG4gIHJlYWRvbmx5IG93bmVyOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZVN1YnNjcmlwdGlvbjtcbiAgcmVhZG9ubHkgdW5pbnN0YWxsOiAoKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgV29ya3NwYWNlTGF5b3V0U3RhdGVLZXlJbXBsUGFyYW1zPFQ+IHtcbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZTogVDtcbiAgcmVhZG9ubHkgaXNWYWxpZDogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBUO1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3Vic2NyaWJlOiAobGlzdGVuZXI6IChjaGFuZ2U6IFJlY29yZENoYW5nZSkgPT4gdm9pZCkgPT4gKCkgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIFdvcmtzcGFjZUxheW91dFN0YXRlU2hhcmVkU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBTdWJzY3JpYmVyIGNoYW5nZXMgcmVwbGFjZSBvciBjbGVhciB0aGUgc2hhcmVkIGluc3RhbGxhdGlvbi5cbiAgaW5zdGFsbGF0aW9uOiBudWxsIHwgV29ya3NwYWNlTGF5b3V0U3RhdGVJbnN0YWxsYXRpb247XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIFNldCBvbmNlIGEgbGF5b3V0IG9yIHRoZSBzYXZlZCBsYXlvdXQgZmlsZSBoYXMgYmVlbiByZWFkLlxuICBpc0h5ZHJhdGVkOiBib29sZWFuO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBBIGxheW91dCBsb2FkIHJlcGxhY2VzIHRoZSByZWNvcmRzLlxuICByZWNvcmQ6IFdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkO1xuICByZWFkb25seSBzdWJzY3JpcHRpb25zOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZVN1YnNjcmlwdGlvbltdO1xufVxuXG4vKipcbiAqIEEgc3Vic2NyaWJlciBpbiB0aGUgc2hhcmVkIHN0YXRlLiBUaGUgc2hhcGUgaXMgcGFydCBvZiB0aGUgd2lyZSBmb3JtYXQgYmV0d2VlbiBjb3BpZXM6IGZpZWxkcyBhcmUgb25seSBldmVyIGFkZGVkLlxuICovXG5pbnRlcmZhY2UgV29ya3NwYWNlTGF5b3V0U3RhdGVTdWJzY3JpcHRpb24ge1xuICByZWFkb25seSBpbnN0YWxsOiAoKSA9PiAoKSA9PiB2b2lkO1xuICByZWFkb25seSBvbkxheW91dExvYWQ6ICgpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IG9uUmVjb3JkQ2hhbmdlOiAoY2hhbmdlOiBSZWNvcmRDaGFuZ2UpID0+IHZvaWQ7XG59XG5cbmNsYXNzIFdvcmtzcGFjZUxheW91dFN0YXRlS2V5SW1wbDxUPiBpbXBsZW1lbnRzIFdvcmtzcGFjZUxheW91dFN0YXRlS2V5PFQ+IHtcbiAgcHVibGljIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFZhbHVlOiBUO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzVmFsaWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gdmFsdWUgaXMgVDtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmliZTogKGxpc3RlbmVyOiAoY2hhbmdlOiBSZWNvcmRDaGFuZ2UpID0+IHZvaWQpID0+ICgpID0+IHZvaWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogV29ya3NwYWNlTGF5b3V0U3RhdGVLZXlJbXBsUGFyYW1zPFQ+KSB7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gcGFyYW1zLmRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLmlzVmFsaWQgPSBwYXJhbXMuaXNWYWxpZDtcbiAgICB0aGlzLmtleSA9IHBhcmFtcy5rZXk7XG4gICAgdGhpcy5wbHVnaW5JZCA9IHBhcmFtcy5wbHVnaW5JZDtcbiAgICB0aGlzLnN1YnNjcmliZSA9IHBhcmFtcy5zdWJzY3JpYmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGxlYWY/OiBXb3Jrc3BhY2VMZWFmKTogVCB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZShyZWFkUmF3VmFsdWUoZ2V0U2hhcmVkU3RhdGUoKSwgdGhpcy5wbHVnaW5JZCwgdGhpcy5rZXksIGdldExlYWZJZChsZWFmKSkpO1xuICB9XG5cbiAgcHVibGljIGhhcyhsZWFmPzogV29ya3NwYWNlTGVhZik6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWFkUmF3VmFsdWUoZ2V0U2hhcmVkU3RhdGUoKSwgdGhpcy5wbHVnaW5JZCwgdGhpcy5rZXksIGdldExlYWZJZChsZWFmKSkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBvbkNoYW5nZShjYWxsYmFjazogKGNoYW5nZTogV29ya3NwYWNlTGF5b3V0U3RhdGVDaGFuZ2U8VD4pID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpYmUoKGNoYW5nZSkgPT4ge1xuICAgICAgaWYgKGNoYW5nZS5rZXkgIT09IHRoaXMua2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgbGVhZjogY2hhbmdlLmxlYWZJZCA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhZkJ5SWQoY2hhbmdlLmxlYWZJZCksXG4gICAgICAgIGxlYWZJZDogY2hhbmdlLmxlYWZJZCxcbiAgICAgICAgb2xkVmFsdWU6IHRoaXMucmVzb2x2ZShjaGFuZ2Uub2xkVmFsdWUpLFxuICAgICAgICB2YWx1ZTogdGhpcy5yZXNvbHZlKGNoYW5nZS5uZXdWYWx1ZSlcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldCh2YWx1ZTogVCwgbGVhZj86IFdvcmtzcGFjZUxlYWYpOiB2b2lkIHtcbiAgICBhc3NlcnRKc29uVmFsdWUodmFsdWUpO1xuICAgIHRoaXMud3JpdGUoY2xvbmVKc29uKHZhbHVlKSwgZ2V0TGVhZklkKGxlYWYpKTtcbiAgfVxuXG4gIHB1YmxpYyB1bnNldChsZWFmPzogV29ya3NwYWNlTGVhZik6IHZvaWQge1xuICAgIHRoaXMud3JpdGUodW5kZWZpbmVkLCBnZXRMZWFmSWQobGVhZikpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlKHJhd1ZhbHVlOiBKc29uVmFsdWUgfCB1bmRlZmluZWQpOiBUIHtcbiAgICByZXR1cm4gY2xvbmVKc29uKHJhd1ZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pc1ZhbGlkKHJhd1ZhbHVlKSA/IHJhd1ZhbHVlIDogdGhpcy5kZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZShuZXdWYWx1ZTogSnNvblZhbHVlIHwgdW5kZWZpbmVkLCBsZWFmSWQ6IG51bGwgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFNoYXJlZFN0YXRlKCk7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSByZWFkUmF3VmFsdWUoc3RhdGUsIHRoaXMucGx1Z2luSWQsIHRoaXMua2V5LCBsZWFmSWQpO1xuICAgIGlmIChKU09OLnN0cmluZ2lmeShvbGRWYWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIHN0b3JlZCBvbGQgdmFsdWUgbWVhbnMgdGhlIGJ1Y2tldCBleGlzdHMsIHNvIHRoaXMgY3JlYXRlcyBub3RoaW5nLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBUaGUgYnVja2V0IGlzIGEgcGxhaW4gcmVjb3JkIGtleWVkIGJ5IHVzZXItY2hvc2VuIG5hbWVzLlxuICAgICAgZGVsZXRlIGVuc3VyZUJ1Y2tldChzdGF0ZSwgdGhpcy5wbHVnaW5JZCwgbGVhZklkKVt0aGlzLmtleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuc3VyZUJ1Y2tldChzdGF0ZSwgdGhpcy5wbHVnaW5JZCwgbGVhZklkKVt0aGlzLmtleV0gPSBuZXdWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFwcC53b3Jrc3BhY2UucmVxdWVzdFNhdmVMYXlvdXQoKTtcbiAgICBjb25zdCBjaGFuZ2U6IFJlY29yZENoYW5nZSA9IHsga2V5OiB0aGlzLmtleSwgbGVhZklkLCBuZXdWYWx1ZSwgb2xkVmFsdWUsIHBsdWdpbklkOiB0aGlzLnBsdWdpbklkIH07XG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc25hcHNob3Qoc3RhdGUuc3Vic2NyaXB0aW9ucykpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblJlY29yZENoYW5nZShjaGFuZ2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEtlZXBzIGEgcGx1Z2luJ3MgbGF5b3V0LXNjb3BlZCB2YWx1ZXMgaW4gdGhlIHdvcmtzcGFjZSBsYXlvdXQsIHNvIHNhdmVkIHdvcmtzcGFjZXMgZWFjaCByZXN0b3JlIHRoZWlyIG93bi5cbiAqXG4gKiBBbnkgbnVtYmVyIG9mIHRoZXNlLCBpbiBhbnkgbnVtYmVyIG9mIHBsdWdpbnMsIHNoYXJlIG9uZSBpbnN0YWxsYXRpb24gcGVyIHtAbGluayBBcHB9LiBWYWx1ZXMgYXJlIHJlc3RvcmVkIHdoZW4gYVxuICogbGF5b3V0IGxvYWRzLCB3aGljaCBSRVBMQUNFUyBldmVyeSB2YWx1ZTogd3JpdGUgdGhlbSBhZnRlciB7QGxpbmsgV29ya3NwYWNlLm9uTGF5b3V0UmVhZHl9LCBhbmQgcmUtcmVhZCB0aGVtIGluXG4gKiB7QGxpbmsgb25MYXlvdXRMb2FkfS5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtzcGFjZUxheW91dFN0YXRlQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBwbHVnaW4gdGhlIHZhbHVlcyBiZWxvbmcgdG8uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGxheW91dExvYWRMaXN0ZW5lcnMgPSBuZXcgU2V0PCgpID0+IHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVjb3JkQ2hhbmdlTGlzdGVuZXJzID0gbmV3IFNldDwoY2hhbmdlOiBSZWNvcmRDaGFuZ2UpID0+IHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgd29ya3NwYWNlIGxheW91dCBzdGF0ZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHRocm93cyBBIGBUeXBlRXJyb3JgIGlmIHRoZSBwbHVnaW4gaWQgaXMgZW1wdHkuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoIXBhcmFtcy5wbHVnaW5JZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBsdWdpbiBpZCBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICAgIH1cbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5wbHVnaW5JZCA9IHBhcmFtcy5wbHVnaW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgdHlwZWQga2V5LlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdmFsdWUgdHlwZS5cbiAgICogQHBhcmFtIGRlZmluaXRpb24gLSBUaGUga2V5IGRlZmluaXRpb24uXG4gICAqIEByZXR1cm5zIFRoZSBrZXkgaGFuZGxlLlxuICAgKiBAdGhyb3dzIEEgYFR5cGVFcnJvcmAgaWYgdGhlIGtleSBpcyBlbXB0eSBvciB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBub3QgSlNPTi1zYWZlLlxuICAgKi9cbiAgcHVibGljIGRlZmluZUtleTxUPihkZWZpbml0aW9uOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUtleURlZmluaXRpb248VD4pOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZUtleTxUPiB7XG4gICAgaWYgKCFkZWZpbml0aW9uLmtleSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGtleSBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICAgIH1cbiAgICBhc3NlcnRKc29uVmFsdWUoZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBuZXcgV29ya3NwYWNlTGF5b3V0U3RhdGVLZXlJbXBsPFQ+KHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBkZWZhdWx0VmFsdWU6IGNsb25lSnNvbihkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSksXG4gICAgICBpc1ZhbGlkOiBkZWZpbml0aW9uLmlzVmFsaWQgPz8gKChfdmFsdWUpOiBfdmFsdWUgaXMgVCA9PiB0cnVlKSxcbiAgICAgIGtleTogZGVmaW5pdGlvbi5rZXksXG4gICAgICBwbHVnaW5JZDogdGhpcy5wbHVnaW5JZCxcbiAgICAgIHN1YnNjcmliZTogKGxpc3RlbmVyKSA9PiB0aGlzLnN1YnNjcmliZVRvUmVjb3JkQ2hhbmdlcyhsaXN0ZW5lcilcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIGxheW91dCBsb2FkczogYSBzYXZlZCB3b3Jrc3BhY2UgbG9hZGVkLCB0aGUgbGF5b3V0IHJlc3RvcmVkIGF0IHN0YXJ0dXAsIG9yIHRoZSBzYXZlZCBsYXlvdXQgcmVhZCB3aGVuXG4gICAqIHRoZSBjb21wb25lbnQgaXMgZmlyc3QgbG9hZGVkIGFmdGVyIGxheW91dC1yZWFkeS4gRXZlcnkgdmFsdWUgbWF5IGhhdmUgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGVkIGFmdGVyIHRoZSBsYXlvdXQgaXMgbG9hZGVkLCBvbmNlIGl0cyBsZWF2ZXMgZXhpc3QuXG4gICAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB1bnN1YnNjcmliZXMuIFVubG9hZGluZyB0aGUgY29tcG9uZW50IHVuc3Vic2NyaWJlcyB0b28uXG4gICAqL1xuICBwdWJsaWMgb25MYXlvdXRMb2FkKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgdGhpcy5sYXlvdXRMb2FkTGlzdGVuZXJzLmFkZChjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMubGF5b3V0TG9hZExpc3RlbmVycy5kZWxldGUoY2FsbGJhY2spO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byB0aGUgc2hhcmVkIGluc3RhbGxhdGlvbiwgaW5zdGFsbGluZyBpdCB3aGVuIG5vYm9keSBoYXMgeWV0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vbmxvYWQoKTtcblxuICAgIGNvbnN0IHN0YXRlID0gZ2V0U2hhcmVkU3RhdGUoKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb246IFdvcmtzcGFjZUxheW91dFN0YXRlU3Vic2NyaXB0aW9uID0ge1xuICAgICAgaW5zdGFsbDogKCkgPT4gaW5zdGFsbExheW91dFN0YXRlKHRoaXMuYXBwLCBzdGF0ZSksXG4gICAgICBvbkxheW91dExvYWQ6ICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBzbmFwc2hvdCh0aGlzLmxheW91dExvYWRMaXN0ZW5lcnMpKSB7XG4gICAgICAgICAgaW52b2tlTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25SZWNvcmRDaGFuZ2U6IChjaGFuZ2UpID0+IHtcbiAgICAgICAgaWYgKGNoYW5nZS5wbHVnaW5JZCAhPT0gdGhpcy5wbHVnaW5JZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHNuYXBzaG90KHRoaXMucmVjb3JkQ2hhbmdlTGlzdGVuZXJzKSkge1xuICAgICAgICAgIGludm9rZUxpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgICAgIGxpc3RlbmVyKGNoYW5nZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHN0YXRlLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgIHN0YXRlLmluc3RhbGxhdGlvbiA/Pz0geyBvd25lcjogc3Vic2NyaXB0aW9uLCB1bmluc3RhbGw6IHN1YnNjcmlwdGlvbi5pbnN0YWxsKCkgfTtcblxuICAgIHRoaXMucmVnaXN0ZXIoKCkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXRMb2FkTGlzdGVuZXJzLmNsZWFyKCk7XG4gICAgICB0aGlzLnJlY29yZENoYW5nZUxpc3RlbmVycy5jbGVhcigpO1xuICAgICAgc3RhdGUuc3Vic2NyaXB0aW9ucy5zcGxpY2Uoc3RhdGUuc3Vic2NyaXB0aW9ucy5pbmRleE9mKHN1YnNjcmlwdGlvbiksIDEpO1xuICAgICAgaWYgKHN0YXRlLmluc3RhbGxhdGlvbj8ub3duZXIgIT09IHN1YnNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLmluc3RhbGxhdGlvbi51bmluc3RhbGwoKTtcbiAgICAgIGNvbnN0IG5leHRPd25lciA9IHN0YXRlLnN1YnNjcmlwdGlvbnNbMF07XG4gICAgICBzdGF0ZS5pbnN0YWxsYXRpb24gPSBuZXh0T3duZXIgPyB7IG93bmVyOiBuZXh0T3duZXIsIHVuaW5zdGFsbDogbmV4dE93bmVyLmluc3RhbGwoKSB9IDogbnVsbDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9SZWNvcmRDaGFuZ2VzKGxpc3RlbmVyOiAoY2hhbmdlOiBSZWNvcmRDaGFuZ2UpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZENoYW5nZUxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLnJlY29yZENoYW5nZUxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBwZXJzaXN0ZWQgcmVjb3JkLiBBIHBhcnQgdGhhdCBpcyBtYWxmb3JtZWQgaXMgZHJvcHBlZCBvbmUgbGV2ZWwgYXQgYSB0aW1lOiBhIG1hbGZvcm1lZCByZWNvcmQgcmVhZHMgYXNcbiAqIGVtcHR5LCBhIG1hbGZvcm1lZCBwbHVnaW4gcmVjb3JkIGRyb3BzIG9ubHkgdGhhdCBwbHVnaW4sIGFuZCBhIG1hbGZvcm1lZCBsZWFmIGJ1Y2tldCBkcm9wcyBvbmx5IHRoYXQgbGVhZi4gRmllbGRzIHRoaXNcbiAqIGNvcHkgZG9lcyBub3Qga25vdyBhcmUga2VwdC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgZm91bmQgdW5kZXIge0BsaW5rIFdPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWX0uXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIHJlY29yZCwgc2hhcmluZyBub3RoaW5nIHdpdGggdGhlIGlucHV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VXb3Jrc3BhY2VMYXlvdXRTdGF0ZVJlY29yZCh2YWx1ZTogdW5rbm93bik6IFdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkIHtcbiAgaWYgKCFpc0pzb25PYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHsgcGx1Z2luczoge30gfTtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbnM6IFJlY29yZDxzdHJpbmcsIFdvcmtzcGFjZUxheW91dFN0YXRlUGx1Z2luUmVjb3JkPiA9IHt9O1xuICBjb25zdCByYXdQbHVnaW5zID0gdmFsdWVbJ3BsdWdpbnMnXTtcbiAgaWYgKGlzSnNvbk9iamVjdChyYXdQbHVnaW5zKSkge1xuICAgIGZvciAoY29uc3QgW3BsdWdpbklkLCByYXdQbHVnaW5SZWNvcmRdIG9mIE9iamVjdC5lbnRyaWVzKHJhd1BsdWdpbnMpKSB7XG4gICAgICBjb25zdCBwbHVnaW5SZWNvcmQgPSBwYXJzZVBsdWdpblJlY29yZChyYXdQbHVnaW5SZWNvcmQpO1xuICAgICAgaWYgKHBsdWdpblJlY29yZCkge1xuICAgICAgICBwbHVnaW5zW3BsdWdpbklkXSA9IHBsdWdpblJlY29yZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyAuLi5jbG9uZUpzb24odmFsdWUpLCBwbHVnaW5zIH07XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSByZWNvcmQgdG8gcGVyc2lzdCBpbnRvIGEgc2VyaWFsaXplZCBsYXlvdXQ6IGxlYWYgYnVja2V0cyBmb3IgbGVhdmVzIGFic2VudCBmcm9tIHRoZSBsYXlvdXQgYXJlIGxlZnQgb3V0LFxuICogYW5kIHNvIGFyZSBwbHVnaW5zIHdpdGggbm90aGluZyBsZWZ0LlxuICpcbiAqIEBwYXJhbSByZWNvcmQgLSBUaGUgY3VycmVudCByZWNvcmQuXG4gKiBAcGFyYW0gbGF5b3V0IC0gVGhlIHNlcmlhbGl6ZWQgbGF5b3V0LlxuICogQHJldHVybnMgVGhlIHJlY29yZCB0byBwZXJzaXN0LCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIHBlcnNpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVXb3Jrc3BhY2VMYXlvdXRTdGF0ZVJlY29yZChyZWNvcmQ6IFdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkLCBsYXlvdXQ6IHVua25vd24pOiBudWxsIHwgV29ya3NwYWNlTGF5b3V0U3RhdGVSZWNvcmQge1xuICBjb25zdCBsZWFmSWRzID0gY29sbGVjdExlYWZJZHMobGF5b3V0KTtcbiAgY29uc3Qgc2VyaWFsaXplZCA9IGNsb25lSnNvbihyZWNvcmQpO1xuICBjb25zdCBwbHVnaW5zID0gc2VyaWFsaXplZC5wbHVnaW5zO1xuICBmb3IgKGNvbnN0IFtwbHVnaW5JZCwgcGx1Z2luUmVjb3JkXSBvZiBPYmplY3QuZW50cmllcyhwbHVnaW5zKSkge1xuICAgIGZvciAoY29uc3QgW2xlYWZJZCwgYnVja2V0XSBvZiBPYmplY3QuZW50cmllcyhwbHVnaW5SZWNvcmQubGVhdmVzKSkge1xuICAgICAgaWYgKCFsZWFmSWRzLmhhcyhsZWFmSWQpIHx8IE9iamVjdC5rZXlzKGJ1Y2tldCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gTGVhZiBpZHMgYXJlIHJlY29yZCBrZXlzLlxuICAgICAgICBkZWxldGUgcGx1Z2luUmVjb3JkLmxlYXZlc1tsZWFmSWRdO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpc0VtcHR5ID0gT2JqZWN0LmtleXMocGx1Z2luUmVjb3JkLndvcmtzcGFjZSkubGVuZ3RoID09PSAwICYmIE9iamVjdC5rZXlzKHBsdWdpblJlY29yZC5sZWF2ZXMpLmxlbmd0aCA9PT0gMFxuICAgICAgJiYgT2JqZWN0LmtleXMocGx1Z2luUmVjb3JkKS5sZW5ndGggPT09IEtOT1dOX1BMVUdJTl9SRUNPUkRfRklFTERfQ09VTlQ7XG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gUGx1Z2luIGlkcyBhcmUgcmVjb3JkIGtleXMuXG4gICAgICBkZWxldGUgcGx1Z2luc1twbHVnaW5JZF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHBsdWdpbnMpLmxlbmd0aCA9PT0gMCAmJiBPYmplY3Qua2V5cyhzZXJpYWxpemVkKS5sZW5ndGggPT09IDEgPyBudWxsIDogc2VyaWFsaXplZDtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SnNvblZhbHVlKHZhbHVlOiB1bmtub3duKTogYXNzZXJ0cyB2YWx1ZSBpcyBKc29uVmFsdWUge1xuICBpZiAoIWlzRGF0YVN0b3JlSnNvblZhbHVlKHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Egd29ya3NwYWNlIGxheW91dCBzdGF0ZSB2YWx1ZSBtdXN0IGJlIEpTT04tc2FmZScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lSnNvbjxUPih2YWx1ZTogVCk6IFQge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkgYXMgc3RyaW5nKSBhcyBUO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0TGVhZklkcyhsYXlvdXQ6IHVua25vd24pOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IGxlYWZJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZnVuY3Rpb24gdmlzaXQoaXRlbTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICghaXNQbGFpblJlY29yZChpdGVtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IGl0ZW1bJ2lkJ107XG4gICAgaWYgKGl0ZW1bJ3R5cGUnXSA9PT0gJ2xlYWYnICYmIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxlYWZJZHMuYWRkKGlkKTtcbiAgICB9XG4gICAgY29uc3QgY2hpbGRyZW4gPSBpdGVtWydjaGlsZHJlbiddO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICB2aXNpdChjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzUGxhaW5SZWNvcmQobGF5b3V0KSkge1xuICAgIGZvciAoY29uc3Qgcm9vdEtleSBvZiBbJ21haW4nLCAnbGVmdCcsICdyaWdodCcsICdmbG9hdGluZyddKSB7XG4gICAgICB2aXNpdChsYXlvdXRbcm9vdEtleV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGVhZklkcztcbn1cblxuZnVuY3Rpb24gZW5zdXJlQnVja2V0KHN0YXRlOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZVNoYXJlZFN0YXRlLCBwbHVnaW5JZDogc3RyaW5nLCBsZWFmSWQ6IG51bGwgfCBzdHJpbmcpOiBKc29uUmVjb3JkIHtcbiAgY29uc3QgcGx1Z2luUmVjb3JkID0gc3RhdGUucmVjb3JkLnBsdWdpbnNbcGx1Z2luSWRdID8/IHsgbGVhdmVzOiB7fSwgd29ya3NwYWNlOiB7fSB9O1xuICBzdGF0ZS5yZWNvcmQucGx1Z2luc1twbHVnaW5JZF0gPSBwbHVnaW5SZWNvcmQ7XG4gIGlmIChsZWFmSWQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gcGx1Z2luUmVjb3JkLndvcmtzcGFjZTtcbiAgfVxuXG4gIGNvbnN0IGJ1Y2tldCA9IHBsdWdpblJlY29yZC5sZWF2ZXNbbGVhZklkXSA/PyB7fTtcbiAgcGx1Z2luUmVjb3JkLmxlYXZlc1tsZWFmSWRdID0gYnVja2V0O1xuICByZXR1cm4gYnVja2V0O1xufVxuXG5mdW5jdGlvbiBnZXRCdWNrZXQoc3RhdGU6IFdvcmtzcGFjZUxheW91dFN0YXRlU2hhcmVkU3RhdGUsIHBsdWdpbklkOiBzdHJpbmcsIGxlYWZJZDogbnVsbCB8IHN0cmluZyk6IEpzb25SZWNvcmQgfCBudWxsIHtcbiAgY29uc3QgcGx1Z2luUmVjb3JkID0gc3RhdGUucmVjb3JkLnBsdWdpbnNbcGx1Z2luSWRdO1xuICBpZiAoIXBsdWdpblJlY29yZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBsZWFmSWQgPT09IG51bGwgPyBwbHVnaW5SZWNvcmQud29ya3NwYWNlIDogcGx1Z2luUmVjb3JkLmxlYXZlc1tsZWFmSWRdID8/IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldExheW91dFJlY29yZFZhbHVlKGxheW91dDogdW5rbm93bik6IHVua25vd24ge1xuICByZXR1cm4gaXNQbGFpblJlY29yZChsYXlvdXQpID8gbGF5b3V0W1dPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWV0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldExlYWZJZChsZWFmOiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmKTogbnVsbCB8IHN0cmluZyB7XG4gIHJldHVybiBsZWFmID8gbGVhZi5pZCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXJlZFN0YXRlKCk6IFdvcmtzcGFjZUxheW91dFN0YXRlU2hhcmVkU3RhdGUge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5MaWJTdGF0ZTxXb3Jrc3BhY2VMYXlvdXRTdGF0ZVNoYXJlZFN0YXRlPihTSEFSRURfU1RBVEVfS0VZLCB7XG4gICAgaW5zdGFsbGF0aW9uOiBudWxsLFxuICAgIGlzSHlkcmF0ZWQ6IGZhbHNlLFxuICAgIHJlY29yZDogeyBwbHVnaW5zOiB7fSB9LFxuICAgIHN1YnNjcmlwdGlvbnM6IFtdXG4gIH0pLnZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsTGF5b3V0U3RhdGUoYXBwOiBBcHAsIHN0YXRlOiBXb3Jrc3BhY2VMYXlvdXRTdGF0ZVNoYXJlZFN0YXRlKTogKCkgPT4gdm9pZCB7XG4gIGxldCBpc1VuaW5zdGFsbGVkID0gZmFsc2U7XG4gIGNvbnN0IHVuaW5zdGFsbFBhdGNoID0gYXJvdW5kKGFwcC53b3Jrc3BhY2UsIHtcbiAgICBnZXRMYXlvdXQ6IChuZXh0KSA9PlxuICAgICAgZnVuY3Rpb24gcGF0Y2hlZEdldExheW91dCh0aGlzOiBXb3Jrc3BhY2UpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IGxheW91dCA9IG5leHQuY2FsbCh0aGlzKTtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gc2VyaWFsaXplV29ya3NwYWNlTGF5b3V0U3RhdGVSZWNvcmQoc3RhdGUucmVjb3JkLCBsYXlvdXQpO1xuICAgICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgICAgbGF5b3V0W1dPUktTUEFDRV9MQVlPVVRfU1RBVEVfTEFZT1VUX0tFWV0gPSByZWNvcmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheW91dDtcbiAgICAgIH0sXG4gICAgc2V0TGF5b3V0OiAobmV4dCkgPT5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIHBhdGNoZWRTZXRMYXlvdXQodGhpczogV29ya3NwYWNlLCBsYXlvdXQ6IFBhcmFtZXRlcnM8V29ya3NwYWNlWydzZXRMYXlvdXQnXT5bMF0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgc3RhdGUucmVjb3JkID0gcGFyc2VXb3Jrc3BhY2VMYXlvdXRTdGF0ZVJlY29yZChnZXRMYXlvdXRSZWNvcmRWYWx1ZShsYXlvdXQpKTtcbiAgICAgICAgc3RhdGUuaXNIeWRyYXRlZCA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgbmV4dC5jYWxsKHRoaXMsIGxheW91dCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgbm90aWZ5TGF5b3V0TG9hZChzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFzdGF0ZS5pc0h5ZHJhdGVkICYmIGFwcC53b3Jrc3BhY2UubGF5b3V0UmVhZHkpIHtcbiAgICAvLyBMb2FkZWQgYWZ0ZXIgdGhlIGxheW91dDogcmVhZCB0aGUgbGF5b3V0IHRoZSBsYXN0IGluc3RhbGxhdGlvbiBzYXZlZCwgb25jZSwga2VlcGluZyB3aGF0IHdhcyBzZXQgbWVhbndoaWxlLlxuICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgYXBwLndvcmtzcGFjZS5yZWFkV29ya3NwYWNlRmlsZSgpO1xuICAgICAgaWYgKGlzVW5pbnN0YWxsZWQgfHwgc3RhdGUuaXNIeWRyYXRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtZXJnZU1pc3Npbmcoc3RhdGUucmVjb3JkLCBwYXJzZVdvcmtzcGFjZUxheW91dFN0YXRlUmVjb3JkKGdldExheW91dFJlY29yZFZhbHVlKHNhdmVkKSkpO1xuICAgICAgc3RhdGUuaXNIeWRyYXRlZCA9IHRydWU7XG4gICAgICBub3RpZnlMYXlvdXRMb2FkKHN0YXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaXNVbmluc3RhbGxlZCA9IHRydWU7XG4gICAgdW5pbnN0YWxsUGF0Y2goKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaW52b2tlTGlzdGVuZXIobGlzdGVuZXI6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBsaXN0ZW5lcigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Egd29ya3NwYWNlIGxheW91dCBzdGF0ZSBsaXN0ZW5lciBmYWlsZWQnLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNKc29uT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgSnNvbk9iamVjdCB7XG4gIHJldHVybiBpc1BsYWluUmVjb3JkKHZhbHVlKSAmJiBpc0RhdGFTdG9yZUpzb25WYWx1ZSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5SZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VNaXNzaW5nKHRhcmdldDogV29ya3NwYWNlTGF5b3V0U3RhdGVSZWNvcmQsIHNvdXJjZTogV29ya3NwYWNlTGF5b3V0U3RhdGVSZWNvcmQpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbcGx1Z2luSWQsIHNvdXJjZVBsdWdpbl0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlLnBsdWdpbnMpKSB7XG4gICAgY29uc3QgdGFyZ2V0UGx1Z2luID0gdGFyZ2V0LnBsdWdpbnNbcGx1Z2luSWRdO1xuICAgIGlmICghdGFyZ2V0UGx1Z2luKSB7XG4gICAgICB0YXJnZXQucGx1Z2luc1twbHVnaW5JZF0gPSBzb3VyY2VQbHVnaW47XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlUGx1Z2luLndvcmtzcGFjZSkpIHtcbiAgICAgIHRhcmdldFBsdWdpbi53b3Jrc3BhY2Vba2V5XSA/Pz0gdmFsdWU7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2xlYWZJZCwgYnVja2V0XSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2VQbHVnaW4ubGVhdmVzKSkge1xuICAgICAgdGFyZ2V0UGx1Z2luLmxlYXZlc1tsZWFmSWRdID8/PSBidWNrZXQ7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vdGlmeUxheW91dExvYWQoc3RhdGU6IFdvcmtzcGFjZUxheW91dFN0YXRlU2hhcmVkU3RhdGUpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc25hcHNob3Qoc3RhdGUuc3Vic2NyaXB0aW9ucykpIHtcbiAgICBzdWJzY3JpcHRpb24ub25MYXlvdXRMb2FkKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQbHVnaW5SZWNvcmQodmFsdWU6IHVua25vd24pOiBudWxsIHwgV29ya3NwYWNlTGF5b3V0U3RhdGVQbHVnaW5SZWNvcmQge1xuICBpZiAoIWlzSnNvbk9iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGxlYXZlczogUmVjb3JkPHN0cmluZywgSnNvblJlY29yZD4gPSB7fTtcbiAgY29uc3QgcmF3TGVhdmVzID0gdmFsdWVbJ2xlYXZlcyddO1xuICBpZiAoaXNKc29uT2JqZWN0KHJhd0xlYXZlcykpIHtcbiAgICBmb3IgKGNvbnN0IFtsZWFmSWQsIGJ1Y2tldF0gb2YgT2JqZWN0LmVudHJpZXMocmF3TGVhdmVzKSkge1xuICAgICAgaWYgKGlzSnNvbk9iamVjdChidWNrZXQpKSB7XG4gICAgICAgIGxlYXZlc1tsZWFmSWRdID0gY2xvbmVKc29uPEpzb25SZWNvcmQ+KGJ1Y2tldCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmF3V29ya3NwYWNlID0gdmFsdWVbJ3dvcmtzcGFjZSddO1xuICByZXR1cm4ge1xuICAgIC4uLmNsb25lSnNvbih2YWx1ZSksXG4gICAgbGVhdmVzLFxuICAgIHdvcmtzcGFjZTogaXNKc29uT2JqZWN0KHJhd1dvcmtzcGFjZSkgPyBjbG9uZUpzb248SnNvblJlY29yZD4ocmF3V29ya3NwYWNlKSA6IHt9XG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L25vLXVuZGVmaW5lZC1yZXR1cm4tdHlwZSAtLSBBIHN0b3JlZCBKU09OIGBudWxsYCBpcyBhIHZhbHVlLCBzbyBhIG1pc3Npbmcgb25lIG11c3QgcmVhZCBkaWZmZXJlbnRseS5cbmZ1bmN0aW9uIHJlYWRSYXdWYWx1ZShzdGF0ZTogV29ya3NwYWNlTGF5b3V0U3RhdGVTaGFyZWRTdGF0ZSwgcGx1Z2luSWQ6IHN0cmluZywga2V5OiBzdHJpbmcsIGxlYWZJZDogbnVsbCB8IHN0cmluZyk6IEpzb25WYWx1ZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRCdWNrZXQoc3RhdGUsIHBsdWdpbklkLCBsZWFmSWQpPy5ba2V5XTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQ0EsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyx5QkFBeUI7QUFFbEMsU0FBUyw0QkFBNEI7QUFDckMsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxjQUFjO0FBS2hCLE1BQU0sb0NBQW9DO0FBRWpELE1BQU0sbUJBQW1CO0FBS3pCLE1BQU0sa0NBQWtDO0FBME14QyxNQUFNLDRCQUFxRTtBQUFBLEVBQ3pEO0FBQUEsRUFFQztBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVWLFlBQVksUUFBOEM7QUFDL0QsU0FBSyxNQUFNLE9BQU87QUFDbEIsU0FBSyxlQUFlLE9BQU87QUFDM0IsU0FBSyxVQUFVLE9BQU87QUFDdEIsU0FBSyxNQUFNLE9BQU87QUFDbEIsU0FBSyxXQUFXLE9BQU87QUFDdkIsU0FBSyxZQUFZLE9BQU87QUFBQSxFQUMxQjtBQUFBLEVBRU8sSUFBSSxNQUF5QjtBQUNsQyxXQUFPLEtBQUssUUFBUSxhQUFhLGVBQWUsR0FBRyxLQUFLLFVBQVUsS0FBSyxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUM7QUFBQSxFQUM5RjtBQUFBLEVBRU8sSUFBSSxNQUErQjtBQUN4QyxX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
@@ -12,6 +12,14 @@ export declare enum CssClass {
12
12
  * A CSS class for the alert modal.
13
13
  */
14
14
  AlertModal = "alert-modal",
15
+ /**
16
+ * A CSS class for the preview of the bug-report diagnostics review modal.
17
+ */
18
+ BugReportPreview = "bug-report-preview",
19
+ /**
20
+ * A CSS class for the bug-report diagnostics review modal.
21
+ */
22
+ BugReportReviewModal = "bug-report-review-modal",
15
23
  /**
16
24
  * A CSS class for the cancel button.
17
25
  */
@@ -56,6 +64,14 @@ export declare enum CssClass {
56
64
  * A CSS class for the confirm modal.
57
65
  */
58
66
  ConfirmModal = "confirm-modal",
67
+ /**
68
+ * A CSS class for the copy-text-manually modal.
69
+ */
70
+ CopyTextManuallyModal = "copy-text-manually-modal",
71
+ /**
72
+ * A CSS class for the text area of the copy-text-manually modal.
73
+ */
74
+ CopyTextManuallyText = "copy-text-manually-text",
59
75
  /**
60
76
  * A CSS class for the date component.
61
77
  */
@@ -5,6 +5,8 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  var CssClass = /* @__PURE__ */ ((CssClass2) => {
7
7
  CssClass2["AlertModal"] = "alert-modal";
8
+ CssClass2["BugReportPreview"] = "bug-report-preview";
9
+ CssClass2["BugReportReviewModal"] = "bug-report-review-modal";
8
10
  CssClass2["CancelButton"] = "cancel-button";
9
11
  CssClass2["CheckboxComponent"] = "checkbox-component";
10
12
  CssClass2["ClickableIcon"] = "clickable-icon";
@@ -16,6 +18,8 @@ var CssClass = /* @__PURE__ */ ((CssClass2) => {
16
18
  CssClass2["CodeBlockBuilderPreview"] = "code-block-builder-preview";
17
19
  CssClass2["CodeHighlighterComponent"] = "code-highlighter-component";
18
20
  CssClass2["ConfirmModal"] = "confirm-modal";
21
+ CssClass2["CopyTextManuallyModal"] = "copy-text-manually-modal";
22
+ CssClass2["CopyTextManuallyText"] = "copy-text-manually-text";
19
23
  CssClass2["DateComponent"] = "date-component";
20
24
  CssClass2["DateTimeComponent"] = "datetime-component";
21
25
  CssClass2["EmailComponent"] = "email-component";
@@ -86,4 +90,4 @@ var CssClass = /* @__PURE__ */ ((CssClass2) => {
86
90
  export {
87
91
  CssClass
88
92
  };
89
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Nzcy1jbGFzcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENTUyBjbGFzc2VzIHVzZWQgYnkgdGhlIGBAbW5hb3Vtb3Yvb2JzaWRpYW4tbGliYCBsaWJyYXJ5LlxuICovXG5cbi8qKlxuICogQ1NTIGNsYXNzZXMgdXNlZCBieSB0aGUgYEBtbmFvdW1vdi9vYnNpZGlhbi1saWJgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBlbnVtIENzc0NsYXNzIHtcbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgYWxlcnQgbW9kYWwuXG4gICAqL1xuICBBbGVydE1vZGFsID0gJ2FsZXJ0LW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKi9cbiAgQ2FuY2VsQnV0dG9uID0gJ2NhbmNlbC1idXR0b24nLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGNoZWNrYm94IGNvbXBvbmVudC5cbiAgICovXG4gIENoZWNrYm94Q29tcG9uZW50ID0gJ2NoZWNrYm94LWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGEgY2xpY2thYmxlIGljb24gYnV0dG9uLCBnaXZpbmcgaXQgdGhlIGhvdmVyIGJhY2tncm91bmQgYW5kIGljb24tY29sb3IgdHJlYXRtZW50LlxuICAgKi9cbiAgQ2xpY2thYmxlSWNvbiA9ICdjbGlja2FibGUtaWNvbicsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGFuIGlubGluZSBjb2RlIGVsZW1lbnQgKHVzZWQgYnkgYGFwcGVuZENvZGVCbG9ja2ApLlxuICAgKi9cbiAgQ29kZSA9ICdjb2RlJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIGEgY29sbGFwc2libGUgZmllbGQgZ3JvdXAgb2YgdGhlIGNvZGUgYmxvY2sgYnVpbGRlciBtb2RhbC5cbiAgICovXG4gIENvZGVCbG9ja0J1aWxkZXJHcm91cCA9ICdjb2RlLWJsb2NrLWJ1aWxkZXItZ3JvdXAnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGZpZWxkIGNvbnRhaW5lciBvZiBhIGNvbGxhcHNpYmxlIGdyb3VwIG9mIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBDb2RlQmxvY2tCdWlsZGVyR3JvdXBCb2R5ID0gJ2NvZGUtYmxvY2stYnVpbGRlci1ncm91cC1ib2R5JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBDb2RlQmxvY2tCdWlsZGVyTW9kYWwgPSAnY29kZS1ibG9jay1idWlsZGVyLW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBvdXRwdXQgcm93IG9mIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBDb2RlQmxvY2tCdWlsZGVyT3V0cHV0ID0gJ2NvZGUtYmxvY2stYnVpbGRlci1vdXRwdXQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGxpdmUgcHJldmlldyBjb250YWluZXIgb2YgdGhlIGNvZGUgYmxvY2sgYnVpbGRlciBtb2RhbC5cbiAgICovXG4gIENvZGVCbG9ja0J1aWxkZXJQcmV2aWV3ID0gJ2NvZGUtYmxvY2stYnVpbGRlci1wcmV2aWV3JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjb2RlIGhpZ2hsaWdodGVyIGNvbXBvbmVudC5cbiAgICovXG4gIENvZGVIaWdobGlnaHRlckNvbXBvbmVudCA9ICdjb2RlLWhpZ2hsaWdodGVyLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgY29uZmlybSBtb2RhbC5cbiAgICovXG4gIENvbmZpcm1Nb2RhbCA9ICdjb25maXJtLW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBkYXRlIGNvbXBvbmVudC5cbiAgICovXG4gIERhdGVDb21wb25lbnQgPSAnZGF0ZS1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGRhdGUgYW5kIHRpbWUgY29tcG9uZW50LlxuICAgKi9cbiAgRGF0ZVRpbWVDb21wb25lbnQgPSAnZGF0ZXRpbWUtY29tcG9uZW50JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBlbWFpbCBjb21wb25lbnQuXG4gICAqL1xuICBFbWFpbENvbXBvbmVudCA9ICdlbWFpbC1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGZpbGUgY29tcG9uZW50LlxuICAgKi9cbiAgRmlsZUNvbXBvbmVudCA9ICdmaWxlLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciByZW5kZXJlZCBtYXJrZG93biB3aG9zZSBoZWFkaW5ncyBhbmQgbGlzdHMgYHJlZ2lzdGVyRm9sZEhhbmRsZXJzYCBtYWRlIGZvbGRhYmxlLlxuICAgKi9cbiAgRm9sZGFibGVNYXJrZG93biA9ICdmb2xkYWJsZS1tYXJrZG93bicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgZm9sZGVyIGxpc3QgY29tcG9uZW50LlxuICAgKi9cbiAgRm9sZGVyTGlzdENvbXBvbmVudCA9ICdmb2xkZXItbGlzdC1jb21wb25lbnQnLFxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBob3RrZXkgY29tcG9uZW50LlxuICAgKi9cbiAgSG90a2V5Q29tcG9uZW50ID0gJ2hvdGtleS1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGVsZW1lbnQgYW4gaW5saW5lIHRva2VuIHJlbmRlcnMgaW50bywgaW4gUmVhZGluZyB2aWV3IGFuZCBpbiBMaXZlIFByZXZpZXcuXG4gICAqL1xuICBJbmxpbmVUb2tlbiA9ICdpbmxpbmUtdG9rZW4nLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIGZvciBhIGNvbnRyb2wgdGhhdCBpcyBjdXJyZW50bHkgT04sIHJldXNlZCBzbyBhIHByZXNzZWQgY29tbWFuZCBidXR0b24gbWF0Y2hlcyB0aGVcbiAgICogYXBwJ3Mgb3duIHRvZ2dsZWQgY29udHJvbHMuXG4gICAqL1xuICBJc0FjdGl2ZSA9ICdpcy1hY3RpdmUnLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIGZvciBhIGNvbGxhcHNlZCBlbGVtZW50LCByZXVzZWQgZm9yIGEgY29sbGFwc2VkIGdyb3VwIG9mIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBJc0NvbGxhcHNlZCA9ICdpcy1jb2xsYXBzZWQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHBsYWNlaG9sZGVyLlxuICAgKi9cbiAgSXNQbGFjZWhvbGRlciA9ICdpcy1wbGFjZWhvbGRlcicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgbGlicmFyeSBuYW1lLCBzZXQgb24gZXZlcnkgZWxlbWVudCB0aGUgbGlicmFyeSBidWlsZHMuXG4gICAqL1xuICBMaWJyYXJ5TmFtZSA9ICdvYnNpZGlhbi1saWInLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHJlb3JkZXJhYmxlIGxpc3QgY29tcG9uZW50LlxuICAgKi9cbiAgTGlzdENvbXBvbmVudCA9ICdsaXN0LWNvbXBvbmVudCcsXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIG1hcmtpbmcgcmVuZGVyZWQtbWFya2Rvd24gY29udGVudCAodXNlZCBieSBgYXBwZW5kQ29kZUJsb2NrYCkuXG4gICAqL1xuICBNYXJrZG93blJlbmRlcmVkID0gJ21hcmtkb3duLXJlbmRlcmVkJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBtaW5pbWl6YWJsZSBtb2RhbC5cbiAgICovXG4gIE1pbmltaXphYmxlTW9kYWwgPSAnbWluaW1pemFibGUtbW9kYWwnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG1pbmltaXplIGJ1dHRvbiBvZiB0aGUgbWluaW1pemFibGUgbW9kYWwuXG4gICAqL1xuICBNaW5pbWl6ZUJ1dHRvbiA9ICdtaW5pbWl6ZS1idXR0b24nLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG1pbmltaXplZCBiYXIgb2YgdGhlIG1pbmltaXphYmxlIG1vZGFsLlxuICAgKi9cbiAgTWluaW1pemVkTW9kYWxCYXIgPSAnbWluaW1pemVkLW1vZGFsLWJhcicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgb25lLXNob3QgYXR0ZW50aW9uIGZsYXNoIG9mIHRoZSBtaW5pbWl6ZWQgYmFyLCBwbGF5ZWQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyBhXG4gICAqIGJsb2NrZWQgYWN0aW9uIChhIGtleXN0cm9rZSwgcmlnaHQtY2xpY2ssIG9yIG9wZW5pbmcgYW5vdGhlciBtb2RhbCkgd2hpbGUgdGhlIG1vZGFsIGlzIG1pbmltaXplZC5cbiAgICovXG4gIE1pbmltaXplZE1vZGFsQmFyQXR0ZW50aW9uID0gJ21pbmltaXplZC1tb2RhbC1iYXItYXR0ZW50aW9uJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0aXRsZSBvZiB0aGUgbWluaW1pemVkIGJhciBvZiB0aGUgbWluaW1pemFibGUgbW9kYWwuXG4gICAqL1xuICBNaW5pbWl6ZWRNb2RhbEJhclRpdGxlID0gJ21pbmltaXplZC1tb2RhbC1iYXItdGl0bGUnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3Igb25lIGJ1dHRvbiBpbiBhIG1vZGFsJ3MgY29tbWFuZCBzdHJpcC5cbiAgICovXG4gIE1vZGFsQ29tbWFuZCA9ICdtb2RhbC1jb21tYW5kJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIGEgY29udHJvbCBpbmplY3RlZCBpbnRvIGFuIGluc3RydWN0aW9uJ3MgcHVycG9zZSB0ZXh0IFx1MjAxNCBhIGNoZWNrYm94LCBhIGRyb3Bkb3duLlxuICAgKiBPYnNpZGlhbidzIG93biBpbnN0cnVjdGlvbiBiYXIgbmV2ZXIgY29udGFpbnMgb25lLCBzbyBub3RoaW5nIHVwc3RyZWFtIHNlcGFyYXRlcyBpdCBmcm9tIHRoZSBsYWJlbFxuICAgKiBpdCBiZWxvbmdzIHRvLlxuICAgKi9cbiAgTW9kYWxDb21tYW5kQ29udHJvbCA9ICdtb2RhbC1jb21tYW5kLWNvbnRyb2wnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGhvdGtleSBoaW50IGluc2lkZSBhIG1vZGFsIGNvbW1hbmQgYnV0dG9uLlxuICAgKi9cbiAgTW9kYWxDb21tYW5kSG90a2V5ID0gJ21vZGFsLWNvbW1hbmQtaG90a2V5JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBzdHJpcCBvZiBjb21tYW5kcyBhIG1vZGFsIHJlbmRlcnMgYWxvbmcgaXRzIGJvdHRvbSBlZGdlLlxuICAgKi9cbiAgTW9kYWxDb21tYW5kcyA9ICdtb2RhbC1jb21tYW5kcycsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGEgbW9kYWwgaGVhZGVyIGJ1dHRvbiAoZS5nLiB0aGUgbW9kYWwgY2xvc2UgYnV0dG9uKSwgcmV1c2VkIHRvIG1hdGNoIHRoZVxuICAgKiBuYXRpdmUgbW9kYWwgY2xvc2UgYnV0dG9uJ3MgYm94IGFuZCBob3Zlci5cbiAgICovXG4gIE1vZGFsSGVhZGVyQnV0dG9uID0gJ21vZGFsLWhlYWRlci1idXR0b24nLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG1vbnRoIGNvbXBvbmVudC5cbiAgICovXG4gIE1vbnRoQ29tcG9uZW50ID0gJ21vbnRoLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgbXVsdGlwbGUgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudCA9ICdtdWx0aXBsZS1kcm9wZG93bi1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG11bHRpcGxlIGVtYWlsIGNvbXBvbmVudC5cbiAgICovXG4gIE11bHRpcGxlRW1haWxDb21wb25lbnQgPSAnbXVsdGlwbGUtZW1haWwtY29tcG9uZW50JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBtdWx0aXBsZSBmaWxlIGNvbXBvbmVudC5cbiAgICovXG4gIE11bHRpcGxlRmlsZUNvbXBvbmVudCA9ICdtdWx0aXBsZS1maWxlLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgbXVsdGlwbGUgdGV4dCBjb21wb25lbnQuXG4gICAqL1xuICBNdWx0aXBsZVRleHRDb21wb25lbnQgPSAnbXVsdGlwbGUtdGV4dC1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG51bWJlciBjb21wb25lbnQuXG4gICAqL1xuICBOdW1iZXJDb21wb25lbnQgPSAnbnVtYmVyLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgb2sgYnV0dG9uLlxuICAgKi9cbiAgT2tCdXR0b24gPSAnb2stYnV0dG9uJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBvdmVybGF5IHZhbGlkYXRvci5cbiAgICovXG4gIE92ZXJsYXlWYWxpZGF0b3IgPSAnb3ZlcmxheS12YWxpZGF0b3InLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHBhc3N3b3JkIGNvbXBvbmVudC5cbiAgICovXG4gIFBhc3N3b3JkQ29tcG9uZW50ID0gJ3Bhc3N3b3JkLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgYmFubmVyIG5hbWluZyBhIHBsdWdpbiB0aGlzIG9uZSByZWZ1c2VzLCBvciB3YXJucyBhYm91dCwgcnVubmluZyBiZXNpZGUuXG4gICAqL1xuICBQbHVnaW5Db25mbGljdEJhbm5lciA9ICdwbHVnaW4tY29uZmxpY3QtYmFubmVyJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBiYW5uZXIgYSBibG9ja2VkIHBsdWdpbiByZW5kZXJzIGluIHBsYWNlIG9mIGl0cyBzZXR0aW5ncywgbmFtaW5nIHRoZSBtYW5kYXRvcnlcbiAgICogZGVwZW5kZW5jeSBpdCBpcyB3YWl0aW5nIGZvci5cbiAgICovXG4gIFBsdWdpbkRlcGVuZGVuY3lCYW5uZXIgPSAncGx1Z2luLWRlcGVuZGVuY3ktYmFubmVyJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjbG9zZSBidXR0b24gb2YgYSBub3RpY2UgdGhhdCByZXF1aXJlcyBjbG9zZSBjb25maXJtYXRpb24uXG4gICAqL1xuICBQbHVnaW5Ob3RpY2VDbG9zZUJ1dHRvbiA9ICdwbHVnaW4tbm90aWNlLWNsb3NlLWJ1dHRvbicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgY29udGFpbmVyIHdyYXBwaW5nIGEgbm90aWNlJ3MgY29udGVudCwgdXNlZCB0byBrZWVwIHRoZSBub3RpY2Ugb3BlbiB3aGVuIGFuXG4gICAqIGludGVyYWN0aXZlIGVsZW1lbnQgaW5zaWRlIGl0IGlzIGNsaWNrZWQuXG4gICAqL1xuICBQbHVnaW5Ob3RpY2VDb250ZW50ID0gJ3BsdWdpbi1ub3RpY2UtY29udGVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgcGx1Z2luIG5hbWUgc2hvd24gYXMgdGhlIHByZWZpeCBvZiBhIG5vdGljZS5cbiAgICovXG4gIFBsdWdpbk5vdGljZU5hbWUgPSAncGx1Z2luLW5vdGljZS1uYW1lJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgYXBwbGllZCB0byB0aGUgbm90aWNlIGVsZW1lbnQgb2YgYSBub3RpY2UgdGhhdCByZXF1aXJlcyBhbiBleHBsaWNpdCBjbG9zZSwgdXNlZCB0byBtYWtlXG4gICAqIGl0cyB3aG9sZSBhcmVhIG5vbi1kaXNtaXNzaWJsZS5cbiAgICovXG4gIFBsdWdpbk5vdGljZVJlcXVpcmVzRXhwbGljaXRDbG9zZSA9ICdwbHVnaW4tbm90aWNlLXJlcXVpcmVzLWV4cGxpY2l0LWNsb3NlJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgUGx1Z2luU2V0dGluZ3NUYWIgPSAncGx1Z2luLXNldHRpbmdzLXRhYicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgYmFubmVyIGEgcGx1Z2luLXN1Z2dlc3Rpb24gcmVuZGVycyBpbnRvIGEgc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgUGx1Z2luU3VnZ2VzdGlvbkJhbm5lciA9ICdwbHVnaW4tc3VnZ2VzdGlvbi1iYW5uZXInLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHJvdyBvZiBidXR0b25zIGluIGEgcGx1Z2luLXN1Z2dlc3Rpb24gbm90aWNlLCB3aGljaCBzcGFjZXMgdGhlIGFjdGlvbiBidXR0b24gYXBhcnQgZnJvbVxuICAgKiB0aGUgZGVjbGluZSBidXR0b24uXG4gICAqL1xuICBQbHVnaW5TdWdnZXN0aW9uTm90aWNlQnV0dG9ucyA9ICdwbHVnaW4tc3VnZ2VzdGlvbi1ub3RpY2UtYnV0dG9ucycsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgcG9wb3Zlci5cbiAgICovXG4gIFBvcG92ZXIgPSAncG9wb3ZlcicsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIG9uZSByb3cgb2YgaXRzIG1vZGFsIGluc3RydWN0aW9uIGJhciwgcmV1c2VkIHNvIGEgc2VsZi1jcmVhdGVkIGJhciBpbmhlcml0cyB0aGVcbiAgICogYXBwJ3Mgb3duIGluc3RydWN0aW9uIHN0eWxpbmcuXG4gICAqL1xuICBQcm9tcHRJbnN0cnVjdGlvbiA9ICdwcm9tcHQtaW5zdHJ1Y3Rpb24nLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIGZvciB0aGUga2V5LWhpbnQgaGFsZiBvZiBvbmUgaW5zdHJ1Y3Rpb24gcm93LiBJdCBpcyB0aGUgb25seSB0aGluZyBjYXJyeWluZyB0aGF0XG4gICAqIGhpbnQncyBib2xkIHdlaWdodCBhbmQgdGhlIGBtYXJnaW4taW5saW5lLWVuZGAgdGhhdCBzZXBhcmF0ZXMgaXQgZnJvbSB0aGUgcHVycG9zZSB0ZXh0LCBzbyBhXG4gICAqIHNlbGYtY3JlYXRlZCBiYXIgdGhhdCBvbWl0cyBpdCByZW5kZXJzIGBhbHQgMUtlZXAgdGhlIG9sZCB0aXRsZWAgd2VsZGVkIHRvZ2V0aGVyLiBSZXVzZWQgcmF0aGVyXG4gICAqIHRoYW4gcmUtaW1wbGVtZW50ZWQ6IHRoZSBhcHAncyBydWxlIGZvciBpdCBpcyB1bnNjb3BlZCwgc28gaXQgcmVhY2hlcyBhIHBsYWluIGBNb2RhbGAgdG9vLCBhbmRcbiAgICogc2hhcmluZyB0aGUgY2xhc3Mga2VlcHMgdGhlIHNlbGYtY3JlYXRlZCBiYXIgYW5kIGBzZXRJbnN0cnVjdGlvbnNgIGZyb20gZXZlciBkcmlmdGluZyBhcGFydC5cbiAgICovXG4gIFByb21wdEluc3RydWN0aW9uQ29tbWFuZCA9ICdwcm9tcHQtaW5zdHJ1Y3Rpb24tY29tbWFuZCcsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGl0cyBtb2RhbCBpbnN0cnVjdGlvbiBiYXIsIHJldXNlZCBzbyBhIHNlbGYtY3JlYXRlZCBiYXIgaW5oZXJpdHMgdGhlIGFwcCdzIG93blxuICAgKiBpbnN0cnVjdGlvbiBzdHlsaW5nLlxuICAgKi9cbiAgUHJvbXB0SW5zdHJ1Y3Rpb25zID0gJ3Byb21wdC1pbnN0cnVjdGlvbnMnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHByb21wdCBtb2RhbC5cbiAgICovXG4gIFByb21wdE1vZGFsID0gJ3Byb21wdC1tb2RhbCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgcmVzdG9yZSBidXR0b24gb2YgdGhlIG1pbmltaXplZCBtb2RhbCBiYXIuXG4gICAqL1xuICBSZXN0b3JlQnV0dG9uID0gJ3Jlc3RvcmUtYnV0dG9uJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBzZWxlY3QgaXRlbSBtb2RhbC5cbiAgICovXG4gIFNlbGVjdEl0ZW1Nb2RhbCA9ICdzZWxlY3QtaXRlbS1tb2RhbCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgc2VsZWN0IG9wdGlvbiBtb2RhbC5cbiAgICovXG4gIFNlbGVjdE9wdGlvbk1vZGFsID0gJ3NlbGVjdC1vcHRpb24tbW9kYWwnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHNldHRpbmcgY29tcG9uZW50IHdyYXBwZXIuXG4gICAqL1xuICBTZXR0aW5nQ29tcG9uZW50V3JhcHBlciA9ICdzZXR0aW5nLWNvbXBvbmVudC13cmFwcGVyJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBzZXR0aW5ncyB0YWJzLlxuICAgKi9cbiAgU2V0dGluZ3NUYWJzID0gJ3NldHRpbmdzLXRhYnMnLFxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0YWcgbGlzdCBjb21wb25lbnQuXG4gICAqL1xuICBUYWdMaXN0Q29tcG9uZW50ID0gJ3RhZy1saXN0LWNvbXBvbmVudCcsXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHRlbGVwaG9uZSBjb21wb25lbnQuXG4gICAqL1xuICBUZWxlcGhvbmVDb21wb25lbnQgPSAndGVsZXBob25lLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgdGV4dCBib3guXG4gICAqL1xuICBUZXh0Qm94ID0gJ3RleHQtYm94JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0aW1lIGNvbXBvbmVudC5cbiAgICovXG4gIFRpbWVDb21wb25lbnQgPSAndGltZS1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHRvb2x0aXAuXG4gICAqL1xuICBUb29sdGlwID0gJ3Rvb2x0aXAnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHRvb2x0aXAgYXJyb3cuXG4gICAqL1xuICBUb29sdGlwQXJyb3cgPSAndG9vbHRpcC1hcnJvdycsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgdG9vbHRpcCB2YWxpZGF0b3IuXG4gICAqL1xuICBUb29sdGlwVmFsaWRhdG9yID0gJ3Rvb2x0aXAtdmFsaWRhdG9yJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0cmktc3RhdGUgY2hlY2tib3ggY29tcG9uZW50LlxuICAgKi9cbiAgVHJpU3RhdGVDaGVja2JveENvbXBvbmVudCA9ICd0cmktc3RhdGUtY2hlY2tib3gtY29tcG9uZW50JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0eXBlZCBkcm9wZG93biBjb21wb25lbnQuXG4gICAqL1xuICBUeXBlZERyb3Bkb3duQ29tcG9uZW50ID0gJ3R5cGVkLWRyb3Bkb3duLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgdHlwZWQgbXVsdGlwbGUgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgVHlwZWRNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50ID0gJ3R5cGVkLW11bHRpcGxlLWRyb3Bkb3duLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciBhbiBpbnB1dCB0aGUgdXNlciBoYXMgbm90IGludGVyYWN0ZWQgd2l0aCB5ZXQsIHVzZWQgdG8gZGVmZXIgdGhlIGludmFsaWQgc3R5bGluZyB1bnRpbFxuICAgKiB0aGUgaW5wdXQgaXMgdG91Y2hlZC5cbiAgICovXG4gIFVudG91Y2hlZCA9ICd1bnRvdWNoZWQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHVybCBjb21wb25lbnQuXG4gICAqL1xuICBVcmxDb21wb25lbnQgPSAndXJsLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgd2VlayBjb21wb25lbnQuXG4gICAqL1xuICBXZWVrQ29tcG9uZW50ID0gJ3dlZWstY29tcG9uZW50J1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFTTyxJQUFLLFdBQUwsa0JBQUtBLGNBQUw7QUFJTCxFQUFBQSxVQUFBLGdCQUFhO0FBS2IsRUFBQUEsVUFBQSxrQkFBZTtBQUtmLEVBQUFBLFVBQUEsdUJBQW9CO0FBS3BCLEVBQUFBLFVBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLFVBQUEsVUFBTztBQUtQLEVBQUFBLFVBQUEsMkJBQXdCO0FBS3hCLEVBQUFBLFVBQUEsK0JBQTRCO0FBSzVCLEVBQUFBLFVBQUEsMkJBQXdCO0FBS3hCLEVBQUFBLFVBQUEsNEJBQXlCO0FBS3pCLEVBQUFBLFVBQUEsNkJBQTBCO0FBSzFCLEVBQUFBLFVBQUEsOEJBQTJCO0FBSzNCLEVBQUFBLFVBQUEsa0JBQWU7QUFLZixFQUFBQSxVQUFBLG1CQUFnQjtBQUtoQixFQUFBQSxVQUFBLHVCQUFvQjtBQUtwQixFQUFBQSxVQUFBLG9CQUFpQjtBQUtqQixFQUFBQSxVQUFBLG1CQUFnQjtBQUtoQixFQUFBQSxVQUFBLHNCQUFtQjtBQUtuQixFQUFBQSxVQUFBLHlCQUFzQjtBQUl0QixFQUFBQSxVQUFBLHFCQUFrQjtBQUtsQixFQUFBQSxVQUFBLGlCQUFjO0FBTWQsRUFBQUEsVUFBQSxjQUFXO0FBS1gsRUFBQUEsVUFBQSxpQkFBYztBQUtkLEVBQUFBLFVBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLFVBQUEsaUJBQWM7QUFLZCxFQUFBQSxVQUFBLG1CQUFnQjtBQUloQixFQUFBQSxVQUFBLHNCQUFtQjtBQUtuQixFQUFBQSxVQUFBLHNCQUFtQjtBQUtuQixFQUFBQSxVQUFBLG9CQUFpQjtBQUtqQixFQUFBQSxVQUFBLHVCQUFvQjtBQU1wQixFQUFBQSxVQUFBLGdDQUE2QjtBQUs3QixFQUFBQSxVQUFBLDRCQUF5QjtBQUt6QixFQUFBQSxVQUFBLGtCQUFlO0FBT2YsRUFBQUEsVUFBQSx5QkFBc0I7QUFLdEIsRUFBQUEsVUFBQSx3QkFBcUI7QUFLckIsRUFBQUEsVUFBQSxtQkFBZ0I7QUFNaEIsRUFBQUEsVUFBQSx1QkFBb0I7QUFLcEIsRUFBQUEsVUFBQSxvQkFBaUI7QUFLakIsRUFBQUEsVUFBQSwrQkFBNEI7QUFLNUIsRUFBQUEsVUFBQSw0QkFBeUI7QUFLekIsRUFBQUEsVUFBQSwyQkFBd0I7QUFLeEIsRUFBQUEsVUFBQSwyQkFBd0I7QUFLeEIsRUFBQUEsVUFBQSxxQkFBa0I7QUFLbEIsRUFBQUEsVUFBQSxjQUFXO0FBS1gsRUFBQUEsVUFBQSxzQkFBbUI7QUFLbkIsRUFBQUEsVUFBQSx1QkFBb0I7QUFLcEIsRUFBQUEsVUFBQSwwQkFBdUI7QUFNdkIsRUFBQUEsVUFBQSw0QkFBeUI7QUFLekIsRUFBQUEsVUFBQSw2QkFBMEI7QUFNMUIsRUFBQUEsVUFBQSx5QkFBc0I7QUFLdEIsRUFBQUEsVUFBQSxzQkFBbUI7QUFNbkIsRUFBQUEsVUFBQSx1Q0FBb0M7QUFLcEMsRUFBQUEsVUFBQSx1QkFBb0I7QUFLcEIsRUFBQUEsVUFBQSw0QkFBeUI7QUFNekIsRUFBQUEsVUFBQSxtQ0FBZ0M7QUFLaEMsRUFBQUEsVUFBQSxhQUFVO0FBTVYsRUFBQUEsVUFBQSx1QkFBb0I7QUFTcEIsRUFBQUEsVUFBQSw4QkFBMkI7QUFNM0IsRUFBQUEsVUFBQSx3QkFBcUI7QUFLckIsRUFBQUEsVUFBQSxpQkFBYztBQUtkLEVBQUFBLFVBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLFVBQUEscUJBQWtCO0FBS2xCLEVBQUFBLFVBQUEsdUJBQW9CO0FBS3BCLEVBQUFBLFVBQUEsNkJBQTBCO0FBSzFCLEVBQUFBLFVBQUEsa0JBQWU7QUFJZixFQUFBQSxVQUFBLHNCQUFtQjtBQUluQixFQUFBQSxVQUFBLHdCQUFxQjtBQUtyQixFQUFBQSxVQUFBLGFBQVU7QUFLVixFQUFBQSxVQUFBLG1CQUFnQjtBQUtoQixFQUFBQSxVQUFBLGFBQVU7QUFLVixFQUFBQSxVQUFBLGtCQUFlO0FBS2YsRUFBQUEsVUFBQSxzQkFBbUI7QUFLbkIsRUFBQUEsVUFBQSwrQkFBNEI7QUFLNUIsRUFBQUEsVUFBQSw0QkFBeUI7QUFLekIsRUFBQUEsVUFBQSxvQ0FBaUM7QUFNakMsRUFBQUEsVUFBQSxlQUFZO0FBS1osRUFBQUEsVUFBQSxrQkFBZTtBQUtmLEVBQUFBLFVBQUEsbUJBQWdCO0FBNVlOLFNBQUFBO0FBQUEsR0FBQTsiLAogICJuYW1lcyI6IFsiQ3NzQ2xhc3MiXQp9Cg==
93
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Nzcy1jbGFzcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENTUyBjbGFzc2VzIHVzZWQgYnkgdGhlIGBAbW5hb3Vtb3Yvb2JzaWRpYW4tbGliYCBsaWJyYXJ5LlxuICovXG5cbi8qKlxuICogQ1NTIGNsYXNzZXMgdXNlZCBieSB0aGUgYEBtbmFvdW1vdi9vYnNpZGlhbi1saWJgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBlbnVtIENzc0NsYXNzIHtcbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgYWxlcnQgbW9kYWwuXG4gICAqL1xuICBBbGVydE1vZGFsID0gJ2FsZXJ0LW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBwcmV2aWV3IG9mIHRoZSBidWctcmVwb3J0IGRpYWdub3N0aWNzIHJldmlldyBtb2RhbC5cbiAgICovXG4gIEJ1Z1JlcG9ydFByZXZpZXcgPSAnYnVnLXJlcG9ydC1wcmV2aWV3JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBidWctcmVwb3J0IGRpYWdub3N0aWNzIHJldmlldyBtb2RhbC5cbiAgICovXG4gIEJ1Z1JlcG9ydFJldmlld01vZGFsID0gJ2J1Zy1yZXBvcnQtcmV2aWV3LW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKi9cbiAgQ2FuY2VsQnV0dG9uID0gJ2NhbmNlbC1idXR0b24nLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGNoZWNrYm94IGNvbXBvbmVudC5cbiAgICovXG4gIENoZWNrYm94Q29tcG9uZW50ID0gJ2NoZWNrYm94LWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGEgY2xpY2thYmxlIGljb24gYnV0dG9uLCBnaXZpbmcgaXQgdGhlIGhvdmVyIGJhY2tncm91bmQgYW5kIGljb24tY29sb3IgdHJlYXRtZW50LlxuICAgKi9cbiAgQ2xpY2thYmxlSWNvbiA9ICdjbGlja2FibGUtaWNvbicsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGFuIGlubGluZSBjb2RlIGVsZW1lbnQgKHVzZWQgYnkgYGFwcGVuZENvZGVCbG9ja2ApLlxuICAgKi9cbiAgQ29kZSA9ICdjb2RlJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIGEgY29sbGFwc2libGUgZmllbGQgZ3JvdXAgb2YgdGhlIGNvZGUgYmxvY2sgYnVpbGRlciBtb2RhbC5cbiAgICovXG4gIENvZGVCbG9ja0J1aWxkZXJHcm91cCA9ICdjb2RlLWJsb2NrLWJ1aWxkZXItZ3JvdXAnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGZpZWxkIGNvbnRhaW5lciBvZiBhIGNvbGxhcHNpYmxlIGdyb3VwIG9mIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBDb2RlQmxvY2tCdWlsZGVyR3JvdXBCb2R5ID0gJ2NvZGUtYmxvY2stYnVpbGRlci1ncm91cC1ib2R5JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBDb2RlQmxvY2tCdWlsZGVyTW9kYWwgPSAnY29kZS1ibG9jay1idWlsZGVyLW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBvdXRwdXQgcm93IG9mIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBDb2RlQmxvY2tCdWlsZGVyT3V0cHV0ID0gJ2NvZGUtYmxvY2stYnVpbGRlci1vdXRwdXQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGxpdmUgcHJldmlldyBjb250YWluZXIgb2YgdGhlIGNvZGUgYmxvY2sgYnVpbGRlciBtb2RhbC5cbiAgICovXG4gIENvZGVCbG9ja0J1aWxkZXJQcmV2aWV3ID0gJ2NvZGUtYmxvY2stYnVpbGRlci1wcmV2aWV3JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjb2RlIGhpZ2hsaWdodGVyIGNvbXBvbmVudC5cbiAgICovXG4gIENvZGVIaWdobGlnaHRlckNvbXBvbmVudCA9ICdjb2RlLWhpZ2hsaWdodGVyLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgY29uZmlybSBtb2RhbC5cbiAgICovXG4gIENvbmZpcm1Nb2RhbCA9ICdjb25maXJtLW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjb3B5LXRleHQtbWFudWFsbHkgbW9kYWwuXG4gICAqL1xuICBDb3B5VGV4dE1hbnVhbGx5TW9kYWwgPSAnY29weS10ZXh0LW1hbnVhbGx5LW1vZGFsJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0ZXh0IGFyZWEgb2YgdGhlIGNvcHktdGV4dC1tYW51YWxseSBtb2RhbC5cbiAgICovXG4gIENvcHlUZXh0TWFudWFsbHlUZXh0ID0gJ2NvcHktdGV4dC1tYW51YWxseS10ZXh0JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBkYXRlIGNvbXBvbmVudC5cbiAgICovXG4gIERhdGVDb21wb25lbnQgPSAnZGF0ZS1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGRhdGUgYW5kIHRpbWUgY29tcG9uZW50LlxuICAgKi9cbiAgRGF0ZVRpbWVDb21wb25lbnQgPSAnZGF0ZXRpbWUtY29tcG9uZW50JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBlbWFpbCBjb21wb25lbnQuXG4gICAqL1xuICBFbWFpbENvbXBvbmVudCA9ICdlbWFpbC1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGZpbGUgY29tcG9uZW50LlxuICAgKi9cbiAgRmlsZUNvbXBvbmVudCA9ICdmaWxlLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciByZW5kZXJlZCBtYXJrZG93biB3aG9zZSBoZWFkaW5ncyBhbmQgbGlzdHMgYHJlZ2lzdGVyRm9sZEhhbmRsZXJzYCBtYWRlIGZvbGRhYmxlLlxuICAgKi9cbiAgRm9sZGFibGVNYXJrZG93biA9ICdmb2xkYWJsZS1tYXJrZG93bicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgZm9sZGVyIGxpc3QgY29tcG9uZW50LlxuICAgKi9cbiAgRm9sZGVyTGlzdENvbXBvbmVudCA9ICdmb2xkZXItbGlzdC1jb21wb25lbnQnLFxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBob3RrZXkgY29tcG9uZW50LlxuICAgKi9cbiAgSG90a2V5Q29tcG9uZW50ID0gJ2hvdGtleS1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGVsZW1lbnQgYW4gaW5saW5lIHRva2VuIHJlbmRlcnMgaW50bywgaW4gUmVhZGluZyB2aWV3IGFuZCBpbiBMaXZlIFByZXZpZXcuXG4gICAqL1xuICBJbmxpbmVUb2tlbiA9ICdpbmxpbmUtdG9rZW4nLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIGZvciBhIGNvbnRyb2wgdGhhdCBpcyBjdXJyZW50bHkgT04sIHJldXNlZCBzbyBhIHByZXNzZWQgY29tbWFuZCBidXR0b24gbWF0Y2hlcyB0aGVcbiAgICogYXBwJ3Mgb3duIHRvZ2dsZWQgY29udHJvbHMuXG4gICAqL1xuICBJc0FjdGl2ZSA9ICdpcy1hY3RpdmUnLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIGZvciBhIGNvbGxhcHNlZCBlbGVtZW50LCByZXVzZWQgZm9yIGEgY29sbGFwc2VkIGdyb3VwIG9mIHRoZSBjb2RlIGJsb2NrIGJ1aWxkZXIgbW9kYWwuXG4gICAqL1xuICBJc0NvbGxhcHNlZCA9ICdpcy1jb2xsYXBzZWQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHBsYWNlaG9sZGVyLlxuICAgKi9cbiAgSXNQbGFjZWhvbGRlciA9ICdpcy1wbGFjZWhvbGRlcicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgbGlicmFyeSBuYW1lLCBzZXQgb24gZXZlcnkgZWxlbWVudCB0aGUgbGlicmFyeSBidWlsZHMuXG4gICAqL1xuICBMaWJyYXJ5TmFtZSA9ICdvYnNpZGlhbi1saWInLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHJlb3JkZXJhYmxlIGxpc3QgY29tcG9uZW50LlxuICAgKi9cbiAgTGlzdENvbXBvbmVudCA9ICdsaXN0LWNvbXBvbmVudCcsXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIG1hcmtpbmcgcmVuZGVyZWQtbWFya2Rvd24gY29udGVudCAodXNlZCBieSBgYXBwZW5kQ29kZUJsb2NrYCkuXG4gICAqL1xuICBNYXJrZG93blJlbmRlcmVkID0gJ21hcmtkb3duLXJlbmRlcmVkJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBtaW5pbWl6YWJsZSBtb2RhbC5cbiAgICovXG4gIE1pbmltaXphYmxlTW9kYWwgPSAnbWluaW1pemFibGUtbW9kYWwnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG1pbmltaXplIGJ1dHRvbiBvZiB0aGUgbWluaW1pemFibGUgbW9kYWwuXG4gICAqL1xuICBNaW5pbWl6ZUJ1dHRvbiA9ICdtaW5pbWl6ZS1idXR0b24nLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG1pbmltaXplZCBiYXIgb2YgdGhlIG1pbmltaXphYmxlIG1vZGFsLlxuICAgKi9cbiAgTWluaW1pemVkTW9kYWxCYXIgPSAnbWluaW1pemVkLW1vZGFsLWJhcicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgb25lLXNob3QgYXR0ZW50aW9uIGZsYXNoIG9mIHRoZSBtaW5pbWl6ZWQgYmFyLCBwbGF5ZWQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyBhXG4gICAqIGJsb2NrZWQgYWN0aW9uIChhIGtleXN0cm9rZSwgcmlnaHQtY2xpY2ssIG9yIG9wZW5pbmcgYW5vdGhlciBtb2RhbCkgd2hpbGUgdGhlIG1vZGFsIGlzIG1pbmltaXplZC5cbiAgICovXG4gIE1pbmltaXplZE1vZGFsQmFyQXR0ZW50aW9uID0gJ21pbmltaXplZC1tb2RhbC1iYXItYXR0ZW50aW9uJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0aXRsZSBvZiB0aGUgbWluaW1pemVkIGJhciBvZiB0aGUgbWluaW1pemFibGUgbW9kYWwuXG4gICAqL1xuICBNaW5pbWl6ZWRNb2RhbEJhclRpdGxlID0gJ21pbmltaXplZC1tb2RhbC1iYXItdGl0bGUnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3Igb25lIGJ1dHRvbiBpbiBhIG1vZGFsJ3MgY29tbWFuZCBzdHJpcC5cbiAgICovXG4gIE1vZGFsQ29tbWFuZCA9ICdtb2RhbC1jb21tYW5kJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIGEgY29udHJvbCBpbmplY3RlZCBpbnRvIGFuIGluc3RydWN0aW9uJ3MgcHVycG9zZSB0ZXh0IFx1MjAxNCBhIGNoZWNrYm94LCBhIGRyb3Bkb3duLlxuICAgKiBPYnNpZGlhbidzIG93biBpbnN0cnVjdGlvbiBiYXIgbmV2ZXIgY29udGFpbnMgb25lLCBzbyBub3RoaW5nIHVwc3RyZWFtIHNlcGFyYXRlcyBpdCBmcm9tIHRoZSBsYWJlbFxuICAgKiBpdCBiZWxvbmdzIHRvLlxuICAgKi9cbiAgTW9kYWxDb21tYW5kQ29udHJvbCA9ICdtb2RhbC1jb21tYW5kLWNvbnRyb2wnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIGhvdGtleSBoaW50IGluc2lkZSBhIG1vZGFsIGNvbW1hbmQgYnV0dG9uLlxuICAgKi9cbiAgTW9kYWxDb21tYW5kSG90a2V5ID0gJ21vZGFsLWNvbW1hbmQtaG90a2V5JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBzdHJpcCBvZiBjb21tYW5kcyBhIG1vZGFsIHJlbmRlcnMgYWxvbmcgaXRzIGJvdHRvbSBlZGdlLlxuICAgKi9cbiAgTW9kYWxDb21tYW5kcyA9ICdtb2RhbC1jb21tYW5kcycsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGEgbW9kYWwgaGVhZGVyIGJ1dHRvbiAoZS5nLiB0aGUgbW9kYWwgY2xvc2UgYnV0dG9uKSwgcmV1c2VkIHRvIG1hdGNoIHRoZVxuICAgKiBuYXRpdmUgbW9kYWwgY2xvc2UgYnV0dG9uJ3MgYm94IGFuZCBob3Zlci5cbiAgICovXG4gIE1vZGFsSGVhZGVyQnV0dG9uID0gJ21vZGFsLWhlYWRlci1idXR0b24nLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG1vbnRoIGNvbXBvbmVudC5cbiAgICovXG4gIE1vbnRoQ29tcG9uZW50ID0gJ21vbnRoLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgbXVsdGlwbGUgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgTXVsdGlwbGVEcm9wZG93bkNvbXBvbmVudCA9ICdtdWx0aXBsZS1kcm9wZG93bi1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG11bHRpcGxlIGVtYWlsIGNvbXBvbmVudC5cbiAgICovXG4gIE11bHRpcGxlRW1haWxDb21wb25lbnQgPSAnbXVsdGlwbGUtZW1haWwtY29tcG9uZW50JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBtdWx0aXBsZSBmaWxlIGNvbXBvbmVudC5cbiAgICovXG4gIE11bHRpcGxlRmlsZUNvbXBvbmVudCA9ICdtdWx0aXBsZS1maWxlLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgbXVsdGlwbGUgdGV4dCBjb21wb25lbnQuXG4gICAqL1xuICBNdWx0aXBsZVRleHRDb21wb25lbnQgPSAnbXVsdGlwbGUtdGV4dC1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIG51bWJlciBjb21wb25lbnQuXG4gICAqL1xuICBOdW1iZXJDb21wb25lbnQgPSAnbnVtYmVyLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgb2sgYnV0dG9uLlxuICAgKi9cbiAgT2tCdXR0b24gPSAnb2stYnV0dG9uJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBvdmVybGF5IHZhbGlkYXRvci5cbiAgICovXG4gIE92ZXJsYXlWYWxpZGF0b3IgPSAnb3ZlcmxheS12YWxpZGF0b3InLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHBhc3N3b3JkIGNvbXBvbmVudC5cbiAgICovXG4gIFBhc3N3b3JkQ29tcG9uZW50ID0gJ3Bhc3N3b3JkLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgYmFubmVyIG5hbWluZyBhIHBsdWdpbiB0aGlzIG9uZSByZWZ1c2VzLCBvciB3YXJucyBhYm91dCwgcnVubmluZyBiZXNpZGUuXG4gICAqL1xuICBQbHVnaW5Db25mbGljdEJhbm5lciA9ICdwbHVnaW4tY29uZmxpY3QtYmFubmVyJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBiYW5uZXIgYSBibG9ja2VkIHBsdWdpbiByZW5kZXJzIGluIHBsYWNlIG9mIGl0cyBzZXR0aW5ncywgbmFtaW5nIHRoZSBtYW5kYXRvcnlcbiAgICogZGVwZW5kZW5jeSBpdCBpcyB3YWl0aW5nIGZvci5cbiAgICovXG4gIFBsdWdpbkRlcGVuZGVuY3lCYW5uZXIgPSAncGx1Z2luLWRlcGVuZGVuY3ktYmFubmVyJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBjbG9zZSBidXR0b24gb2YgYSBub3RpY2UgdGhhdCByZXF1aXJlcyBjbG9zZSBjb25maXJtYXRpb24uXG4gICAqL1xuICBQbHVnaW5Ob3RpY2VDbG9zZUJ1dHRvbiA9ICdwbHVnaW4tbm90aWNlLWNsb3NlLWJ1dHRvbicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgY29udGFpbmVyIHdyYXBwaW5nIGEgbm90aWNlJ3MgY29udGVudCwgdXNlZCB0byBrZWVwIHRoZSBub3RpY2Ugb3BlbiB3aGVuIGFuXG4gICAqIGludGVyYWN0aXZlIGVsZW1lbnQgaW5zaWRlIGl0IGlzIGNsaWNrZWQuXG4gICAqL1xuICBQbHVnaW5Ob3RpY2VDb250ZW50ID0gJ3BsdWdpbi1ub3RpY2UtY29udGVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgcGx1Z2luIG5hbWUgc2hvd24gYXMgdGhlIHByZWZpeCBvZiBhIG5vdGljZS5cbiAgICovXG4gIFBsdWdpbk5vdGljZU5hbWUgPSAncGx1Z2luLW5vdGljZS1uYW1lJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgYXBwbGllZCB0byB0aGUgbm90aWNlIGVsZW1lbnQgb2YgYSBub3RpY2UgdGhhdCByZXF1aXJlcyBhbiBleHBsaWNpdCBjbG9zZSwgdXNlZCB0byBtYWtlXG4gICAqIGl0cyB3aG9sZSBhcmVhIG5vbi1kaXNtaXNzaWJsZS5cbiAgICovXG4gIFBsdWdpbk5vdGljZVJlcXVpcmVzRXhwbGljaXRDbG9zZSA9ICdwbHVnaW4tbm90aWNlLXJlcXVpcmVzLWV4cGxpY2l0LWNsb3NlJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBwbHVnaW4gc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgUGx1Z2luU2V0dGluZ3NUYWIgPSAncGx1Z2luLXNldHRpbmdzLXRhYicsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgYmFubmVyIGEgcGx1Z2luLXN1Z2dlc3Rpb24gcmVuZGVycyBpbnRvIGEgc2V0dGluZ3MgdGFiLlxuICAgKi9cbiAgUGx1Z2luU3VnZ2VzdGlvbkJhbm5lciA9ICdwbHVnaW4tc3VnZ2VzdGlvbi1iYW5uZXInLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHJvdyBvZiBidXR0b25zIGluIGEgcGx1Z2luLXN1Z2dlc3Rpb24gbm90aWNlLCB3aGljaCBzcGFjZXMgdGhlIGFjdGlvbiBidXR0b24gYXBhcnQgZnJvbVxuICAgKiB0aGUgZGVjbGluZSBidXR0b24uXG4gICAqL1xuICBQbHVnaW5TdWdnZXN0aW9uTm90aWNlQnV0dG9ucyA9ICdwbHVnaW4tc3VnZ2VzdGlvbi1ub3RpY2UtYnV0dG9ucycsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgcG9wb3Zlci5cbiAgICovXG4gIFBvcG92ZXIgPSAncG9wb3ZlcicsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIG9uZSByb3cgb2YgaXRzIG1vZGFsIGluc3RydWN0aW9uIGJhciwgcmV1c2VkIHNvIGEgc2VsZi1jcmVhdGVkIGJhciBpbmhlcml0cyB0aGVcbiAgICogYXBwJ3Mgb3duIGluc3RydWN0aW9uIHN0eWxpbmcuXG4gICAqL1xuICBQcm9tcHRJbnN0cnVjdGlvbiA9ICdwcm9tcHQtaW5zdHJ1Y3Rpb24nLFxuXG4gIC8qKlxuICAgKiBPYnNpZGlhbidzIGNsYXNzIGZvciB0aGUga2V5LWhpbnQgaGFsZiBvZiBvbmUgaW5zdHJ1Y3Rpb24gcm93LiBJdCBpcyB0aGUgb25seSB0aGluZyBjYXJyeWluZyB0aGF0XG4gICAqIGhpbnQncyBib2xkIHdlaWdodCBhbmQgdGhlIGBtYXJnaW4taW5saW5lLWVuZGAgdGhhdCBzZXBhcmF0ZXMgaXQgZnJvbSB0aGUgcHVycG9zZSB0ZXh0LCBzbyBhXG4gICAqIHNlbGYtY3JlYXRlZCBiYXIgdGhhdCBvbWl0cyBpdCByZW5kZXJzIGBhbHQgMUtlZXAgdGhlIG9sZCB0aXRsZWAgd2VsZGVkIHRvZ2V0aGVyLiBSZXVzZWQgcmF0aGVyXG4gICAqIHRoYW4gcmUtaW1wbGVtZW50ZWQ6IHRoZSBhcHAncyBydWxlIGZvciBpdCBpcyB1bnNjb3BlZCwgc28gaXQgcmVhY2hlcyBhIHBsYWluIGBNb2RhbGAgdG9vLCBhbmRcbiAgICogc2hhcmluZyB0aGUgY2xhc3Mga2VlcHMgdGhlIHNlbGYtY3JlYXRlZCBiYXIgYW5kIGBzZXRJbnN0cnVjdGlvbnNgIGZyb20gZXZlciBkcmlmdGluZyBhcGFydC5cbiAgICovXG4gIFByb21wdEluc3RydWN0aW9uQ29tbWFuZCA9ICdwcm9tcHQtaW5zdHJ1Y3Rpb24tY29tbWFuZCcsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgY2xhc3MgZm9yIGl0cyBtb2RhbCBpbnN0cnVjdGlvbiBiYXIsIHJldXNlZCBzbyBhIHNlbGYtY3JlYXRlZCBiYXIgaW5oZXJpdHMgdGhlIGFwcCdzIG93blxuICAgKiBpbnN0cnVjdGlvbiBzdHlsaW5nLlxuICAgKi9cbiAgUHJvbXB0SW5zdHJ1Y3Rpb25zID0gJ3Byb21wdC1pbnN0cnVjdGlvbnMnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHByb21wdCBtb2RhbC5cbiAgICovXG4gIFByb21wdE1vZGFsID0gJ3Byb21wdC1tb2RhbCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgcmVzdG9yZSBidXR0b24gb2YgdGhlIG1pbmltaXplZCBtb2RhbCBiYXIuXG4gICAqL1xuICBSZXN0b3JlQnV0dG9uID0gJ3Jlc3RvcmUtYnV0dG9uJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBzZWxlY3QgaXRlbSBtb2RhbC5cbiAgICovXG4gIFNlbGVjdEl0ZW1Nb2RhbCA9ICdzZWxlY3QtaXRlbS1tb2RhbCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgc2VsZWN0IG9wdGlvbiBtb2RhbC5cbiAgICovXG4gIFNlbGVjdE9wdGlvbk1vZGFsID0gJ3NlbGVjdC1vcHRpb24tbW9kYWwnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHNldHRpbmcgY29tcG9uZW50IHdyYXBwZXIuXG4gICAqL1xuICBTZXR0aW5nQ29tcG9uZW50V3JhcHBlciA9ICdzZXR0aW5nLWNvbXBvbmVudC13cmFwcGVyJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSBzZXR0aW5ncyB0YWJzLlxuICAgKi9cbiAgU2V0dGluZ3NUYWJzID0gJ3NldHRpbmdzLXRhYnMnLFxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0YWcgbGlzdCBjb21wb25lbnQuXG4gICAqL1xuICBUYWdMaXN0Q29tcG9uZW50ID0gJ3RhZy1saXN0LWNvbXBvbmVudCcsXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHRlbGVwaG9uZSBjb21wb25lbnQuXG4gICAqL1xuICBUZWxlcGhvbmVDb21wb25lbnQgPSAndGVsZXBob25lLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgdGV4dCBib3guXG4gICAqL1xuICBUZXh0Qm94ID0gJ3RleHQtYm94JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0aW1lIGNvbXBvbmVudC5cbiAgICovXG4gIFRpbWVDb21wb25lbnQgPSAndGltZS1jb21wb25lbnQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHRvb2x0aXAuXG4gICAqL1xuICBUb29sdGlwID0gJ3Rvb2x0aXAnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHRvb2x0aXAgYXJyb3cuXG4gICAqL1xuICBUb29sdGlwQXJyb3cgPSAndG9vbHRpcC1hcnJvdycsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgdG9vbHRpcCB2YWxpZGF0b3IuXG4gICAqL1xuICBUb29sdGlwVmFsaWRhdG9yID0gJ3Rvb2x0aXAtdmFsaWRhdG9yJyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0cmktc3RhdGUgY2hlY2tib3ggY29tcG9uZW50LlxuICAgKi9cbiAgVHJpU3RhdGVDaGVja2JveENvbXBvbmVudCA9ICd0cmktc3RhdGUtY2hlY2tib3gtY29tcG9uZW50JyxcblxuICAvKipcbiAgICogQSBDU1MgY2xhc3MgZm9yIHRoZSB0eXBlZCBkcm9wZG93biBjb21wb25lbnQuXG4gICAqL1xuICBUeXBlZERyb3Bkb3duQ29tcG9uZW50ID0gJ3R5cGVkLWRyb3Bkb3duLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgdHlwZWQgbXVsdGlwbGUgZHJvcGRvd24gY29tcG9uZW50LlxuICAgKi9cbiAgVHlwZWRNdWx0aXBsZURyb3Bkb3duQ29tcG9uZW50ID0gJ3R5cGVkLW11bHRpcGxlLWRyb3Bkb3duLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciBhbiBpbnB1dCB0aGUgdXNlciBoYXMgbm90IGludGVyYWN0ZWQgd2l0aCB5ZXQsIHVzZWQgdG8gZGVmZXIgdGhlIGludmFsaWQgc3R5bGluZyB1bnRpbFxuICAgKiB0aGUgaW5wdXQgaXMgdG91Y2hlZC5cbiAgICovXG4gIFVudG91Y2hlZCA9ICd1bnRvdWNoZWQnLFxuXG4gIC8qKlxuICAgKiBBIENTUyBjbGFzcyBmb3IgdGhlIHVybCBjb21wb25lbnQuXG4gICAqL1xuICBVcmxDb21wb25lbnQgPSAndXJsLWNvbXBvbmVudCcsXG5cbiAgLyoqXG4gICAqIEEgQ1NTIGNsYXNzIGZvciB0aGUgd2VlayBjb21wb25lbnQuXG4gICAqL1xuICBXZWVrQ29tcG9uZW50ID0gJ3dlZWstY29tcG9uZW50J1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFTTyxJQUFLLFdBQUwsa0JBQUtBLGNBQUw7QUFJTCxFQUFBQSxVQUFBLGdCQUFhO0FBS2IsRUFBQUEsVUFBQSxzQkFBbUI7QUFLbkIsRUFBQUEsVUFBQSwwQkFBdUI7QUFLdkIsRUFBQUEsVUFBQSxrQkFBZTtBQUtmLEVBQUFBLFVBQUEsdUJBQW9CO0FBS3BCLEVBQUFBLFVBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLFVBQUEsVUFBTztBQUtQLEVBQUFBLFVBQUEsMkJBQXdCO0FBS3hCLEVBQUFBLFVBQUEsK0JBQTRCO0FBSzVCLEVBQUFBLFVBQUEsMkJBQXdCO0FBS3hCLEVBQUFBLFVBQUEsNEJBQXlCO0FBS3pCLEVBQUFBLFVBQUEsNkJBQTBCO0FBSzFCLEVBQUFBLFVBQUEsOEJBQTJCO0FBSzNCLEVBQUFBLFVBQUEsa0JBQWU7QUFLZixFQUFBQSxVQUFBLDJCQUF3QjtBQUt4QixFQUFBQSxVQUFBLDBCQUF1QjtBQUt2QixFQUFBQSxVQUFBLG1CQUFnQjtBQUtoQixFQUFBQSxVQUFBLHVCQUFvQjtBQUtwQixFQUFBQSxVQUFBLG9CQUFpQjtBQUtqQixFQUFBQSxVQUFBLG1CQUFnQjtBQUtoQixFQUFBQSxVQUFBLHNCQUFtQjtBQUtuQixFQUFBQSxVQUFBLHlCQUFzQjtBQUl0QixFQUFBQSxVQUFBLHFCQUFrQjtBQUtsQixFQUFBQSxVQUFBLGlCQUFjO0FBTWQsRUFBQUEsVUFBQSxjQUFXO0FBS1gsRUFBQUEsVUFBQSxpQkFBYztBQUtkLEVBQUFBLFVBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLFVBQUEsaUJBQWM7QUFLZCxFQUFBQSxVQUFBLG1CQUFnQjtBQUloQixFQUFBQSxVQUFBLHNCQUFtQjtBQUtuQixFQUFBQSxVQUFBLHNCQUFtQjtBQUtuQixFQUFBQSxVQUFBLG9CQUFpQjtBQUtqQixFQUFBQSxVQUFBLHVCQUFvQjtBQU1wQixFQUFBQSxVQUFBLGdDQUE2QjtBQUs3QixFQUFBQSxVQUFBLDRCQUF5QjtBQUt6QixFQUFBQSxVQUFBLGtCQUFlO0FBT2YsRUFBQUEsVUFBQSx5QkFBc0I7QUFLdEIsRUFBQUEsVUFBQSx3QkFBcUI7QUFLckIsRUFBQUEsVUFBQSxtQkFBZ0I7QUFNaEIsRUFBQUEsVUFBQSx1QkFBb0I7QUFLcEIsRUFBQUEsVUFBQSxvQkFBaUI7QUFLakIsRUFBQUEsVUFBQSwrQkFBNEI7QUFLNUIsRUFBQUEsVUFBQSw0QkFBeUI7QUFLekIsRUFBQUEsVUFBQSwyQkFBd0I7QUFLeEIsRUFBQUEsVUFBQSwyQkFBd0I7QUFLeEIsRUFBQUEsVUFBQSxxQkFBa0I7QUFLbEIsRUFBQUEsVUFBQSxjQUFXO0FBS1gsRUFBQUEsVUFBQSxzQkFBbUI7QUFLbkIsRUFBQUEsVUFBQSx1QkFBb0I7QUFLcEIsRUFBQUEsVUFBQSwwQkFBdUI7QUFNdkIsRUFBQUEsVUFBQSw0QkFBeUI7QUFLekIsRUFBQUEsVUFBQSw2QkFBMEI7QUFNMUIsRUFBQUEsVUFBQSx5QkFBc0I7QUFLdEIsRUFBQUEsVUFBQSxzQkFBbUI7QUFNbkIsRUFBQUEsVUFBQSx1Q0FBb0M7QUFLcEMsRUFBQUEsVUFBQSx1QkFBb0I7QUFLcEIsRUFBQUEsVUFBQSw0QkFBeUI7QUFNekIsRUFBQUEsVUFBQSxtQ0FBZ0M7QUFLaEMsRUFBQUEsVUFBQSxhQUFVO0FBTVYsRUFBQUEsVUFBQSx1QkFBb0I7QUFTcEIsRUFBQUEsVUFBQSw4QkFBMkI7QUFNM0IsRUFBQUEsVUFBQSx3QkFBcUI7QUFLckIsRUFBQUEsVUFBQSxpQkFBYztBQUtkLEVBQUFBLFVBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLFVBQUEscUJBQWtCO0FBS2xCLEVBQUFBLFVBQUEsdUJBQW9CO0FBS3BCLEVBQUFBLFVBQUEsNkJBQTBCO0FBSzFCLEVBQUFBLFVBQUEsa0JBQWU7QUFJZixFQUFBQSxVQUFBLHNCQUFtQjtBQUluQixFQUFBQSxVQUFBLHdCQUFxQjtBQUtyQixFQUFBQSxVQUFBLGFBQVU7QUFLVixFQUFBQSxVQUFBLG1CQUFnQjtBQUtoQixFQUFBQSxVQUFBLGFBQVU7QUFLVixFQUFBQSxVQUFBLGtCQUFlO0FBS2YsRUFBQUEsVUFBQSxzQkFBbUI7QUFLbkIsRUFBQUEsVUFBQSwrQkFBNEI7QUFLNUIsRUFBQUEsVUFBQSw0QkFBeUI7QUFLekIsRUFBQUEsVUFBQSxvQ0FBaUM7QUFNakMsRUFBQUEsVUFBQSxlQUFZO0FBS1osRUFBQUEsVUFBQSxrQkFBZTtBQUtmLEVBQUFBLFVBQUEsbUJBQWdCO0FBaGFOLFNBQUFBO0FBQUEsR0FBQTsiLAogICJuYW1lcyI6IFsiQ3NzQ2xhc3MiXQp9Cg==