@mnaoumov/obsidian-lib 1.0.0 → 1.0.1

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 (386) hide show
  1. package/README.md +9 -1
  2. package/dist/lib/cjs/__merged.cjs +40 -64
  3. package/dist/lib/cjs/active-file-provider.cjs +40 -64
  4. package/dist/lib/cjs/app.cjs +40 -64
  5. package/dist/lib/cjs/async-with-notice.cjs +40 -64
  6. package/dist/lib/cjs/attachment-path.cjs +40 -64
  7. package/dist/lib/cjs/attachment-unit-folder.cjs +40 -64
  8. package/dist/lib/cjs/backlink-index.cjs +41 -65
  9. package/dist/lib/cjs/backlink.cjs +40 -64
  10. package/dist/lib/cjs/bases-view-registrar.cjs +40 -64
  11. package/dist/lib/cjs/callout.cjs +40 -64
  12. package/dist/lib/cjs/canvas.cjs +40 -64
  13. package/dist/lib/cjs/case-insensitive-file-index.cjs +40 -64
  14. package/dist/lib/cjs/code-block-markdown-information.cjs +40 -64
  15. package/dist/lib/cjs/code-block-reg-exp.cjs +40 -64
  16. package/dist/lib/cjs/codemirror/index.cjs +40 -64
  17. package/dist/lib/cjs/codemirror/state-field-spec.cjs +40 -64
  18. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +40 -64
  19. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +40 -64
  20. package/dist/lib/cjs/command-handlers/command-handler.cjs +40 -64
  21. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +40 -64
  22. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +40 -64
  23. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +40 -64
  24. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +40 -64
  25. package/dist/lib/cjs/command-handlers/index.cjs +40 -64
  26. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +40 -64
  27. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +40 -64
  28. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +40 -64
  29. package/dist/lib/cjs/command-registrar.cjs +40 -64
  30. package/dist/lib/cjs/community-plugins.cjs +40 -64
  31. package/dist/lib/cjs/components/abort-signal-component.cjs +40 -64
  32. package/dist/lib/cjs/components/all-windows-event-component.cjs +40 -64
  33. package/dist/lib/cjs/components/async-error-handler-component.cjs +40 -64
  34. package/dist/lib/cjs/components/async-events-component.cjs +40 -64
  35. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +40 -64
  36. package/dist/lib/cjs/components/component-ex.cjs +41 -65
  37. package/dist/lib/cjs/components/console-debug-component.cjs +40 -64
  38. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +40 -64
  39. package/dist/lib/cjs/components/disposable-component.cjs +40 -64
  40. package/dist/lib/cjs/components/embed-extensions-component.cjs +40 -64
  41. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +40 -64
  42. package/dist/lib/cjs/components/index.cjs +40 -64
  43. package/dist/lib/cjs/components/layout-ready-component.cjs +40 -64
  44. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +40 -64
  45. package/dist/lib/cjs/components/monkey-around-component.cjs +40 -64
  46. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +40 -64
  47. package/dist/lib/cjs/components/plugin-context-component.cjs +40 -64
  48. package/dist/lib/cjs/components/plugin-gate-component.cjs +41 -65
  49. package/dist/lib/cjs/components/plugin-notice-component.cjs +40 -64
  50. package/dist/lib/cjs/components/plugin-settings-component.cjs +41 -65
  51. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +40 -64
  52. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +40 -64
  53. package/dist/lib/cjs/components/pointer-position-component.cjs +40 -64
  54. package/dist/lib/cjs/components/registry-component.cjs +40 -64
  55. package/dist/lib/cjs/components/release-notes-component.cjs +40 -64
  56. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +40 -64
  57. package/dist/lib/cjs/components/rmdir-guard-component.cjs +40 -64
  58. package/dist/lib/cjs/components/settings-migration-component.cjs +40 -64
  59. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +40 -64
  60. package/dist/lib/cjs/components/templates-language-component.cjs +40 -64
  61. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +40 -64
  62. package/dist/lib/cjs/constructors/index.cjs +40 -64
  63. package/dist/lib/cjs/css-class.cjs +40 -64
  64. package/dist/lib/cjs/data-handler.cjs +40 -64
  65. package/dist/lib/cjs/dataview-link.cjs +40 -64
  66. package/dist/lib/cjs/dataview.cjs +40 -64
  67. package/dist/lib/cjs/debug.cjs +40 -64
  68. package/dist/lib/cjs/demo-vault-helper-settings.cjs +40 -64
  69. package/dist/lib/cjs/demo-vault-helper.cjs +40 -64
  70. package/dist/lib/cjs/demo-vault-naming.cjs +40 -64
  71. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +40 -64
  72. package/dist/lib/cjs/desktop-trusted-input.cjs +40 -64
  73. package/dist/lib/cjs/editor-extension-registrar.cjs +40 -64
  74. package/dist/lib/cjs/editor-suggest-registrar.cjs +40 -64
  75. package/dist/lib/cjs/editor.cjs +40 -64
  76. package/dist/lib/cjs/events.cjs +40 -64
  77. package/dist/lib/cjs/extensions-registrar.cjs +40 -64
  78. package/dist/lib/cjs/file-change.cjs +40 -64
  79. package/dist/lib/cjs/file-explorer.cjs +40 -64
  80. package/dist/lib/cjs/file-manager.cjs +40 -64
  81. package/dist/lib/cjs/file-system.cjs +40 -64
  82. package/dist/lib/cjs/folder-note.cjs +40 -64
  83. package/dist/lib/cjs/frontmatter-formatting.cjs +41 -65
  84. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +40 -64
  85. package/dist/lib/cjs/frontmatter.cjs +40 -64
  86. package/dist/lib/cjs/generated-during-build.cjs +41 -65
  87. package/dist/lib/cjs/generated-during-build.d.cts +8 -2
  88. package/dist/lib/cjs/hover-link-source-registrar.cjs +40 -64
  89. package/dist/lib/cjs/html-element.cjs +40 -64
  90. package/dist/lib/cjs/i18n/custom-type-options.cjs +40 -64
  91. package/dist/lib/cjs/i18n/default-translations.cjs +40 -64
  92. package/dist/lib/cjs/i18n/i18n.cjs +40 -64
  93. package/dist/lib/cjs/i18n/index.cjs +40 -64
  94. package/dist/lib/cjs/i18n/locales/en.cjs +40 -64
  95. package/dist/lib/cjs/i18n/locales/index.cjs +40 -64
  96. package/dist/lib/cjs/i18n/locales/translations-map.cjs +40 -64
  97. package/dist/lib/cjs/index.cjs +40 -64
  98. package/dist/lib/cjs/is-in-obsidian.cjs +40 -64
  99. package/dist/lib/cjs/library-styles.cjs +40 -64
  100. package/dist/lib/cjs/library.cjs +40 -64
  101. package/dist/lib/cjs/link-name.cjs +40 -64
  102. package/dist/lib/cjs/link-update-progress.cjs +40 -64
  103. package/dist/lib/cjs/link.cjs +40 -64
  104. package/dist/lib/cjs/logger.cjs +40 -64
  105. package/dist/lib/cjs/loop.cjs +40 -64
  106. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +40 -64
  107. package/dist/lib/cjs/markdown-code-block-processor.cjs +40 -64
  108. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +40 -64
  109. package/dist/lib/cjs/markdown-view.cjs +40 -64
  110. package/dist/lib/cjs/markdown.cjs +40 -64
  111. package/dist/lib/cjs/menu-event-registrar.cjs +40 -64
  112. package/dist/lib/cjs/metadata-cache.cjs +40 -64
  113. package/dist/lib/cjs/mobile-trusted-input.cjs +40 -64
  114. package/dist/lib/cjs/modals/alert.cjs +40 -64
  115. package/dist/lib/cjs/modals/confirm.cjs +40 -64
  116. package/dist/lib/cjs/modals/index.cjs +40 -64
  117. package/dist/lib/cjs/modals/minimizable-modal.cjs +40 -64
  118. package/dist/lib/cjs/modals/modal-command-builder.cjs +40 -64
  119. package/dist/lib/cjs/modals/modal.cjs +40 -64
  120. package/dist/lib/cjs/modals/prompt.cjs +40 -64
  121. package/dist/lib/cjs/modals/select-item.cjs +40 -64
  122. package/dist/lib/cjs/modals/select-option.cjs +40 -64
  123. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +40 -64
  124. package/dist/lib/cjs/note-priority.cjs +41 -65
  125. package/dist/lib/cjs/notebook-navigator.cjs +40 -64
  126. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +40 -64
  127. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +40 -64
  128. package/dist/lib/cjs/obsidian-settings.cjs +40 -64
  129. package/dist/lib/cjs/parse-link.cjs +40 -64
  130. package/dist/lib/cjs/path-settings.cjs +40 -64
  131. package/dist/lib/cjs/pdf.cjs +40 -64
  132. package/dist/lib/cjs/plugin/index.cjs +40 -64
  133. package/dist/lib/cjs/plugin/plugin-api.cjs +40 -64
  134. package/dist/lib/cjs/plugin/plugin-context.cjs +40 -64
  135. package/dist/lib/cjs/plugin/plugin-event-source.cjs +40 -64
  136. package/dist/lib/cjs/plugin/plugin-install-state.cjs +40 -64
  137. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +40 -64
  138. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +41 -65
  139. package/dist/lib/cjs/plugin/plugin.cjs +41 -65
  140. package/dist/lib/cjs/plugin/settings-migration-api.cjs +40 -64
  141. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +40 -64
  142. package/dist/lib/cjs/popovers/field-popover.cjs +40 -64
  143. package/dist/lib/cjs/popovers/index.cjs +40 -64
  144. package/dist/lib/cjs/popovers/popover-anchor.cjs +40 -64
  145. package/dist/lib/cjs/popovers/popover.cjs +40 -64
  146. package/dist/lib/cjs/property-entry.cjs +40 -64
  147. package/dist/lib/cjs/queue.cjs +40 -64
  148. package/dist/lib/cjs/react/app-context.cjs +40 -64
  149. package/dist/lib/cjs/react/index.cjs +40 -64
  150. package/dist/lib/cjs/reference.cjs +40 -64
  151. package/dist/lib/cjs/resource-lock.cjs +40 -64
  152. package/dist/lib/cjs/resource-url.cjs +40 -64
  153. package/dist/lib/cjs/ribbon-icon-registrar.cjs +40 -64
  154. package/dist/lib/cjs/setting-components/checkbox-component.cjs +40 -64
  155. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +40 -64
  156. package/dist/lib/cjs/setting-components/date-component.cjs +40 -64
  157. package/dist/lib/cjs/setting-components/date-time-component.cjs +40 -64
  158. package/dist/lib/cjs/setting-components/email-component.cjs +40 -64
  159. package/dist/lib/cjs/setting-components/file-component.cjs +40 -64
  160. package/dist/lib/cjs/setting-components/index.cjs +40 -64
  161. package/dist/lib/cjs/setting-components/month-component.cjs +40 -64
  162. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +41 -65
  163. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +40 -64
  164. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +40 -64
  165. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +40 -64
  166. package/dist/lib/cjs/setting-components/number-component.cjs +40 -64
  167. package/dist/lib/cjs/setting-components/password-component.cjs +40 -64
  168. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +40 -64
  169. package/dist/lib/cjs/setting-components/telephone-component.cjs +40 -64
  170. package/dist/lib/cjs/setting-components/text-based-component.cjs +40 -64
  171. package/dist/lib/cjs/setting-components/time-component.cjs +40 -64
  172. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +40 -64
  173. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +40 -64
  174. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +40 -64
  175. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +40 -64
  176. package/dist/lib/cjs/setting-components/typed-text-component.cjs +41 -65
  177. package/dist/lib/cjs/setting-components/url-component.cjs +40 -64
  178. package/dist/lib/cjs/setting-components/validator-component.cjs +41 -65
  179. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +40 -64
  180. package/dist/lib/cjs/setting-components/week-component.cjs +40 -64
  181. package/dist/lib/cjs/setting-ex.cjs +40 -64
  182. package/dist/lib/cjs/setting-group-ex.cjs +40 -64
  183. package/dist/lib/cjs/status-bar-item-registrar.cjs +40 -64
  184. package/dist/lib/cjs/templater.cjs +40 -64
  185. package/dist/lib/cjs/transformers/duration-transformer.cjs +40 -64
  186. package/dist/lib/cjs/transformers/index.cjs +40 -64
  187. package/dist/lib/cjs/trusted-input.cjs +40 -64
  188. package/dist/lib/cjs/validation.cjs +40 -64
  189. package/dist/lib/cjs/vault-delete.cjs +40 -64
  190. package/dist/lib/cjs/vault-transaction.cjs +40 -64
  191. package/dist/lib/cjs/vault.cjs +41 -65
  192. package/dist/lib/cjs/view-registrar.cjs +40 -64
  193. package/dist/lib/cjs/workspace.cjs +40 -64
  194. package/dist/lib/esm/__merged.mjs +6 -14
  195. package/dist/lib/esm/active-file-provider.mjs +6 -14
  196. package/dist/lib/esm/app.mjs +6 -14
  197. package/dist/lib/esm/async-with-notice.mjs +6 -14
  198. package/dist/lib/esm/attachment-path.mjs +6 -14
  199. package/dist/lib/esm/attachment-unit-folder.mjs +6 -14
  200. package/dist/lib/esm/backlink-index.mjs +6 -14
  201. package/dist/lib/esm/backlink.mjs +6 -14
  202. package/dist/lib/esm/bases-view-registrar.mjs +6 -14
  203. package/dist/lib/esm/callout.mjs +6 -14
  204. package/dist/lib/esm/canvas.mjs +6 -14
  205. package/dist/lib/esm/case-insensitive-file-index.mjs +6 -14
  206. package/dist/lib/esm/code-block-markdown-information.mjs +5 -13
  207. package/dist/lib/esm/code-block-reg-exp.mjs +6 -14
  208. package/dist/lib/esm/codemirror/index.mjs +6 -14
  209. package/dist/lib/esm/codemirror/state-field-spec.mjs +5 -13
  210. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +6 -14
  211. package/dist/lib/esm/command-handlers/command-handler-component.mjs +6 -14
  212. package/dist/lib/esm/command-handlers/command-handler.mjs +6 -14
  213. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +6 -14
  214. package/dist/lib/esm/command-handlers/file-command-handler.mjs +6 -14
  215. package/dist/lib/esm/command-handlers/folder-command-handler.mjs +6 -14
  216. package/dist/lib/esm/command-handlers/global-command-handler.mjs +6 -14
  217. package/dist/lib/esm/command-handlers/index.mjs +6 -14
  218. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +6 -14
  219. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +6 -14
  220. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +6 -14
  221. package/dist/lib/esm/command-registrar.mjs +6 -14
  222. package/dist/lib/esm/community-plugins.mjs +6 -14
  223. package/dist/lib/esm/components/abort-signal-component.mjs +6 -14
  224. package/dist/lib/esm/components/all-windows-event-component.mjs +6 -14
  225. package/dist/lib/esm/components/async-error-handler-component.mjs +6 -14
  226. package/dist/lib/esm/components/async-events-component.mjs +6 -14
  227. package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +6 -14
  228. package/dist/lib/esm/components/component-ex.mjs +6 -14
  229. package/dist/lib/esm/components/console-debug-component.mjs +6 -14
  230. package/dist/lib/esm/components/core-plugin-toggle-component.mjs +6 -14
  231. package/dist/lib/esm/components/disposable-component.mjs +6 -14
  232. package/dist/lib/esm/components/embed-extensions-component.mjs +6 -14
  233. package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +6 -14
  234. package/dist/lib/esm/components/index.mjs +6 -14
  235. package/dist/lib/esm/components/layout-ready-component.mjs +6 -14
  236. package/dist/lib/esm/components/menu-event-registrar-component.mjs +6 -14
  237. package/dist/lib/esm/components/monkey-around-component.mjs +6 -14
  238. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +6 -14
  239. package/dist/lib/esm/components/plugin-context-component.mjs +6 -14
  240. package/dist/lib/esm/components/plugin-gate-component.mjs +6 -14
  241. package/dist/lib/esm/components/plugin-notice-component.mjs +6 -14
  242. package/dist/lib/esm/components/plugin-settings-component.mjs +6 -14
  243. package/dist/lib/esm/components/plugin-settings-tab-component.mjs +6 -14
  244. package/dist/lib/esm/components/plugin-suggestion-component.mjs +6 -14
  245. package/dist/lib/esm/components/pointer-position-component.mjs +6 -14
  246. package/dist/lib/esm/components/registry-component.mjs +6 -14
  247. package/dist/lib/esm/components/release-notes-component.mjs +6 -14
  248. package/dist/lib/esm/components/rename-delete-handler-component.mjs +6 -14
  249. package/dist/lib/esm/components/rmdir-guard-component.mjs +6 -14
  250. package/dist/lib/esm/components/settings-migration-component.mjs +6 -14
  251. package/dist/lib/esm/components/syntax-highlighting-component.mjs +6 -14
  252. package/dist/lib/esm/components/templates-language-component.mjs +6 -14
  253. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +6 -14
  254. package/dist/lib/esm/constructors/index.mjs +6 -14
  255. package/dist/lib/esm/css-class.mjs +6 -14
  256. package/dist/lib/esm/data-handler.mjs +6 -14
  257. package/dist/lib/esm/dataview-link.mjs +6 -14
  258. package/dist/lib/esm/dataview.mjs +6 -14
  259. package/dist/lib/esm/debug.mjs +6 -14
  260. package/dist/lib/esm/demo-vault-helper-settings.mjs +5 -13
  261. package/dist/lib/esm/demo-vault-helper.mjs +6 -14
  262. package/dist/lib/esm/demo-vault-naming.mjs +6 -14
  263. package/dist/lib/esm/desktop-demo-vault-opener.mjs +6 -14
  264. package/dist/lib/esm/desktop-trusted-input.mjs +6 -14
  265. package/dist/lib/esm/editor-extension-registrar.mjs +6 -14
  266. package/dist/lib/esm/editor-suggest-registrar.mjs +6 -14
  267. package/dist/lib/esm/editor.mjs +6 -14
  268. package/dist/lib/esm/events.mjs +6 -14
  269. package/dist/lib/esm/extensions-registrar.mjs +6 -14
  270. package/dist/lib/esm/file-change.mjs +6 -14
  271. package/dist/lib/esm/file-explorer.mjs +6 -14
  272. package/dist/lib/esm/file-manager.mjs +6 -14
  273. package/dist/lib/esm/file-system.mjs +6 -14
  274. package/dist/lib/esm/folder-note.mjs +6 -14
  275. package/dist/lib/esm/frontmatter-formatting.mjs +6 -14
  276. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +6 -14
  277. package/dist/lib/esm/frontmatter.mjs +6 -14
  278. package/dist/lib/esm/generated-during-build.d.mts +8 -2
  279. package/dist/lib/esm/generated-during-build.mjs +7 -15
  280. package/dist/lib/esm/hover-link-source-registrar.mjs +6 -14
  281. package/dist/lib/esm/html-element.mjs +6 -14
  282. package/dist/lib/esm/i18n/custom-type-options.mjs +6 -14
  283. package/dist/lib/esm/i18n/default-translations.mjs +6 -14
  284. package/dist/lib/esm/i18n/i18n.mjs +6 -14
  285. package/dist/lib/esm/i18n/index.mjs +6 -14
  286. package/dist/lib/esm/i18n/locales/en.mjs +6 -14
  287. package/dist/lib/esm/i18n/locales/index.mjs +6 -14
  288. package/dist/lib/esm/i18n/locales/translations-map.mjs +6 -14
  289. package/dist/lib/esm/index.mjs +6 -14
  290. package/dist/lib/esm/is-in-obsidian.mjs +6 -14
  291. package/dist/lib/esm/library-styles.mjs +6 -14
  292. package/dist/lib/esm/library.mjs +6 -14
  293. package/dist/lib/esm/link-name.mjs +6 -14
  294. package/dist/lib/esm/link-update-progress.mjs +5 -13
  295. package/dist/lib/esm/link.mjs +6 -14
  296. package/dist/lib/esm/logger.mjs +6 -14
  297. package/dist/lib/esm/loop.mjs +6 -14
  298. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +6 -14
  299. package/dist/lib/esm/markdown-code-block-processor.mjs +6 -14
  300. package/dist/lib/esm/markdown-post-processor-registrar.mjs +6 -14
  301. package/dist/lib/esm/markdown-view.mjs +6 -14
  302. package/dist/lib/esm/markdown.mjs +6 -14
  303. package/dist/lib/esm/menu-event-registrar.mjs +5 -13
  304. package/dist/lib/esm/metadata-cache.mjs +6 -14
  305. package/dist/lib/esm/mobile-trusted-input.mjs +6 -14
  306. package/dist/lib/esm/modals/alert.mjs +6 -14
  307. package/dist/lib/esm/modals/confirm.mjs +6 -14
  308. package/dist/lib/esm/modals/index.mjs +6 -14
  309. package/dist/lib/esm/modals/minimizable-modal.mjs +6 -14
  310. package/dist/lib/esm/modals/modal-command-builder.mjs +6 -14
  311. package/dist/lib/esm/modals/modal.mjs +6 -14
  312. package/dist/lib/esm/modals/prompt.mjs +6 -14
  313. package/dist/lib/esm/modals/select-item.mjs +6 -14
  314. package/dist/lib/esm/modals/select-option.mjs +6 -14
  315. package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +6 -14
  316. package/dist/lib/esm/note-priority.mjs +6 -14
  317. package/dist/lib/esm/notebook-navigator.mjs +6 -14
  318. package/dist/lib/esm/obsidian-dev-utils-state.mjs +6 -14
  319. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +6 -14
  320. package/dist/lib/esm/obsidian-settings.mjs +6 -14
  321. package/dist/lib/esm/parse-link.mjs +6 -14
  322. package/dist/lib/esm/path-settings.mjs +6 -14
  323. package/dist/lib/esm/pdf.mjs +6 -14
  324. package/dist/lib/esm/plugin/index.mjs +6 -14
  325. package/dist/lib/esm/plugin/plugin-api.mjs +6 -14
  326. package/dist/lib/esm/plugin/plugin-context.mjs +6 -14
  327. package/dist/lib/esm/plugin/plugin-event-source.mjs +6 -14
  328. package/dist/lib/esm/plugin/plugin-install-state.mjs +6 -14
  329. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +6 -14
  330. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +6 -14
  331. package/dist/lib/esm/plugin/plugin.mjs +6 -14
  332. package/dist/lib/esm/plugin/settings-migration-api.mjs +5 -13
  333. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +6 -14
  334. package/dist/lib/esm/popovers/field-popover.mjs +6 -14
  335. package/dist/lib/esm/popovers/index.mjs +6 -14
  336. package/dist/lib/esm/popovers/popover-anchor.mjs +6 -14
  337. package/dist/lib/esm/popovers/popover.mjs +6 -14
  338. package/dist/lib/esm/property-entry.mjs +6 -14
  339. package/dist/lib/esm/queue.mjs +6 -14
  340. package/dist/lib/esm/react/app-context.mjs +6 -14
  341. package/dist/lib/esm/react/index.mjs +6 -14
  342. package/dist/lib/esm/reference.mjs +6 -14
  343. package/dist/lib/esm/resource-lock.mjs +6 -14
  344. package/dist/lib/esm/resource-url.mjs +6 -14
  345. package/dist/lib/esm/ribbon-icon-registrar.mjs +6 -14
  346. package/dist/lib/esm/setting-components/checkbox-component.mjs +6 -14
  347. package/dist/lib/esm/setting-components/code-highlighter-component.mjs +6 -14
  348. package/dist/lib/esm/setting-components/date-component.mjs +6 -14
  349. package/dist/lib/esm/setting-components/date-time-component.mjs +6 -14
  350. package/dist/lib/esm/setting-components/email-component.mjs +6 -14
  351. package/dist/lib/esm/setting-components/file-component.mjs +6 -14
  352. package/dist/lib/esm/setting-components/index.mjs +6 -14
  353. package/dist/lib/esm/setting-components/month-component.mjs +6 -14
  354. package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +6 -14
  355. package/dist/lib/esm/setting-components/multiple-email-component.mjs +6 -14
  356. package/dist/lib/esm/setting-components/multiple-file-component.mjs +6 -14
  357. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -14
  358. package/dist/lib/esm/setting-components/number-component.mjs +6 -14
  359. package/dist/lib/esm/setting-components/password-component.mjs +6 -14
  360. package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +6 -14
  361. package/dist/lib/esm/setting-components/telephone-component.mjs +6 -14
  362. package/dist/lib/esm/setting-components/text-based-component.mjs +6 -14
  363. package/dist/lib/esm/setting-components/time-component.mjs +6 -14
  364. package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +6 -14
  365. package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +6 -14
  366. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +6 -14
  367. package/dist/lib/esm/setting-components/typed-range-text-component.mjs +6 -14
  368. package/dist/lib/esm/setting-components/typed-text-component.mjs +6 -14
  369. package/dist/lib/esm/setting-components/url-component.mjs +6 -14
  370. package/dist/lib/esm/setting-components/validator-component.mjs +6 -14
  371. package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +5 -13
  372. package/dist/lib/esm/setting-components/week-component.mjs +6 -14
  373. package/dist/lib/esm/setting-ex.mjs +6 -14
  374. package/dist/lib/esm/setting-group-ex.mjs +6 -14
  375. package/dist/lib/esm/status-bar-item-registrar.mjs +6 -14
  376. package/dist/lib/esm/templater.mjs +6 -14
  377. package/dist/lib/esm/transformers/duration-transformer.mjs +6 -14
  378. package/dist/lib/esm/transformers/index.mjs +6 -14
  379. package/dist/lib/esm/trusted-input.mjs +6 -14
  380. package/dist/lib/esm/validation.mjs +6 -14
  381. package/dist/lib/esm/vault-delete.mjs +6 -14
  382. package/dist/lib/esm/vault-transaction.mjs +6 -14
  383. package/dist/lib/esm/vault.mjs +6 -14
  384. package/dist/lib/esm/view-registrar.mjs +6 -14
  385. package/dist/lib/esm/workspace.mjs +6 -14
  386. package/package.json +69 -24
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  (function initEsm() {
@@ -616,4 +608,4 @@ export {
616
608
  reloadPlugin,
617
609
  showErrorAndDisablePlugin
618
610
  };
619
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbi9wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHVzaW5nIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBQbHVnaW5CYXNlIHJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyAoY29udGV4dCwgaTE4biwgZXJyb3IgaGFuZGxpbmcsIGFib3J0IHNpZ25hbCwgbGlmZWN5Y2xlIGV2ZW50cywgZGVidWcpLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50LFxuICBJY29uTmFtZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBtaXhpbkFzeW5jRXZlbnRzIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jLWV2ZW50cyc7XG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7IG5vb3BBc3luYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luQ29uZmxpY3QsXG4gIFBsdWdpbkRlcGVuZGVuY3lcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tZ2F0ZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnNNYXAgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5BcGlEZWNsYXJhdGlvbiB9IGZyb20gJy4vcGx1Z2luLWFwaS50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBsdWdpbkV2ZW50TWFwLFxuICBQbHVnaW5FdmVudFNvdXJjZVxufSBmcm9tICcuL3BsdWdpbi1ldmVudC1zb3VyY2UudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQgfSBmcm9tICcuL3BsdWdpbi1saWZlY3ljbGUtZXZlbnRzLnRzJztcblxuaW1wb3J0IHsgQXBwQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21tYW5kLWhhbmRsZXJzL2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZC1oYW5kbGVycy91bmxvY2stYWN0aXZlLW5vdGUtY29tbWFuZC1oYW5kbGVyLnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgeyBBYm9ydFNpZ25hbENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBDb25zb2xlRGVidWdDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbnRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5HYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tZ2F0ZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGx1Z2luTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGx1Z2luRGF0YUhhbmRsZXIgfSBmcm9tICcuLi9kYXRhLWhhbmRsZXIudHMnO1xuaW1wb3J0IHsgaW5pdEkxOE4gfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9uc01hcCB9IGZyb20gJy4uL2kxOG4vbG9jYWxlcy90cmFuc2xhdGlvbnMtbWFwLnRzJztcbmltcG9ydCB7IFJlc291cmNlTG9ja0NvbXBvbmVudCB9IGZyb20gJy4uL3Jlc291cmNlLWxvY2sudHMnO1xuaW1wb3J0IHsgcHVibGlzaFBsdWdpbkFwaSB9IGZyb20gJy4vcGx1Z2luLWFwaS50cyc7XG5pbXBvcnQgeyBQbHVnaW5FdmVudFNvdXJjZUltcGwgfSBmcm9tICcuL3BsdWdpbi1ldmVudC1zb3VyY2UudHMnO1xuaW1wb3J0IHtcbiAgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLFxuICBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRSxcbiAgdHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50XG59IGZyb20gJy4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuXG4vKipcbiAqIFRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyBvd25lZCBieSB7QGxpbmsgUGx1Z2luQmFzZX0sIGtleWVkIGJ5IHRoZSBuYW1lIG9mIHRoZSBhY2Nlc3NvciBleHBvc2luZ1xuICogZWFjaCBvbmUuIEV2ZXJ5IG1lbWJlciBpcyBvcHRpb25hbCBiZWNhdXNlIGEgY29tcG9uZW50IG9ubHkgZXhpc3RzIG9uY2Uge0BsaW5rIFBsdWdpbkJhc2Uub25sb2FkfVxuICogaGFzIGNyZWF0ZWQgaXQuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5CYXNlQ29tcG9uZW50cyB7XG4gIGFib3J0U2lnbmFsQ29tcG9uZW50PzogQWJvcnRTaWduYWxDb21wb25lbnQ7XG4gIGFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50PzogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQ7XG4gIGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50PzogQ29tbWFuZEhhbmRsZXJDb21wb25lbnQ7XG4gIGNvbnNvbGVEZWJ1Z0NvbXBvbmVudD86IENvbnNvbGVEZWJ1Z0NvbXBvbmVudDtcbiAgcGx1Z2luQ29udGV4dENvbXBvbmVudD86IFBsdWdpbkNvbnRleHRDb21wb25lbnQ7XG4gIHBsdWdpbkdhdGVDb21wb25lbnQ/OiBQbHVnaW5HYXRlQ29tcG9uZW50O1xuICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gIHBsdWdpblNldHRpbmdzQ29tcG9uZW50PzogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD47XG4gIHJlc291cmNlTG9ja0NvbXBvbmVudD86IFJlc291cmNlTG9ja0NvbXBvbmVudDtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBPYnNpZGlhbiBwbHVnaW5zIHdpdGggYSBjb21wb25lbnQtYmFzZWQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIFJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiBTdWJjbGFzc2VzIGFkZCBvciByZXBsYWNlIGNvbXBvbmVudHNcbiAqIHZpYSB7QGxpbmsgcmVtb3ZlQ2hpbGR9IC8ge0BsaW5rIGFkZENoaWxkfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpbkJhc2UgZXh0ZW5kcyBtaXhpbkFzeW5jRXZlbnRzPFBsdWdpbkV2ZW50TWFwPigpKFBsdWdpbikgaW1wbGVtZW50cyBQbHVnaW5FdmVudFNvdXJjZSB7XG4gIC8qKlxuICAgKiBHZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KCk6IEFib3J0U2lnbmFsQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLmFib3J0U2lnbmFsQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KHZhbHVlOiBBYm9ydFNpZ25hbENvbXBvbmVudCkge1xuICAgIHRoaXMuc2V0Q29tcG9uZW50KCdhYm9ydFNpZ25hbENvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQoKTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMuYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYXN5bmMgZXJyb3IgaGFuZGxlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBhc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCh2YWx1ZTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgnYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2hhcmVkIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuIFJlZ2lzdGVyIGEgcGx1Z2luJ3MgY29tbWFuZHMgb24gaXQgdmlhXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVyc30gcmF0aGVyIHRoYW4gY29uc3RydWN0aW5nIHlvdXIgb3duXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudH0gXHUyMDE0IHRoZSBhcHAtYmFja2VkIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBjb21tYW5kIHJlZ2lzdHJhciwgbWVudVxuICAgKiBldmVudCByZWdpc3RyYXIsIGFuZCBwbHVnaW4gbmFtZSBhcmUgYWxyZWFkeSB3aXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KCk6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLmNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgY29tbWFuZCBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgY29tbWFuZEhhbmRsZXJDb21wb25lbnQodmFsdWU6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ2NvbW1hbmRIYW5kbGVyQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBjb25zb2xlRGVidWdDb21wb25lbnQoKTogQ29uc29sZURlYnVnQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLmNvbnNvbGVEZWJ1Z0NvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBjb25zb2xlIGRlYnVnIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQ29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGNvbnNvbGVEZWJ1Z0NvbXBvbmVudCh2YWx1ZTogQ29uc29sZURlYnVnQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ2NvbnNvbGVEZWJ1Z0NvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudCAocGx1Z2luIElELCBkZWJ1ZyBjb250cm9sbGVyLCBsaWJyYXJ5IHN0eWxlcykuXG4gICAqXG4gICAqIEByZXR1cm5zIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCgpOiBQbHVnaW5Db250ZXh0Q29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLnBsdWdpbkNvbnRleHRDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcGx1Z2luIGNvbnRleHQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBQbHVnaW4gY29udGV4dCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IHBsdWdpbkNvbnRleHRDb21wb25lbnQodmFsdWU6IFBsdWdpbkNvbnRleHRDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgncGx1Z2luQ29udGV4dENvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBnYXRlIGhvbGRpbmcgdGhlIHBsdWdpbidzIGZlYXR1cmUgc3VyZmFjZSB1cCBvciBkb3duLlxuICAgKlxuICAgKiBSZWFjaCBmb3IgaXQgZnJvbSBhIHNldHRpbmdzIHRhYiB0byByZW5kZXIgdGhlIG92ZXJsYXAgYmFubmVyIGZvciBhXG4gICAqIHtAbGluayBjb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm59IGNvbmZsaWN0IFx1MjAxNCB0aGUgb25lXG4gICAqIGJhbm5lciB0aGUgbGlicmFyeSBjYW5ub3QgcGxhY2UgaXRzZWxmLCBiZWNhdXNlIGEgcnVubmluZyBwbHVnaW4gYnVpbGRzIGl0cyBvd24gc2V0dGluZ3MgdGFiLlxuICAgKlxuICAgKiBSZWFkYWJsZSB0aHJvdWdob3V0IHtAbGluayBvbmxvYWRJbXBsfSwgaW5jbHVkaW5nIGl0cyBzeW5jaHJvbm91cyBwcmVmaXgsIHdoaWNoIGlzIHdoZXJlIGEgc2V0dGluZ3NcbiAgICogdGFiIGlzIGJ1aWx0LiBUaGF0IGlzIGRlbGliZXJhdGUgcmF0aGVyIHRoYW4gaW5jaWRlbnRhbDogYWRkaW5nIHRoZSBnYXRlIGlzIHdoYXQgcnVuc1xuICAgKiB7QGxpbmsgb25sb2FkSW1wbH0sIHNvIHtAbGluayBvbmxvYWR9IGFzc2lnbnMgdGhpcyBmaWVsZCBiZWZvcmUgYWRkaW5nIGl0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcGx1Z2luIGdhdGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBwbHVnaW5HYXRlQ29tcG9uZW50KCk6IFBsdWdpbkdhdGVDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luR2F0ZUNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcGx1Z2luIGdhdGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgcGx1Z2luIGdhdGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBwbHVnaW5HYXRlQ29tcG9uZW50KHZhbHVlOiBQbHVnaW5HYXRlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ3BsdWdpbkdhdGVDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgcGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHBsdWdpbk5vdGljZUNvbXBvbmVudCgpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luTm90aWNlQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBQbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luTm90aWNlQ29tcG9uZW50KHZhbHVlOiBQbHVnaW5Ob3RpY2VDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgncGx1Z2luTm90aWNlQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQoKTogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD4ge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gUGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQodmFsdWU6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ3BsdWdpblNldHRpbmdzQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVkaXRvciBsb2NrIGNvbXBvbmVudCwgdXNlZCB0byBsb2NrIG5vdGVzIHJlYWQtb25seSBkdXJpbmcgbG9uZyBvcGVyYXRpb25zLiBPd25lZCBieVxuICAgKiB0aGUgcGx1Z2luLCBzbyBpdHMgbG9ja3MgYXJlIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgcGx1Z2luIHVubG9hZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIEVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcmVzb3VyY2VMb2NrQ29tcG9uZW50KCk6IFJlc291cmNlTG9ja0NvbXBvbmVudCB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuY29tcG9uZW50cy5yZXNvdXJjZUxvY2tDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gRWRpdG9yIGxvY2sgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCByZXNvdXJjZUxvY2tDb21wb25lbnQodmFsdWU6IFJlc291cmNlTG9ja0NvbXBvbmVudCkge1xuICAgIHRoaXMuc2V0Q29tcG9uZW50KCdyZXNvdXJjZUxvY2tDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudHM6IFBsdWdpbkJhc2VDb21wb25lbnRzID0ge307XG5cbiAgLy8gRXZlcnl0aGluZyB0aGUgU1VCQ0xBU1Mgb3duczogd2hhdCBgb25sb2FkSW1wbGAgYWRkcywgYW5kIHdoYXQgaXQgYWRkcyBsYXRlci5cbiAgLy9cbiAgLy8gQSBzZWNvbmQgd3JhcHBlciByYXRoZXIgdGhhbiBvbmUsIGJlY2F1c2UgdGhlIHR3byB0aWVycyBoYXZlIG9wcG9zaXRlIGxpZmV0aW1lcy4gVGhlIHVuaXZlcnNhbFxuICAvLyBjb21wb25lbnRzIGhhdmUgdG8gT1VUTElWRSBhIGxvc3QgZGVwZW5kZW5jeSBcdTIwMTQgdGhleSBhcmUgd2hhdCBzaG93cyB0aGUgbm90aWNlIG5hbWluZyB0aGUgcGx1Z2luIHRoYXRcbiAgLy8gd2VudCBhd2F5IGFuZCByZW5kZXJzIHRoZSBidXR0b24gdGhhdCBicmluZ3MgaXQgYmFjayBcdTIwMTQgd2hpbGUgdGhlIHN1YmNsYXNzJ3Mgc3VyZmFjZSBpcyBleGFjdGx5IHdoYXRcbiAgLy8gbXVzdCBzdG9wIHJ1bm5pbmcuIFVubG9hZGluZyBvbmUgd3JhcHBlciBob2xkaW5nIGJvdGggd291bGQgc2lsZW5jZSB0aGUgcGx1Z2luIGF0IHRoZSBtb21lbnQgaXQgbW9zdFxuICAvLyBuZWVkcyB0byBzcGVhay5cbiAgLy9cbiAgLy8gQWx3YXlzIHByZXNlbnQsIG5ldmVyIG51bGwsIGFuZCBSRVBMQUNFRCByYXRoZXIgdGhhbiBlbXB0aWVkIHdoZW4gdGhlIHN1cmZhY2UgaXMgdG9ybiBkb3duLiBUaGF0IGtlZXBzXG4gIC8vIGBhZGRDaGlsZGAgY2FsbGFibGUgYXQgZXZlcnkgcG9pbnQgaW4gdGhlIHBsdWdpbidzIGxpZmUsIGV4YWN0bHkgYXMgaXQgd2FzIGJlZm9yZSB0aGUgdGllcnMgZXhpc3RlZDpcbiAgLy8gQSBjaGlsZCBhZGRlZCBiZWZvcmUgdGhlIGdhdGUgb3BlbnMgaXMgcXVldWVkIGFuZCBsb2FkZWQgd2hlbiBpdCBkb2VzLCB3aGljaCBpcyB3aGF0IGBDb21wb25lbnRFeGBcbiAgLy8gYWxyZWFkeSBkb2VzIGZvciBhbnkgY2hpbGQgYWRkZWQgdG8gYSBub3QteWV0LWxvYWRlZCBjb21wb25lbnQuXG4gIHByaXZhdGUgZ2F0ZWRXcmFwcGVyQ29tcG9uZW50ID0gbmV3IENvbXBvbmVudEV4KCk7XG5cbiAgLy8gVGhlIHBheWxvYWQgYnJvYWRjYXN0IHdoZW4gdGhpcyBwbHVnaW4gZmluaXNoZWQgbG9hZGluZywga2VwdCBzbyB0aGUgbWF0Y2hpbmcgdW5sb2FkZWQgYnJvYWRjYXN0XG4gIC8vIGRlc2NyaWJlcyB0aGUgc2FtZSBwbHVnaW4gd2l0aG91dCByZS1kZXJpdmluZyBpdCBmcm9tIGEgc3VyZmFjZSB0aGF0IGhhcyBzaW5jZSBiZWVuIHRvcm4gZG93bi4gTnVsbFxuICAvLyB3aGVuZXZlciBubyBsb2FkZWQgYnJvYWRjYXN0IGlzIG91dHN0YW5kaW5nLCB3aGljaCBpcyB3aGF0IGtlZXBzIHRoZSB0d28gZXZlbnRzIHBhaXJlZC5cbiAgcHJpdmF0ZSBsaWZlY3ljbGVFdmVudFBheWxvYWQ6IG51bGwgfCBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQgPSBudWxsO1xuXG4gIC8vIFRoZSBsaWJyYXJ5J3Mgb3duIGNvbXBvbmVudHMsIHdoaWNoIG91dGxpdmUgYW55IGRlcGVuZGVuY3kuXG4gIHByaXZhdGUgcmVhZG9ubHkgdW5pdmVyc2FsV3JhcHBlckNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRFeCgpO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBUaGUgY2hpbGQgaXMgYWRkZWQgdG8gdGhlIGludGVybmFsIHdyYXBwZXIgaG9sZGluZyB0aGUgc3ViY2xhc3MncyBvd24gc3VyZmFjZSwgd2hpY2gge0BsaW5rIG9ubG9hZH1cbiAgICogY3JlYXRlcyBhbmQgbG9hZHMgYmVmb3JlIGNhbGxpbmcge0BsaW5rIG9ubG9hZEltcGx9LiBTbyBhIGNoaWxkIGFkZGVkIGR1cmluZyB7QGxpbmsgb25sb2FkSW1wbH0gaXNcbiAgICogbG9hZGVkIGltbWVkaWF0ZWx5LCBjaGlsZHJlbi1maXJzdCwgYW5kIGlzIHVzYWJsZSBieSB0aGUgdGltZSB0aGlzIG1ldGhvZCByZXR1cm5zLlxuICAgKlxuICAgKiBUaGF0IHdyYXBwZXIgaXMgdG9ybiBkb3duIGFuZCByZWJ1aWx0IHdoZW5ldmVyIHRoZSBnYXRlIGNsb3NlcyBhbmQgb3BlbnMgYWdhaW4gXHUyMDE0IGEgZGVwZW5kZW5jeSBkZWNsYXJlZFxuICAgKiBieSB7QGxpbmsgZ2V0UGx1Z2luRGVwZW5kZW5jaWVzfSBnb2luZyBhd2F5IGFuZCBjb21pbmcgYmFjaywgb3IgYSBjb25mbGljdCBkZWNsYXJlZCBieVxuICAgKiB7QGxpbmsgZ2V0UGx1Z2luQ29uZmxpY3RzfSBhcHBlYXJpbmcgYW5kIGJlaW5nIHJlc29sdmVkIFx1MjAxNCBzbyBhIGNoaWxkIGFkZGVkIGhlcmUgbGl2ZXMgZXhhY3RseSBhcyBsb25nXG4gICAqIGFzIHRoZSBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2UgZG9lcy4gQWRkaW5nIG9uZSB3aGlsZSB0aGUgc3VyZmFjZSBpcyBkb3duIGlzIHN0aWxsIGxlZ2l0aW1hdGUgXHUyMDE0IGl0IGlzXG4gICAqIHF1ZXVlZCBhbmQgbG9hZGVkIHdoZW4gdGhlIHN1cmZhY2UgbmV4dCBjb21lcyB1cCwgdGhlIHdheSB7QGxpbmsgQ29tcG9uZW50RXguYWRkQ2hpbGR9IGFscmVhZHkgcXVldWVzXG4gICAqIGEgY2hpbGQgYWRkZWQgdG8gYSBub3QteWV0LWxvYWRlZCBjb21wb25lbnQuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIFNVQkNMQVNTJ3MgZG9vciwgYW5kIHRoZSBvbmx5IG9uZSBpdCBoYXM6IHRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyB7QGxpbmsgb25sb2FkfSByZWdpc3RlcnNcbiAgICogdGFrZSBhIHByaXZhdGUgcm91dGUgb250byBhIGRpZmZlcmVudCB3cmFwcGVyLiBTbyBhbnl0aGluZyBvYnNlcnZpbmcgdGhpcyBtZXRob2QgXHUyMDE0IGEgdGVzdCBjb3VudGluZyBpdHNcbiAgICogY2FsbHMsIGEgcGF0Y2ggd3JhcHBpbmcgaXQgXHUyMDE0IHNlZXMgZXhhY3RseSB0aGUgY2hpbGRyZW4gdGhlIHN1YmNsYXNzIGFkZGVkLCBhbmQgbm9uZSBvZiB0aGUgbGlicmFyeSdzLlxuICAgKiBCZWZvcmUgdGhlIHR3byB0aWVycyBleGlzdGVkIG9uZSBkb29yIGNhcnJpZWQgYm90aCwgYW5kIGEgY29uc3VtZXIgY291bnRpbmcgdGhlIHRvdGFsIGlzIHRoZSBvbmUgdGhpbmdcbiAgICogdGhlIHNwbGl0IGNvdWxkIG5vdCBrZWVwIHdvcmtpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGFkZGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5nYXRlZFdyYXBwZXJDb21wb25lbnQuYWRkQ2hpbGQoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZXh0ZXJuYWwgc2V0dGluZ3MgY2hhbmdlLlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyBpZiBuZWVkZWQuIE1ha2Ugc3VyZSB0byBjYWxsIGBhd2FpdCBzdXBlci5vbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKWAgZmlyc3QuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZT8uKCk7XG4gICAgYXdhaXQgdGhpcy50cmlnZ2VyQXN5bmMoJ2V4dGVybmFsU2V0dGluZ3NDaGFuZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGxvYWRlZC5cbiAgICpcbiAgICogT3JjaGVzdHJhdGVzIGxvYWRpbmc6IHJlZ2lzdGVycyB0aGUgdW5pdmVyc2FsIGNvbXBvbmVudHMsIGxldHMgdGhlIHN1YmNsYXNzIHdpcmUgaXRzIG93blxuICAgKiBjb21wb25lbnRzIHZpYSB7QGxpbmsgb25sb2FkSW1wbH0sIHRoZW4gYXdhaXRzIHRoZSBhc3luYyB0YWlsIG9mIGV2ZXJ5IGxvYWQuXG4gICAqIEVhY2ggY29tcG9uZW50IGxvYWRzIGFzIGl0IGlzIGFkZGVkLCBjaGlsZHJlbi1maXJzdC5cbiAgICpcbiAgICogRG8gTk9UIG92ZXJyaWRlIHRoaXMgbWV0aG9kLiBPdmVycmlkZSB7QGxpbmsgb25sb2FkSW1wbH0gaW5zdGVhZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoZSB3cmFwcGVyIGlzIGF0dGFjaGVkIGFuZCBsb2FkZWQgYmVmb3JlIGFueXRoaW5nIGlzIHdpcmVkIHVwLCBzbyBldmVyeSBgYWRkQ2hpbGRgIGJlbG93XG4gICAgICAvLyBsb2FkcyBpdHMgY2hpbGQgc3RyYWlnaHQgYXdheSByYXRoZXIgdGhhbiBxdWV1aW5nIGl0LlxuICAgICAgLy8gVGhhdCBpcyB3aGF0IGxldHMgYSBjb21tYW5kIGhhbmRsZXIgcmVnaXN0ZXIgaXRzIG1lbnUgZXZlbnRzIGZyb20gYG9uUmVnaXN0ZXJlZGAsIHdoaWNoXG4gICAgICAvLyBgcmVnaXN0ZXJDb21tYW5kSGFuZGxlcnNgIGF3YWl0cyBhbmQgd2hpY2ggYSByZWdpc3RyYXIgcmVmdXNlcyB3aGlsZSB1bmxvYWRlZC5cbiAgICAgIC8vIEF0dGFjaGluZyBpdCB1cCBmcm9udCBhbHNvIHJlZ2lzdGVycyB0aGUgd3JhcHBlciBmb3IgdGVhcmRvd24gYmVmb3JlIGFueXRoaW5nIGNhbiB0aHJvdy5cbiAgICAgIC8vIFRoZSBsb2FkIGlzIGV4cGxpY2l0IHJhdGhlciB0aGFuIGxlZnQgdG8gYGFkZENoaWxkYCwgd2hpY2ggbG9hZHMgdGhlIGNoaWxkIG9ubHkgd2hlbiB0aGVcbiAgICAgIC8vIHBsdWdpbiBpdHNlbGYgaXMgbG9hZGVkIFx1MjAxNCB0cnVlIHdoZW4gT2JzaWRpYW4gY2FsbHMgYGxvYWQoKWAsIGJ1dCBub3Qgd2hlbiBhIGNhbGxlciBpbnZva2VzXG4gICAgICAvLyBgb25sb2FkKClgIGRpcmVjdGx5LlxuICAgICAgc3VwZXIuYWRkQ2hpbGQodGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50KTtcbiAgICAgIHRoaXMudW5pdmVyc2FsV3JhcHBlckNvbXBvbmVudC5sb2FkKCk7XG5cbiAgICAgIGF3YWl0IGluaXRJMThOKHRoaXMuY3JlYXRlVHJhbnNsYXRpb25zTWFwKCkpO1xuICAgICAgdGhpcy5wbHVnaW5Db250ZXh0Q29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChcbiAgICAgICAgbmV3IFBsdWdpbkNvbnRleHRDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luSWQ6IHRoaXMubWFuaWZlc3QuaWRcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCA9IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQoXG4gICAgICAgIG5ldyBQbHVnaW5Ob3RpY2VDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5hc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCA9IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQobmV3IEFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50KSk7XG4gICAgICB0aGlzLmFib3J0U2lnbmFsQ29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChuZXcgQWJvcnRTaWduYWxDb21wb25lbnQodGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgdGhpcy5jb25zb2xlRGVidWdDb21wb25lbnQgPSB0aGlzLmFkZFVuaXZlcnNhbENoaWxkKG5ldyBDb25zb2xlRGVidWdDb21wb25lbnQodGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgdGhpcy5yZXNvdXJjZUxvY2tDb21wb25lbnQgPSB0aGlzLmFkZFVuaXZlcnNhbENoaWxkKG5ldyBSZXNvdXJjZUxvY2tDb21wb25lbnQodGhpcy5hcHAsIHRoaXMubWFuaWZlc3QuaWQpKTtcbiAgICAgIC8vIE5vdGVib29rIE5hdmlnYXRvciBkcmF3cyBpdHMgb3duIGZpbGUgdHJlZSBhbmQgbmV2ZXIgcmFpc2VzIE9ic2lkaWFuJ3MgYGZpbGUtbWVudWAgL1xuICAgICAgLy8gYGZpbGVzLW1lbnVgIGV2ZW50cywgc28gZXZlcnkgcGx1Z2luJ3MgY29udGV4dC1tZW51IGl0ZW1zIHdvdWxkIHZhbmlzaCBmb3IgYW55b25lIGJyb3dzaW5nXG4gICAgICAvLyB0aHJvdWdoIGl0LiBXaXJlZCBoZXJlIHJhdGhlciB0aGFuIHBlci1wbHVnaW46IHRoZSBicmlkZ2Ugc3RheXMgZG9ybWFudCB3aGVuIE5vdGVib29rXG4gICAgICAvLyBOYXZpZ2F0b3IgaXMgbm90IGluc3RhbGxlZCwgYW5kIGEgcGx1Z2luIHdpdGggbm8gZmlsZS9mb2xkZXIgaGFuZGxlcnMgY29udHJpYnV0ZXMgbm90aGluZy5cbiAgICAgIGNvbnN0IG5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChcbiAgICAgICAgbmV3IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50KHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIHBsdWdpbk5hbWU6IHRoaXMubWFuaWZlc3QubmFtZSxcbiAgICAgICAgICBzdWJtZW51SWNvbjogdGhpcy5nZXROb3RlYm9va05hdmlnYXRvck1lbnVTdWJtZW51SWNvbigpXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5jb21tYW5kSGFuZGxlckNvbXBvbmVudCA9IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQoXG4gICAgICAgIG5ldyBDb21tYW5kSGFuZGxlckNvbXBvbmVudCh7XG4gICAgICAgICAgYWN0aXZlRmlsZVByb3ZpZGVyOiBuZXcgQXBwQWN0aXZlRmlsZVByb3ZpZGVyKHRoaXMuYXBwKSxcbiAgICAgICAgICBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFyczogW25vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50XSxcbiAgICAgICAgICAvLyBUaGUgY29tcG9uZW50IGlzIHVuaXZlcnNhbDsgdGhlIGNvbW1hbmRzIHJlZ2lzdGVyZWQgVEhST1VHSCBpdCBhcmUgbm90LiBBIHN1YmNsYXNzIHJlZ2lzdGVyc1xuICAgICAgICAgIC8vIGl0cyBvd24gZnJvbSBgb25sb2FkSW1wbGAsIGNsb3Npbmcgb3ZlciBjb2xsYWJvcmF0b3JzIHRoYXQgYmVsb25nIHRvIHRoZSBmZWF0dXJlIHN1cmZhY2UgXHUyMDE0IHNvXG4gICAgICAgICAgLy8gdGhvc2UgY29tbWFuZHMgbXVzdCBnbyBkb3duIHdpdGggdGhlIHN1cmZhY2Ugd2hlbiB0aGUgZ2F0ZSBjbG9zZXMsIG9yIHRoZXkgc2l0IGluIHRoZSBwYWxldHRlXG4gICAgICAgICAgLy8gY2FsbGluZyBpbnRvIHRvcm4tZG93biBvYmplY3RzLCBhbmQgYXJlIHJlZ2lzdGVyZWQgYSBzZWNvbmQgdGltZSB3aGVuIHRoZSBnYXRlIHJlb3BlbnMgYW5kXG4gICAgICAgICAgLy8gYG9ubG9hZEltcGxgIHJ1bnMgYWdhaW4uXG4gICAgICAgICAgLy8gUmVzb2x2ZWQgb24gZXZlcnkgY2FsbCByYXRoZXIgdGhhbiBjYXB0dXJlZCBoZXJlLCBiZWNhdXNlIGB1bmxvYWRGZWF0dXJlU3VyZmFjZWAgUkVQTEFDRVMgdGhlXG4gICAgICAgICAgLy8gd3JhcHBlciBpbnN0ZWFkIG9mIGVtcHR5aW5nIGl0OiBlYWNoIGN5Y2xlJ3MgY29tbWFuZHMgYmVsb25nIHRvIHRoYXQgY3ljbGUncyB3cmFwcGVyLlxuICAgICAgICAgIGNvbW1hbmRMaWZldGltZU93bmVyUHJvdmlkZXI6ICgpOiBDb21wb25lbnRFeCA9PiB0aGlzLmdhdGVkV3JhcHBlckNvbXBvbmVudCxcbiAgICAgICAgICBjb21tYW5kUmVnaXN0cmFyOiBuZXcgUGx1Z2luQ29tbWFuZFJlZ2lzdHJhcih0aGlzKSxcbiAgICAgICAgICBtZW51RXZlbnRSZWdpc3RyYXI6IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQobmV3IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCh0aGlzLmFwcCkpLFxuICAgICAgICAgIHBsdWdpbk5hbWU6IHRoaXMubWFuaWZlc3QubmFtZVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIC8vIEFsd2F5cyBhdmFpbGFibGU7IHRoZSBjb21tYW5kJ3Mgb3duIGBjYW5FeGVjdXRlYCBoaWRlcyBpdCB1bmxlc3MgdGhlIGFjdGl2ZSBub3RlIGlzIGxvY2tlZC5cbiAgICAgIC8vIFRoZSBvbmUgY29tbWFuZCB0aGF0IG5hbWVzIGl0cyBvd25lciBleHBsaWNpdGx5LCBvcHRpbmcgT1VUIG9mIHRoZSBzdXJmYWNlLXNjb3BlZCBkZWZhdWx0IGFib3ZlOlxuICAgICAgLy8gSXQgaXMgdGhlIHJlc2N1ZSBmb3IgYSBub3RlIGxlZnQgbG9ja2VkLCBpdCBjbG9zZXMgb3ZlciBub3RoaW5nIGJ1dCB0aGUgdW5pdmVyc2FsIHJlc291cmNlLWxvY2tcbiAgICAgIC8vIGNvbXBvbmVudCwgYW5kIGEgYmxvY2tlZCBwbHVnaW4gaXMgZXhhY3RseSB3aGVuIGEgdXNlciBtYXkgbmVlZCBpdC5cbiAgICAgIGF3YWl0IHRoaXMuY29tbWFuZEhhbmRsZXJDb21wb25lbnQucmVnaXN0ZXJDb21tYW5kSGFuZGxlcnMoKCkgPT4gW1xuICAgICAgICBuZXcgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyKHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogdGhpcy5yZXNvdXJjZUxvY2tDb21wb25lbnRcbiAgICAgICAgfSlcbiAgICAgIF0sIHsgbGlmZXRpbWVPd25lcjogdGhpcy5jb21tYW5kSGFuZGxlckNvbXBvbmVudCB9KTtcblxuICAgICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQoXG4gICAgICAgIG5ldyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8b2JqZWN0Pih7XG4gICAgICAgICAgZGF0YUhhbmRsZXI6IG5ldyBQbHVnaW5EYXRhSGFuZGxlcih0aGlzKSxcbiAgICAgICAgICBwbHVnaW5FdmVudFNvdXJjZTogbmV3IFBsdWdpbkV2ZW50U291cmNlSW1wbCh0aGlzKSxcbiAgICAgICAgICBwbHVnaW5TZXR0aW5nc0NsYXNzOiBPYmplY3RcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIC8vIFRoZSBnYXRlLiBJdCBsb2FkcyB0aGUgZmVhdHVyZSBzdXJmYWNlIGl0c2VsZiBvbmNlIGV2ZXJ5IGRlY2xhcmVkIGRlcGVuZGVuY3kgaXMgc2F0aXNmaWVkIGFuZCBub1xuICAgICAgLy8gZGVjbGFyZWQgY29uZmxpY3QgaG9sZHMgXHUyMDE0IHdoaWNoIGZvciBhIHBsdWdpbiBkZWNsYXJpbmcgbmVpdGhlciBpcyBpbW1lZGlhdGVseSwgc3luY2hyb25vdXNseSxcbiAgICAgIC8vIGJlZm9yZSB0aGlzIGxpbmUgcmV0dXJucyBcdTIwMTQgYW5kIHVubG9hZHMgaXQgYWdhaW4gaWYgYSBkZXBlbmRlbmN5IGlzIGxhdGVyIGRpc2FibGVkIG9yIHVuaW5zdGFsbGVkLFxuICAgICAgLy8gb3IgYSBjb25mbGljdGluZyBwbHVnaW4gaXMgZW5hYmxlZC4gQSBwbHVnaW4gdGhhdCBpcyBibG9ja2VkIHRoZXJlZm9yZSByZWFjaGVzIGBsb2FkV2l0aFByb21pc2VzYFxuICAgICAgLy8gYmVsb3cgaGF2aW5nIHJlZ2lzdGVyZWQgbm90aGluZyBvZiBpdHMgb3duLCB3aXRoIG9ubHkgdGhlIHVuaXZlcnNhbCBjb21wb25lbnRzIGFib3ZlIHJ1bm5pbmcgdG9cbiAgICAgIC8vIGV4cGxhaW4gd2h5IGFuZCB0byBvZmZlciB0aGUgcmVwYWlyLlxuICAgICAgLy8gQXNzaWduZWQgQkVGT1JFIHRoZSBhZGQsIHVubGlrZSBldmVyeSB1bml2ZXJzYWwgY29tcG9uZW50IGFib3ZlLCBhbmQgdGhhdCBvcmRlciBpcyB0aGUgd2hvbGVcbiAgICAgIC8vIHBvaW50LiBBZGRpbmcgdGhpcyBvbmUgaXMgd2hhdCBydW5zIGBvbmxvYWRJbXBsYCwgcGVyIHRoZSBwYXJhZ3JhcGggYWJvdmUsIHNvIHRoZSBhc3NpZ25tZW50XG4gICAgICAvLyBzdGF0ZW1lbnQgaGFzIG5vdCByZXR1cm5lZCB5ZXQgd2hpbGUgdGhlIHN1YmNsYXNzIGlzIHJ1bm5pbmcgXHUyMDE0IGFuZCBhIHNldHRpbmdzIHRhYiBidWlsdCB0aGVyZVxuICAgICAgLy8gcmVhZHMgYHRoaXMucGx1Z2luR2F0ZUNvbXBvbmVudGAgdG8gcmVuZGVyIHRoZSBgV2FybmAgYmFubmVyLiBBc3NpZ25pbmcgYWZ0ZXIgdGhlIGFkZCB3b3VsZFxuICAgICAgLy8gbWFrZSB0aGF0IHJlYWQgdGhyb3cgYFZhbHVlIGlzIHVuZGVmaW5lZGAgb3V0IG9mIHRoZSBnZXR0ZXIsIHdoaWNoIGlzIGFuIG9wYXF1ZSB3YXkgdG8gc2F5XG4gICAgICAvLyBcInRvbyBlYXJseVwiLiBOb3RoaW5nIGFib3V0IGNoaWxkLWFkZCBvcmRlciBtb3ZlczogdGhlIHNlcXVlbmNlIG9mIGBhZGRVbml2ZXJzYWxDaGlsZGAgY2FsbHMgaXNcbiAgICAgIC8vIHVuY2hhbmdlZCwgYW5kIGBzZXRDb21wb25lbnRgIGlzIGEgcGxhaW4gc3RvcmUuXG4gICAgICBjb25zdCBwbHVnaW5HYXRlQ29tcG9uZW50ID0gbmV3IFBsdWdpbkdhdGVDb21wb25lbnQoe1xuICAgICAgICBjb25mbGljdHM6IHRoaXMuZ2V0UGx1Z2luQ29uZmxpY3RzKCksXG4gICAgICAgIGRlcGVuZGVuY2llczogdGhpcy5nZXRQbHVnaW5EZXBlbmRlbmNpZXMoKSxcbiAgICAgICAgbG9hZEZlYXR1cmVTdXJmYWNlOiAoKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmxvYWRGZWF0dXJlU3VyZmFjZSgpLFxuICAgICAgICBwbHVnaW46IHRoaXMsXG4gICAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudDogdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQsXG4gICAgICAgIHVubG9hZEZlYXR1cmVTdXJmYWNlOiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy51bmxvYWRGZWF0dXJlU3VyZmFjZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMucGx1Z2luR2F0ZUNvbXBvbmVudCA9IHBsdWdpbkdhdGVDb21wb25lbnQ7XG4gICAgICB0aGlzLmFkZFVuaXZlcnNhbENoaWxkKHBsdWdpbkdhdGVDb21wb25lbnQpO1xuXG4gICAgICAvLyBFdmVyeSBjaGlsZCBoYXMgYWxyZWFkeSBsb2FkZWQgYXMgaXQgd2FzIGFkZGVkOyB0aGlzIGF3YWl0cyB0aGVpciBhY2N1bXVsYXRlZCBhc3luYyB0YWlscyBhbmRcbiAgICAgIC8vIHJlcG9ydHMgYW55IGZhaWx1cmUgYXMgYSBzaW5nbGUgYEFnZ3JlZ2F0ZUVycm9yYC5cbiAgICAgIGF3YWl0IHRoaXMudW5pdmVyc2FsV3JhcHBlckNvbXBvbmVudC5sb2FkV2l0aFByb21pc2VzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByaW50RXJyb3IobmV3IEVycm9yKGBFcnJvciBsb2FkaW5nIHBsdWdpbiAke3RoaXMubWFuaWZlc3QubmFtZX0gKCR7dGhpcy5tYW5pZmVzdC5pZH0pYCwgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gaXMgdW5sb2FkZWQuXG4gICAqXG4gICAqIEFubm91bmNlcyB0aGUgZGVwYXJ0dXJlIG9uIGBhcHAud29ya3NwYWNlYCBzbyBhbnl0aGluZyBkZXBlbmRpbmcgb24gdGhpcyBwbHVnaW4gbGVhcm5zIG9mIGl0IGF0IHRoZVxuICAgKiBtb21lbnQgaXQgaGFwcGVucywgcmF0aGVyIHRoYW4gZGlzY292ZXJpbmcgaXQgbGF0ZXIgdGhyb3VnaCBiZWhhdmlvciB0aGF0IHF1aWV0bHkgc3RvcHBlZC5cbiAgICpcbiAgICogRG8gTk9UIG92ZXJyaWRlIHRoaXMgbWV0aG9kOyBwdXQgdGVhcmRvd24gb24gYSBjb21wb25lbnQgaW5zdGVhZCwgd2hpY2ggdW5sb2FkcyB3aXRoIHRoZSBwbHVnaW4uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb251bmxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5icm9hZGNhc3RVbmxvYWRlZCgpO1xuICAgIHN1cGVyLm9udW5sb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgLy8gUm91dGVkIGJ5IG93bmVyc2hpcCByYXRoZXIgdGhhbiBieSB3aGljaCB0aWVyIGBhZGRDaGlsZGAgd291bGQgaGF2ZSBjaG9zZW4sIGJlY2F1c2UgdGhlIHR3byBkbyBub3RcbiAgICAvLyBhbHdheXMgYWdyZWU6IGEgdW5pdmVyc2FsIGNvbXBvbmVudCBpcyBwYXJlbnRlZCBkaXJlY3RseSBvbiB0aGUgdW5pdmVyc2FsIHdyYXBwZXIsIHlldCBhIHN1YmNsYXNzXG4gICAgLy8gcmVwbGFjaW5nIG9uZSBnb2VzIHRocm91Z2ggdGhlIHNhbWUgcHVibGljIGByZW1vdmVDaGlsZGAgYXMgaXQgd291bGQgZm9yIGl0cyBvd24gY2hpbGRyZW4uXG4gICAgcmV0dXJuIHRoaXMuZ2F0ZWRXcmFwcGVyQ29tcG9uZW50Lmhhc0NoaWxkKGNvbXBvbmVudCkgPyB0aGlzLmdhdGVkV3JhcHBlckNvbXBvbmVudC5yZW1vdmVDaGlsZChjb21wb25lbnQpIDogdGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50LnJlbW92ZUNoaWxkKGNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgdGhlIHRyYW5zbGF0aW9ucyBtYXAgdXNlZCB0byBpbml0aWFsaXplIGkxOG4gZHVyaW5nIHtAbGluayBvbmxvYWR9LlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBzdXBwbHkgcGx1Z2luLXNwZWNpZmljIHRyYW5zbGF0aW9ucy4gVGhlIGRlZmF1bHQgcmV0dXJucyB0aGUgYnVpbHQtaW5cbiAgICogYG9ic2lkaWFuLWRldi11dGlsc2AgdHJhbnNsYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNsYXRpb25zIG1hcC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVUcmFuc2xhdGlvbnNNYXAoKTogVHJhbnNsYXRpb25zTWFwIHtcbiAgICByZXR1cm4gZGVmYXVsdFRyYW5zbGF0aW9uc01hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgaWNvbiBzaG93biBvbiB0aGUgcGx1Z2luJ3MgcGFyZW50IGVudHJ5IGluIE5vdGVib29rIE5hdmlnYXRvcidzIGNvbnRleHQgbWVudXMuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIGJyYW5kIHRoYXQgZW50cnk7IHRoZSBkZWZhdWx0IGxlYXZlcyBpdCB3aXRob3V0IGFuIGljb24uIFRoZSBlbnRyeSBpc1xuICAgKiB0aXRsZWQgd2l0aCB0aGUgcGx1Z2luIG5hbWUgYW5kIGlzIGFkZGVkIGF1dG9tYXRpY2FsbHkgXHUyMDE0IHNlZVxuICAgKiB7QGxpbmsgTm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnR9LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiwgb3IgYCcnYCBmb3Igbm8gaWNvbi5cbiAgICovXG4gIHByb3RlY3RlZCBnZXROb3RlYm9va05hdmlnYXRvck1lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBBUElzIHRoaXMgcGx1Z2luIGV4cG9zZXMgdG8gb3RoZXIgcGx1Z2lucy5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gcHVibGlzaCBvbmUuIFRoZSBkZWZhdWx0IHB1Ymxpc2hlcyBub25lLiBDYWxsZWQgYWZ0ZXIge0BsaW5rIG9ubG9hZEltcGx9LCBzbyBhXG4gICAqIGRlY2xhcmF0aW9uIG1heSByZWZlcmVuY2UgYW55dGhpbmcgaXQgY3JlYXRlZDsgdGhlIHJldHVybmVkIGRlY2xhcmF0aW9ucyBhcmUgcHVibGlzaGVkIHRocm91Z2hcbiAgICogYHB1Ymxpc2hQbHVnaW5BcGlgIGFuZCByZXZva2VkIHdoZW4gdGhlIHBsdWdpbidzIGZlYXR1cmUgc3VyZmFjZSB1bmxvYWRzLlxuICAgKlxuICAgKiBSZXR1cm5pbmcgYSBMSVNUIHJhdGhlciB0aGFuIGEgc2luZ2xlIEFQSSBpcyBkZWxpYmVyYXRlOiB0aGUgcmVnaXN0cnkgc3VwcG9ydHMgc2V2ZXJhbCBjb250cmFjdFxuICAgKiB2ZXJzaW9ucyBwdWJsaXNoZWQgc2lkZSBieSBzaWRlLCB3aGljaCBpcyBob3cgYSBwcm92aWRlciBzaGlwcyBhIGJyZWFraW5nIGAyLjAuMGAgd2l0aG91dCBzdHJhbmRpbmdcbiAgICogY29uc3VtZXJzIHN0aWxsIHBpbm5lZCB0byBgXjFgLlxuICAgKlxuICAgKiBFdmVyeSBkZWNsYXJhdGlvbiBoZXJlIGlzIHB1Ymxpc2hlZCBCRUZPUkUgdGhlIGBvYnNpZGlhbi1kZXYtdXRpbHM6cGx1Z2luLWxvYWRlZGAgYnJvYWRjYXN0LCB3aGljaCBpc1xuICAgKiB3aGF0IGxldHMgYSBsaXN0ZW5lciBjYWxsIHRoZXNlIEFQSXMgdGhlIG1vbWVudCBpdCBoZWFycyB0aGF0IGV2ZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgQVBJIGRlY2xhcmF0aW9ucy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRQbHVnaW5BcGlzKCk6IFBsdWdpbkFwaURlY2xhcmF0aW9uW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgcGx1Z2lucyB0aGlzIG9uZSByZWZ1c2VzLCBvciB3YXJucyBhYm91dCwgcnVubmluZyBiZXNpZGUuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIGRlY2xhcmUgYW4gb3ZlcmxhcC4gVGhlIGRlZmF1bHQgZGVjbGFyZXMgbm9uZS5cbiAgICpcbiAgICogQSBgQmxvY2tgIGNvbmZsaWN0IGlzIHRoZSBtaXJyb3IgaW1hZ2Ugb2YgYSBkZXBlbmRlbmN5OiB3aGlsZSBhIGNvbmZsaWN0aW5nIHBsdWdpbiBpcyBlbmFibGVkIGF0IGFcbiAgICogY29uZmxpY3RpbmcgdmVyc2lvbiwge0BsaW5rIG9ubG9hZEltcGx9IGRvZXMgbm90IHJ1biBhdCBhbGwgYW5kIHRoZSBwbHVnaW4gcmVnaXN0ZXJzIG5vdGhpbmcuIERlY2xhcmVcbiAgICogaXQgd2hlbiBib3RoIHBsdWdpbnMgYWN0aW5nIG9uIHRoZSBzYW1lIG9wZXJhdGlvbiBkYW1hZ2VzIHRoZSB2YXVsdCBcdTIwMTQgdGhlcmUgaXMgbm8gcmVsaWFibGUgd2F5IHRvIHdpblxuICAgKiB0aGF0IHJhY2UsIGJlY2F1c2Ugd2hpY2hldmVyIHBsdWdpbiBsb2FkZWQgZmlyc3Qga2VlcHMgYSBoYW5kIG9uIHRoZSB3aGVlbCwgc28gcmVmdXNpbmcgZGV0ZXJtaW5pc3RpY2FsbHlcbiAgICogYmVhdHMgY29tcGV0aW5nIHVucHJlZGljdGFibHkuIEEgYFdhcm5gIGNvbmZsaWN0IGRlY2xhcmVzIGFuIG92ZXJsYXAgdGhhdCBpcyBtZXJlbHkgYW5ub3lpbmcsIHN1Y2ggYXMgYVxuICAgKiBkdXBsaWNhdGVkIGNvbW1hbmQ6IGJvdGggcGx1Z2lucyBrZWVwIHJ1bm5pbmcgYW5kIHRoZSB1c2VyIGlzIHRvbGQuXG4gICAqXG4gICAqIFVubGlrZSBhIGRlcGVuZGVuY3ksIGEgY29uZmxpY3RpbmcgcGx1Z2luIG5lZWQgbm90IHB1Ymxpc2ggYW55dGhpbmcgXHUyMDE0IGl0IGlzIGRldGVjdGVkIGJ5IHJlYWRpbmcgaXRzXG4gICAqIGluc3RhbGxlZCB2ZXJzaW9uLCB3aGljaCBpcyB0aGUgb25seSB0aGluZyBhYm91dCBhbm90aGVyIHBsdWdpbiB0aGF0IHJlYWRzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgbG9hZFxuICAgKiBvcmRlci5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlY2xhcmVkIGNvbmZsaWN0cy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRQbHVnaW5Db25mbGljdHMoKTogUGx1Z2luQ29uZmxpY3RbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBwbHVnaW5zIHRoaXMgb25lIGNhbm5vdCB3b3JrIHdpdGhvdXQuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIGRlY2xhcmUgYSBtYW5kYXRvcnkgZGVwZW5kZW5jeS4gVGhlIGRlZmF1bHQgZGVjbGFyZXMgbm9uZSwgYW5kIHN1Y2ggYSBwbHVnaW5cbiAgICogbG9hZHMgZXhhY3RseSBhcyBpdCBhbHdheXMgaGFzLlxuICAgKlxuICAgKiBBIGRlY2xhcmVkIGRlcGVuZGVuY3kgaXMgTUFOREFUT1JZLCB1bmxpa2UgdGhlIG9mZmVyIGBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50YCBtYWtlczogd2hpbGUgb25lIGlzXG4gICAqIG1pc3NpbmcsIGRpc2FibGVkLCBvciB0b28gb2xkLCB7QGxpbmsgb25sb2FkSW1wbH0gZG9lcyBub3QgcnVuIGF0IGFsbCBhbmQgdGhlIHBsdWdpbiByZWdpc3RlcnMgbm90aGluZ1xuICAgKiBcdTIwMTQgbm8gY29tbWFuZHMsIG5vIGhhbmRsZXJzLCBubyBwYXRjaGVzLiBJdCBzdGF5cyBlbmFibGVkIGluIE9ic2lkaWFuJ3MgbGlzdCByYXRoZXIgdGhhbiBkaXNhYmxpbmdcbiAgICogaXRzZWxmLCBiZWNhdXNlIHRoZSBlbmFibGVkIHNldCBpcyB0aGUgdXNlcidzIHRvIGNoYW5nZSwgYW5kIGl0IGV4cGxhaW5zIGl0c2VsZiB0aHJvdWdoIGEgbm90aWNlIGFuZCBhXG4gICAqIHNldHRpbmdzIGJhbm5lciB0aGF0IGluc3RhbGxzIHRoZSBtaXNzaW5nIHBsdWdpbiBpbiBvbmUgY2xpY2suIFRoZSBsb2FkIGNvbXBsZXRlcyB0aGUgbW9tZW50IHRoZVxuICAgKiBkZXBlbmRlbmN5IGFycml2ZXMsIHdpdGggbm8gcmVzdGFydC5cbiAgICpcbiAgICogQSBkZXBlbmRlbmN5IG11c3QgcHVibGlzaCBhbiBBUEkgdGhyb3VnaCBgcHVibGlzaFBsdWdpbkFwaWAsIHdoaWNoIGlzIHdoYXQgbWFrZXMgaXRzIHByZXNlbmNlLFxuICAgKiBhYnNlbmNlLCB2ZXJzaW9uIGFuZCBkZXBhcnR1cmUgYWxsIG9ic2VydmFibGUgdGhyb3VnaCBvbmUgbWVjaGFuaXNtLiBBIHBsdWdpbiB3aXRoIG5vdGhpbmcgdG8gZXhwb3NlXG4gICAqIGNhbiBwdWJsaXNoIGFuIGVtcHR5IEFQSSBwdXJlbHkgc28gaXQgY2FuIGJlIGRlcGVuZGVkIHVwb24uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkZWNsYXJlZCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0UGx1Z2luRGVwZW5kZW5jaWVzKCk6IFBsdWdpbkRlcGVuZGVuY3lbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBkdXJpbmcge0BsaW5rIG9ubG9hZH0gdG8gd2lyZSBwbHVnaW4tc3BlY2lmaWMgY2hpbGQgY29tcG9uZW50cy5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gYWRkIGNoaWxkIGNvbXBvbmVudHMgdmlhIHtAbGluayBhZGRDaGlsZH0uIFRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyBhcmVcbiAgICogYXZhaWxhYmxlIGhlcmUuIENoaWxkcmVuIGFyZSBsb2FkZWQgc2VxdWVudGlhbGx5IGluIHRoZSBvcmRlciB0aGV5IGFyZSBhZGRlZCAoY2hpbGRyZW4tZmlyc3QpLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHN1YmNsYXNzIGxvYWQgbG9naWMgaXMgY29tcGxldGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25sb2FkSW1wbCgpOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmVzIGEgdW5pdmVyc2FsIGNvbXBvbmVudCwgdW5sb2FkaW5nIHdoaWNoZXZlciBjb21wb25lbnQgdGhlIGtleSBoZWxkIGJlZm9yZS5cbiAgICpcbiAgICogS2V5ZWQgYnkgbmFtZSByYXRoZXIgdGhhbiBoYW5kZWQgdGhlIHByZXZpb3VzIHZhbHVlIGJlY2F1c2UgYGtleW9mIHRoaXNgIGV4Y2x1ZGVzIHByaXZhdGVcbiAgICogbWVtYmVycywgc28gdGhlIGNvbXBvbmVudHMgbGl2ZSBpbiBhIHNpbmdsZSB7QGxpbmsgUGx1Z2luQmFzZUNvbXBvbmVudHN9IGJhZyB3aG9zZSBrZXlzIEFSRVxuICAgKiBpbmRleGFibGUuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVEtleSAtIFRoZSBrZXkgb2YgdGhlIGNvbXBvbmVudCB0byBzdG9yZS5cbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIGNvbXBvbmVudCB0byBzdG9yZS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGNvbXBvbmVudCB0byBzdG9yZS5cbiAgICovXG4gIC8qKlxuICAgKiBBZGRzIGEgY29tcG9uZW50IHRvIHRoZSB1bml2ZXJzYWwgdGllciwgd2hpY2ggb3V0bGl2ZXMgYW55IGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIFByaXZhdGUgb24gcHVycG9zZTogb25seSB0aGlzIGNsYXNzIGRlY2lkZXMgd2hhdCBpcyB1bml2ZXJzYWwuIEEgc3ViY2xhc3MgYWRkaW5nIG9uZSBvZiBpdHMgb3duIGdvZXNcbiAgICogdGhyb3VnaCB7QGxpbmsgYWRkQ2hpbGR9IGFuZCBsYW5kcyBpbiB0aGUgZ2F0ZWQgdGllciwgd2hlcmUgaXQgYmVsb25ncy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIGFkZC5cbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYWRkZWQgY29tcG9uZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBhZGRVbml2ZXJzYWxDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50LmFkZENoaWxkKGNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQW5ub3VuY2VzIG9uIGBhcHAud29ya3NwYWNlYCB0aGF0IHRoaXMgcGx1Z2luIGlzIGxvYWRlZCBhbmQgaXRzIEFQSXMgYXJlIGNhbGxhYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBicm9hZGNhc3RMb2FkZWQoKTogdm9pZCB7XG4gICAgdGhpcy5saWZlY3ljbGVFdmVudFBheWxvYWQgPSB7XG4gICAgICBhcGlWZXJzaW9uczogdGhpcy5nZXRQbHVnaW5BcGlzKCkubWFwKChkZWNsYXJhdGlvbikgPT4gZGVjbGFyYXRpb24uYXBpVmVyc2lvbiksXG4gICAgICBkZXBlbmRlbmN5UGx1Z2luSWRzOiB0aGlzLmdldFBsdWdpbkRlcGVuZGVuY2llcygpLm1hcCgoZGVwZW5kZW5jeSkgPT4gZGVwZW5kZW5jeS5wbHVnaW5JZCksXG4gICAgICBwbHVnaW5JZDogdGhpcy5tYW5pZmVzdC5pZCxcbiAgICAgIHBsdWdpbk5hbWU6IHRoaXMubWFuaWZlc3QubmFtZSxcbiAgICAgIHBsdWdpblZlcnNpb246IHRoaXMubWFuaWZlc3QudmVyc2lvblxuICAgIH07XG5cbiAgICB0cmlnZ2VyUGx1Z2luTGlmZWN5Y2xlRXZlbnQoe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIG5hbWU6IFBMVUdJTl9MT0FERURfRVZFTlRfTkFNRSxcbiAgICAgIHBheWxvYWQ6IHRoaXMubGlmZWN5Y2xlRXZlbnRQYXlsb2FkXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQW5ub3VuY2VzIG9uIGBhcHAud29ya3NwYWNlYCB0aGF0IHRoaXMgcGx1Z2luJ3Mgc3VyZmFjZSBoYXMgZ29uZSBhd2F5LlxuICAgKlxuICAgKiBTaWxlbnQgdW5sZXNzIGEgbG9hZGVkIGJyb2FkY2FzdCBpcyBvdXRzdGFuZGluZywgc28gdGhlIHR3byBldmVudHMgc3RheSBwYWlyZWQ6IGEgcGx1Z2luIHRoYXQgbmV2ZXJcbiAgICogZ290IHBhc3QgaXRzIGRlcGVuZGVuY3kgZ2F0ZSBuZXZlciBhbm5vdW5jZWQgaXRzZWxmLCBhbmQgbXVzdCBub3QgYW5ub3VuY2UgYSBkZXBhcnR1cmUgZWl0aGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBicm9hZGNhc3RVbmxvYWRlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5saWZlY3ljbGVFdmVudFBheWxvYWQ7XG4gICAgaWYgKCFwYXlsb2FkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5saWZlY3ljbGVFdmVudFBheWxvYWQgPSBudWxsO1xuICAgIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudCh7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgbmFtZTogUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUUsXG4gICAgICBwYXlsb2FkXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGFuZCBsb2FkcyB0aGUgc3ViY2xhc3MncyBmZWF0dXJlIHN1cmZhY2UsIHRoZW4gcHVibGlzaGVzIGl0cyBBUElzIGFuZCBhbm5vdW5jZXMgaXRzZWxmLlxuICAgKlxuICAgKiBOT1QgaWRlbXBvdGVudCwgZGVsaWJlcmF0ZWx5LiBgUGx1Z2luR2F0ZUNvbXBvbmVudGAgb3ducyB0aGUgdXAvZG93biBzdGF0ZSBtYWNoaW5lIGFuZCBjYWxsc1xuICAgKiB0aGlzIG9ubHkgb24gYSByZWFsIHRyYW5zaXRpb247IGEgc2Vjb25kIGd1YXJkIGhlcmUgd291bGQgYmUgYSBzZWNvbmQgY29weSBvZiB0aGF0IHN0YXRlLCB3aGljaCBpcyB0aGVcbiAgICoga2luZCBvZiBkdXBsaWNhdGUgdGhhdCBkcmlmdHMuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgc3VyZmFjZSBpcyBsb2FkZWQgYW5kIHRoZSBicm9hZGNhc3QgaGFzIGJlZW4gbWFkZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZlYXR1cmVTdXJmYWNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIExvYWRlZCBleHBsaWNpdGx5IGZvciB0aGUgc2FtZSByZWFzb24gdGhlIHVuaXZlcnNhbCB3cmFwcGVyIGlzOiBgYWRkQ2hpbGRgIGxvYWRzIGEgY2hpbGQgb25seSBvbmNlXG4gICAgLy8gaXRzIHBhcmVudCBpcyBsb2FkZWQsIGFuZCB0aGUgc3VyZmFjZSBoYXMgdG8gYmUgbGl2ZSBiZWZvcmUgYG9ubG9hZEltcGxgIHN0YXJ0cyBhZGRpbmcgdG8gaXQuXG4gICAgY29uc3QgZ2F0ZWRXcmFwcGVyQ29tcG9uZW50ID0gdGhpcy5nYXRlZFdyYXBwZXJDb21wb25lbnQ7XG4gICAgdGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50LmFkZENoaWxkKGdhdGVkV3JhcHBlckNvbXBvbmVudCk7XG4gICAgZ2F0ZWRXcmFwcGVyQ29tcG9uZW50LmxvYWQoKTtcblxuICAgIGF3YWl0IHRoaXMub25sb2FkSW1wbCgpO1xuICAgIGF3YWl0IGdhdGVkV3JhcHBlckNvbXBvbmVudC5sb2FkV2l0aFByb21pc2VzKCk7XG5cbiAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHRoaXMuZ2V0UGx1Z2luQXBpcygpKSB7XG4gICAgICBwdWJsaXNoUGx1Z2luQXBpKHtcbiAgICAgICAgLi4uZGVjbGFyYXRpb24sXG4gICAgICAgIC8vIFJldm9rZWQgd2l0aCB0aGUgU1VSRkFDRSwgbm90IHdpdGggdGhlIHBsdWdpbjogYSBwbHVnaW4gd2hvc2UgZGVwZW5kZW5jeSBnb2VzIGF3YXkga2VlcHMgcnVubmluZ1xuICAgICAgICAvLyBpdHMgdW5pdmVyc2FsIGNvbXBvbmVudHMsIGFuZCBhIGNvbnN1bWVyIG11c3Qgbm90IGJlIGxlZnQgaG9sZGluZyBhIGhhbmRsZSBpbnRvIHRoZSBoYWxmIG9mIGl0XG4gICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgdG9ybiBkb3duLlxuICAgICAgICBjb21wb25lbnQ6IGdhdGVkV3JhcHBlckNvbXBvbmVudCxcbiAgICAgICAgcGx1Z2luOiB0aGlzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmJyb2FkY2FzdExvYWRlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb21wb25lbnQ8VEtleSBleHRlbmRzIGtleW9mIFBsdWdpbkJhc2VDb21wb25lbnRzPihrZXk6IFRLZXksIHZhbHVlOiBOb25OdWxsYWJsZTxQbHVnaW5CYXNlQ29tcG9uZW50c1tUS2V5XT4pOiB2b2lkIHtcbiAgICBjb25zdCBvbGRDb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudHNba2V5XTtcbiAgICBpZiAob2xkQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZUNoaWxkKG9sZENvbXBvbmVudCk7XG4gICAgfVxuICAgIHRoaXMuY29tcG9uZW50c1trZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVGVhcnMgdGhlIHN1YmNsYXNzJ3MgZmVhdHVyZSBzdXJmYWNlIGRvd24sIGxlYXZpbmcgdGhlIHVuaXZlcnNhbCBjb21wb25lbnRzIHJ1bm5pbmcuXG4gICAqL1xuICBwcml2YXRlIHVubG9hZEZlYXR1cmVTdXJmYWNlKCk6IHZvaWQge1xuICAgIGNvbnN0IGdhdGVkV3JhcHBlckNvbXBvbmVudCA9IHRoaXMuZ2F0ZWRXcmFwcGVyQ29tcG9uZW50O1xuXG4gICAgLy8gUmVwbGFjZWQgQkVGT1JFIHRoZSBvbGQgb25lIGlzIHVubG9hZGVkLCBzbyBhbnl0aGluZyB0aGF0IHJlc3VtZXMgbWlkLXRlYXJkb3duIGFuZCBjYWxscyBgYWRkQ2hpbGRgXG4gICAgLy8gcGFya3MgaXRzIGNoaWxkIG9uIHRoZSBmcmVzaCBzdXJmYWNlIHJhdGhlciB0aGFuIG9uIHRoZSBvbmUgYmVpbmcgdG9ybiBkb3duIFx1MjAxNCB3aGVyZSBgQ29tcG9uZW50RXhgXG4gICAgLy8gd291bGQgcmVmdXNlIGl0IG91dHJpZ2h0LCBzaW5jZSBpdCByZWZ1c2VzIGNoaWxkcmVuIGFkZGVkIHRvIGFuIGFscmVhZHktdW5sb2FkZWQgY29tcG9uZW50LlxuICAgIHRoaXMuZ2F0ZWRXcmFwcGVyQ29tcG9uZW50ID0gbmV3IENvbXBvbmVudEV4KCk7XG4gICAgdGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50LnJlbW92ZUNoaWxkKGdhdGVkV3JhcHBlckNvbXBvbmVudCk7XG5cbiAgICB0aGlzLmJyb2FkY2FzdFVubG9hZGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWxvYWRzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIGJ5IGRpc2FibGluZyBhbmQgdGhlbiByZS1lbmFibGluZyBpdC5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byByZWxvYWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBsdWdpbiBpcyByZWxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbG9hZFBsdWdpbihwbHVnaW46IFBsdWdpbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwbHVnaW5zID0gcGx1Z2luLmFwcC5wbHVnaW5zO1xuICBjb25zdCBwbHVnaW5JZCA9IHBsdWdpbi5tYW5pZmVzdC5pZDtcbiAgYXdhaXQgcGx1Z2lucy5kaXNhYmxlUGx1Z2luKHBsdWdpbklkKTtcbiAgYXdhaXQgcGx1Z2lucy5lbmFibGVQbHVnaW4ocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIERpc3BsYXlzIGFuIGVycm9yIG1lc3NhZ2UgYXMgYSBub3RpY2UsIGxvZ3MgaXQgdG8gdGhlIGNvbnNvbGUsIGFuZCBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byBkaXNhYmxlLlxuICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IGFuZCBsb2cuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBsdWdpbiBpcyBkaXNhYmxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob3dFcnJvckFuZERpc2FibGVQbHVnaW4ocGx1Z2luOiBQbHVnaW4sIG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwbHVnaW5Ob3RpY2VDb21wb25lbnQgPSBuZXcgUGx1Z2luTm90aWNlQ29tcG9uZW50KHtcbiAgICBhcHA6IHBsdWdpbi5hcHAsXG4gICAgcGx1Z2luTmFtZTogcGx1Z2luLm1hbmlmZXN0Lm5hbWVcbiAgfSk7XG4gIHBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKG1lc3NhZ2UpO1xuICBwcmludEVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gIGF3YWl0IHBsdWdpbi5hcHAucGx1Z2lucy5kaXNhYmxlUGx1Z2luKHBsdWdpbi5tYW5pZmVzdC5pZCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY0EsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxjQUFjO0FBY3ZCLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsK0JBQStC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
611
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbi9wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBCYXNlIGNsYXNzIGZvciBPYnNpZGlhbiBwbHVnaW5zIHVzaW5nIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS5cbiAqXG4gKiBQbHVnaW5CYXNlIHJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyAoY29udGV4dCwgaTE4biwgZXJyb3IgaGFuZGxpbmcsIGFib3J0IHNpZ25hbCwgbGlmZWN5Y2xlIGV2ZW50cywgZGVidWcpLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tcG9uZW50LFxuICBJY29uTmFtZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBtaXhpbkFzeW5jRXZlbnRzIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jLWV2ZW50cyc7XG5pbXBvcnQgeyBwcmludEVycm9yIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7IG5vb3BBc3luYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgUGx1Z2luQ29uZmxpY3QsXG4gIFBsdWdpbkRlcGVuZGVuY3lcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tZ2F0ZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnNNYXAgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5BcGlEZWNsYXJhdGlvbiB9IGZyb20gJy4vcGx1Z2luLWFwaS50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBsdWdpbkV2ZW50TWFwLFxuICBQbHVnaW5FdmVudFNvdXJjZVxufSBmcm9tICcuL3BsdWdpbi1ldmVudC1zb3VyY2UudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQgfSBmcm9tICcuL3BsdWdpbi1saWZlY3ljbGUtZXZlbnRzLnRzJztcblxuaW1wb3J0IHsgQXBwQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21tYW5kLWhhbmRsZXJzL2NvbW1hbmQtaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi4vY29tbWFuZC1oYW5kbGVycy91bmxvY2stYWN0aXZlLW5vdGUtY29tbWFuZC1oYW5kbGVyLnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgeyBBYm9ydFNpZ25hbENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWJvcnQtc2lnbmFsLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBBc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYXN5bmMtZXJyb3ItaGFuZGxlci1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBDb25zb2xlRGVidWdDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbnNvbGUtZGVidWctY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RlYm9vay1uYXZpZ2F0b3ItbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzJztcbmltcG9ydCB7IFBsdWdpbkNvbnRleHRDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1jb250ZXh0LWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5HYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tZ2F0ZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGx1Z2luTm90aWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9wbHVnaW4tbm90aWNlLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9jb21wb25lbnRzL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgUGx1Z2luRGF0YUhhbmRsZXIgfSBmcm9tICcuLi9kYXRhLWhhbmRsZXIudHMnO1xuaW1wb3J0IHsgaW5pdEkxOE4gfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9uc01hcCB9IGZyb20gJy4uL2kxOG4vbG9jYWxlcy90cmFuc2xhdGlvbnMtbWFwLnRzJztcbmltcG9ydCB7IFJlc291cmNlTG9ja0NvbXBvbmVudCB9IGZyb20gJy4uL3Jlc291cmNlLWxvY2sudHMnO1xuaW1wb3J0IHsgcHVibGlzaFBsdWdpbkFwaSB9IGZyb20gJy4vcGx1Z2luLWFwaS50cyc7XG5pbXBvcnQgeyBQbHVnaW5FdmVudFNvdXJjZUltcGwgfSBmcm9tICcuL3BsdWdpbi1ldmVudC1zb3VyY2UudHMnO1xuaW1wb3J0IHtcbiAgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLFxuICBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRSxcbiAgdHJpZ2dlclBsdWdpbkxpZmVjeWNsZUV2ZW50XG59IGZyb20gJy4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuXG4vKipcbiAqIFRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyBvd25lZCBieSB7QGxpbmsgUGx1Z2luQmFzZX0sIGtleWVkIGJ5IHRoZSBuYW1lIG9mIHRoZSBhY2Nlc3NvciBleHBvc2luZ1xuICogZWFjaCBvbmUuIEV2ZXJ5IG1lbWJlciBpcyBvcHRpb25hbCBiZWNhdXNlIGEgY29tcG9uZW50IG9ubHkgZXhpc3RzIG9uY2Uge0BsaW5rIFBsdWdpbkJhc2Uub25sb2FkfVxuICogaGFzIGNyZWF0ZWQgaXQuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5CYXNlQ29tcG9uZW50cyB7XG4gIGFib3J0U2lnbmFsQ29tcG9uZW50PzogQWJvcnRTaWduYWxDb21wb25lbnQ7XG4gIGFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50PzogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQ7XG4gIGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50PzogQ29tbWFuZEhhbmRsZXJDb21wb25lbnQ7XG4gIGNvbnNvbGVEZWJ1Z0NvbXBvbmVudD86IENvbnNvbGVEZWJ1Z0NvbXBvbmVudDtcbiAgcGx1Z2luQ29udGV4dENvbXBvbmVudD86IFBsdWdpbkNvbnRleHRDb21wb25lbnQ7XG4gIHBsdWdpbkdhdGVDb21wb25lbnQ/OiBQbHVnaW5HYXRlQ29tcG9uZW50O1xuICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ/OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gIHBsdWdpblNldHRpbmdzQ29tcG9uZW50PzogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD47XG4gIHJlc291cmNlTG9ja0NvbXBvbmVudD86IFJlc291cmNlTG9ja0NvbXBvbmVudDtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBPYnNpZGlhbiBwbHVnaW5zIHdpdGggYSBjb21wb25lbnQtYmFzZWQgYXJjaGl0ZWN0dXJlLlxuICpcbiAqIFJlZ2lzdGVycyB1bml2ZXJzYWwgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiBTdWJjbGFzc2VzIGFkZCBvciByZXBsYWNlIGNvbXBvbmVudHNcbiAqIHZpYSB7QGxpbmsgcmVtb3ZlQ2hpbGR9IC8ge0BsaW5rIGFkZENoaWxkfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBsdWdpbkJhc2UgZXh0ZW5kcyBtaXhpbkFzeW5jRXZlbnRzPFBsdWdpbkV2ZW50TWFwPigpKFBsdWdpbikgaW1wbGVtZW50cyBQbHVnaW5FdmVudFNvdXJjZSB7XG4gIC8qKlxuICAgKiBHZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KCk6IEFib3J0U2lnbmFsQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLmFib3J0U2lnbmFsQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEFib3J0IHNpZ25hbCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGFib3J0U2lnbmFsQ29tcG9uZW50KHZhbHVlOiBBYm9ydFNpZ25hbENvbXBvbmVudCkge1xuICAgIHRoaXMuc2V0Q29tcG9uZW50KCdhYm9ydFNpZ25hbENvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBhc3luYyBlcnJvciBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQoKTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMuYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYXN5bmMgZXJyb3IgaGFuZGxlciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEFzeW5jIGVycm9yIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBhc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCh2YWx1ZTogQXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgnYXN5bmNFcnJvckhhbmRsZXJDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2hhcmVkIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuIFJlZ2lzdGVyIGEgcGx1Z2luJ3MgY29tbWFuZHMgb24gaXQgdmlhXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudC5yZWdpc3RlckNvbW1hbmRIYW5kbGVyc30gcmF0aGVyIHRoYW4gY29uc3RydWN0aW5nIHlvdXIgb3duXG4gICAqIHtAbGluayBDb21tYW5kSGFuZGxlckNvbXBvbmVudH0gXHUyMDE0IHRoZSBhcHAtYmFja2VkIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBjb21tYW5kIHJlZ2lzdHJhciwgbWVudVxuICAgKiBldmVudCByZWdpc3RyYXIsIGFuZCBwbHVnaW4gbmFtZSBhcmUgYWxyZWFkeSB3aXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGNvbW1hbmQgaGFuZGxlciBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KCk6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLmNvbW1hbmRIYW5kbGVyQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgY29tbWFuZCBoYW5kbGVyIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgY29tbWFuZEhhbmRsZXJDb21wb25lbnQodmFsdWU6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ2NvbW1hbmRIYW5kbGVyQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGNvbnNvbGUgZGVidWcgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBjb25zb2xlRGVidWdDb21wb25lbnQoKTogQ29uc29sZURlYnVnQ29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLmNvbnNvbGVEZWJ1Z0NvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBjb25zb2xlIGRlYnVnIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQ29uc29sZSBkZWJ1ZyBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IGNvbnNvbGVEZWJ1Z0NvbXBvbmVudCh2YWx1ZTogQ29uc29sZURlYnVnQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ2NvbnNvbGVEZWJ1Z0NvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudCAocGx1Z2luIElELCBkZWJ1ZyBjb250cm9sbGVyLCBsaWJyYXJ5IHN0eWxlcykuXG4gICAqXG4gICAqIEByZXR1cm5zIHBsdWdpbiBjb250ZXh0IGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luQ29udGV4dENvbXBvbmVudCgpOiBQbHVnaW5Db250ZXh0Q29tcG9uZW50IHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5jb21wb25lbnRzLnBsdWdpbkNvbnRleHRDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcGx1Z2luIGNvbnRleHQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBQbHVnaW4gY29udGV4dCBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0IHBsdWdpbkNvbnRleHRDb21wb25lbnQodmFsdWU6IFBsdWdpbkNvbnRleHRDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgncGx1Z2luQ29udGV4dENvbXBvbmVudCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBnYXRlIGhvbGRpbmcgdGhlIHBsdWdpbidzIGZlYXR1cmUgc3VyZmFjZSB1cCBvciBkb3duLlxuICAgKlxuICAgKiBSZWFjaCBmb3IgaXQgZnJvbSBhIHNldHRpbmdzIHRhYiB0byByZW5kZXIgdGhlIG92ZXJsYXAgYmFubmVyIGZvciBhXG4gICAqIHtAbGluayBjb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm59IGNvbmZsaWN0IFx1MjAxNCB0aGUgb25lXG4gICAqIGJhbm5lciB0aGUgbGlicmFyeSBjYW5ub3QgcGxhY2UgaXRzZWxmLCBiZWNhdXNlIGEgcnVubmluZyBwbHVnaW4gYnVpbGRzIGl0cyBvd24gc2V0dGluZ3MgdGFiLlxuICAgKlxuICAgKiBSZWFkYWJsZSB0aHJvdWdob3V0IHtAbGluayBvbmxvYWRJbXBsfSwgaW5jbHVkaW5nIGl0cyBzeW5jaHJvbm91cyBwcmVmaXgsIHdoaWNoIGlzIHdoZXJlIGEgc2V0dGluZ3NcbiAgICogdGFiIGlzIGJ1aWx0LiBUaGF0IGlzIGRlbGliZXJhdGUgcmF0aGVyIHRoYW4gaW5jaWRlbnRhbDogYWRkaW5nIHRoZSBnYXRlIGlzIHdoYXQgcnVuc1xuICAgKiB7QGxpbmsgb25sb2FkSW1wbH0sIHNvIHtAbGluayBvbmxvYWR9IGFzc2lnbnMgdGhpcyBmaWVsZCBiZWZvcmUgYWRkaW5nIGl0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcGx1Z2luIGdhdGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBwbHVnaW5HYXRlQ29tcG9uZW50KCk6IFBsdWdpbkdhdGVDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luR2F0ZUNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcGx1Z2luIGdhdGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgcGx1Z2luIGdhdGUgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCBwbHVnaW5HYXRlQ29tcG9uZW50KHZhbHVlOiBQbHVnaW5HYXRlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ3BsdWdpbkdhdGVDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBwbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgcGx1Z2luIG5vdGljZSBjb21wb25lbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHBsdWdpbk5vdGljZUNvbXBvbmVudCgpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnQge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luTm90aWNlQ29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBQbHVnaW4gbm90aWNlIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luTm90aWNlQ29tcG9uZW50KHZhbHVlOiBQbHVnaW5Ob3RpY2VDb21wb25lbnQpIHtcbiAgICB0aGlzLnNldENvbXBvbmVudCgncGx1Z2luTm90aWNlQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQoKTogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD4ge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmNvbXBvbmVudHMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gUGx1Z2luIHNldHRpbmdzIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBzZXQgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQodmFsdWU6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+KSB7XG4gICAgdGhpcy5zZXRDb21wb25lbnQoJ3BsdWdpblNldHRpbmdzQ29tcG9uZW50JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVkaXRvciBsb2NrIGNvbXBvbmVudCwgdXNlZCB0byBsb2NrIG5vdGVzIHJlYWQtb25seSBkdXJpbmcgbG9uZyBvcGVyYXRpb25zLiBPd25lZCBieVxuICAgKiB0aGUgcGx1Z2luLCBzbyBpdHMgbG9ja3MgYXJlIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgcGx1Z2luIHVubG9hZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIEVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcmVzb3VyY2VMb2NrQ29tcG9uZW50KCk6IFJlc291cmNlTG9ja0NvbXBvbmVudCB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuY29tcG9uZW50cy5yZXNvdXJjZUxvY2tDb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGVkaXRvciBsb2NrIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gRWRpdG9yIGxvY2sgY29tcG9uZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldCByZXNvdXJjZUxvY2tDb21wb25lbnQodmFsdWU6IFJlc291cmNlTG9ja0NvbXBvbmVudCkge1xuICAgIHRoaXMuc2V0Q29tcG9uZW50KCdyZXNvdXJjZUxvY2tDb21wb25lbnQnLCB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudHM6IFBsdWdpbkJhc2VDb21wb25lbnRzID0ge307XG5cbiAgLy8gRXZlcnl0aGluZyB0aGUgU1VCQ0xBU1Mgb3duczogd2hhdCBgb25sb2FkSW1wbGAgYWRkcywgYW5kIHdoYXQgaXQgYWRkcyBsYXRlci5cbiAgLy9cbiAgLy8gQSBzZWNvbmQgd3JhcHBlciByYXRoZXIgdGhhbiBvbmUsIGJlY2F1c2UgdGhlIHR3byB0aWVycyBoYXZlIG9wcG9zaXRlIGxpZmV0aW1lcy4gVGhlIHVuaXZlcnNhbFxuICAvLyBjb21wb25lbnRzIGhhdmUgdG8gT1VUTElWRSBhIGxvc3QgZGVwZW5kZW5jeSBcdTIwMTQgdGhleSBhcmUgd2hhdCBzaG93cyB0aGUgbm90aWNlIG5hbWluZyB0aGUgcGx1Z2luIHRoYXRcbiAgLy8gd2VudCBhd2F5IGFuZCByZW5kZXJzIHRoZSBidXR0b24gdGhhdCBicmluZ3MgaXQgYmFjayBcdTIwMTQgd2hpbGUgdGhlIHN1YmNsYXNzJ3Mgc3VyZmFjZSBpcyBleGFjdGx5IHdoYXRcbiAgLy8gbXVzdCBzdG9wIHJ1bm5pbmcuIFVubG9hZGluZyBvbmUgd3JhcHBlciBob2xkaW5nIGJvdGggd291bGQgc2lsZW5jZSB0aGUgcGx1Z2luIGF0IHRoZSBtb21lbnQgaXQgbW9zdFxuICAvLyBuZWVkcyB0byBzcGVhay5cbiAgLy9cbiAgLy8gQWx3YXlzIHByZXNlbnQsIG5ldmVyIG51bGwsIGFuZCBSRVBMQUNFRCByYXRoZXIgdGhhbiBlbXB0aWVkIHdoZW4gdGhlIHN1cmZhY2UgaXMgdG9ybiBkb3duLiBUaGF0IGtlZXBzXG4gIC8vIGBhZGRDaGlsZGAgY2FsbGFibGUgYXQgZXZlcnkgcG9pbnQgaW4gdGhlIHBsdWdpbidzIGxpZmUsIGV4YWN0bHkgYXMgaXQgd2FzIGJlZm9yZSB0aGUgdGllcnMgZXhpc3RlZDpcbiAgLy8gQSBjaGlsZCBhZGRlZCBiZWZvcmUgdGhlIGdhdGUgb3BlbnMgaXMgcXVldWVkIGFuZCBsb2FkZWQgd2hlbiBpdCBkb2VzLCB3aGljaCBpcyB3aGF0IGBDb21wb25lbnRFeGBcbiAgLy8gYWxyZWFkeSBkb2VzIGZvciBhbnkgY2hpbGQgYWRkZWQgdG8gYSBub3QteWV0LWxvYWRlZCBjb21wb25lbnQuXG4gIHByaXZhdGUgZ2F0ZWRXcmFwcGVyQ29tcG9uZW50ID0gbmV3IENvbXBvbmVudEV4KCk7XG5cbiAgLy8gVGhlIHBheWxvYWQgYnJvYWRjYXN0IHdoZW4gdGhpcyBwbHVnaW4gZmluaXNoZWQgbG9hZGluZywga2VwdCBzbyB0aGUgbWF0Y2hpbmcgdW5sb2FkZWQgYnJvYWRjYXN0XG4gIC8vIGRlc2NyaWJlcyB0aGUgc2FtZSBwbHVnaW4gd2l0aG91dCByZS1kZXJpdmluZyBpdCBmcm9tIGEgc3VyZmFjZSB0aGF0IGhhcyBzaW5jZSBiZWVuIHRvcm4gZG93bi4gTnVsbFxuICAvLyB3aGVuZXZlciBubyBsb2FkZWQgYnJvYWRjYXN0IGlzIG91dHN0YW5kaW5nLCB3aGljaCBpcyB3aGF0IGtlZXBzIHRoZSB0d28gZXZlbnRzIHBhaXJlZC5cbiAgcHJpdmF0ZSBsaWZlY3ljbGVFdmVudFBheWxvYWQ6IG51bGwgfCBQbHVnaW5MaWZlY3ljbGVFdmVudFBheWxvYWQgPSBudWxsO1xuXG4gIC8vIFRoZSBsaWJyYXJ5J3Mgb3duIGNvbXBvbmVudHMsIHdoaWNoIG91dGxpdmUgYW55IGRlcGVuZGVuY3kuXG4gIHByaXZhdGUgcmVhZG9ubHkgdW5pdmVyc2FsV3JhcHBlckNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRFeCgpO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hpbGQgY29tcG9uZW50LlxuICAgKlxuICAgKiBUaGUgY2hpbGQgaXMgYWRkZWQgdG8gdGhlIGludGVybmFsIHdyYXBwZXIgaG9sZGluZyB0aGUgc3ViY2xhc3MncyBvd24gc3VyZmFjZSwgd2hpY2gge0BsaW5rIG9ubG9hZH1cbiAgICogY3JlYXRlcyBhbmQgbG9hZHMgYmVmb3JlIGNhbGxpbmcge0BsaW5rIG9ubG9hZEltcGx9LiBTbyBhIGNoaWxkIGFkZGVkIGR1cmluZyB7QGxpbmsgb25sb2FkSW1wbH0gaXNcbiAgICogbG9hZGVkIGltbWVkaWF0ZWx5LCBjaGlsZHJlbi1maXJzdCwgYW5kIGlzIHVzYWJsZSBieSB0aGUgdGltZSB0aGlzIG1ldGhvZCByZXR1cm5zLlxuICAgKlxuICAgKiBUaGF0IHdyYXBwZXIgaXMgdG9ybiBkb3duIGFuZCByZWJ1aWx0IHdoZW5ldmVyIHRoZSBnYXRlIGNsb3NlcyBhbmQgb3BlbnMgYWdhaW4gXHUyMDE0IGEgZGVwZW5kZW5jeSBkZWNsYXJlZFxuICAgKiBieSB7QGxpbmsgZ2V0UGx1Z2luRGVwZW5kZW5jaWVzfSBnb2luZyBhd2F5IGFuZCBjb21pbmcgYmFjaywgb3IgYSBjb25mbGljdCBkZWNsYXJlZCBieVxuICAgKiB7QGxpbmsgZ2V0UGx1Z2luQ29uZmxpY3RzfSBhcHBlYXJpbmcgYW5kIGJlaW5nIHJlc29sdmVkIFx1MjAxNCBzbyBhIGNoaWxkIGFkZGVkIGhlcmUgbGl2ZXMgZXhhY3RseSBhcyBsb25nXG4gICAqIGFzIHRoZSBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2UgZG9lcy4gQWRkaW5nIG9uZSB3aGlsZSB0aGUgc3VyZmFjZSBpcyBkb3duIGlzIHN0aWxsIGxlZ2l0aW1hdGUgXHUyMDE0IGl0IGlzXG4gICAqIHF1ZXVlZCBhbmQgbG9hZGVkIHdoZW4gdGhlIHN1cmZhY2UgbmV4dCBjb21lcyB1cCwgdGhlIHdheSB7QGxpbmsgQ29tcG9uZW50RXguYWRkQ2hpbGR9IGFscmVhZHkgcXVldWVzXG4gICAqIGEgY2hpbGQgYWRkZWQgdG8gYSBub3QteWV0LWxvYWRlZCBjb21wb25lbnQuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIFNVQkNMQVNTJ3MgZG9vciwgYW5kIHRoZSBvbmx5IG9uZSBpdCBoYXM6IHRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyB7QGxpbmsgb25sb2FkfSByZWdpc3RlcnNcbiAgICogdGFrZSBhIHByaXZhdGUgcm91dGUgb250byBhIGRpZmZlcmVudCB3cmFwcGVyLiBTbyBhbnl0aGluZyBvYnNlcnZpbmcgdGhpcyBtZXRob2QgXHUyMDE0IGEgdGVzdCBjb3VudGluZyBpdHNcbiAgICogY2FsbHMsIGEgcGF0Y2ggd3JhcHBpbmcgaXQgXHUyMDE0IHNlZXMgZXhhY3RseSB0aGUgY2hpbGRyZW4gdGhlIHN1YmNsYXNzIGFkZGVkLCBhbmQgbm9uZSBvZiB0aGUgbGlicmFyeSdzLlxuICAgKiBCZWZvcmUgdGhlIHR3byB0aWVycyBleGlzdGVkIG9uZSBkb29yIGNhcnJpZWQgYm90aCwgYW5kIGEgY29uc3VtZXIgY291bnRpbmcgdGhlIHRvdGFsIGlzIHRoZSBvbmUgdGhpbmdcbiAgICogdGhlIHNwbGl0IGNvdWxkIG5vdCBrZWVwIHdvcmtpbmcuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGFkZGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5nYXRlZFdyYXBwZXJDb21wb25lbnQuYWRkQ2hpbGQoY29tcG9uZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZXh0ZXJuYWwgc2V0dGluZ3MgY2hhbmdlLlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyBpZiBuZWVkZWQuIE1ha2Ugc3VyZSB0byBjYWxsIGBhd2FpdCBzdXBlci5vbkV4dGVybmFsU2V0dGluZ3NDaGFuZ2UoKWAgZmlyc3QuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25FeHRlcm5hbFNldHRpbmdzQ2hhbmdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLm9uRXh0ZXJuYWxTZXR0aW5nc0NoYW5nZT8uKCk7XG4gICAgYXdhaXQgdGhpcy50cmlnZ2VyQXN5bmMoJ2V4dGVybmFsU2V0dGluZ3NDaGFuZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGxvYWRlZC5cbiAgICpcbiAgICogT3JjaGVzdHJhdGVzIGxvYWRpbmc6IHJlZ2lzdGVycyB0aGUgdW5pdmVyc2FsIGNvbXBvbmVudHMsIGxldHMgdGhlIHN1YmNsYXNzIHdpcmUgaXRzIG93blxuICAgKiBjb21wb25lbnRzIHZpYSB7QGxpbmsgb25sb2FkSW1wbH0sIHRoZW4gYXdhaXRzIHRoZSBhc3luYyB0YWlsIG9mIGV2ZXJ5IGxvYWQuXG4gICAqIEVhY2ggY29tcG9uZW50IGxvYWRzIGFzIGl0IGlzIGFkZGVkLCBjaGlsZHJlbi1maXJzdC5cbiAgICpcbiAgICogRG8gTk9UIG92ZXJyaWRlIHRoaXMgbWV0aG9kLiBPdmVycmlkZSB7QGxpbmsgb25sb2FkSW1wbH0gaW5zdGVhZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvbmxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRoZSB3cmFwcGVyIGlzIGF0dGFjaGVkIGFuZCBsb2FkZWQgYmVmb3JlIGFueXRoaW5nIGlzIHdpcmVkIHVwLCBzbyBldmVyeSBgYWRkQ2hpbGRgIGJlbG93XG4gICAgICAvLyBsb2FkcyBpdHMgY2hpbGQgc3RyYWlnaHQgYXdheSByYXRoZXIgdGhhbiBxdWV1aW5nIGl0LlxuICAgICAgLy8gVGhhdCBpcyB3aGF0IGxldHMgYSBjb21tYW5kIGhhbmRsZXIgcmVnaXN0ZXIgaXRzIG1lbnUgZXZlbnRzIGZyb20gYG9uUmVnaXN0ZXJlZGAsIHdoaWNoXG4gICAgICAvLyBgcmVnaXN0ZXJDb21tYW5kSGFuZGxlcnNgIGF3YWl0cyBhbmQgd2hpY2ggYSByZWdpc3RyYXIgcmVmdXNlcyB3aGlsZSB1bmxvYWRlZC5cbiAgICAgIC8vIEF0dGFjaGluZyBpdCB1cCBmcm9udCBhbHNvIHJlZ2lzdGVycyB0aGUgd3JhcHBlciBmb3IgdGVhcmRvd24gYmVmb3JlIGFueXRoaW5nIGNhbiB0aHJvdy5cbiAgICAgIC8vIFRoZSBsb2FkIGlzIGV4cGxpY2l0IHJhdGhlciB0aGFuIGxlZnQgdG8gYGFkZENoaWxkYCwgd2hpY2ggbG9hZHMgdGhlIGNoaWxkIG9ubHkgd2hlbiB0aGVcbiAgICAgIC8vIHBsdWdpbiBpdHNlbGYgaXMgbG9hZGVkIFx1MjAxNCB0cnVlIHdoZW4gT2JzaWRpYW4gY2FsbHMgYGxvYWQoKWAsIGJ1dCBub3Qgd2hlbiBhIGNhbGxlciBpbnZva2VzXG4gICAgICAvLyBgb25sb2FkKClgIGRpcmVjdGx5LlxuICAgICAgc3VwZXIuYWRkQ2hpbGQodGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50KTtcbiAgICAgIHRoaXMudW5pdmVyc2FsV3JhcHBlckNvbXBvbmVudC5sb2FkKCk7XG5cbiAgICAgIGF3YWl0IGluaXRJMThOKHRoaXMuY3JlYXRlVHJhbnNsYXRpb25zTWFwKCkpO1xuICAgICAgdGhpcy5wbHVnaW5Db250ZXh0Q29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChcbiAgICAgICAgbmV3IFBsdWdpbkNvbnRleHRDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luSWQ6IHRoaXMubWFuaWZlc3QuaWRcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCA9IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQoXG4gICAgICAgIG5ldyBQbHVnaW5Ob3RpY2VDb21wb25lbnQoe1xuICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgcGx1Z2luTmFtZTogdGhpcy5tYW5pZmVzdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5hc3luY0Vycm9ySGFuZGxlckNvbXBvbmVudCA9IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQobmV3IEFzeW5jRXJyb3JIYW5kbGVyQ29tcG9uZW50KHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50KSk7XG4gICAgICB0aGlzLmFib3J0U2lnbmFsQ29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChuZXcgQWJvcnRTaWduYWxDb21wb25lbnQodGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgdGhpcy5jb25zb2xlRGVidWdDb21wb25lbnQgPSB0aGlzLmFkZFVuaXZlcnNhbENoaWxkKG5ldyBDb25zb2xlRGVidWdDb21wb25lbnQodGhpcy5tYW5pZmVzdC5pZCkpO1xuICAgICAgdGhpcy5yZXNvdXJjZUxvY2tDb21wb25lbnQgPSB0aGlzLmFkZFVuaXZlcnNhbENoaWxkKG5ldyBSZXNvdXJjZUxvY2tDb21wb25lbnQodGhpcy5hcHAsIHRoaXMubWFuaWZlc3QuaWQpKTtcbiAgICAgIC8vIE5vdGVib29rIE5hdmlnYXRvciBkcmF3cyBpdHMgb3duIGZpbGUgdHJlZSBhbmQgbmV2ZXIgcmFpc2VzIE9ic2lkaWFuJ3MgYGZpbGUtbWVudWAgL1xuICAgICAgLy8gYGZpbGVzLW1lbnVgIGV2ZW50cywgc28gZXZlcnkgcGx1Z2luJ3MgY29udGV4dC1tZW51IGl0ZW1zIHdvdWxkIHZhbmlzaCBmb3IgYW55b25lIGJyb3dzaW5nXG4gICAgICAvLyB0aHJvdWdoIGl0LiBXaXJlZCBoZXJlIHJhdGhlciB0aGFuIHBlci1wbHVnaW46IHRoZSBicmlkZ2Ugc3RheXMgZG9ybWFudCB3aGVuIE5vdGVib29rXG4gICAgICAvLyBOYXZpZ2F0b3IgaXMgbm90IGluc3RhbGxlZCwgYW5kIGEgcGx1Z2luIHdpdGggbm8gZmlsZS9mb2xkZXIgaGFuZGxlcnMgY29udHJpYnV0ZXMgbm90aGluZy5cbiAgICAgIGNvbnN0IG5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50ID0gdGhpcy5hZGRVbml2ZXJzYWxDaGlsZChcbiAgICAgICAgbmV3IE5vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50KHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIHBsdWdpbk5hbWU6IHRoaXMubWFuaWZlc3QubmFtZSxcbiAgICAgICAgICBzdWJtZW51SWNvbjogdGhpcy5nZXROb3RlYm9va05hdmlnYXRvck1lbnVTdWJtZW51SWNvbigpXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5jb21tYW5kSGFuZGxlckNvbXBvbmVudCA9IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQoXG4gICAgICAgIG5ldyBDb21tYW5kSGFuZGxlckNvbXBvbmVudCh7XG4gICAgICAgICAgYWN0aXZlRmlsZVByb3ZpZGVyOiBuZXcgQXBwQWN0aXZlRmlsZVByb3ZpZGVyKHRoaXMuYXBwKSxcbiAgICAgICAgICBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFyczogW25vdGVib29rTmF2aWdhdG9yTWVudUV2ZW50UmVnaXN0cmFyQ29tcG9uZW50XSxcbiAgICAgICAgICAvLyBUaGUgY29tcG9uZW50IGlzIHVuaXZlcnNhbDsgdGhlIGNvbW1hbmRzIHJlZ2lzdGVyZWQgVEhST1VHSCBpdCBhcmUgbm90LiBBIHN1YmNsYXNzIHJlZ2lzdGVyc1xuICAgICAgICAgIC8vIGl0cyBvd24gZnJvbSBgb25sb2FkSW1wbGAsIGNsb3Npbmcgb3ZlciBjb2xsYWJvcmF0b3JzIHRoYXQgYmVsb25nIHRvIHRoZSBmZWF0dXJlIHN1cmZhY2UgXHUyMDE0IHNvXG4gICAgICAgICAgLy8gdGhvc2UgY29tbWFuZHMgbXVzdCBnbyBkb3duIHdpdGggdGhlIHN1cmZhY2Ugd2hlbiB0aGUgZ2F0ZSBjbG9zZXMsIG9yIHRoZXkgc2l0IGluIHRoZSBwYWxldHRlXG4gICAgICAgICAgLy8gY2FsbGluZyBpbnRvIHRvcm4tZG93biBvYmplY3RzLCBhbmQgYXJlIHJlZ2lzdGVyZWQgYSBzZWNvbmQgdGltZSB3aGVuIHRoZSBnYXRlIHJlb3BlbnMgYW5kXG4gICAgICAgICAgLy8gYG9ubG9hZEltcGxgIHJ1bnMgYWdhaW4uXG4gICAgICAgICAgLy8gUmVzb2x2ZWQgb24gZXZlcnkgY2FsbCByYXRoZXIgdGhhbiBjYXB0dXJlZCBoZXJlLCBiZWNhdXNlIGB1bmxvYWRGZWF0dXJlU3VyZmFjZWAgUkVQTEFDRVMgdGhlXG4gICAgICAgICAgLy8gd3JhcHBlciBpbnN0ZWFkIG9mIGVtcHR5aW5nIGl0OiBlYWNoIGN5Y2xlJ3MgY29tbWFuZHMgYmVsb25nIHRvIHRoYXQgY3ljbGUncyB3cmFwcGVyLlxuICAgICAgICAgIGNvbW1hbmRMaWZldGltZU93bmVyUHJvdmlkZXI6ICgpOiBDb21wb25lbnRFeCA9PiB0aGlzLmdhdGVkV3JhcHBlckNvbXBvbmVudCxcbiAgICAgICAgICBjb21tYW5kUmVnaXN0cmFyOiBuZXcgUGx1Z2luQ29tbWFuZFJlZ2lzdHJhcih0aGlzKSxcbiAgICAgICAgICBtZW51RXZlbnRSZWdpc3RyYXI6IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQobmV3IE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCh0aGlzLmFwcCkpLFxuICAgICAgICAgIHBsdWdpbk5hbWU6IHRoaXMubWFuaWZlc3QubmFtZVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIC8vIEFsd2F5cyBhdmFpbGFibGU7IHRoZSBjb21tYW5kJ3Mgb3duIGBjYW5FeGVjdXRlYCBoaWRlcyBpdCB1bmxlc3MgdGhlIGFjdGl2ZSBub3RlIGlzIGxvY2tlZC5cbiAgICAgIC8vIFRoZSBvbmUgY29tbWFuZCB0aGF0IG5hbWVzIGl0cyBvd25lciBleHBsaWNpdGx5LCBvcHRpbmcgT1VUIG9mIHRoZSBzdXJmYWNlLXNjb3BlZCBkZWZhdWx0IGFib3ZlOlxuICAgICAgLy8gSXQgaXMgdGhlIHJlc2N1ZSBmb3IgYSBub3RlIGxlZnQgbG9ja2VkLCBpdCBjbG9zZXMgb3ZlciBub3RoaW5nIGJ1dCB0aGUgdW5pdmVyc2FsIHJlc291cmNlLWxvY2tcbiAgICAgIC8vIGNvbXBvbmVudCwgYW5kIGEgYmxvY2tlZCBwbHVnaW4gaXMgZXhhY3RseSB3aGVuIGEgdXNlciBtYXkgbmVlZCBpdC5cbiAgICAgIGF3YWl0IHRoaXMuY29tbWFuZEhhbmRsZXJDb21wb25lbnQucmVnaXN0ZXJDb21tYW5kSGFuZGxlcnMoKCkgPT4gW1xuICAgICAgICBuZXcgVW5sb2NrQWN0aXZlTm90ZUNvbW1hbmRIYW5kbGVyKHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogdGhpcy5yZXNvdXJjZUxvY2tDb21wb25lbnRcbiAgICAgICAgfSlcbiAgICAgIF0sIHsgbGlmZXRpbWVPd25lcjogdGhpcy5jb21tYW5kSGFuZGxlckNvbXBvbmVudCB9KTtcblxuICAgICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHRoaXMuYWRkVW5pdmVyc2FsQ2hpbGQoXG4gICAgICAgIG5ldyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8b2JqZWN0Pih7XG4gICAgICAgICAgZGF0YUhhbmRsZXI6IG5ldyBQbHVnaW5EYXRhSGFuZGxlcih0aGlzKSxcbiAgICAgICAgICBwbHVnaW5FdmVudFNvdXJjZTogbmV3IFBsdWdpbkV2ZW50U291cmNlSW1wbCh0aGlzKSxcbiAgICAgICAgICBwbHVnaW5TZXR0aW5nc0NsYXNzOiBPYmplY3RcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIC8vIFRoZSBnYXRlLiBJdCBsb2FkcyB0aGUgZmVhdHVyZSBzdXJmYWNlIGl0c2VsZiBvbmNlIGV2ZXJ5IGRlY2xhcmVkIGRlcGVuZGVuY3kgaXMgc2F0aXNmaWVkIGFuZCBub1xuICAgICAgLy8gZGVjbGFyZWQgY29uZmxpY3QgaG9sZHMgXHUyMDE0IHdoaWNoIGZvciBhIHBsdWdpbiBkZWNsYXJpbmcgbmVpdGhlciBpcyBpbW1lZGlhdGVseSwgc3luY2hyb25vdXNseSxcbiAgICAgIC8vIGJlZm9yZSB0aGlzIGxpbmUgcmV0dXJucyBcdTIwMTQgYW5kIHVubG9hZHMgaXQgYWdhaW4gaWYgYSBkZXBlbmRlbmN5IGlzIGxhdGVyIGRpc2FibGVkIG9yIHVuaW5zdGFsbGVkLFxuICAgICAgLy8gb3IgYSBjb25mbGljdGluZyBwbHVnaW4gaXMgZW5hYmxlZC4gQSBwbHVnaW4gdGhhdCBpcyBibG9ja2VkIHRoZXJlZm9yZSByZWFjaGVzIGBsb2FkV2l0aFByb21pc2VzYFxuICAgICAgLy8gYmVsb3cgaGF2aW5nIHJlZ2lzdGVyZWQgbm90aGluZyBvZiBpdHMgb3duLCB3aXRoIG9ubHkgdGhlIHVuaXZlcnNhbCBjb21wb25lbnRzIGFib3ZlIHJ1bm5pbmcgdG9cbiAgICAgIC8vIGV4cGxhaW4gd2h5IGFuZCB0byBvZmZlciB0aGUgcmVwYWlyLlxuICAgICAgLy8gQXNzaWduZWQgQkVGT1JFIHRoZSBhZGQsIHVubGlrZSBldmVyeSB1bml2ZXJzYWwgY29tcG9uZW50IGFib3ZlLCBhbmQgdGhhdCBvcmRlciBpcyB0aGUgd2hvbGVcbiAgICAgIC8vIHBvaW50LiBBZGRpbmcgdGhpcyBvbmUgaXMgd2hhdCBydW5zIGBvbmxvYWRJbXBsYCwgcGVyIHRoZSBwYXJhZ3JhcGggYWJvdmUsIHNvIHRoZSBhc3NpZ25tZW50XG4gICAgICAvLyBzdGF0ZW1lbnQgaGFzIG5vdCByZXR1cm5lZCB5ZXQgd2hpbGUgdGhlIHN1YmNsYXNzIGlzIHJ1bm5pbmcgXHUyMDE0IGFuZCBhIHNldHRpbmdzIHRhYiBidWlsdCB0aGVyZVxuICAgICAgLy8gcmVhZHMgYHRoaXMucGx1Z2luR2F0ZUNvbXBvbmVudGAgdG8gcmVuZGVyIHRoZSBgV2FybmAgYmFubmVyLiBBc3NpZ25pbmcgYWZ0ZXIgdGhlIGFkZCB3b3VsZFxuICAgICAgLy8gbWFrZSB0aGF0IHJlYWQgdGhyb3cgYFZhbHVlIGlzIHVuZGVmaW5lZGAgb3V0IG9mIHRoZSBnZXR0ZXIsIHdoaWNoIGlzIGFuIG9wYXF1ZSB3YXkgdG8gc2F5XG4gICAgICAvLyBcInRvbyBlYXJseVwiLiBOb3RoaW5nIGFib3V0IGNoaWxkLWFkZCBvcmRlciBtb3ZlczogdGhlIHNlcXVlbmNlIG9mIGBhZGRVbml2ZXJzYWxDaGlsZGAgY2FsbHMgaXNcbiAgICAgIC8vIHVuY2hhbmdlZCwgYW5kIGBzZXRDb21wb25lbnRgIGlzIGEgcGxhaW4gc3RvcmUuXG4gICAgICBjb25zdCBwbHVnaW5HYXRlQ29tcG9uZW50ID0gbmV3IFBsdWdpbkdhdGVDb21wb25lbnQoe1xuICAgICAgICBjb25mbGljdHM6IHRoaXMuZ2V0UGx1Z2luQ29uZmxpY3RzKCksXG4gICAgICAgIGRlcGVuZGVuY2llczogdGhpcy5nZXRQbHVnaW5EZXBlbmRlbmNpZXMoKSxcbiAgICAgICAgbG9hZEZlYXR1cmVTdXJmYWNlOiAoKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmxvYWRGZWF0dXJlU3VyZmFjZSgpLFxuICAgICAgICBwbHVnaW46IHRoaXMsXG4gICAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudDogdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQsXG4gICAgICAgIHVubG9hZEZlYXR1cmVTdXJmYWNlOiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy51bmxvYWRGZWF0dXJlU3VyZmFjZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMucGx1Z2luR2F0ZUNvbXBvbmVudCA9IHBsdWdpbkdhdGVDb21wb25lbnQ7XG4gICAgICB0aGlzLmFkZFVuaXZlcnNhbENoaWxkKHBsdWdpbkdhdGVDb21wb25lbnQpO1xuXG4gICAgICAvLyBFdmVyeSBjaGlsZCBoYXMgYWxyZWFkeSBsb2FkZWQgYXMgaXQgd2FzIGFkZGVkOyB0aGlzIGF3YWl0cyB0aGVpciBhY2N1bXVsYXRlZCBhc3luYyB0YWlscyBhbmRcbiAgICAgIC8vIHJlcG9ydHMgYW55IGZhaWx1cmUgYXMgYSBzaW5nbGUgYEFnZ3JlZ2F0ZUVycm9yYC5cbiAgICAgIGF3YWl0IHRoaXMudW5pdmVyc2FsV3JhcHBlckNvbXBvbmVudC5sb2FkV2l0aFByb21pc2VzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByaW50RXJyb3IobmV3IEVycm9yKGBFcnJvciBsb2FkaW5nIHBsdWdpbiAke3RoaXMubWFuaWZlc3QubmFtZX0gKCR7dGhpcy5tYW5pZmVzdC5pZH0pYCwgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwbHVnaW4gaXMgdW5sb2FkZWQuXG4gICAqXG4gICAqIEFubm91bmNlcyB0aGUgZGVwYXJ0dXJlIG9uIGBhcHAud29ya3NwYWNlYCBzbyBhbnl0aGluZyBkZXBlbmRpbmcgb24gdGhpcyBwbHVnaW4gbGVhcm5zIG9mIGl0IGF0IHRoZVxuICAgKiBtb21lbnQgaXQgaGFwcGVucywgcmF0aGVyIHRoYW4gZGlzY292ZXJpbmcgaXQgbGF0ZXIgdGhyb3VnaCBiZWhhdmlvciB0aGF0IHF1aWV0bHkgc3RvcHBlZC5cbiAgICpcbiAgICogRG8gTk9UIG92ZXJyaWRlIHRoaXMgbWV0aG9kOyBwdXQgdGVhcmRvd24gb24gYSBjb21wb25lbnQgaW5zdGVhZCwgd2hpY2ggdW5sb2FkcyB3aXRoIHRoZSBwbHVnaW4uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb251bmxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5icm9hZGNhc3RVbmxvYWRlZCgpO1xuICAgIHN1cGVyLm9udW5sb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgLy8gUm91dGVkIGJ5IG93bmVyc2hpcCByYXRoZXIgdGhhbiBieSB3aGljaCB0aWVyIGBhZGRDaGlsZGAgd291bGQgaGF2ZSBjaG9zZW4sIGJlY2F1c2UgdGhlIHR3byBkbyBub3RcbiAgICAvLyBhbHdheXMgYWdyZWU6IGEgdW5pdmVyc2FsIGNvbXBvbmVudCBpcyBwYXJlbnRlZCBkaXJlY3RseSBvbiB0aGUgdW5pdmVyc2FsIHdyYXBwZXIsIHlldCBhIHN1YmNsYXNzXG4gICAgLy8gcmVwbGFjaW5nIG9uZSBnb2VzIHRocm91Z2ggdGhlIHNhbWUgcHVibGljIGByZW1vdmVDaGlsZGAgYXMgaXQgd291bGQgZm9yIGl0cyBvd24gY2hpbGRyZW4uXG4gICAgcmV0dXJuIHRoaXMuZ2F0ZWRXcmFwcGVyQ29tcG9uZW50Lmhhc0NoaWxkKGNvbXBvbmVudCkgPyB0aGlzLmdhdGVkV3JhcHBlckNvbXBvbmVudC5yZW1vdmVDaGlsZChjb21wb25lbnQpIDogdGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50LnJlbW92ZUNoaWxkKGNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgdGhlIHRyYW5zbGF0aW9ucyBtYXAgdXNlZCB0byBpbml0aWFsaXplIGkxOG4gZHVyaW5nIHtAbGluayBvbmxvYWR9LlxuICAgKlxuICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBzdXBwbHkgcGx1Z2luLXNwZWNpZmljIHRyYW5zbGF0aW9ucy4gVGhlIGRlZmF1bHQgcmV0dXJucyB0aGUgYnVpbHQtaW5cbiAgICogYG9ic2lkaWFuLWRldi11dGlsc2AgdHJhbnNsYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNsYXRpb25zIG1hcC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVUcmFuc2xhdGlvbnNNYXAoKTogVHJhbnNsYXRpb25zTWFwIHtcbiAgICByZXR1cm4gZGVmYXVsdFRyYW5zbGF0aW9uc01hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgaWNvbiBzaG93biBvbiB0aGUgcGx1Z2luJ3MgcGFyZW50IGVudHJ5IGluIE5vdGVib29rIE5hdmlnYXRvcidzIGNvbnRleHQgbWVudXMuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIGJyYW5kIHRoYXQgZW50cnk7IHRoZSBkZWZhdWx0IGxlYXZlcyBpdCB3aXRob3V0IGFuIGljb24uIFRoZSBlbnRyeSBpc1xuICAgKiB0aXRsZWQgd2l0aCB0aGUgcGx1Z2luIG5hbWUgYW5kIGlzIGFkZGVkIGF1dG9tYXRpY2FsbHkgXHUyMDE0IHNlZVxuICAgKiB7QGxpbmsgTm90ZWJvb2tOYXZpZ2F0b3JNZW51RXZlbnRSZWdpc3RyYXJDb21wb25lbnR9LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiwgb3IgYCcnYCBmb3Igbm8gaWNvbi5cbiAgICovXG4gIHByb3RlY3RlZCBnZXROb3RlYm9va05hdmlnYXRvck1lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBBUElzIHRoaXMgcGx1Z2luIGV4cG9zZXMgdG8gb3RoZXIgcGx1Z2lucy5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gcHVibGlzaCBvbmUuIFRoZSBkZWZhdWx0IHB1Ymxpc2hlcyBub25lLiBDYWxsZWQgYWZ0ZXIge0BsaW5rIG9ubG9hZEltcGx9LCBzbyBhXG4gICAqIGRlY2xhcmF0aW9uIG1heSByZWZlcmVuY2UgYW55dGhpbmcgaXQgY3JlYXRlZDsgdGhlIHJldHVybmVkIGRlY2xhcmF0aW9ucyBhcmUgcHVibGlzaGVkIHRocm91Z2hcbiAgICogYHB1Ymxpc2hQbHVnaW5BcGlgIGFuZCByZXZva2VkIHdoZW4gdGhlIHBsdWdpbidzIGZlYXR1cmUgc3VyZmFjZSB1bmxvYWRzLlxuICAgKlxuICAgKiBSZXR1cm5pbmcgYSBMSVNUIHJhdGhlciB0aGFuIGEgc2luZ2xlIEFQSSBpcyBkZWxpYmVyYXRlOiB0aGUgcmVnaXN0cnkgc3VwcG9ydHMgc2V2ZXJhbCBjb250cmFjdFxuICAgKiB2ZXJzaW9ucyBwdWJsaXNoZWQgc2lkZSBieSBzaWRlLCB3aGljaCBpcyBob3cgYSBwcm92aWRlciBzaGlwcyBhIGJyZWFraW5nIGAyLjAuMGAgd2l0aG91dCBzdHJhbmRpbmdcbiAgICogY29uc3VtZXJzIHN0aWxsIHBpbm5lZCB0byBgXjFgLlxuICAgKlxuICAgKiBFdmVyeSBkZWNsYXJhdGlvbiBoZXJlIGlzIHB1Ymxpc2hlZCBCRUZPUkUgdGhlIGBvYnNpZGlhbi1kZXYtdXRpbHM6cGx1Z2luLWxvYWRlZGAgYnJvYWRjYXN0LCB3aGljaCBpc1xuICAgKiB3aGF0IGxldHMgYSBsaXN0ZW5lciBjYWxsIHRoZXNlIEFQSXMgdGhlIG1vbWVudCBpdCBoZWFycyB0aGF0IGV2ZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgQVBJIGRlY2xhcmF0aW9ucy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRQbHVnaW5BcGlzKCk6IFBsdWdpbkFwaURlY2xhcmF0aW9uW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgcGx1Z2lucyB0aGlzIG9uZSByZWZ1c2VzLCBvciB3YXJucyBhYm91dCwgcnVubmluZyBiZXNpZGUuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIGRlY2xhcmUgYW4gb3ZlcmxhcC4gVGhlIGRlZmF1bHQgZGVjbGFyZXMgbm9uZS5cbiAgICpcbiAgICogQSBgQmxvY2tgIGNvbmZsaWN0IGlzIHRoZSBtaXJyb3IgaW1hZ2Ugb2YgYSBkZXBlbmRlbmN5OiB3aGlsZSBhIGNvbmZsaWN0aW5nIHBsdWdpbiBpcyBlbmFibGVkIGF0IGFcbiAgICogY29uZmxpY3RpbmcgdmVyc2lvbiwge0BsaW5rIG9ubG9hZEltcGx9IGRvZXMgbm90IHJ1biBhdCBhbGwgYW5kIHRoZSBwbHVnaW4gcmVnaXN0ZXJzIG5vdGhpbmcuIERlY2xhcmVcbiAgICogaXQgd2hlbiBib3RoIHBsdWdpbnMgYWN0aW5nIG9uIHRoZSBzYW1lIG9wZXJhdGlvbiBkYW1hZ2VzIHRoZSB2YXVsdCBcdTIwMTQgdGhlcmUgaXMgbm8gcmVsaWFibGUgd2F5IHRvIHdpblxuICAgKiB0aGF0IHJhY2UsIGJlY2F1c2Ugd2hpY2hldmVyIHBsdWdpbiBsb2FkZWQgZmlyc3Qga2VlcHMgYSBoYW5kIG9uIHRoZSB3aGVlbCwgc28gcmVmdXNpbmcgZGV0ZXJtaW5pc3RpY2FsbHlcbiAgICogYmVhdHMgY29tcGV0aW5nIHVucHJlZGljdGFibHkuIEEgYFdhcm5gIGNvbmZsaWN0IGRlY2xhcmVzIGFuIG92ZXJsYXAgdGhhdCBpcyBtZXJlbHkgYW5ub3lpbmcsIHN1Y2ggYXMgYVxuICAgKiBkdXBsaWNhdGVkIGNvbW1hbmQ6IGJvdGggcGx1Z2lucyBrZWVwIHJ1bm5pbmcgYW5kIHRoZSB1c2VyIGlzIHRvbGQuXG4gICAqXG4gICAqIFVubGlrZSBhIGRlcGVuZGVuY3ksIGEgY29uZmxpY3RpbmcgcGx1Z2luIG5lZWQgbm90IHB1Ymxpc2ggYW55dGhpbmcgXHUyMDE0IGl0IGlzIGRldGVjdGVkIGJ5IHJlYWRpbmcgaXRzXG4gICAqIGluc3RhbGxlZCB2ZXJzaW9uLCB3aGljaCBpcyB0aGUgb25seSB0aGluZyBhYm91dCBhbm90aGVyIHBsdWdpbiB0aGF0IHJlYWRzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgbG9hZFxuICAgKiBvcmRlci5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRlY2xhcmVkIGNvbmZsaWN0cy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRQbHVnaW5Db25mbGljdHMoKTogUGx1Z2luQ29uZmxpY3RbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBwbHVnaW5zIHRoaXMgb25lIGNhbm5vdCB3b3JrIHdpdGhvdXQuXG4gICAqXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIGRlY2xhcmUgYSBtYW5kYXRvcnkgZGVwZW5kZW5jeS4gVGhlIGRlZmF1bHQgZGVjbGFyZXMgbm9uZSwgYW5kIHN1Y2ggYSBwbHVnaW5cbiAgICogbG9hZHMgZXhhY3RseSBhcyBpdCBhbHdheXMgaGFzLlxuICAgKlxuICAgKiBBIGRlY2xhcmVkIGRlcGVuZGVuY3kgaXMgTUFOREFUT1JZLCB1bmxpa2UgdGhlIG9mZmVyIGBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50YCBtYWtlczogd2hpbGUgb25lIGlzXG4gICAqIG1pc3NpbmcsIGRpc2FibGVkLCBvciB0b28gb2xkLCB7QGxpbmsgb25sb2FkSW1wbH0gZG9lcyBub3QgcnVuIGF0IGFsbCBhbmQgdGhlIHBsdWdpbiByZWdpc3RlcnMgbm90aGluZ1xuICAgKiBcdTIwMTQgbm8gY29tbWFuZHMsIG5vIGhhbmRsZXJzLCBubyBwYXRjaGVzLiBJdCBzdGF5cyBlbmFibGVkIGluIE9ic2lkaWFuJ3MgbGlzdCByYXRoZXIgdGhhbiBkaXNhYmxpbmdcbiAgICogaXRzZWxmLCBiZWNhdXNlIHRoZSBlbmFibGVkIHNldCBpcyB0aGUgdXNlcidzIHRvIGNoYW5nZSwgYW5kIGl0IGV4cGxhaW5zIGl0c2VsZiB0aHJvdWdoIGEgbm90aWNlIGFuZCBhXG4gICAqIHNldHRpbmdzIGJhbm5lciB0aGF0IGluc3RhbGxzIHRoZSBtaXNzaW5nIHBsdWdpbiBpbiBvbmUgY2xpY2suIFRoZSBsb2FkIGNvbXBsZXRlcyB0aGUgbW9tZW50IHRoZVxuICAgKiBkZXBlbmRlbmN5IGFycml2ZXMsIHdpdGggbm8gcmVzdGFydC5cbiAgICpcbiAgICogQSBkZXBlbmRlbmN5IG11c3QgcHVibGlzaCBhbiBBUEkgdGhyb3VnaCBgcHVibGlzaFBsdWdpbkFwaWAsIHdoaWNoIGlzIHdoYXQgbWFrZXMgaXRzIHByZXNlbmNlLFxuICAgKiBhYnNlbmNlLCB2ZXJzaW9uIGFuZCBkZXBhcnR1cmUgYWxsIG9ic2VydmFibGUgdGhyb3VnaCBvbmUgbWVjaGFuaXNtLiBBIHBsdWdpbiB3aXRoIG5vdGhpbmcgdG8gZXhwb3NlXG4gICAqIGNhbiBwdWJsaXNoIGFuIGVtcHR5IEFQSSBwdXJlbHkgc28gaXQgY2FuIGJlIGRlcGVuZGVkIHVwb24uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBkZWNsYXJlZCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0UGx1Z2luRGVwZW5kZW5jaWVzKCk6IFBsdWdpbkRlcGVuZGVuY3lbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBkdXJpbmcge0BsaW5rIG9ubG9hZH0gdG8gd2lyZSBwbHVnaW4tc3BlY2lmaWMgY2hpbGQgY29tcG9uZW50cy5cbiAgICpcbiAgICogT3ZlcnJpZGUgaW4gc3ViY2xhc3MgdG8gYWRkIGNoaWxkIGNvbXBvbmVudHMgdmlhIHtAbGluayBhZGRDaGlsZH0uIFRoZSB1bml2ZXJzYWwgY29tcG9uZW50cyBhcmVcbiAgICogYXZhaWxhYmxlIGhlcmUuIENoaWxkcmVuIGFyZSBsb2FkZWQgc2VxdWVudGlhbGx5IGluIHRoZSBvcmRlciB0aGV5IGFyZSBhZGRlZCAoY2hpbGRyZW4tZmlyc3QpLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHN1YmNsYXNzIGxvYWQgbG9naWMgaXMgY29tcGxldGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgb25sb2FkSW1wbCgpOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gbm9vcEFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmVzIGEgdW5pdmVyc2FsIGNvbXBvbmVudCwgdW5sb2FkaW5nIHdoaWNoZXZlciBjb21wb25lbnQgdGhlIGtleSBoZWxkIGJlZm9yZS5cbiAgICpcbiAgICogS2V5ZWQgYnkgbmFtZSByYXRoZXIgdGhhbiBoYW5kZWQgdGhlIHByZXZpb3VzIHZhbHVlIGJlY2F1c2UgYGtleW9mIHRoaXNgIGV4Y2x1ZGVzIHByaXZhdGVcbiAgICogbWVtYmVycywgc28gdGhlIGNvbXBvbmVudHMgbGl2ZSBpbiBhIHNpbmdsZSB7QGxpbmsgUGx1Z2luQmFzZUNvbXBvbmVudHN9IGJhZyB3aG9zZSBrZXlzIEFSRVxuICAgKiBpbmRleGFibGUuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVEtleSAtIFRoZSBrZXkgb2YgdGhlIGNvbXBvbmVudCB0byBzdG9yZS5cbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIGNvbXBvbmVudCB0byBzdG9yZS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGNvbXBvbmVudCB0byBzdG9yZS5cbiAgICovXG4gIC8qKlxuICAgKiBBZGRzIGEgY29tcG9uZW50IHRvIHRoZSB1bml2ZXJzYWwgdGllciwgd2hpY2ggb3V0bGl2ZXMgYW55IGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIFByaXZhdGUgb24gcHVycG9zZTogb25seSB0aGlzIGNsYXNzIGRlY2lkZXMgd2hhdCBpcyB1bml2ZXJzYWwuIEEgc3ViY2xhc3MgYWRkaW5nIG9uZSBvZiBpdHMgb3duIGdvZXNcbiAgICogdGhyb3VnaCB7QGxpbmsgYWRkQ2hpbGR9IGFuZCBsYW5kcyBpbiB0aGUgZ2F0ZWQgdGllciwgd2hlcmUgaXQgYmVsb25ncy5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIGFkZC5cbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gYWRkLlxuICAgKiBAcmV0dXJucyBUaGUgYWRkZWQgY29tcG9uZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBhZGRVbml2ZXJzYWxDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50LmFkZENoaWxkKGNvbXBvbmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQW5ub3VuY2VzIG9uIGBhcHAud29ya3NwYWNlYCB0aGF0IHRoaXMgcGx1Z2luIGlzIGxvYWRlZCBhbmQgaXRzIEFQSXMgYXJlIGNhbGxhYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBicm9hZGNhc3RMb2FkZWQoKTogdm9pZCB7XG4gICAgdGhpcy5saWZlY3ljbGVFdmVudFBheWxvYWQgPSB7XG4gICAgICBhcGlWZXJzaW9uczogdGhpcy5nZXRQbHVnaW5BcGlzKCkubWFwKChkZWNsYXJhdGlvbikgPT4gZGVjbGFyYXRpb24uYXBpVmVyc2lvbiksXG4gICAgICBkZXBlbmRlbmN5UGx1Z2luSWRzOiB0aGlzLmdldFBsdWdpbkRlcGVuZGVuY2llcygpLm1hcCgoZGVwZW5kZW5jeSkgPT4gZGVwZW5kZW5jeS5wbHVnaW5JZCksXG4gICAgICBwbHVnaW5JZDogdGhpcy5tYW5pZmVzdC5pZCxcbiAgICAgIHBsdWdpbk5hbWU6IHRoaXMubWFuaWZlc3QubmFtZSxcbiAgICAgIHBsdWdpblZlcnNpb246IHRoaXMubWFuaWZlc3QudmVyc2lvblxuICAgIH07XG5cbiAgICB0cmlnZ2VyUGx1Z2luTGlmZWN5Y2xlRXZlbnQoe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIG5hbWU6IFBMVUdJTl9MT0FERURfRVZFTlRfTkFNRSxcbiAgICAgIHBheWxvYWQ6IHRoaXMubGlmZWN5Y2xlRXZlbnRQYXlsb2FkXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQW5ub3VuY2VzIG9uIGBhcHAud29ya3NwYWNlYCB0aGF0IHRoaXMgcGx1Z2luJ3Mgc3VyZmFjZSBoYXMgZ29uZSBhd2F5LlxuICAgKlxuICAgKiBTaWxlbnQgdW5sZXNzIGEgbG9hZGVkIGJyb2FkY2FzdCBpcyBvdXRzdGFuZGluZywgc28gdGhlIHR3byBldmVudHMgc3RheSBwYWlyZWQ6IGEgcGx1Z2luIHRoYXQgbmV2ZXJcbiAgICogZ290IHBhc3QgaXRzIGRlcGVuZGVuY3kgZ2F0ZSBuZXZlciBhbm5vdW5jZWQgaXRzZWxmLCBhbmQgbXVzdCBub3QgYW5ub3VuY2UgYSBkZXBhcnR1cmUgZWl0aGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBicm9hZGNhc3RVbmxvYWRlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5saWZlY3ljbGVFdmVudFBheWxvYWQ7XG4gICAgaWYgKCFwYXlsb2FkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5saWZlY3ljbGVFdmVudFBheWxvYWQgPSBudWxsO1xuICAgIHRyaWdnZXJQbHVnaW5MaWZlY3ljbGVFdmVudCh7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgbmFtZTogUExVR0lOX1VOTE9BREVEX0VWRU5UX05BTUUsXG4gICAgICBwYXlsb2FkXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGFuZCBsb2FkcyB0aGUgc3ViY2xhc3MncyBmZWF0dXJlIHN1cmZhY2UsIHRoZW4gcHVibGlzaGVzIGl0cyBBUElzIGFuZCBhbm5vdW5jZXMgaXRzZWxmLlxuICAgKlxuICAgKiBOT1QgaWRlbXBvdGVudCwgZGVsaWJlcmF0ZWx5LiBgUGx1Z2luR2F0ZUNvbXBvbmVudGAgb3ducyB0aGUgdXAvZG93biBzdGF0ZSBtYWNoaW5lIGFuZCBjYWxsc1xuICAgKiB0aGlzIG9ubHkgb24gYSByZWFsIHRyYW5zaXRpb247IGEgc2Vjb25kIGd1YXJkIGhlcmUgd291bGQgYmUgYSBzZWNvbmQgY29weSBvZiB0aGF0IHN0YXRlLCB3aGljaCBpcyB0aGVcbiAgICoga2luZCBvZiBkdXBsaWNhdGUgdGhhdCBkcmlmdHMuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgc3VyZmFjZSBpcyBsb2FkZWQgYW5kIHRoZSBicm9hZGNhc3QgaGFzIGJlZW4gbWFkZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZlYXR1cmVTdXJmYWNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIExvYWRlZCBleHBsaWNpdGx5IGZvciB0aGUgc2FtZSByZWFzb24gdGhlIHVuaXZlcnNhbCB3cmFwcGVyIGlzOiBgYWRkQ2hpbGRgIGxvYWRzIGEgY2hpbGQgb25seSBvbmNlXG4gICAgLy8gaXRzIHBhcmVudCBpcyBsb2FkZWQsIGFuZCB0aGUgc3VyZmFjZSBoYXMgdG8gYmUgbGl2ZSBiZWZvcmUgYG9ubG9hZEltcGxgIHN0YXJ0cyBhZGRpbmcgdG8gaXQuXG4gICAgY29uc3QgZ2F0ZWRXcmFwcGVyQ29tcG9uZW50ID0gdGhpcy5nYXRlZFdyYXBwZXJDb21wb25lbnQ7XG4gICAgdGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50LmFkZENoaWxkKGdhdGVkV3JhcHBlckNvbXBvbmVudCk7XG4gICAgZ2F0ZWRXcmFwcGVyQ29tcG9uZW50LmxvYWQoKTtcblxuICAgIGF3YWl0IHRoaXMub25sb2FkSW1wbCgpO1xuICAgIGF3YWl0IGdhdGVkV3JhcHBlckNvbXBvbmVudC5sb2FkV2l0aFByb21pc2VzKCk7XG5cbiAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHRoaXMuZ2V0UGx1Z2luQXBpcygpKSB7XG4gICAgICBwdWJsaXNoUGx1Z2luQXBpKHtcbiAgICAgICAgLi4uZGVjbGFyYXRpb24sXG4gICAgICAgIC8vIFJldm9rZWQgd2l0aCB0aGUgU1VSRkFDRSwgbm90IHdpdGggdGhlIHBsdWdpbjogYSBwbHVnaW4gd2hvc2UgZGVwZW5kZW5jeSBnb2VzIGF3YXkga2VlcHMgcnVubmluZ1xuICAgICAgICAvLyBpdHMgdW5pdmVyc2FsIGNvbXBvbmVudHMsIGFuZCBhIGNvbnN1bWVyIG11c3Qgbm90IGJlIGxlZnQgaG9sZGluZyBhIGhhbmRsZSBpbnRvIHRoZSBoYWxmIG9mIGl0XG4gICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgdG9ybiBkb3duLlxuICAgICAgICBjb21wb25lbnQ6IGdhdGVkV3JhcHBlckNvbXBvbmVudCxcbiAgICAgICAgcGx1Z2luOiB0aGlzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmJyb2FkY2FzdExvYWRlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb21wb25lbnQ8VEtleSBleHRlbmRzIGtleW9mIFBsdWdpbkJhc2VDb21wb25lbnRzPihrZXk6IFRLZXksIHZhbHVlOiBOb25OdWxsYWJsZTxQbHVnaW5CYXNlQ29tcG9uZW50c1tUS2V5XT4pOiB2b2lkIHtcbiAgICBjb25zdCBvbGRDb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudHNba2V5XTtcbiAgICBpZiAob2xkQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZUNoaWxkKG9sZENvbXBvbmVudCk7XG4gICAgfVxuICAgIHRoaXMuY29tcG9uZW50c1trZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVGVhcnMgdGhlIHN1YmNsYXNzJ3MgZmVhdHVyZSBzdXJmYWNlIGRvd24sIGxlYXZpbmcgdGhlIHVuaXZlcnNhbCBjb21wb25lbnRzIHJ1bm5pbmcuXG4gICAqL1xuICBwcml2YXRlIHVubG9hZEZlYXR1cmVTdXJmYWNlKCk6IHZvaWQge1xuICAgIGNvbnN0IGdhdGVkV3JhcHBlckNvbXBvbmVudCA9IHRoaXMuZ2F0ZWRXcmFwcGVyQ29tcG9uZW50O1xuXG4gICAgLy8gUmVwbGFjZWQgQkVGT1JFIHRoZSBvbGQgb25lIGlzIHVubG9hZGVkLCBzbyBhbnl0aGluZyB0aGF0IHJlc3VtZXMgbWlkLXRlYXJkb3duIGFuZCBjYWxscyBgYWRkQ2hpbGRgXG4gICAgLy8gcGFya3MgaXRzIGNoaWxkIG9uIHRoZSBmcmVzaCBzdXJmYWNlIHJhdGhlciB0aGFuIG9uIHRoZSBvbmUgYmVpbmcgdG9ybiBkb3duIFx1MjAxNCB3aGVyZSBgQ29tcG9uZW50RXhgXG4gICAgLy8gd291bGQgcmVmdXNlIGl0IG91dHJpZ2h0LCBzaW5jZSBpdCByZWZ1c2VzIGNoaWxkcmVuIGFkZGVkIHRvIGFuIGFscmVhZHktdW5sb2FkZWQgY29tcG9uZW50LlxuICAgIHRoaXMuZ2F0ZWRXcmFwcGVyQ29tcG9uZW50ID0gbmV3IENvbXBvbmVudEV4KCk7XG4gICAgdGhpcy51bml2ZXJzYWxXcmFwcGVyQ29tcG9uZW50LnJlbW92ZUNoaWxkKGdhdGVkV3JhcHBlckNvbXBvbmVudCk7XG5cbiAgICB0aGlzLmJyb2FkY2FzdFVubG9hZGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWxvYWRzIHRoZSBzcGVjaWZpZWQgcGx1Z2luIGJ5IGRpc2FibGluZyBhbmQgdGhlbiByZS1lbmFibGluZyBpdC5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byByZWxvYWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBsdWdpbiBpcyByZWxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbG9hZFBsdWdpbihwbHVnaW46IFBsdWdpbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwbHVnaW5zID0gcGx1Z2luLmFwcC5wbHVnaW5zO1xuICBjb25zdCBwbHVnaW5JZCA9IHBsdWdpbi5tYW5pZmVzdC5pZDtcbiAgYXdhaXQgcGx1Z2lucy5kaXNhYmxlUGx1Z2luKHBsdWdpbklkKTtcbiAgYXdhaXQgcGx1Z2lucy5lbmFibGVQbHVnaW4ocGx1Z2luSWQpO1xufVxuXG4vKipcbiAqIERpc3BsYXlzIGFuIGVycm9yIG1lc3NhZ2UgYXMgYSBub3RpY2UsIGxvZ3MgaXQgdG8gdGhlIGNvbnNvbGUsIGFuZCBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIHBsdWdpbi5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byBkaXNhYmxlLlxuICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgZXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5IGFuZCBsb2cuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHBsdWdpbiBpcyBkaXNhYmxlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNob3dFcnJvckFuZERpc2FibGVQbHVnaW4ocGx1Z2luOiBQbHVnaW4sIG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwbHVnaW5Ob3RpY2VDb21wb25lbnQgPSBuZXcgUGx1Z2luTm90aWNlQ29tcG9uZW50KHtcbiAgICBhcHA6IHBsdWdpbi5hcHAsXG4gICAgcGx1Z2luTmFtZTogcGx1Z2luLm1hbmlmZXN0Lm5hbWVcbiAgfSk7XG4gIHBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKG1lc3NhZ2UpO1xuICBwcmludEVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gIGF3YWl0IHBsdWdpbi5hcHAucGx1Z2lucy5kaXNhYmxlUGx1Z2luKHBsdWdpbi5tYW5pZmVzdC5pZCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFNBQVMsd0JBQXdCO0FBQ2pDLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsaUJBQWlCO0FBQzFCLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsY0FBYztBQWN2QixTQUFTLDZCQUE2QjtBQUN0QyxTQUFTLCtCQUErQjtBQUN4QyxT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
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  (function initEsm() {
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  (function initEsm() {
@@ -71,4 +63,4 @@ class PluginCliHandlerRegistrar {
71
63
  export {
72
64
  PluginCliHandlerRegistrar
73
65
  };
74
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3BsdWdpbi1jbGktaGFuZGxlci1yZWdpc3RyYXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDTEkgaGFuZGxlciByZWdpc3RyYXJzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ2xpRGF0YSxcbiAgQ2xpRmxhZ3Ncbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgbm9ybWFsaXplUHJvbWlzYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogUmVnaXN0ZXJzIENMSSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlIYW5kbGVyUmVnaXN0cmFyIHtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIENMSSBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBDTEkgaGFuZGxlciByZWdpc3RyYXRpb24uXG4gICAqL1xuICByZWdpc3RlckNsaUhhbmRsZXI6IChwYXJhbXM6IENsaUhhbmRsZXJSZWdpc3RyYXJSZWdpc3RlckNsaUhhbmRsZXJQYXJhbXMpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgcmVnaXN0ZXJpbmcgYSBDTEkgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlIYW5kbGVyUmVnaXN0cmFyUmVnaXN0ZXJDbGlIYW5kbGVyUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHRvIHJlZ2lzdGVyIHRoZSBoYW5kbGVyIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZsYWdzIGZvciB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IGZsYWdzOiBDbGlGbGFncyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBoYW5kbGVyIHRvIHJlZ2lzdGVyLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpRGF0YSAtIFRoZSBkYXRhIHBhc3NlZCB0byB0aGUgaGFuZGxlci5cbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgaGFuZGxlci5cbiAgICovXG4gIHJlYWRvbmx5IGhhbmRsZXI6IChjbGlEYXRhOiBDbGlEYXRhKSA9PiBQcm9taXNhYmxlPHN0cmluZz47XG59XG5cbnR5cGUgUGx1Z2luQ2xpSGFuZGxlclJlZ2lzdHJhclJlZ2lzdGVyQ2xpSGFuZGxlclBhcmFtcyA9IENsaUhhbmRsZXJSZWdpc3RyYXJSZWdpc3RlckNsaUhhbmRsZXJQYXJhbXM7XG5cbi8qKlxuICogQ0xJIGhhbmRsZXIgcmVnaXN0cmFyIGluIGFuIE9ic2lkaWFuIHBsdWdpbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkNsaUhhbmRsZXJSZWdpc3RyYXIgaW1wbGVtZW50cyBDbGlIYW5kbGVyUmVnaXN0cmFyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHtAbGluayBQbHVnaW5DbGlIYW5kbGVyUmVnaXN0cmFyfSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpbiAtIFRoZSBPYnNpZGlhbiBwbHVnaW4gaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luKSB7fVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBDTEkgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgQ0xJIGhhbmRsZXIgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyQ2xpSGFuZGxlcihwYXJhbXM6IFBsdWdpbkNsaUhhbmRsZXJSZWdpc3RyYXJSZWdpc3RlckNsaUhhbmRsZXJQYXJhbXMpOiB2b2lkIHtcbiAgICB0aGlzLnBsdWdpbi5yZWdpc3RlckNsaUhhbmRsZXIocGFyYW1zLmNvbW1hbmQsIHBhcmFtcy5kZXNjcmlwdGlvbiwgcGFyYW1zLmZsYWdzLCAoY2xpRGF0YSkgPT4gbm9ybWFsaXplUHJvbWlzYWJsZShwYXJhbXMuaGFuZGxlcihjbGlEYXRhKSkpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWUEsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxjQUFjO0FBK0NoQixNQUFNLDBCQUF5RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU03RCxZQUErQixRQUFnQjtBQUFoQjtBQUFBLEVBQWlCO0FBQUEsRUFBakI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPL0IsbUJBQW1CLFFBQWlFO0FBQ3pGLFNBQUssT0FBTyxtQkFBbUIsT0FBTyxTQUFTLE9BQU8sYUFBYSxPQUFPLE9BQU8sQ0FBQyxZQUFZLG9CQUFvQixPQUFPLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFBQSxFQUM1STtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
66
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3BsdWdpbi1jbGktaGFuZGxlci1yZWdpc3RyYXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDTEkgaGFuZGxlciByZWdpc3RyYXJzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ2xpRGF0YSxcbiAgQ2xpRmxhZ3Ncbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgbm9ybWFsaXplUHJvbWlzYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogUmVnaXN0ZXJzIENMSSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlIYW5kbGVyUmVnaXN0cmFyIHtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIENMSSBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBDTEkgaGFuZGxlciByZWdpc3RyYXRpb24uXG4gICAqL1xuICByZWdpc3RlckNsaUhhbmRsZXI6IChwYXJhbXM6IENsaUhhbmRsZXJSZWdpc3RyYXJSZWdpc3RlckNsaUhhbmRsZXJQYXJhbXMpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgcmVnaXN0ZXJpbmcgYSBDTEkgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlIYW5kbGVyUmVnaXN0cmFyUmVnaXN0ZXJDbGlIYW5kbGVyUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHRvIHJlZ2lzdGVyIHRoZSBoYW5kbGVyIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZsYWdzIGZvciB0aGUgY29tbWFuZC5cbiAgICovXG4gIHJlYWRvbmx5IGZsYWdzOiBDbGlGbGFncyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBoYW5kbGVyIHRvIHJlZ2lzdGVyLlxuICAgKlxuICAgKiBAcGFyYW0gY2xpRGF0YSAtIFRoZSBkYXRhIHBhc3NlZCB0byB0aGUgaGFuZGxlci5cbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgaGFuZGxlci5cbiAgICovXG4gIHJlYWRvbmx5IGhhbmRsZXI6IChjbGlEYXRhOiBDbGlEYXRhKSA9PiBQcm9taXNhYmxlPHN0cmluZz47XG59XG5cbnR5cGUgUGx1Z2luQ2xpSGFuZGxlclJlZ2lzdHJhclJlZ2lzdGVyQ2xpSGFuZGxlclBhcmFtcyA9IENsaUhhbmRsZXJSZWdpc3RyYXJSZWdpc3RlckNsaUhhbmRsZXJQYXJhbXM7XG5cbi8qKlxuICogQ0xJIGhhbmRsZXIgcmVnaXN0cmFyIGluIGFuIE9ic2lkaWFuIHBsdWdpbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkNsaUhhbmRsZXJSZWdpc3RyYXIgaW1wbGVtZW50cyBDbGlIYW5kbGVyUmVnaXN0cmFyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHtAbGluayBQbHVnaW5DbGlIYW5kbGVyUmVnaXN0cmFyfSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpbiAtIFRoZSBPYnNpZGlhbiBwbHVnaW4gaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luKSB7fVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBDTEkgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgQ0xJIGhhbmRsZXIgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyQ2xpSGFuZGxlcihwYXJhbXM6IFBsdWdpbkNsaUhhbmRsZXJSZWdpc3RyYXJSZWdpc3RlckNsaUhhbmRsZXJQYXJhbXMpOiB2b2lkIHtcbiAgICB0aGlzLnBsdWdpbi5yZWdpc3RlckNsaUhhbmRsZXIocGFyYW1zLmNvbW1hbmQsIHBhcmFtcy5kZXNjcmlwdGlvbiwgcGFyYW1zLmZsYWdzLCAoY2xpRGF0YSkgPT4gbm9ybWFsaXplUHJvbWlzYWJsZShwYXJhbXMuaGFuZGxlcihjbGlEYXRhKSkpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLFNBQVMsMkJBQTJCO0FBQ3BDLFNBQVMsY0FBYztBQStDaEIsTUFBTSwwQkFBeUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNN0QsWUFBK0IsUUFBZ0I7QUFBaEI7QUFBQSxFQUFpQjtBQUFBLEVBQWpCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTy9CLG1CQUFtQixRQUFpRTtBQUN6RixTQUFLLE9BQU8sbUJBQW1CLE9BQU8sU0FBUyxPQUFPLGFBQWEsT0FBTyxPQUFPLENBQUMsWUFBWSxvQkFBb0IsT0FBTyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQUEsRUFDNUk7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  (function initEsm() {
@@ -93,4 +85,4 @@ function addField(containerEl, field) {
93
85
  export {
94
86
  editFieldsInPopover
95
87
  };
96
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BvcG92ZXJzL2ZpZWxkLXBvcG92ZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXR5IGZvciBlZGl0aW5nIGEgaGFuZGZ1bCBvZiBuYW1lZCB0ZXh0IGZpZWxkcyBpbiBhIHBvcG92ZXIgYW5jaG9yZWQgYXQgYSBwb2ludC5cbiAqXG4gKiBUaGlzIGlzIHRvIHtAbGluayBzaG93UG9wb3Zlcn0gd2hhdCBgbW9kYWxzL3Byb21wdC50c2AgaXMgdG8gYG1vZGFscy9tb2RhbC50c2A6IHRoZSBjb21tb24gY2FzZVxuICogc3BlbGxlZCBkZWNsYXJhdGl2ZWx5LCBzbyBhIGNhbGxlciB0aGF0IG9ubHkgbmVlZHMgYSBmZXcgdGV4dCBmaWVsZHMgbmV2ZXIgd3JpdGVzIGFueSBET00gd2lyaW5nLlxuICogQW55dGhpbmcgcmljaGVyIFx1MjAxNCBhIGRyb3Bkb3duLCBhIHRvZ2dsZSwgcmVuZGVyZWQgbWFya2Rvd24gXHUyMDE0IGdvZXMgdGhyb3VnaCB7QGxpbmsgc2hvd1BvcG92ZXJ9XG4gKiBkaXJlY3RseS5cbiAqL1xuXG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7XG4gIFNldHRpbmcsXG4gIFRleHRDb21wb25lbnRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBvcG92ZXJBbmNob3IgfSBmcm9tICcuL3BvcG92ZXItYW5jaG9yLnRzJztcbmltcG9ydCB0eXBlIHsgU2hvd1BvcG92ZXJQYXJhbXMgfSBmcm9tICcuL3BvcG92ZXIudHMnO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBzaG93UG9wb3ZlciB9IGZyb20gJy4vcG9wb3Zlci50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVkaXRGaWVsZHNJblBvcG92ZXJ9LlxuICpcbiAqIEB0eXBlUGFyYW0gS2V5IC0gVGhlIHVuaW9uIG9mIHRoZSBmaWVsZCBrZXlzLCBpbmZlcnJlZCBmcm9tIHtAbGluayBFZGl0RmllbGRzSW5Qb3BvdmVyUGFyYW1zLmZpZWxkc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdEZpZWxkc0luUG9wb3ZlclBhcmFtczxLZXkgZXh0ZW5kcyBzdHJpbmc+IHtcbiAgLyoqXG4gICAqIFdoZXJlIHRvIHBsYWNlIHRoZSBwb3BvdmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgYW5jaG9yOiBQb3BvdmVyQW5jaG9yO1xuXG4gIC8qKlxuICAgKiBBIHRleHQgZm9yIHRoZSBcIkNhbmNlbFwiIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgdG8gYXBwbHkgdG8gdGhlIHBvcG92ZXIuXG4gICAqL1xuICByZWFkb25seSBjc3NDbGFzc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBmaWVsZHMgdG8gZWRpdCwgcmVuZGVyZWQgdG9wIHRvIGJvdHRvbSBpbiB0aGUgZ2l2ZW4gb3JkZXIuXG4gICAqL1xuICByZWFkb25seSBmaWVsZHM6IHJlYWRvbmx5IFBvcG92ZXJGaWVsZDxLZXk+W107XG5cbiAgLyoqXG4gICAqIEEgdGV4dCBmb3IgdGhlIFwiT0tcIiBidXR0b24uXG4gICAqL1xuICByZWFkb25seSBva0J1dHRvblRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgdGV4dCBmaWVsZCBvZiBhIHtAbGluayBlZGl0RmllbGRzSW5Qb3BvdmVyfSBwb3BvdmVyLlxuICpcbiAqIEB0eXBlUGFyYW0gS2V5IC0gVGhlIGtleSB0aGUgZmllbGQncyB2YWx1ZSBpcyByZXR1cm5lZCB1bmRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3BvdmVyRmllbGQ8S2V5IGV4dGVuZHMgc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBBIHZhbHVlIHRvIHByZS1maWxsIHRoZSBmaWVsZCB3aXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgdGhlIGZpZWxkJ3MgdmFsdWUgaXMgcmV0dXJuZWQgdW5kZXIuXG4gICAqL1xuICByZWFkb25seSBrZXk6IEtleTtcblxuICAvKipcbiAgICogVGhlIGxhYmVsIHNob3duIG5leHQgdG8gdGhlIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBmaWVsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcnYFxuICAgKi9cbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGlzcGxheXMgYSBwb3BvdmVyIHdpdGggYSB0ZXh0IGZpZWxkIHBlciBlbnRyeSBpbiBgZmllbGRzYCBhbmQgcmVzb2x2ZXMgd2l0aCB0aGVpciB2YWx1ZXMga2V5ZWQgYnlcbiAqIHtAbGluayBQb3BvdmVyRmllbGQua2V5fSwgb3IgYG51bGxgIGlmIGl0IHdhcyBkaXNtaXNzZWQgd2l0aG91dCBjb25maXJtaW5nLlxuICpcbiAqIEB0eXBlUGFyYW0gS2V5IC0gVGhlIHVuaW9uIG9mIHRoZSBmaWVsZCBrZXlzLCBpbmZlcnJlZCBmcm9tIHRoZSBgZmllbGRzYCBhcnJheS5cbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHBvcG92ZXIuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGVkaXRlZCB2YWx1ZXMsIG9yIGBudWxsYCBpZiBkaXNtaXNzZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0RmllbGRzSW5Qb3BvdmVyPEtleSBleHRlbmRzIHN0cmluZz4ocGFyYW1zOiBFZGl0RmllbGRzSW5Qb3BvdmVyUGFyYW1zPEtleT4pOiBQcm9taXNlPG51bGwgfCBSZWNvcmQ8S2V5LCBzdHJpbmc+PiB7XG4gIGNvbnN0IHtcbiAgICBhbmNob3IsXG4gICAgY2FuY2VsQnV0dG9uVGV4dCxcbiAgICBjc3NDbGFzc2VzLFxuICAgIGZpZWxkcyxcbiAgICBva0J1dHRvblRleHRcbiAgfSA9IHBhcmFtcztcblxuICByZXR1cm4gYXdhaXQgc2hvd1BvcG92ZXI8UmVjb3JkPEtleSwgc3RyaW5nPj4obm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFNob3dQb3BvdmVyUGFyYW1zPFJlY29yZDxLZXksIHN0cmluZz4+Pih7XG4gICAgYW5jaG9yLFxuICAgIGJ1aWxkKHsgY29udGVudEVsIH0pIHtcbiAgICAgIGNvbnN0IGVkaXRvcnMgPSBmaWVsZHMubWFwKChmaWVsZCkgPT4gKHtcbiAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgIHRleHRDb21wb25lbnQ6IGFkZEZpZWxkKGNvbnRlbnRFbCwgZmllbGQpXG4gICAgICB9KSk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIC8vIFRoZSByZWNvcmQgaXMgYWNjdW11bGF0ZWQga2V5IGJ5IGtleSwgc28gaXQgaXMgb25seSBjb21wbGV0ZSBcdTIwMTQgYW5kIG9ubHkgdHlwZWQgYXMgc3VjaCBcdTIwMTQgb25jZSBldmVyeSBmaWVsZCBoYXMgYmVlbiByZWFkLlxuICAgICAgICBjb25zdCB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBlZGl0b3Igb2YgZWRpdG9ycykge1xuICAgICAgICAgIHZhbHVlc1tlZGl0b3Iua2V5XSA9IGVkaXRvci50ZXh0Q29tcG9uZW50LmdldFZhbHVlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgfTtcbiAgICB9LFxuICAgIGNhbmNlbEJ1dHRvblRleHQsXG4gICAgY3NzQ2xhc3NlcyxcbiAgICBva0J1dHRvblRleHRcbiAgfSkpO1xufVxuXG4vKipcbiAqIEFkZHMgYSBzaW5nbGUgbGFiZWxsZWQgdGV4dCBmaWVsZCB0byB0aGUgcG9wb3Zlci5cbiAqXG4gKiBAdHlwZVBhcmFtIEtleSAtIFRoZSBrZXkgdGhlIGZpZWxkJ3MgdmFsdWUgaXMgcmV0dXJuZWQgdW5kZXIuXG4gKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgZWxlbWVudCB0byBhZGQgdGhlIGZpZWxkIHRvLlxuICogQHBhcmFtIGZpZWxkIC0gVGhlIGZpZWxkIHRvIGFkZC5cbiAqIEByZXR1cm5zIFRoZSBmaWVsZCdzIHRleHQgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiBhZGRGaWVsZDxLZXkgZXh0ZW5kcyBzdHJpbmc+KGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgZmllbGQ6IFBvcG92ZXJGaWVsZDxLZXk+KTogVGV4dENvbXBvbmVudCB7XG4gIGNvbnN0IHNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0TmFtZShmaWVsZC5uYW1lKTtcbiAgY29uc3QgdGV4dENvbXBvbmVudCA9IG5ldyBUZXh0Q29tcG9uZW50KHNldHRpbmcuY29udHJvbEVsKTtcbiAgdGV4dENvbXBvbmVudC5zZXRWYWx1ZShmaWVsZC5kZWZhdWx0VmFsdWUgPz8gJycpO1xuICB0ZXh0Q29tcG9uZW50LnNldFBsYWNlaG9sZGVyKGZpZWxkLnBsYWNlaG9sZGVyID8/ICcnKTtcbiAgdGV4dENvbXBvbmVudC5pbnB1dEVsLmFkZENsYXNzKENzc0NsYXNzLlRleHRCb3gpO1xuICByZXR1cm4gdGV4dENvbXBvbmVudDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSxTQUFTLG1DQUFtQztBQUM1QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUtQLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsbUJBQW1CO0FBeUU1QixlQUFzQixvQkFBd0MsUUFBNkU7QUFDekksUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBRUosU0FBTyxNQUFNLFlBQWlDLDRCQUFvRTtBQUFBLElBQ2hIO0FBQUEsSUFDQSxNQUFNLEVBQUUsVUFBVSxHQUFHO0FBQ25CLFlBQU0sVUFBVSxPQUFPLElBQUksQ0FBQyxXQUFXO0FBQUEsUUFDckMsS0FBSyxNQUFNO0FBQUEsUUFDWCxlQUFlLFNBQVMsV0FBVyxLQUFLO0FBQUEsTUFDMUMsRUFBRTtBQUVGLGFBQU8sTUFBTTtBQUVYLGNBQU0sU0FBaUMsQ0FBQztBQUN4QyxtQkFBVyxVQUFVLFNBQVM7QUFDNUIsaUJBQU8sT0FBTyxHQUFHLElBQUksT0FBTyxjQUFjLFNBQVM7QUFBQSxRQUNyRDtBQUVBLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFVQSxTQUFTLFNBQTZCLGFBQTBCLE9BQXlDO0FBQ3ZHLFFBQU0sVUFBVSxJQUFJLFFBQVEsV0FBVyxFQUFFLFFBQVEsTUFBTSxJQUFJO0FBQzNELFFBQU0sZ0JBQWdCLElBQUksY0FBYyxRQUFRLFNBQVM7QUFDekQsZ0JBQWMsU0FBUyxNQUFNLGdCQUFnQixFQUFFO0FBQy9DLGdCQUFjLGVBQWUsTUFBTSxlQUFlLEVBQUU7QUFDcEQsZ0JBQWMsUUFBUSxTQUFTLFNBQVMsT0FBTztBQUMvQyxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
88
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BvcG92ZXJzL2ZpZWxkLXBvcG92ZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXR5IGZvciBlZGl0aW5nIGEgaGFuZGZ1bCBvZiBuYW1lZCB0ZXh0IGZpZWxkcyBpbiBhIHBvcG92ZXIgYW5jaG9yZWQgYXQgYSBwb2ludC5cbiAqXG4gKiBUaGlzIGlzIHRvIHtAbGluayBzaG93UG9wb3Zlcn0gd2hhdCBgbW9kYWxzL3Byb21wdC50c2AgaXMgdG8gYG1vZGFscy9tb2RhbC50c2A6IHRoZSBjb21tb24gY2FzZVxuICogc3BlbGxlZCBkZWNsYXJhdGl2ZWx5LCBzbyBhIGNhbGxlciB0aGF0IG9ubHkgbmVlZHMgYSBmZXcgdGV4dCBmaWVsZHMgbmV2ZXIgd3JpdGVzIGFueSBET00gd2lyaW5nLlxuICogQW55dGhpbmcgcmljaGVyIFx1MjAxNCBhIGRyb3Bkb3duLCBhIHRvZ2dsZSwgcmVuZGVyZWQgbWFya2Rvd24gXHUyMDE0IGdvZXMgdGhyb3VnaCB7QGxpbmsgc2hvd1BvcG92ZXJ9XG4gKiBkaXJlY3RseS5cbiAqL1xuXG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7XG4gIFNldHRpbmcsXG4gIFRleHRDb21wb25lbnRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBvcG92ZXJBbmNob3IgfSBmcm9tICcuL3BvcG92ZXItYW5jaG9yLnRzJztcbmltcG9ydCB0eXBlIHsgU2hvd1BvcG92ZXJQYXJhbXMgfSBmcm9tICcuL3BvcG92ZXIudHMnO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBzaG93UG9wb3ZlciB9IGZyb20gJy4vcG9wb3Zlci50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGVkaXRGaWVsZHNJblBvcG92ZXJ9LlxuICpcbiAqIEB0eXBlUGFyYW0gS2V5IC0gVGhlIHVuaW9uIG9mIHRoZSBmaWVsZCBrZXlzLCBpbmZlcnJlZCBmcm9tIHtAbGluayBFZGl0RmllbGRzSW5Qb3BvdmVyUGFyYW1zLmZpZWxkc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdEZpZWxkc0luUG9wb3ZlclBhcmFtczxLZXkgZXh0ZW5kcyBzdHJpbmc+IHtcbiAgLyoqXG4gICAqIFdoZXJlIHRvIHBsYWNlIHRoZSBwb3BvdmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgYW5jaG9yOiBQb3BvdmVyQW5jaG9yO1xuXG4gIC8qKlxuICAgKiBBIHRleHQgZm9yIHRoZSBcIkNhbmNlbFwiIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgdG8gYXBwbHkgdG8gdGhlIHBvcG92ZXIuXG4gICAqL1xuICByZWFkb25seSBjc3NDbGFzc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBmaWVsZHMgdG8gZWRpdCwgcmVuZGVyZWQgdG9wIHRvIGJvdHRvbSBpbiB0aGUgZ2l2ZW4gb3JkZXIuXG4gICAqL1xuICByZWFkb25seSBmaWVsZHM6IHJlYWRvbmx5IFBvcG92ZXJGaWVsZDxLZXk+W107XG5cbiAgLyoqXG4gICAqIEEgdGV4dCBmb3IgdGhlIFwiT0tcIiBidXR0b24uXG4gICAqL1xuICByZWFkb25seSBva0J1dHRvblRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgdGV4dCBmaWVsZCBvZiBhIHtAbGluayBlZGl0RmllbGRzSW5Qb3BvdmVyfSBwb3BvdmVyLlxuICpcbiAqIEB0eXBlUGFyYW0gS2V5IC0gVGhlIGtleSB0aGUgZmllbGQncyB2YWx1ZSBpcyByZXR1cm5lZCB1bmRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3BvdmVyRmllbGQ8S2V5IGV4dGVuZHMgc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBBIHZhbHVlIHRvIHByZS1maWxsIHRoZSBmaWVsZCB3aXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgdGhlIGZpZWxkJ3MgdmFsdWUgaXMgcmV0dXJuZWQgdW5kZXIuXG4gICAqL1xuICByZWFkb25seSBrZXk6IEtleTtcblxuICAvKipcbiAgICogVGhlIGxhYmVsIHNob3duIG5leHQgdG8gdGhlIGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBmaWVsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcnYFxuICAgKi9cbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGlzcGxheXMgYSBwb3BvdmVyIHdpdGggYSB0ZXh0IGZpZWxkIHBlciBlbnRyeSBpbiBgZmllbGRzYCBhbmQgcmVzb2x2ZXMgd2l0aCB0aGVpciB2YWx1ZXMga2V5ZWQgYnlcbiAqIHtAbGluayBQb3BvdmVyRmllbGQua2V5fSwgb3IgYG51bGxgIGlmIGl0IHdhcyBkaXNtaXNzZWQgd2l0aG91dCBjb25maXJtaW5nLlxuICpcbiAqIEB0eXBlUGFyYW0gS2V5IC0gVGhlIHVuaW9uIG9mIHRoZSBmaWVsZCBrZXlzLCBpbmZlcnJlZCBmcm9tIHRoZSBgZmllbGRzYCBhcnJheS5cbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHBvcG92ZXIuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGVkaXRlZCB2YWx1ZXMsIG9yIGBudWxsYCBpZiBkaXNtaXNzZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlZGl0RmllbGRzSW5Qb3BvdmVyPEtleSBleHRlbmRzIHN0cmluZz4ocGFyYW1zOiBFZGl0RmllbGRzSW5Qb3BvdmVyUGFyYW1zPEtleT4pOiBQcm9taXNlPG51bGwgfCBSZWNvcmQ8S2V5LCBzdHJpbmc+PiB7XG4gIGNvbnN0IHtcbiAgICBhbmNob3IsXG4gICAgY2FuY2VsQnV0dG9uVGV4dCxcbiAgICBjc3NDbGFzc2VzLFxuICAgIGZpZWxkcyxcbiAgICBva0J1dHRvblRleHRcbiAgfSA9IHBhcmFtcztcblxuICByZXR1cm4gYXdhaXQgc2hvd1BvcG92ZXI8UmVjb3JkPEtleSwgc3RyaW5nPj4obm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFNob3dQb3BvdmVyUGFyYW1zPFJlY29yZDxLZXksIHN0cmluZz4+Pih7XG4gICAgYW5jaG9yLFxuICAgIGJ1aWxkKHsgY29udGVudEVsIH0pIHtcbiAgICAgIGNvbnN0IGVkaXRvcnMgPSBmaWVsZHMubWFwKChmaWVsZCkgPT4gKHtcbiAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgIHRleHRDb21wb25lbnQ6IGFkZEZpZWxkKGNvbnRlbnRFbCwgZmllbGQpXG4gICAgICB9KSk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIC8vIFRoZSByZWNvcmQgaXMgYWNjdW11bGF0ZWQga2V5IGJ5IGtleSwgc28gaXQgaXMgb25seSBjb21wbGV0ZSBcdTIwMTQgYW5kIG9ubHkgdHlwZWQgYXMgc3VjaCBcdTIwMTQgb25jZSBldmVyeSBmaWVsZCBoYXMgYmVlbiByZWFkLlxuICAgICAgICBjb25zdCB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBlZGl0b3Igb2YgZWRpdG9ycykge1xuICAgICAgICAgIHZhbHVlc1tlZGl0b3Iua2V5XSA9IGVkaXRvci50ZXh0Q29tcG9uZW50LmdldFZhbHVlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgfTtcbiAgICB9LFxuICAgIGNhbmNlbEJ1dHRvblRleHQsXG4gICAgY3NzQ2xhc3NlcyxcbiAgICBva0J1dHRvblRleHRcbiAgfSkpO1xufVxuXG4vKipcbiAqIEFkZHMgYSBzaW5nbGUgbGFiZWxsZWQgdGV4dCBmaWVsZCB0byB0aGUgcG9wb3Zlci5cbiAqXG4gKiBAdHlwZVBhcmFtIEtleSAtIFRoZSBrZXkgdGhlIGZpZWxkJ3MgdmFsdWUgaXMgcmV0dXJuZWQgdW5kZXIuXG4gKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgZWxlbWVudCB0byBhZGQgdGhlIGZpZWxkIHRvLlxuICogQHBhcmFtIGZpZWxkIC0gVGhlIGZpZWxkIHRvIGFkZC5cbiAqIEByZXR1cm5zIFRoZSBmaWVsZCdzIHRleHQgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiBhZGRGaWVsZDxLZXkgZXh0ZW5kcyBzdHJpbmc+KGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgZmllbGQ6IFBvcG92ZXJGaWVsZDxLZXk+KTogVGV4dENvbXBvbmVudCB7XG4gIGNvbnN0IHNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0TmFtZShmaWVsZC5uYW1lKTtcbiAgY29uc3QgdGV4dENvbXBvbmVudCA9IG5ldyBUZXh0Q29tcG9uZW50KHNldHRpbmcuY29udHJvbEVsKTtcbiAgdGV4dENvbXBvbmVudC5zZXRWYWx1ZShmaWVsZC5kZWZhdWx0VmFsdWUgPz8gJycpO1xuICB0ZXh0Q29tcG9uZW50LnNldFBsYWNlaG9sZGVyKGZpZWxkLnBsYWNlaG9sZGVyID8/ICcnKTtcbiAgdGV4dENvbXBvbmVudC5pbnB1dEVsLmFkZENsYXNzKENzc0NsYXNzLlRleHRCb3gpO1xuICByZXR1cm4gdGV4dENvbXBvbmVudDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0EsU0FBUyxtQ0FBbUM7QUFDNUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFLUCxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLG1CQUFtQjtBQXlFNUIsZUFBc0Isb0JBQXdDLFFBQTZFO0FBQ3pJLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFNBQU8sTUFBTSxZQUFpQyw0QkFBb0U7QUFBQSxJQUNoSDtBQUFBLElBQ0EsTUFBTSxFQUFFLFVBQVUsR0FBRztBQUNuQixZQUFNLFVBQVUsT0FBTyxJQUFJLENBQUMsV0FBVztBQUFBLFFBQ3JDLEtBQUssTUFBTTtBQUFBLFFBQ1gsZUFBZSxTQUFTLFdBQVcsS0FBSztBQUFBLE1BQzFDLEVBQUU7QUFFRixhQUFPLE1BQU07QUFFWCxjQUFNLFNBQWlDLENBQUM7QUFDeEMsbUJBQVcsVUFBVSxTQUFTO0FBQzVCLGlCQUFPLE9BQU8sR0FBRyxJQUFJLE9BQU8sY0FBYyxTQUFTO0FBQUEsUUFDckQ7QUFFQSxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUMsQ0FBQztBQUNKO0FBVUEsU0FBUyxTQUE2QixhQUEwQixPQUF5QztBQUN2RyxRQUFNLFVBQVUsSUFBSSxRQUFRLFdBQVcsRUFBRSxRQUFRLE1BQU0sSUFBSTtBQUMzRCxRQUFNLGdCQUFnQixJQUFJLGNBQWMsUUFBUSxTQUFTO0FBQ3pELGdCQUFjLFNBQVMsTUFBTSxnQkFBZ0IsRUFBRTtBQUMvQyxnQkFBYyxlQUFlLE1BQU0sZUFBZSxFQUFFO0FBQ3BELGdCQUFjLFFBQVEsU0FBUyxTQUFTLE9BQU87QUFDL0MsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  (function initEsm() {
@@ -55,4 +47,4 @@ export {
55
47
  popover,
56
48
  popover_anchor as "popover-anchor"
57
49
  };
58
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BvcG92ZXJzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2ZpZWxkLXBvcG92ZXInIGZyb20gJy4vZmllbGQtcG9wb3Zlci50cyc7XG5leHBvcnQgKiBhcyAncG9wb3Zlci1hbmNob3InIGZyb20gJy4vcG9wb3Zlci1hbmNob3IudHMnO1xuZXhwb3J0ICogYXMgJ3BvcG92ZXInIGZyb20gJy4vcG9wb3Zlci50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsWUFBWUEsbUJBQXFCO0FBQ2pDLFlBQVlDLG9CQUFzQjtBQUNsQyxZQUFZLGFBQWU7IiwKICAibmFtZXMiOiBbImZpZWxkLXBvcG92ZXIiLCAicG9wb3Zlci1hbmNob3IiXQp9Cg==
50
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BvcG92ZXJzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2ZpZWxkLXBvcG92ZXInIGZyb20gJy4vZmllbGQtcG9wb3Zlci50cyc7XG5leHBvcnQgKiBhcyAncG9wb3Zlci1hbmNob3InIGZyb20gJy4vcG9wb3Zlci1hbmNob3IudHMnO1xuZXhwb3J0ICogYXMgJ3BvcG92ZXInIGZyb20gJy4vcG9wb3Zlci50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLFlBQVlBLG1CQUFxQjtBQUNqQyxZQUFZQyxvQkFBc0I7QUFDbEMsWUFBWSxhQUFlOyIsCiAgIm5hbWVzIjogWyJmaWVsZC1wb3BvdmVyIiwgInBvcG92ZXItYW5jaG9yIl0KfQo=
@@ -5,40 +5,32 @@ if you want to view the source, please visit the github repository of this plugi
5
5
 
6
6
  (function () {
7
7
  function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for('Symbol.asyncDispose');
9
- symbolConstructor.dispose ??= symbolConstructor.for('Symbol.dispose');
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
10
  }
11
11
 
12
12
  function ensureBrowserProcess() {
13
13
  const browserProcess = {
14
14
  browser: true,
15
15
  cwd() {
16
- return '/';
16
+ return "/";
17
17
  },
18
18
  env: {},
19
- platform: 'android'
19
+ platform: "android"
20
20
  };
21
-
22
- // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
23
21
  const existingProcess = globalThis.process;
24
-
25
22
  if (!existingProcess) {
26
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
27
23
  globalThis.process = browserProcess;
28
24
  return;
29
25
  }
30
-
31
26
  if (existingProcess.versions?.node) {
32
27
  return;
33
28
  }
34
-
35
29
  const existingProcessRecord = existingProcess;
36
-
37
30
  for (const [key, value] of Object.entries(browserProcess)) {
38
31
  existingProcessRecord[key] ??= value;
39
32
  }
40
-
41
- existingProcessRecord['browser'] = true;
33
+ existingProcessRecord["browser"] = true;
42
34
  }
43
35
 
44
36
  (function initEsm() {
@@ -87,4 +79,4 @@ export {
87
79
  createAnchorFromPoint,
88
80
  createAnchorFromSelection
89
81
  };
90
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BvcG92ZXJzL3BvcG92ZXItYW5jaG9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHJlc29sdmVkIHBvc2l0aW9uIGEgcG9wb3ZlciBpcyBwbGFjZWQgYXQuXG4gKlxuICogQSBwb3BvdmVyIHRha2VzIGEgcmVzb2x2ZWQgYW5jaG9yIHJhdGhlciB0aGFuIGFuIGVsZW1lbnQgYmVjYXVzZSBjYWxsZXJzIGtub3cgdGhlIHBvc2l0aW9uIGluXG4gKiBkaWZmZXJlbnQgd2F5czogYSBjbGlja2VkIGVsZW1lbnQgaGFzIGEgcmVjdCwgYSBjb250ZXh0IG1lbnUgaGFzIHRoZSBwb2ludGVyIHRoYXQgb3BlbmVkIGl0LCBhbmQgYVxuICoga2V5Ym9hcmQtaW52b2tlZCBjb21tYW5kIGhhcyB0aGUgY2FyZXQuIEVhY2ggd2F5IGdldHMgaXRzIG93biBidWlsZGVyIGhlcmUsIHNvIHRoZSBwb3BvdmVyIGl0c2VsZlxuICogc3RheXMgdW5hd2FyZSBvZiBob3cgdGhlIHBvc2l0aW9uIHdhcyBmb3VuZC5cbiAqXG4gKiBUaGlzIGxpdmVzIGFwYXJ0IGZyb20gdGhlIHBvcG92ZXIgc2hlbGwgc28gdGhhdCBhbnl0aGluZyBwcm9kdWNpbmcgYW4gYW5jaG9yIFx1MjAxNCBtb3N0IG5vdGFibHlcbiAqIGBQb2ludGVyUG9zaXRpb25Db21wb25lbnRgIFx1MjAxNCBkZXBlbmRzIG9ubHkgb24gdGhlIHBvc2l0aW9uLCBub3Qgb24gdGhlIHBhbmVsIHRoYXQgY29uc3VtZXMgaXQuXG4gKi9cblxuaW1wb3J0IHsgZ2V0RG9jdW1lbnRXaW5kb3cgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvaHRtbC1lbGVtZW50JztcblxuLyoqXG4gKiBUaGUgZnJhY3Rpb24gb2YgdGhlIHdpbmRvdyB1c2VkIHRvIHBsYWNlIGEgY2VudGVyZWQgYW5jaG9yLlxuICovXG5jb25zdCBDRU5URVJfRlJBQ1RJT04gPSAwLjU7XG5cbi8qKlxuICogV2hlcmUgYSBwb3BvdmVyIGlzIHBsYWNlZDogdmlld3BvcnQgY29vcmRpbmF0ZXMgcGx1cyB0aGUgZG9jdW1lbnQgdGhleSBiZWxvbmcgdG8uXG4gKlxuICogQ2FycnlpbmcgdGhlIGRvY3VtZW50IGV4cGxpY2l0bHkgaXMgd2hhdCBtYWtlcyBhbiBhbmNob3IgaW5zaWRlIGEgcG9wLW91dCB3aW5kb3cgd29yayBcdTIwMTQgdGhlIHBvcG92ZXJcbiAqIGlzIGFwcGVuZGVkIHRvLCBhbmQgY2xhbXBlZCBhZ2FpbnN0LCB0aGF0IHdpbmRvdyByYXRoZXIgdGhhbiB0aGUgbWFpbiBvbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9wb3ZlckFuY2hvciB7XG4gIC8qKlxuICAgKiBUaGUgdmlld3BvcnQgYHlgIGNvb3JkaW5hdGUgdGhlIHBvcG92ZXIgaXMgcGxhY2VkIGJlbG93LlxuICAgKi9cbiAgcmVhZG9ubHkgYm90dG9tOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudCB0aGUgY29vcmRpbmF0ZXMgYmVsb25nIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jOiBEb2N1bWVudDtcblxuICAvKipcbiAgICogVGhlIHZpZXdwb3J0IGB4YCBjb29yZGluYXRlIHRoZSBwb3BvdmVyIGlzIGFsaWduZWQgdG8uXG4gICAqL1xuICByZWFkb25seSBsZWZ0OiBudW1iZXI7XG59XG5cbi8qKlxuICogQW5jaG9ycyBhIHBvcG92ZXIgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZG9jdW1lbnQsIGZvciB0aGUgY2FzZXMgd2hlcmUgbm90aGluZyBiZXR0ZXIgaXMga25vd24uXG4gKlxuICogQHBhcmFtIGRvYyAtIFRoZSBkb2N1bWVudCB0byBhbmNob3IgaW4uXG4gKiBAcmV0dXJucyBUaGUgYW5jaG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5jaG9yRnJvbURvY3VtZW50Q2VudGVyKGRvYzogRG9jdW1lbnQpOiBQb3BvdmVyQW5jaG9yIHtcbiAgY29uc3Qgd2luID0gZ2V0RG9jdW1lbnRXaW5kb3coZG9jKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IHdpbi5pbm5lckhlaWdodCAqIENFTlRFUl9GUkFDVElPTixcbiAgICBkb2MsXG4gICAgbGVmdDogd2luLmlubmVyV2lkdGggKiBDRU5URVJfRlJBQ1RJT05cbiAgfTtcbn1cblxuLyoqXG4gKiBBbmNob3JzIGEgcG9wb3ZlciBqdXN0IGJlbG93IGFuIGVsZW1lbnQgXHUyMDE0IHVzZWQgZm9yIGEgY2xpY2tlZCBlbGVtZW50LCB3aG9zZSByZWN0IGlzIGV4YWN0bHkgd2hlcmVcbiAqIHRoZSB1c2VyIGlzIGxvb2tpbmcuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBhbmNob3IgYXQuXG4gKiBAcmV0dXJucyBUaGUgYW5jaG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5jaG9yRnJvbUVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBQb3BvdmVyQW5jaG9yIHtcbiAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICBkb2M6IGVsZW1lbnQub3duZXJEb2N1bWVudCxcbiAgICBsZWZ0OiByZWN0LmxlZnRcbiAgfTtcbn1cblxuLyoqXG4gKiBBbmNob3JzIGEgcG9wb3ZlciBhdCBhIHBvaW50ZXIgcG9zaXRpb24gXHUyMDE0IHVzZWQgZm9yIGEgY29udGV4dCBtZW51LCB3aGljaCBpcyByYWlzZWQgYnkgYSByaWdodC1jbGlja1xuICogb3IgYSBsb25nLXByZXNzIHdob3NlIGNvb3JkaW5hdGVzIGFyZSB3aGVyZSB0aGUgdXNlciBpcyBsb29raW5nLlxuICpcbiAqIEBwYXJhbSB4IC0gVGhlIHZpZXdwb3J0IGB4YCBjb29yZGluYXRlLlxuICogQHBhcmFtIHkgLSBUaGUgdmlld3BvcnQgYHlgIGNvb3JkaW5hdGUuXG4gKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IHRoZSBjb29yZGluYXRlcyBiZWxvbmcgdG8uXG4gKiBAcmV0dXJucyBUaGUgYW5jaG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5jaG9yRnJvbVBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyLCBkb2M6IERvY3VtZW50KTogUG9wb3ZlckFuY2hvciB7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiB5LFxuICAgIGRvYyxcbiAgICBsZWZ0OiB4XG4gIH07XG59XG5cbi8qKlxuICogQW5jaG9ycyBhIHBvcG92ZXIgYXQgdGhlIGNhcmV0IFx1MjAxNCB1c2VkIGJ5IGEgY29tbWFuZCBpbnZva2VkIGZyb20gdGhlIGtleWJvYXJkLCB3aXRoIHRoZSBjdXJzb3JcbiAqIGFscmVhZHkgYXQgdGhlIHBsYWNlIGJlaW5nIGVkaXRlZC5cbiAqXG4gKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IGhvbGRpbmcgdGhlIHNlbGVjdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBhbmNob3IsIG9yIGEgY2VudGVyZWQgb25lIHdoZW4gdGhlcmUgaXMgbm8gY2FyZXQgdG8gcmVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFuY2hvckZyb21TZWxlY3Rpb24oZG9jOiBEb2N1bWVudCk6IFBvcG92ZXJBbmNob3Ige1xuICBjb25zdCBzZWxlY3Rpb24gPSBkb2MuZ2V0U2VsZWN0aW9uKCk7XG4gIGNvbnN0IHJlY3QgPSBzZWxlY3Rpb24/LnJhbmdlQ291bnQgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IG51bGw7XG4gIHJldHVybiAhcmVjdCB8fCAocmVjdC5ib3R0b20gPT09IDAgJiYgcmVjdC5sZWZ0ID09PSAwKVxuICAgID8gY3JlYXRlQW5jaG9yRnJvbURvY3VtZW50Q2VudGVyKGRvYylcbiAgICA6IHtcbiAgICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgICBkb2MsXG4gICAgICBsZWZ0OiByZWN0LmxlZnRcbiAgICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFNBQVMseUJBQXlCO0FBS2xDLE1BQU0sa0JBQWtCO0FBK0JqQixTQUFTLCtCQUErQixLQUE4QjtBQUMzRSxRQUFNLE1BQU0sa0JBQWtCLEdBQUc7QUFDakMsU0FBTztBQUFBLElBQ0wsUUFBUSxJQUFJLGNBQWM7QUFBQSxJQUMxQjtBQUFBLElBQ0EsTUFBTSxJQUFJLGFBQWE7QUFBQSxFQUN6QjtBQUNGO0FBU08sU0FBUyx3QkFBd0IsU0FBcUM7QUFDM0UsUUFBTSxPQUFPLFFBQVEsc0JBQXNCO0FBQzNDLFNBQU87QUFBQSxJQUNMLFFBQVEsS0FBSztBQUFBLElBQ2IsS0FBSyxRQUFRO0FBQUEsSUFDYixNQUFNLEtBQUs7QUFBQSxFQUNiO0FBQ0Y7QUFXTyxTQUFTLHNCQUFzQixHQUFXLEdBQVcsS0FBOEI7QUFDeEYsU0FBTztBQUFBLElBQ0wsUUFBUTtBQUFBLElBQ1I7QUFBQSxJQUNBLE1BQU07QUFBQSxFQUNSO0FBQ0Y7QUFTTyxTQUFTLDBCQUEwQixLQUE4QjtBQUN0RSxRQUFNLFlBQVksSUFBSSxhQUFhO0FBQ25DLFFBQU0sT0FBTyxXQUFXLGFBQWEsVUFBVSxXQUFXLENBQUMsRUFBRSxzQkFBc0IsSUFBSTtBQUN2RixTQUFPLENBQUMsUUFBUyxLQUFLLFdBQVcsS0FBSyxLQUFLLFNBQVMsSUFDaEQsK0JBQStCLEdBQUcsSUFDbEM7QUFBQSxJQUNBLFFBQVEsS0FBSztBQUFBLElBQ2I7QUFBQSxJQUNBLE1BQU0sS0FBSztBQUFBLEVBQ2I7QUFDSjsiLAogICJuYW1lcyI6IFtdCn0K
82
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BvcG92ZXJzL3BvcG92ZXItYW5jaG9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIHJlc29sdmVkIHBvc2l0aW9uIGEgcG9wb3ZlciBpcyBwbGFjZWQgYXQuXG4gKlxuICogQSBwb3BvdmVyIHRha2VzIGEgcmVzb2x2ZWQgYW5jaG9yIHJhdGhlciB0aGFuIGFuIGVsZW1lbnQgYmVjYXVzZSBjYWxsZXJzIGtub3cgdGhlIHBvc2l0aW9uIGluXG4gKiBkaWZmZXJlbnQgd2F5czogYSBjbGlja2VkIGVsZW1lbnQgaGFzIGEgcmVjdCwgYSBjb250ZXh0IG1lbnUgaGFzIHRoZSBwb2ludGVyIHRoYXQgb3BlbmVkIGl0LCBhbmQgYVxuICoga2V5Ym9hcmQtaW52b2tlZCBjb21tYW5kIGhhcyB0aGUgY2FyZXQuIEVhY2ggd2F5IGdldHMgaXRzIG93biBidWlsZGVyIGhlcmUsIHNvIHRoZSBwb3BvdmVyIGl0c2VsZlxuICogc3RheXMgdW5hd2FyZSBvZiBob3cgdGhlIHBvc2l0aW9uIHdhcyBmb3VuZC5cbiAqXG4gKiBUaGlzIGxpdmVzIGFwYXJ0IGZyb20gdGhlIHBvcG92ZXIgc2hlbGwgc28gdGhhdCBhbnl0aGluZyBwcm9kdWNpbmcgYW4gYW5jaG9yIFx1MjAxNCBtb3N0IG5vdGFibHlcbiAqIGBQb2ludGVyUG9zaXRpb25Db21wb25lbnRgIFx1MjAxNCBkZXBlbmRzIG9ubHkgb24gdGhlIHBvc2l0aW9uLCBub3Qgb24gdGhlIHBhbmVsIHRoYXQgY29uc3VtZXMgaXQuXG4gKi9cblxuaW1wb3J0IHsgZ2V0RG9jdW1lbnRXaW5kb3cgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvaHRtbC1lbGVtZW50JztcblxuLyoqXG4gKiBUaGUgZnJhY3Rpb24gb2YgdGhlIHdpbmRvdyB1c2VkIHRvIHBsYWNlIGEgY2VudGVyZWQgYW5jaG9yLlxuICovXG5jb25zdCBDRU5URVJfRlJBQ1RJT04gPSAwLjU7XG5cbi8qKlxuICogV2hlcmUgYSBwb3BvdmVyIGlzIHBsYWNlZDogdmlld3BvcnQgY29vcmRpbmF0ZXMgcGx1cyB0aGUgZG9jdW1lbnQgdGhleSBiZWxvbmcgdG8uXG4gKlxuICogQ2FycnlpbmcgdGhlIGRvY3VtZW50IGV4cGxpY2l0bHkgaXMgd2hhdCBtYWtlcyBhbiBhbmNob3IgaW5zaWRlIGEgcG9wLW91dCB3aW5kb3cgd29yayBcdTIwMTQgdGhlIHBvcG92ZXJcbiAqIGlzIGFwcGVuZGVkIHRvLCBhbmQgY2xhbXBlZCBhZ2FpbnN0LCB0aGF0IHdpbmRvdyByYXRoZXIgdGhhbiB0aGUgbWFpbiBvbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9wb3ZlckFuY2hvciB7XG4gIC8qKlxuICAgKiBUaGUgdmlld3BvcnQgYHlgIGNvb3JkaW5hdGUgdGhlIHBvcG92ZXIgaXMgcGxhY2VkIGJlbG93LlxuICAgKi9cbiAgcmVhZG9ubHkgYm90dG9tOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudCB0aGUgY29vcmRpbmF0ZXMgYmVsb25nIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jOiBEb2N1bWVudDtcblxuICAvKipcbiAgICogVGhlIHZpZXdwb3J0IGB4YCBjb29yZGluYXRlIHRoZSBwb3BvdmVyIGlzIGFsaWduZWQgdG8uXG4gICAqL1xuICByZWFkb25seSBsZWZ0OiBudW1iZXI7XG59XG5cbi8qKlxuICogQW5jaG9ycyBhIHBvcG92ZXIgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZG9jdW1lbnQsIGZvciB0aGUgY2FzZXMgd2hlcmUgbm90aGluZyBiZXR0ZXIgaXMga25vd24uXG4gKlxuICogQHBhcmFtIGRvYyAtIFRoZSBkb2N1bWVudCB0byBhbmNob3IgaW4uXG4gKiBAcmV0dXJucyBUaGUgYW5jaG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5jaG9yRnJvbURvY3VtZW50Q2VudGVyKGRvYzogRG9jdW1lbnQpOiBQb3BvdmVyQW5jaG9yIHtcbiAgY29uc3Qgd2luID0gZ2V0RG9jdW1lbnRXaW5kb3coZG9jKTtcbiAgcmV0dXJuIHtcbiAgICBib3R0b206IHdpbi5pbm5lckhlaWdodCAqIENFTlRFUl9GUkFDVElPTixcbiAgICBkb2MsXG4gICAgbGVmdDogd2luLmlubmVyV2lkdGggKiBDRU5URVJfRlJBQ1RJT05cbiAgfTtcbn1cblxuLyoqXG4gKiBBbmNob3JzIGEgcG9wb3ZlciBqdXN0IGJlbG93IGFuIGVsZW1lbnQgXHUyMDE0IHVzZWQgZm9yIGEgY2xpY2tlZCBlbGVtZW50LCB3aG9zZSByZWN0IGlzIGV4YWN0bHkgd2hlcmVcbiAqIHRoZSB1c2VyIGlzIGxvb2tpbmcuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBhbmNob3IgYXQuXG4gKiBAcmV0dXJucyBUaGUgYW5jaG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5jaG9yRnJvbUVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBQb3BvdmVyQW5jaG9yIHtcbiAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICBkb2M6IGVsZW1lbnQub3duZXJEb2N1bWVudCxcbiAgICBsZWZ0OiByZWN0LmxlZnRcbiAgfTtcbn1cblxuLyoqXG4gKiBBbmNob3JzIGEgcG9wb3ZlciBhdCBhIHBvaW50ZXIgcG9zaXRpb24gXHUyMDE0IHVzZWQgZm9yIGEgY29udGV4dCBtZW51LCB3aGljaCBpcyByYWlzZWQgYnkgYSByaWdodC1jbGlja1xuICogb3IgYSBsb25nLXByZXNzIHdob3NlIGNvb3JkaW5hdGVzIGFyZSB3aGVyZSB0aGUgdXNlciBpcyBsb29raW5nLlxuICpcbiAqIEBwYXJhbSB4IC0gVGhlIHZpZXdwb3J0IGB4YCBjb29yZGluYXRlLlxuICogQHBhcmFtIHkgLSBUaGUgdmlld3BvcnQgYHlgIGNvb3JkaW5hdGUuXG4gKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IHRoZSBjb29yZGluYXRlcyBiZWxvbmcgdG8uXG4gKiBAcmV0dXJucyBUaGUgYW5jaG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5jaG9yRnJvbVBvaW50KHg6IG51bWJlciwgeTogbnVtYmVyLCBkb2M6IERvY3VtZW50KTogUG9wb3ZlckFuY2hvciB7XG4gIHJldHVybiB7XG4gICAgYm90dG9tOiB5LFxuICAgIGRvYyxcbiAgICBsZWZ0OiB4XG4gIH07XG59XG5cbi8qKlxuICogQW5jaG9ycyBhIHBvcG92ZXIgYXQgdGhlIGNhcmV0IFx1MjAxNCB1c2VkIGJ5IGEgY29tbWFuZCBpbnZva2VkIGZyb20gdGhlIGtleWJvYXJkLCB3aXRoIHRoZSBjdXJzb3JcbiAqIGFscmVhZHkgYXQgdGhlIHBsYWNlIGJlaW5nIGVkaXRlZC5cbiAqXG4gKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IGhvbGRpbmcgdGhlIHNlbGVjdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBhbmNob3IsIG9yIGEgY2VudGVyZWQgb25lIHdoZW4gdGhlcmUgaXMgbm8gY2FyZXQgdG8gcmVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFuY2hvckZyb21TZWxlY3Rpb24oZG9jOiBEb2N1bWVudCk6IFBvcG92ZXJBbmNob3Ige1xuICBjb25zdCBzZWxlY3Rpb24gPSBkb2MuZ2V0U2VsZWN0aW9uKCk7XG4gIGNvbnN0IHJlY3QgPSBzZWxlY3Rpb24/LnJhbmdlQ291bnQgPyBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IG51bGw7XG4gIHJldHVybiAhcmVjdCB8fCAocmVjdC5ib3R0b20gPT09IDAgJiYgcmVjdC5sZWZ0ID09PSAwKVxuICAgID8gY3JlYXRlQW5jaG9yRnJvbURvY3VtZW50Q2VudGVyKGRvYylcbiAgICA6IHtcbiAgICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgICBkb2MsXG4gICAgICBsZWZ0OiByZWN0LmxlZnRcbiAgICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFTLHlCQUF5QjtBQUtsQyxNQUFNLGtCQUFrQjtBQStCakIsU0FBUywrQkFBK0IsS0FBOEI7QUFDM0UsUUFBTSxNQUFNLGtCQUFrQixHQUFHO0FBQ2pDLFNBQU87QUFBQSxJQUNMLFFBQVEsSUFBSSxjQUFjO0FBQUEsSUFDMUI7QUFBQSxJQUNBLE1BQU0sSUFBSSxhQUFhO0FBQUEsRUFDekI7QUFDRjtBQVNPLFNBQVMsd0JBQXdCLFNBQXFDO0FBQzNFLFFBQU0sT0FBTyxRQUFRLHNCQUFzQjtBQUMzQyxTQUFPO0FBQUEsSUFDTCxRQUFRLEtBQUs7QUFBQSxJQUNiLEtBQUssUUFBUTtBQUFBLElBQ2IsTUFBTSxLQUFLO0FBQUEsRUFDYjtBQUNGO0FBV08sU0FBUyxzQkFBc0IsR0FBVyxHQUFXLEtBQThCO0FBQ3hGLFNBQU87QUFBQSxJQUNMLFFBQVE7QUFBQSxJQUNSO0FBQUEsSUFDQSxNQUFNO0FBQUEsRUFDUjtBQUNGO0FBU08sU0FBUywwQkFBMEIsS0FBOEI7QUFDdEUsUUFBTSxZQUFZLElBQUksYUFBYTtBQUNuQyxRQUFNLE9BQU8sV0FBVyxhQUFhLFVBQVUsV0FBVyxDQUFDLEVBQUUsc0JBQXNCLElBQUk7QUFDdkYsU0FBTyxDQUFDLFFBQVMsS0FBSyxXQUFXLEtBQUssS0FBSyxTQUFTLElBQ2hELCtCQUErQixHQUFHLElBQ2xDO0FBQUEsSUFDQSxRQUFRLEtBQUs7QUFBQSxJQUNiO0FBQUEsSUFDQSxNQUFNLEtBQUs7QUFBQSxFQUNiO0FBQ0o7IiwKICAibmFtZXMiOiBbXQp9Cg==