@mnaoumov/obsidian-lib 7.0.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/components/incremental-file-index-component/package.json +6 -0
  2. package/dist/lib/cjs/__merged.cjs +20 -6
  3. package/dist/lib/cjs/__merged.d.cts +2 -0
  4. package/dist/lib/cjs/active-file-provider.cjs +6 -6
  5. package/dist/lib/cjs/active-file-provider.d.cts +1 -1
  6. package/dist/lib/cjs/app.cjs +5 -5
  7. package/dist/lib/cjs/async-with-notice.cjs +5 -5
  8. package/dist/lib/cjs/attachment-path.cjs +6 -6
  9. package/dist/lib/cjs/attachment-unit-folder.cjs +5 -5
  10. package/dist/lib/cjs/backlink-index.cjs +13 -19
  11. package/dist/lib/cjs/backlink-index.d.cts +1 -1
  12. package/dist/lib/cjs/backlink.cjs +5 -5
  13. package/dist/lib/cjs/bases-view-registrar.cjs +6 -6
  14. package/dist/lib/cjs/bases-view-registrar.d.cts +1 -1
  15. package/dist/lib/cjs/callout.cjs +5 -5
  16. package/dist/lib/cjs/canvas.cjs +5 -5
  17. package/dist/lib/cjs/case-insensitive-file-index.cjs +5 -5
  18. package/dist/lib/cjs/code-block-markdown-information.cjs +6 -6
  19. package/dist/lib/cjs/code-block-markdown-information.d.cts +9 -9
  20. package/dist/lib/cjs/code-block-reg-exp.cjs +5 -5
  21. package/dist/lib/cjs/codemirror/index.cjs +5 -5
  22. package/dist/lib/cjs/codemirror/state-field-spec.cjs +6 -6
  23. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +6 -6
  24. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +5 -5
  25. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +5 -5
  26. package/dist/lib/cjs/command-handlers/command-handler.cjs +5 -5
  27. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +5 -5
  28. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +5 -5
  29. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +5 -5
  30. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +5 -5
  31. package/dist/lib/cjs/command-handlers/index.cjs +5 -5
  32. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +5 -5
  33. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +5 -5
  34. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +5 -5
  35. package/dist/lib/cjs/command-registrar.cjs +6 -6
  36. package/dist/lib/cjs/command-registrar.d.cts +2 -2
  37. package/dist/lib/cjs/community-plugins.cjs +6 -6
  38. package/dist/lib/cjs/components/abort-signal-component.cjs +5 -5
  39. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  40. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  41. package/dist/lib/cjs/components/async-events-component.cjs +5 -5
  42. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +5 -5
  43. package/dist/lib/cjs/components/component-ex.cjs +5 -5
  44. package/dist/lib/cjs/components/console-debug-component.cjs +5 -5
  45. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +5 -5
  46. package/dist/lib/cjs/components/disposable-component.cjs +5 -5
  47. package/dist/lib/cjs/components/embed-extensions-component.cjs +5 -5
  48. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +13 -16
  49. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +5 -5
  50. package/dist/lib/cjs/components/incremental-file-index-component.cjs +340 -0
  51. package/dist/lib/cjs/components/incremental-file-index-component.d.cts +152 -0
  52. package/dist/lib/cjs/components/index.cjs +9 -6
  53. package/dist/lib/cjs/components/index.d.cts +1 -0
  54. package/dist/lib/cjs/components/layout-ready-component.cjs +5 -5
  55. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +5 -5
  56. package/dist/lib/cjs/components/monkey-around-component.cjs +5 -5
  57. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  58. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  59. package/dist/lib/cjs/components/plugin-gate-component.cjs +5 -5
  60. package/dist/lib/cjs/components/plugin-notice-component.cjs +6 -6
  61. package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -3
  62. package/dist/lib/cjs/components/plugin-settings-component.cjs +6 -6
  63. package/dist/lib/cjs/components/plugin-settings-component.d.cts +5 -5
  64. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +5 -5
  65. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +5 -5
  66. package/dist/lib/cjs/components/pointer-position-component.cjs +5 -5
  67. package/dist/lib/cjs/components/registry-component.cjs +5 -5
  68. package/dist/lib/cjs/components/release-notes-component.cjs +5 -5
  69. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +6 -6
  70. package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +10 -10
  71. package/dist/lib/cjs/components/rmdir-guard-component.cjs +5 -5
  72. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  73. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +5 -5
  74. package/dist/lib/cjs/components/templates-language-component.cjs +5 -5
  75. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  76. package/dist/lib/cjs/constructors/index.cjs +5 -5
  77. package/dist/lib/cjs/css-class.cjs +5 -5
  78. package/dist/lib/cjs/data-handler.cjs +6 -6
  79. package/dist/lib/cjs/data-handler.d.cts +2 -2
  80. package/dist/lib/cjs/data-stores/data-store-replica.cjs +5 -5
  81. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  82. package/dist/lib/cjs/data-stores/data-store-transport.cjs +5 -5
  83. package/dist/lib/cjs/data-stores/index.cjs +5 -5
  84. package/dist/lib/cjs/data-stores/local-data-store.cjs +5 -5
  85. package/dist/lib/cjs/data-stores/shared-data-store.cjs +6 -6
  86. package/dist/lib/cjs/dataview-link.cjs +5 -5
  87. package/dist/lib/cjs/dataview.cjs +12 -12
  88. package/dist/lib/cjs/dataview.d.cts +6 -6
  89. package/dist/lib/cjs/debug.cjs +5 -5
  90. package/dist/lib/cjs/demo-vault-helper-settings.cjs +5 -5
  91. package/dist/lib/cjs/demo-vault-helper.cjs +5 -5
  92. package/dist/lib/cjs/demo-vault-naming.cjs +5 -5
  93. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +5 -5
  94. package/dist/lib/cjs/desktop-trusted-input.cjs +6 -6
  95. package/dist/lib/cjs/desktop-trusted-input.d.cts +1 -1
  96. package/dist/lib/cjs/editor-extension-registrar.cjs +6 -6
  97. package/dist/lib/cjs/editor-extension-registrar.d.cts +1 -1
  98. package/dist/lib/cjs/editor-suggest-registrar.cjs +6 -6
  99. package/dist/lib/cjs/editor-suggest-registrar.d.cts +1 -1
  100. package/dist/lib/cjs/editor.cjs +5 -5
  101. package/dist/lib/cjs/events.cjs +5 -5
  102. package/dist/lib/cjs/extensions-registrar.cjs +6 -6
  103. package/dist/lib/cjs/extensions-registrar.d.cts +1 -1
  104. package/dist/lib/cjs/file-change.cjs +6 -6
  105. package/dist/lib/cjs/file-change.d.cts +3 -3
  106. package/dist/lib/cjs/file-explorer.cjs +5 -5
  107. package/dist/lib/cjs/file-manager.cjs +5 -5
  108. package/dist/lib/cjs/file-system.cjs +5 -5
  109. package/dist/lib/cjs/folder-note.cjs +6 -6
  110. package/dist/lib/cjs/folder-note.d.cts +1 -1
  111. package/dist/lib/cjs/frontmatter-formatting.cjs +5 -5
  112. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +6 -6
  113. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +2 -2
  114. package/dist/lib/cjs/frontmatter.cjs +6 -6
  115. package/dist/lib/cjs/frontmatter.d.cts +7 -7
  116. package/dist/lib/cjs/generated-during-build.cjs +7 -7
  117. package/dist/lib/cjs/hover-link-source-registrar.cjs +6 -6
  118. package/dist/lib/cjs/hover-link-source-registrar.d.cts +1 -1
  119. package/dist/lib/cjs/html-element.cjs +5 -5
  120. package/dist/lib/cjs/i18n/custom-type-options.cjs +6 -6
  121. package/dist/lib/cjs/i18n/custom-type-options.d.cts +4 -4
  122. package/dist/lib/cjs/i18n/default-translations.cjs +5 -5
  123. package/dist/lib/cjs/i18n/i18n.cjs +5 -5
  124. package/dist/lib/cjs/i18n/index.cjs +5 -5
  125. package/dist/lib/cjs/i18n/locales/en.cjs +5 -5
  126. package/dist/lib/cjs/i18n/locales/index.cjs +5 -5
  127. package/dist/lib/cjs/i18n/locales/translations-map.cjs +5 -5
  128. package/dist/lib/cjs/index.cjs +9 -6
  129. package/dist/lib/cjs/index.d.cts +1 -0
  130. package/dist/lib/cjs/is-in-obsidian.cjs +5 -5
  131. package/dist/lib/cjs/library-styles.cjs +5 -5
  132. package/dist/lib/cjs/library.cjs +5 -5
  133. package/dist/lib/cjs/link-name.cjs +5 -5
  134. package/dist/lib/cjs/link-update-progress.cjs +5 -5
  135. package/dist/lib/cjs/link.cjs +7 -7
  136. package/dist/lib/cjs/link.d.cts +2 -2
  137. package/dist/lib/cjs/logger.cjs +5 -5
  138. package/dist/lib/cjs/loop.cjs +5 -5
  139. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +6 -6
  140. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +1 -1
  141. package/dist/lib/cjs/markdown-code-block-processor.cjs +5 -5
  142. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +6 -6
  143. package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +1 -1
  144. package/dist/lib/cjs/markdown-view.cjs +5 -5
  145. package/dist/lib/cjs/markdown.cjs +5 -5
  146. package/dist/lib/cjs/menu-event-registrar.cjs +6 -6
  147. package/dist/lib/cjs/menu-event-registrar.d.cts +4 -4
  148. package/dist/lib/cjs/metadata-cache.cjs +6 -6
  149. package/dist/lib/cjs/mobile-trusted-input.cjs +6 -6
  150. package/dist/lib/cjs/modals/alert.cjs +5 -5
  151. package/dist/lib/cjs/modals/confirm.cjs +5 -5
  152. package/dist/lib/cjs/modals/index.cjs +5 -5
  153. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  154. package/dist/lib/cjs/modals/modal-command-builder.cjs +6 -6
  155. package/dist/lib/cjs/modals/modal-command-builder.d.cts +12 -12
  156. package/dist/lib/cjs/modals/modal.cjs +5 -5
  157. package/dist/lib/cjs/modals/prompt.cjs +14 -14
  158. package/dist/lib/cjs/modals/select-item.cjs +5 -5
  159. package/dist/lib/cjs/modals/select-option.cjs +5 -5
  160. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +5 -5
  161. package/dist/lib/cjs/note-priority.cjs +5 -5
  162. package/dist/lib/cjs/notebook-navigator.cjs +6 -6
  163. package/dist/lib/cjs/notebook-navigator.d.cts +3 -3
  164. package/dist/lib/cjs/obsidian-lib-state.cjs +6 -6
  165. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +6 -6
  166. package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +1 -1
  167. package/dist/lib/cjs/obsidian-settings.cjs +5 -5
  168. package/dist/lib/cjs/obsidian-word-characters.cjs +231 -0
  169. package/dist/lib/cjs/obsidian-word-characters.d.cts +59 -0
  170. package/dist/lib/cjs/parse-link.cjs +6 -6
  171. package/dist/lib/cjs/parse-link.d.cts +2 -2
  172. package/dist/lib/cjs/path-settings.cjs +6 -6
  173. package/dist/lib/cjs/pdf.cjs +5 -5
  174. package/dist/lib/cjs/plugin/index.cjs +5 -5
  175. package/dist/lib/cjs/plugin/plugin-api.cjs +6 -6
  176. package/dist/lib/cjs/plugin/plugin-api.d.cts +2 -2
  177. package/dist/lib/cjs/plugin/plugin-context.cjs +6 -6
  178. package/dist/lib/cjs/plugin/plugin-event-source.cjs +6 -6
  179. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +1 -1
  180. package/dist/lib/cjs/plugin/plugin-install-state.cjs +5 -5
  181. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +5 -5
  182. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +6 -6
  183. package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +3 -3
  184. package/dist/lib/cjs/plugin/plugin.cjs +6 -6
  185. package/dist/lib/cjs/plugin/settings-migration-api.cjs +6 -6
  186. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +1 -1
  187. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +6 -6
  188. package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +1 -1
  189. package/dist/lib/cjs/popovers/field-popover.cjs +5 -5
  190. package/dist/lib/cjs/popovers/index.cjs +5 -5
  191. package/dist/lib/cjs/popovers/popover-anchor.cjs +5 -5
  192. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  193. package/dist/lib/cjs/property-entry.cjs +5 -5
  194. package/dist/lib/cjs/queue.cjs +6 -6
  195. package/dist/lib/cjs/react/app-context.cjs +5 -5
  196. package/dist/lib/cjs/react/index.cjs +5 -5
  197. package/dist/lib/cjs/reference.cjs +6 -6
  198. package/dist/lib/cjs/reference.d.cts +6 -6
  199. package/dist/lib/cjs/resource-lock.cjs +6 -6
  200. package/dist/lib/cjs/resource-url.cjs +5 -5
  201. package/dist/lib/cjs/ribbon-icon-registrar.cjs +6 -6
  202. package/dist/lib/cjs/ribbon-icon-registrar.d.cts +1 -1
  203. package/dist/lib/cjs/setting-components/checkbox-component.cjs +5 -5
  204. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +5 -5
  205. package/dist/lib/cjs/setting-components/date-component.cjs +5 -5
  206. package/dist/lib/cjs/setting-components/date-time-component.cjs +5 -5
  207. package/dist/lib/cjs/setting-components/email-component.cjs +5 -5
  208. package/dist/lib/cjs/setting-components/file-component.cjs +5 -5
  209. package/dist/lib/cjs/setting-components/index.cjs +5 -5
  210. package/dist/lib/cjs/setting-components/month-component.cjs +6 -6
  211. package/dist/lib/cjs/setting-components/month-component.d.cts +2 -2
  212. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +5 -5
  213. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +5 -5
  214. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +5 -5
  215. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +5 -5
  216. package/dist/lib/cjs/setting-components/number-component.cjs +5 -5
  217. package/dist/lib/cjs/setting-components/password-component.cjs +5 -5
  218. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +5 -5
  219. package/dist/lib/cjs/setting-components/telephone-component.cjs +5 -5
  220. package/dist/lib/cjs/setting-components/text-based-component.cjs +6 -6
  221. package/dist/lib/cjs/setting-components/text-based-component.d.cts +3 -3
  222. package/dist/lib/cjs/setting-components/time-component.cjs +5 -5
  223. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +5 -5
  224. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +5 -5
  225. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +5 -5
  226. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +5 -5
  227. package/dist/lib/cjs/setting-components/typed-text-component.cjs +5 -5
  228. package/dist/lib/cjs/setting-components/url-component.cjs +5 -5
  229. package/dist/lib/cjs/setting-components/validator-component.cjs +5 -5
  230. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +6 -6
  231. package/dist/lib/cjs/setting-components/week-component.cjs +6 -6
  232. package/dist/lib/cjs/setting-components/week-component.d.cts +2 -2
  233. package/dist/lib/cjs/setting-ex.cjs +5 -5
  234. package/dist/lib/cjs/setting-group-ex.cjs +5 -5
  235. package/dist/lib/cjs/status-bar-item-registrar.cjs +6 -6
  236. package/dist/lib/cjs/status-bar-item-registrar.d.cts +1 -1
  237. package/dist/lib/cjs/templater.cjs +6 -6
  238. package/dist/lib/cjs/templater.d.cts +9 -9
  239. package/dist/lib/cjs/transformers/duration-transformer.cjs +5 -5
  240. package/dist/lib/cjs/transformers/index.cjs +5 -5
  241. package/dist/lib/cjs/trusted-input.cjs +5 -5
  242. package/dist/lib/cjs/validation.cjs +6 -6
  243. package/dist/lib/cjs/validation.d.cts +1 -1
  244. package/dist/lib/cjs/vault-delete.cjs +5 -5
  245. package/dist/lib/cjs/vault-transaction.cjs +6 -6
  246. package/dist/lib/cjs/vault.cjs +5 -5
  247. package/dist/lib/cjs/view-registrar.cjs +6 -6
  248. package/dist/lib/cjs/view-registrar.d.cts +1 -1
  249. package/dist/lib/cjs/workspace.cjs +5 -5
  250. package/dist/lib/esm/__merged.d.mts +2 -0
  251. package/dist/lib/esm/__merged.mjs +15 -1
  252. package/dist/lib/esm/active-file-provider.d.mts +1 -1
  253. package/dist/lib/esm/active-file-provider.mjs +1 -1
  254. package/dist/lib/esm/attachment-path.mjs +1 -1
  255. package/dist/lib/esm/backlink-index.d.mts +1 -1
  256. package/dist/lib/esm/backlink-index.mjs +8 -14
  257. package/dist/lib/esm/bases-view-registrar.d.mts +1 -1
  258. package/dist/lib/esm/bases-view-registrar.mjs +1 -1
  259. package/dist/lib/esm/code-block-markdown-information.d.mts +9 -9
  260. package/dist/lib/esm/codemirror/state-field-spec.d.mts +6 -6
  261. package/dist/lib/esm/command-registrar.d.mts +2 -2
  262. package/dist/lib/esm/command-registrar.mjs +1 -1
  263. package/dist/lib/esm/community-plugins.mjs +1 -1
  264. package/dist/lib/esm/components/file-explorer-root-menu-component.mjs +8 -11
  265. package/dist/lib/esm/components/incremental-file-index-component.d.mts +152 -0
  266. package/dist/lib/esm/components/incremental-file-index-component.mjs +260 -0
  267. package/dist/lib/esm/components/index.d.mts +1 -0
  268. package/dist/lib/esm/components/index.mjs +3 -1
  269. package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -3
  270. package/dist/lib/esm/components/plugin-notice-component.mjs +1 -1
  271. package/dist/lib/esm/components/plugin-settings-component.d.mts +5 -5
  272. package/dist/lib/esm/components/plugin-settings-component.mjs +1 -1
  273. package/dist/lib/esm/components/rename-delete-handler-component.d.mts +10 -10
  274. package/dist/lib/esm/components/rename-delete-handler-component.mjs +1 -1
  275. package/dist/lib/esm/data-handler.d.mts +2 -2
  276. package/dist/lib/esm/data-handler.mjs +1 -1
  277. package/dist/lib/esm/data-stores/data-store-seeds.mjs +1 -1
  278. package/dist/lib/esm/data-stores/shared-data-store.mjs +1 -1
  279. package/dist/lib/esm/dataview.d.mts +6 -6
  280. package/dist/lib/esm/dataview.mjs +7 -7
  281. package/dist/lib/esm/desktop-trusted-input.d.mts +1 -1
  282. package/dist/lib/esm/desktop-trusted-input.mjs +1 -1
  283. package/dist/lib/esm/editor-extension-registrar.d.mts +1 -1
  284. package/dist/lib/esm/editor-extension-registrar.mjs +1 -1
  285. package/dist/lib/esm/editor-suggest-registrar.d.mts +1 -1
  286. package/dist/lib/esm/editor-suggest-registrar.mjs +1 -1
  287. package/dist/lib/esm/extensions-registrar.d.mts +1 -1
  288. package/dist/lib/esm/extensions-registrar.mjs +1 -1
  289. package/dist/lib/esm/file-change.d.mts +3 -3
  290. package/dist/lib/esm/file-change.mjs +1 -1
  291. package/dist/lib/esm/folder-note.d.mts +1 -1
  292. package/dist/lib/esm/folder-note.mjs +1 -1
  293. package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +2 -2
  294. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +1 -1
  295. package/dist/lib/esm/frontmatter.d.mts +7 -7
  296. package/dist/lib/esm/frontmatter.mjs +1 -1
  297. package/dist/lib/esm/generated-during-build.mjs +2 -2
  298. package/dist/lib/esm/hover-link-source-registrar.d.mts +1 -1
  299. package/dist/lib/esm/hover-link-source-registrar.mjs +1 -1
  300. package/dist/lib/esm/i18n/custom-type-options.d.mts +4 -4
  301. package/dist/lib/esm/i18n/custom-type-options.mjs +1 -1
  302. package/dist/lib/esm/index.d.mts +1 -0
  303. package/dist/lib/esm/index.mjs +3 -1
  304. package/dist/lib/esm/link.d.mts +2 -2
  305. package/dist/lib/esm/link.mjs +2 -2
  306. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +1 -1
  307. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +1 -1
  308. package/dist/lib/esm/markdown-post-processor-registrar.d.mts +1 -1
  309. package/dist/lib/esm/markdown-post-processor-registrar.mjs +1 -1
  310. package/dist/lib/esm/menu-event-registrar.d.mts +4 -4
  311. package/dist/lib/esm/metadata-cache.mjs +1 -1
  312. package/dist/lib/esm/mobile-trusted-input.mjs +1 -1
  313. package/dist/lib/esm/modals/minimizable-modal.mjs +1 -1
  314. package/dist/lib/esm/modals/modal-command-builder.d.mts +12 -12
  315. package/dist/lib/esm/modals/modal-command-builder.mjs +1 -1
  316. package/dist/lib/esm/modals/prompt.mjs +9 -9
  317. package/dist/lib/esm/notebook-navigator.d.mts +3 -3
  318. package/dist/lib/esm/notebook-navigator.mjs +1 -1
  319. package/dist/lib/esm/obsidian-lib-state.mjs +1 -1
  320. package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +1 -1
  321. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +1 -1
  322. package/dist/lib/esm/obsidian-word-characters.d.mts +59 -0
  323. package/dist/lib/esm/obsidian-word-characters.mjs +139 -0
  324. package/dist/lib/esm/parse-link.d.mts +2 -2
  325. package/dist/lib/esm/parse-link.mjs +1 -1
  326. package/dist/lib/esm/path-settings.mjs +1 -1
  327. package/dist/lib/esm/plugin/plugin-api.d.mts +2 -2
  328. package/dist/lib/esm/plugin/plugin-api.mjs +1 -1
  329. package/dist/lib/esm/plugin/plugin-context.mjs +1 -1
  330. package/dist/lib/esm/plugin/plugin-event-source.d.mts +1 -1
  331. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  332. package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +3 -3
  333. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +1 -1
  334. package/dist/lib/esm/plugin/plugin.mjs +1 -1
  335. package/dist/lib/esm/plugin/settings-migration-api.d.mts +1 -1
  336. package/dist/lib/esm/plugin/settings-migration-api.mjs +1 -1
  337. package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +1 -1
  338. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +1 -1
  339. package/dist/lib/esm/queue.mjs +1 -1
  340. package/dist/lib/esm/reference.d.mts +6 -6
  341. package/dist/lib/esm/reference.mjs +1 -1
  342. package/dist/lib/esm/resource-lock.mjs +1 -1
  343. package/dist/lib/esm/ribbon-icon-registrar.d.mts +1 -1
  344. package/dist/lib/esm/ribbon-icon-registrar.mjs +1 -1
  345. package/dist/lib/esm/setting-components/month-component.d.mts +2 -2
  346. package/dist/lib/esm/setting-components/month-component.mjs +1 -1
  347. package/dist/lib/esm/setting-components/text-based-component.d.mts +3 -3
  348. package/dist/lib/esm/setting-components/text-based-component.mjs +1 -1
  349. package/dist/lib/esm/setting-components/week-component.d.mts +2 -2
  350. package/dist/lib/esm/setting-components/week-component.mjs +1 -1
  351. package/dist/lib/esm/status-bar-item-registrar.d.mts +1 -1
  352. package/dist/lib/esm/status-bar-item-registrar.mjs +1 -1
  353. package/dist/lib/esm/templater.d.mts +9 -9
  354. package/dist/lib/esm/templater.mjs +1 -1
  355. package/dist/lib/esm/validation.d.mts +1 -1
  356. package/dist/lib/esm/validation.mjs +1 -1
  357. package/dist/lib/esm/vault-transaction.mjs +1 -1
  358. package/dist/lib/esm/view-registrar.d.mts +1 -1
  359. package/dist/lib/esm/view-registrar.mjs +1 -1
  360. package/dist/styles.css +2 -2
  361. package/package.json +6 -3
@@ -112,4 +112,4 @@ export {
112
112
  DataStoreSeeds,
113
113
  validateDataStoreSeed
114
114
  };
115
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RvcmVzL2RhdGEtc3RvcmUtc2VlZHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIGVzbGludC1kaXNhYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBUaGVzZSBhcmUgT2JzaWRpYW4gcmVuZGVyZXIgV2ViIEFQSXMsIG5vdCBOb2RlIGJ1aWx0aW5zLiAqL1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIE9wdGlvbmFsIGNodW5rZWQgc2VlZHMgZm9yIGV4cGVuc2l2ZSBkZXJpdmVkIGNhY2hlcywgd2l0aCBwZXItZmlsZSB2YWxpZGF0aW9uIGJlZm9yZSByZXVzZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpzb25WYWx1ZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgTG9jYWxEYXRhU3RvcmUgfSBmcm9tICcuL2xvY2FsLWRhdGEtc3RvcmUudHMnO1xuXG5pbXBvcnQgeyBpc0RhdGFTdG9yZUpzb25WYWx1ZSB9IGZyb20gJy4vZGF0YS1zdG9yZS1yZXBsaWNhLnRzJztcbmltcG9ydCB7IERhdGFTdG9yZVRyYW5zcG9ydCB9IGZyb20gJy4vZGF0YS1zdG9yZS10cmFuc3BvcnQudHMnO1xuXG4vKipcbiAqIEEgZGVyaXZlZCByZWNvcmQgdGFnZ2VkIHdpdGggYm90aCBjaGVhcCBzdGF0aXN0aWNzIGFuZCBhIGNvbnRlbnQgaGFzaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVTZWVkRW50cnkgZXh0ZW5kcyBEYXRhU3RvcmVTZWVkRmlsZSB7XG4gIC8qKlxuICAgKiBDb250ZW50IGhhc2gsIHVzaW5nIHRoZSBzYW1lIGFsZ29yaXRobSBvbiBldmVyeSBkZXZpY2UuXG4gICAqL1xuICByZWFkb25seSBoYXNoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb25zdW1lci1kZWZpbmVkIEpTT04gY2FjaGUgcmVjb3JkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IEpzb25WYWx1ZTtcbn1cblxuLyoqXG4gKiBDaGVhcCBmaWxlIGlkZW50aXR5IGFscmVhZHkgYXZhaWxhYmxlIGZyb20gdGhlIHZhdWx0J3MgZmlsZSB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTdG9yZVNlZWRGaWxlIHtcbiAgLyoqXG4gICAqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUuXG4gICAqL1xuICByZWFkb25seSBtdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogVmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIEZpbGUgc2l6ZSBpbiBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNpemU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBvcHRpb25hbCBjYWNoZS1zZWVkIHNoYXJpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlU2VlZHNDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBEZWRpY2F0ZWQgZGV2aWNlLWxvY2FsIHN0b3JlIHRoYXQgb3ducyB0aGUgc2VlZCBwdWJsaXNoZXIgaWRlbnRpdHkuXG4gICAqL1xuICByZWFkb25seSBsb2NhbDogTG9jYWxEYXRhU3RvcmU7XG4gIC8qKlxuICAgKiBQZXItc3RvcmUgdXNlciBzZXR0aW5nLiBEaXNhYmxlZCBtZWFucyBuZWl0aGVyIHB1Ymxpc2hpbmcgbm9yIGFkb3B0aW5nIHNlZWRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hhcmU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTdG9yZS1zY29wZWQsIGJvdW5kZWQgTWFya2Rvd24gdHJhbnNwb3J0LiBJbmNsdWRlIHRoZSBjb25zdW1lciBzY2hlbWEgdmVyc2lvbiBpbiBpdHMgc3RvcmUgaWQuXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BvcnQ6IERhdGFTdG9yZVRyYW5zcG9ydDtcbn1cblxuLyoqXG4gKiBSZXN1bHRzIG9mIHZhbGlkYXRpbmcgYSBzaGFyZWQgY2FjaGUgc2VlZCBhZ2FpbnN0IHRoZSBsb2NhbCB2YXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVTZWVkVmFsaWRhdGlvbiB7XG4gIC8qKlxuICAgKiBGaWxlcyBhYnNlbnQgZnJvbSB0aGUgc2VlZCwgb3Igd2l0aCBkaWZmZXJlbnQgY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHJlYnVpbGQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogVmFsaWRhdGVkIHNlZWQgcmVjb3Jkcywgd2l0aCBsb2NhbCBmaWxlIHN0YXRpc3RpY3MuXG4gICAqL1xuICByZWFkb25seSByZXVzYWJsZTogRGF0YVN0b3JlU2VlZEVudHJ5W107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgcGVyLWZpbGUgc2VlZCB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlRGF0YVN0b3JlU2VlZFBhcmFtcyB7XG4gIC8qKlxuICAgKiBTZWVkIGVudHJpZXMgZnJvbSBhIHJlY29nbml6ZWQgY29uc3VtZXIgc2NoZW1hLlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cmllczogcmVhZG9ubHkgRGF0YVN0b3JlU2VlZEVudHJ5W107XG4gIC8qKlxuICAgKiBDdXJyZW50IGZpbGUgdHJlZSwgYXZhaWxhYmxlIHdpdGhvdXQgcmVhZGluZyBub3RlIHRleHQuXG4gICAqL1xuICByZWFkb25seSBmaWxlczogcmVhZG9ubHkgRGF0YVN0b3JlU2VlZEZpbGVbXTtcbiAgLyoqXG4gICAqIEhhc2hlcyB0ZXh0IG9ubHkgd2hlbiBzaXplIG1hdGNoZXMgYnV0IG10aW1lIGRpZmZlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gRmlsZSByZXF1aXJpbmcgdmFsaWRhdGlvbi5cbiAgICogQHJldHVybnMgSXRzIGNvbnRlbnQgaGFzaC5cbiAgICovXG4gIHJlYWRvbmx5IGhhc2hGaWxlOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59XG5cbmludGVyZmFjZSBTZWVkIHtcbiAgZW50cmllczogRGF0YVN0b3JlU2VlZEVudHJ5W107XG4gIGZvcm1hdDogMTtcbiAgdGltZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbmFsIHBlcmZvcm1hbmNlIGhpbnRzLiBTZWVkcyBhcmUgbmV2ZXIgYXV0aG9yaXRhdGl2ZSBzdGF0ZSBhbmQgbXVzdCBiZSB2YWxpZGF0ZWQgYmVmb3JlIHJldXNlLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVN0b3JlU2VlZHMge1xuICAvKipcbiAgICogRGV2aWNlLWxvY2FsIGlkZW50aXR5IGFuZCBzZXJpYWxpemF0aW9uIGJvdW5kYXJ5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvY2FsOiBMb2NhbERhdGFTdG9yZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBzdG9yZSBzaGFyZXMgY2FjaGUgc2VlZHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hhcmU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTdG9yZS1zY29wZWQgc25hcHNob3QgdHJhbnNwb3J0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zcG9ydDogRGF0YVN0b3JlVHJhbnNwb3J0O1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGNhY2hlLXNlZWQgcHVibGlzaGVyIGFuZCByZWFkZXIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBMb2NhbCBpZGVudGl0eSwgdHJhbnNwb3J0IGFuZCB0aGUgcGVyLXN0b3JlIHNoYXJpbmcgc2V0dGluZy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IERhdGFTdG9yZVNlZWRzQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICB0aGlzLmxvY2FsID0gcGFyYW1zLmxvY2FsO1xuICAgIHRoaXMuc2hhcmUgPSBwYXJhbXMuc2hhcmU7XG4gICAgdGhpcy50cmFuc3BvcnQgPSBwYXJhbXMudHJhbnNwb3J0O1xuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlcyBhIGJvdW5kZWQgc2VlZCwgcmVwbGFjaW5nIG9ubHkgdGhpcyBkZXZpY2UncyBlYXJsaWVyIHB1YmxpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGVudHJpZXMgLSBEZXJpdmVkIHJlY29yZHMgd2l0aCBmaWxlIHN0YXRpc3RpY3MgYW5kIGhhc2hlcy5cbiAgICogQHJldHVybnMgV2hldGhlciBzaGFyaW5nIHdhcyBlbmFibGVkIGFuZCB0aGUgc2VlZCB3YXMgcHVibGlzaGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHB1Ymxpc2goZW50cmllczogcmVhZG9ubHkgRGF0YVN0b3JlU2VlZEVudHJ5W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuc2hhcmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubG9jYWwuZXhjbHVzaXZlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMubG9jYWwuZ2V0T3JDcmVhdGUoJ3NlZWQtZGV2aWNlLXYxJywgd2luZG93LmNyeXB0by5yYW5kb21VVUlEKCkpO1xuICAgICAgaWYgKHR5cGVvZiBkZXZpY2UgIT09ICdzdHJpbmcnIHx8ICEvXltcXHctXSskLy50ZXN0KGRldmljZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxvY2FsIHNlZWQgaWRlbnRpdHknKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvb3QgPSBgJHt0aGlzLnRyYW5zcG9ydC5yb290fS9zZWVkcy8ke2RldmljZX1gO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5saXN0KCk7XG4gICAgICBjb25zdCBiYXNlID0gYCR7cm9vdH0vc2VlZC0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfS1tYW5pZmVzdGA7XG4gICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZVNuYXBzaG90KHsgYmFzZSwgcGF5bG9hZDogeyBlbnRyaWVzLCBmb3JtYXQ6IDEsIHRpbWU6IERhdGUubm93KCkgfSB9KTtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBmaWxlcykge1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKGAke3Jvb3R9L3NlZWQtYCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZW1vdmUocGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBuZXdlc3QgY29tcGxldGUgc2VlZCBmb3IgdGhpcyB0cmFuc3BvcnQncyBzY2hlbWEuXG4gICAqXG4gICAqIEByZXR1cm5zIFNlZWQgcmVjb3Jkcywgb3IgYHVuZGVmaW5lZGAgaWYgc2hhcmluZyBpcyBkaXNhYmxlZCBvciBubyBjb21wbGV0ZSBzZWVkIGlzIGF2YWlsYWJsZSB5ZXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVhZExhdGVzdCgpOiBQcm9taXNlPERhdGFTdG9yZVNlZWRFbnRyeVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLnNoYXJlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMudHJhbnNwb3J0Lmxpc3QoKTtcbiAgICBsZXQgbmV3ZXN0ID0gLUluZmluaXR5O1xuICAgIGxldCBlbnRyaWVzOiBEYXRhU3RvcmVTZWVkRW50cnlbXSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgZmlsZXMpIHtcbiAgICAgIGlmICghL1xcL3NlZWQtW1xcdy1dKy1tYW5pZmVzdFxcLm1kJC8udGVzdChwYXRoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzZWVkOiB1bmtub3duO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VlZCA9IGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlYWRTbmFwc2hvdChwYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBpZiAoIShpc1NlZWQoc2VlZCkgJiYgc2VlZC50aW1lID4gbmV3ZXN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbmV3ZXN0ID0gc2VlZC50aW1lO1xuICAgICAgZW50cmllcyA9IHNlZWQuZW50cmllcztcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBzZWVkIHVzaW5nIGZyZWUgZmlsZSBzdGF0aXN0aWNzIGZpcnN0LCBoYXNoaW5nIG9ubHkgc2l6ZS1lcXVhbCBtdGltZSBtaXNtYXRjaGVzLlxuICogRmlsZXMgYWJzZW50IGxvY2FsbHkgYXJlIGRpc2NhcmRlZC4gQ29uc3VtZXJzIGluZGV4IG9ubHkgdGhlIHJldHVybmVkIHJlYnVpbGQgcGF0aHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFNlZWQsIGN1cnJlbnQgZmlsZSB0cmVlIGFuZCBjb250ZW50LWhhc2ggcmVhZGVyLlxuICogQHJldHVybnMgUmV1c2FibGUgcmVjb3JkcyBhbmQgdGhlIHBhdGhzIHRoYXQgc3RpbGwgbmVlZCBpbmRleGluZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlRGF0YVN0b3JlU2VlZChwYXJhbXM6IFZhbGlkYXRlRGF0YVN0b3JlU2VlZFBhcmFtcyk6IFByb21pc2U8RGF0YVN0b3JlU2VlZFZhbGlkYXRpb24+IHtcbiAgY29uc3Qgc2VlZCA9IG5ldyBNYXAocGFyYW1zLmVudHJpZXMubWFwKChlbnRyeSkgPT4gW2VudHJ5LnBhdGgsIGVudHJ5XSkpO1xuICBjb25zdCByZXVzYWJsZTogRGF0YVN0b3JlU2VlZEVudHJ5W10gPSBbXTtcbiAgY29uc3QgcmVidWlsZDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIHBhcmFtcy5maWxlcykge1xuICAgIGNvbnN0IGVudHJ5ID0gc2VlZC5nZXQoZmlsZS5wYXRoKTtcbiAgICBpZiAoZW50cnk/LnNpemUgPT09IGZpbGUuc2l6ZSAmJiAoZW50cnkubXRpbWUgPT09IGZpbGUubXRpbWUgfHwgZW50cnkuaGFzaCA9PT0gYXdhaXQgcGFyYW1zLmhhc2hGaWxlKGZpbGUucGF0aCkpKSB7XG4gICAgICByZXVzYWJsZS5wdXNoKHsgLi4uZW50cnksIC4uLmZpbGUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYnVpbGQucHVzaChmaWxlLnBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyByZWJ1aWxkLCByZXVzYWJsZSB9O1xufVxuXG5mdW5jdGlvbiBpc1NlZWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZWVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgJ2Zvcm1hdCcgaW4gdmFsdWUgJiYgdmFsdWUuZm9ybWF0ID09PSAxXG4gICAgJiYgJ3RpbWUnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aW1lID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUudGltZSlcbiAgICAmJiAnZW50cmllcycgaW4gdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZS5lbnRyaWVzKSAmJiB2YWx1ZS5lbnRyaWVzLmV2ZXJ5KChlbnRyeTogdW5rbm93bikgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3BhdGgnIGluIGVudHJ5ICYmIHR5cGVvZiBlbnRyeS5wYXRoID09PSAnc3RyaW5nJ1xuICAgICAgJiYgJ210aW1lJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkubXRpbWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShlbnRyeS5tdGltZSlcbiAgICAgICYmICdzaXplJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkuc2l6ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKGVudHJ5LnNpemUpXG4gICAgICAmJiAnaGFzaCcgaW4gZW50cnkgJiYgdHlwZW9mIGVudHJ5Lmhhc2ggPT09ICdzdHJpbmcnICYmICd2YWx1ZScgaW4gZW50cnkgJiYgaXNEYXRhU3RvcmVKc29uVmFsdWUoZW50cnkudmFsdWUpXG4gICAgKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBV0EsU0FBUyw0QkFBNEI7QUFDckMsU0FBUywwQkFBMEI7QUFnRzVCLE1BQU0sZUFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVA7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1aLFlBQVksUUFBeUM7QUFDMUQsU0FBSyxRQUFRLE9BQU87QUFDcEIsU0FBSyxRQUFRLE9BQU87QUFDcEIsU0FBSyxZQUFZLE9BQU87QUFBQSxFQUMxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxRQUFRLFNBQTBEO0FBQzdFLFFBQUksQ0FBQyxLQUFLLE9BQU87QUFDZixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sTUFBTSxLQUFLLE1BQU0sVUFBVSxZQUFZO0FBQzVDLFlBQU0sU0FBUyxNQUFNLEtBQUssTUFBTSxZQUFZLGtCQUFrQixPQUFPLE9BQU8sV0FBVyxDQUFDO0FBQ3hGLFVBQUksT0FBTyxXQUFXLFlBQVksQ0FBQyxXQUFXLEtBQUssTUFBTSxHQUFHO0FBQzFELGNBQU0sSUFBSSxNQUFNLDZCQUE2QjtBQUFBLE1BQy9D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
115
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RvcmVzL2RhdGEtc3RvcmUtc2VlZHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIGVzbGludC1kaXNhYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBUaGVzZSBhcmUgT2JzaWRpYW4gcmVuZGVyZXIgV2ViIEFQSXMsIG5vdCBOb2RlIGJ1aWx0aW5zLiAqL1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIE9wdGlvbmFsIGNodW5rZWQgc2VlZHMgZm9yIGV4cGVuc2l2ZSBkZXJpdmVkIGNhY2hlcywgd2l0aCBwZXItZmlsZSB2YWxpZGF0aW9uIGJlZm9yZSByZXVzZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpzb25WYWx1ZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgTG9jYWxEYXRhU3RvcmUgfSBmcm9tICcuL2xvY2FsLWRhdGEtc3RvcmUudHMnO1xuXG5pbXBvcnQgeyBpc0RhdGFTdG9yZUpzb25WYWx1ZSB9IGZyb20gJy4vZGF0YS1zdG9yZS1yZXBsaWNhLnRzJztcbmltcG9ydCB7IERhdGFTdG9yZVRyYW5zcG9ydCB9IGZyb20gJy4vZGF0YS1zdG9yZS10cmFuc3BvcnQudHMnO1xuXG4vKipcbiAqIEEgZGVyaXZlZCByZWNvcmQgdGFnZ2VkIHdpdGggYm90aCBjaGVhcCBzdGF0aXN0aWNzIGFuZCBhIGNvbnRlbnQgaGFzaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVTZWVkRW50cnkgZXh0ZW5kcyBEYXRhU3RvcmVTZWVkRmlsZSB7XG4gIC8qKlxuICAgKiBDb250ZW50IGhhc2gsIHVzaW5nIHRoZSBzYW1lIGFsZ29yaXRobSBvbiBldmVyeSBkZXZpY2UuXG4gICAqL1xuICByZWFkb25seSBoYXNoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb25zdW1lci1kZWZpbmVkIEpTT04gY2FjaGUgcmVjb3JkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IEpzb25WYWx1ZTtcbn1cblxuLyoqXG4gKiBDaGVhcCBmaWxlIGlkZW50aXR5IGFscmVhZHkgYXZhaWxhYmxlIGZyb20gdGhlIHZhdWx0J3MgZmlsZSB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTdG9yZVNlZWRGaWxlIHtcbiAgLyoqXG4gICAqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUuXG4gICAqL1xuICByZWFkb25seSBtdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogVmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIEZpbGUgc2l6ZSBpbiBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNpemU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBvcHRpb25hbCBjYWNoZS1zZWVkIHNoYXJpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlU2VlZHNDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBEZWRpY2F0ZWQgZGV2aWNlLWxvY2FsIHN0b3JlIHRoYXQgb3ducyB0aGUgc2VlZCBwdWJsaXNoZXIgaWRlbnRpdHkuXG4gICAqL1xuICByZWFkb25seSBsb2NhbDogTG9jYWxEYXRhU3RvcmU7XG4gIC8qKlxuICAgKiBQZXItc3RvcmUgdXNlciBzZXR0aW5nLiBEaXNhYmxlZCBtZWFucyBuZWl0aGVyIHB1Ymxpc2hpbmcgbm9yIGFkb3B0aW5nIHNlZWRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hhcmU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTdG9yZS1zY29wZWQsIGJvdW5kZWQgTWFya2Rvd24gdHJhbnNwb3J0LiBJbmNsdWRlIHRoZSBjb25zdW1lciBzY2hlbWEgdmVyc2lvbiBpbiBpdHMgc3RvcmUgaWQuXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BvcnQ6IERhdGFTdG9yZVRyYW5zcG9ydDtcbn1cblxuLyoqXG4gKiBSZXN1bHRzIG9mIHZhbGlkYXRpbmcgYSBzaGFyZWQgY2FjaGUgc2VlZCBhZ2FpbnN0IHRoZSBsb2NhbCB2YXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVTZWVkVmFsaWRhdGlvbiB7XG4gIC8qKlxuICAgKiBGaWxlcyBhYnNlbnQgZnJvbSB0aGUgc2VlZCwgb3Igd2l0aCBkaWZmZXJlbnQgY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHJlYnVpbGQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogVmFsaWRhdGVkIHNlZWQgcmVjb3Jkcywgd2l0aCBsb2NhbCBmaWxlIHN0YXRpc3RpY3MuXG4gICAqL1xuICByZWFkb25seSByZXVzYWJsZTogRGF0YVN0b3JlU2VlZEVudHJ5W107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgcGVyLWZpbGUgc2VlZCB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlRGF0YVN0b3JlU2VlZFBhcmFtcyB7XG4gIC8qKlxuICAgKiBTZWVkIGVudHJpZXMgZnJvbSBhIHJlY29nbml6ZWQgY29uc3VtZXIgc2NoZW1hLlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cmllczogcmVhZG9ubHkgRGF0YVN0b3JlU2VlZEVudHJ5W107XG4gIC8qKlxuICAgKiBDdXJyZW50IGZpbGUgdHJlZSwgYXZhaWxhYmxlIHdpdGhvdXQgcmVhZGluZyBub3RlIHRleHQuXG4gICAqL1xuICByZWFkb25seSBmaWxlczogcmVhZG9ubHkgRGF0YVN0b3JlU2VlZEZpbGVbXTtcbiAgLyoqXG4gICAqIEhhc2hlcyB0ZXh0IG9ubHkgd2hlbiBzaXplIG1hdGNoZXMgYnV0IG10aW1lIGRpZmZlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gRmlsZSByZXF1aXJpbmcgdmFsaWRhdGlvbi5cbiAgICogQHJldHVybnMgSXRzIGNvbnRlbnQgaGFzaC5cbiAgICovXG4gIHJlYWRvbmx5IGhhc2hGaWxlOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59XG5cbmludGVyZmFjZSBTZWVkIHtcbiAgcmVhZG9ubHkgZW50cmllczogRGF0YVN0b3JlU2VlZEVudHJ5W107XG4gIHJlYWRvbmx5IGZvcm1hdDogMTtcbiAgcmVhZG9ubHkgdGltZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbmFsIHBlcmZvcm1hbmNlIGhpbnRzLiBTZWVkcyBhcmUgbmV2ZXIgYXV0aG9yaXRhdGl2ZSBzdGF0ZSBhbmQgbXVzdCBiZSB2YWxpZGF0ZWQgYmVmb3JlIHJldXNlLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVN0b3JlU2VlZHMge1xuICAvKipcbiAgICogRGV2aWNlLWxvY2FsIGlkZW50aXR5IGFuZCBzZXJpYWxpemF0aW9uIGJvdW5kYXJ5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvY2FsOiBMb2NhbERhdGFTdG9yZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBzdG9yZSBzaGFyZXMgY2FjaGUgc2VlZHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hhcmU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTdG9yZS1zY29wZWQgc25hcHNob3QgdHJhbnNwb3J0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zcG9ydDogRGF0YVN0b3JlVHJhbnNwb3J0O1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGNhY2hlLXNlZWQgcHVibGlzaGVyIGFuZCByZWFkZXIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBMb2NhbCBpZGVudGl0eSwgdHJhbnNwb3J0IGFuZCB0aGUgcGVyLXN0b3JlIHNoYXJpbmcgc2V0dGluZy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IERhdGFTdG9yZVNlZWRzQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICB0aGlzLmxvY2FsID0gcGFyYW1zLmxvY2FsO1xuICAgIHRoaXMuc2hhcmUgPSBwYXJhbXMuc2hhcmU7XG4gICAgdGhpcy50cmFuc3BvcnQgPSBwYXJhbXMudHJhbnNwb3J0O1xuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlcyBhIGJvdW5kZWQgc2VlZCwgcmVwbGFjaW5nIG9ubHkgdGhpcyBkZXZpY2UncyBlYXJsaWVyIHB1YmxpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGVudHJpZXMgLSBEZXJpdmVkIHJlY29yZHMgd2l0aCBmaWxlIHN0YXRpc3RpY3MgYW5kIGhhc2hlcy5cbiAgICogQHJldHVybnMgV2hldGhlciBzaGFyaW5nIHdhcyBlbmFibGVkIGFuZCB0aGUgc2VlZCB3YXMgcHVibGlzaGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHB1Ymxpc2goZW50cmllczogcmVhZG9ubHkgRGF0YVN0b3JlU2VlZEVudHJ5W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuc2hhcmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubG9jYWwuZXhjbHVzaXZlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMubG9jYWwuZ2V0T3JDcmVhdGUoJ3NlZWQtZGV2aWNlLXYxJywgd2luZG93LmNyeXB0by5yYW5kb21VVUlEKCkpO1xuICAgICAgaWYgKHR5cGVvZiBkZXZpY2UgIT09ICdzdHJpbmcnIHx8ICEvXltcXHctXSskLy50ZXN0KGRldmljZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxvY2FsIHNlZWQgaWRlbnRpdHknKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvb3QgPSBgJHt0aGlzLnRyYW5zcG9ydC5yb290fS9zZWVkcy8ke2RldmljZX1gO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5saXN0KCk7XG4gICAgICBjb25zdCBiYXNlID0gYCR7cm9vdH0vc2VlZC0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfS1tYW5pZmVzdGA7XG4gICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZVNuYXBzaG90KHsgYmFzZSwgcGF5bG9hZDogeyBlbnRyaWVzLCBmb3JtYXQ6IDEsIHRpbWU6IERhdGUubm93KCkgfSB9KTtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBmaWxlcykge1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKGAke3Jvb3R9L3NlZWQtYCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZW1vdmUocGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBuZXdlc3QgY29tcGxldGUgc2VlZCBmb3IgdGhpcyB0cmFuc3BvcnQncyBzY2hlbWEuXG4gICAqXG4gICAqIEByZXR1cm5zIFNlZWQgcmVjb3Jkcywgb3IgYHVuZGVmaW5lZGAgaWYgc2hhcmluZyBpcyBkaXNhYmxlZCBvciBubyBjb21wbGV0ZSBzZWVkIGlzIGF2YWlsYWJsZSB5ZXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVhZExhdGVzdCgpOiBQcm9taXNlPERhdGFTdG9yZVNlZWRFbnRyeVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLnNoYXJlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMudHJhbnNwb3J0Lmxpc3QoKTtcbiAgICBsZXQgbmV3ZXN0ID0gLUluZmluaXR5O1xuICAgIGxldCBlbnRyaWVzOiBEYXRhU3RvcmVTZWVkRW50cnlbXSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgZmlsZXMpIHtcbiAgICAgIGlmICghL1xcL3NlZWQtW1xcdy1dKy1tYW5pZmVzdFxcLm1kJC8udGVzdChwYXRoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzZWVkOiB1bmtub3duO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VlZCA9IGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlYWRTbmFwc2hvdChwYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBpZiAoIShpc1NlZWQoc2VlZCkgJiYgc2VlZC50aW1lID4gbmV3ZXN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbmV3ZXN0ID0gc2VlZC50aW1lO1xuICAgICAgZW50cmllcyA9IHNlZWQuZW50cmllcztcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBzZWVkIHVzaW5nIGZyZWUgZmlsZSBzdGF0aXN0aWNzIGZpcnN0LCBoYXNoaW5nIG9ubHkgc2l6ZS1lcXVhbCBtdGltZSBtaXNtYXRjaGVzLlxuICogRmlsZXMgYWJzZW50IGxvY2FsbHkgYXJlIGRpc2NhcmRlZC4gQ29uc3VtZXJzIGluZGV4IG9ubHkgdGhlIHJldHVybmVkIHJlYnVpbGQgcGF0aHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFNlZWQsIGN1cnJlbnQgZmlsZSB0cmVlIGFuZCBjb250ZW50LWhhc2ggcmVhZGVyLlxuICogQHJldHVybnMgUmV1c2FibGUgcmVjb3JkcyBhbmQgdGhlIHBhdGhzIHRoYXQgc3RpbGwgbmVlZCBpbmRleGluZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlRGF0YVN0b3JlU2VlZChwYXJhbXM6IFZhbGlkYXRlRGF0YVN0b3JlU2VlZFBhcmFtcyk6IFByb21pc2U8RGF0YVN0b3JlU2VlZFZhbGlkYXRpb24+IHtcbiAgY29uc3Qgc2VlZCA9IG5ldyBNYXAocGFyYW1zLmVudHJpZXMubWFwKChlbnRyeSkgPT4gW2VudHJ5LnBhdGgsIGVudHJ5XSkpO1xuICBjb25zdCByZXVzYWJsZTogRGF0YVN0b3JlU2VlZEVudHJ5W10gPSBbXTtcbiAgY29uc3QgcmVidWlsZDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIHBhcmFtcy5maWxlcykge1xuICAgIGNvbnN0IGVudHJ5ID0gc2VlZC5nZXQoZmlsZS5wYXRoKTtcbiAgICBpZiAoZW50cnk/LnNpemUgPT09IGZpbGUuc2l6ZSAmJiAoZW50cnkubXRpbWUgPT09IGZpbGUubXRpbWUgfHwgZW50cnkuaGFzaCA9PT0gYXdhaXQgcGFyYW1zLmhhc2hGaWxlKGZpbGUucGF0aCkpKSB7XG4gICAgICByZXVzYWJsZS5wdXNoKHsgLi4uZW50cnksIC4uLmZpbGUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYnVpbGQucHVzaChmaWxlLnBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyByZWJ1aWxkLCByZXVzYWJsZSB9O1xufVxuXG5mdW5jdGlvbiBpc1NlZWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZWVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgJ2Zvcm1hdCcgaW4gdmFsdWUgJiYgdmFsdWUuZm9ybWF0ID09PSAxXG4gICAgJiYgJ3RpbWUnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aW1lID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUudGltZSlcbiAgICAmJiAnZW50cmllcycgaW4gdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZS5lbnRyaWVzKSAmJiB2YWx1ZS5lbnRyaWVzLmV2ZXJ5KChlbnRyeTogdW5rbm93bikgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3BhdGgnIGluIGVudHJ5ICYmIHR5cGVvZiBlbnRyeS5wYXRoID09PSAnc3RyaW5nJ1xuICAgICAgJiYgJ210aW1lJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkubXRpbWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShlbnRyeS5tdGltZSlcbiAgICAgICYmICdzaXplJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkuc2l6ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKGVudHJ5LnNpemUpXG4gICAgICAmJiAnaGFzaCcgaW4gZW50cnkgJiYgdHlwZW9mIGVudHJ5Lmhhc2ggPT09ICdzdHJpbmcnICYmICd2YWx1ZScgaW4gZW50cnkgJiYgaXNEYXRhU3RvcmVKc29uVmFsdWUoZW50cnkudmFsdWUpXG4gICAgKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBV0EsU0FBUyw0QkFBNEI7QUFDckMsU0FBUywwQkFBMEI7QUFnRzVCLE1BQU0sZUFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVA7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1aLFlBQVksUUFBeUM7QUFDMUQsU0FBSyxRQUFRLE9BQU87QUFDcEIsU0FBSyxRQUFRLE9BQU87QUFDcEIsU0FBSyxZQUFZLE9BQU87QUFBQSxFQUMxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxRQUFRLFNBQTBEO0FBQzdFLFFBQUksQ0FBQyxLQUFLLE9BQU87QUFDZixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sTUFBTSxLQUFLLE1BQU0sVUFBVSxZQUFZO0FBQzVDLFlBQU0sU0FBUyxNQUFNLEtBQUssTUFBTSxZQUFZLGtCQUFrQixPQUFPLE9BQU8sV0FBVyxDQUFDO0FBQ3hGLFVBQUksT0FBTyxXQUFXLFlBQVksQ0FBQyxXQUFXLEtBQUssTUFBTSxHQUFHO0FBQzFELGNBQU0s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
@@ -343,4 +343,4 @@ function isVector(value) {
343
343
  export {
344
344
  SharedDataStore
345
345
  };
346
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9zaGFyZWQtZGF0YS1zdG9yZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbi8qKlxuICogQGZpbGVcbiAqXG4gKiBNZXJnZWFibGUgcGx1Z2luIGRhdGEsIHRyYW5zcG9ydGVkIGFzIHNpbmdsZS13cml0ZXIgam91cm5hbCBzZWdtZW50cyBhbmQgY2h1bmtlZCBzbmFwc2hvdHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEYXRhQWRhcHRlciB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgSnNvblZhbHVlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIERhdGFTdG9yZU1lcmdlS2luZCxcbiAgRGF0YVN0b3JlT3BlcmF0aW9uXG59IGZyb20gJy4vZGF0YS1zdG9yZS1yZXBsaWNhLnRzJztcbmltcG9ydCB0eXBlIHsgTG9jYWxEYXRhU3RvcmUgfSBmcm9tICcuL2xvY2FsLWRhdGEtc3RvcmUudHMnO1xuXG5pbXBvcnQge1xuICBEYXRhU3RvcmVSZXBsaWNhLFxuICBpc0RhdGFTdG9yZU9wZXJhdGlvblxufSBmcm9tICcuL2RhdGEtc3RvcmUtcmVwbGljYS50cyc7XG5pbXBvcnQgeyBEYXRhU3RvcmVUcmFuc3BvcnQgfSBmcm9tICcuL2RhdGEtc3RvcmUtdHJhbnNwb3J0LnRzJztcblxuY29uc3QgREVGQVVMVF9BQ1RJVkVfREVWSUNFX01JTExJU0VDT05EUyA9IDJfNTkyXzAwMF8wMDA7XG5cbmNvbnN0IE9XTkVSX1BBVEhfSU5ERVggPSAtMjtcblxuY29uc3QgVkVDVE9SX0VOVFJZX0xFTkdUSCA9IDI7XG5jb25zdCBERVZJQ0VfUEFUSF9QQVJUUyA9IDI7XG5jb25zdCBSRUNPUkRfUFJFRklYID0gJ3NoYXJlZC1yZWNvcmQtdjE6JztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBvcGVuaW5nIGEgc2hhcmVkIHN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJlZERhdGFTdG9yZU9wZW5QYXJhbXMge1xuICAvKipcbiAgICogRGV2aWNlIHJldGlyZW1lbnQgaW50ZXJ2YWwsIG1lYXN1cmVkIGZyb20gaXRzIGxhc3QgYWNrbm93bGVkZ2VtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMjU5MjAwMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGFjdGl2ZURldmljZU1pbGxpc2Vjb25kcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFZhdWx0IGFkYXB0ZXIuXG4gICAqL1xuICByZWFkb25seSBhZGFwdGVyOiBEYXRhQWRhcHRlcjtcbiAgLyoqXG4gICAqIENvbmZpZ3VyYWJsZSBub24tZG90IHZhdWx0IGZvbGRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdQbHVnaW4gZGF0YSdgXG4gICAqL1xuICByZWFkb25seSBmb2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbW11dGFibGUgbWVyZ2UgcnVsZTsgY2hhbmdpbmcgaXQgcmVxdWlyZXMgYSBuZXcgc3RvcmUgaWQuXG4gICAqL1xuICByZWFkb25seSBraW5kOiBEYXRhU3RvcmVNZXJnZUtpbmQ7XG4gIC8qKlxuICAgKiBEZWRpY2F0ZWQgbG9jYWwgc3RvcmUgc2NvcGVkIHRvIFRISVMgdmF1bHQsIHBsdWdpbiBhbmQgc2hhcmVkLXN0b3JlIHNjaGVtYS4gVGhlIGNhbGxlciBvd25zIGl0cyBjb25uZWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYWw6IExvY2FsRGF0YVN0b3JlO1xuICAvKipcbiAgICogTWF4aW11bSBVVEYtOCBieXRlcyBwZXIgZmlsZSwgd3JhcHBlciBpbmNsdWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDEwMDAwMDBgXG4gICAqL1xuICByZWFkb25seSBtYXhGaWxlQnl0ZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQbHVnaW4gbWFuaWZlc3QgaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuICAvKipcbiAgICogU3RvcmUgaWQgaW5jbHVkaW5nIHRoZSBjb25zdW1lcidzIHNjaGVtYSB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmVJZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ2hhbmdlIHtcbiAgcmVhZG9ubHkgZGVsZXRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiBKc29uVmFsdWU7XG59XG5cbmludGVyZmFjZSBDaGVja3BvaW50IHtcbiAgY291bnRlcjogbnVtYmVyO1xuICBmb3JtYXQ6IDE7XG4gIGtpbmQ6IERhdGFTdG9yZU1lcmdlS2luZDtcbiAgb3BlcmF0aW9uczogRGF0YVN0b3JlT3BlcmF0aW9uW107XG4gIHRpbWU6IG51bWJlcjtcbiAgdmVjdG9yOiBWZXJzaW9uVmVjdG9yO1xufVxuXG50eXBlIFZlcnNpb25WZWN0b3IgPSBbc3RyaW5nLCBudW1iZXJdW107XG5cbi8qKlxuICogQSBkZXZpY2UtbG9jYWwgcXVlcnkgcmVwbGljYSBiYWNrZWQgYnkgdmF1bHQgZmlsZXMuIENhbGwgYHN5bmNocm9uaXplYCBhZnRlciB0cmFuc3BvcnQgY2hhbmdlcyBvciBwZXJpb2RpY2FsbHkuXG4gKiBObyB0aW1lciBvciBldmVudCBoYW5kbGVyIG91dGxpdmVzIHRoZSBjb25zdW1lcjogdGhlIGNvbnN1bWVyIHNjaGVkdWxlcyBzeW5jaHJvbml6YXRpb24gYW5kIG93bnMgdW5sb2FkaW5nLlxuICovXG5leHBvcnQgY2xhc3MgU2hhcmVkRGF0YVN0b3JlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVEZXZpY2VNaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBjb3VudGVyID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFJlY29yZHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlcGxpY2E6IERhdGFTdG9yZVJlcGxpY2E7XG4gIHByaXZhdGUgdGltZSA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNwb3J0OiBEYXRhU3RvcmVUcmFuc3BvcnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmVjdG9yID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBwYXJhbXM6IFNoYXJlZERhdGFTdG9yZU9wZW5QYXJhbXMsIHByb3RlY3RlZCByZWFkb25seSBkZXZpY2U6IHN0cmluZykge1xuICAgIHRoaXMudHJhbnNwb3J0ID0gbmV3IERhdGFTdG9yZVRyYW5zcG9ydChwYXJhbXMpO1xuICAgIHRoaXMucmVwbGljYSA9IG5ldyBEYXRhU3RvcmVSZXBsaWNhKHBhcmFtcy5raW5kKTtcbiAgICB0aGlzLmFjdGl2ZURldmljZU1pbGxpc2Vjb25kcyA9IHBhcmFtcy5hY3RpdmVEZXZpY2VNaWxsaXNlY29uZHMgPz8gREVGQVVMVF9BQ1RJVkVfREVWSUNFX01JTExJU0VDT05EUztcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aGlzLmFjdGl2ZURldmljZU1pbGxpc2Vjb25kcykgfHwgdGhpcy5hY3RpdmVEZXZpY2VNaWxsaXNlY29uZHMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXZpY2UgcmV0aXJlbWVudCBpbnRlcnZhbCBtdXN0IGJlIHBvc2l0aXZlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGFuZCBzeW5jaHJvbml6ZXMgYSBzdG9yZSwgcmVzdG9yaW5nIGl0cyBkZXZpY2UgaWRlbnRpdHkgZXhjbHVzaXZlbHkgZnJvbSBJbmRleGVkREIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQZXJzaXN0ZW5jZSwgdHJhbnNwb3J0IGFuZCBtZXJnZSBwb2xpY3kuXG4gICAqIEByZXR1cm5zIEEgc3luY2hyb25pemVkIHF1ZXJ5IHJlcGxpY2EuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIG9wZW4ocGFyYW1zOiBTaGFyZWREYXRhU3RvcmVPcGVuUGFyYW1zKTogUHJvbWlzZTxTaGFyZWREYXRhU3RvcmU+IHtcbiAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBwYXJhbXMubG9jYWwuZ2V0T3JDcmVhdGUoJ3NoYXJlZC1kZXZpY2UtdjEnLCB3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKSk7XG4gICAgaWYgKHR5cGVvZiBkZXZpY2UgIT09ICdzdHJpbmcnIHx8ICEvXltcXHctXSskLy50ZXN0KGRldmljZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBsb2NhbCBkYXRhLXN0b3JlIGlkZW50aXR5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHN0b3JlID0gbmV3IFNoYXJlZERhdGFTdG9yZShwYXJhbXMsIGRldmljZSk7XG4gICAgYXdhaXQgc3RvcmUuc3luY2hyb25pemUoKTtcbiAgICByZXR1cm4gc3RvcmU7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIGEgY29tcGxldGUgY2h1bmtlZCBzbmFwc2hvdCBhbmQgdHJpbXMgb25seSB0aGlzIGRldmljZSdzIGFja25vd2xlZGdlZCBqb3VybmFsIHNlZ21lbnRzLlxuICAgKiBSZXRpcmVkIGRldmljZXMgcmVqb2luIGJ5IG1lcmdpbmcgc25hcHNob3RzOyB0b21ic3RvbmVzIHJlbWFpbiBpbiBzbmFwc2hvdHMgdG8gcHJldmVudCByZXN1cnJlY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gY29tcGFjdGlvbiBmaW5pc2hlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21wYWN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucGFyYW1zLmxvY2FsLmV4Y2x1c2l2ZShhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRMb2NhbCgpO1xuICAgICAgYXdhaXQgdGhpcy5tZXJnZUZpbGVzKCk7XG4gICAgICBhd2FpdCB0aGlzLnBlcnNpc3QoKTtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy50cmFuc3BvcnQubGlzdCgpO1xuICAgICAgY29uc3QgYmFzZSA9IGAke3RoaXMuZGV2aWNlUm9vdCgpfS9zbmFwc2hvdC0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfS1tYW5pZmVzdGA7XG4gICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZVNuYXBzaG90KHsgYmFzZSwgcGF5bG9hZDogdGhpcy5jaGVja3BvaW50KCkgfSk7XG4gICAgICBjb25zdCBhY2tub3dsZWRnZW1lbnRzID0gYXdhaXQgdGhpcy5hY2tub3dsZWRnZW1lbnRzKGZpbGVzKTtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBmaWxlcykge1xuICAgICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChgJHt0aGlzLmRldmljZVJvb3QoKX0vbG9nLWApKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlYWQocGF0aCk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcGVyYXRpb25zKSB8fCAhb3BlcmF0aW9ucy5ldmVyeShpc0RhdGFTdG9yZU9wZXJhdGlvbikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXN0ID0gTWF0aC5tYXgoLi4ub3BlcmF0aW9ucy5tYXAoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uLnNlcXVlbmNlKSk7XG4gICAgICAgIGlmIChhY2tub3dsZWRnZW1lbnRzLmV2ZXJ5KCh2ZWN0b3IpID0+ICh2ZWN0b3IuZ2V0KHRoaXMuZGV2aWNlKSA/PyAwKSA+PSBsYXN0KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlbW92ZShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVGhlIGNvbXBsZXRlIG5ldyBzbmFwc2hvdCBjb3ZlcnMgZXZlcnkgZWFybGllciBzbmFwc2hvdCBmcm9tIHRoaXMgd3JpdGVyLlxuICAgICAgZm9yIChjb25zdCBwYXRoIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoYCR7dGhpcy5kZXZpY2VSb290KCl9L3NuYXBzaG90LWApKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy50cmFuc3BvcnQucmVtb3ZlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhIHJlZ2lzdGVyIG9yIHJlbW92ZXMgdGhlIGN1cnJlbnRseSBvYnNlcnZlZCBhZGRpdGlvbnMgb2YgYSBzZXQgbWVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleSBvciBzZXQgbWVtYmVyLiBNaW4vbWF4IHJlZ2lzdGVycyBkZWxpYmVyYXRlbHkgY2Fubm90IGJlIGRlbGV0ZWQuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIGpvdXJuYWwgcHVibGljYXRpb24gYW5kIGxvY2FsIGNvbW1pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNoYW5nZShbeyBkZWxldGVkOiB0cnVlLCBrZXksIHZhbHVlOiBudWxsIH1dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgY3VycmVudCBsb2NhbCBxdWVyeSByZXBsaWNhLlxuICAgKlxuICAgKiBAcmV0dXJucyBEZXRhY2hlZCBrZXkvdmFsdWUgcGFpcnMgaW4gZGV0ZXJtaW5pc3RpYyBvcmRlci5cbiAgICovXG4gIHB1YmxpYyBlbnRyaWVzKCk6IFtzdHJpbmcsIHVua25vd25dW10ge1xuICAgIHJldHVybiB0aGlzLnJlcGxpY2EuZW50cmllcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGEgcmVnaXN0ZXIgb3Igc2V0IG1lbWJlcnNoaXAgZnJvbSB0aGUgY3VycmVudCBsb2NhbCBxdWVyeSByZXBsaWNhLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleSBvciBzZXQgbWVtYmVyLlxuICAgKiBAcmV0dXJucyBBIGRldGFjaGVkIHZhbHVlLCBvciBgdW5kZWZpbmVkYCB3aGVuIGFic2VudCBvciBkZWxldGVkLlxuICAgKi9cbiAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLnJlcGxpY2EuZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIG9uZSByZWdpc3RlciB2YWx1ZSwgb3IgYWRkcyBhIG1lbWJlciB0byBhbiBvYnNlcnZlZC1yZW1vdmUgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleSBvciBzZXQgbWVtYmVyLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBKU09OLWNvbXBhdGlibGUgdmFsdWUgKHVzZSBgdHJ1ZWAgZm9yIGEgc2V0KS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgam91cm5hbCBwdWJsaWNhdGlvbiBhbmQgbG9jYWwgY29tbWl0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IEpzb25WYWx1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2V0TWFueShbW2tleSwgdmFsdWVdXSk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIGEgYmF0Y2ggb2YgcmVnaXN0ZXIgd3JpdGVzLCBzcGxpdCBpbnRvIGJvdW5kZWQgaW1tdXRhYmxlIHNlZ21lbnRzLlxuICAgKiBTZWdtZW50cyBhcmUgaW5kaXZpZHVhbGx5IGR1cmFibGU7IGEgZmFpbGVkIGJhdGNoIGNhbiBoYXZlIGEgcHVibGlzaGVkIHByZWZpeCBhbmQgY2FuIGJlIHJldHJpZWQgc2FmZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gZW50cmllcyAtIFJlZ2lzdGVyIHdyaXRlcyBvciBzZXQgYWRkaXRpb25zLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBqb3VybmFsIHB1YmxpY2F0aW9uIGFuZCBsb2NhbCBjb21taXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0TWFueShlbnRyaWVzOiByZWFkb25seSAocmVhZG9ubHkgW3N0cmluZywgSnNvblZhbHVlXSlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2hhbmdlKGVudHJpZXMubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7IGRlbGV0ZWQ6IGZhbHNlLCBrZXksIHZhbHVlIH0pKSk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIGNvbXBsZXRlIHNuYXBzaG90cyBhbmQgY29udGlndW91cyBqb3VybmFsIGhpc3RvcnksIHRoZW4gcHVibGlzaGVzIGl0cyBkdXJhYmxlIGFja25vd2xlZGdlbWVudC5cbiAgICogUGFydGlhbCBkZWxpdmVyaWVzIHJlbWFpbiBwZW5kaW5nOyBhIGxhdGVyIGNhbGwgcmV0cmllcyB0aGVtLiBObyBhY2tub3dsZWRnZW1lbnQgc2tpcHMgYSBtaXNzaW5nIHNlcXVlbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgbG9jYWwgY2hlY2twb2ludCBhbmQgYWNrbm93bGVkZ2VtZW50IGNvbW1pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzeW5jaHJvbml6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnBhcmFtcy5sb2NhbC5leGNsdXNpdmUoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkTG9jYWwoKTtcbiAgICAgIGF3YWl0IHRoaXMubWVyZ2VGaWxlcygpO1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFja25vd2xlZGdlbWVudHMoZmlsZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBudW1iZXI+W10+IHtcbiAgICBjb25zdCBhY2tub3dsZWRnZW1lbnRzID0gW25ldyBNYXAodGhpcy52ZWN0b3IpXTtcbiAgICBjb25zdCBkZXZpY2VGaWxlcyA9IGZpbGVzLmZpbHRlcigocGF0aCkgPT4gcGF0aC5zdGFydHNXaXRoKGAke3RoaXMudHJhbnNwb3J0LnJvb3R9L2RldmljZXMvYCkpO1xuICAgIGNvbnN0IGRldmljZXMgPSBuZXcgU2V0KGRldmljZUZpbGVzLm1hcCgocGF0aCkgPT4gcGF0aC5zbGljZSh0aGlzLnRyYW5zcG9ydC5yb290Lmxlbmd0aCArIDEpLnNwbGl0KCcvJywgREVWSUNFX1BBVEhfUEFSVFMpWzFdKS5maWx0ZXIoKGRldmljZSkgPT4gZGV2aWNlICE9PSB1bmRlZmluZWQpKTtcbiAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICBpZiAoZGV2aWNlID09PSB0aGlzLmRldmljZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhdmUgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZWFkKGAke3RoaXMudHJhbnNwb3J0LnJvb3R9L2RldmljZXMvJHtkZXZpY2V9L2hhdmUubWRgKTtcbiAgICAgIGlmICghaXNPYmplY3QoaGF2ZSkgfHwgIWlzVmVjdG9yKGhhdmVbJ3ZlY3RvciddKSB8fCB0eXBlb2YgaGF2ZVsndGltZSddICE9PSAnbnVtYmVyJykge1xuICAgICAgICBhY2tub3dsZWRnZW1lbnRzLnB1c2gobmV3IE1hcCgpKTtcbiAgICAgIH0gZWxzZSBpZiAoRGF0ZS5ub3coKSAtIGhhdmVbJ3RpbWUnXSA8PSB0aGlzLmFjdGl2ZURldmljZU1pbGxpc2Vjb25kcykge1xuICAgICAgICBhY2tub3dsZWRnZW1lbnRzLnB1c2gobmV3IE1hcChoYXZlWyd2ZWN0b3InXSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWNrbm93bGVkZ2VtZW50cztcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHkob3BlcmF0aW9uOiBEYXRhU3RvcmVPcGVyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnJlcGxpY2EuYXBwbHkob3BlcmF0aW9uKTtcbiAgICB0aGlzLnZlY3Rvci5zZXQob3BlcmF0aW9uLmRldmljZSwgb3BlcmF0aW9uLnNlcXVlbmNlKTtcbiAgICB0aGlzLm9ic2VydmVDbG9jayhvcGVyYXRpb24udGltZSwgb3BlcmF0aW9uLmNvdW50ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGFuZ2UoY2hhbmdlczogcmVhZG9ubHkgQ2hhbmdlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnBhcmFtcy5sb2NhbC5leGNsdXNpdmUoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkTG9jYWwoKTtcbiAgICAgIGF3YWl0IHRoaXMubWVyZ2VGaWxlcygpO1xuICAgICAgY29uc3Qgb3BlcmF0aW9uczogRGF0YVN0b3JlT3BlcmF0aW9uW10gPSBbXTtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IG5ldyBEYXRhU3RvcmVSZXBsaWNhKHRoaXMucGFyYW1zLmtpbmQpO1xuICAgICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgdGhpcy5yZXBsaWNhLmV4cG9ydCgpKSB7XG4gICAgICAgIGNhbmRpZGF0ZS5hcHBseShvcGVyYXRpb24pO1xuICAgICAgfVxuICAgICAgbGV0IHNlcXVlbmNlID0gdGhpcy52ZWN0b3IuZ2V0KHRoaXMuZGV2aWNlKSA/PyAwO1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmNvdW50ZXIgPSBub3cgPiB0aGlzLnRpbWUgPyAwIDogdGhpcy5jb3VudGVyICsgMTtcbiAgICAgICAgdGhpcy50aW1lID0gTWF0aC5tYXgobm93LCB0aGlzLnRpbWUpO1xuICAgICAgICBjb25zdCBvcGVyYXRpb246IERhdGFTdG9yZU9wZXJhdGlvbiA9IHtcbiAgICAgICAgICAuLi5jaGFuZ2UsXG4gICAgICAgICAgY291bnRlcjogdGhpcy5jb3VudGVyLFxuICAgICAgICAgIGRldmljZTogdGhpcy5kZXZpY2UsXG4gICAgICAgICAgc2VxdWVuY2U6ICsrc2VxdWVuY2UsXG4gICAgICAgICAgdGFnczogY2FuZGlkYXRlLm9ic2VydmVkVGFncyhjaGFuZ2Uua2V5KSxcbiAgICAgICAgICB0aW1lOiB0aGlzLnRpbWVcbiAgICAgICAgfTtcbiAgICAgICAgY2FuZGlkYXRlLmFwcGx5KG9wZXJhdGlvbik7XG4gICAgICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pO1xuICAgICAgfVxuICAgICAgLy8gVmFsaWRhdGUgZXZlcnkgc2luZ2xlIG9wZXJhdGlvbiBiZWZvcmUgcHVibGlzaGluZyBhbnkgcHJlZml4IG9mIGEgYmF0Y2guXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy50cmFuc3BvcnQuZml0cyhbb3BlcmF0aW9uXSkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZShgJHt0aGlzLmRldmljZVJvb3QoKX0vbG9nLSR7U3RyaW5nKG9wZXJhdGlvbi5zZXF1ZW5jZSl9Lm1kYCwgW29wZXJhdGlvbl0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgYmF0Y2g6IERhdGFTdG9yZU9wZXJhdGlvbltdID0gW107XG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy50cmFuc3BvcnQuZml0cyhbLi4uYmF0Y2gsIG9wZXJhdGlvbl0pKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wdWJsaXNoKGJhdGNoKTtcbiAgICAgICAgICBiYXRjaCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGJhdGNoLnB1c2gob3BlcmF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGlmIChiYXRjaC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHVibGlzaChiYXRjaCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnBlcnNpc3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2twb2ludCgpOiBDaGVja3BvaW50IHtcbiAgICByZXR1cm4geyBjb3VudGVyOiB0aGlzLmNvdW50ZXIsIGZvcm1hdDogMSwga2luZDogdGhpcy5wYXJhbXMua2luZCwgb3BlcmF0aW9uczogdGhpcy5yZXBsaWNhLmV4cG9ydCgpLCB0aW1lOiB0aGlzLnRpbWUsIHZlY3RvcjogWy4uLnRoaXMudmVjdG9yXSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZXZpY2VSb290KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMudHJhbnNwb3J0LnJvb3R9L2RldmljZXMvJHt0aGlzLmRldmljZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkTG9jYWwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZXBsaWNhID0gbmV3IERhdGFTdG9yZVJlcGxpY2EodGhpcy5wYXJhbXMua2luZCk7XG4gICAgdGhpcy52ZWN0b3IuY2xlYXIoKTtcbiAgICB0aGlzLnRpbWUgPSAwO1xuICAgIHRoaXMuY291bnRlciA9IDA7XG4gICAgdGhpcy5sb2NhbFJlY29yZHMuY2xlYXIoKTtcbiAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy5wYXJhbXMubG9jYWwuZW50cmllcygpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlY29yZHMpIHtcbiAgICAgIGlmIChrZXkgPT09ICdzaGFyZWQtY2hlY2twb2ludC12MScpIHtcbiAgICAgICAgdGhpcy5tZXJnZUNoZWNrcG9pbnQodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChrZXkuc3RhcnRzV2l0aChSRUNPUkRfUFJFRklYKSkge1xuICAgICAgICB0aGlzLnJlcGxpY2EuYXBwbHkodmFsdWUpO1xuICAgICAgICB0aGlzLmxvY2FsUmVjb3Jkcy5zZXQoa2V5LCBlbnN1cmVOb25OdWxsYWJsZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ2hlY2twb2ludCh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICFpc09iamVjdCh2YWx1ZSkgfHwgdmFsdWVbJ2Zvcm1hdCddICE9PSAxIHx8IHZhbHVlWydraW5kJ10gIT09IHRoaXMucGFyYW1zLmtpbmRcbiAgICAgIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlWydvcGVyYXRpb25zJ10pIHx8ICF2YWx1ZVsnb3BlcmF0aW9ucyddLmV2ZXJ5KGlzRGF0YVN0b3JlT3BlcmF0aW9uKVxuICAgICAgfHwgIWlzVmVjdG9yKHZhbHVlWyd2ZWN0b3InXSkgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlWyd0aW1lJ10pIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZVsnY291bnRlciddKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGEtc3RvcmUgY2hlY2twb2ludCBvciBpbmNvbXBhdGlibGUgbWVyZ2UgcnVsZScpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiB2YWx1ZVsnb3BlcmF0aW9ucyddKSB7XG4gICAgICB0aGlzLnJlcGxpY2EuYXBwbHkob3BlcmF0aW9uKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGV2aWNlLCBzZXF1ZW5jZV0gb2YgdmFsdWVbJ3ZlY3RvciddKSB7XG4gICAgICB0aGlzLnZlY3Rvci5zZXQoZGV2aWNlLCBNYXRoLm1heChzZXF1ZW5jZSwgdGhpcy52ZWN0b3IuZ2V0KGRldmljZSkgPz8gMCkpO1xuICAgIH1cbiAgICB0aGlzLm9ic2VydmVDbG9jayhOdW1iZXIodmFsdWVbJ3RpbWUnXSksIE51bWJlcih2YWx1ZVsnY291bnRlciddKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG1lcmdlRmlsZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYWxsRmlsZXMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5saXN0KCk7XG4gICAgY29uc3QgZmlsZXMgPSBhbGxGaWxlcy5maWx0ZXIoKHBhdGgpID0+IHBhdGguc3RhcnRzV2l0aChgJHt0aGlzLnRyYW5zcG9ydC5yb290fS9kZXZpY2VzL2ApKTtcbiAgICBjb25zdCBtYW5pZmVzdHMgPSBmaWxlcy5maWx0ZXIoKGZpbGUpID0+IC9cXC9zbmFwc2hvdC1bXFx3LV0rLW1hbmlmZXN0XFwubWQkLy50ZXN0KGZpbGUpKTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgbWFuaWZlc3RzKSB7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlYWRTbmFwc2hvdChwYXRoKTtcbiAgICAgIGlmIChzbmFwc2hvdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubWVyZ2VDaGVja3BvaW50KHNuYXBzaG90KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3BlcmF0aW9uczogRGF0YVN0b3JlT3BlcmF0aW9uW10gPSBbXTtcbiAgICBjb25zdCBzZWdtZW50cyA9IGZpbGVzLmZpbHRlcigoZmlsZSkgPT4gL1xcL2xvZy1cXGQrXFwubWQkLy50ZXN0KGZpbGUpKTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2Ygc2VnbWVudHMpIHtcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZWFkKHBhdGgpO1xuICAgICAgaWYgKHNlZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShzZWdtZW50KSB8fCAhc2VnbWVudC5ldmVyeShpc0RhdGFTdG9yZU9wZXJhdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGEtc3RvcmUgam91cm5hbCBzZWdtZW50Jyk7XG4gICAgICB9XG4gICAgICBjb25zdCBvd25lciA9IHBhdGguc3BsaXQoJy8nKS5hdChPV05FUl9QQVRIX0lOREVYKTtcbiAgICAgIGlmIChzZWdtZW50LnNvbWUoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uLmRldmljZSAhPT0gb3duZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSm91cm5hbCBzZWdtZW50IGhhcyBhIGRpZmZlcmVudCB3cml0ZXInKTtcbiAgICAgIH1cbiAgICAgIG9wZXJhdGlvbnMucHVzaCguLi5zZWdtZW50KTtcbiAgICB9XG4gICAgb3BlcmF0aW9ucy5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiBmaXJzdC5kZXZpY2UubG9jYWxlQ29tcGFyZShzZWNvbmQuZGV2aWNlKSB8fCBmaXJzdC5zZXF1ZW5jZSAtIHNlY29uZC5zZXF1ZW5jZSk7XG4gICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xuICAgICAgaWYgKG9wZXJhdGlvbi5zZXF1ZW5jZSA9PT0gKHRoaXMudmVjdG9yLmdldChvcGVyYXRpb24uZGV2aWNlKSA/PyAwKSArIDEpIHtcbiAgICAgICAgdGhpcy5hcHBseShvcGVyYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZUNsb2NrKHRpbWU6IG51bWJlciwgY291bnRlcjogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRpbWUgPiB0aGlzLnRpbWUpIHtcbiAgICAgIHRoaXMudGltZSA9IHRpbWU7XG4gICAgICB0aGlzLmNvdW50ZXIgPSBjb3VudGVyO1xuICAgIH0gZWxzZSBpZiAodGltZSA9PT0gdGhpcy50aW1lKSB7XG4gICAgICB0aGlzLmNvdW50ZXIgPSBNYXRoLm1heCh0aGlzLmNvdW50ZXIsIGNvdW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGVyc2lzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGVja3BvaW50ID0gdGhpcy5jaGVja3BvaW50KCk7XG4gICAgY29uc3QgcmVjb3JkcyA9IG5ldyBNYXA8c3RyaW5nLCBEYXRhU3RvcmVPcGVyYXRpb24+KCk7XG4gICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgY2hlY2twb2ludC5vcGVyYXRpb25zKSB7XG4gICAgICBjb25zdCBpZGVudGl0eSA9IHRoaXMucGFyYW1zLmtpbmQgPT09ICdvYnNlcnZlZC1yZW1vdmUtc2V0JyA/IGAke29wZXJhdGlvbi5kZXZpY2V9OiR7U3RyaW5nKG9wZXJhdGlvbi5zZXF1ZW5jZSl9YCA6IG9wZXJhdGlvbi5rZXk7XG4gICAgICByZWNvcmRzLnNldChgJHtSRUNPUkRfUFJFRklYfSR7aWRlbnRpdHl9YCwgb3BlcmF0aW9uKTtcbiAgICB9XG4gICAgY29uc3QgZW50cmllczogW3N0cmluZywgdW5rbm93bl1bXSA9IFsuLi5yZWNvcmRzXS5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gdGhpcy5sb2NhbFJlY29yZHMuZ2V0KGtleSkgIT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgY29uc3QgcmVtb3ZlZEtleXMgPSBbLi4udGhpcy5sb2NhbFJlY29yZHMua2V5cygpXS5maWx0ZXIoKGtleSkgPT4gIXJlY29yZHMuaGFzKGtleSkpO1xuICAgIGVudHJpZXMucHVzaChbJ3NoYXJlZC1jaGVja3BvaW50LXYxJywgeyAuLi5jaGVja3BvaW50LCBvcGVyYXRpb25zOiBbXSB9XSk7XG4gICAgYXdhaXQgdGhpcy5wYXJhbXMubG9jYWwuY29tbWl0KHsgZW50cmllcywgcmVtb3ZlZEtleXMgfSk7XG4gICAgYXdhaXQgdGhpcy50cmFuc3BvcnQud3JpdGUoYCR7dGhpcy5kZXZpY2VSb290KCl9L2hhdmUubWRgLCB7IGZvcm1hdDogMSwgdGltZTogRGF0ZS5ub3coKSwgdmVjdG9yOiBbLi4udGhpcy52ZWN0b3JdIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwdWJsaXNoKG9wZXJhdGlvbnM6IERhdGFTdG9yZU9wZXJhdGlvbltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlyc3QgPSBlbnN1cmVOb25OdWxsYWJsZShvcGVyYXRpb25zWzBdKTtcbiAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZShgJHt0aGlzLmRldmljZVJvb3QoKX0vbG9nLSR7U3RyaW5nKGZpcnN0LnNlcXVlbmNlKX0ubWRgLCBvcGVyYXRpb25zKTtcbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICB0aGlzLmFwcGx5KG9wZXJhdGlvbik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzVmVjdG9yKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVmVyc2lvblZlY3RvciB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5ldmVyeSgoZW50cnk6IHVua25vd24pID0+XG4gICAgQXJyYXkuaXNBcnJheShlbnRyeSkgJiYgZW50cnkubGVuZ3RoID09PSBWRUNUT1JfRU5UUllfTEVOR1RIXG4gICAgJiYgdHlwZW9mIGVudHJ5WzBdID09PSAnc3RyaW5nJyAmJiAvXltcXHctXSskLy50ZXN0KGVudHJ5WzBdKSAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcihlbnRyeVsxXSkgJiYgTnVtYmVyKGVudHJ5WzFdKSA+PSAwXG4gICk7XG59XG5cbi8qIGVzbGludC1lbmFibGUgbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zIC0tIFRoZXNlIGFyZSBPYnNpZGlh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
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9zaGFyZWQtZGF0YS1zdG9yZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbi8qKlxuICogQGZpbGVcbiAqXG4gKiBNZXJnZWFibGUgcGx1Z2luIGRhdGEsIHRyYW5zcG9ydGVkIGFzIHNpbmdsZS13cml0ZXIgam91cm5hbCBzZWdtZW50cyBhbmQgY2h1bmtlZCBzbmFwc2hvdHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEYXRhQWRhcHRlciB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgSnNvblZhbHVlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIERhdGFTdG9yZU1lcmdlS2luZCxcbiAgRGF0YVN0b3JlT3BlcmF0aW9uXG59IGZyb20gJy4vZGF0YS1zdG9yZS1yZXBsaWNhLnRzJztcbmltcG9ydCB0eXBlIHsgTG9jYWxEYXRhU3RvcmUgfSBmcm9tICcuL2xvY2FsLWRhdGEtc3RvcmUudHMnO1xuXG5pbXBvcnQge1xuICBEYXRhU3RvcmVSZXBsaWNhLFxuICBpc0RhdGFTdG9yZU9wZXJhdGlvblxufSBmcm9tICcuL2RhdGEtc3RvcmUtcmVwbGljYS50cyc7XG5pbXBvcnQgeyBEYXRhU3RvcmVUcmFuc3BvcnQgfSBmcm9tICcuL2RhdGEtc3RvcmUtdHJhbnNwb3J0LnRzJztcblxuY29uc3QgREVGQVVMVF9BQ1RJVkVfREVWSUNFX01JTExJU0VDT05EUyA9IDJfNTkyXzAwMF8wMDA7XG5cbmNvbnN0IE9XTkVSX1BBVEhfSU5ERVggPSAtMjtcblxuY29uc3QgVkVDVE9SX0VOVFJZX0xFTkdUSCA9IDI7XG5jb25zdCBERVZJQ0VfUEFUSF9QQVJUUyA9IDI7XG5jb25zdCBSRUNPUkRfUFJFRklYID0gJ3NoYXJlZC1yZWNvcmQtdjE6JztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBvcGVuaW5nIGEgc2hhcmVkIHN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJlZERhdGFTdG9yZU9wZW5QYXJhbXMge1xuICAvKipcbiAgICogRGV2aWNlIHJldGlyZW1lbnQgaW50ZXJ2YWwsIG1lYXN1cmVkIGZyb20gaXRzIGxhc3QgYWNrbm93bGVkZ2VtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMjU5MjAwMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGFjdGl2ZURldmljZU1pbGxpc2Vjb25kcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFZhdWx0IGFkYXB0ZXIuXG4gICAqL1xuICByZWFkb25seSBhZGFwdGVyOiBEYXRhQWRhcHRlcjtcbiAgLyoqXG4gICAqIENvbmZpZ3VyYWJsZSBub24tZG90IHZhdWx0IGZvbGRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdQbHVnaW4gZGF0YSdgXG4gICAqL1xuICByZWFkb25seSBmb2xkZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbW11dGFibGUgbWVyZ2UgcnVsZTsgY2hhbmdpbmcgaXQgcmVxdWlyZXMgYSBuZXcgc3RvcmUgaWQuXG4gICAqL1xuICByZWFkb25seSBraW5kOiBEYXRhU3RvcmVNZXJnZUtpbmQ7XG4gIC8qKlxuICAgKiBEZWRpY2F0ZWQgbG9jYWwgc3RvcmUgc2NvcGVkIHRvIFRISVMgdmF1bHQsIHBsdWdpbiBhbmQgc2hhcmVkLXN0b3JlIHNjaGVtYS4gVGhlIGNhbGxlciBvd25zIGl0cyBjb25uZWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYWw6IExvY2FsRGF0YVN0b3JlO1xuICAvKipcbiAgICogTWF4aW11bSBVVEYtOCBieXRlcyBwZXIgZmlsZSwgd3JhcHBlciBpbmNsdWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDEwMDAwMDBgXG4gICAqL1xuICByZWFkb25seSBtYXhGaWxlQnl0ZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQbHVnaW4gbWFuaWZlc3QgaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuICAvKipcbiAgICogU3RvcmUgaWQgaW5jbHVkaW5nIHRoZSBjb25zdW1lcidzIHNjaGVtYSB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmVJZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ2hhbmdlIHtcbiAgcmVhZG9ubHkgZGVsZXRlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiBKc29uVmFsdWU7XG59XG5cbmludGVyZmFjZSBDaGVja3BvaW50IHtcbiAgcmVhZG9ubHkgY291bnRlcjogbnVtYmVyO1xuICByZWFkb25seSBmb3JtYXQ6IDE7XG4gIHJlYWRvbmx5IGtpbmQ6IERhdGFTdG9yZU1lcmdlS2luZDtcbiAgcmVhZG9ubHkgb3BlcmF0aW9uczogRGF0YVN0b3JlT3BlcmF0aW9uW107XG4gIHJlYWRvbmx5IHRpbWU6IG51bWJlcjtcbiAgcmVhZG9ubHkgdmVjdG9yOiBWZXJzaW9uVmVjdG9yO1xufVxuXG50eXBlIFZlcnNpb25WZWN0b3IgPSBbc3RyaW5nLCBudW1iZXJdW107XG5cbi8qKlxuICogQSBkZXZpY2UtbG9jYWwgcXVlcnkgcmVwbGljYSBiYWNrZWQgYnkgdmF1bHQgZmlsZXMuIENhbGwgYHN5bmNocm9uaXplYCBhZnRlciB0cmFuc3BvcnQgY2hhbmdlcyBvciBwZXJpb2RpY2FsbHkuXG4gKiBObyB0aW1lciBvciBldmVudCBoYW5kbGVyIG91dGxpdmVzIHRoZSBjb25zdW1lcjogdGhlIGNvbnN1bWVyIHNjaGVkdWxlcyBzeW5jaHJvbml6YXRpb24gYW5kIG93bnMgdW5sb2FkaW5nLlxuICovXG5leHBvcnQgY2xhc3MgU2hhcmVkRGF0YVN0b3JlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVEZXZpY2VNaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgcHJpdmF0ZSBjb3VudGVyID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFJlY29yZHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBwcml2YXRlIHJlcGxpY2E6IERhdGFTdG9yZVJlcGxpY2E7XG4gIHByaXZhdGUgdGltZSA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNwb3J0OiBEYXRhU3RvcmVUcmFuc3BvcnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmVjdG9yID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBwYXJhbXM6IFNoYXJlZERhdGFTdG9yZU9wZW5QYXJhbXMsIHByb3RlY3RlZCByZWFkb25seSBkZXZpY2U6IHN0cmluZykge1xuICAgIHRoaXMudHJhbnNwb3J0ID0gbmV3IERhdGFTdG9yZVRyYW5zcG9ydChwYXJhbXMpO1xuICAgIHRoaXMucmVwbGljYSA9IG5ldyBEYXRhU3RvcmVSZXBsaWNhKHBhcmFtcy5raW5kKTtcbiAgICB0aGlzLmFjdGl2ZURldmljZU1pbGxpc2Vjb25kcyA9IHBhcmFtcy5hY3RpdmVEZXZpY2VNaWxsaXNlY29uZHMgPz8gREVGQVVMVF9BQ1RJVkVfREVWSUNFX01JTExJU0VDT05EUztcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aGlzLmFjdGl2ZURldmljZU1pbGxpc2Vjb25kcykgfHwgdGhpcy5hY3RpdmVEZXZpY2VNaWxsaXNlY29uZHMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXZpY2UgcmV0aXJlbWVudCBpbnRlcnZhbCBtdXN0IGJlIHBvc2l0aXZlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGFuZCBzeW5jaHJvbml6ZXMgYSBzdG9yZSwgcmVzdG9yaW5nIGl0cyBkZXZpY2UgaWRlbnRpdHkgZXhjbHVzaXZlbHkgZnJvbSBJbmRleGVkREIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQZXJzaXN0ZW5jZSwgdHJhbnNwb3J0IGFuZCBtZXJnZSBwb2xpY3kuXG4gICAqIEByZXR1cm5zIEEgc3luY2hyb25pemVkIHF1ZXJ5IHJlcGxpY2EuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIG9wZW4ocGFyYW1zOiBTaGFyZWREYXRhU3RvcmVPcGVuUGFyYW1zKTogUHJvbWlzZTxTaGFyZWREYXRhU3RvcmU+IHtcbiAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBwYXJhbXMubG9jYWwuZ2V0T3JDcmVhdGUoJ3NoYXJlZC1kZXZpY2UtdjEnLCB3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKSk7XG4gICAgaWYgKHR5cGVvZiBkZXZpY2UgIT09ICdzdHJpbmcnIHx8ICEvXltcXHctXSskLy50ZXN0KGRldmljZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBsb2NhbCBkYXRhLXN0b3JlIGlkZW50aXR5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHN0b3JlID0gbmV3IFNoYXJlZERhdGFTdG9yZShwYXJhbXMsIGRldmljZSk7XG4gICAgYXdhaXQgc3RvcmUuc3luY2hyb25pemUoKTtcbiAgICByZXR1cm4gc3RvcmU7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIGEgY29tcGxldGUgY2h1bmtlZCBzbmFwc2hvdCBhbmQgdHJpbXMgb25seSB0aGlzIGRldmljZSdzIGFja25vd2xlZGdlZCBqb3VybmFsIHNlZ21lbnRzLlxuICAgKiBSZXRpcmVkIGRldmljZXMgcmVqb2luIGJ5IG1lcmdpbmcgc25hcHNob3RzOyB0b21ic3RvbmVzIHJlbWFpbiBpbiBzbmFwc2hvdHMgdG8gcHJldmVudCByZXN1cnJlY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gY29tcGFjdGlvbiBmaW5pc2hlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21wYWN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucGFyYW1zLmxvY2FsLmV4Y2x1c2l2ZShhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRMb2NhbCgpO1xuICAgICAgYXdhaXQgdGhpcy5tZXJnZUZpbGVzKCk7XG4gICAgICBhd2FpdCB0aGlzLnBlcnNpc3QoKTtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy50cmFuc3BvcnQubGlzdCgpO1xuICAgICAgY29uc3QgYmFzZSA9IGAke3RoaXMuZGV2aWNlUm9vdCgpfS9zbmFwc2hvdC0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfS1tYW5pZmVzdGA7XG4gICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZVNuYXBzaG90KHsgYmFzZSwgcGF5bG9hZDogdGhpcy5jaGVja3BvaW50KCkgfSk7XG4gICAgICBjb25zdCBhY2tub3dsZWRnZW1lbnRzID0gYXdhaXQgdGhpcy5hY2tub3dsZWRnZW1lbnRzKGZpbGVzKTtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBmaWxlcykge1xuICAgICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChgJHt0aGlzLmRldmljZVJvb3QoKX0vbG9nLWApKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlYWQocGF0aCk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcGVyYXRpb25zKSB8fCAhb3BlcmF0aW9ucy5ldmVyeShpc0RhdGFTdG9yZU9wZXJhdGlvbikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXN0ID0gTWF0aC5tYXgoLi4ub3BlcmF0aW9ucy5tYXAoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uLnNlcXVlbmNlKSk7XG4gICAgICAgIGlmIChhY2tub3dsZWRnZW1lbnRzLmV2ZXJ5KCh2ZWN0b3IpID0+ICh2ZWN0b3IuZ2V0KHRoaXMuZGV2aWNlKSA/PyAwKSA+PSBsYXN0KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlbW92ZShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gVGhlIGNvbXBsZXRlIG5ldyBzbmFwc2hvdCBjb3ZlcnMgZXZlcnkgZWFybGllciBzbmFwc2hvdCBmcm9tIHRoaXMgd3JpdGVyLlxuICAgICAgZm9yIChjb25zdCBwYXRoIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoYCR7dGhpcy5kZXZpY2VSb290KCl9L3NuYXBzaG90LWApKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy50cmFuc3BvcnQucmVtb3ZlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhIHJlZ2lzdGVyIG9yIHJlbW92ZXMgdGhlIGN1cnJlbnRseSBvYnNlcnZlZCBhZGRpdGlvbnMgb2YgYSBzZXQgbWVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleSBvciBzZXQgbWVtYmVyLiBNaW4vbWF4IHJlZ2lzdGVycyBkZWxpYmVyYXRlbHkgY2Fubm90IGJlIGRlbGV0ZWQuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIGpvdXJuYWwgcHVibGljYXRpb24gYW5kIGxvY2FsIGNvbW1pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNoYW5nZShbeyBkZWxldGVkOiB0cnVlLCBrZXksIHZhbHVlOiBudWxsIH1dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgY3VycmVudCBsb2NhbCBxdWVyeSByZXBsaWNhLlxuICAgKlxuICAgKiBAcmV0dXJucyBEZXRhY2hlZCBrZXkvdmFsdWUgcGFpcnMgaW4gZGV0ZXJtaW5pc3RpYyBvcmRlci5cbiAgICovXG4gIHB1YmxpYyBlbnRyaWVzKCk6IFtzdHJpbmcsIHVua25vd25dW10ge1xuICAgIHJldHVybiB0aGlzLnJlcGxpY2EuZW50cmllcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGEgcmVnaXN0ZXIgb3Igc2V0IG1lbWJlcnNoaXAgZnJvbSB0aGUgY3VycmVudCBsb2NhbCBxdWVyeSByZXBsaWNhLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleSBvciBzZXQgbWVtYmVyLlxuICAgKiBAcmV0dXJucyBBIGRldGFjaGVkIHZhbHVlLCBvciBgdW5kZWZpbmVkYCB3aGVuIGFic2VudCBvciBkZWxldGVkLlxuICAgKi9cbiAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLnJlcGxpY2EuZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIG9uZSByZWdpc3RlciB2YWx1ZSwgb3IgYWRkcyBhIG1lbWJlciB0byBhbiBvYnNlcnZlZC1yZW1vdmUgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleSBvciBzZXQgbWVtYmVyLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBKU09OLWNvbXBhdGlibGUgdmFsdWUgKHVzZSBgdHJ1ZWAgZm9yIGEgc2V0KS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgam91cm5hbCBwdWJsaWNhdGlvbiBhbmQgbG9jYWwgY29tbWl0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IEpzb25WYWx1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2V0TWFueShbW2tleSwgdmFsdWVdXSk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIGEgYmF0Y2ggb2YgcmVnaXN0ZXIgd3JpdGVzLCBzcGxpdCBpbnRvIGJvdW5kZWQgaW1tdXRhYmxlIHNlZ21lbnRzLlxuICAgKiBTZWdtZW50cyBhcmUgaW5kaXZpZHVhbGx5IGR1cmFibGU7IGEgZmFpbGVkIGJhdGNoIGNhbiBoYXZlIGEgcHVibGlzaGVkIHByZWZpeCBhbmQgY2FuIGJlIHJldHJpZWQgc2FmZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gZW50cmllcyAtIFJlZ2lzdGVyIHdyaXRlcyBvciBzZXQgYWRkaXRpb25zLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciBqb3VybmFsIHB1YmxpY2F0aW9uIGFuZCBsb2NhbCBjb21taXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0TWFueShlbnRyaWVzOiByZWFkb25seSAocmVhZG9ubHkgW3N0cmluZywgSnNvblZhbHVlXSlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2hhbmdlKGVudHJpZXMubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7IGRlbGV0ZWQ6IGZhbHNlLCBrZXksIHZhbHVlIH0pKSk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIGNvbXBsZXRlIHNuYXBzaG90cyBhbmQgY29udGlndW91cyBqb3VybmFsIGhpc3RvcnksIHRoZW4gcHVibGlzaGVzIGl0cyBkdXJhYmxlIGFja25vd2xlZGdlbWVudC5cbiAgICogUGFydGlhbCBkZWxpdmVyaWVzIHJlbWFpbiBwZW5kaW5nOyBhIGxhdGVyIGNhbGwgcmV0cmllcyB0aGVtLiBObyBhY2tub3dsZWRnZW1lbnQgc2tpcHMgYSBtaXNzaW5nIHNlcXVlbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgbG9jYWwgY2hlY2twb2ludCBhbmQgYWNrbm93bGVkZ2VtZW50IGNvbW1pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzeW5jaHJvbml6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnBhcmFtcy5sb2NhbC5leGNsdXNpdmUoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkTG9jYWwoKTtcbiAgICAgIGF3YWl0IHRoaXMubWVyZ2VGaWxlcygpO1xuICAgICAgYXdhaXQgdGhpcy5wZXJzaXN0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFja25vd2xlZGdlbWVudHMoZmlsZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBudW1iZXI+W10+IHtcbiAgICBjb25zdCBhY2tub3dsZWRnZW1lbnRzID0gW25ldyBNYXAodGhpcy52ZWN0b3IpXTtcbiAgICBjb25zdCBkZXZpY2VGaWxlcyA9IGZpbGVzLmZpbHRlcigocGF0aCkgPT4gcGF0aC5zdGFydHNXaXRoKGAke3RoaXMudHJhbnNwb3J0LnJvb3R9L2RldmljZXMvYCkpO1xuICAgIGNvbnN0IGRldmljZXMgPSBuZXcgU2V0KGRldmljZUZpbGVzLm1hcCgocGF0aCkgPT4gcGF0aC5zbGljZSh0aGlzLnRyYW5zcG9ydC5yb290Lmxlbmd0aCArIDEpLnNwbGl0KCcvJywgREVWSUNFX1BBVEhfUEFSVFMpWzFdKS5maWx0ZXIoKGRldmljZSkgPT4gZGV2aWNlICE9PSB1bmRlZmluZWQpKTtcbiAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICBpZiAoZGV2aWNlID09PSB0aGlzLmRldmljZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhdmUgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZWFkKGAke3RoaXMudHJhbnNwb3J0LnJvb3R9L2RldmljZXMvJHtkZXZpY2V9L2hhdmUubWRgKTtcbiAgICAgIGlmICghaXNPYmplY3QoaGF2ZSkgfHwgIWlzVmVjdG9yKGhhdmVbJ3ZlY3RvciddKSB8fCB0eXBlb2YgaGF2ZVsndGltZSddICE9PSAnbnVtYmVyJykge1xuICAgICAgICBhY2tub3dsZWRnZW1lbnRzLnB1c2gobmV3IE1hcCgpKTtcbiAgICAgIH0gZWxzZSBpZiAoRGF0ZS5ub3coKSAtIGhhdmVbJ3RpbWUnXSA8PSB0aGlzLmFjdGl2ZURldmljZU1pbGxpc2Vjb25kcykge1xuICAgICAgICBhY2tub3dsZWRnZW1lbnRzLnB1c2gobmV3IE1hcChoYXZlWyd2ZWN0b3InXSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWNrbm93bGVkZ2VtZW50cztcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHkob3BlcmF0aW9uOiBEYXRhU3RvcmVPcGVyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnJlcGxpY2EuYXBwbHkob3BlcmF0aW9uKTtcbiAgICB0aGlzLnZlY3Rvci5zZXQob3BlcmF0aW9uLmRldmljZSwgb3BlcmF0aW9uLnNlcXVlbmNlKTtcbiAgICB0aGlzLm9ic2VydmVDbG9jayhvcGVyYXRpb24udGltZSwgb3BlcmF0aW9uLmNvdW50ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGFuZ2UoY2hhbmdlczogcmVhZG9ubHkgQ2hhbmdlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnBhcmFtcy5sb2NhbC5leGNsdXNpdmUoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkTG9jYWwoKTtcbiAgICAgIGF3YWl0IHRoaXMubWVyZ2VGaWxlcygpO1xuICAgICAgY29uc3Qgb3BlcmF0aW9uczogRGF0YVN0b3JlT3BlcmF0aW9uW10gPSBbXTtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IG5ldyBEYXRhU3RvcmVSZXBsaWNhKHRoaXMucGFyYW1zLmtpbmQpO1xuICAgICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgdGhpcy5yZXBsaWNhLmV4cG9ydCgpKSB7XG4gICAgICAgIGNhbmRpZGF0ZS5hcHBseShvcGVyYXRpb24pO1xuICAgICAgfVxuICAgICAgbGV0IHNlcXVlbmNlID0gdGhpcy52ZWN0b3IuZ2V0KHRoaXMuZGV2aWNlKSA/PyAwO1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmNvdW50ZXIgPSBub3cgPiB0aGlzLnRpbWUgPyAwIDogdGhpcy5jb3VudGVyICsgMTtcbiAgICAgICAgdGhpcy50aW1lID0gTWF0aC5tYXgobm93LCB0aGlzLnRpbWUpO1xuICAgICAgICBjb25zdCBvcGVyYXRpb246IERhdGFTdG9yZU9wZXJhdGlvbiA9IHtcbiAgICAgICAgICAuLi5jaGFuZ2UsXG4gICAgICAgICAgY291bnRlcjogdGhpcy5jb3VudGVyLFxuICAgICAgICAgIGRldmljZTogdGhpcy5kZXZpY2UsXG4gICAgICAgICAgc2VxdWVuY2U6ICsrc2VxdWVuY2UsXG4gICAgICAgICAgdGFnczogY2FuZGlkYXRlLm9ic2VydmVkVGFncyhjaGFuZ2Uua2V5KSxcbiAgICAgICAgICB0aW1lOiB0aGlzLnRpbWVcbiAgICAgICAgfTtcbiAgICAgICAgY2FuZGlkYXRlLmFwcGx5KG9wZXJhdGlvbik7XG4gICAgICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pO1xuICAgICAgfVxuICAgICAgLy8gVmFsaWRhdGUgZXZlcnkgc2luZ2xlIG9wZXJhdGlvbiBiZWZvcmUgcHVibGlzaGluZyBhbnkgcHJlZml4IG9mIGEgYmF0Y2guXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy50cmFuc3BvcnQuZml0cyhbb3BlcmF0aW9uXSkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZShgJHt0aGlzLmRldmljZVJvb3QoKX0vbG9nLSR7U3RyaW5nKG9wZXJhdGlvbi5zZXF1ZW5jZSl9Lm1kYCwgW29wZXJhdGlvbl0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgYmF0Y2g6IERhdGFTdG9yZU9wZXJhdGlvbltdID0gW107XG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIGlmICghdGhpcy50cmFuc3BvcnQuZml0cyhbLi4uYmF0Y2gsIG9wZXJhdGlvbl0pKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wdWJsaXNoKGJhdGNoKTtcbiAgICAgICAgICBiYXRjaCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGJhdGNoLnB1c2gob3BlcmF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGlmIChiYXRjaC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHVibGlzaChiYXRjaCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnBlcnNpc3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2twb2ludCgpOiBDaGVja3BvaW50IHtcbiAgICByZXR1cm4geyBjb3VudGVyOiB0aGlzLmNvdW50ZXIsIGZvcm1hdDogMSwga2luZDogdGhpcy5wYXJhbXMua2luZCwgb3BlcmF0aW9uczogdGhpcy5yZXBsaWNhLmV4cG9ydCgpLCB0aW1lOiB0aGlzLnRpbWUsIHZlY3RvcjogWy4uLnRoaXMudmVjdG9yXSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZXZpY2VSb290KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMudHJhbnNwb3J0LnJvb3R9L2RldmljZXMvJHt0aGlzLmRldmljZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkTG9jYWwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZXBsaWNhID0gbmV3IERhdGFTdG9yZVJlcGxpY2EodGhpcy5wYXJhbXMua2luZCk7XG4gICAgdGhpcy52ZWN0b3IuY2xlYXIoKTtcbiAgICB0aGlzLnRpbWUgPSAwO1xuICAgIHRoaXMuY291bnRlciA9IDA7XG4gICAgdGhpcy5sb2NhbFJlY29yZHMuY2xlYXIoKTtcbiAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy5wYXJhbXMubG9jYWwuZW50cmllcygpO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlY29yZHMpIHtcbiAgICAgIGlmIChrZXkgPT09ICdzaGFyZWQtY2hlY2twb2ludC12MScpIHtcbiAgICAgICAgdGhpcy5tZXJnZUNoZWNrcG9pbnQodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChrZXkuc3RhcnRzV2l0aChSRUNPUkRfUFJFRklYKSkge1xuICAgICAgICB0aGlzLnJlcGxpY2EuYXBwbHkodmFsdWUpO1xuICAgICAgICB0aGlzLmxvY2FsUmVjb3Jkcy5zZXQoa2V5LCBlbnN1cmVOb25OdWxsYWJsZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ2hlY2twb2ludCh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICFpc09iamVjdCh2YWx1ZSkgfHwgdmFsdWVbJ2Zvcm1hdCddICE9PSAxIHx8IHZhbHVlWydraW5kJ10gIT09IHRoaXMucGFyYW1zLmtpbmRcbiAgICAgIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlWydvcGVyYXRpb25zJ10pIHx8ICF2YWx1ZVsnb3BlcmF0aW9ucyddLmV2ZXJ5KGlzRGF0YVN0b3JlT3BlcmF0aW9uKVxuICAgICAgfHwgIWlzVmVjdG9yKHZhbHVlWyd2ZWN0b3InXSkgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlWyd0aW1lJ10pIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZVsnY291bnRlciddKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGEtc3RvcmUgY2hlY2twb2ludCBvciBpbmNvbXBhdGlibGUgbWVyZ2UgcnVsZScpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiB2YWx1ZVsnb3BlcmF0aW9ucyddKSB7XG4gICAgICB0aGlzLnJlcGxpY2EuYXBwbHkob3BlcmF0aW9uKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGV2aWNlLCBzZXF1ZW5jZV0gb2YgdmFsdWVbJ3ZlY3RvciddKSB7XG4gICAgICB0aGlzLnZlY3Rvci5zZXQoZGV2aWNlLCBNYXRoLm1heChzZXF1ZW5jZSwgdGhpcy52ZWN0b3IuZ2V0KGRldmljZSkgPz8gMCkpO1xuICAgIH1cbiAgICB0aGlzLm9ic2VydmVDbG9jayhOdW1iZXIodmFsdWVbJ3RpbWUnXSksIE51bWJlcih2YWx1ZVsnY291bnRlciddKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG1lcmdlRmlsZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYWxsRmlsZXMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5saXN0KCk7XG4gICAgY29uc3QgZmlsZXMgPSBhbGxGaWxlcy5maWx0ZXIoKHBhdGgpID0+IHBhdGguc3RhcnRzV2l0aChgJHt0aGlzLnRyYW5zcG9ydC5yb290fS9kZXZpY2VzL2ApKTtcbiAgICBjb25zdCBtYW5pZmVzdHMgPSBmaWxlcy5maWx0ZXIoKGZpbGUpID0+IC9cXC9zbmFwc2hvdC1bXFx3LV0rLW1hbmlmZXN0XFwubWQkLy50ZXN0KGZpbGUpKTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgbWFuaWZlc3RzKSB7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlYWRTbmFwc2hvdChwYXRoKTtcbiAgICAgIGlmIChzbmFwc2hvdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubWVyZ2VDaGVja3BvaW50KHNuYXBzaG90KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb3BlcmF0aW9uczogRGF0YVN0b3JlT3BlcmF0aW9uW10gPSBbXTtcbiAgICBjb25zdCBzZWdtZW50cyA9IGZpbGVzLmZpbHRlcigoZmlsZSkgPT4gL1xcL2xvZy1cXGQrXFwubWQkLy50ZXN0KGZpbGUpKTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2Ygc2VnbWVudHMpIHtcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZWFkKHBhdGgpO1xuICAgICAgaWYgKHNlZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShzZWdtZW50KSB8fCAhc2VnbWVudC5ldmVyeShpc0RhdGFTdG9yZU9wZXJhdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGEtc3RvcmUgam91cm5hbCBzZWdtZW50Jyk7XG4gICAgICB9XG4gICAgICBjb25zdCBvd25lciA9IHBhdGguc3BsaXQoJy8nKS5hdChPV05FUl9QQVRIX0lOREVYKTtcbiAgICAgIGlmIChzZWdtZW50LnNvbWUoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uLmRldmljZSAhPT0gb3duZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSm91cm5hbCBzZWdtZW50IGhhcyBhIGRpZmZlcmVudCB3cml0ZXInKTtcbiAgICAgIH1cbiAgICAgIG9wZXJhdGlvbnMucHVzaCguLi5zZWdtZW50KTtcbiAgICB9XG4gICAgb3BlcmF0aW9ucy5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiBmaXJzdC5kZXZpY2UubG9jYWxlQ29tcGFyZShzZWNvbmQuZGV2aWNlKSB8fCBmaXJzdC5zZXF1ZW5jZSAtIHNlY29uZC5zZXF1ZW5jZSk7XG4gICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xuICAgICAgaWYgKG9wZXJhdGlvbi5zZXF1ZW5jZSA9PT0gKHRoaXMudmVjdG9yLmdldChvcGVyYXRpb24uZGV2aWNlKSA/PyAwKSArIDEpIHtcbiAgICAgICAgdGhpcy5hcHBseShvcGVyYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZUNsb2NrKHRpbWU6IG51bWJlciwgY291bnRlcjogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRpbWUgPiB0aGlzLnRpbWUpIHtcbiAgICAgIHRoaXMudGltZSA9IHRpbWU7XG4gICAgICB0aGlzLmNvdW50ZXIgPSBjb3VudGVyO1xuICAgIH0gZWxzZSBpZiAodGltZSA9PT0gdGhpcy50aW1lKSB7XG4gICAgICB0aGlzLmNvdW50ZXIgPSBNYXRoLm1heCh0aGlzLmNvdW50ZXIsIGNvdW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGVyc2lzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGVja3BvaW50ID0gdGhpcy5jaGVja3BvaW50KCk7XG4gICAgY29uc3QgcmVjb3JkcyA9IG5ldyBNYXA8c3RyaW5nLCBEYXRhU3RvcmVPcGVyYXRpb24+KCk7XG4gICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgY2hlY2twb2ludC5vcGVyYXRpb25zKSB7XG4gICAgICBjb25zdCBpZGVudGl0eSA9IHRoaXMucGFyYW1zLmtpbmQgPT09ICdvYnNlcnZlZC1yZW1vdmUtc2V0JyA/IGAke29wZXJhdGlvbi5kZXZpY2V9OiR7U3RyaW5nKG9wZXJhdGlvbi5zZXF1ZW5jZSl9YCA6IG9wZXJhdGlvbi5rZXk7XG4gICAgICByZWNvcmRzLnNldChgJHtSRUNPUkRfUFJFRklYfSR7aWRlbnRpdHl9YCwgb3BlcmF0aW9uKTtcbiAgICB9XG4gICAgY29uc3QgZW50cmllczogW3N0cmluZywgdW5rbm93bl1bXSA9IFsuLi5yZWNvcmRzXS5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gdGhpcy5sb2NhbFJlY29yZHMuZ2V0KGtleSkgIT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgY29uc3QgcmVtb3ZlZEtleXMgPSBbLi4udGhpcy5sb2NhbFJlY29yZHMua2V5cygpXS5maWx0ZXIoKGtleSkgPT4gIXJlY29yZHMuaGFzKGtleSkpO1xuICAgIGVudHJpZXMucHVzaChbJ3NoYXJlZC1jaGVja3BvaW50LXYxJywgeyAuLi5jaGVja3BvaW50LCBvcGVyYXRpb25zOiBbXSB9XSk7XG4gICAgYXdhaXQgdGhpcy5wYXJhbXMubG9jYWwuY29tbWl0KHsgZW50cmllcywgcmVtb3ZlZEtleXMgfSk7XG4gICAgYXdhaXQgdGhpcy50cmFuc3BvcnQud3JpdGUoYCR7dGhpcy5kZXZpY2VSb290KCl9L2hhdmUubWRgLCB7IGZvcm1hdDogMSwgdGltZTogRGF0ZS5ub3coKSwgdmVjdG9yOiBbLi4udGhpcy52ZWN0b3JdIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwdWJsaXNoKG9wZXJhdGlvbnM6IERhdGFTdG9yZU9wZXJhdGlvbltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlyc3QgPSBlbnN1cmVOb25OdWxsYWJsZShvcGVyYXRpb25zWzBdKTtcbiAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZShgJHt0aGlzLmRldmljZVJvb3QoKX0vbG9nLSR7U3RyaW5nKGZpcnN0LnNlcXVlbmNlKX0ubWRgLCBvcGVyYXRpb25zKTtcbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICB0aGlzLmFwcGx5KG9wZXJhdGlvbik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzVmVjdG9yKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVmVyc2lvblZlY3RvciB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5ldmVyeSgoZW50cnk6IHVua25vd24pID0+XG4gICAgQXJyYXkuaXNBcnJheShlbnRyeSkgJiYgZW50cnkubGVuZ3RoID09PSBWRUNUT1JfRU5UUllfTEVOR1RIXG4gICAgJiYgdHlwZW9mIGVudHJ5WzBdID09PSAnc3RyaW5nJyAmJiAvXltcXHctXSskLy50ZXN0KGVudHJ5WzBdKSAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcihlbnRyeVsxXSkgJiYgTnVtYmVyKGVudHJ5WzFdKSA+PSAwXG4gICk7XG59XG5cbi8qIGVzbGludC1lbmFibGUgbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zIC0tIFRoZXNlIGFyZSBPYnNpZGlhbiByZW5kZXJlciBXZWIgQVBJcywgbm90IE5vZGUgYnVpbHRpbnMuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVUEsU0FBUyx5QkFBeUI7QUFRbEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLDBCQUEwQjtBQUVuQyxNQUFNLHFDQUFxQztBQUUzQyxNQUFNLG1CQUFtQjtBQUV6QixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLG9CQUFvQjtBQUMxQixNQUFNLGdCQUFnQjtBQW1FZixNQUFNLGdCQUFnQjtBQUFBLEVBU25CLFlBQStCLFFBQXNELFFBQWdCO0FBQXRFO0FBQXNEO0FBQzNGLFNBQUssWUFBWSxJQUFJLG1CQUFtQixNQUFNO0FBQzlDLFNBQUssVUFBVSxJQUFJLGlCQUFpQixPQUFPLElBQUk7QUFDL0MsU0FBSywyQkFBMkIsT0FBTyw0QkFBNEI7QUFDbkUsUUFBSSxDQUFDLE9BQU8sU0FBUyxLQUFLLHdCQUF3QixLQUFLLEtBQUssNEJBQTRCLEdBQUc7QUFDekYsWUFBTSxJQUFJLE1BQU0sNkNBQTZDO0FBQUEsSUFDL0Q7QUFBQSxFQUNGO0FBQUEsRUFQdUM7QUFBQSxFQUFzRDtBQUFBLEVBUjVFO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDRCxlQUFlLG9CQUFJLElBQW9CO0FBQUEsRUFDaEQ7QUFBQSxFQUNBLE9BQU87QUFBQSxFQUNFO0FBQUEsRUFDQSxTQUFTLG9CQUFJLElBQW9CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFpQmxELGFBQW9CLEtBQUssUUFBNkQ7QUFDcEYsVUFBTSxTQUFTLE1BQU0sT0FBTyxNQUFNLFlBQVksb0JBQW9CLE9BQU8sT0FBTyxXQUFXLENBQUM7QUFDNUYsUUFBSSxPQUFPLFdBQVcsWUFBWSxDQUFDLFdBQVcsS0FBSyxNQUFNLEdBQUc7QUFDMUQsWUFBTSxJQUFJ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
@@ -23,7 +23,7 @@ declare global {
23
23
  /**
24
24
  * The global {@link DataviewApi} object `Dataview` installs on every window.
25
25
  */
26
- DataviewAPI?: DataviewApi;
26
+ readonly DataviewAPI?: DataviewApi;
27
27
  }
28
28
  }
29
29
  /**
@@ -43,14 +43,14 @@ export interface DataviewInlineApi extends DataviewInlineApiOriginal {
43
43
  * @param array - The array of items to wrap.
44
44
  * @returns A {@link DataArray} containing the items.
45
45
  */
46
- array: <T>(array: T[]) => DataArray<T>;
46
+ readonly array: <T>(array: T[]) => DataArray<T>;
47
47
  /**
48
48
  * Retrieves the current page, with an optional custom page type.
49
49
  *
50
50
  * @typeParam CustomPage - The type of the custom page. Defaults to `SMarkdownPage`.
51
51
  * @returns The current page.
52
52
  */
53
- current: <CustomFrontmatter = unknown>() => CombinedPage<CustomFrontmatter>;
53
+ readonly current: <CustomFrontmatter = unknown>() => CombinedPage<CustomFrontmatter>;
54
54
  /**
55
55
  * Retrieves pages based on an optional query, with an optional custom page type.
56
56
  *
@@ -58,7 +58,7 @@ export interface DataviewInlineApi extends DataviewInlineApiOriginal {
58
58
  * @param query - An optional string query to filter the pages.
59
59
  * @returns A {@link DataArray} of pages matching the query.
60
60
  */
61
- pages: <CustomFrontmatter = unknown>(query?: string) => DataArray<CombinedPage<CustomFrontmatter>>;
61
+ readonly pages: <CustomFrontmatter = unknown>(query?: string) => DataArray<CombinedPage<CustomFrontmatter>>;
62
62
  /**
63
63
  * Creates a paragraph HTML element with the provided text and optional DOM element options.
64
64
  *
@@ -66,7 +66,7 @@ export interface DataviewInlineApi extends DataviewInlineApiOriginal {
66
66
  * @param options - Optional DOM element options, including an optional container.
67
67
  * @returns The created HTML paragraph element.
68
68
  */
69
- paragraph: (text: unknown, options?: DomElementInfoWithContainer) => HTMLParagraphElement;
69
+ readonly paragraph: (text: unknown, options?: DomElementInfoWithContainer) => HTMLParagraphElement;
70
70
  }
71
71
  /**
72
72
  * DomElementInfo with an optional container.
@@ -81,7 +81,7 @@ export type PageFile = SMarkdownPage['file'];
81
81
  */
82
82
  export type PageFiles = ArrayOrDataArray<PageFile>;
83
83
  interface ContainerInfo {
84
- container?: HTMLElement;
84
+ readonly container?: HTMLElement;
85
85
  }
86
86
  /**
87
87
  * Reloads the current file cache using the `Dataview` API.
@@ -210,8 +210,8 @@ async function renderPaginated(params) {
210
210
  const jumpToPageInput = paginationRow2Div.createEl("input", { attr: { max: totalPages, min: 1 }, type: "number" });
211
211
  jumpToPageInput.addEventListener(
212
212
  "keydown",
213
- convertAsyncToSync(async (event) => {
214
- if (event.key !== "Enter") {
213
+ convertAsyncToSync(async ($event) => {
214
+ if ($event.key !== "Enter") {
215
215
  return;
216
216
  }
217
217
  const page = parseInt(jumpToPageInput.value, 10);
@@ -230,12 +230,12 @@ async function renderPaginated(params) {
230
230
  const link = paginationRow1Div.createEl("a", { cls: "page-link", href: `#${String(currentPageNumber)}`, text });
231
231
  if (disabled) {
232
232
  link.addClass("disabled");
233
- link.onclick = (event) => {
234
- event.preventDefault();
233
+ link.onclick = ($event) => {
234
+ $event.preventDefault();
235
235
  };
236
236
  } else {
237
- link.onclick = convertAsyncToSync(async (event) => {
238
- event.preventDefault();
237
+ link.onclick = convertAsyncToSync(async ($event) => {
238
+ $event.preventDefault();
239
239
  await renderPage(currentPageNumber);
240
240
  });
241
241
  }
@@ -268,4 +268,4 @@ export {
268
268
  renderPaginatedList,
269
269
  renderPaginatedTable
270
270
  };
271
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhdmlldy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBgRGF0YXZpZXdgIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRGF0YUFycmF5LFxuICBEYXRhdmlld0FwaSxcbiAgU01hcmtkb3duUGFnZVxufSBmcm9tICdAbW5hb3Vtb3Yvb2JzaWRpYW4tZGF0YXZpZXcnO1xuaW1wb3J0IHR5cGUgeyBEYXRhdmlld0lubGluZUFwaSBhcyBEYXRhdmlld0lubGluZUFwaU9yaWdpbmFsIH0gZnJvbSAnQG1uYW91bW92L29ic2lkaWFuLWRhdGF2aWV3L2FwaS9pbmxpbmUtYXBpJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGNvbnZlcnRBc3luY1RvU3luYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBlcnJvclRvU3RyaW5nIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0UGF0aFxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyByZWxhdGl2ZVBhdGhUb1Jlc291cmNlVXJsIH0gZnJvbSAnLi9yZXNvdXJjZS11cmwudHMnO1xuXG4vKipcbiAqIEV4cG9ydCBEYXRlVGltZSBhbmQgTGluayB0eXBlcyBmcm9tIHRoZSBgRGF0YXZpZXdgIEFQSS5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBEYXRlVGltZSxcbiAgTGlua1xufSBmcm9tICdAbW5hb3Vtb3Yvb2JzaWRpYW4tZGF0YXZpZXcnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8qKlxuICAgKiBBIHtAbGluayBEYXRhdmlld0FwaX0gb2JqZWN0IHJlcHJlc2VudHMgdGhlIEFQSSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBgRGF0YXZpZXdgIGluIE9ic2lkaWFuLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhcnMtb24tdG9wIC0tIEl0IGlzIGEgYHZhcmAgaW4gbW9kdWxlIGRlY2xhcmF0aW9uLiBFU0xpbnQgbWlzdGFrZW5seSBjb25mdXNlcyBpdCB3aXRoIGB2YXJgIGFzIGEgdmFyaWFibGUgZGVjbGFyYXRpb24uXG4gIHZhciBEYXRhdmlld0FQSTogRGF0YXZpZXdBcGkgfCB1bmRlZmluZWQ7XG5cbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgLyoqXG4gICAgICogVGhlIGdsb2JhbCB7QGxpbmsgRGF0YXZpZXdBcGl9IG9iamVjdCBgRGF0YXZpZXdgIGluc3RhbGxzIG9uIGV2ZXJ5IHdpbmRvdy5cbiAgICAgKi9cbiAgICBEYXRhdmlld0FQST86IERhdGF2aWV3QXBpO1xuICB9XG59XG5cbi8qKlxuICogQSBjb21iaW5lZCBwYWdlIHR5cGUsIHdoaWNoIGluY2x1ZGVzIHRoZSBmcm9udCBtYXR0ZXIgYW5kIHRoZSBTTWFya2Rvd25QYWdlLlxuICpcbiAqIEB0eXBlUGFyYW0gQ3VzdG9tRnJvbnRtYXR0ZXIgLSBUaGUgdHlwZSBvZiB0aGUgY3VzdG9tIGZyb250IG1hdHRlci5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tYmluZWRQYWdlPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4gPSBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPiAmIFNNYXJrZG93blBhZ2U7XG5cbi8qKlxuICogRXh0ZW5kZWQgaW50ZXJmYWNlIGZvciB0aGUgYERhdGF2aWV3YCBJbmxpbmUgQVBJLCBwcm92aWRpbmcgYWRkaXRpb25hbCBtZXRob2RzIGZvciBjdXN0b20gcGFnZSB0eXBlcyBhbmQgYXJyYXkgaGFuZGxpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXZpZXdJbmxpbmVBcGkgZXh0ZW5kcyBEYXRhdmlld0lubGluZUFwaU9yaWdpbmFsIHtcbiAgLyoqXG4gICAqIFdyYXBzIGFuIGFycmF5IG9mIGl0ZW1zIGludG8gYSB7QGxpbmsgRGF0YUFycmF5fSBvYmplY3QuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkuXG4gICAqIEBwYXJhbSBhcnJheSAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byB3cmFwLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEYXRhQXJyYXl9IGNvbnRhaW5pbmcgdGhlIGl0ZW1zLlxuICAgKi9cbiAgYXJyYXk6IDxUPihhcnJheTogVFtdKSA9PiBEYXRhQXJyYXk8VD47XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBwYWdlLCB3aXRoIGFuIG9wdGlvbmFsIGN1c3RvbSBwYWdlIHR5cGUuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gQ3VzdG9tUGFnZSAtIFRoZSB0eXBlIG9mIHRoZSBjdXN0b20gcGFnZS4gRGVmYXVsdHMgdG8gYFNNYXJrZG93blBhZ2VgLlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBwYWdlLlxuICAgKi9cbiAgY3VycmVudDogPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4oKSA9PiBDb21iaW5lZFBhZ2U8Q3VzdG9tRnJvbnRtYXR0ZXI+O1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgcGFnZXMgYmFzZWQgb24gYW4gb3B0aW9uYWwgcXVlcnksIHdpdGggYW4gb3B0aW9uYWwgY3VzdG9tIHBhZ2UgdHlwZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBDdXN0b21QYWdlIC0gVGhlIHR5cGUgb2YgdGhlIGN1c3RvbSBwYWdlLiBEZWZhdWx0cyB0byBgU01hcmtkb3duUGFnZWAuXG4gICAqIEBwYXJhbSBxdWVyeSAtIEFuIG9wdGlvbmFsIHN0cmluZyBxdWVyeSB0byBmaWx0ZXIgdGhlIHBhZ2VzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEYXRhQXJyYXl9IG9mIHBhZ2VzIG1hdGNoaW5nIHRoZSBxdWVyeS5cbiAgICovXG4gIHBhZ2VzOiA8Q3VzdG9tRnJvbnRtYXR0ZXIgPSB1bmtub3duPihxdWVyeT86IHN0cmluZykgPT4gRGF0YUFycmF5PENvbWJpbmVkUGFnZTxDdXN0b21Gcm9udG1hdHRlcj4+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcGFyYWdyYXBoIEhUTUwgZWxlbWVudCB3aXRoIHRoZSBwcm92aWRlZCB0ZXh0IGFuZCBvcHRpb25hbCBET00gZWxlbWVudCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gdGV4dCAtIFRoZSBjb250ZW50IG9mIHRoZSBwYXJhZ3JhcGguXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgRE9NIGVsZW1lbnQgb3B0aW9ucywgaW5jbHVkaW5nIGFuIG9wdGlvbmFsIGNvbnRhaW5lci5cbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgSFRNTCBwYXJhZ3JhcGggZWxlbWVudC5cbiAgICovXG4gIHBhcmFncmFwaDogKFxuICAgIHRleHQ6IHVua25vd24sXG4gICAgb3B0aW9ucz86IERvbUVsZW1lbnRJbmZvV2l0aENvbnRhaW5lclxuICApID0+IEhUTUxQYXJhZ3JhcGhFbGVtZW50O1xufVxuXG4vKipcbiAqIERvbUVsZW1lbnRJbmZvIHdpdGggYW4gb3B0aW9uYWwgY29udGFpbmVyLlxuICovXG5leHBvcnQgdHlwZSBEb21FbGVtZW50SW5mb1dpdGhDb250YWluZXIgPSBDb250YWluZXJJbmZvICYgRG9tRWxlbWVudEluZm87XG5cbi8qKlxuICogQSBjb21iaW5lZCBmaWxlIHR5cGUsIHdoaWNoIGluY2x1ZGVzIHRoZSBmcm9udCBtYXR0ZXIgYW5kIHRoZSBTTWFya2Rvd25GaWxlLlxuICovXG5leHBvcnQgdHlwZSBQYWdlRmlsZSA9IFNNYXJrZG93blBhZ2VbJ2ZpbGUnXTtcblxuLyoqXG4gKiBMaXN0IG9mIHBhZ2UgZmlsZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFBhZ2VGaWxlcyA9IEFycmF5T3JEYXRhQXJyYXk8UGFnZUZpbGU+O1xuXG5pbnRlcmZhY2UgQ29udGFpbmVySW5mbyB7XG4gIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50O1xufVxuXG4vKipcbiAqIFJlbG9hZHMgdGhlIGN1cnJlbnQgZmlsZSBjYWNoZSB1c2luZyB0aGUgYERhdGF2aWV3YCBBUEkuXG4gKlxuICogQHBhcmFtIGR2IC0gVGhlIERhdGF2aWV3SW5saW5lQXBpIGluc3RhbmNlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjYWNoZSBpcyByZWxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbG9hZEN1cnJlbnRGaWxlQ2FjaGUoZHY6IERhdGF2aWV3SW5saW5lQXBpKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGFjdGl2ZVdpbmRvdy5EYXRhdmlld0FQST8uaW5kZXgucmVsb2FkKGdldEZpbGUoe1xuICAgIGFwcDogZHYuYXBwLFxuICAgIHBhdGhPckZpbGU6IGR2LmN1cnJlbnQoKS5maWxlLnBhdGhcbiAgfSkpO1xufVxuXG5jb25zdCBwYWdpbmF0aW9uQ3NzID0gYFxuLnBhZ2luYXRpb24gLnBhZ2UtbGluay5kaXNhYmxlZCB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBjb2xvcjogZ3JheTtcbn1cblxuLnBhZ2luYXRpb24gLnBhZ2UtbGluayB7XG4gIG1hcmdpbjogMCA1cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogYmx1ZTtcbn1cblxuLnBhZ2luYXRpb24gLnBhZ2UtbGluazpob3Zlcjpub3QoLmRpc2FibGVkKSB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLnBhZ2luYXRpb24gLnBhZ2UtbGluay5jdXJyZW50IHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4ucGFnaW5hdGlvbiBzZWxlY3QsXG4ucGFnaW5hdGlvbiBpbnB1dCB7XG4gIG1hcmdpbjogMCA1cHg7XG59XG5gO1xuXG4vKipcbiAqIEFycmF5IG9yIERhdGFBcnJheSB0eXBlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgQXJyYXlPckRhdGFBcnJheTxUPiA9IERhdGFBcnJheTxUPiB8IFRbXTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaW5zZXJ0Q29kZUJsb2NrfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnNlcnRDb2RlQmxvY2tQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvZGUgY29udGVudCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UgdG8gaW5zZXJ0IHRoZSBjb2RlIGJsb2NrIGludG8uXG4gICAqL1xuICByZWFkb25seSBkdjogRGF0YXZpZXdJbmxpbmVBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBsYW5ndWFnZSBpZGVudGlmaWVyIGZvciB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIHJlYWRvbmx5IGxhbmd1YWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlbmRlcklmcmFtZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVySWZyYW1lUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEge0BsaW5rIERhdGF2aWV3SW5saW5lQXBpfSBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGR2OiBEYXRhdmlld0lubGluZUFwaTtcblxuICAvKipcbiAgICogQSBoZWlnaHQgb2YgdGhlIGlmcmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYCc2MDBweCdgXG4gICAqL1xuICByZWFkb25seSBoZWlnaHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcmVsYXRpdmUgcGF0aCB0byB0aGUgcmVzb3VyY2UgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBpZnJhbWUuXG4gICAqL1xuICByZWFkb25seSByZWxhdGl2ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgd2lkdGggb2YgdGhlIGlmcmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcxMDAlJ2BcbiAgICovXG4gIHJlYWRvbmx5IHdpZHRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayByZW5kZXJQYWdpbmF0ZWRMaXN0fS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgbGlzdCBpdGVtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJQYWdpbmF0ZWRMaXN0UGFyYW1zPFQ+IHtcbiAgLyoqXG4gICAqIEEge0BsaW5rIERhdGF2aWV3SW5saW5lQXBpfSBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGR2OiBEYXRhdmlld0lubGluZUFwaTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgaXRlbXMgcGVyIHBhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbMTAsIDIwLCA1MCwgMTAwXWBcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGl0ZW1zIHRvIHBhZ2luYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm93czogQXJyYXlPckRhdGFBcnJheTxUPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVuZGVyUGFnaW5hdGVkfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbXMgdG8gcGFnaW5hdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUGFnaW5hdGVkUGFyYW1zPFQ+IHtcbiAgLyoqXG4gICAqIEEge0BsaW5rIERhdGF2aWV3SW5saW5lQXBpfSBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGR2OiBEYXRhdmlld0lubGluZUFwaTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgaXRlbXMgcGVyIHBhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbMTAsIDIwLCA1MCwgMTAwXWBcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogRGlzcGxheSB0aGUgcGFnaW5hdGVkIGNvbnRlbnQuXG4gICAqXG4gICAqIEBwYXJhbSByb3dzRm9yT25lUGFnZSAtIFRoZSByb3dzIHRvIHJlbmRlci5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb250ZW50IGlzIHJlbmRlcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyZXI6IChyb3dzRm9yT25lUGFnZTogQXJyYXlPckRhdGFBcnJheTxUPikgPT4gUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogUm93cyB0byBwYWdpbmF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvd3M6IEFycmF5T3JEYXRhQXJyYXk8VD47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlbmRlclBhZ2luYXRlZFRhYmxlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdGFibGUgcm93IGRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUGFnaW5hdGVkVGFibGVQYXJhbXM8VD4ge1xuICAvKipcbiAgICogQSB7QGxpbmsgRGF0YXZpZXdJbmxpbmVBcGl9IGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZHY6IERhdGF2aWV3SW5saW5lQXBpO1xuXG4gIC8qKlxuICAgKiBBIGhlYWRlcnMgb2YgdGhlIHRhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhZGVyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGl0ZW1zIHBlciBwYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgWzEwLCAyMCwgNTAsIDEwMF1gXG4gICAqL1xuICByZWFkb25seSBpdGVtc1BlclBhZ2VPcHRpb25zPzogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIFJvd3Mgb2YgdGhlIHRhYmxlIHRvIHBhZ2luYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm93czogQXJyYXlPckRhdGFBcnJheTxUPjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY3JlYXRlUGFnZUxpbmt9LlxuICovXG5pbnRlcmZhY2UgQ3JlYXRlUGFnZUxpbmtQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBhZ2UgbnVtYmVyIHRoZSBsaW5rIHBvaW50cyB0by5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRQYWdlTnVtYmVyOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGxpbmsgaXMgZGlzYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgdXNpbmcgdGhlIHByb3ZpZGVkIHJlbmRlcmVyIGZ1bmN0aW9uIGluIGEgdGVtcG9yYXJ5IGNvbnRhaW5lcixcbiAqIGFuZCB0aGVuIHJldHVybnMgdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gZHYgLSBUaGUgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcmVuZGVyZXIgLSBUaGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlbmRlcmluZyB0aGUgY29udGVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIEhUTUwgcGFyYWdyYXBoIGVsZW1lbnRcbiAqIHRoYXQgd2FzIHVzZWQgYXMgdGhlIHRlbXBvcmFyeSBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbnRhaW5lcihkdjogRGF0YXZpZXdJbmxpbmVBcGksIHJlbmRlcmVyOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+KTogUHJvbWlzZTxIVE1MUGFyYWdyYXBoRWxlbWVudD4ge1xuICBjb25zdCBvbGRDb250YWluZXIgPSBkdi5jb250YWluZXI7XG4gIGNvbnN0IHRlbXBvcmFyeUNvbnRhaW5lciA9IGR2LnBhcmFncmFwaCgnJyk7XG4gIGR2LmNvbnRhaW5lciA9IHRlbXBvcmFyeUNvbnRhaW5lcjtcbiAgZHYuY29udGFpbmVyLmVtcHR5KCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCByZW5kZXJlcigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGR2LnBhcmFncmFwaChg4p2MJHtlcnJvclRvU3RyaW5nKGVycm9yKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBZZXMsIGl0IGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLCBidXQgSSBkb24ndCBhbiBlbGVnYW50IHdheSB0byBmaXggaXQuXG4gICAgZHYuY29udGFpbmVyID0gb2xkQ29udGFpbmVyO1xuICAgIHRlbXBvcmFyeUNvbnRhaW5lci5yZW1vdmUoKTtcbiAgfVxuXG4gIHJldHVybiB0ZW1wb3JhcnlDb250YWluZXI7XG59XG5cbi8qKlxuICogSW5zZXJ0cyBhIGNvZGUgYmxvY2sgaW50byB0aGUgc3BlY2lmaWVkIGBEYXRhdmlld2AgaW5zdGFuY2UgdXNpbmcgdGhlIHByb3ZpZGVkIGxhbmd1YWdlIGFuZCBjb2RlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgaW5zZXJ0aW5nIHRoZSBjb2RlIGJsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Q29kZUJsb2NrKHBhcmFtczogSW5zZXJ0Q29kZUJsb2NrUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBjb2RlLFxuICAgIGR2LFxuICAgIGxhbmd1YWdlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IE1JTl9GRU5DRV9MRU5HVEggPSAzO1xuICBjb25zdCBmZW5jZVJlZ0V4cCA9IG5ldyBSZWdFeHAoYF5cXGB7JHtTdHJpbmcoTUlOX0ZFTkNFX0xFTkdUSCl9LH1gLCAnZ20nKTtcbiAgY29uc3QgZmVuY2VNYXRjaGVzID0gY29kZS5tYXRjaEFsbChmZW5jZVJlZ0V4cCk7XG4gIGNvbnN0IGZlbmNlTGVuZ3RocyA9IFsuLi5mZW5jZU1hdGNoZXNdLm1hcCgoZmVuY2VNYXRjaCkgPT4gZmVuY2VNYXRjaFswXS5sZW5ndGgpO1xuICBjb25zdCBtYXhGZW5jZUxlbmd0aCA9IE1hdGgubWF4KDAsIC4uLmZlbmNlTGVuZ3Rocyk7XG4gIGNvbnN0IHJlc3VsdEZlbmNlTGVuZ3RoID0gTWF0aC5tYXgoTUlOX0ZFTkNFX0xFTkdUSCwgbWF4RmVuY2VMZW5ndGggKyAxKTtcbiAgY29uc3QgcmVzdWx0RmVuY2UgPSAnYCcucmVwZWF0KHJlc3VsdEZlbmNlTGVuZ3RoKTtcblxuICBkdi5wYXJhZ3JhcGgoYCR7cmVzdWx0RmVuY2V9JHtsYW5ndWFnZX1cbiR7Y29kZX1cbiR7cmVzdWx0RmVuY2V9YCk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBpZnJhbWUgaW4gdGhlIGBEYXRhdmlld2AgY29udGFpbmVyIHdpdGggdGhlIHNwZWNpZmllZCByZWxhdGl2ZSBwYXRoLCB3aWR0aCwgYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlbmRlcmluZyB0aGUgaWZyYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVySWZyYW1lKHBhcmFtczogUmVuZGVySWZyYW1lUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBkdixcbiAgICBoZWlnaHQgPSAnNjAwcHgnLFxuICAgIHJlbGF0aXZlUGF0aE9yRmlsZSxcbiAgICB3aWR0aCA9ICcxMDAlJ1xuICB9ID0gcGFyYW1zO1xuICBkdi5lbCgnaWZyYW1lJywgJycsIHtcbiAgICBhdHRyOiB7XG4gICAgICBoZWlnaHQsXG4gICAgICBzcmM6IHJlbGF0aXZlUGF0aFRvUmVzb3VyY2VVcmwoe1xuICAgICAgICBhcHA6IGR2LmFwcCxcbiAgICAgICAgbm90ZVBhdGg6IGR2LmN1cnJlbnQoKS5maWxlLnBhdGgsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogZ2V0UGF0aChkdi5hcHAsIHJlbGF0aXZlUGF0aE9yRmlsZSlcbiAgICAgIH0pLFxuICAgICAgd2lkdGhcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBwYWdpbmF0ZWQgbGlzdCB1c2luZyB0aGUgcHJvdmlkZWQgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgaXRlbXMgaW4gdGhlIGxpc3QuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIHBhZ2luYXRlZCBsaXN0LlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbGlzdCBpcyByZW5kZXJlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclBhZ2luYXRlZExpc3Q8VD4ocGFyYW1zOiBSZW5kZXJQYWdpbmF0ZWRMaXN0UGFyYW1zPFQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBkdixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBFeHRyYWN0aW5nIG1hZ2ljIG51bWJlciBhcyBhIGNvbnN0YW50IHdvdWxkIGJlIHJlcGV0aXRpdmUsIGFzIHRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBhbmQgaXRzIG5hbWUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5LlxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBbMTAsIDIwLCA1MCwgMTAwXSxcbiAgICByb3dzXG4gIH0gPSBwYXJhbXM7XG4gIGF3YWl0IHJlbmRlclBhZ2luYXRlZCh7XG4gICAgZHYsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9ucyxcbiAgICByZW5kZXJlcjogYXN5bmMgKHJvd3NGb3JPbmVQYWdlOiBBcnJheU9yRGF0YUFycmF5PFQ+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBhd2FpdCBkdi5saXN0KHJvd3NGb3JPbmVQYWdlKTtcbiAgICB9LFxuICAgIHJvd3NcbiAgfSk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHBhZ2luYXRlZCB0YWJsZSB1c2luZyB0aGUgcHJvdmlkZWQgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgaXRlbXMgaW4gdGhlIHRhYmxlIHJvd3MuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIHBhZ2luYXRlZCB0YWJsZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRhYmxlIGlzIHJlbmRlcmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyUGFnaW5hdGVkVGFibGU8VCBleHRlbmRzIHVua25vd25bXT4ocGFyYW1zOiBSZW5kZXJQYWdpbmF0ZWRUYWJsZVBhcmFtczxUPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgZHYsXG4gICAgaGVhZGVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBFeHRyYWN0aW5nIG1hZ2ljIG51bWJlciBhcyBhIGNvbnN0YW50IHdvdWxkIGJlIHJlcGV0aXRpdmUsIGFzIHRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBhbmQgaXRzIG5hbWUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5LlxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBbMTAsIDIwLCA1MCwgMTAwXSxcbiAgICByb3dzXG4gIH0gPSBwYXJhbXM7XG4gIGF3YWl0IHJlbmRlclBhZ2luYXRlZCh7XG4gICAgZHYsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9ucyxcbiAgICByZW5kZXJlcjogYXN5bmMgKHJvd3NGb3JPbmVQYWdlOiBBcnJheU9yRGF0YUFycmF5PFQ+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBhd2FpdCBkdi50YWJsZShoZWFkZXJzLCByb3dzRm9yT25lUGFnZSk7XG4gICAgfSxcbiAgICByb3dzXG4gIH0pO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byByZW5kZXIgcGFnaW5hdGVkIGNvbnRlbnQgdXNpbmcgdGhlIHNwZWNpZmllZCByZW5kZXJlci5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBpdGVtcyB0byBwYWdpbmF0ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlbmRlcmluZyB0aGUgcGFnaW5hdGVkIGNvbnRlbnQuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb250ZW50IGlzIHJlbmRlcmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZW5kZXJQYWdpbmF0ZWQ8VD4ocGFyYW1zOiBSZW5kZXJQYWdpbmF0ZWRQYXJhbXM8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgU0VDT05EX1BBR0VfTlVNQkVSID0gMjtcbiAgY29uc3QgTU9SRV9QQUdFX05VTUJFUiA9IDM7XG4gIGNvbnN0IHtcbiAgICBkdixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBFeHRyYWN0aW5nIG1hZ2ljIG51bWJlciBhcyBhIGNvbnN0YW50IHdvdWxkIGJlIHJlcGV0aXRpdmUsIGFzIHRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBhbmQgaXRzIG5hbWUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5LlxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBbMTAsIDIwLCA1MCwgMTAwXSxcbiAgICByb3dzXG4gIH0gPSBwYXJhbXM7XG4gIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgIGR2LnBhcmFncmFwaCgnTm8gaXRlbXMgZm91bmQnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY29udGFpbmVyID0gZHYuY29udGFpbmVyO1xuICBsZXQgaXRlbXNQZXJQYWdlID0gZW5zdXJlTm9uTnVsbGFibGUoaXRlbXNQZXJQYWdlT3B0aW9uc1swXSwgJ0l0ZW1zIHBlciBwYWdlIG9wdGlvbnMgYXJlIGVtcHR5Jyk7XG4gIGxldCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHJvd3MubGVuZ3RoIC8gaXRlbXNQZXJQYWdlKTtcbiAgYXdhaXQgcmVuZGVyUGFnZSgxKTtcblxuICBmdW5jdGlvbiBjcmVhdGVQYWdpbmF0aW9uQ29udHJvbHMocGFnZU51bWJlcjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcGFnaW5hdGlvbkRpdiA9IGNvbnRhaW5lci5jcmVhdGVEaXYoeyBjbHM6ICdwYWdpbmF0aW9uJyB9KTtcbiAgICBjb25zdCBwYWdpbmF0aW9uUm93MURpdiA9IHBhZ2luYXRpb25EaXYuY3JlYXRlRGl2KCk7XG5cbiAgICBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiAxLCBkaXNhYmxlZDogcGFnZU51bWJlciA9PT0gMSwgdGV4dDogJ0ZpcnN0JyB9KTtcbiAgICBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiBwYWdlTnVtYmVyIC0gMSwgZGlzYWJsZWQ6IHBhZ2VOdW1iZXIgPT09IDEsIHRleHQ6ICdQcmV2JyB9KTtcblxuICAgIGlmIChwYWdlTnVtYmVyID4gTU9SRV9QQUdFX05VTUJFUikge1xuICAgICAgcGFnaW5hdGlvblJvdzFEaXYuY3JlYXRlU3Bhbih7IHRleHQ6ICcuLi4nIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGluZGV4ID0gTWF0aC5tYXgoMSwgcGFnZU51bWJlciAtIFNFQ09ORF9QQUdFX05VTUJFUik7IGluZGV4IDw9IE1hdGgubWluKHRvdGFsUGFnZXMsIHBhZ2VOdW1iZXIgKyBTRUNPTkRfUEFHRV9OVU1CRVIpOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBwYWdlTGluayA9IGNyZWF0ZVBhZ2VMaW5rKHsgY3VycmVudFBhZ2VOdW1iZXI6IGluZGV4LCBkaXNhYmxlZDogaW5kZXggPT09IHBhZ2VOdW1iZXIsIHRleHQ6IFN0cmluZyhpbmRleCkgfSk7XG4gICAgICBpZiAoaW5kZXggPT09IHBhZ2VOdW1iZXIpIHtcbiAgICAgICAgcGFnZUxpbmsuYWRkQ2xhc3MoJ2N1cnJlbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFnZU51bWJlciA8IHRvdGFsUGFnZXMgLSBTRUNPTkRfUEFHRV9OVU1CRVIpIHtcbiAgICAgIHBhZ2luYXRpb25Sb3cxRGl2LmNyZWF0ZVNwYW4oeyB0ZXh0OiAnLi4uJyB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiBwYWdlTnVtYmVyICsgMSwgZGlzYWJsZWQ6IHBhZ2VOdW1iZXIgPT09IHRvdGFsUGFnZXMsIHRleHQ6ICdOZXh0JyB9KTtcbiAgICBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiB0b3RhbFBhZ2VzLCBkaXNhYmxlZDogcGFnZU51bWJlciA9PT0gdG90YWxQYWdlcywgdGV4dDogJ0xhc3QnIH0pO1xuXG4gICAgY29uc3QgcGFnaW5hdGlvblJvdzJEaXYgPSBwYWdpbmF0aW9uRGl2LmNyZWF0ZURpdigpO1xuXG4gICAgcGFnaW5hdGlvblJvdzJEaXYuY3JlYXRlU3Bhbih7IHRleHQ6IGAgJHt0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmRhdGF2aWV3Lml0ZW1zUGVyUGFnZSl9IGAgfSk7XG5cbiAgICBjb25zdCBpdGVtc1BlclBhZ2VTZWxlY3QgPSBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVFbCgnc2VsZWN0Jyk7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgaXRlbXNQZXJQYWdlT3B0aW9ucykge1xuICAgICAgaXRlbXNQZXJQYWdlU2VsZWN0LmNyZWF0ZUVsKCdvcHRpb24nLCB7IHRleHQ6IFN0cmluZyhvcHRpb24pLCB2YWx1ZTogU3RyaW5nKG9wdGlvbikgfSk7XG4gICAgfVxuICAgIGl0ZW1zUGVyUGFnZVNlbGVjdC52YWx1ZSA9IFN0cmluZyhpdGVtc1BlclBhZ2UpO1xuICAgIGl0ZW1zUGVyUGFnZVNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NoYW5nZScsXG4gICAgICBjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBpdGVtc1BlclBhZ2UgPSBwYXJzZUludChpdGVtc1BlclBhZ2VTZWxlY3QudmFsdWUsIDEwKTtcbiAgICAgICAgdG90YWxQYWdlcyA9IE1hdGguY2VpbChyb3dzLmxlbmd0aCAvIGl0ZW1zUGVyUGFnZSk7XG4gICAgICAgIGF3YWl0IHJlbmRlclBhZ2UoMSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVTcGFuKHsgdGV4dDogYCAke3QoKCQpID0+ICQub2JzaWRpYW5MaWIuZGF0YXZpZXcuanVtcFRvUGFnZSl9IGAgfSk7XG5cbiAgICBjb25zdCBqdW1wVG9QYWdlSW5wdXQgPSBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVFbCgnaW5wdXQnLCB7IGF0dHI6IHsgbWF4OiB0b3RhbFBhZ2VzLCBtaW46IDEgfSwgdHlwZTogJ251bWJlcicgfSk7XG4gICAganVtcFRvUGFnZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAna2V5ZG93bicsXG4gICAgICBjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYWdlID0gcGFyc2VJbnQoanVtcFRvUGFnZUlucHV0LnZhbHVlLCAxMCk7XG4gICAgICAgIGlmIChwYWdlID49IDEgJiYgcGFnZSA8PSB0b3RhbFBhZ2VzKSB7XG4gICAgICAgICAgYXdhaXQgcmVuZGVyUGFnZShwYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcGFnaW5hdGlvblJvdzJEaXYuY3JlYXRlU3Bhbih7IHRleHQ6IHQoKCQpID0+ICQub2JzaWRpYW5MaWIuZGF0YXZpZXcucGFnZUhlYWRlciwgeyBwYWdlTnVtYmVyLCB0b3RhbEl0ZW1zOiByb3dzLmxlbmd0aCwgdG90YWxQYWdlcyB9KSB9KTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhZ2VMaW5rKHBhcmFtczI6IENyZWF0ZVBhZ2VMaW5rUGFyYW1zKTogSFRNTEFuY2hvckVsZW1lbnQge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyZW50UGFnZU51bWJlcixcbiAgICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgICAgdGV4dFxuICAgICAgfSA9IHBhcmFtczI7XG4gICAgICBjb25zdCBsaW5rID0gcGFnaW5hdGlvblJvdzFEaXYuY3JlYXRlRWwoJ2EnLCB7IGNsczogJ3BhZ2UtbGluaycsIGhyZWY6IGAjJHtTdHJpbmcoY3VycmVudFBhZ2VOdW1iZXIpfWAsIHRleHQgfSk7XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgbGluay5hZGRDbGFzcygnZGlzYWJsZWQnKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWFkZC1ldmVudC1saXN0ZW5lciAtLSBUaGUgaGFuZGxlciBpcyBhc3NpZ25lZCB0byBgb25jbGlja2Agc28gaXQgc3RheXMgcmVhZGFibGUgYmFjayBvZmYgdGhlIGVsZW1lbnQsIHdoaWNoIGlzIGhvdyBpdCBpcyBpbnZva2VkIGluIHRlc3RzIGFuZCBob3cgYSBsYXRlciBhc3NpZ25tZW50IGNhbiByZXBsYWNlIGl0LlxuICAgICAgICBsaW5rLm9uY2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWFkZC1ldmVudC1saXN0ZW5lciAtLSBUaGUgaGFuZGxlciBpcyBhc3NpZ25lZCB0byBgb25jbGlja2Agc28gaXQgc3RheXMgcmVhZGFibGUgYmFjayBvZmYgdGhlIGVsZW1lbnQsIHdoaWNoIGlzIGhvdyBpdCBpcyBpbnZva2VkIGluIHRlc3RzIGFuZCBob3cgYSBsYXRlciBhc3NpZ25tZW50IGNhbiByZXBsYWNlIGl0LlxuICAgICAgICBsaW5rLm9uY2xpY2sgPSBjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKGV2ZW50OiBNb3VzZUV2ZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBhd2FpdCByZW5kZXJQYWdlKGN1cnJlbnRQYWdlTnVtYmVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGluaztcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZW5kZXJQYWdlKHBhZ2VOdW1iZXI6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnRhaW5lci5lbXB0eSgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbm1kL25vLWZvcmJpZGRlbi1lbGVtZW50cyAtLSBXZSBuZWVkIHRvIGNyZWF0ZSBhIHN0eWxlIGVsZW1lbnQgdG8gYXBwbHkgdGhlIHBhZ2luYXRpb24gQ1NTLlxuICAgIGNvbnRhaW5lci5jcmVhdGVFbCgnc3R5bGUnLCB7IHRleHQ6IHBhZ2luYXRpb25Dc3MgfSk7XG5cbiAgICBjb25zdCBzdGFydEluZGV4ID0gKHBhZ2VOdW1iZXIgLSAxKSAqIGl0ZW1zUGVyUGFnZTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBpdGVtc1BlclBhZ2U7XG4gICAgY29uc3Qgcm93c0ZvckN1cnJlbnRQYWdlID0gcm93cy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XG5cbiAgICBjb25zdCBvbGRDb250YWluZXIgPSBkdi5jb250YWluZXI7XG5cbiAgICBkdi5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBhcmFtcy5yZW5kZXJlcihyb3dzRm9yQ3VycmVudFBhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkdi5wYXJhZ3JhcGgoYOKdjCR7ZXJyb3JUb1N0cmluZyhlcnJvcil9YCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzIC0tIFllcywgaXQgaXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24sIGJ1dCBJIGRvbid0IGFuIGVsZWdhbnQgd2F5IHRvIGZpeCBpdC5cbiAgICAgIGR2LmNvbnRhaW5lciA9IG9sZENvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBjcmVhdGVQYWdpbmF0aW9uQ29udHJvbHMocGFnZU51bWJlcik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLHFCQUFxQjtBQUM5QixTQUFTLHlCQUF5QjtBQUtsQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsU0FBUztBQUNsQixTQUFTLGlDQUFpQztBQW9HMUMsZUFBc0IsdUJBQXVCLElBQXNDO0FBQ2pGLFFBQU0sYUFBYSxhQUFhLE1BQU0sT0FBTyxRQUFRO0FBQUEsSUFDbkQsS0FBSyxHQUFHO0FBQUEsSUFDUixZQUFZLEdBQUcsUUFBUSxFQUFFLEtBQUs7QUFBQSxFQUNoQyxDQUFDLENBQUM7QUFDSjtBQUVBLE1BQU0sZ0JBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxTXRCLGVBQXNCLHFCQUFxQixJQUF1QixVQUFpRTtBQUNqSSxRQUFNLGVBQWUsR0FBRztBQUN4QixRQUFNLHFCQUFxQixHQUFHLFVBQVUsRUFBRTtBQUMxQyxLQUFHLFlBQVk7QUFDZixLQUFHLFVBQVUsTUFBTTtBQUVuQixNQUFJO0FBQ0YsVUFBTSxTQUFTO0FBQUEsRUFDakIsU0FBUyxPQUFPO0FBQ2QsT0FBRyxVQUFVLFNBQUksY0FBYyxLQUFLLENBQUMsRUFBRTtBQUFBLEVBQ3pDLFVBQUU7QUFFQSxPQUFHLFlBQVk7QUFDZix1QkFBbUIsT0FBTztBQUFBLEVBQzVCO0FBRUEsU0FBTztBQUNUO0FBT08sU0FBUyxnQkFBZ0IsUUFBcUM7QUFDbkUsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLFFBQU0sbUJBQW1CO0FBQ3pCLFFBQU0sY0FBYyxJQUFJLE9BQU8sT0FBTyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sSUFBSTtBQUN4RSxRQUFNLGVBQWUsS0FBSyxTQUFTLFdBQVc7QUFDOUMsUUFBTSxlQUFlLENBQUMsR0FBRyxZQUFZLEVBQUUsSUFBSSxDQUFDLGVBQWUsV0FBVyxDQUFDLEVBQUUsTUFBTTtBQUMvRSxRQUFNLGlCQUFpQixLQUFLLElBQUksR0FBRyxHQUFHLFlBQVk7QUFDbEQsUUFBTSxvQkFBb0IsS0FBSyxJQUFJLGtCQUFrQixpQkFBaUIsQ0FBQztBQUN2RSxRQUFNLGNBQWMsSUFBSSxPQUFPLGlCQUFpQjtBQUVoRCxLQUFHLFVBQVUsR0FBRyxXQUFXLEdBQUcsUUFBUTtBQUFBLEVBQ3RDLElBQUk7QUFBQSxFQUNKLFdBQVcsRUFBRTtBQUNmO0FBT08sU0FBUyxhQUFhLFFBQWtDO0FBQzdELFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQSxTQUFTO0FBQUEsSUFDVDtBQUFBLElBQ0EsUUFBUTtBQUFBLEVBQ1YsSUFBSTtBQUNKLEtBQUcsR0FBRyxVQUFVLElBQUk7QUFBQSxJQUNsQixNQUFNO0FBQUEsTUFDSjtBQUFBLE1BQ0EsS0FBSywwQkFBMEI7QUFBQSxRQUM3QixLQUFLLEdBQUc7QUFBQSxRQUNSLFVBQVUsR0FBRyxRQUFRLEVBQUUsS0FBSztBQUFBLFFBQzVCLGNBQWMsUUFBUSxHQUFHLEtBQUssa0JBQWtCO0FBQUEsTUFDbEQsQ0FBQztBQUFBLE1BQ0Q7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFXQSxlQUFzQixvQkFBdUIsUUFBcUQ7QUFDaEcsUUFBTTtBQUFBLElBQ0o7QUFBQTtBQUFBLElBRUEsc0JBQXNCLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRztBQUFBLElBQ3RDO0FBQUEsRUFDRixJQUFJO0FBQ0osUUFBTSxnQkFBZ0I7QUFBQSxJQUNwQjtBQUFBLElBQ0E7QUFBQSxJQUNBLFVBQVUsT0FBTyxtQkFBdUQ7QUFDdEUsWUFBTSxHQUFHLEtBQUssY0FBYztBQUFBLElBQzlCO0FBQUEsSUFDQTtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBV0EsZUFBc0IscUJBQTBDLFFBQXNEO0FBQ3BILFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBO0FBQUEsSUFFQSxzQkFBc0IsQ0FBQyxJQUFJLElBQUksSUFBSSxHQUFHO0FBQUEsSUFDdEM7QUFBQSxFQUNGLElBQUk7QUFDSixRQUFNLGdCQUFnQjtBQUFBLElBQ3BCO0FBQUEsSUFDQTtBQUFBLElBQ0EsVUFBVSxPQUFPLG1CQUF1RDtBQUN0RSxZQUFNLEdBQUcsTUFBTSxTQUFTLGNBQWM7QUFBQSxJQUN4QztBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVdBLGVBQWUsZ0JBQW1CLFFBQWlEO0FBQ2pGLFFBQU0scUJBQXFCO0FBQzNCLFFBQU0sbUJBQW1CO0FBQ3pCLFFBQU07QUFBQSxJQUNKO0FBQUE7QUFBQSxJQUVBLHNCQUFzQixDQUFDLElBQUksSUFBSSxJQUFJLEdBQUc7QUFBQSxJQUN0QztBQUFBLEVBQ0YsSUFBSTtBQUNKLE1BQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsT0FBRyxVQUFVLGdCQUFnQjtBQUM3QjtBQUFBLEVBQ0Y7QUFDQSxRQUFNLFlBQVksR0FBRztBQUNyQixNQUFJLGVBQWUsa0JBQWtCLG9CQUFvQixDQUFDLEdBQUcsa0NBQWtDO0FBQy9GLE1BQUksYUFBYSxLQUFLLEtBQUssS0FBSyxTQUFTLFlBQVk7QUFDckQsUUFBTSxXQUFXLENBQUM7QUFFbEIsV0FBUyx5QkFBeUIsWUFBMEI7QUFDMUQsVUFBTSxnQkFBZ0IsVUFBVSxVQUFVLEVBQUUsS0FBSyxhQUFhLENBQUM7QUFDL0QsVUFBTSxvQkFBb0IsY0FBYyxVQUFVO0FBRWxELG1CQUFlLEVBQUUsbUJBQW1CLEdBQUcsVUFBVSxlQUFlLEdBQUcsTUFBTSxRQUFRLENBQUM7QUFDbEYsbUJBQWUsRUFBRSxtQkFBbUIsYUFBYSxHQUFHLFVBQVUsZUFBZSxHQUFHLE1BQU0sT0FBTyxDQUFDO0FBRTlGLFFBQUksYUFBYSxrQkFBa0I7QUFDakMsd0JBQWtCLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUFBLElBQzlDO0FBRUEsYUFBUyxRQUFRLEtBQUssSUFBSSxHQUFHLGFBQWEsa0JBQWtCLEdBQUcsU0FBUyxLQUFLLElBQUksWUFBWSxhQUFhLGtCQUFrQixHQUFHLFNBQVM7QUFDdEksWUFBTSxXQUFXLGVBQWUsRUFBRSxtQkFBbUIsT0FBTyxVQUFVLFVBQVUsWUFBWSxNQUFNLE9BQU8sS0FBSyxFQUFFLENBQUM7QUFDakgsVUFBSSxVQUFVLFlBQVk7QUFDeEIsaUJBQVMsU0FBUyxTQUFTO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBRUEsUUFBSSxhQUFhLGFBQWEsb0JBQW9CO0FBQ2hELHdCQUFrQixXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFBQSxJQUM5QztBQUVBLG1CQUFlLEVBQUUsbUJBQW1CLGFBQWEsR0FBRyxVQUFVLGVBQWUsWUFBWSxNQUFNLE9BQU8sQ0FBQztBQUN2RyxtQkFBZSxFQUFFLG1CQUFtQixZQUFZLFVBQVUsZUFBZSxZQUFZLE1BQU0sT0FBTyxDQUFDO0FBRW5HLFVBQU0sb0JBQW9CLGNBQWMsVUFBVTtBQUVsRCxzQkFBa0IsV0FBVyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLFlBQVksU0FBUyxZQUFZLENBQUMsSUFBSSxDQUFDO0FBRTNGLFVBQU0scUJBQXFCLGtCQUFrQixTQUFTLFFBQVE7QUFDOUQsZUFBVyxVQUFVLHFCQUFxQjtBQUN4Qyx5QkFBbUIsU0FBUyxVQUFVLEVBQUUsTUFBTSxPQUFPLE1BQU0sR0FBRyxPQUFPLE9BQU8sTUFBTSxFQUFFLENBQUM7QUFBQSxJQUN2RjtBQUNBLHVCQUFtQixRQUFRLE9BQU8sWUFBWTtBQUM5Qyx1QkFBbUI7QUFBQSxNQUNqQjtBQUFBLE1BQ0EsbUJBQW1CLFlBQTJCO0FBQzVDLHVCQUFlLFNBQVMsbUJBQW1CLE9BQU8sRUFBRTtBQUNwRCxxQkFBYSxLQUFLLEtBQUssS0FBSyxTQUFTLFlBQVk7QUFDakQsY0FBTSxXQUFXLENBQUM7QUFBQSxNQUNwQixDQUFDO0FBQUEsSUFDSDtBQUVBLHNCQUFrQixXQUFXLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxTQUFTLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFFekYsVUFBTSxrQkFBa0Isa0JBQWtCLFNBQVMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLFlBQVksS0FBSyxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUM7QUFDakgsb0JBQWdCO0FBQUEsTUFDZDtBQUFBLE1BQ0EsbUJBQW1CLE9BQU8sVUFBd0M7QUFDaEUsWUFBSSxNQUFNLFFBQVEsU0FBUztBQUN6QjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLE9BQU8sU0FBUyxnQkFBZ0IsT0FBTyxFQUFFO0FBQy9DLFlBQUksUUFBUSxLQUFLLFFBQVEsWUFBWTtBQUNuQyxnQkFBTSxXQUFXLElBQUk7QUFBQSxRQUN2QjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxzQkFBa0IsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLFNBQVMsWUFBWSxFQUFFLFlBQVksWUFBWSxLQUFLLFFBQVEsV0FBVyxDQUFDLEVBQUUsQ0FBQztBQUV2SSxhQUFTLGVBQWUsU0FBa0Q7QUFDeEUsWUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYO0FBQUEsTUFDRixJQUFJO0FBQ0osWUFBTSxPQUFPLGtCQUFrQixTQUFTLEtBQUssRUFBRSxLQUFLLGFBQWEsTUFBTSxJQUFJLE9BQU8saUJBQWlCLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDOUcsVUFBSSxVQUFVO0FBQ1osYUFBSyxTQUFTLFVBQVU7QUFFeEIsYUFBSyxVQUFVLENBQUMsVUFBNEI7QUFDMUMsZ0JBQU0sZUFBZTtBQUFBLFFBQ3ZCO0FBQUEsTUFDRixPQUFPO0FBRUwsYUFBSyxVQUFVLG1CQUFtQixPQUFPLFVBQXFDO0FBQzVFLGdCQUFNLGVBQWU7QUFDckIsZ0JBQU0sV0FBVyxpQkFBaUI7QUFBQSxRQUNwQyxDQUFDO0FBQUEsTUFDSDtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLGlCQUFlLFdBQVcsWUFBbUM7QUFDM0QsY0FBVSxNQUFNO0FBRWhCLGNBQVUsU0FBUyxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkQsVUFBTSxjQUFjLGFBQWEsS0FBSztBQUN0QyxVQUFNLFdBQVcsYUFBYTtBQUM5QixVQUFNLHFCQUFxQixLQUFLLE1BQU0sWUFBWSxRQUFRO0FBRTFELFVBQU0sZUFBZSxHQUFHO0FBRXhCLE9BQUcsWUFBWTtBQUNmLFFBQUk7QUFDRixZQUFNLE9BQU8sU0FBUyxrQkFBa0I7QUFBQSxJQUMxQyxTQUFTLE9BQU87QUFDZCxTQUFHLFVBQVUsU0FBSSxjQUFjLEtBQUssQ0FBQyxFQUFFO0FBQUEsSUFDekMsVUFBRTtBQUVBLFNBQUcsWUFBWTtBQUFBLElBQ2pCO0FBRUEsNkJBQXlCLFVBQVU7QUFBQSxFQUNyQztBQUNGOyIsIm5hbWVzIjpbXX0=
271
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhdmlldy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBgRGF0YXZpZXdgIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRGF0YUFycmF5LFxuICBEYXRhdmlld0FwaSxcbiAgU01hcmtkb3duUGFnZVxufSBmcm9tICdAbW5hb3Vtb3Yvb2JzaWRpYW4tZGF0YXZpZXcnO1xuaW1wb3J0IHR5cGUgeyBEYXRhdmlld0lubGluZUFwaSBhcyBEYXRhdmlld0lubGluZUFwaU9yaWdpbmFsIH0gZnJvbSAnQG1uYW91bW92L29ic2lkaWFuLWRhdGF2aWV3L2FwaS9pbmxpbmUtYXBpJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGNvbnZlcnRBc3luY1RvU3luYyB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBlcnJvclRvU3RyaW5nIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0UGF0aFxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQgeyByZWxhdGl2ZVBhdGhUb1Jlc291cmNlVXJsIH0gZnJvbSAnLi9yZXNvdXJjZS11cmwudHMnO1xuXG4vKipcbiAqIEV4cG9ydCBEYXRlVGltZSBhbmQgTGluayB0eXBlcyBmcm9tIHRoZSBgRGF0YXZpZXdgIEFQSS5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBEYXRlVGltZSxcbiAgTGlua1xufSBmcm9tICdAbW5hb3Vtb3Yvb2JzaWRpYW4tZGF0YXZpZXcnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8qKlxuICAgKiBBIHtAbGluayBEYXRhdmlld0FwaX0gb2JqZWN0IHJlcHJlc2VudHMgdGhlIEFQSSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBgRGF0YXZpZXdgIGluIE9ic2lkaWFuLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhcnMtb24tdG9wIC0tIEl0IGlzIGEgYHZhcmAgaW4gbW9kdWxlIGRlY2xhcmF0aW9uLiBFU0xpbnQgbWlzdGFrZW5seSBjb25mdXNlcyBpdCB3aXRoIGB2YXJgIGFzIGEgdmFyaWFibGUgZGVjbGFyYXRpb24uXG4gIHZhciBEYXRhdmlld0FQSTogRGF0YXZpZXdBcGkgfCB1bmRlZmluZWQ7XG5cbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgLyoqXG4gICAgICogVGhlIGdsb2JhbCB7QGxpbmsgRGF0YXZpZXdBcGl9IG9iamVjdCBgRGF0YXZpZXdgIGluc3RhbGxzIG9uIGV2ZXJ5IHdpbmRvdy5cbiAgICAgKi9cbiAgICByZWFkb25seSBEYXRhdmlld0FQST86IERhdGF2aWV3QXBpO1xuICB9XG59XG5cbi8qKlxuICogQSBjb21iaW5lZCBwYWdlIHR5cGUsIHdoaWNoIGluY2x1ZGVzIHRoZSBmcm9udCBtYXR0ZXIgYW5kIHRoZSBTTWFya2Rvd25QYWdlLlxuICpcbiAqIEB0eXBlUGFyYW0gQ3VzdG9tRnJvbnRtYXR0ZXIgLSBUaGUgdHlwZSBvZiB0aGUgY3VzdG9tIGZyb250IG1hdHRlci5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tYmluZWRQYWdlPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4gPSBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPiAmIFNNYXJrZG93blBhZ2U7XG5cbi8qKlxuICogRXh0ZW5kZWQgaW50ZXJmYWNlIGZvciB0aGUgYERhdGF2aWV3YCBJbmxpbmUgQVBJLCBwcm92aWRpbmcgYWRkaXRpb25hbCBtZXRob2RzIGZvciBjdXN0b20gcGFnZSB0eXBlcyBhbmQgYXJyYXkgaGFuZGxpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXZpZXdJbmxpbmVBcGkgZXh0ZW5kcyBEYXRhdmlld0lubGluZUFwaU9yaWdpbmFsIHtcbiAgLyoqXG4gICAqIFdyYXBzIGFuIGFycmF5IG9mIGl0ZW1zIGludG8gYSB7QGxpbmsgRGF0YUFycmF5fSBvYmplY3QuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtcyBpbiB0aGUgYXJyYXkuXG4gICAqIEBwYXJhbSBhcnJheSAtIFRoZSBhcnJheSBvZiBpdGVtcyB0byB3cmFwLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEYXRhQXJyYXl9IGNvbnRhaW5pbmcgdGhlIGl0ZW1zLlxuICAgKi9cbiAgcmVhZG9ubHkgYXJyYXk6IDxUPihhcnJheTogVFtdKSA9PiBEYXRhQXJyYXk8VD47XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBwYWdlLCB3aXRoIGFuIG9wdGlvbmFsIGN1c3RvbSBwYWdlIHR5cGUuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gQ3VzdG9tUGFnZSAtIFRoZSB0eXBlIG9mIHRoZSBjdXN0b20gcGFnZS4gRGVmYXVsdHMgdG8gYFNNYXJrZG93blBhZ2VgLlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBwYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudDogPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4oKSA9PiBDb21iaW5lZFBhZ2U8Q3VzdG9tRnJvbnRtYXR0ZXI+O1xuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgcGFnZXMgYmFzZWQgb24gYW4gb3B0aW9uYWwgcXVlcnksIHdpdGggYW4gb3B0aW9uYWwgY3VzdG9tIHBhZ2UgdHlwZS5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBDdXN0b21QYWdlIC0gVGhlIHR5cGUgb2YgdGhlIGN1c3RvbSBwYWdlLiBEZWZhdWx0cyB0byBgU01hcmtkb3duUGFnZWAuXG4gICAqIEBwYXJhbSBxdWVyeSAtIEFuIG9wdGlvbmFsIHN0cmluZyBxdWVyeSB0byBmaWx0ZXIgdGhlIHBhZ2VzLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEYXRhQXJyYXl9IG9mIHBhZ2VzIG1hdGNoaW5nIHRoZSBxdWVyeS5cbiAgICovXG4gIHJlYWRvbmx5IHBhZ2VzOiA8Q3VzdG9tRnJvbnRtYXR0ZXIgPSB1bmtub3duPihxdWVyeT86IHN0cmluZykgPT4gRGF0YUFycmF5PENvbWJpbmVkUGFnZTxDdXN0b21Gcm9udG1hdHRlcj4+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcGFyYWdyYXBoIEhUTUwgZWxlbWVudCB3aXRoIHRoZSBwcm92aWRlZCB0ZXh0IGFuZCBvcHRpb25hbCBET00gZWxlbWVudCBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gdGV4dCAtIFRoZSBjb250ZW50IG9mIHRoZSBwYXJhZ3JhcGguXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgRE9NIGVsZW1lbnQgb3B0aW9ucywgaW5jbHVkaW5nIGFuIG9wdGlvbmFsIGNvbnRhaW5lci5cbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgSFRNTCBwYXJhZ3JhcGggZWxlbWVudC5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmFncmFwaDogKFxuICAgIHRleHQ6IHVua25vd24sXG4gICAgb3B0aW9ucz86IERvbUVsZW1lbnRJbmZvV2l0aENvbnRhaW5lclxuICApID0+IEhUTUxQYXJhZ3JhcGhFbGVtZW50O1xufVxuXG4vKipcbiAqIERvbUVsZW1lbnRJbmZvIHdpdGggYW4gb3B0aW9uYWwgY29udGFpbmVyLlxuICovXG5leHBvcnQgdHlwZSBEb21FbGVtZW50SW5mb1dpdGhDb250YWluZXIgPSBDb250YWluZXJJbmZvICYgRG9tRWxlbWVudEluZm87XG5cbi8qKlxuICogQSBjb21iaW5lZCBmaWxlIHR5cGUsIHdoaWNoIGluY2x1ZGVzIHRoZSBmcm9udCBtYXR0ZXIgYW5kIHRoZSBTTWFya2Rvd25GaWxlLlxuICovXG5leHBvcnQgdHlwZSBQYWdlRmlsZSA9IFNNYXJrZG93blBhZ2VbJ2ZpbGUnXTtcblxuLyoqXG4gKiBMaXN0IG9mIHBhZ2UgZmlsZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFBhZ2VGaWxlcyA9IEFycmF5T3JEYXRhQXJyYXk8UGFnZUZpbGU+O1xuXG5pbnRlcmZhY2UgQ29udGFpbmVySW5mbyB7XG4gIHJlYWRvbmx5IGNvbnRhaW5lcj86IEhUTUxFbGVtZW50O1xufVxuXG4vKipcbiAqIFJlbG9hZHMgdGhlIGN1cnJlbnQgZmlsZSBjYWNoZSB1c2luZyB0aGUgYERhdGF2aWV3YCBBUEkuXG4gKlxuICogQHBhcmFtIGR2IC0gVGhlIERhdGF2aWV3SW5saW5lQXBpIGluc3RhbmNlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjYWNoZSBpcyByZWxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbG9hZEN1cnJlbnRGaWxlQ2FjaGUoZHY6IERhdGF2aWV3SW5saW5lQXBpKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGFjdGl2ZVdpbmRvdy5EYXRhdmlld0FQST8uaW5kZXgucmVsb2FkKGdldEZpbGUoe1xuICAgIGFwcDogZHYuYXBwLFxuICAgIHBhdGhPckZpbGU6IGR2LmN1cnJlbnQoKS5maWxlLnBhdGhcbiAgfSkpO1xufVxuXG5jb25zdCBwYWdpbmF0aW9uQ3NzID0gYFxuLnBhZ2luYXRpb24gLnBhZ2UtbGluay5kaXNhYmxlZCB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBjb2xvcjogZ3JheTtcbn1cblxuLnBhZ2luYXRpb24gLnBhZ2UtbGluayB7XG4gIG1hcmdpbjogMCA1cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogYmx1ZTtcbn1cblxuLnBhZ2luYXRpb24gLnBhZ2UtbGluazpob3Zlcjpub3QoLmRpc2FibGVkKSB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLnBhZ2luYXRpb24gLnBhZ2UtbGluay5jdXJyZW50IHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4ucGFnaW5hdGlvbiBzZWxlY3QsXG4ucGFnaW5hdGlvbiBpbnB1dCB7XG4gIG1hcmdpbjogMCA1cHg7XG59XG5gO1xuXG4vKipcbiAqIEFycmF5IG9yIERhdGFBcnJheSB0eXBlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgQXJyYXlPckRhdGFBcnJheTxUPiA9IERhdGFBcnJheTxUPiB8IFRbXTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaW5zZXJ0Q29kZUJsb2NrfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnNlcnRDb2RlQmxvY2tQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvZGUgY29udGVudCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UgdG8gaW5zZXJ0IHRoZSBjb2RlIGJsb2NrIGludG8uXG4gICAqL1xuICByZWFkb25seSBkdjogRGF0YXZpZXdJbmxpbmVBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBsYW5ndWFnZSBpZGVudGlmaWVyIGZvciB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIHJlYWRvbmx5IGxhbmd1YWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlbmRlcklmcmFtZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVySWZyYW1lUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEge0BsaW5rIERhdGF2aWV3SW5saW5lQXBpfSBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGR2OiBEYXRhdmlld0lubGluZUFwaTtcblxuICAvKipcbiAgICogQSBoZWlnaHQgb2YgdGhlIGlmcmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYCc2MDBweCdgXG4gICAqL1xuICByZWFkb25seSBoZWlnaHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcmVsYXRpdmUgcGF0aCB0byB0aGUgcmVzb3VyY2UgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBpZnJhbWUuXG4gICAqL1xuICByZWFkb25seSByZWxhdGl2ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgd2lkdGggb2YgdGhlIGlmcmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcxMDAlJ2BcbiAgICovXG4gIHJlYWRvbmx5IHdpZHRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayByZW5kZXJQYWdpbmF0ZWRMaXN0fS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgbGlzdCBpdGVtcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJQYWdpbmF0ZWRMaXN0UGFyYW1zPFQ+IHtcbiAgLyoqXG4gICAqIEEge0BsaW5rIERhdGF2aWV3SW5saW5lQXBpfSBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGR2OiBEYXRhdmlld0lubGluZUFwaTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgaXRlbXMgcGVyIHBhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbMTAsIDIwLCA1MCwgMTAwXWBcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGl0ZW1zIHRvIHBhZ2luYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm93czogQXJyYXlPckRhdGFBcnJheTxUPjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVuZGVyUGFnaW5hdGVkfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbXMgdG8gcGFnaW5hdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUGFnaW5hdGVkUGFyYW1zPFQ+IHtcbiAgLyoqXG4gICAqIEEge0BsaW5rIERhdGF2aWV3SW5saW5lQXBpfSBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGR2OiBEYXRhdmlld0lubGluZUFwaTtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgaXRlbXMgcGVyIHBhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbMTAsIDIwLCA1MCwgMTAwXWBcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zUGVyUGFnZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvKipcbiAgICogRGlzcGxheSB0aGUgcGFnaW5hdGVkIGNvbnRlbnQuXG4gICAqXG4gICAqIEBwYXJhbSByb3dzRm9yT25lUGFnZSAtIFRoZSByb3dzIHRvIHJlbmRlci5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb250ZW50IGlzIHJlbmRlcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyZXI6IChyb3dzRm9yT25lUGFnZTogQXJyYXlPckRhdGFBcnJheTxUPikgPT4gUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogUm93cyB0byBwYWdpbmF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvd3M6IEFycmF5T3JEYXRhQXJyYXk8VD47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlbmRlclBhZ2luYXRlZFRhYmxlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdGFibGUgcm93IGRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyUGFnaW5hdGVkVGFibGVQYXJhbXM8VD4ge1xuICAvKipcbiAgICogQSB7QGxpbmsgRGF0YXZpZXdJbmxpbmVBcGl9IGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZHY6IERhdGF2aWV3SW5saW5lQXBpO1xuXG4gIC8qKlxuICAgKiBBIGhlYWRlcnMgb2YgdGhlIHRhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhZGVyczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGl0ZW1zIHBlciBwYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgWzEwLCAyMCwgNTAsIDEwMF1gXG4gICAqL1xuICByZWFkb25seSBpdGVtc1BlclBhZ2VPcHRpb25zPzogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIFJvd3Mgb2YgdGhlIHRhYmxlIHRvIHBhZ2luYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm93czogQXJyYXlPckRhdGFBcnJheTxUPjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY3JlYXRlUGFnZUxpbmt9LlxuICovXG5pbnRlcmZhY2UgQ3JlYXRlUGFnZUxpbmtQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBhZ2UgbnVtYmVyIHRoZSBsaW5rIHBvaW50cyB0by5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRQYWdlTnVtYmVyOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGxpbmsgaXMgZGlzYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRvIGRpc3BsYXkgZm9yIHRoZSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbnRlbnQgdXNpbmcgdGhlIHByb3ZpZGVkIHJlbmRlcmVyIGZ1bmN0aW9uIGluIGEgdGVtcG9yYXJ5IGNvbnRhaW5lcixcbiAqIGFuZCB0aGVuIHJldHVybnMgdGhlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gZHYgLSBUaGUgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcmVuZGVyZXIgLSBUaGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlbmRlcmluZyB0aGUgY29udGVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIEhUTUwgcGFyYWdyYXBoIGVsZW1lbnRcbiAqIHRoYXQgd2FzIHVzZWQgYXMgdGhlIHRlbXBvcmFyeSBjb250YWluZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbnRhaW5lcihkdjogRGF0YXZpZXdJbmxpbmVBcGksIHJlbmRlcmVyOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+KTogUHJvbWlzZTxIVE1MUGFyYWdyYXBoRWxlbWVudD4ge1xuICBjb25zdCBvbGRDb250YWluZXIgPSBkdi5jb250YWluZXI7XG4gIGNvbnN0IHRlbXBvcmFyeUNvbnRhaW5lciA9IGR2LnBhcmFncmFwaCgnJyk7XG4gIGR2LmNvbnRhaW5lciA9IHRlbXBvcmFyeUNvbnRhaW5lcjtcbiAgZHYuY29udGFpbmVyLmVtcHR5KCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCByZW5kZXJlcigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGR2LnBhcmFncmFwaChg4p2MJHtlcnJvclRvU3RyaW5nKGVycm9yKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBZZXMsIGl0IGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLCBidXQgSSBkb24ndCBhbiBlbGVnYW50IHdheSB0byBmaXggaXQuXG4gICAgZHYuY29udGFpbmVyID0gb2xkQ29udGFpbmVyO1xuICAgIHRlbXBvcmFyeUNvbnRhaW5lci5yZW1vdmUoKTtcbiAgfVxuXG4gIHJldHVybiB0ZW1wb3JhcnlDb250YWluZXI7XG59XG5cbi8qKlxuICogSW5zZXJ0cyBhIGNvZGUgYmxvY2sgaW50byB0aGUgc3BlY2lmaWVkIGBEYXRhdmlld2AgaW5zdGFuY2UgdXNpbmcgdGhlIHByb3ZpZGVkIGxhbmd1YWdlIGFuZCBjb2RlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgaW5zZXJ0aW5nIHRoZSBjb2RlIGJsb2NrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0Q29kZUJsb2NrKHBhcmFtczogSW5zZXJ0Q29kZUJsb2NrUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBjb2RlLFxuICAgIGR2LFxuICAgIGxhbmd1YWdlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IE1JTl9GRU5DRV9MRU5HVEggPSAzO1xuICBjb25zdCBmZW5jZVJlZ0V4cCA9IG5ldyBSZWdFeHAoYF5cXGB7JHtTdHJpbmcoTUlOX0ZFTkNFX0xFTkdUSCl9LH1gLCAnZ20nKTtcbiAgY29uc3QgZmVuY2VNYXRjaGVzID0gY29kZS5tYXRjaEFsbChmZW5jZVJlZ0V4cCk7XG4gIGNvbnN0IGZlbmNlTGVuZ3RocyA9IFsuLi5mZW5jZU1hdGNoZXNdLm1hcCgoZmVuY2VNYXRjaCkgPT4gZmVuY2VNYXRjaFswXS5sZW5ndGgpO1xuICBjb25zdCBtYXhGZW5jZUxlbmd0aCA9IE1hdGgubWF4KDAsIC4uLmZlbmNlTGVuZ3Rocyk7XG4gIGNvbnN0IHJlc3VsdEZlbmNlTGVuZ3RoID0gTWF0aC5tYXgoTUlOX0ZFTkNFX0xFTkdUSCwgbWF4RmVuY2VMZW5ndGggKyAxKTtcbiAgY29uc3QgcmVzdWx0RmVuY2UgPSAnYCcucmVwZWF0KHJlc3VsdEZlbmNlTGVuZ3RoKTtcblxuICBkdi5wYXJhZ3JhcGgoYCR7cmVzdWx0RmVuY2V9JHtsYW5ndWFnZX1cbiR7Y29kZX1cbiR7cmVzdWx0RmVuY2V9YCk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBpZnJhbWUgaW4gdGhlIGBEYXRhdmlld2AgY29udGFpbmVyIHdpdGggdGhlIHNwZWNpZmllZCByZWxhdGl2ZSBwYXRoLCB3aWR0aCwgYW5kIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlbmRlcmluZyB0aGUgaWZyYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVySWZyYW1lKHBhcmFtczogUmVuZGVySWZyYW1lUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBkdixcbiAgICBoZWlnaHQgPSAnNjAwcHgnLFxuICAgIHJlbGF0aXZlUGF0aE9yRmlsZSxcbiAgICB3aWR0aCA9ICcxMDAlJ1xuICB9ID0gcGFyYW1zO1xuICBkdi5lbCgnaWZyYW1lJywgJycsIHtcbiAgICBhdHRyOiB7XG4gICAgICBoZWlnaHQsXG4gICAgICBzcmM6IHJlbGF0aXZlUGF0aFRvUmVzb3VyY2VVcmwoe1xuICAgICAgICBhcHA6IGR2LmFwcCxcbiAgICAgICAgbm90ZVBhdGg6IGR2LmN1cnJlbnQoKS5maWxlLnBhdGgsXG4gICAgICAgIHJlbGF0aXZlUGF0aDogZ2V0UGF0aChkdi5hcHAsIHJlbGF0aXZlUGF0aE9yRmlsZSlcbiAgICAgIH0pLFxuICAgICAgd2lkdGhcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBwYWdpbmF0ZWQgbGlzdCB1c2luZyB0aGUgcHJvdmlkZWQgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgaXRlbXMgaW4gdGhlIGxpc3QuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIHBhZ2luYXRlZCBsaXN0LlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbGlzdCBpcyByZW5kZXJlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclBhZ2luYXRlZExpc3Q8VD4ocGFyYW1zOiBSZW5kZXJQYWdpbmF0ZWRMaXN0UGFyYW1zPFQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBkdixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBFeHRyYWN0aW5nIG1hZ2ljIG51bWJlciBhcyBhIGNvbnN0YW50IHdvdWxkIGJlIHJlcGV0aXRpdmUsIGFzIHRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBhbmQgaXRzIG5hbWUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5LlxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBbMTAsIDIwLCA1MCwgMTAwXSxcbiAgICByb3dzXG4gIH0gPSBwYXJhbXM7XG4gIGF3YWl0IHJlbmRlclBhZ2luYXRlZCh7XG4gICAgZHYsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9ucyxcbiAgICByZW5kZXJlcjogYXN5bmMgKHJvd3NGb3JPbmVQYWdlOiBBcnJheU9yRGF0YUFycmF5PFQ+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBhd2FpdCBkdi5saXN0KHJvd3NGb3JPbmVQYWdlKTtcbiAgICB9LFxuICAgIHJvd3NcbiAgfSk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHBhZ2luYXRlZCB0YWJsZSB1c2luZyB0aGUgcHJvdmlkZWQgRGF0YXZpZXdJbmxpbmVBcGkgaW5zdGFuY2UuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgaXRlbXMgaW4gdGhlIHRhYmxlIHJvd3MuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIHBhZ2luYXRlZCB0YWJsZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRhYmxlIGlzIHJlbmRlcmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyUGFnaW5hdGVkVGFibGU8VCBleHRlbmRzIHVua25vd25bXT4ocGFyYW1zOiBSZW5kZXJQYWdpbmF0ZWRUYWJsZVBhcmFtczxUPik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7XG4gICAgZHYsXG4gICAgaGVhZGVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBFeHRyYWN0aW5nIG1hZ2ljIG51bWJlciBhcyBhIGNvbnN0YW50IHdvdWxkIGJlIHJlcGV0aXRpdmUsIGFzIHRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBhbmQgaXRzIG5hbWUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5LlxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBbMTAsIDIwLCA1MCwgMTAwXSxcbiAgICByb3dzXG4gIH0gPSBwYXJhbXM7XG4gIGF3YWl0IHJlbmRlclBhZ2luYXRlZCh7XG4gICAgZHYsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9ucyxcbiAgICByZW5kZXJlcjogYXN5bmMgKHJvd3NGb3JPbmVQYWdlOiBBcnJheU9yRGF0YUFycmF5PFQ+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBhd2FpdCBkdi50YWJsZShoZWFkZXJzLCByb3dzRm9yT25lUGFnZSk7XG4gICAgfSxcbiAgICByb3dzXG4gIH0pO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byByZW5kZXIgcGFnaW5hdGVkIGNvbnRlbnQgdXNpbmcgdGhlIHNwZWNpZmllZCByZW5kZXJlci5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBpdGVtcyB0byBwYWdpbmF0ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlbmRlcmluZyB0aGUgcGFnaW5hdGVkIGNvbnRlbnQuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb250ZW50IGlzIHJlbmRlcmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZW5kZXJQYWdpbmF0ZWQ8VD4ocGFyYW1zOiBSZW5kZXJQYWdpbmF0ZWRQYXJhbXM8VD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgU0VDT05EX1BBR0VfTlVNQkVSID0gMjtcbiAgY29uc3QgTU9SRV9QQUdFX05VTUJFUiA9IDM7XG4gIGNvbnN0IHtcbiAgICBkdixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBFeHRyYWN0aW5nIG1hZ2ljIG51bWJlciBhcyBhIGNvbnN0YW50IHdvdWxkIGJlIHJlcGV0aXRpdmUsIGFzIHRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBhbmQgaXRzIG5hbWUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5LlxuICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnMgPSBbMTAsIDIwLCA1MCwgMTAwXSxcbiAgICByb3dzXG4gIH0gPSBwYXJhbXM7XG4gIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgIGR2LnBhcmFncmFwaCgnTm8gaXRlbXMgZm91bmQnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY29udGFpbmVyID0gZHYuY29udGFpbmVyO1xuICBsZXQgaXRlbXNQZXJQYWdlID0gZW5zdXJlTm9uTnVsbGFibGUoaXRlbXNQZXJQYWdlT3B0aW9uc1swXSwgJ0l0ZW1zIHBlciBwYWdlIG9wdGlvbnMgYXJlIGVtcHR5Jyk7XG4gIGxldCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKHJvd3MubGVuZ3RoIC8gaXRlbXNQZXJQYWdlKTtcbiAgYXdhaXQgcmVuZGVyUGFnZSgxKTtcblxuICBmdW5jdGlvbiBjcmVhdGVQYWdpbmF0aW9uQ29udHJvbHMocGFnZU51bWJlcjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcGFnaW5hdGlvbkRpdiA9IGNvbnRhaW5lci5jcmVhdGVEaXYoeyBjbHM6ICdwYWdpbmF0aW9uJyB9KTtcbiAgICBjb25zdCBwYWdpbmF0aW9uUm93MURpdiA9IHBhZ2luYXRpb25EaXYuY3JlYXRlRGl2KCk7XG5cbiAgICBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiAxLCBkaXNhYmxlZDogcGFnZU51bWJlciA9PT0gMSwgdGV4dDogJ0ZpcnN0JyB9KTtcbiAgICBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiBwYWdlTnVtYmVyIC0gMSwgZGlzYWJsZWQ6IHBhZ2VOdW1iZXIgPT09IDEsIHRleHQ6ICdQcmV2JyB9KTtcblxuICAgIGlmIChwYWdlTnVtYmVyID4gTU9SRV9QQUdFX05VTUJFUikge1xuICAgICAgcGFnaW5hdGlvblJvdzFEaXYuY3JlYXRlU3Bhbih7IHRleHQ6ICcuLi4nIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGluZGV4ID0gTWF0aC5tYXgoMSwgcGFnZU51bWJlciAtIFNFQ09ORF9QQUdFX05VTUJFUik7IGluZGV4IDw9IE1hdGgubWluKHRvdGFsUGFnZXMsIHBhZ2VOdW1iZXIgKyBTRUNPTkRfUEFHRV9OVU1CRVIpOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBwYWdlTGluayA9IGNyZWF0ZVBhZ2VMaW5rKHsgY3VycmVudFBhZ2VOdW1iZXI6IGluZGV4LCBkaXNhYmxlZDogaW5kZXggPT09IHBhZ2VOdW1iZXIsIHRleHQ6IFN0cmluZyhpbmRleCkgfSk7XG4gICAgICBpZiAoaW5kZXggPT09IHBhZ2VOdW1iZXIpIHtcbiAgICAgICAgcGFnZUxpbmsuYWRkQ2xhc3MoJ2N1cnJlbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFnZU51bWJlciA8IHRvdGFsUGFnZXMgLSBTRUNPTkRfUEFHRV9OVU1CRVIpIHtcbiAgICAgIHBhZ2luYXRpb25Sb3cxRGl2LmNyZWF0ZVNwYW4oeyB0ZXh0OiAnLi4uJyB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiBwYWdlTnVtYmVyICsgMSwgZGlzYWJsZWQ6IHBhZ2VOdW1iZXIgPT09IHRvdGFsUGFnZXMsIHRleHQ6ICdOZXh0JyB9KTtcbiAgICBjcmVhdGVQYWdlTGluayh7IGN1cnJlbnRQYWdlTnVtYmVyOiB0b3RhbFBhZ2VzLCBkaXNhYmxlZDogcGFnZU51bWJlciA9PT0gdG90YWxQYWdlcywgdGV4dDogJ0xhc3QnIH0pO1xuXG4gICAgY29uc3QgcGFnaW5hdGlvblJvdzJEaXYgPSBwYWdpbmF0aW9uRGl2LmNyZWF0ZURpdigpO1xuXG4gICAgcGFnaW5hdGlvblJvdzJEaXYuY3JlYXRlU3Bhbih7IHRleHQ6IGAgJHt0KCgkKSA9PiAkLm9ic2lkaWFuTGliLmRhdGF2aWV3Lml0ZW1zUGVyUGFnZSl9IGAgfSk7XG5cbiAgICBjb25zdCBpdGVtc1BlclBhZ2VTZWxlY3QgPSBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVFbCgnc2VsZWN0Jyk7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgaXRlbXNQZXJQYWdlT3B0aW9ucykge1xuICAgICAgaXRlbXNQZXJQYWdlU2VsZWN0LmNyZWF0ZUVsKCdvcHRpb24nLCB7IHRleHQ6IFN0cmluZyhvcHRpb24pLCB2YWx1ZTogU3RyaW5nKG9wdGlvbikgfSk7XG4gICAgfVxuICAgIGl0ZW1zUGVyUGFnZVNlbGVjdC52YWx1ZSA9IFN0cmluZyhpdGVtc1BlclBhZ2UpO1xuICAgIGl0ZW1zUGVyUGFnZVNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2NoYW5nZScsXG4gICAgICBjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBpdGVtc1BlclBhZ2UgPSBwYXJzZUludChpdGVtc1BlclBhZ2VTZWxlY3QudmFsdWUsIDEwKTtcbiAgICAgICAgdG90YWxQYWdlcyA9IE1hdGguY2VpbChyb3dzLmxlbmd0aCAvIGl0ZW1zUGVyUGFnZSk7XG4gICAgICAgIGF3YWl0IHJlbmRlclBhZ2UoMSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVTcGFuKHsgdGV4dDogYCAke3QoKCQpID0+ICQub2JzaWRpYW5MaWIuZGF0YXZpZXcuanVtcFRvUGFnZSl9IGAgfSk7XG5cbiAgICBjb25zdCBqdW1wVG9QYWdlSW5wdXQgPSBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVFbCgnaW5wdXQnLCB7IGF0dHI6IHsgbWF4OiB0b3RhbFBhZ2VzLCBtaW46IDEgfSwgdHlwZTogJ251bWJlcicgfSk7XG4gICAganVtcFRvUGFnZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAna2V5ZG93bicsXG4gICAgICBjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCRldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBpZiAoJGV2ZW50LmtleSAhPT0gJ0VudGVyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhZ2UgPSBwYXJzZUludChqdW1wVG9QYWdlSW5wdXQudmFsdWUsIDEwKTtcbiAgICAgICAgaWYgKHBhZ2UgPj0gMSAmJiBwYWdlIDw9IHRvdGFsUGFnZXMpIHtcbiAgICAgICAgICBhd2FpdCByZW5kZXJQYWdlKHBhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBwYWdpbmF0aW9uUm93MkRpdi5jcmVhdGVTcGFuKHsgdGV4dDogdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5kYXRhdmlldy5wYWdlSGVhZGVyLCB7IHBhZ2VOdW1iZXIsIHRvdGFsSXRlbXM6IHJvd3MubGVuZ3RoLCB0b3RhbFBhZ2VzIH0pIH0pO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlUGFnZUxpbmsocGFyYW1zMjogQ3JlYXRlUGFnZUxpbmtQYXJhbXMpOiBIVE1MQW5jaG9yRWxlbWVudCB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJlbnRQYWdlTnVtYmVyLFxuICAgICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgICB0ZXh0XG4gICAgICB9ID0gcGFyYW1zMjtcbiAgICAgIGNvbnN0IGxpbmsgPSBwYWdpbmF0aW9uUm93MURpdi5jcmVhdGVFbCgnYScsIHsgY2xzOiAncGFnZS1saW5rJywgaHJlZjogYCMke1N0cmluZyhjdXJyZW50UGFnZU51bWJlcil9YCwgdGV4dCB9KTtcbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICBsaW5rLmFkZENsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItYWRkLWV2ZW50LWxpc3RlbmVyIC0tIFRoZSBoYW5kbGVyIGlzIGFzc2lnbmVkIHRvIGBvbmNsaWNrYCBzbyBpdCBzdGF5cyByZWFkYWJsZSBiYWNrIG9mZiB0aGUgZWxlbWVudCwgd2hpY2ggaXMgaG93IGl0IGlzIGludm9rZWQgaW4gdGVzdHMgYW5kIGhvdyBhIGxhdGVyIGFzc2lnbm1lbnQgY2FuIHJlcGxhY2UgaXQuXG4gICAgICAgIGxpbmsub25jbGljayA9ICgkZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1hZGQtZXZlbnQtbGlzdGVuZXIgLS0gVGhlIGhhbmRsZXIgaXMgYXNzaWduZWQgdG8gYG9uY2xpY2tgIHNvIGl0IHN0YXlzIHJlYWRhYmxlIGJhY2sgb2ZmIHRoZSBlbGVtZW50LCB3aGljaCBpcyBob3cgaXQgaXMgaW52b2tlZCBpbiB0ZXN0cyBhbmQgaG93IGEgbGF0ZXIgYXNzaWdubWVudCBjYW4gcmVwbGFjZSBpdC5cbiAgICAgICAgbGluay5vbmNsaWNrID0gY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgkZXZlbnQ6IE1vdXNlRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBhd2FpdCByZW5kZXJQYWdlKGN1cnJlbnRQYWdlTnVtYmVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGluaztcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZW5kZXJQYWdlKHBhZ2VOdW1iZXI6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnRhaW5lci5lbXB0eSgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbm1kL25vLWZvcmJpZGRlbi1lbGVtZW50cyAtLSBXZSBuZWVkIHRvIGNyZWF0ZSBhIHN0eWxlIGVsZW1lbnQgdG8gYXBwbHkgdGhlIHBhZ2luYXRpb24gQ1NTLlxuICAgIGNvbnRhaW5lci5jcmVhdGVFbCgnc3R5bGUnLCB7IHRleHQ6IHBhZ2luYXRpb25Dc3MgfSk7XG5cbiAgICBjb25zdCBzdGFydEluZGV4ID0gKHBhZ2VOdW1iZXIgLSAxKSAqIGl0ZW1zUGVyUGFnZTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBpdGVtc1BlclBhZ2U7XG4gICAgY29uc3Qgcm93c0ZvckN1cnJlbnRQYWdlID0gcm93cy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XG5cbiAgICBjb25zdCBvbGRDb250YWluZXIgPSBkdi5jb250YWluZXI7XG5cbiAgICBkdi5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBhcmFtcy5yZW5kZXJlcihyb3dzRm9yQ3VycmVudFBhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkdi5wYXJhZ3JhcGgoYOKdjCR7ZXJyb3JUb1N0cmluZyhlcnJvcil9YCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzIC0tIFllcywgaXQgaXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24sIGJ1dCBJIGRvbid0IGFuIGVsZWdhbnQgd2F5IHRvIGZpeCBpdC5cbiAgICAgIGR2LmNvbnRhaW5lciA9IG9sZENvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBjcmVhdGVQYWdpbmF0aW9uQ29udHJvbHMocGFnZU51bWJlcik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLHFCQUFxQjtBQUM5QixTQUFTLHlCQUF5QjtBQUtsQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsU0FBUztBQUNsQixTQUFTLGlDQUFpQztBQW9HMUMsZUFBc0IsdUJBQXVCLElBQXNDO0FBQ2pGLFFBQU0sYUFBYSxhQUFhLE1BQU0sT0FBTyxRQUFRO0FBQUEsSUFDbkQsS0FBSyxHQUFHO0FBQUEsSUFDUixZQUFZLEdBQUcsUUFBUSxFQUFFLEtBQUs7QUFBQSxFQUNoQyxDQUFDLENBQUM7QUFDSjtBQUVBLE1BQU0sZ0JBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxTXRCLGVBQXNCLHFCQUFxQixJQUF1QixVQUFpRTtBQUNqSSxRQUFNLGVBQWUsR0FBRztBQUN4QixRQUFNLHFCQUFxQixHQUFHLFVBQVUsRUFBRTtBQUMxQyxLQUFHLFlBQVk7QUFDZixLQUFHLFVBQVUsTUFBTTtBQUVuQixNQUFJO0FBQ0YsVUFBTSxTQUFTO0FBQUEsRUFDakIsU0FBUyxPQUFPO0FBQ2QsT0FBRyxVQUFVLFNBQUksY0FBYyxLQUFLLENBQUMsRUFBRTtBQUFBLEVBQ3pDLFVBQUU7QUFFQSxPQUFHLFlBQVk7QUFDZix1QkFBbUIsT0FBTztBQUFBLEVBQzVCO0FBRUEsU0FBTztBQUNUO0FBT08sU0FBUyxnQkFBZ0IsUUFBcUM7QUFDbkUsUUFBTTtBQUFBLElBQ0o7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
@@ -178,7 +178,7 @@ export interface UnhoverElementParams {
178
178
  type CurrentWebContents = ReturnType<Window['electron']['remote']['getCurrentWebContents']>;
179
179
  type ElectronMouseInputEvent = Extract<Parameters<CurrentWebContents['sendInputEvent']>[0], PointerCoordinates>;
180
180
  interface PointerCoordinates {
181
- x: number;
181
+ readonly x: number;
182
182
  }
183
183
  /**
184
184
  * Clicks the center of an element using **trusted** Electron pointer input.