@mnaoumov/obsidian-lib 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/README.md +9 -1
  2. package/dist/lib/cjs/__merged.cjs +54 -64
  3. package/dist/lib/cjs/__merged.d.cts +5 -3
  4. package/dist/lib/cjs/active-file-provider.cjs +40 -64
  5. package/dist/lib/cjs/app.cjs +40 -64
  6. package/dist/lib/cjs/async-with-notice.cjs +40 -64
  7. package/dist/lib/cjs/attachment-path.cjs +101 -72
  8. package/dist/lib/cjs/attachment-path.d.cts +21 -43
  9. package/dist/lib/cjs/attachment-unit-folder.cjs +40 -64
  10. package/dist/lib/cjs/attachment-unit-folder.d.cts +8 -9
  11. package/dist/lib/cjs/backlink-index.cjs +41 -65
  12. package/dist/lib/cjs/backlink.cjs +40 -64
  13. package/dist/lib/cjs/bases-view-registrar.cjs +40 -64
  14. package/dist/lib/cjs/callout.cjs +40 -64
  15. package/dist/lib/cjs/canvas.cjs +40 -64
  16. package/dist/lib/cjs/case-insensitive-file-index.cjs +40 -64
  17. package/dist/lib/cjs/code-block-markdown-information.cjs +40 -64
  18. package/dist/lib/cjs/code-block-reg-exp.cjs +40 -64
  19. package/dist/lib/cjs/codemirror/index.cjs +40 -64
  20. package/dist/lib/cjs/codemirror/state-field-spec.cjs +40 -64
  21. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +40 -64
  22. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +40 -64
  23. package/dist/lib/cjs/command-handlers/command-handler.cjs +40 -64
  24. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +40 -64
  25. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +40 -64
  26. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +40 -64
  27. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +40 -64
  28. package/dist/lib/cjs/command-handlers/index.cjs +40 -64
  29. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +40 -64
  30. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +40 -64
  31. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +40 -64
  32. package/dist/lib/cjs/command-registrar.cjs +40 -64
  33. package/dist/lib/cjs/community-plugins.cjs +40 -64
  34. package/dist/lib/cjs/components/abort-signal-component.cjs +40 -64
  35. package/dist/lib/cjs/components/all-windows-event-component.cjs +40 -64
  36. package/dist/lib/cjs/components/async-error-handler-component.cjs +40 -64
  37. package/dist/lib/cjs/components/async-events-component.cjs +40 -64
  38. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +40 -64
  39. package/dist/lib/cjs/components/component-ex.cjs +41 -65
  40. package/dist/lib/cjs/components/console-debug-component.cjs +40 -64
  41. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +40 -64
  42. package/dist/lib/cjs/components/disposable-component.cjs +40 -64
  43. package/dist/lib/cjs/components/embed-extensions-component.cjs +40 -64
  44. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +40 -64
  45. package/dist/lib/cjs/components/index.cjs +40 -64
  46. package/dist/lib/cjs/components/layout-ready-component.cjs +40 -64
  47. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +40 -64
  48. package/dist/lib/cjs/components/monkey-around-component.cjs +40 -64
  49. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +40 -64
  50. package/dist/lib/cjs/components/plugin-context-component.cjs +40 -64
  51. package/dist/lib/cjs/components/plugin-gate-component.cjs +41 -65
  52. package/dist/lib/cjs/components/plugin-notice-component.cjs +46 -65
  53. package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -0
  54. package/dist/lib/cjs/components/plugin-settings-component.cjs +41 -65
  55. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +40 -64
  56. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +40 -64
  57. package/dist/lib/cjs/components/pointer-position-component.cjs +40 -64
  58. package/dist/lib/cjs/components/registry-component.cjs +40 -64
  59. package/dist/lib/cjs/components/release-notes-component.cjs +42 -65
  60. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +40 -64
  61. package/dist/lib/cjs/components/rmdir-guard-component.cjs +40 -64
  62. package/dist/lib/cjs/components/settings-migration-component.cjs +44 -68
  63. package/dist/lib/cjs/components/settings-migration-component.d.cts +6 -4
  64. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +40 -64
  65. package/dist/lib/cjs/components/templates-language-component.cjs +40 -64
  66. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +40 -64
  67. package/dist/lib/cjs/constructors/index.cjs +40 -64
  68. package/dist/lib/cjs/css-class.cjs +40 -64
  69. package/dist/lib/cjs/data-handler.cjs +40 -64
  70. package/dist/lib/cjs/dataview-link.cjs +40 -64
  71. package/dist/lib/cjs/dataview.cjs +40 -64
  72. package/dist/lib/cjs/debug.cjs +40 -64
  73. package/dist/lib/cjs/demo-vault-helper-settings.cjs +40 -64
  74. package/dist/lib/cjs/demo-vault-helper.cjs +42 -65
  75. package/dist/lib/cjs/demo-vault-naming.cjs +40 -64
  76. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +48 -71
  77. package/dist/lib/cjs/desktop-trusted-input.cjs +40 -64
  78. package/dist/lib/cjs/editor-extension-registrar.cjs +40 -64
  79. package/dist/lib/cjs/editor-suggest-registrar.cjs +40 -64
  80. package/dist/lib/cjs/editor.cjs +40 -64
  81. package/dist/lib/cjs/events.cjs +40 -64
  82. package/dist/lib/cjs/extensions-registrar.cjs +40 -64
  83. package/dist/lib/cjs/file-change.cjs +40 -64
  84. package/dist/lib/cjs/file-explorer.cjs +40 -64
  85. package/dist/lib/cjs/file-manager.cjs +40 -64
  86. package/dist/lib/cjs/file-system.cjs +45 -64
  87. package/dist/lib/cjs/file-system.d.cts +7 -0
  88. package/dist/lib/cjs/folder-note.cjs +40 -64
  89. package/dist/lib/cjs/frontmatter-formatting.cjs +41 -65
  90. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +40 -64
  91. package/dist/lib/cjs/frontmatter.cjs +40 -64
  92. package/dist/lib/cjs/generated-during-build.cjs +42 -66
  93. package/dist/lib/cjs/generated-during-build.d.cts +8 -2
  94. package/dist/lib/cjs/hover-link-source-registrar.cjs +40 -64
  95. package/dist/lib/cjs/html-element.cjs +40 -64
  96. package/dist/lib/cjs/i18n/custom-type-options.cjs +40 -64
  97. package/dist/lib/cjs/i18n/default-translations.cjs +40 -64
  98. package/dist/lib/cjs/i18n/i18n.cjs +40 -64
  99. package/dist/lib/cjs/i18n/index.cjs +40 -64
  100. package/dist/lib/cjs/i18n/locales/en.cjs +40 -64
  101. package/dist/lib/cjs/i18n/locales/index.cjs +40 -64
  102. package/dist/lib/cjs/i18n/locales/translations-map.cjs +40 -64
  103. package/dist/lib/cjs/index.cjs +40 -64
  104. package/dist/lib/cjs/is-in-obsidian.cjs +40 -64
  105. package/dist/lib/cjs/library-styles.cjs +40 -64
  106. package/dist/lib/cjs/library.cjs +40 -64
  107. package/dist/lib/cjs/link-name.cjs +40 -64
  108. package/dist/lib/cjs/link-update-progress.cjs +40 -64
  109. package/dist/lib/cjs/link.cjs +40 -64
  110. package/dist/lib/cjs/logger.cjs +40 -64
  111. package/dist/lib/cjs/loop.cjs +40 -64
  112. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +40 -64
  113. package/dist/lib/cjs/markdown-code-block-processor.cjs +40 -64
  114. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +40 -64
  115. package/dist/lib/cjs/markdown-view.cjs +40 -64
  116. package/dist/lib/cjs/markdown.cjs +40 -64
  117. package/dist/lib/cjs/menu-event-registrar.cjs +40 -64
  118. package/dist/lib/cjs/metadata-cache.cjs +64 -70
  119. package/dist/lib/cjs/metadata-cache.d.cts +8 -19
  120. package/dist/lib/cjs/mobile-trusted-input.cjs +40 -64
  121. package/dist/lib/cjs/modals/alert.cjs +40 -64
  122. package/dist/lib/cjs/modals/confirm.cjs +40 -64
  123. package/dist/lib/cjs/modals/index.cjs +40 -64
  124. package/dist/lib/cjs/modals/minimizable-modal.cjs +40 -64
  125. package/dist/lib/cjs/modals/modal-command-builder.cjs +40 -64
  126. package/dist/lib/cjs/modals/modal.cjs +40 -64
  127. package/dist/lib/cjs/modals/prompt.cjs +40 -64
  128. package/dist/lib/cjs/modals/select-item.cjs +40 -64
  129. package/dist/lib/cjs/modals/select-option.cjs +40 -64
  130. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +40 -64
  131. package/dist/lib/cjs/note-priority.cjs +41 -65
  132. package/dist/lib/cjs/notebook-navigator.cjs +40 -64
  133. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +40 -64
  134. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +40 -64
  135. package/dist/lib/cjs/obsidian-settings.cjs +40 -64
  136. package/dist/lib/cjs/parse-link.cjs +40 -64
  137. package/dist/lib/cjs/path-settings.cjs +40 -64
  138. package/dist/lib/cjs/pdf.cjs +40 -64
  139. package/dist/lib/cjs/plugin/index.cjs +43 -64
  140. package/dist/lib/cjs/plugin/index.d.cts +1 -0
  141. package/dist/lib/cjs/plugin/plugin-api-schema.cjs +171 -0
  142. package/dist/lib/cjs/plugin/plugin-api-schema.d.cts +59 -0
  143. package/dist/lib/cjs/plugin/plugin-api.cjs +46 -64
  144. package/dist/lib/cjs/plugin/plugin-api.d.cts +83 -10
  145. package/dist/lib/cjs/plugin/plugin-context.cjs +40 -64
  146. package/dist/lib/cjs/plugin/plugin-event-source.cjs +40 -64
  147. package/dist/lib/cjs/plugin/plugin-install-state.cjs +40 -64
  148. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +40 -64
  149. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +41 -65
  150. package/dist/lib/cjs/plugin/plugin.cjs +41 -65
  151. package/dist/lib/cjs/plugin/settings-migration-api.cjs +69 -64
  152. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +16 -3
  153. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +40 -64
  154. package/dist/lib/cjs/popovers/field-popover.cjs +40 -64
  155. package/dist/lib/cjs/popovers/index.cjs +40 -64
  156. package/dist/lib/cjs/popovers/popover-anchor.cjs +40 -64
  157. package/dist/lib/cjs/popovers/popover.cjs +40 -64
  158. package/dist/lib/cjs/property-entry.cjs +40 -64
  159. package/dist/lib/cjs/queue.cjs +40 -64
  160. package/dist/lib/cjs/react/app-context.cjs +40 -64
  161. package/dist/lib/cjs/react/index.cjs +40 -64
  162. package/dist/lib/cjs/reference.cjs +40 -64
  163. package/dist/lib/cjs/resource-lock.cjs +40 -64
  164. package/dist/lib/cjs/resource-url.cjs +40 -64
  165. package/dist/lib/cjs/ribbon-icon-registrar.cjs +40 -64
  166. package/dist/lib/cjs/setting-components/checkbox-component.cjs +40 -64
  167. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +40 -64
  168. package/dist/lib/cjs/setting-components/date-component.cjs +40 -64
  169. package/dist/lib/cjs/setting-components/date-time-component.cjs +40 -64
  170. package/dist/lib/cjs/setting-components/email-component.cjs +40 -64
  171. package/dist/lib/cjs/setting-components/file-component.cjs +40 -64
  172. package/dist/lib/cjs/setting-components/index.cjs +40 -64
  173. package/dist/lib/cjs/setting-components/month-component.cjs +40 -64
  174. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +41 -65
  175. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +40 -64
  176. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +40 -64
  177. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +40 -64
  178. package/dist/lib/cjs/setting-components/number-component.cjs +40 -64
  179. package/dist/lib/cjs/setting-components/password-component.cjs +40 -64
  180. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +40 -64
  181. package/dist/lib/cjs/setting-components/telephone-component.cjs +40 -64
  182. package/dist/lib/cjs/setting-components/text-based-component.cjs +40 -64
  183. package/dist/lib/cjs/setting-components/time-component.cjs +40 -64
  184. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +40 -64
  185. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +40 -64
  186. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +40 -64
  187. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +40 -64
  188. package/dist/lib/cjs/setting-components/typed-text-component.cjs +41 -65
  189. package/dist/lib/cjs/setting-components/url-component.cjs +40 -64
  190. package/dist/lib/cjs/setting-components/validator-component.cjs +41 -65
  191. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +40 -64
  192. package/dist/lib/cjs/setting-components/week-component.cjs +40 -64
  193. package/dist/lib/cjs/setting-ex.cjs +40 -64
  194. package/dist/lib/cjs/setting-group-ex.cjs +40 -64
  195. package/dist/lib/cjs/status-bar-item-registrar.cjs +40 -64
  196. package/dist/lib/cjs/templater.cjs +40 -64
  197. package/dist/lib/cjs/transformers/duration-transformer.cjs +40 -64
  198. package/dist/lib/cjs/transformers/index.cjs +40 -64
  199. package/dist/lib/cjs/trusted-input.cjs +40 -64
  200. package/dist/lib/cjs/validation.cjs +40 -64
  201. package/dist/lib/cjs/vault-delete.cjs +40 -64
  202. package/dist/lib/cjs/vault-transaction.cjs +40 -64
  203. package/dist/lib/cjs/vault.cjs +41 -65
  204. package/dist/lib/cjs/view-registrar.cjs +40 -64
  205. package/dist/lib/cjs/workspace.cjs +40 -64
  206. package/dist/lib/esm/__merged.d.mts +5 -3
  207. package/dist/lib/esm/__merged.mjs +20 -14
  208. package/dist/lib/esm/active-file-provider.mjs +6 -14
  209. package/dist/lib/esm/app.mjs +6 -14
  210. package/dist/lib/esm/async-with-notice.mjs +6 -14
  211. package/dist/lib/esm/attachment-path.d.mts +21 -43
  212. package/dist/lib/esm/attachment-path.mjs +70 -22
  213. package/dist/lib/esm/attachment-unit-folder.d.mts +8 -9
  214. package/dist/lib/esm/attachment-unit-folder.mjs +6 -14
  215. package/dist/lib/esm/backlink-index.mjs +6 -14
  216. package/dist/lib/esm/backlink.mjs +6 -14
  217. package/dist/lib/esm/bases-view-registrar.mjs +6 -14
  218. package/dist/lib/esm/callout.mjs +6 -14
  219. package/dist/lib/esm/canvas.mjs +6 -14
  220. package/dist/lib/esm/case-insensitive-file-index.mjs +6 -14
  221. package/dist/lib/esm/code-block-markdown-information.mjs +5 -13
  222. package/dist/lib/esm/code-block-reg-exp.mjs +6 -14
  223. package/dist/lib/esm/codemirror/index.mjs +6 -14
  224. package/dist/lib/esm/codemirror/state-field-spec.mjs +5 -13
  225. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +6 -14
  226. package/dist/lib/esm/command-handlers/command-handler-component.mjs +6 -14
  227. package/dist/lib/esm/command-handlers/command-handler.mjs +6 -14
  228. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +6 -14
  229. package/dist/lib/esm/command-handlers/file-command-handler.mjs +6 -14
  230. package/dist/lib/esm/command-handlers/folder-command-handler.mjs +6 -14
  231. package/dist/lib/esm/command-handlers/global-command-handler.mjs +6 -14
  232. package/dist/lib/esm/command-handlers/index.mjs +6 -14
  233. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +6 -14
  234. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +6 -14
  235. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +6 -14
  236. package/dist/lib/esm/command-registrar.mjs +6 -14
  237. package/dist/lib/esm/community-plugins.mjs +6 -14
  238. package/dist/lib/esm/components/abort-signal-component.mjs +6 -14
  239. package/dist/lib/esm/components/all-windows-event-component.mjs +6 -14
  240. package/dist/lib/esm/components/async-error-handler-component.mjs +6 -14
  241. package/dist/lib/esm/components/async-events-component.mjs +6 -14
  242. package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +6 -14
  243. package/dist/lib/esm/components/component-ex.mjs +6 -14
  244. package/dist/lib/esm/components/console-debug-component.mjs +6 -14
  245. package/dist/lib/esm/components/core-plugin-toggle-component.mjs +6 -14
  246. package/dist/lib/esm/components/disposable-component.mjs +6 -14
  247. package/dist/lib/esm/components/embed-extensions-component.mjs +6 -14
  248. package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +6 -14
  249. package/dist/lib/esm/components/index.mjs +6 -14
  250. package/dist/lib/esm/components/layout-ready-component.mjs +6 -14
  251. package/dist/lib/esm/components/menu-event-registrar-component.mjs +6 -14
  252. package/dist/lib/esm/components/monkey-around-component.mjs +6 -14
  253. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +6 -14
  254. package/dist/lib/esm/components/plugin-context-component.mjs +6 -14
  255. package/dist/lib/esm/components/plugin-gate-component.mjs +6 -14
  256. package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -0
  257. package/dist/lib/esm/components/plugin-notice-component.mjs +12 -15
  258. package/dist/lib/esm/components/plugin-settings-component.mjs +6 -14
  259. package/dist/lib/esm/components/plugin-settings-tab-component.mjs +6 -14
  260. package/dist/lib/esm/components/plugin-suggestion-component.mjs +6 -14
  261. package/dist/lib/esm/components/pointer-position-component.mjs +6 -14
  262. package/dist/lib/esm/components/registry-component.mjs +6 -14
  263. package/dist/lib/esm/components/release-notes-component.mjs +11 -15
  264. package/dist/lib/esm/components/rename-delete-handler-component.mjs +6 -14
  265. package/dist/lib/esm/components/rmdir-guard-component.mjs +6 -14
  266. package/dist/lib/esm/components/settings-migration-component.d.mts +6 -4
  267. package/dist/lib/esm/components/settings-migration-component.mjs +10 -18
  268. package/dist/lib/esm/components/syntax-highlighting-component.mjs +6 -14
  269. package/dist/lib/esm/components/templates-language-component.mjs +6 -14
  270. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +6 -14
  271. package/dist/lib/esm/constructors/index.mjs +6 -14
  272. package/dist/lib/esm/css-class.mjs +6 -14
  273. package/dist/lib/esm/data-handler.mjs +6 -14
  274. package/dist/lib/esm/dataview-link.mjs +6 -14
  275. package/dist/lib/esm/dataview.mjs +6 -14
  276. package/dist/lib/esm/debug.mjs +6 -14
  277. package/dist/lib/esm/demo-vault-helper-settings.mjs +5 -13
  278. package/dist/lib/esm/demo-vault-helper.mjs +8 -15
  279. package/dist/lib/esm/demo-vault-naming.mjs +6 -14
  280. package/dist/lib/esm/desktop-demo-vault-opener.mjs +17 -21
  281. package/dist/lib/esm/desktop-trusted-input.mjs +6 -14
  282. package/dist/lib/esm/editor-extension-registrar.mjs +6 -14
  283. package/dist/lib/esm/editor-suggest-registrar.mjs +6 -14
  284. package/dist/lib/esm/editor.mjs +6 -14
  285. package/dist/lib/esm/events.mjs +6 -14
  286. package/dist/lib/esm/extensions-registrar.mjs +6 -14
  287. package/dist/lib/esm/file-change.mjs +6 -14
  288. package/dist/lib/esm/file-explorer.mjs +6 -14
  289. package/dist/lib/esm/file-manager.mjs +6 -14
  290. package/dist/lib/esm/file-system.d.mts +7 -0
  291. package/dist/lib/esm/file-system.mjs +10 -14
  292. package/dist/lib/esm/folder-note.mjs +6 -14
  293. package/dist/lib/esm/frontmatter-formatting.mjs +6 -14
  294. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +6 -14
  295. package/dist/lib/esm/frontmatter.mjs +6 -14
  296. package/dist/lib/esm/generated-during-build.d.mts +8 -2
  297. package/dist/lib/esm/generated-during-build.mjs +8 -16
  298. package/dist/lib/esm/hover-link-source-registrar.mjs +6 -14
  299. package/dist/lib/esm/html-element.mjs +6 -14
  300. package/dist/lib/esm/i18n/custom-type-options.mjs +6 -14
  301. package/dist/lib/esm/i18n/default-translations.mjs +6 -14
  302. package/dist/lib/esm/i18n/i18n.mjs +6 -14
  303. package/dist/lib/esm/i18n/index.mjs +6 -14
  304. package/dist/lib/esm/i18n/locales/en.mjs +6 -14
  305. package/dist/lib/esm/i18n/locales/index.mjs +6 -14
  306. package/dist/lib/esm/i18n/locales/translations-map.mjs +6 -14
  307. package/dist/lib/esm/index.mjs +6 -14
  308. package/dist/lib/esm/is-in-obsidian.mjs +6 -14
  309. package/dist/lib/esm/library-styles.mjs +6 -14
  310. package/dist/lib/esm/library.mjs +6 -14
  311. package/dist/lib/esm/link-name.mjs +6 -14
  312. package/dist/lib/esm/link-update-progress.mjs +5 -13
  313. package/dist/lib/esm/link.mjs +6 -14
  314. package/dist/lib/esm/logger.mjs +6 -14
  315. package/dist/lib/esm/loop.mjs +6 -14
  316. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +6 -14
  317. package/dist/lib/esm/markdown-code-block-processor.mjs +6 -14
  318. package/dist/lib/esm/markdown-post-processor-registrar.mjs +6 -14
  319. package/dist/lib/esm/markdown-view.mjs +6 -14
  320. package/dist/lib/esm/markdown.mjs +6 -14
  321. package/dist/lib/esm/menu-event-registrar.mjs +5 -13
  322. package/dist/lib/esm/metadata-cache.d.mts +8 -19
  323. package/dist/lib/esm/metadata-cache.mjs +35 -21
  324. package/dist/lib/esm/mobile-trusted-input.mjs +6 -14
  325. package/dist/lib/esm/modals/alert.mjs +6 -14
  326. package/dist/lib/esm/modals/confirm.mjs +6 -14
  327. package/dist/lib/esm/modals/index.mjs +6 -14
  328. package/dist/lib/esm/modals/minimizable-modal.mjs +6 -14
  329. package/dist/lib/esm/modals/modal-command-builder.mjs +6 -14
  330. package/dist/lib/esm/modals/modal.mjs +6 -14
  331. package/dist/lib/esm/modals/prompt.mjs +6 -14
  332. package/dist/lib/esm/modals/select-item.mjs +6 -14
  333. package/dist/lib/esm/modals/select-option.mjs +6 -14
  334. package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +6 -14
  335. package/dist/lib/esm/note-priority.mjs +6 -14
  336. package/dist/lib/esm/notebook-navigator.mjs +6 -14
  337. package/dist/lib/esm/obsidian-dev-utils-state.mjs +6 -14
  338. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +6 -14
  339. package/dist/lib/esm/obsidian-settings.mjs +6 -14
  340. package/dist/lib/esm/parse-link.mjs +6 -14
  341. package/dist/lib/esm/path-settings.mjs +6 -14
  342. package/dist/lib/esm/pdf.mjs +6 -14
  343. package/dist/lib/esm/plugin/index.d.mts +1 -0
  344. package/dist/lib/esm/plugin/index.mjs +8 -14
  345. package/dist/lib/esm/plugin/plugin-api-schema.d.mts +59 -0
  346. package/dist/lib/esm/plugin/plugin-api-schema.mjs +73 -0
  347. package/dist/lib/esm/plugin/plugin-api.d.mts +83 -10
  348. package/dist/lib/esm/plugin/plugin-api.mjs +11 -14
  349. package/dist/lib/esm/plugin/plugin-context.mjs +6 -14
  350. package/dist/lib/esm/plugin/plugin-event-source.mjs +6 -14
  351. package/dist/lib/esm/plugin/plugin-install-state.mjs +6 -14
  352. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +6 -14
  353. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +6 -14
  354. package/dist/lib/esm/plugin/plugin.mjs +6 -14
  355. package/dist/lib/esm/plugin/settings-migration-api.d.mts +16 -3
  356. package/dist/lib/esm/plugin/settings-migration-api.mjs +30 -14
  357. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +6 -14
  358. package/dist/lib/esm/popovers/field-popover.mjs +6 -14
  359. package/dist/lib/esm/popovers/index.mjs +6 -14
  360. package/dist/lib/esm/popovers/popover-anchor.mjs +6 -14
  361. package/dist/lib/esm/popovers/popover.mjs +6 -14
  362. package/dist/lib/esm/property-entry.mjs +6 -14
  363. package/dist/lib/esm/queue.mjs +6 -14
  364. package/dist/lib/esm/react/app-context.mjs +6 -14
  365. package/dist/lib/esm/react/index.mjs +6 -14
  366. package/dist/lib/esm/reference.mjs +6 -14
  367. package/dist/lib/esm/resource-lock.mjs +6 -14
  368. package/dist/lib/esm/resource-url.mjs +6 -14
  369. package/dist/lib/esm/ribbon-icon-registrar.mjs +6 -14
  370. package/dist/lib/esm/setting-components/checkbox-component.mjs +6 -14
  371. package/dist/lib/esm/setting-components/code-highlighter-component.mjs +6 -14
  372. package/dist/lib/esm/setting-components/date-component.mjs +6 -14
  373. package/dist/lib/esm/setting-components/date-time-component.mjs +6 -14
  374. package/dist/lib/esm/setting-components/email-component.mjs +6 -14
  375. package/dist/lib/esm/setting-components/file-component.mjs +6 -14
  376. package/dist/lib/esm/setting-components/index.mjs +6 -14
  377. package/dist/lib/esm/setting-components/month-component.mjs +6 -14
  378. package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +6 -14
  379. package/dist/lib/esm/setting-components/multiple-email-component.mjs +6 -14
  380. package/dist/lib/esm/setting-components/multiple-file-component.mjs +6 -14
  381. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -14
  382. package/dist/lib/esm/setting-components/number-component.mjs +6 -14
  383. package/dist/lib/esm/setting-components/password-component.mjs +6 -14
  384. package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +6 -14
  385. package/dist/lib/esm/setting-components/telephone-component.mjs +6 -14
  386. package/dist/lib/esm/setting-components/text-based-component.mjs +6 -14
  387. package/dist/lib/esm/setting-components/time-component.mjs +6 -14
  388. package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +6 -14
  389. package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +6 -14
  390. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +6 -14
  391. package/dist/lib/esm/setting-components/typed-range-text-component.mjs +6 -14
  392. package/dist/lib/esm/setting-components/typed-text-component.mjs +6 -14
  393. package/dist/lib/esm/setting-components/url-component.mjs +6 -14
  394. package/dist/lib/esm/setting-components/validator-component.mjs +6 -14
  395. package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +5 -13
  396. package/dist/lib/esm/setting-components/week-component.mjs +6 -14
  397. package/dist/lib/esm/setting-ex.mjs +6 -14
  398. package/dist/lib/esm/setting-group-ex.mjs +6 -14
  399. package/dist/lib/esm/status-bar-item-registrar.mjs +6 -14
  400. package/dist/lib/esm/templater.mjs +6 -14
  401. package/dist/lib/esm/transformers/duration-transformer.mjs +6 -14
  402. package/dist/lib/esm/transformers/index.mjs +6 -14
  403. package/dist/lib/esm/trusted-input.mjs +6 -14
  404. package/dist/lib/esm/validation.mjs +6 -14
  405. package/dist/lib/esm/vault-delete.mjs +6 -14
  406. package/dist/lib/esm/vault-transaction.mjs +6 -14
  407. package/dist/lib/esm/vault.mjs +6 -14
  408. package/dist/lib/esm/view-registrar.mjs +6 -14
  409. package/dist/lib/esm/workspace.mjs +6 -14
  410. package/dist/styles.css +4 -1
  411. package/package.json +69 -24
  412. package/plugin/plugin-api-schema/package.json +6 -0
@@ -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 keepName($unknown) {
@@ -46,17 +38,13 @@ function keepName($unknown) {
46
38
  }
47
39
 
48
40
  (function initCjs() {
49
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
41
  const globalThisRecord = globalThis;
51
42
  ensureDisposeSymbols();
52
- globalThisRecord['__name'] ??= keepName;
53
- globalThisRecord['__extractDefault'] ??= extractDefault;
54
-
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
55
45
  ensureBrowserProcess();
56
-
57
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
46
  function extractDefault(module) {
59
- return module && module.__esModule && 'default' in module ? module.default : module;
47
+ return module && module.__esModule && "default" in module ? module.default : module;
60
48
  }
61
49
  })();
62
50
  })();
@@ -65,8 +53,6 @@ function keepName($unknown) {
65
53
  if (!originalRequire || originalRequire.__isPatched) {
66
54
  return;
67
55
  }
68
-
69
- // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
56
  require = Object.assign(
71
57
  (id) => requirePatched(id),
72
58
  originalRequire,
@@ -74,53 +60,45 @@ function keepName($unknown) {
74
60
  __isPatched: true
75
61
  }
76
62
  );
77
-
78
63
  function extractDefault(module) {
79
- return module && module.__esModule && 'default' in module ? module.default : module;
64
+ return module && module.__esModule && "default" in module ? module.default : module;
80
65
  }
81
-
82
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
83
- '@codemirror/autocomplete',
84
- '@codemirror/collab',
85
- '@codemirror/commands',
86
- '@codemirror/language',
87
- '@codemirror/lint',
88
- '@codemirror/search',
89
- '@codemirror/state',
90
- '@codemirror/text',
91
- '@codemirror/view',
92
- '@lezer/common',
93
- '@lezer/highlight',
94
- '@lezer/lr',
95
- 'obsidian']
96
- );
97
-
98
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
99
- '@codemirror/closebrackets',
100
- '@codemirror/comment',
101
- '@codemirror/fold',
102
- '@codemirror/gutter',
103
- '@codemirror/highlight',
104
- '@codemirror/history',
105
- '@codemirror/matchbrackets',
106
- '@codemirror/panel',
107
- '@codemirror/rangeset',
108
- '@codemirror/rectangular-selection',
109
- '@codemirror/stream-parser',
110
- '@codemirror/tooltip']
111
- );
112
-
66
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
67
+ "@codemirror/autocomplete",
68
+ "@codemirror/collab",
69
+ "@codemirror/commands",
70
+ "@codemirror/language",
71
+ "@codemirror/lint",
72
+ "@codemirror/search",
73
+ "@codemirror/state",
74
+ "@codemirror/text",
75
+ "@codemirror/view",
76
+ "@lezer/common",
77
+ "@lezer/highlight",
78
+ "@lezer/lr",
79
+ "obsidian"
80
+ ]);
81
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
82
+ "@codemirror/closebrackets",
83
+ "@codemirror/comment",
84
+ "@codemirror/fold",
85
+ "@codemirror/gutter",
86
+ "@codemirror/highlight",
87
+ "@codemirror/history",
88
+ "@codemirror/matchbrackets",
89
+ "@codemirror/panel",
90
+ "@codemirror/rangeset",
91
+ "@codemirror/rectangular-selection",
92
+ "@codemirror/stream-parser",
93
+ "@codemirror/tooltip"
94
+ ]);
113
95
  function requirePatched(id) {
114
96
  if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
115
97
  return originalRequire?.(id);
116
98
  }
117
-
118
- // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
119
99
  if (globalThis.app.isMobile) {
120
- if (id === 'process' || id === 'node:process') {
121
- // eslint-disable-next-line no-console -- Valid usage.
100
+ if (id === "process" || id === "node:process") {
122
101
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
123
-
124
102
  return process;
125
103
  }
126
104
  } else {
@@ -129,8 +107,6 @@ function keepName($unknown) {
129
107
  return extractDefault(module);
130
108
  }
131
109
  }
132
-
133
- // eslint-disable-next-line no-console -- Valid usage.
134
110
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
135
111
  return {};
136
112
  }
@@ -437,4 +413,4 @@ class AbstractFileCommandHandler extends import_global_command_handler.GlobalCom
437
413
  0 && (module.exports = {
438
414
  AbstractFileCommandHandler
439
415
  });
440
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGFic3RyYWN0IGZpbGUgY29tbWFuZHMgd2l0aCBmaWxlL2ZpbGVzIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBJY29uTmFtZSxcbiAgTWVudSxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBjaGFpbixcbiAgY29udmVydEFzeW5jVG9TeW5jXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHsgQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zLFxuICBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHRcbn0gZnJvbSAnLi9jb21tYW5kLWhhbmRsZXIudHMnO1xuXG5pbXBvcnQgeyBHbG9iYWxDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vZ2xvYmFsLWNvbW1hbmQtaGFuZGxlci50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgYW4gYWJzdHJhY3QgZmlsZSBjb21tYW5kIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyBleHRlbmRzIENvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIHNpbmdsZS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudUl0ZW1OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIHNpbmdsZS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGljb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUgc3VibWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgc3VibWVudS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyLmhhbmRsZUFic3RyYWN0RmlsZU1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVySGFuZGxlQWJzdHJhY3RGaWxlTWVudVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBvciBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3Jrc3BhY2UgbGVhZiwgaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGVhZj86IHVuZGVmaW5lZCB8IFdvcmtzcGFjZUxlYWY7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW51IHRvIGFkZCBpdGVtcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IG1lbnU6IE1lbnU7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyLmhhbmRsZUFic3RyYWN0RmlsZXNNZW51fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckhhbmRsZUFic3RyYWN0RmlsZXNNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGxlYWY/OiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVudSB0byBhZGQgaXRlbXMgdG8uXG4gICAqL1xuICByZWFkb25seSBtZW51OiBNZW51O1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlci5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyU2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSBsZWFmPzogdW5kZWZpbmVkIHwgV29ya3NwYWNlTGVhZjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXIuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGxlYWY/OiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgYWJzdHJhY3QgZmlsZSBjb21tYW5kcy5cbiAqXG4gKiBIYW5kbGVzIGJvdGggc2luZ2xlLWZpbGUgYW5kIG11bHRpLWZpbGUgY29udGV4dCBtZW51cy5cbiAqIFN1YmNsYXNzZXMgb3ZlcnJpZGUge0BsaW5rIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGV9IGFuZCB7QGxpbmsgZXhlY3V0ZUFic3RyYWN0RmlsZX0uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlciBleHRlbmRzIEdsb2JhbENvbW1hbmRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIEdldCB0aGUgYWN0aXZlIGZpbGUgcHJvdmlkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhY3RpdmUgZmlsZSBwcm92aWRlci5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYWN0aXZlRmlsZVByb3ZpZGVyKCk6IEFjdGl2ZUZpbGVQcm92aWRlciB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuX2FjdGl2ZUZpbGVQcm92aWRlcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBjb21tYW5kIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51SXRlbU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZU1lbnVJdGVtTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBwbHVnaW4gbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZU1lbnVTZWN0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiwgb3IgYHVuZGVmaW5lZGAgZm9yIG5vIGljb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWxlTWVudVN1Ym1lbnVJY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gZmFsbCBiYWNrIHRvIHNpbmdsZS1maWxlIGl0ZW0gbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZXNNZW51SXRlbU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51SXRlbU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gZmFsbCBiYWNrIHRvIHNpbmdsZS1maWxlIHNlY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVzTWVudVNlY3Rpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgdW5kZWZpbmVkYCB0byBmYWxsIGJhY2sgdG8gc2luZ2xlLWZpbGUgc3VibWVudSBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlc01lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVzTWVudVN1Ym1lbnVJY29uO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlRmlsZVByb3ZpZGVyPzogQWN0aXZlRmlsZVByb3ZpZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlTWVudUl0ZW1OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfcmVnaXN0cmF0aW9uU2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGFic3RyYWN0IGZpbGUgY29tbWFuZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuX2ZpbGVNZW51SXRlbU5hbWUgPSBwYXJhbXMuZmlsZU1lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9maWxlTWVudVNlY3Rpb24gPSBwYXJhbXMuZmlsZU1lbnVTZWN0aW9uO1xuICAgIHRoaXMuX2ZpbGVNZW51U3VibWVudUljb24gPSBwYXJhbXMuZmlsZU1lbnVTdWJtZW51SWNvbjtcbiAgICB0aGlzLl9maWxlc01lbnVJdGVtTmFtZSA9IHBhcmFtcy5maWxlc01lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9maWxlc01lbnVTZWN0aW9uID0gcGFyYW1zLmZpbGVzTWVudVNlY3Rpb247XG4gICAgdGhpcy5fZmlsZXNNZW51U3VibWVudUljb24gPSBwYXJhbXMuZmlsZXNNZW51U3VibWVudUljb247XG4gICAgdGhpcy5fc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSA9IHBhcmFtcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBmaWxlLW1lbnUgYW5kIGZpbGVzLW1lbnUgZXZlbnQgaGFuZGxlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJlZ2lzdHJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9uUmVnaXN0ZXJlZChjb250ZXh0OiBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzdXBlci5vblJlZ2lzdGVyZWQoY29udGV4dCk7XG4gICAgdGhpcy5fYWN0aXZlRmlsZVByb3ZpZGVyID0gY29udGV4dC5hY3RpdmVGaWxlUHJvdmlkZXI7XG4gICAgdGhpcy5fcmVnaXN0cmF0aW9uU2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSA9IGNvbnRleHQuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgICBjb250ZXh0Lm1lbnVFdmVudFJlZ2lzdHJhci5yZWdpc3RlckZpbGVNZW51RXZlbnRIYW5kbGVyKChtZW51LCBhYnN0cmFjdEZpbGUsIHNvdXJjZSwgbGVhZikgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVBYnN0cmFjdEZpbGVNZW51KHtcbiAgICAgICAgYWJzdHJhY3RGaWxlLFxuICAgICAgICBsZWFmLFxuICAgICAgICBtZW51LFxuICAgICAgICBzb3VyY2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKChtZW51LCBhYnN0cmFjdEZpbGVzLCBzb3VyY2UsIGxlYWYpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlQWJzdHJhY3RGaWxlc01lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGVzLFxuICAgICAgICBsZWFmLFxuICAgICAgICBtZW51LFxuICAgICAgICBzb3VyY2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICogVXNlcyB0aGUgYWN0aXZlIGZpbGUgYXMgdGhlIHRhcmdldC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjYW5FeGVjdXRlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zaG91bGRBZGRUb0NvbW1hbmRQYWxldHRlKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVGaWxlID0gdGhpcy5nZXRBY3RpdmVGaWxlKCk7XG4gICAgcmV0dXJuICEhYWN0aXZlRmlsZSAmJiB0aGlzLmNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoYWN0aXZlRmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIGEgc2luZ2xlIGFic3RyYWN0IGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBfYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoX2Fic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZvciBtdWx0aXBsZSBhYnN0cmFjdCBmaWxlcy5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZWFjaCBmaWxlIGluZGl2aWR1YWxseS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZXMgLSBUaGUgZmlsZXMgb3IgZm9sZGVycy5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBjYW5FeGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlcy5sZW5ndGggPiAwICYmIGFic3RyYWN0RmlsZXMuZXZlcnkoKGYpID0+IHRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShmKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZnJvbSB0aGUgY29tbWFuZCBwYWxldHRlIHVzaW5nIHRoZSBhY3RpdmUgZmlsZS5cbiAgICpcbiAgICogQHJldHVybnMgYFByb21pc2FibGU8dm9pZD5gIHRoYXQgcmVzb2x2ZXMgd2hlbiBjb21tYW5kIGhhZCBiZWVuIGV4ZWN1dGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGV4ZWN1dGUoKTogUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgY29uc3QgYWN0aXZlRmlsZSA9IHRoaXMuZ2V0QWN0aXZlRmlsZSgpO1xuICAgIGlmIChhY3RpdmVGaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGFjdGl2ZUZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCBmb3IgYSBzaW5nbGUgYWJzdHJhY3QgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciBtdWx0aXBsZSBhYnN0cmFjdCBmaWxlcy5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBleGVjdXRlcyBzZXF1ZW50aWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEByZXR1cm5zIGBQcm9taXNhYmxlPHZvaWQ+YCB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGFic3RyYWN0IGZpbGVzIGhhdmUgYmVlbiBleGVjdXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBleGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBsZXQgcHJvbWlzZTogbnVsbCB8IFByb21pc2U8dm9pZD4gPSBudWxsO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBhYnN0cmFjdEZpbGVzKSB7XG4gICAgICBwcm9taXNlID0gY2hhaW4ocHJvbWlzZSwgKCkgPT4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFjdGl2ZSBmaWxlLCBpZiBhbnksIHRvIHVzZSBhcyB0aGUgdGFyZ2V0IHdoZW4gZXhlY3V0aW5nIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFjdGl2ZSBmaWxlIG9yIGBudWxsYCBpZiBub25lIGlzIGFjdGl2ZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRBY3RpdmVGaWxlKCk6IG51bGwgfCBUQWJzdHJhY3RGaWxlIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGaWxlUHJvdmlkZXIuZ2V0QWN0aXZlRmlsZSgpID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRvIGFkZCB0aGUgY29tbWFuZCB0byBhIHN1Ym1lbnUuXG4gICAqXG4gICAqIFRoZSByZWdpc3RyYXRpb24gY29udGV4dCB3aW5zIG92ZXIgdGhlIGNvbnN0cnVjdG9yIHZhbHVlOiBhIG1lbnUgc3VyZmFjZSB0aGF0IGFscmVhZHkgd3JhcHMgZXZlcnlcbiAgICogY29udHJpYnV0ZWQgaXRlbSBpbiBhIHBsdWdpbi10aXRsZWQgcGFyZW50IGVudHJ5IGZvcmNlcyB0aGlzIG9mZiwgYmVjYXVzZSBhIHNlY3Rpb24gc3VibWVudVxuICAgKiBkZWNsYXJlZCBoZXJlIHdvdWxkIG1ha2UgYE1lbnUuc29ydCgpYCBuZXN0IGEgc2Vjb25kIHBsdWdpbi10aXRsZWQgZW50cnkgaW5zaWRlIHRoZSBmaXJzdC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJhdGlvblNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPz8gdGhpcy5fc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBzaW5nbGUtZmlsZSBjb250ZXh0IG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHNpbmdsZS1maWxlIG1lbnUgY2hlY2suXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnVQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGFic3RyYWN0RmlsZTogX2Fic3RyYWN0RmlsZSwgbGVhZjogX2xlYWYsIHNvdXJjZTogX3NvdXJjZSB9ID0gcGFyYW1zO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBtdWx0aS1maWxlIGNvbnRleHQgbWVudS5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZWFjaCBmaWxlIGluZGl2aWR1YWxseS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbXVsdGktZmlsZSBtZW51IGNoZWNrLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgZmlsZXMgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51UGFyYW1zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhcmFtcy5hYnN0cmFjdEZpbGVzLmV2ZXJ5KChmKSA9PlxuICAgICAgdGhpcy5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGU6IGYsXG4gICAgICAgIGxlYWY6IHBhcmFtcy5sZWFmLFxuICAgICAgICBzb3VyY2U6IHBhcmFtcy5zb3VyY2VcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9Db21tYW5kUGFsZXR0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWJzdHJhY3RGaWxlTWVudShwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVySGFuZGxlQWJzdHJhY3RGaWxlTWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGFic3RyYWN0RmlsZSxcbiAgICAgIGxlYWYsXG4gICAgICBtZW51LFxuICAgICAgc291cmNlXG4gICAgfSA9IHBhcmFtcztcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGUsXG4gICAgICAgIGxlYWYsXG4gICAgICAgIHNvdXJjZVxuICAgICAgfSkgfHwgIXRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGUpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZmlsZU1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmZpbGVNZW51U3VibWVudUljb24gPz8gJycsXG4gICAgICAgIHRpdGxlOiBzZWN0aW9uXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtZW51LmFkZEl0ZW0oKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW1cbiAgICAgICAgLnNldFRpdGxlKHRoaXMuZmlsZU1lbnVJdGVtTmFtZSA/PyB0aGlzLm5hbWUpXG4gICAgICAgIC5zZXRJY29uKHRoaXMuaWNvbilcbiAgICAgICAgLnNldFNlY3Rpb24oc2VjdGlvbilcbiAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHRoaXMuZXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFic3RyYWN0RmlsZXNNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJIYW5kbGVBYnN0cmFjdEZpbGVzTWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGFic3RyYWN0RmlsZXMsXG4gICAgICBsZWFmLFxuICAgICAgbWVudSxcbiAgICAgIHNvdXJjZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudSh7XG4gICAgICAgIGFic3RyYWN0RmlsZXMsXG4gICAgICAgIGxlYWYsXG4gICAgICAgIHNvdXJjZVxuICAgICAgfSkgfHwgIXRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlcylcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5maWxlc01lbnVTZWN0aW9uID8/IHRoaXMuZmlsZU1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmZpbGVzTWVudVN1Ym1lbnVJY29uID8/IHRoaXMuZmlsZU1lbnVTdWJtZW51SWNvbiA/PyAnJyxcbiAgICAgICAgdGl0bGU6IHNlY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgaXRlbVxuICAgICAgICAuc2V0VGl0bGUodGhpcy5maWxlc01lbnVJdGVtTmFtZSA/PyB0aGlzLmZpbGVNZW51SXRlbU5hbWUgPz8gdGhpcy5uYW1lKVxuICAgICAgICAuc2V0SWNvbih0aGlzLmljb24pXG4gICAgICAgIC5zZXRTZWN0aW9uKHNlY3Rpb24pXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB0aGlzLmV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXMpKSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsSUFBSTtBQUNKLFFBQ0UsQ0FBQyxLQUFLLDRCQUE0QjtBQUFBLE1BQ2hDO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUMsS0FBSyxDQUFDLEtBQUssdUJBQXVCLFlBQVksR0FDL0M7QUFDQTtBQUFBLElBQ0Y7QUFFQSxVQUFNLFVBQVUsS0FBSyxtQkFBbUIsS0FBSztBQUM3QyxRQUFJLEtBQUssMEJBQTBCLEdBQUc7QUFDcEMsV0FBSyxrQkFBa0IsU0FBUztBQUFBLFFBQzlCLE1BQU0sS0FBSyx1QkFBdUI7QUFBQSxRQUNsQyxPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSDtBQUVBLFNBQUssUUFBUSxDQUFDLFNBQVM7QUFDckIsV0FDRyxTQUFTLEtBQUssb0JBQW9CLEtBQUssSUFBSSxFQUMzQyxRQUFRLEtBQUssSUFBSSxFQUNqQixXQUFXLE9BQU8sRUFDbEIsWUFBUSxpQ0FBbUIsWUFBWSxLQUFLLG9CQUFvQixZQUFZLENBQUMsQ0FBQztBQUFBLElBQ25GLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFFUSx3QkFBd0IsUUFBdUU7QUFDckcsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixRQUNFLENBQUMsS0FBSyw2QkFBNkI7QUFBQSxNQUNqQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDLEtBQUssQ0FBQyxLQUFLLHdCQUF3QixhQUFhLEdBQ2pEO0FBQ0E7QUFBQSxJQUNGO0FBRUEsVUFBTSxVQUFVLEtBQUssb0JBQW9CLEtBQUssbUJBQW1CLEtBQUs7QUFDdEUsUUFBSSxLQUFLLDBCQUEwQixHQUFHO0FBQ3BDLFdBQUssa0JBQWtCLFNBQVM7QUFBQSxRQUM5QixNQUFNLEtBQUssd0JBQXdCLEtBQUssdUJBQXVCO0FBQUEsUUFDL0QsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0g7QUFFQSxTQUFLLFFBQVEsQ0FBQyxTQUFTO0FBQ3JCLFdBQ0csU0FBUyxLQUFLLHFCQUFxQixLQUFLLG9CQUFvQixLQUFLLElBQUksRUFDckUsUUFBUSxLQUFLLElBQUksRUFDakIsV0FBVyxPQUFPLEVBQ2xCLFlBQVEsaUNBQW1CLFlBQVksS0FBSyxxQkFBcUIsYUFBYSxDQUFDLENBQUM7QUFBQSxJQUNyRixDQUFDO0FBQUEsRUFDSDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
416
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGFic3RyYWN0IGZpbGUgY29tbWFuZHMgd2l0aCBmaWxlL2ZpbGVzIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBJY29uTmFtZSxcbiAgTWVudSxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQge1xuICBjaGFpbixcbiAgY29udmVydEFzeW5jVG9TeW5jXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHsgQWN0aXZlRmlsZVByb3ZpZGVyIH0gZnJvbSAnLi4vYWN0aXZlLWZpbGUtcHJvdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zLFxuICBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHRcbn0gZnJvbSAnLi9jb21tYW5kLWhhbmRsZXIudHMnO1xuXG5pbXBvcnQgeyBHbG9iYWxDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vZ2xvYmFsLWNvbW1hbmQtaGFuZGxlci50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgYW4gYWJzdHJhY3QgZmlsZSBjb21tYW5kIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyBleHRlbmRzIENvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIHNpbmdsZS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudUl0ZW1OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIHNpbmdsZS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGljb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUgc3VibWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgc3VibWVudS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyLmhhbmRsZUFic3RyYWN0RmlsZU1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVySGFuZGxlQWJzdHJhY3RGaWxlTWVudVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBvciBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3Jrc3BhY2UgbGVhZiwgaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGVhZj86IHVuZGVmaW5lZCB8IFdvcmtzcGFjZUxlYWY7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW51IHRvIGFkZCBpdGVtcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IG1lbnU6IE1lbnU7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyLmhhbmRsZUFic3RyYWN0RmlsZXNNZW51fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckhhbmRsZUFic3RyYWN0RmlsZXNNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGxlYWY/OiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVudSB0byBhZGQgaXRlbXMgdG8uXG4gICAqL1xuICByZWFkb25seSBtZW51OiBNZW51O1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlci5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyU2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSBsZWFmPzogdW5kZWZpbmVkIHwgV29ya3NwYWNlTGVhZjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXIuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGxlYWY/OiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgYWJzdHJhY3QgZmlsZSBjb21tYW5kcy5cbiAqXG4gKiBIYW5kbGVzIGJvdGggc2luZ2xlLWZpbGUgYW5kIG11bHRpLWZpbGUgY29udGV4dCBtZW51cy5cbiAqIFN1YmNsYXNzZXMgb3ZlcnJpZGUge0BsaW5rIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGV9IGFuZCB7QGxpbmsgZXhlY3V0ZUFic3RyYWN0RmlsZX0uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlciBleHRlbmRzIEdsb2JhbENvbW1hbmRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIEdldCB0aGUgYWN0aXZlIGZpbGUgcHJvdmlkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhY3RpdmUgZmlsZSBwcm92aWRlci5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYWN0aXZlRmlsZVByb3ZpZGVyKCk6IEFjdGl2ZUZpbGVQcm92aWRlciB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuX2FjdGl2ZUZpbGVQcm92aWRlcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBjb21tYW5kIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51SXRlbU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZU1lbnVJdGVtTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBwbHVnaW4gbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZU1lbnVTZWN0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiwgb3IgYHVuZGVmaW5lZGAgZm9yIG5vIGljb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWxlTWVudVN1Ym1lbnVJY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gZmFsbCBiYWNrIHRvIHNpbmdsZS1maWxlIGl0ZW0gbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZXNNZW51SXRlbU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51SXRlbU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gZmFsbCBiYWNrIHRvIHNpbmdsZS1maWxlIHNlY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVzTWVudVNlY3Rpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgdW5kZWZpbmVkYCB0byBmYWxsIGJhY2sgdG8gc2luZ2xlLWZpbGUgc3VibWVudSBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlc01lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVzTWVudVN1Ym1lbnVJY29uO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlRmlsZVByb3ZpZGVyPzogQWN0aXZlRmlsZVByb3ZpZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlTWVudUl0ZW1OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfcmVnaXN0cmF0aW9uU2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGFic3RyYWN0IGZpbGUgY29tbWFuZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuX2ZpbGVNZW51SXRlbU5hbWUgPSBwYXJhbXMuZmlsZU1lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9maWxlTWVudVNlY3Rpb24gPSBwYXJhbXMuZmlsZU1lbnVTZWN0aW9uO1xuICAgIHRoaXMuX2ZpbGVNZW51U3VibWVudUljb24gPSBwYXJhbXMuZmlsZU1lbnVTdWJtZW51SWNvbjtcbiAgICB0aGlzLl9maWxlc01lbnVJdGVtTmFtZSA9IHBhcmFtcy5maWxlc01lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9maWxlc01lbnVTZWN0aW9uID0gcGFyYW1zLmZpbGVzTWVudVNlY3Rpb247XG4gICAgdGhpcy5fZmlsZXNNZW51U3VibWVudUljb24gPSBwYXJhbXMuZmlsZXNNZW51U3VibWVudUljb247XG4gICAgdGhpcy5fc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSA9IHBhcmFtcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBmaWxlLW1lbnUgYW5kIGZpbGVzLW1lbnUgZXZlbnQgaGFuZGxlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJlZ2lzdHJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9uUmVnaXN0ZXJlZChjb250ZXh0OiBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzdXBlci5vblJlZ2lzdGVyZWQoY29udGV4dCk7XG4gICAgdGhpcy5fYWN0aXZlRmlsZVByb3ZpZGVyID0gY29udGV4dC5hY3RpdmVGaWxlUHJvdmlkZXI7XG4gICAgdGhpcy5fcmVnaXN0cmF0aW9uU2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSA9IGNvbnRleHQuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgICBjb250ZXh0Lm1lbnVFdmVudFJlZ2lzdHJhci5yZWdpc3RlckZpbGVNZW51RXZlbnRIYW5kbGVyKChtZW51LCBhYnN0cmFjdEZpbGUsIHNvdXJjZSwgbGVhZikgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVBYnN0cmFjdEZpbGVNZW51KHtcbiAgICAgICAgYWJzdHJhY3RGaWxlLFxuICAgICAgICBsZWFmLFxuICAgICAgICBtZW51LFxuICAgICAgICBzb3VyY2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKChtZW51LCBhYnN0cmFjdEZpbGVzLCBzb3VyY2UsIGxlYWYpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlQWJzdHJhY3RGaWxlc01lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGVzLFxuICAgICAgICBsZWFmLFxuICAgICAgICBtZW51LFxuICAgICAgICBzb3VyY2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICogVXNlcyB0aGUgYWN0aXZlIGZpbGUgYXMgdGhlIHRhcmdldC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjYW5FeGVjdXRlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zaG91bGRBZGRUb0NvbW1hbmRQYWxldHRlKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVGaWxlID0gdGhpcy5nZXRBY3RpdmVGaWxlKCk7XG4gICAgcmV0dXJuICEhYWN0aXZlRmlsZSAmJiB0aGlzLmNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoYWN0aXZlRmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIGEgc2luZ2xlIGFic3RyYWN0IGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBfYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoX2Fic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZvciBtdWx0aXBsZSBhYnN0cmFjdCBmaWxlcy5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZWFjaCBmaWxlIGluZGl2aWR1YWxseS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZXMgLSBUaGUgZmlsZXMgb3IgZm9sZGVycy5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBjYW5FeGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlcy5sZW5ndGggPiAwICYmIGFic3RyYWN0RmlsZXMuZXZlcnkoKGYpID0+IHRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShmKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZnJvbSB0aGUgY29tbWFuZCBwYWxldHRlIHVzaW5nIHRoZSBhY3RpdmUgZmlsZS5cbiAgICpcbiAgICogQHJldHVybnMgYFByb21pc2FibGU8dm9pZD5gIHRoYXQgcmVzb2x2ZXMgd2hlbiBjb21tYW5kIGhhZCBiZWVuIGV4ZWN1dGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGV4ZWN1dGUoKTogUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgY29uc3QgYWN0aXZlRmlsZSA9IHRoaXMuZ2V0QWN0aXZlRmlsZSgpO1xuICAgIGlmIChhY3RpdmVGaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGFjdGl2ZUZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCBmb3IgYSBzaW5nbGUgYWJzdHJhY3QgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciBtdWx0aXBsZSBhYnN0cmFjdCBmaWxlcy5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBleGVjdXRlcyBzZXF1ZW50aWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEByZXR1cm5zIGBQcm9taXNhYmxlPHZvaWQ+YCB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGFic3RyYWN0IGZpbGVzIGhhdmUgYmVlbiBleGVjdXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBleGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBsZXQgcHJvbWlzZTogbnVsbCB8IFByb21pc2U8dm9pZD4gPSBudWxsO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBhYnN0cmFjdEZpbGVzKSB7XG4gICAgICBwcm9taXNlID0gY2hhaW4ocHJvbWlzZSwgKCkgPT4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFjdGl2ZSBmaWxlLCBpZiBhbnksIHRvIHVzZSBhcyB0aGUgdGFyZ2V0IHdoZW4gZXhlY3V0aW5nIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFjdGl2ZSBmaWxlIG9yIGBudWxsYCBpZiBub25lIGlzIGFjdGl2ZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRBY3RpdmVGaWxlKCk6IG51bGwgfCBUQWJzdHJhY3RGaWxlIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGaWxlUHJvdmlkZXIuZ2V0QWN0aXZlRmlsZSgpID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRvIGFkZCB0aGUgY29tbWFuZCB0byBhIHN1Ym1lbnUuXG4gICAqXG4gICAqIFRoZSByZWdpc3RyYXRpb24gY29udGV4dCB3aW5zIG92ZXIgdGhlIGNvbnN0cnVjdG9yIHZhbHVlOiBhIG1lbnUgc3VyZmFjZSB0aGF0IGFscmVhZHkgd3JhcHMgZXZlcnlcbiAgICogY29udHJpYnV0ZWQgaXRlbSBpbiBhIHBsdWdpbi10aXRsZWQgcGFyZW50IGVudHJ5IGZvcmNlcyB0aGlzIG9mZiwgYmVjYXVzZSBhIHNlY3Rpb24gc3VibWVudVxuICAgKiBkZWNsYXJlZCBoZXJlIHdvdWxkIG1ha2UgYE1lbnUuc29ydCgpYCBuZXN0IGEgc2Vjb25kIHBsdWdpbi10aXRsZWQgZW50cnkgaW5zaWRlIHRoZSBmaXJzdC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdHJhdGlvblNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPz8gdGhpcy5fc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBzaW5nbGUtZmlsZSBjb250ZXh0IG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHNpbmdsZS1maWxlIG1lbnUgY2hlY2suXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnVQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGFic3RyYWN0RmlsZTogX2Fic3RyYWN0RmlsZSwgbGVhZjogX2xlYWYsIHNvdXJjZTogX3NvdXJjZSB9ID0gcGFyYW1zO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBtdWx0aS1maWxlIGNvbnRleHQgbWVudS5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZWFjaCBmaWxlIGluZGl2aWR1YWxseS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgbXVsdGktZmlsZSBtZW51IGNoZWNrLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgZmlsZXMgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51UGFyYW1zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhcmFtcy5hYnN0cmFjdEZpbGVzLmV2ZXJ5KChmKSA9PlxuICAgICAgdGhpcy5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGU6IGYsXG4gICAgICAgIGxlYWY6IHBhcmFtcy5sZWFmLFxuICAgICAgICBzb3VyY2U6IHBhcmFtcy5zb3VyY2VcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9Db21tYW5kUGFsZXR0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWJzdHJhY3RGaWxlTWVudShwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVySGFuZGxlQWJzdHJhY3RGaWxlTWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGFic3RyYWN0RmlsZSxcbiAgICAgIGxlYWYsXG4gICAgICBtZW51LFxuICAgICAgc291cmNlXG4gICAgfSA9IHBhcmFtcztcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGUsXG4gICAgICAgIGxlYWYsXG4gICAgICAgIHNvdXJjZVxuICAgICAgfSkgfHwgIXRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGUpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZmlsZU1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmZpbGVNZW51U3VibWVudUljb24gPz8gJycsXG4gICAgICAgIHRpdGxlOiBzZWN0aW9uXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtZW51LmFkZEl0ZW0oKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW1cbiAgICAgICAgLnNldFRpdGxlKHRoaXMuZmlsZU1lbnVJdGVtTmFtZSA/PyB0aGlzLm5hbWUpXG4gICAgICAgIC5zZXRJY29uKHRoaXMuaWNvbilcbiAgICAgICAgLnNldFNlY3Rpb24oc2VjdGlvbilcbiAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHRoaXMuZXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGUpKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFic3RyYWN0RmlsZXNNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJIYW5kbGVBYnN0cmFjdEZpbGVzTWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGFic3RyYWN0RmlsZXMsXG4gICAgICBsZWFmLFxuICAgICAgbWVudSxcbiAgICAgIHNvdXJjZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudSh7XG4gICAgICAgIGFic3RyYWN0RmlsZXMsXG4gICAgICAgIGxlYWYsXG4gICAgICAgIHNvdXJjZVxuICAgICAgfSkgfHwgIXRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlcylcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5maWxlc01lbnVTZWN0aW9uID8/IHRoaXMuZmlsZU1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmZpbGVzTWVudVN1Ym1lbnVJY29uID8/IHRoaXMuZmlsZU1lbnVTdWJtZW51SWNvbiA/PyAnJyxcbiAgICAgICAgdGl0bGU6IHNlY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgaXRlbVxuICAgICAgICAuc2V0VGl0bGUodGhpcy5maWxlc01lbnVJdGVtTmFtZSA/PyB0aGlzLmZpbGVNZW51SXRlbU5hbWUgPz8gdGhpcy5uYW1lKVxuICAgICAgICAuc2V0SWNvbih0aGlzLmljb24pXG4gICAgICAgIC5zZXRTZWN0aW9uKHNlY3Rpb24pXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB0aGlzLmV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXMpKSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFB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QUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsSUFBSTtBQUNKLFFBQ0UsQ0FBQyxLQUFLLDRCQUE0QjtBQUFBLE1BQ2hDO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUMsS0FBSyxDQUFDLEtBQUssdUJBQXVCLFlBQVksR0FDL0M7QUFDQTtBQUFBLElBQ0Y7QUFFQSxVQUFNLFVBQVUsS0FBSyxtQkFBbUIsS0FBSztBQUM3QyxRQUFJLEtBQUssMEJBQTBCLEdBQUc7QUFDcEMsV0FBSyxrQkFBa0IsU0FBUztBQUFBLFFBQzlCLE1BQU0sS0FBSyx1QkFBdUI7QUFBQSxRQUNsQyxPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSDtBQUVBLFNBQUssUUFBUSxDQUFDLFNBQVM7QUFDckIsV0FDRyxTQUFTLEtBQUssb0JBQW9CLEtBQUssSUFBSSxFQUMzQyxRQUFRLEtBQUssSUFBSSxFQUNqQixXQUFXLE9BQU8sRUFDbEIsWUFBUSxpQ0FBbUIsWUFBWSxLQUFLLG9CQUFvQixZQUFZLENBQUMsQ0FBQztBQUFBLElBQ25GLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFFUSx3QkFBd0IsUUFBdUU7QUFDckcsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixRQUNFLENBQUMsS0FBSyw2QkFBNkI7QUFBQSxNQUNqQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDLEtBQUssQ0FBQyxLQUFLLHdCQUF3QixhQUFhLEdBQ2pEO0FBQ0E7QUFBQSxJQUNGO0FBRUEsVUFBTSxVQUFVLEtBQUssb0JBQW9CLEtBQUssbUJBQW1CLEtBQUs7QUFDdEUsUUFBSSxLQUFLLDBCQUEwQixHQUFHO0FBQ3BDLFdBQUssa0JBQWtCLFNBQVM7QUFBQSxRQUM5QixNQUFNLEtBQUssd0JBQXdCLEtBQUssdUJBQXVCO0FBQUEsUUFDL0QsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0g7QUFFQSxTQUFLLFFBQVEsQ0FBQyxTQUFTO0FBQ3JCLFdBQ0csU0FBUyxLQUFLLHFCQUFxQixLQUFLLG9CQUFvQixLQUFLLElBQUksRUFDckUsUUFBUSxLQUFLLElBQUksRUFDakIsV0FBVyxPQUFPLEVBQ2xCLFlBQVEsaUNBQW1CLFlBQVksS0FBSyxxQkFBcUIsYUFBYSxDQUFDLENBQUM7QUFBQSxJQUNyRixDQUFDO0FBQUEsRUFDSDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -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 keepName($unknown) {
@@ -46,17 +38,13 @@ function keepName($unknown) {
46
38
  }
47
39
 
48
40
  (function initCjs() {
49
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
50
41
  const globalThisRecord = globalThis;
51
42
  ensureDisposeSymbols();
52
- globalThisRecord['__name'] ??= keepName;
53
- globalThisRecord['__extractDefault'] ??= extractDefault;
54
-
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
55
45
  ensureBrowserProcess();
56
-
57
- // eslint-disable-next-line unicorn/consistent-function-scoping -- Serialized with initCjs into the banner; at module scope it would be left out of it.
58
46
  function extractDefault(module) {
59
- return module && module.__esModule && 'default' in module ? module.default : module;
47
+ return module && module.__esModule && "default" in module ? module.default : module;
60
48
  }
61
49
  })();
62
50
  })();
@@ -65,8 +53,6 @@ function keepName($unknown) {
65
53
  if (!originalRequire || originalRequire.__isPatched) {
66
54
  return;
67
55
  }
68
-
69
- // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
70
56
  require = Object.assign(
71
57
  (id) => requirePatched(id),
72
58
  originalRequire,
@@ -74,53 +60,45 @@ function keepName($unknown) {
74
60
  __isPatched: true
75
61
  }
76
62
  );
77
-
78
63
  function extractDefault(module) {
79
- return module && module.__esModule && 'default' in module ? module.default : module;
64
+ return module && module.__esModule && "default" in module ? module.default : module;
80
65
  }
81
-
82
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
83
- '@codemirror/autocomplete',
84
- '@codemirror/collab',
85
- '@codemirror/commands',
86
- '@codemirror/language',
87
- '@codemirror/lint',
88
- '@codemirror/search',
89
- '@codemirror/state',
90
- '@codemirror/text',
91
- '@codemirror/view',
92
- '@lezer/common',
93
- '@lezer/highlight',
94
- '@lezer/lr',
95
- 'obsidian']
96
- );
97
-
98
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
99
- '@codemirror/closebrackets',
100
- '@codemirror/comment',
101
- '@codemirror/fold',
102
- '@codemirror/gutter',
103
- '@codemirror/highlight',
104
- '@codemirror/history',
105
- '@codemirror/matchbrackets',
106
- '@codemirror/panel',
107
- '@codemirror/rangeset',
108
- '@codemirror/rectangular-selection',
109
- '@codemirror/stream-parser',
110
- '@codemirror/tooltip']
111
- );
112
-
66
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
67
+ "@codemirror/autocomplete",
68
+ "@codemirror/collab",
69
+ "@codemirror/commands",
70
+ "@codemirror/language",
71
+ "@codemirror/lint",
72
+ "@codemirror/search",
73
+ "@codemirror/state",
74
+ "@codemirror/text",
75
+ "@codemirror/view",
76
+ "@lezer/common",
77
+ "@lezer/highlight",
78
+ "@lezer/lr",
79
+ "obsidian"
80
+ ]);
81
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
82
+ "@codemirror/closebrackets",
83
+ "@codemirror/comment",
84
+ "@codemirror/fold",
85
+ "@codemirror/gutter",
86
+ "@codemirror/highlight",
87
+ "@codemirror/history",
88
+ "@codemirror/matchbrackets",
89
+ "@codemirror/panel",
90
+ "@codemirror/rangeset",
91
+ "@codemirror/rectangular-selection",
92
+ "@codemirror/stream-parser",
93
+ "@codemirror/tooltip"
94
+ ]);
113
95
  function requirePatched(id) {
114
96
  if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
115
97
  return originalRequire?.(id);
116
98
  }
117
-
118
- // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
119
99
  if (globalThis.app.isMobile) {
120
- if (id === 'process' || id === 'node:process') {
121
- // eslint-disable-next-line no-console -- Valid usage.
100
+ if (id === "process" || id === "node:process") {
122
101
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
123
-
124
102
  return process;
125
103
  }
126
104
  } else {
@@ -129,8 +107,6 @@ function keepName($unknown) {
129
107
  return extractDefault(module);
130
108
  }
131
109
  }
132
-
133
- // eslint-disable-next-line no-console -- Valid usage.
134
110
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
135
111
  return {};
136
112
  }
@@ -299,4 +275,4 @@ class CommandHandlerComponent extends import_component_ex.ComponentEx {
299
275
  0 && (module.exports = {
300
276
  CommandHandlerComponent
301
277
  });
302
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvY29tbWFuZC1oYW5kbGVyLWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IHJlZ2lzdGVycyB7QGxpbmsgQ29tbWFuZEhhbmRsZXJ9cyB3aXRoIE9ic2lkaWFuIGFuZCB0aWVzIHRoZWlyIHJlbW92YWwgdG8gYSBjaG9zZW4gbGlmZXRpbWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEaXNwb3NhYmxlRXggfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGlzcG9zYWJsZSc7XG5cbmltcG9ydCB7XG4gIENhbGxiYWNrRGlzcG9zYWJsZSxcbiAgQ29tYmluZURpc3Bvc2FibGUsXG4gIERpc3Bvc2FibGVCYXNlXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9kaXNwb3NhYmxlJztcblxuaW1wb3J0IHR5cGUgeyBBY3RpdmVGaWxlUHJvdmlkZXIgfSBmcm9tICcuLi9hY3RpdmUtZmlsZS1wcm92aWRlci50cyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIEVkaXRvck1lbnVFdmVudEhhbmRsZXIsXG4gIEZpbGVNZW51RXZlbnRIYW5kbGVyLFxuICBGaWxlc01lbnVFdmVudEhhbmRsZXIsXG4gIE1hcmtkb3duVmlld3BvcnRNZW51RXZlbnRIYW5kbGVyLFxuICBNZW51RXZlbnRSZWdpc3RyYXJcbn0gZnJvbSAnLi4vbWVudS1ldmVudC1yZWdpc3RyYXIudHMnO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kSGFuZGxlcixcbiAgQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0XG59IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5cbi8qKlxuICogQnVpbGRzIGEgZnJlc2ggc2V0IG9mIHtAbGluayBDb21tYW5kSGFuZGxlcn1zLlxuICpcbiAqIEEgZmFjdG9yeSByYXRoZXIgdGhhbiBhIHJlYWR5LW1hZGUgYXJyYXkgYmVjYXVzZSB7QGxpbmsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnR9IHJlZ2lzdGVycyB0aGUgc2FtZVxuICogaGFuZGxlcnMgYWdhaW5zdCBzZXZlcmFsIG1lbnUgc3VyZmFjZXMsIGFuZCBhIGhhbmRsZXIgY2FycmllcyBwZXItcmVnaXN0cmF0aW9uIHN0YXRlIChpdHNcbiAqIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBpdHMgcGx1Z2luIG5hbWUsIGFuZCB3aGF0ZXZlciBhIHN1YmNsYXNzIHJlY29yZHMgaW5cbiAqIHtAbGluayBDb21tYW5kSGFuZGxlci5vblJlZ2lzdGVyZWR9KSBcdTIwMTQgc28gZXZlcnkgc3VyZmFjZSBuZWVkcyBpdHMgb3duIGluc3RhbmNlcy5cbiAqXG4gKiBSZXR1cm5pbmcgc2hhcmVkIGluc3RhbmNlcyAoYCgpID0+IFtoYW5kbGVyMVNpbmdsZXRvbiwgaGFuZGxlcjJTaW5nbGV0b25dYCkgcmVpbnRyb2R1Y2VzIGV4YWN0bHkgdGhlXG4gKiBidWcgdGhlIGZhY3RvcnkgZXhpc3RzIHRvIGF2b2lkLCBzbyBpdCBpcyBub3QgbWVyZWx5IGRpc2NvdXJhZ2VkOiB7QGxpbmsgQ29tbWFuZEhhbmRsZXIub25SZWdpc3RlcmVkfVxuICogdGhyb3dzIG9uIHRoZSBzZWNvbmQgcmVnaXN0cmF0aW9uIG9mIGFuIGluc3RhbmNlLiB7QGxpbmsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQucmVnaXN0ZXJDb21tYW5kSGFuZGxlcnN9XG4gKiBhd2FpdHMgaXQsIHNvIHRoYXQgdGhyb3cgcmVqZWN0cyB0aGUgY2FsbGVyJ3MgcHJvbWlzZSBpbnN0ZWFkIG9mIGRlZ3JhZGluZyBpbnRvIGEgd3JvbmcgY29udGV4dCBtZW51LlxuICpcbiAqIEByZXR1cm5zIFRoZSBjb21tYW5kIGhhbmRsZXJzIHRvIHJlZ2lzdGVyLiBBIE5FVyBpbnN0YW5jZSBvZiBlYWNoIG9uIGV2ZXJ5IGNhbGwuXG4gKi9cbmV4cG9ydCB0eXBlIENvbW1hbmRIYW5kbGVyRmFjdG9yeSA9ICgpID0+IENvbW1hbmRIYW5kbGVyW107XG5cbmludGVyZmFjZSBDb21tYW5kSGFuZGxlckNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWN0aXZlRmlsZVByb3ZpZGVyOiBBY3RpdmVGaWxlUHJvdmlkZXI7XG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzPzogcmVhZG9ubHkgTWVudUV2ZW50UmVnaXN0cmFyW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBsaWZldGltZSBvd25lciBmb3IgYSByZWdpc3RyYXRpb24gdGhhdCBuYW1lcyBub25lIG9mIGl0cyBvd24uXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgZXZlcnkgcmVnaXN0cmF0aW9uIGlzIG93bmVkIGJ5IHRoZSBjb21wb25lbnQgaXRzZWxmLCBzbyBpdHMgdW5sb2FkIHJlbW92ZXMgZXZlcnkgY29tbWFuZFxuICAgKiBpdCByZWdpc3RlcmVkIFx1MjAxNCB0aGUgYmVoYXZpb3IgYSBzdGFuZGFsb25lIGNvbXBvbmVudCBoYXMgYWx3YXlzIGhhZC4gTm8gYEBkZWZhdWx0YCB0YWcsIGJlY2F1c2UgdGhlXG4gICAqIGVmZmVjdGl2ZSBkZWZhdWx0IGlzIGEgY2xvc3VyZSBvdmVyIGB0aGlzYCByYXRoZXIgdGhhbiBhIGxpdGVyYWwgb3IgYSBsaW5rYWJsZSBzeW1ib2wuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kTGlmZXRpbWVPd25lclByb3ZpZGVyPzogQ29tbWFuZExpZmV0aW1lT3duZXJQcm92aWRlciB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgY29tbWFuZFJlZ2lzdHJhcjogQ29tbWFuZFJlZ2lzdHJhcjtcbiAgcmVhZG9ubHkgbWVudUV2ZW50UmVnaXN0cmFyOiBNZW51RXZlbnRSZWdpc3RyYXI7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50UmVnaXN0ZXJDb21tYW5kSGFuZGxlcnNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgd2hvc2UgdW5sb2FkIHJlbW92ZXMgdGhlIGNvbW1hbmRzIHRoaXMgY2FsbCByZWdpc3RlcnMsIG92ZXJyaWRpbmcgdGhlIGNvbXBvbmVudCdzXG4gICAqIHtAbGluayBDb21tYW5kTGlmZXRpbWVPd25lclByb3ZpZGVyfSBmb3IgdGhpcyBvbmUgY2FsbC5cbiAgICpcbiAgICogTmFtZSBvbmUgd2hlbiB0aGUgYmF0Y2gncyBsaWZldGltZSBkaWZmZXJzIGZyb20gdGhlIGRlZmF1bHQgXHUyMDE0IHRoZSBjYWxsZXIgdGhhdCBuZWVkcyBpdCBpcyBvbmVcbiAgICogcmVnaXN0ZXJpbmcgdGhyb3VnaCBhIGNvbXBvbmVudCB3aG9zZSBkZWZhdWx0IG93bmVyIGlzIHNvbWUgU0hPUlRFUi1saXZlZCBzdXJmYWNlLCBhbmQgd2hvc2Ugb3duXG4gICAqIGNvbW1hbmRzIGhhdmUgdG8gb3V0bGl2ZSBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGxpZmV0aW1lT3duZXI/OiBDb21wb25lbnRFeCB8IHVuZGVmaW5lZDtcbn1cblxuaW50ZXJmYWNlIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50UmVnaXN0ZXJNZW51RXZlbnRIYW5kbGVyc1BhcmFtcyB7XG4gIHJlYWRvbmx5IGNvbW1hbmRIYW5kbGVyOiBDb21tYW5kSGFuZGxlcjtcbiAgcmVhZG9ubHkgbWVudUV2ZW50UmVnaXN0cmFyOiBNZW51RXZlbnRSZWdpc3RyYXI7XG4gIHJlYWRvbmx5IHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBjb21wb25lbnQgdGhhdCBvd25zIHRoZSB0ZWFyZG93biBvZiB0aGUgY29tbWFuZHMgYSB7QGxpbmsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQucmVnaXN0ZXJDb21tYW5kSGFuZGxlcnN9XG4gKiBjYWxsIHJlZ2lzdGVycyBcdTIwMTQgdGhlIG9uZSB3aG9zZSB1bmxvYWQgcmVtb3ZlcyB0aGVtIGZyb20gdGhlIHBhbGV0dGUuXG4gKlxuICogQSBwcm92aWRlciByYXRoZXIgdGhhbiBhIGNvbXBvbmVudCwgYmVjYXVzZSB0aGUgb3duZXIgaXMgbm90IHN0YWJsZSBmb3IgdGhlIGxpZmUgb2YgdGhlIHJlZ2lzdGVyaW5nXG4gKiBjb21wb25lbnQuIGBQbHVnaW5CYXNlYCBoYW5kcyBiYWNrIHRoZSB3cmFwcGVyIGhvbGRpbmcgdGhlIHBsdWdpbidzIGZlYXR1cmUgc3VyZmFjZSwgYW5kIHRoYXQgd3JhcHBlciBpc1xuICogUkVQTEFDRUQgd2hvbGVzYWxlIGV2ZXJ5IHRpbWUgdGhlIHN1cmZhY2UgZ29lcyBkb3duIGFuZCBjb21lcyBiYWNrIChhIGRlY2xhcmVkIGRlcGVuZGVuY3kgbG9zdCBhbmRcbiAqIHJlZ2FpbmVkLCBhIGRlY2xhcmVkIGNvbmZsaWN0IGFwcGVhcmluZyBhbmQgYmVpbmcgcmVzb2x2ZWQpLiBBIHZhbHVlIGNhcHR1cmVkIG9uY2Ugd291bGQgdGllIHRoZSBzZWNvbmRcbiAqIGN5Y2xlJ3MgY29tbWFuZHMgdG8gdGhlIGZpcnN0IGN5Y2xlJ3MgZGVhZCB3cmFwcGVyLCB3aGVyZSBub3RoaW5nIHdvdWxkIGV2ZXIgZGlzcG9zZSB0aGVtLlxuICpcbiAqIEByZXR1cm5zIFRoZSBjb21wb25lbnQgdGhhdCBzaG91bGQgb3duIHRoZSByZWdpc3RyYXRpb24ncyB0ZWFyZG93bi5cbiAqL1xudHlwZSBDb21tYW5kTGlmZXRpbWVPd25lclByb3ZpZGVyID0gKCkgPT4gQ29tcG9uZW50RXg7XG5cbi8qKlxuICogQSBwZXItY29tbWFuZCB7QGxpbmsgTWVudUV2ZW50UmVnaXN0cmFyfSB0aGF0IGRlbGVnYXRlcyB0byBhIHNoYXJlZCByZWdpc3RyYXIgd2hpbGUgY29sbGVjdGluZyB0aGVcbiAqIHtAbGluayBEaXNwb3NhYmxlRXh9IGVhY2ggcmVnaXN0cmF0aW9uIHJldHVybnMsIHNvIGRpc3Bvc2luZyB0aGlzIHNjb3BlIHVucmVnaXN0ZXJzIGV4YWN0bHkgdGhhdCBjb21tYW5kJ3NcbiAqIG1lbnUgZXZlbnRzLiBBIGhhbmRsZXIgbWF5IGtlZXAgdGhlIHNjb3BlIHBhc3Qge0BsaW5rIENvbW1hbmRIYW5kbGVyLm9uUmVnaXN0ZXJlZH0gYW5kIHJlZ2lzdGVyIG1lbnUgZXZlbnRzXG4gKiBsYXRlciBcdTIwMTQgYSBicmlkZ2UgYmluZGluZyBhdCBsYXlvdXQtcmVhZHksIHNheSBcdTIwMTQgc28gYSByZWdpc3RyYXRpb24gdGhhdCBhcnJpdmVzIGFmdGVyIHRoaXMgc2NvcGUgd2FzIGRpc3Bvc2VkXG4gKiBpcyBkaXNwb3NlZCBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGxlYWtpbmcuXG4gKi9cbmNsYXNzIENvbW1hbmRNZW51RXZlbnRTY29wZSBleHRlbmRzIERpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgTWVudUV2ZW50UmVnaXN0cmFyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUV4W10gPSBbXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbm5lcjogTWVudUV2ZW50UmVnaXN0cmFyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckVkaXRvck1lbnVFdmVudEhhbmRsZXIoaGFuZGxlcjogRWRpdG9yTWVudUV2ZW50SGFuZGxlcik6IERpc3Bvc2FibGVFeCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdCh0aGlzLmlubmVyLnJlZ2lzdGVyRWRpdG9yTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyKSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJGaWxlTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyOiBGaWxlTWVudUV2ZW50SGFuZGxlcik6IERpc3Bvc2FibGVFeCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdCh0aGlzLmlubmVyLnJlZ2lzdGVyRmlsZU1lbnVFdmVudEhhbmRsZXIoaGFuZGxlcikpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXI6IEZpbGVzTWVudUV2ZW50SGFuZGxlcik6IERpc3Bvc2FibGVFeCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdCh0aGlzLmlubmVyLnJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXIpKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck1hcmtkb3duVmlld3BvcnRNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXI6IE1hcmtkb3duVmlld3BvcnRNZW51RXZlbnRIYW5kbGVyKTogRGlzcG9zYWJsZUV4IHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0KHRoaXMuaW5uZXIucmVnaXN0ZXJNYXJrZG93blZpZXdwb3J0TWVudUV2ZW50SGFuZGxlcihoYW5kbGVyKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcGVyZm9ybURpc3Bvc2UoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBkaXNwb3NhYmxlIG9mIHRoaXMuZGlzcG9zYWJsZXMpIHtcbiAgICAgIGRpc3Bvc2FibGUuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLmRpc3Bvc2FibGVzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3QoZGlzcG9zYWJsZTogRGlzcG9zYWJsZUV4KTogRGlzcG9zYWJsZUV4IHtcbiAgICBpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG4gICAgICBkaXNwb3NhYmxlLmRpc3Bvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwb3NhYmxlcy5wdXNoKGRpc3Bvc2FibGUpO1xuICAgIH1cblxuICAgIHJldHVybiBkaXNwb3NhYmxlO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHtAbGluayBDb21tYW5kSGFuZGxlcn1zIHdpdGggT2JzaWRpYW4gYW5kIG1hbmFnZXMgdGhlaXIgbGlmZWN5Y2xlLlxuICpcbiAqIENhbGwge0BsaW5rIHJlZ2lzdGVyQ29tbWFuZEhhbmRsZXJzfSB0byByZWdpc3RlciBhIGJhdGNoIG9mIGhhbmRsZXJzIG9uIGRlbWFuZCAoYXMgbWFueSB0aW1lcyBhc1xuICogbmVlZGVkIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgYWxpdmUpOyBkaXNwb3NlIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0byB1bnJlZ2lzdGVyIGV4YWN0bHlcbiAqIHRob3NlIGhhbmRsZXJzIFx1MjAxNCBpbmNsdWRpbmcgYW55IG1lbnUgZXZlbnRzIHRoZXkgcmVnaXN0ZXJlZCBcdTIwMTQgb3IgbGV0IHRoZSBiYXRjaCdzIExJRkVUSU1FIE9XTkVSIHVubG9hZCB0b1xuICogcmVtb3ZlIGV2ZXJ5IGNvbW1hbmQgc3RpbGwgcmVnaXN0ZXJlZCB0aHJvdWdoIGl0LlxuICpcbiAqIFRoYXQgb3duZXIgaXMgdGhpcyBjb21wb25lbnQgYnkgZGVmYXVsdCwgd2hpY2ggaXMgd2h5IGEgc3RhbmRhbG9uZSBjb21wb25lbnQgcmVtb3ZlcyBpdHMgb3duIGNvbW1hbmRzXG4gKiB3aGVuIGl0IHVubG9hZHMuIEl0IGlzIG92ZXJyaWRhYmxlIGJlY2F1c2UgdGhlIHJlZ2lzdGVyaW5nIGNvbXBvbmVudCBhbmQgdGhlIHJlZ2lzdGVyZWQgY29tbWFuZHMgZG8gbm90XG4gKiBhbHdheXMgc2hhcmUgYSBsaWZldGltZTogYFBsdWdpbkJhc2VgIGtlZXBzIE9ORSBvZiB0aGVzZSBydW5uaW5nIGZvciB0aGUgd2hvbGUgbGlmZSBvZiB0aGUgcGx1Z2luIFx1MjAxNCBpdCBpc1xuICogd2hhdCB0aGUgXCJ5b3VyIGRlcGVuZGVuY3kgd2VudCBhd2F5XCIgbm90aWNlIGlzIGJ1aWx0IGJlc2lkZSBcdTIwMTQgd2hpbGUgdGhlIGNvbW1hbmRzIGEgc3ViY2xhc3MgcmVnaXN0ZXJzIGZyb21cbiAqIGBvbmxvYWRJbXBsYCBiZWxvbmcgdG8gdGhlIGZlYXR1cmUgc3VyZmFjZSB0aGUgZ2F0ZSB0ZWFycyBkb3duIGFuZCByZWJ1aWxkcyB1bmRlcm5lYXRoIGl0LiBTbyB0aGUgb3duZXIgaXNcbiAqIHJlc29sdmVkIHBlciBjYWxsLCBmcm9tIGEge0BsaW5rIENvbW1hbmRMaWZldGltZU93bmVyUHJvdmlkZXJ9IG9yIGZyb20gdGhlIGNhbGwncyBvd24gYGxpZmV0aW1lT3duZXJgLlxuICpcbiAqIFRoZSBzYW1lIGhhbmRsZXJzIGFyZSBmZWQgdG8gZXZlcnkgbWVudSBzdXJmYWNlIHRoZSBjb21wb25lbnQga25vd3MgYWJvdXQ6IE9ic2lkaWFuJ3Mgb3duIHdvcmtzcGFjZVxuICogZXZlbnRzLCBwbHVzIGVhY2ggYWRkaXRpb25hbCB7QGxpbmsgTWVudUV2ZW50UmVnaXN0cmFyfSBicmlkZ2luZyBhbm90aGVyIHBsdWdpbidzIG1lbnVzLlxuICovXG5leHBvcnQgY2xhc3MgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBQcm92aWRlciBmb3IgYWNjZXNzaW5nIHRoZSBjdXJyZW50bHkgYWN0aXZlIGZpbGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWN0aXZlRmlsZVByb3ZpZGVyOiBBY3RpdmVGaWxlUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhcnMgZm9yIG1lbnUgc3VyZmFjZXMgdGhhdCBidWlsZCB0aGVpciBvd24gcGx1Z2luLXRpdGxlZCBwYXJlbnQgZW50cnksIGFuZCB0aGVyZWZvcmUgdGFrZVxuICAgKiB0aGUgaGFuZGxlcnMgd2l0aCB0aGVpciBzZWN0aW9uIHN1Ym1lbnUgZm9yY2VkIG9mZi5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFyczogcmVhZG9ubHkgTWVudUV2ZW50UmVnaXN0cmFyW107XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhciB1c2VkIHRvIGFkZCBhbmQgcmVtb3ZlIGNvbW1hbmRzIHdpdGggT2JzaWRpYW4uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29tbWFuZFJlZ2lzdHJhcjogQ29tbWFuZFJlZ2lzdHJhcjtcblxuICAvKipcbiAgICogUmVnaXN0cmFyIGZvciBtZW51IGV2ZW50IGhhbmRsZXJzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1lbnVFdmVudFJlZ2lzdHJhcjogTWVudUV2ZW50UmVnaXN0cmFyO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHRoYXQgb3ducyB0aGUgY29tbWFuZHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZExpZmV0aW1lT3duZXJQcm92aWRlcjogQ29tbWFuZExpZmV0aW1lT3duZXJQcm92aWRlcjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDb21tYW5kSGFuZGxlckNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFjdGl2ZUZpbGVQcm92aWRlciA9IHBhcmFtcy5hY3RpdmVGaWxlUHJvdmlkZXI7XG4gICAgdGhpcy5tZW51RXZlbnRSZWdpc3RyYXIgPSBwYXJhbXMubWVudUV2ZW50UmVnaXN0cmFyO1xuICAgIHRoaXMuYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnMgPSBwYXJhbXMuYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnMgPz8gW107XG4gICAgdGhpcy5jb21tYW5kUmVnaXN0cmFyID0gcGFyYW1zLmNvbW1hbmRSZWdpc3RyYXI7XG4gICAgdGhpcy5wbHVnaW5OYW1lID0gcGFyYW1zLnBsdWdpbk5hbWU7XG4gICAgdGhpcy5jb21tYW5kTGlmZXRpbWVPd25lclByb3ZpZGVyID0gcGFyYW1zLmNvbW1hbmRMaWZldGltZU93bmVyUHJvdmlkZXIgPz8gKCgpOiBDb21wb25lbnRFeCA9PiB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHJlZ2lzdGVycyB0aGVtIHdpdGggT2JzaWRpYW4sIGdpdmluZyBlYWNoIGl0cyBvd24gcnVudGltZVxuICAgKiByZWdpc3RyYXRpb24gY29udGV4dC4gRWFjaCBoYW5kbGVyJ3MgY29tbWFuZCBpcyBhZGRlZCBpbW1lZGlhdGVseTsgdGhlIHJldHVybmVkXG4gICAqIHtAbGluayBEaXNwb3NhYmxlRXh9IHJlbW92ZXMgdGhlIGNvbW1hbmRzIHJlZ2lzdGVyZWQgYnkgdGhpcyBjYWxsIFx1MjAxNCBhbmQgYW55IG1lbnUgZXZlbnRzIHRob3NlXG4gICAqIGhhbmRsZXJzIHJlZ2lzdGVyZWQgdmlhIHRoZWlyIGNvbnRleHQncyB7QGxpbmsgTWVudUV2ZW50UmVnaXN0cmFyfSBcdTIwMTQgd2hlbiBkaXNwb3NlZC4gQW55IGNvbW1hbmRcbiAgICogc3RpbGwgcmVnaXN0ZXJlZCB3aGVuIHRoZSBjb21wb25lbnQgdW5sb2FkcyBpcyByZW1vdmVkIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIFRoZSBmYWN0b3J5IGlzIGludm9rZWQgb25jZSBtb3JlIGZvciBldmVyeSBhZGRpdGlvbmFsIG1lbnUgc3VyZmFjZSwgc28gYSBwbHVnaW4gZGVjbGFyZXMgaXRzXG4gICAqIGhhbmRsZXJzIE9OQ0UgYW5kIGFsbCBzdXJmYWNlcyBhcmUgZmVkLiBUaG9zZSBleHRyYSBwYXNzZXMgYWRkIG5vIGNvbW1hbmRzIFx1MjAxNCB0aGUgcGFsZXR0ZSBhbHJlYWR5XG4gICAqIGhhcyBldmVyeSBjb21tYW5kIGZyb20gdGhlIGZpcnN0IHBhc3MuXG4gICAqXG4gICAqIFdoaWNoIGNvbXBvbmVudCdzIHVubG9hZCByZW1vdmVzIHRoZW0gaXMgdGhlIGNhbGxlcidzIHRvIGNob29zZTogYG9wdGlvbnMubGlmZXRpbWVPd25lcmAgZm9yIHRoaXMgb25lXG4gICAqIGJhdGNoLCBvdGhlcndpc2Ugd2hhdGV2ZXIgdGhpcyBjb21wb25lbnQncyB7QGxpbmsgQ29tbWFuZExpZmV0aW1lT3duZXJQcm92aWRlcn0gcmVzb2x2ZXMgdG8sIHdoaWNoXG4gICAqIGRlZmF1bHRzIHRvIHRoZSBjb21wb25lbnQgaXRzZWxmLiBBIGNvbW1hbmQgbXVzdCBuZXZlciBvdXRsaXZlIHRoZSBjb2xsYWJvcmF0b3JzIGl0cyBoYW5kbGVyIGNsb3Nlc1xuICAgKiBvdmVyIFx1MjAxNCBsZWZ0IG9uIGEgbG9uZ2VyLWxpdmVkIG93bmVyIGl0IHN0YXlzIGluIHRoZSBwYWxldHRlIGNhbGxpbmcgaW50byB0b3JuLWRvd24gb2JqZWN0cyBcdTIwMTQgc28gdGhlXG4gICAqIG93bmVyIHRvIG5hbWUgaXMgdGhlIHNob3J0ZXN0LWxpdmVkIHRoaW5nIHRoZSBiYXRjaCBkZXBlbmRzIG9uLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZEhhbmRsZXJGYWN0b3J5IC0gQnVpbGRzIGEgZnJlc2ggc2V0IG9mIGNvbW1hbmQgaGFuZGxlcnMsIG9uY2UgcGVyIG1lbnUgc3VyZmFjZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcmVnaXN0cmF0aW9uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlcnMgKGNvbW1hbmRzICsgbWVudSBldmVudHMpIHJlZ2lzdGVyZWQgYnkgdGhpcyBjYWxsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyQ29tbWFuZEhhbmRsZXJzKGNvbW1hbmRIYW5kbGVyRmFjdG9yeTogQ29tbWFuZEhhbmRsZXJGYWN0b3J5LCBvcHRpb25zPzogQ29tbWFuZEhhbmRsZXJDb21wb25lbnRSZWdpc3RlckNvbW1hbmRIYW5kbGVyc09wdGlvbnMpOiBQcm9taXNlPERpc3Bvc2FibGVFeD4ge1xuICAgIC8vIFJlc29sdmVkIHBlciBjYWxsLCBuZXZlciBjYXB0dXJlZCBhdCBjb25zdHJ1Y3Rpb246IGEgcHJvdmlkZXIncyBhbnN3ZXIgY2hhbmdlcyBvdmVyIHRoZSBjb21wb25lbnQnc1xuICAgIC8vIGxpZmUuIGBQbHVnaW5CYXNlYCByZXR1cm5zIHRoZSB3cmFwcGVyIGhvbGRpbmcgdGhlIGZlYXR1cmUgc3VyZmFjZSwgYW5kIHRoYXQgd3JhcHBlciBpcyByZXBsYWNlZFxuICAgIC8vIHdob2xlc2FsZSBvbiBldmVyeSBnYXRlIGN5Y2xlIFx1MjAxNCBzbyB0aGlzIGN5Y2xlJ3MgY29tbWFuZHMgaGF2ZSB0byBsYW5kIG9uIHRoaXMgY3ljbGUncyB3cmFwcGVyLlxuICAgIGNvbnN0IGxpZmV0aW1lT3duZXIgPSBvcHRpb25zPy5saWZldGltZU93bmVyID8/IHRoaXMuY29tbWFuZExpZmV0aW1lT3duZXJQcm92aWRlcigpO1xuICAgIGNvbnN0IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbW1hbmRIYW5kbGVyIG9mIGNvbW1hbmRIYW5kbGVyRmFjdG9yeSgpKSB7XG4gICAgICBjb25zdCBjb21tYW5kID0gY29tbWFuZEhhbmRsZXIuYnVpbGRDb21tYW5kKCk7XG4gICAgICAvLyBDYXB0dXJlIHRoZSBpZCBiZWZvcmUgcmVnaXN0ZXJpbmcuIGBQbHVnaW4uYWRkQ29tbWFuZGAgbXV0YXRlcyBgY29tbWFuZC5pZGAgKHByZWZpeGluZyBpdCB3aXRoXG4gICAgICAvLyBgdGhpcy5tYW5pZmVzdC5pZGApLCB3aGlsZSBgUGx1Z2luLnJlbW92ZUNvbW1hbmRgIHJlLXByZWZpeGVzIFx1MjAxNCBzbyByZW1vdmFsIG5lZWRzIHRoZSBvcmlnaW5hbCBpZC5cbiAgICAgIC8vIFJlYWRpbmcgYGNvbW1hbmQuaWRgIGFmdGVyIGBhZGRDb21tYW5kYCB3b3VsZCBkb3VibGUtcHJlZml4IGl0LCBzbyB0aGUgY29tbWFuZCBpcyBuZXZlciByZW1vdmVkLlxuICAgICAgY29uc3QgY29tbWFuZElkID0gY29tbWFuZC5pZDtcbiAgICAgIHRoaXMuY29tbWFuZFJlZ2lzdHJhci5hZGRDb21tYW5kKGNvbW1hbmQpO1xuXG4gICAgICAvLyBFYWNoIGNvbW1hbmQgZ2V0cyBpdHMgb3duIHJlZ2lzdHJhdGlvbiBjb250ZXh0IHdpdGggYSBwZXItY29tbWFuZCBtZW51LWV2ZW50IHNjb3BlLCBzbyBkaXNwb3Npbmcgb25lXG4gICAgICAvLyBjb21tYW5kIHRlYXJzIGRvd24gaXRzIG93biBtZW51IGV2ZW50cyB3aXRob3V0IGFmZmVjdGluZyB0aGUgb3RoZXJzLlxuICAgICAgY29uc3QgbWVudUV2ZW50U2NvcGUgPSBhd2FpdCB0aGlzLnJlZ2lzdGVyTWVudUV2ZW50SGFuZGxlcnMoeyBjb21tYW5kSGFuZGxlciwgbWVudUV2ZW50UmVnaXN0cmFyOiB0aGlzLm1lbnVFdmVudFJlZ2lzdHJhciB9KTtcblxuICAgICAgY29uc3QgZGlzcG9zYWJsZSA9IG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgICAgICBjYWxsYmFjazogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuY29tbWFuZFJlZ2lzdHJhci5yZW1vdmVDb21tYW5kKGNvbW1hbmRJZCk7XG4gICAgICAgICAgbWVudUV2ZW50U2NvcGUuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIFRpZSByZW1vdmFsIHRvIHRoZSBsaWZldGltZSBvd25lcidzIHVubG9hZCwgc28gYSBjb21tYW5kIG5ldmVyIG91dGxpdmVzIHdoYXQgaXQgY2FsbHMgaW50by5cbiAgICAgIGRpc3Bvc2FibGVzLnB1c2gobGlmZXRpbWVPd25lci5yZWdpc3RlckRpc3Bvc2FibGUoZGlzcG9zYWJsZSkpO1xuICAgIH1cblxuICAgIC8vIEV2ZXJ5IGFkZGl0aW9uYWwgc3VyZmFjZSBnZXRzIGl0cyBPV04gaGFuZGxlciBpbnN0YW5jZXMgXHUyMDE0IGEgaGFuZGxlciBjYXJyaWVzIHBlci1yZWdpc3RyYXRpb25cbiAgICAvLyBzdGF0ZSwgc28gb25lIGluc3RhbmNlIGNhbm5vdCBzZXJ2ZSB0d28gc3VyZmFjZXMgXHUyMDE0IGFuZCB0YWtlcyB0aGVtIHdpdGggdGhlIHNlY3Rpb24gc3VibWVudVxuICAgIC8vIGZvcmNlZCBvZmYsIGJlY2F1c2Ugc3VjaCBhIHN1cmZhY2Ugd3JhcHMgZXZlcnl0aGluZyBpbiBhIHBsdWdpbi10aXRsZWQgcGFyZW50IGVudHJ5IG9mIGl0cyBvd24uXG4gICAgZm9yIChjb25zdCBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFyIG9mIHRoaXMuYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnMpIHtcbiAgICAgIGZvciAoY29uc3QgY29tbWFuZEhhbmRsZXIgb2YgY29tbWFuZEhhbmRsZXJGYWN0b3J5KCkpIHtcbiAgICAgICAgZGlzcG9zYWJsZXMucHVzaChsaWZldGltZU93bmVyLnJlZ2lzdGVyRGlzcG9zYWJsZShhd2FpdCB0aGlzLnJlZ2lzdGVyTWVudUV2ZW50SGFuZGxlcnMoeyBjb21tYW5kSGFuZGxlciwgbWVudUV2ZW50UmVnaXN0cmFyOiBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFyLCBzaG91bGRBZGRDb21tYW5kVG9TdWJtZW51OiBmYWxzZSB9KSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ29tYmluZURpc3Bvc2FibGUoeyBkaXNwb3NhYmxlcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kcyBhIGNvbW1hbmQgaGFuZGxlciBpdHMgcmVnaXN0cmF0aW9uIGNvbnRleHQsIHNjb3BlZCBzbyB0aGF0IGRpc3Bvc2luZyB0aGUgcmV0dXJuZWQgc2NvcGVcbiAgICogdW5yZWdpc3RlcnMgZXhhY3RseSB0aGUgbWVudSBldmVudHMgdGhhdCBoYW5kbGVyIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhpcyByZWdpc3RyYXRpb24uXG4gICAqIEByZXR1cm5zIFRoZSBoYW5kbGVyJ3MgbWVudS1ldmVudCBzY29wZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJNZW51RXZlbnRIYW5kbGVycyhwYXJhbXM6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50UmVnaXN0ZXJNZW51RXZlbnRIYW5kbGVyc1BhcmFtcyk6IFByb21pc2U8Q29tbWFuZE1lbnVFdmVudFNjb3BlPiB7XG4gICAgY29uc3QgbWVudUV2ZW50U2NvcGUgPSBuZXcgQ29tbWFuZE1lbnVFdmVudFNjb3BlKHBhcmFtcy5tZW51RXZlbnRSZWdpc3RyYXIpO1xuICAgIGNvbnN0IGNvbnRleHQ6IENvbW1hbmRIYW5kbGVyUmVnaXN0cmF0aW9uQ29udGV4dCA9IHtcbiAgICAgIGFjdGl2ZUZpbGVQcm92aWRlcjogdGhpcy5hY3RpdmVGaWxlUHJvdmlkZXIsXG4gICAgICBtZW51RXZlbnRSZWdpc3RyYXI6IG1lbnVFdmVudFNjb3BlLFxuICAgICAgcGx1Z2luTmFtZTogdGhpcy5wbHVnaW5OYW1lLFxuICAgICAgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTogcGFyYW1zLnNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnVcbiAgICB9O1xuICAgIGF3YWl0IHBhcmFtcy5jb21tYW5kSGFuZGxlci5vblJlZ2lzdGVyZWQoY29udGV4dCk7XG4gICAgcmV0dXJuIG1lbnVFdmVudFNjb3BlO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsd0JBSU87QUFnQlAsMEJBQTRCO0FBMkU1QixNQUFNLDhCQUE4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
278
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmQtaGFuZGxlcnMvY29tbWFuZC1oYW5kbGVyLWNvbXBvbmVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IHJlZ2lzdGVycyB7QGxpbmsgQ29tbWFuZEhhbmRsZXJ9cyB3aXRoIE9ic2lkaWFuIGFuZCB0aWVzIHRoZWlyIHJlbW92YWwgdG8gYSBjaG9zZW4gbGlmZXRpbWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEaXNwb3NhYmxlRXggfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGlzcG9zYWJsZSc7XG5cbmltcG9ydCB7XG4gIENhbGxiYWNrRGlzcG9zYWJsZSxcbiAgQ29tYmluZURpc3Bvc2FibGUsXG4gIERpc3Bvc2FibGVCYXNlXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9kaXNwb3NhYmxlJztcblxuaW1wb3J0IHR5cGUgeyBBY3RpdmVGaWxlUHJvdmlkZXIgfSBmcm9tICcuLi9hY3RpdmUtZmlsZS1wcm92aWRlci50cyc7XG5pbXBvcnQgdHlwZSB7IENvbW1hbmRSZWdpc3RyYXIgfSBmcm9tICcuLi9jb21tYW5kLXJlZ2lzdHJhci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIEVkaXRvck1lbnVFdmVudEhhbmRsZXIsXG4gIEZpbGVNZW51RXZlbnRIYW5kbGVyLFxuICBGaWxlc01lbnVFdmVudEhhbmRsZXIsXG4gIE1hcmtkb3duVmlld3BvcnRNZW51RXZlbnRIYW5kbGVyLFxuICBNZW51RXZlbnRSZWdpc3RyYXJcbn0gZnJvbSAnLi4vbWVudS1ldmVudC1yZWdpc3RyYXIudHMnO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kSGFuZGxlcixcbiAgQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0XG59IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBvbmVudC1leC50cyc7XG5cbi8qKlxuICogQnVpbGRzIGEgZnJlc2ggc2V0IG9mIHtAbGluayBDb21tYW5kSGFuZGxlcn1zLlxuICpcbiAqIEEgZmFjdG9yeSByYXRoZXIgdGhhbiBhIHJlYWR5LW1hZGUgYXJyYXkgYmVjYXVzZSB7QGxpbmsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnR9IHJlZ2lzdGVycyB0aGUgc2FtZVxuICogaGFuZGxlcnMgYWdhaW5zdCBzZXZlcmFsIG1lbnUgc3VyZmFjZXMsIGFuZCBhIGhhbmRsZXIgY2FycmllcyBwZXItcmVnaXN0cmF0aW9uIHN0YXRlIChpdHNcbiAqIGFjdGl2ZS1maWxlIHByb3ZpZGVyLCBpdHMgcGx1Z2luIG5hbWUsIGFuZCB3aGF0ZXZlciBhIHN1YmNsYXNzIHJlY29yZHMgaW5cbiAqIHtAbGluayBDb21tYW5kSGFuZGxlci5vblJlZ2lzdGVyZWR9KSBcdTIwMTQgc28gZXZlcnkgc3VyZmFjZSBuZWVkcyBpdHMgb3duIGluc3RhbmNlcy5cbiAqXG4gKiBSZXR1cm5pbmcgc2hhcmVkIGluc3RhbmNlcyAoYCgpID0+IFtoYW5kbGVyMVNpbmdsZXRvbiwgaGFuZGxlcjJTaW5nbGV0b25dYCkgcmVpbnRyb2R1Y2VzIGV4YWN0bHkgdGhlXG4gKiBidWcgdGhlIGZhY3RvcnkgZXhpc3RzIHRvIGF2b2lkLCBzbyBpdCBpcyBub3QgbWVyZWx5IGRpc2NvdXJhZ2VkOiB7QGxpbmsgQ29tbWFuZEhhbmRsZXIub25SZWdpc3RlcmVkfVxuICogdGhyb3dzIG9uIHRoZSBzZWNvbmQgcmVnaXN0cmF0aW9uIG9mIGFuIGluc3RhbmNlLiB7QGxpbmsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQucmVnaXN0ZXJDb21tYW5kSGFuZGxlcnN9XG4gKiBhd2FpdHMgaXQsIHNvIHRoYXQgdGhyb3cgcmVqZWN0cyB0aGUgY2FsbGVyJ3MgcHJvbWlzZSBpbnN0ZWFkIG9mIGRlZ3JhZGluZyBpbnRvIGEgd3JvbmcgY29udGV4dCBtZW51LlxuICpcbiAqIEByZXR1cm5zIFRoZSBjb21tYW5kIGhhbmRsZXJzIHRvIHJlZ2lzdGVyLiBBIE5FVyBpbnN0YW5jZSBvZiBlYWNoIG9uIGV2ZXJ5IGNhbGwuXG4gKi9cbmV4cG9ydCB0eXBlIENvbW1hbmRIYW5kbGVyRmFjdG9yeSA9ICgpID0+IENvbW1hbmRIYW5kbGVyW107XG5cbmludGVyZmFjZSBDb21tYW5kSGFuZGxlckNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWN0aXZlRmlsZVByb3ZpZGVyOiBBY3RpdmVGaWxlUHJvdmlkZXI7XG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxNZW51RXZlbnRSZWdpc3RyYXJzPzogcmVhZG9ubHkgTWVudUV2ZW50UmVnaXN0cmFyW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBsaWZldGltZSBvd25lciBmb3IgYSByZWdpc3RyYXRpb24gdGhhdCBuYW1lcyBub25lIG9mIGl0cyBvd24uXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgZXZlcnkgcmVnaXN0cmF0aW9uIGlzIG93bmVkIGJ5IHRoZSBjb21wb25lbnQgaXRzZWxmLCBzbyBpdHMgdW5sb2FkIHJlbW92ZXMgZXZlcnkgY29tbWFuZFxuICAgKiBpdCByZWdpc3RlcmVkIFx1MjAxNCB0aGUgYmVoYXZpb3IgYSBzdGFuZGFsb25lIGNvbXBvbmVudCBoYXMgYWx3YXlzIGhhZC4gTm8gYEBkZWZhdWx0YCB0YWcsIGJlY2F1c2UgdGhlXG4gICAqIGVmZmVjdGl2ZSBkZWZhdWx0IGlzIGEgY2xvc3VyZSBvdmVyIGB0aGlzYCByYXRoZXIgdGhhbiBhIGxpdGVyYWwgb3IgYSBsaW5rYWJsZSBzeW1ib2wuXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kTGlmZXRpbWVPd25lclByb3ZpZGVyPzogQ29tbWFuZExpZmV0aW1lT3duZXJQcm92aWRlciB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgY29tbWFuZFJlZ2lzdHJhcjogQ29tbWFuZFJlZ2lzdHJhcjtcbiAgcmVhZG9ubHkgbWVudUV2ZW50UmVnaXN0cmFyOiBNZW51RXZlbnRSZWdpc3RyYXI7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50UmVnaXN0ZXJDb21tYW5kSGFuZGxlcnNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgd2hvc2UgdW5sb2FkIHJlbW92ZXMgdGhlIGNvbW1hbmRzIHRoaXMgY2FsbCByZWdpc3RlcnMsIG92ZXJyaWRpbmcgdGhlIGNvbXBvbmVudCdzXG4gICAqIHtAbGluayBDb21tYW5kTGlmZXRpbWVPd25lclByb3ZpZGVyfSBmb3IgdGhpcyBvbmUgY2FsbC5cbiAgICpcbiAgICogTmFtZSBvbmUgd2hlbiB0aGUgYmF0Y2gncyBsaWZldGltZSBkaWZmZXJzIGZyb20gdGhlIGRlZmF1bHQgXHUyMDE0IHRoZSBjYWxsZXIgdGhhdCBuZWVkcyBpdCBpcyBvbmVcbiAgICogcmVnaXN0ZXJpbmcgdGhyb3VnaCBhIGNvbXBvbmVudCB3aG9zZSBkZWZhdWx0IG93bmVyIGlzIHNvbWUgU0hPUlRFUi1saXZlZCBzdXJmYWNlLCBhbmQgd2hvc2Ugb3duXG4gICAqIGNvbW1hbmRzIGhhdmUgdG8gb3V0bGl2ZSBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGxpZmV0aW1lT3duZXI/OiBDb21wb25lbnRFeCB8IHVuZGVmaW5lZDtcbn1cblxuaW50ZXJmYWNlIENvbW1hbmRIYW5kbGVyQ29tcG9uZW50UmVnaXN0ZXJNZW51RXZlbnRIYW5kbGVyc1BhcmFtcyB7XG4gIHJlYWRvbmx5IGNvbW1hbmRIYW5kbGVyOiBDb21tYW5kSGFuZGxlcjtcbiAgcmVhZG9ubHkgbWVudUV2ZW50UmVnaXN0cmFyOiBNZW51RXZlbnRSZWdpc3RyYXI7XG4gIHJlYWRvbmx5IHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBjb21wb25lbnQgdGhhdCBvd25zIHRoZSB0ZWFyZG93biBvZiB0aGUgY29tbWFuZHMgYSB7QGxpbmsgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQucmVnaXN0ZXJDb21tYW5kSGFuZGxlcnN9XG4gKiBjYWxsIHJlZ2lzdGVycyBcdTIwMTQgdGhlIG9uZSB3aG9zZSB1bmxvYWQgcmVtb3ZlcyB0aGVtIGZyb20gdGhlIHBhbGV0dGUuXG4gKlxuICogQSBwcm92aWRlciByYXRoZXIgdGhhbiBhIGNvbXBvbmVudCwgYmVjYXVzZSB0aGUgb3duZXIgaXMgbm90IHN0YWJsZSBmb3IgdGhlIGxpZmUgb2YgdGhlIHJlZ2lzdGVyaW5nXG4gKiBjb21wb25lbnQuIGBQbHVnaW5CYXNlYCBoYW5kcyBiYWNrIHRoZSB3cmFwcGVyIGhvbGRpbmcgdGhlIHBsdWdpbidzIGZlYXR1cmUgc3VyZmFjZSwgYW5kIHRoYXQgd3JhcHBlciBpc1xuICogUkVQTEFDRUQgd2hvbGVzYWxlIGV2ZXJ5IHRpbWUgdGhlIHN1cmZhY2UgZ29lcyBkb3duIGFuZCBjb21lcyBiYWNrIChhIGRlY2xhcmVkIGRlcGVuZGVuY3kgbG9zdCBhbmRcbiAqIHJlZ2FpbmVkLCBhIGRlY2xhcmVkIGNvbmZsaWN0IGFwcGVhcmluZyBhbmQgYmVpbmcgcmVzb2x2ZWQpLiBBIHZhbHVlIGNhcHR1cmVkIG9uY2Ugd291bGQgdGllIHRoZSBzZWNvbmRcbiAqIGN5Y2xlJ3MgY29tbWFuZHMgdG8gdGhlIGZpcnN0IGN5Y2xlJ3MgZGVhZCB3cmFwcGVyLCB3aGVyZSBub3RoaW5nIHdvdWxkIGV2ZXIgZGlzcG9zZSB0aGVtLlxuICpcbiAqIEByZXR1cm5zIFRoZSBjb21wb25lbnQgdGhhdCBzaG91bGQgb3duIHRoZSByZWdpc3RyYXRpb24ncyB0ZWFyZG93bi5cbiAqL1xudHlwZSBDb21tYW5kTGlmZXRpbWVPd25lclByb3ZpZGVyID0gKCkgPT4gQ29tcG9uZW50RXg7XG5cbi8qKlxuICogQSBwZXItY29tbWFuZCB7QGxpbmsgTWVudUV2ZW50UmVnaXN0cmFyfSB0aGF0IGRlbGVnYXRlcyB0byBhIHNoYXJlZCByZWdpc3RyYXIgd2hpbGUgY29sbGVjdGluZyB0aGVcbiAqIHtAbGluayBEaXNwb3NhYmxlRXh9IGVhY2ggcmVnaXN0cmF0aW9uIHJldHVybnMsIHNvIGRpc3Bvc2luZyB0aGlzIHNjb3BlIHVucmVnaXN0ZXJzIGV4YWN0bHkgdGhhdCBjb21tYW5kJ3NcbiAqIG1lbnUgZXZlbnRzLiBBIGhhbmRsZXIgbWF5IGtlZXAgdGhlIHNjb3BlIHBhc3Qge0BsaW5rIENvbW1hbmRIYW5kbGVyLm9uUmVnaXN0ZXJlZH0gYW5kIHJlZ2lzdGVyIG1lbnUgZXZlbnRzXG4gKiBsYXRlciBcdTIwMTQgYSBicmlkZ2UgYmluZGluZyBhdCBsYXlvdXQtcmVhZHksIHNheSBcdTIwMTQgc28gYSByZWdpc3RyYXRpb24gdGhhdCBhcnJpdmVzIGFmdGVyIHRoaXMgc2NvcGUgd2FzIGRpc3Bvc2VkXG4gKiBpcyBkaXNwb3NlZCBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGxlYWtpbmcuXG4gKi9cbmNsYXNzIENvbW1hbmRNZW51RXZlbnRTY29wZSBleHRlbmRzIERpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgTWVudUV2ZW50UmVnaXN0cmFyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUV4W10gPSBbXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbm5lcjogTWVudUV2ZW50UmVnaXN0cmFyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckVkaXRvck1lbnVFdmVudEhhbmRsZXIoaGFuZGxlcjogRWRpdG9yTWVudUV2ZW50SGFuZGxlcik6IERpc3Bvc2FibGVFeCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdCh0aGlzLmlubmVyLnJlZ2lzdGVyRWRpdG9yTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyKSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJGaWxlTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyOiBGaWxlTWVudUV2ZW50SGFuZGxlcik6IERpc3Bvc2FibGVFeCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdCh0aGlzLmlubmVyLnJlZ2lzdGVyRmlsZU1lbnVFdmVudEhhbmRsZXIoaGFuZGxlcikpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXI6IEZpbGVzTWVudUV2ZW50SGFuZGxlcik6IERpc3Bvc2FibGVFeCB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdCh0aGlzLmlubmVyLnJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXIpKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck1hcmtkb3duVmlld3BvcnRNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXI6IE1hcmtkb3duVmlld3BvcnRNZW51RXZlbnRIYW5kbGVyKTogRGlzcG9zYWJsZUV4IHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0KHRoaXMuaW5uZXIucmVnaXN0ZXJNYXJrZG93blZpZXdwb3J0TWVudUV2ZW50SGFuZGxlcihoYW5kbGVyKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcGVyZm9ybURpc3Bvc2UoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBkaXNwb3NhYmxlIG9mIHRoaXMuZGlzcG9zYWJsZXMpIHtcbiAgICAgIGRpc3Bvc2FibGUuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLmRpc3Bvc2FibGVzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3QoZGlzcG9zYWJsZTogRGlzcG9zYWJsZUV4KTogRGlzcG9zYWJsZUV4IHtcbiAgICBpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG4gICAgICBkaXNwb3NhYmxlLmRpc3Bvc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwb3NhYmxlcy5wdXNoKGRpc3Bvc2FibGUpO1xuICAgIH1cblxuICAgIHJldHVybiBkaXNwb3NhYmxlO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHtAbGluayBDb21tYW5kSGFuZGxlcn1zIHdpdGggT2JzaWRpYW4gYW5kIG1hbmFnZXMgdGhlaXIgbGlmZWN5Y2xlLlxuICpcbiAqIENhbGwge0BsaW5rIHJlZ2lzdGVyQ29tbWFuZEhhbmRsZXJzfSB0byByZWdpc3RlciBhIGJhdGNoIG9mIGhhbmRsZXJzIG9uIGRlbWFuZCAoYXMgbWFueSB0aW1lcyBhc1xuICogbmVlZGVkIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgYWxpdmUpOyBkaXNwb3NlIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0byB1bnJlZ2lzdGVyIGV4YWN0bHlcbiAqIHRob3NlIGhhbmRsZXJzIFx1MjAxNCBpbmNsdWRpbmcgYW55IG1lbnUgZXZlbnRzIHRoZXkgcmVnaXN0ZXJlZCBcdTIwMTQgb3IgbGV0IHRoZSBiYXRjaCdzIExJRkVUSU1FIE9XTkVSIHVubG9hZCB0b1xuICogcmVtb3ZlIGV2ZXJ5IGNvbW1hbmQgc3RpbGwgcmVnaXN0ZXJlZCB0aHJvdWdoIGl0LlxuICpcbiAqIFRoYXQgb3duZXIgaXMgdGhpcyBjb21wb25lbnQgYnkgZGVmYXVsdCwgd2hpY2ggaXMgd2h5IGEgc3RhbmRhbG9uZSBjb21wb25lbnQgcmVtb3ZlcyBpdHMgb3duIGNvbW1hbmRzXG4gKiB3aGVuIGl0IHVubG9hZHMuIEl0IGlzIG92ZXJyaWRhYmxlIGJlY2F1c2UgdGhlIHJlZ2lzdGVyaW5nIGNvbXBvbmVudCBhbmQgdGhlIHJlZ2lzdGVyZWQgY29tbWFuZHMgZG8gbm90XG4gKiBhbHdheXMgc2hhcmUgYSBsaWZldGltZTogYFBsdWdpbkJhc2VgIGtlZXBzIE9ORSBvZiB0aGVzZSBydW5uaW5nIGZvciB0aGUgd2hvbGUgbGlmZSBvZiB0aGUgcGx1Z2luIFx1MjAxNCBpdCBpc1xuICogd2hhdCB0aGUgXCJ5b3VyIGRlcGVuZGVuY3kgd2VudCBhd2F5XCIgbm90aWNlIGlzIGJ1aWx0IGJlc2lkZSBcdTIwMTQgd2hpbGUgdGhlIGNvbW1hbmRzIGEgc3ViY2xhc3MgcmVnaXN0ZXJzIGZyb21cbiAqIGBvbmxvYWRJbXBsYCBiZWxvbmcgdG8gdGhlIGZlYXR1cmUgc3VyZmFjZSB0aGUgZ2F0ZSB0ZWFycyBkb3duIGFuZCByZWJ1aWxkcyB1bmRlcm5lYXRoIGl0LiBTbyB0aGUgb3duZXIgaXNcbiAqIHJlc29sdmVkIHBlciBjYWxsLCBmcm9tIGEge0BsaW5rIENvbW1hbmRMaWZldGltZU93bmVyUHJvdmlkZXJ9IG9yIGZyb20gdGhlIGNhbGwncyBvd24gYGxpZmV0aW1lT3duZXJgLlxuICpcbiAqIFRoZSBzYW1lIGhhbmRsZXJzIGFyZSBmZWQgdG8gZXZlcnkgbWVudSBzdXJmYWNlIHRoZSBjb21wb25lbnQga25vd3MgYWJvdXQ6IE9ic2lkaWFuJ3Mgb3duIHdvcmtzcGFjZVxuICogZXZlbnRzLCBwbHVzIGVhY2ggYWRkaXRpb25hbCB7QGxpbmsgTWVudUV2ZW50UmVnaXN0cmFyfSBicmlkZ2luZyBhbm90aGVyIHBsdWdpbidzIG1lbnVzLlxuICovXG5leHBvcnQgY2xhc3MgQ29tbWFuZEhhbmRsZXJDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBQcm92aWRlciBmb3IgYWNjZXNzaW5nIHRoZSBjdXJyZW50bHkgYWN0aXZlIGZpbGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWN0aXZlRmlsZVByb3ZpZGVyOiBBY3RpdmVGaWxlUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhcnMgZm9yIG1lbnUgc3VyZmFjZXMgdGhhdCBidWlsZCB0aGVpciBvd24gcGx1Z2luLXRpdGxlZCBwYXJlbnQgZW50cnksIGFuZCB0aGVyZWZvcmUgdGFrZVxuICAgKiB0aGUgaGFuZGxlcnMgd2l0aCB0aGVpciBzZWN0aW9uIHN1Ym1lbnUgZm9yY2VkIG9mZi5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFyczogcmVhZG9ubHkgTWVudUV2ZW50UmVnaXN0cmFyW107XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhciB1c2VkIHRvIGFkZCBhbmQgcmVtb3ZlIGNvbW1hbmRzIHdpdGggT2JzaWRpYW4uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29tbWFuZFJlZ2lzdHJhcjogQ29tbWFuZFJlZ2lzdHJhcjtcblxuICAvKipcbiAgICogUmVnaXN0cmFyIGZvciBtZW51IGV2ZW50IGhhbmRsZXJzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1lbnVFdmVudFJlZ2lzdHJhcjogTWVudUV2ZW50UmVnaXN0cmFyO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHRoYXQgb3ducyB0aGUgY29tbWFuZHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZExpZmV0aW1lT3duZXJQcm92aWRlcjogQ29tbWFuZExpZmV0aW1lT3duZXJQcm92aWRlcjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjb21tYW5kIGhhbmRsZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDb21tYW5kSGFuZGxlckNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFjdGl2ZUZpbGVQcm92aWRlciA9IHBhcmFtcy5hY3RpdmVGaWxlUHJvdmlkZXI7XG4gICAgdGhpcy5tZW51RXZlbnRSZWdpc3RyYXIgPSBwYXJhbXMubWVudUV2ZW50UmVnaXN0cmFyO1xuICAgIHRoaXMuYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnMgPSBwYXJhbXMuYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnMgPz8gW107XG4gICAgdGhpcy5jb21tYW5kUmVnaXN0cmFyID0gcGFyYW1zLmNvbW1hbmRSZWdpc3RyYXI7XG4gICAgdGhpcy5wbHVnaW5OYW1lID0gcGFyYW1zLnBsdWdpbk5hbWU7XG4gICAgdGhpcy5jb21tYW5kTGlmZXRpbWVPd25lclByb3ZpZGVyID0gcGFyYW1zLmNvbW1hbmRMaWZldGltZU93bmVyUHJvdmlkZXIgPz8gKCgpOiBDb21wb25lbnRFeCA9PiB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGNvbW1hbmQgaGFuZGxlcnMgYW5kIHJlZ2lzdGVycyB0aGVtIHdpdGggT2JzaWRpYW4sIGdpdmluZyBlYWNoIGl0cyBvd24gcnVudGltZVxuICAgKiByZWdpc3RyYXRpb24gY29udGV4dC4gRWFjaCBoYW5kbGVyJ3MgY29tbWFuZCBpcyBhZGRlZCBpbW1lZGlhdGVseTsgdGhlIHJldHVybmVkXG4gICAqIHtAbGluayBEaXNwb3NhYmxlRXh9IHJlbW92ZXMgdGhlIGNvbW1hbmRzIHJlZ2lzdGVyZWQgYnkgdGhpcyBjYWxsIFx1MjAxNCBhbmQgYW55IG1lbnUgZXZlbnRzIHRob3NlXG4gICAqIGhhbmRsZXJzIHJlZ2lzdGVyZWQgdmlhIHRoZWlyIGNvbnRleHQncyB7QGxpbmsgTWVudUV2ZW50UmVnaXN0cmFyfSBcdTIwMTQgd2hlbiBkaXNwb3NlZC4gQW55IGNvbW1hbmRcbiAgICogc3RpbGwgcmVnaXN0ZXJlZCB3aGVuIHRoZSBjb21wb25lbnQgdW5sb2FkcyBpcyByZW1vdmVkIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIFRoZSBmYWN0b3J5IGlzIGludm9rZWQgb25jZSBtb3JlIGZvciBldmVyeSBhZGRpdGlvbmFsIG1lbnUgc3VyZmFjZSwgc28gYSBwbHVnaW4gZGVjbGFyZXMgaXRzXG4gICAqIGhhbmRsZXJzIE9OQ0UgYW5kIGFsbCBzdXJmYWNlcyBhcmUgZmVkLiBUaG9zZSBleHRyYSBwYXNzZXMgYWRkIG5vIGNvbW1hbmRzIFx1MjAxNCB0aGUgcGFsZXR0ZSBhbHJlYWR5XG4gICAqIGhhcyBldmVyeSBjb21tYW5kIGZyb20gdGhlIGZpcnN0IHBhc3MuXG4gICAqXG4gICAqIFdoaWNoIGNvbXBvbmVudCdzIHVubG9hZCByZW1vdmVzIHRoZW0gaXMgdGhlIGNhbGxlcidzIHRvIGNob29zZTogYG9wdGlvbnMubGlmZXRpbWVPd25lcmAgZm9yIHRoaXMgb25lXG4gICAqIGJhdGNoLCBvdGhlcndpc2Ugd2hhdGV2ZXIgdGhpcyBjb21wb25lbnQncyB7QGxpbmsgQ29tbWFuZExpZmV0aW1lT3duZXJQcm92aWRlcn0gcmVzb2x2ZXMgdG8sIHdoaWNoXG4gICAqIGRlZmF1bHRzIHRvIHRoZSBjb21wb25lbnQgaXRzZWxmLiBBIGNvbW1hbmQgbXVzdCBuZXZlciBvdXRsaXZlIHRoZSBjb2xsYWJvcmF0b3JzIGl0cyBoYW5kbGVyIGNsb3Nlc1xuICAgKiBvdmVyIFx1MjAxNCBsZWZ0IG9uIGEgbG9uZ2VyLWxpdmVkIG93bmVyIGl0IHN0YXlzIGluIHRoZSBwYWxldHRlIGNhbGxpbmcgaW50byB0b3JuLWRvd24gb2JqZWN0cyBcdTIwMTQgc28gdGhlXG4gICAqIG93bmVyIHRvIG5hbWUgaXMgdGhlIHNob3J0ZXN0LWxpdmVkIHRoaW5nIHRoZSBiYXRjaCBkZXBlbmRzIG9uLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZEhhbmRsZXJGYWN0b3J5IC0gQnVpbGRzIGEgZnJlc2ggc2V0IG9mIGNvbW1hbmQgaGFuZGxlcnMsIG9uY2UgcGVyIG1lbnUgc3VyZmFjZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcmVnaXN0cmF0aW9uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlcnMgKGNvbW1hbmRzICsgbWVudSBldmVudHMpIHJlZ2lzdGVyZWQgYnkgdGhpcyBjYWxsLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyQ29tbWFuZEhhbmRsZXJzKGNvbW1hbmRIYW5kbGVyRmFjdG9yeTogQ29tbWFuZEhhbmRsZXJGYWN0b3J5LCBvcHRpb25zPzogQ29tbWFuZEhhbmRsZXJDb21wb25lbnRSZWdpc3RlckNvbW1hbmRIYW5kbGVyc09wdGlvbnMpOiBQcm9taXNlPERpc3Bvc2FibGVFeD4ge1xuICAgIC8vIFJlc29sdmVkIHBlciBjYWxsLCBuZXZlciBjYXB0dXJlZCBhdCBjb25zdHJ1Y3Rpb246IGEgcHJvdmlkZXIncyBhbnN3ZXIgY2hhbmdlcyBvdmVyIHRoZSBjb21wb25lbnQnc1xuICAgIC8vIGxpZmUuIGBQbHVnaW5CYXNlYCByZXR1cm5zIHRoZSB3cmFwcGVyIGhvbGRpbmcgdGhlIGZlYXR1cmUgc3VyZmFjZSwgYW5kIHRoYXQgd3JhcHBlciBpcyByZXBsYWNlZFxuICAgIC8vIHdob2xlc2FsZSBvbiBldmVyeSBnYXRlIGN5Y2xlIFx1MjAxNCBzbyB0aGlzIGN5Y2xlJ3MgY29tbWFuZHMgaGF2ZSB0byBsYW5kIG9uIHRoaXMgY3ljbGUncyB3cmFwcGVyLlxuICAgIGNvbnN0IGxpZmV0aW1lT3duZXIgPSBvcHRpb25zPy5saWZldGltZU93bmVyID8/IHRoaXMuY29tbWFuZExpZmV0aW1lT3duZXJQcm92aWRlcigpO1xuICAgIGNvbnN0IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbW1hbmRIYW5kbGVyIG9mIGNvbW1hbmRIYW5kbGVyRmFjdG9yeSgpKSB7XG4gICAgICBjb25zdCBjb21tYW5kID0gY29tbWFuZEhhbmRsZXIuYnVpbGRDb21tYW5kKCk7XG4gICAgICAvLyBDYXB0dXJlIHRoZSBpZCBiZWZvcmUgcmVnaXN0ZXJpbmcuIGBQbHVnaW4uYWRkQ29tbWFuZGAgbXV0YXRlcyBgY29tbWFuZC5pZGAgKHByZWZpeGluZyBpdCB3aXRoXG4gICAgICAvLyBgdGhpcy5tYW5pZmVzdC5pZGApLCB3aGlsZSBgUGx1Z2luLnJlbW92ZUNvbW1hbmRgIHJlLXByZWZpeGVzIFx1MjAxNCBzbyByZW1vdmFsIG5lZWRzIHRoZSBvcmlnaW5hbCBpZC5cbiAgICAgIC8vIFJlYWRpbmcgYGNvbW1hbmQuaWRgIGFmdGVyIGBhZGRDb21tYW5kYCB3b3VsZCBkb3VibGUtcHJlZml4IGl0LCBzbyB0aGUgY29tbWFuZCBpcyBuZXZlciByZW1vdmVkLlxuICAgICAgY29uc3QgY29tbWFuZElkID0gY29tbWFuZC5pZDtcbiAgICAgIHRoaXMuY29tbWFuZFJlZ2lzdHJhci5hZGRDb21tYW5kKGNvbW1hbmQpO1xuXG4gICAgICAvLyBFYWNoIGNvbW1hbmQgZ2V0cyBpdHMgb3duIHJlZ2lzdHJhdGlvbiBjb250ZXh0IHdpdGggYSBwZXItY29tbWFuZCBtZW51LWV2ZW50IHNjb3BlLCBzbyBkaXNwb3Npbmcgb25lXG4gICAgICAvLyBjb21tYW5kIHRlYXJzIGRvd24gaXRzIG93biBtZW51IGV2ZW50cyB3aXRob3V0IGFmZmVjdGluZyB0aGUgb3RoZXJzLlxuICAgICAgY29uc3QgbWVudUV2ZW50U2NvcGUgPSBhd2FpdCB0aGlzLnJlZ2lzdGVyTWVudUV2ZW50SGFuZGxlcnMoeyBjb21tYW5kSGFuZGxlciwgbWVudUV2ZW50UmVnaXN0cmFyOiB0aGlzLm1lbnVFdmVudFJlZ2lzdHJhciB9KTtcblxuICAgICAgY29uc3QgZGlzcG9zYWJsZSA9IG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgICAgICBjYWxsYmFjazogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuY29tbWFuZFJlZ2lzdHJhci5yZW1vdmVDb21tYW5kKGNvbW1hbmRJZCk7XG4gICAgICAgICAgbWVudUV2ZW50U2NvcGUuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIFRpZSByZW1vdmFsIHRvIHRoZSBsaWZldGltZSBvd25lcidzIHVubG9hZCwgc28gYSBjb21tYW5kIG5ldmVyIG91dGxpdmVzIHdoYXQgaXQgY2FsbHMgaW50by5cbiAgICAgIGRpc3Bvc2FibGVzLnB1c2gobGlmZXRpbWVPd25lci5yZWdpc3RlckRpc3Bvc2FibGUoZGlzcG9zYWJsZSkpO1xuICAgIH1cblxuICAgIC8vIEV2ZXJ5IGFkZGl0aW9uYWwgc3VyZmFjZSBnZXRzIGl0cyBPV04gaGFuZGxlciBpbnN0YW5jZXMgXHUyMDE0IGEgaGFuZGxlciBjYXJyaWVzIHBlci1yZWdpc3RyYXRpb25cbiAgICAvLyBzdGF0ZSwgc28gb25lIGluc3RhbmNlIGNhbm5vdCBzZXJ2ZSB0d28gc3VyZmFjZXMgXHUyMDE0IGFuZCB0YWtlcyB0aGVtIHdpdGggdGhlIHNlY3Rpb24gc3VibWVudVxuICAgIC8vIGZvcmNlZCBvZmYsIGJlY2F1c2Ugc3VjaCBhIHN1cmZhY2Ugd3JhcHMgZXZlcnl0aGluZyBpbiBhIHBsdWdpbi10aXRsZWQgcGFyZW50IGVudHJ5IG9mIGl0cyBvd24uXG4gICAgZm9yIChjb25zdCBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFyIG9mIHRoaXMuYWRkaXRpb25hbE1lbnVFdmVudFJlZ2lzdHJhcnMpIHtcbiAgICAgIGZvciAoY29uc3QgY29tbWFuZEhhbmRsZXIgb2YgY29tbWFuZEhhbmRsZXJGYWN0b3J5KCkpIHtcbiAgICAgICAgZGlzcG9zYWJsZXMucHVzaChsaWZldGltZU93bmVyLnJlZ2lzdGVyRGlzcG9zYWJsZShhd2FpdCB0aGlzLnJlZ2lzdGVyTWVudUV2ZW50SGFuZGxlcnMoeyBjb21tYW5kSGFuZGxlciwgbWVudUV2ZW50UmVnaXN0cmFyOiBhZGRpdGlvbmFsTWVudUV2ZW50UmVnaXN0cmFyLCBzaG91bGRBZGRDb21tYW5kVG9TdWJtZW51OiBmYWxzZSB9KSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ29tYmluZURpc3Bvc2FibGUoeyBkaXNwb3NhYmxlcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kcyBhIGNvbW1hbmQgaGFuZGxlciBpdHMgcmVnaXN0cmF0aW9uIGNvbnRleHQsIHNjb3BlZCBzbyB0aGF0IGRpc3Bvc2luZyB0aGUgcmV0dXJuZWQgc2NvcGVcbiAgICogdW5yZWdpc3RlcnMgZXhhY3RseSB0aGUgbWVudSBldmVudHMgdGhhdCBoYW5kbGVyIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhpcyByZWdpc3RyYXRpb24uXG4gICAqIEByZXR1cm5zIFRoZSBoYW5kbGVyJ3MgbWVudS1ldmVudCBzY29wZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJNZW51RXZlbnRIYW5kbGVycyhwYXJhbXM6IENvbW1hbmRIYW5kbGVyQ29tcG9uZW50UmVnaXN0ZXJNZW51RXZlbnRIYW5kbGVyc1BhcmFtcyk6IFByb21pc2U8Q29tbWFuZE1lbnVFdmVudFNjb3BlPiB7XG4gICAgY29uc3QgbWVudUV2ZW50U2NvcGUgPSBuZXcgQ29tbWFuZE1lbnVFdmVudFNjb3BlKHBhcmFtcy5tZW51RXZlbnRSZWdpc3RyYXIpO1xuICAgIGNvbnN0IGNvbnRleHQ6IENvbW1hbmRIYW5kbGVyUmVnaXN0cmF0aW9uQ29udGV4dCA9IHtcbiAgICAgIGFjdGl2ZUZpbGVQcm92aWRlcjogdGhpcy5hY3RpdmVGaWxlUHJvdmlkZXIsXG4gICAgICBtZW51RXZlbnRSZWdpc3RyYXI6IG1lbnVFdmVudFNjb3BlLFxuICAgICAgcGx1Z2luTmFtZTogdGhpcy5wbHVnaW5OYW1lLFxuICAgICAgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTogcGFyYW1zLnNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnVcbiAgICB9O1xuICAgIGF3YWl0IHBhcmFtcy5jb21tYW5kSGFuZGxlci5vblJlZ2lzdGVyZWQoY29udGV4dCk7XG4gICAgcmV0dXJuIG1lbnVFdmVudFNjb3BlO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsd0JBSU87QUFnQlAsMEJBQTRCO0FBMkU1QixNQUFNLDhCQUE4QixpQ0FBNkM7QUFBQSxFQUd4RSxZQUE2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