obsidian-dev-utils 80.1.0 → 81.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 (213) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/dev/main.js +30208 -0
  3. package/dist/dev/manifest.json +9 -0
  4. package/dist/lib/cjs/async-events.cjs +9 -1
  5. package/dist/lib/cjs/async-events.d.cts +8 -0
  6. package/dist/lib/cjs/async.cjs +89 -34
  7. package/dist/lib/cjs/async.d.cts +67 -15
  8. package/dist/lib/cjs/debug.cjs +26 -9
  9. package/dist/lib/cjs/debug.d.cts +23 -5
  10. package/dist/lib/cjs/error.cjs +4 -5
  11. package/dist/lib/cjs/error.d.cts +19 -4
  12. package/dist/lib/cjs/html-element.cjs +1 -1
  13. package/dist/lib/cjs/html-element.d.cts +2 -0
  14. package/dist/lib/cjs/library.cjs +2 -2
  15. package/dist/lib/cjs/object-utils.cjs +233 -128
  16. package/dist/lib/cjs/object-utils.d.cts +19 -4
  17. package/dist/lib/cjs/obsidian/async-with-notice.cjs +9 -6
  18. package/dist/lib/cjs/obsidian/async-with-notice.d.cts +9 -0
  19. package/dist/lib/cjs/obsidian/attachment-path.cjs +45 -13
  20. package/dist/lib/cjs/obsidian/attachment-path.d.cts +38 -8
  21. package/dist/lib/cjs/obsidian/backlink.cjs +6 -6
  22. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +53 -16
  23. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +81 -9
  24. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +25 -5
  25. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +35 -1
  26. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +33 -19
  27. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.d.cts +43 -17
  28. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +33 -19
  29. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.d.cts +43 -17
  30. package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +17 -9
  31. package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +48 -8
  32. package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +24 -8
  33. package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +25 -4
  34. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +144 -65
  35. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +3 -0
  36. package/dist/lib/cjs/obsidian/dataview-link.cjs +7 -2
  37. package/dist/lib/cjs/obsidian/dataview-link.d.cts +20 -5
  38. package/dist/lib/cjs/obsidian/dataview.cjs +27 -10
  39. package/dist/lib/cjs/obsidian/dataview.d.cts +19 -4
  40. package/dist/lib/cjs/obsidian/file-change.cjs +103 -27
  41. package/dist/lib/cjs/obsidian/file-change.d.cts +50 -13
  42. package/dist/lib/cjs/obsidian/file-manager.cjs +61 -32
  43. package/dist/lib/cjs/obsidian/file-manager.d.cts +63 -13
  44. package/dist/lib/cjs/obsidian/file-system.cjs +122 -23
  45. package/dist/lib/cjs/obsidian/file-system.d.cts +168 -39
  46. package/dist/lib/cjs/obsidian/frontmatter.cjs +7 -2
  47. package/dist/lib/cjs/obsidian/link.cjs +266 -122
  48. package/dist/lib/cjs/obsidian/link.d.cts +84 -20
  49. package/dist/lib/cjs/obsidian/logger.cjs +48 -22
  50. package/dist/lib/cjs/obsidian/logger.d.cts +26 -5
  51. package/dist/lib/cjs/obsidian/loop.cjs +14 -4
  52. package/dist/lib/cjs/obsidian/loop.d.cts +5 -0
  53. package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +155 -107
  54. package/dist/lib/cjs/obsidian/markdown.cjs +40 -11
  55. package/dist/lib/cjs/obsidian/markdown.d.cts +76 -16
  56. package/dist/lib/cjs/obsidian/metadata-cache.cjs +28 -14
  57. package/dist/lib/cjs/obsidian/metadata-cache.d.cts +76 -16
  58. package/dist/lib/cjs/obsidian/path-settings.cjs +5 -2
  59. package/dist/lib/cjs/obsidian/plugin/plugin-event-source.cjs +5 -1
  60. package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +4 -0
  61. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +15 -7
  62. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +39 -8
  63. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +3 -2
  64. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +4 -4
  65. package/dist/lib/cjs/obsidian/queue.cjs +9 -7
  66. package/dist/lib/cjs/obsidian/resource-url.cjs +7 -2
  67. package/dist/lib/cjs/obsidian/resource-url.d.cts +19 -4
  68. package/dist/lib/cjs/obsidian/status-bar-item-registrar.cjs +4 -2
  69. package/dist/lib/cjs/obsidian/status-bar-item-registrar.d.cts +6 -2
  70. package/dist/lib/cjs/obsidian/vault-delete.cjs +19 -15
  71. package/dist/lib/cjs/obsidian/vault-delete.d.cts +11 -6
  72. package/dist/lib/cjs/obsidian/vault.cjs +116 -59
  73. package/dist/lib/cjs/obsidian/vault.d.cts +178 -41
  74. package/dist/lib/cjs/path.cjs +12 -5
  75. package/dist/lib/cjs/path.d.cts +15 -3
  76. package/dist/lib/cjs/reg-exp.cjs +101 -78
  77. package/dist/lib/cjs/script-utils/build.cjs +9 -5
  78. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +34 -14
  79. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +20 -5
  80. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.cts +23 -5
  81. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +11 -4
  82. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.cjs +6 -2
  83. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +31 -12
  84. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.cts +19 -4
  85. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +7 -7
  86. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +12 -3
  87. package/dist/lib/cjs/script-utils/cli-utils.cjs +6 -2
  88. package/dist/lib/cjs/script-utils/exec.cjs +47 -12
  89. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -3
  90. package/dist/lib/cjs/script-utils/json.cjs +9 -5
  91. package/dist/lib/cjs/script-utils/json.d.cts +38 -8
  92. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +8 -3
  93. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +27 -7
  94. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +7 -3
  95. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +8 -3
  96. package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -3
  97. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +3 -3
  98. package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +72 -30
  99. package/dist/lib/cjs/script-utils/npm-publish.cjs +2 -2
  100. package/dist/lib/cjs/script-utils/npm.cjs +18 -9
  101. package/dist/lib/cjs/script-utils/root.cjs +20 -5
  102. package/dist/lib/cjs/script-utils/root.d.cts +45 -9
  103. package/dist/lib/cjs/script-utils/validate-declarations.cjs +4 -3
  104. package/dist/lib/cjs/script-utils/version.cjs +36 -19
  105. package/dist/lib/cjs/strict-proxy.cjs +10 -1
  106. package/dist/lib/cjs/string.cjs +63 -22
  107. package/dist/lib/cjs/string.d.cts +188 -40
  108. package/dist/lib/esm/async-events.d.mts +8 -0
  109. package/dist/lib/esm/async-events.mjs +9 -1
  110. package/dist/lib/esm/async.d.mts +67 -15
  111. package/dist/lib/esm/async.mjs +89 -34
  112. package/dist/lib/esm/debug.d.mts +23 -5
  113. package/dist/lib/esm/debug.mjs +26 -9
  114. package/dist/lib/esm/error.d.mts +19 -4
  115. package/dist/lib/esm/error.mjs +4 -5
  116. package/dist/lib/esm/html-element.d.mts +2 -0
  117. package/dist/lib/esm/html-element.mjs +1 -1
  118. package/dist/lib/esm/library.mjs +2 -2
  119. package/dist/lib/esm/object-utils.d.mts +19 -4
  120. package/dist/lib/esm/object-utils.mjs +233 -128
  121. package/dist/lib/esm/obsidian/async-with-notice.d.mts +9 -0
  122. package/dist/lib/esm/obsidian/async-with-notice.mjs +9 -6
  123. package/dist/lib/esm/obsidian/attachment-path.d.mts +38 -8
  124. package/dist/lib/esm/obsidian/attachment-path.mjs +45 -13
  125. package/dist/lib/esm/obsidian/backlink.mjs +6 -6
  126. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +81 -9
  127. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +53 -16
  128. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +35 -1
  129. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +25 -5
  130. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.d.mts +43 -17
  131. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +33 -19
  132. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.d.mts +43 -17
  133. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +33 -19
  134. package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +48 -8
  135. package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +17 -9
  136. package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +25 -4
  137. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +24 -8
  138. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +3 -0
  139. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +145 -69
  140. package/dist/lib/esm/obsidian/dataview-link.d.mts +20 -5
  141. package/dist/lib/esm/obsidian/dataview-link.mjs +7 -2
  142. package/dist/lib/esm/obsidian/dataview.d.mts +19 -4
  143. package/dist/lib/esm/obsidian/dataview.mjs +27 -10
  144. package/dist/lib/esm/obsidian/file-change.d.mts +50 -13
  145. package/dist/lib/esm/obsidian/file-change.mjs +104 -27
  146. package/dist/lib/esm/obsidian/file-manager.d.mts +63 -13
  147. package/dist/lib/esm/obsidian/file-manager.mjs +65 -33
  148. package/dist/lib/esm/obsidian/file-system.d.mts +168 -39
  149. package/dist/lib/esm/obsidian/file-system.mjs +122 -23
  150. package/dist/lib/esm/obsidian/frontmatter.mjs +7 -2
  151. package/dist/lib/esm/obsidian/link.d.mts +84 -20
  152. package/dist/lib/esm/obsidian/link.mjs +266 -122
  153. package/dist/lib/esm/obsidian/logger.d.mts +26 -5
  154. package/dist/lib/esm/obsidian/logger.mjs +48 -22
  155. package/dist/lib/esm/obsidian/loop.d.mts +5 -0
  156. package/dist/lib/esm/obsidian/loop.mjs +14 -4
  157. package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +155 -107
  158. package/dist/lib/esm/obsidian/markdown.d.mts +76 -16
  159. package/dist/lib/esm/obsidian/markdown.mjs +40 -11
  160. package/dist/lib/esm/obsidian/metadata-cache.d.mts +76 -16
  161. package/dist/lib/esm/obsidian/metadata-cache.mjs +28 -14
  162. package/dist/lib/esm/obsidian/path-settings.mjs +5 -2
  163. package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +4 -0
  164. package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +5 -1
  165. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +39 -8
  166. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +15 -7
  167. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +4 -4
  168. package/dist/lib/esm/obsidian/plugin/plugin.mjs +5 -7
  169. package/dist/lib/esm/obsidian/queue.mjs +9 -7
  170. package/dist/lib/esm/obsidian/resource-url.d.mts +19 -4
  171. package/dist/lib/esm/obsidian/resource-url.mjs +7 -2
  172. package/dist/lib/esm/obsidian/status-bar-item-registrar.d.mts +6 -2
  173. package/dist/lib/esm/obsidian/status-bar-item-registrar.mjs +4 -2
  174. package/dist/lib/esm/obsidian/vault-delete.d.mts +11 -6
  175. package/dist/lib/esm/obsidian/vault-delete.mjs +19 -15
  176. package/dist/lib/esm/obsidian/vault.d.mts +178 -41
  177. package/dist/lib/esm/obsidian/vault.mjs +116 -59
  178. package/dist/lib/esm/path.d.mts +15 -3
  179. package/dist/lib/esm/path.mjs +12 -5
  180. package/dist/lib/esm/reg-exp.mjs +101 -78
  181. package/dist/lib/esm/script-utils/build.mjs +9 -5
  182. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +34 -14
  183. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.d.mts +23 -5
  184. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +20 -5
  185. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +11 -4
  186. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +6 -2
  187. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.d.mts +19 -4
  188. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +31 -12
  189. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +7 -7
  190. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +12 -3
  191. package/dist/lib/esm/script-utils/cli-utils.mjs +6 -2
  192. package/dist/lib/esm/script-utils/exec.mjs +47 -12
  193. package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -3
  194. package/dist/lib/esm/script-utils/json.d.mts +38 -8
  195. package/dist/lib/esm/script-utils/json.mjs +9 -5
  196. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +8 -3
  197. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +27 -7
  198. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +7 -3
  199. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +8 -3
  200. package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -3
  201. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +3 -3
  202. package/dist/lib/esm/script-utils/linters/over-exposure.mjs +72 -30
  203. package/dist/lib/esm/script-utils/npm-publish.mjs +2 -2
  204. package/dist/lib/esm/script-utils/npm.mjs +18 -9
  205. package/dist/lib/esm/script-utils/root.d.mts +45 -9
  206. package/dist/lib/esm/script-utils/root.mjs +20 -5
  207. package/dist/lib/esm/script-utils/validate-declarations.mjs +4 -3
  208. package/dist/lib/esm/script-utils/version.mjs +36 -19
  209. package/dist/lib/esm/strict-proxy.mjs +10 -1
  210. package/dist/lib/esm/string.d.mts +188 -40
  211. package/dist/lib/esm/string.mjs +63 -22
  212. package/dist/styles.css +5 -1
  213. package/package.json +9 -9
@@ -219,8 +219,22 @@ class AbstractFileCommandHandler extends import_global_command_handler.GlobalCom
219
219
  async onRegistered(context) {
220
220
  await super.onRegistered(context);
221
221
  this._activeFileProvider = context.activeFileProvider;
222
- context.menuEventRegistrar.registerFileMenuEventHandler(this.handleAbstractFileMenu.bind(this));
223
- context.menuEventRegistrar.registerFilesMenuEventHandler(this.handleAbstractFilesMenu.bind(this));
222
+ context.menuEventRegistrar.registerFileMenuEventHandler((menu, abstractFile, source, leaf) => {
223
+ this.handleAbstractFileMenu({
224
+ abstractFile,
225
+ leaf,
226
+ menu,
227
+ source
228
+ });
229
+ });
230
+ context.menuEventRegistrar.registerFilesMenuEventHandler((menu, abstractFiles, source, leaf) => {
231
+ this.handleAbstractFilesMenu({
232
+ abstractFiles,
233
+ leaf,
234
+ menu,
235
+ source
236
+ });
237
+ });
224
238
  }
225
239
  /**
226
240
  * Checks whether the command can execute from the command palette.
@@ -300,25 +314,28 @@ class AbstractFileCommandHandler extends import_global_command_handler.GlobalCom
300
314
  /**
301
315
  * Checks whether the command should appear in the single-file context menu.
302
316
  *
303
- * @param _abstractFile - The file or folder.
304
- * @param _source - The source of the event.
305
- * @param _leaf - The workspace leaf, if available.
317
+ * @param params - The parameters for the single-file menu check.
306
318
  * @returns Whether to add to the file menu.
307
319
  */
308
- shouldAddToAbstractFileMenu(_abstractFile, _source, _leaf) {
320
+ shouldAddToAbstractFileMenu(params) {
321
+ const { abstractFile: _abstractFile, leaf: _leaf, source: _source } = params;
309
322
  return false;
310
323
  }
311
324
  /**
312
325
  * Checks whether the command should appear in the multi-file context menu.
313
326
  * Default implementation checks each file individually.
314
327
  *
315
- * @param abstractFiles - The files or folders.
316
- * @param source - The source of the event.
317
- * @param leaf - The workspace leaf, if available.
328
+ * @param params - The parameters for the multi-file menu check.
318
329
  * @returns Whether to add to the files menu.
319
330
  */
320
- shouldAddToAbstractFilesMenu(abstractFiles, source, leaf) {
321
- return abstractFiles.every((f) => this.shouldAddToAbstractFileMenu(f, source, leaf));
331
+ shouldAddToAbstractFilesMenu(params) {
332
+ return params.abstractFiles.every(
333
+ (f) => this.shouldAddToAbstractFileMenu({
334
+ abstractFile: f,
335
+ leaf: params.leaf,
336
+ source: params.source
337
+ })
338
+ );
322
339
  }
323
340
  /**
324
341
  * Checks whether the command should appear in the command palette.
@@ -328,8 +345,18 @@ class AbstractFileCommandHandler extends import_global_command_handler.GlobalCom
328
345
  shouldAddToCommandPalette() {
329
346
  return true;
330
347
  }
331
- handleAbstractFileMenu(menu, abstractFile, source, leaf) {
332
- if (!this.shouldAddToAbstractFileMenu(abstractFile, source, leaf)) {
348
+ handleAbstractFileMenu(params) {
349
+ const {
350
+ abstractFile,
351
+ leaf,
352
+ menu,
353
+ source
354
+ } = params;
355
+ if (!this.shouldAddToAbstractFileMenu({
356
+ abstractFile,
357
+ leaf,
358
+ source
359
+ })) {
333
360
  return;
334
361
  }
335
362
  if (!this.canExecuteAbstractFile(abstractFile)) {
@@ -346,8 +373,18 @@ class AbstractFileCommandHandler extends import_global_command_handler.GlobalCom
346
373
  item.setTitle(this.fileMenuItemName ?? this.name).setIcon(this.icon).setSection(section).onClick((0, import_async.convertAsyncToSync)(async () => this.executeAbstractFile(abstractFile)));
347
374
  });
348
375
  }
349
- handleAbstractFilesMenu(menu, abstractFiles, source, leaf) {
350
- if (!this.shouldAddToAbstractFilesMenu(abstractFiles, source, leaf)) {
376
+ handleAbstractFilesMenu(params) {
377
+ const {
378
+ abstractFiles,
379
+ leaf,
380
+ menu,
381
+ source
382
+ } = params;
383
+ if (!this.shouldAddToAbstractFilesMenu({
384
+ abstractFiles,
385
+ leaf,
386
+ source
387
+ })) {
351
388
  return;
352
389
  }
353
390
  if (!this.canExecuteAbstractFiles(abstractFiles)) {
@@ -369,4 +406,4 @@ class AbstractFileCommandHandler extends import_global_command_handler.GlobalCom
369
406
  0 && (module.exports = {
370
407
  AbstractFileCommandHandler
371
408
  });
372
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGFic3RyYWN0IGZpbGUgY29tbWFuZHMgd2l0aCBmaWxlL2ZpbGVzIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBJY29uTmFtZSxcbiAgTWVudSxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IEFjdGl2ZUZpbGVQcm92aWRlciB9IGZyb20gJy4uL2FjdGl2ZS1maWxlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyxcbiAgQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0XG59IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHtcbiAgY2hhaW4sXG4gIGNvbnZlcnRBc3luY1RvU3luY1xufSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IEdsb2JhbENvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi9nbG9iYWwtY29tbWFuZC1oYW5kbGVyLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBhbiBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIGV4dGVuZHMgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGljb24gdG8gdXNlIGluIHRoZSBzaW5nbGUtZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlc01lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlc01lbnVTZWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgdGhlIGNvbW1hbmQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29tbWFuZCBoYW5kbGVyIGZvciBhYnN0cmFjdCBmaWxlIGNvbW1hbmRzLlxuICpcbiAqIEhhbmRsZXMgYm90aCBzaW5nbGUtZmlsZSBhbmQgbXVsdGktZmlsZSBjb250ZXh0IG1lbnVzLlxuICogU3ViY2xhc3NlcyBvdmVycmlkZSB7QGxpbmsgY2FuRXhlY3V0ZUFic3RyYWN0RmlsZX0gYW5kIHtAbGluayBleGVjdXRlQWJzdHJhY3RGaWxlfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyIGV4dGVuZHMgR2xvYmFsQ29tbWFuZEhhbmRsZXIge1xuICAvKipcbiAgICogR2V0IHRoZSBhY3RpdmUgZmlsZSBwcm92aWRlci5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFjdGl2ZSBmaWxlIHByb3ZpZGVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBhY3RpdmVGaWxlUHJvdmlkZXIoKTogQWN0aXZlRmlsZVByb3ZpZGVyIHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fYWN0aXZlRmlsZVByb3ZpZGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBzaW5nbGUtZmlsZSBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byB1c2UgdGhlIGNvbW1hbmQgbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZU1lbnVJdGVtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWxlTWVudUl0ZW1OYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBzaW5nbGUtZmlsZSBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2VjdGlvbiBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byB1c2UgdGhlIHBsdWdpbiBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlTWVudVNlY3Rpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZU1lbnVTZWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGljb24gdG8gdXNlIGluIHRoZSBzaW5nbGUtZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgdW5kZWZpbmVkYCBmb3Igbm8gaWNvbi5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZU1lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVNZW51U3VibWVudUljb247XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byBmYWxsIGJhY2sgdG8gc2luZ2xlLWZpbGUgaXRlbSBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlc01lbnVJdGVtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWxlc01lbnVJdGVtTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2VjdGlvbiBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byBmYWxsIGJhY2sgdG8gc2luZ2xlLWZpbGUgc2VjdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZXNNZW51U2VjdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWxlc01lbnVTZWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGljb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGljb24sIG9yIGB1bmRlZmluZWRgIHRvIGZhbGwgYmFjayB0byBzaW5nbGUtZmlsZSBzdWJtZW51IGljb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVzTWVudVN1Ym1lbnVJY29uKCk6IEljb25OYW1lIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51U3VibWVudUljb247XG4gIH1cblxuICBwcml2YXRlIF9hY3RpdmVGaWxlUHJvdmlkZXI/OiBBY3RpdmVGaWxlUHJvdmlkZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZU1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlc01lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWJzdHJhY3QgZmlsZSBjb21tYW5kIGhhbmRsZXIuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgICB0aGlzLl9maWxlTWVudUl0ZW1OYW1lID0gcGFyYW1zLmZpbGVNZW51SXRlbU5hbWU7XG4gICAgdGhpcy5fZmlsZU1lbnVTZWN0aW9uID0gcGFyYW1zLmZpbGVNZW51U2VjdGlvbjtcbiAgICB0aGlzLl9maWxlTWVudVN1Ym1lbnVJY29uID0gcGFyYW1zLmZpbGVNZW51U3VibWVudUljb247XG4gICAgdGhpcy5fZmlsZXNNZW51SXRlbU5hbWUgPSBwYXJhbXMuZmlsZXNNZW51SXRlbU5hbWU7XG4gICAgdGhpcy5fZmlsZXNNZW51U2VjdGlvbiA9IHBhcmFtcy5maWxlc01lbnVTZWN0aW9uO1xuICAgIHRoaXMuX2ZpbGVzTWVudVN1Ym1lbnVJY29uID0gcGFyYW1zLmZpbGVzTWVudVN1Ym1lbnVJY29uO1xuICAgIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPSBwYXJhbXMuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgZmlsZS1tZW51IGFuZCBmaWxlcy1tZW51IGV2ZW50IGhhbmRsZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSByZWdpc3RyYXRpb24gY29udGV4dC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvblJlZ2lzdGVyZWQoY29udGV4dDogQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIub25SZWdpc3RlcmVkKGNvbnRleHQpO1xuICAgIHRoaXMuX2FjdGl2ZUZpbGVQcm92aWRlciA9IGNvbnRleHQuYWN0aXZlRmlsZVByb3ZpZGVyO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRmlsZU1lbnVFdmVudEhhbmRsZXIodGhpcy5oYW5kbGVBYnN0cmFjdEZpbGVNZW51LmJpbmQodGhpcykpO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKHRoaXMuaGFuZGxlQWJzdHJhY3RGaWxlc01lbnUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZnJvbSB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKiBVc2VzIHRoZSBhY3RpdmUgZmlsZSBhcyB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbkV4ZWN1dGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNob3VsZEFkZFRvQ29tbWFuZFBhbGV0dGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUZpbGUgPSB0aGlzLmdldEFjdGl2ZUZpbGUoKTtcbiAgICByZXR1cm4gISFhY3RpdmVGaWxlICYmIHRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShhY3RpdmVGaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZSBmb3IgYSBzaW5nbGUgYWJzdHJhY3QgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIF9hYnN0cmFjdEZpbGUgLSBUaGUgZmlsZSBvciBmb2xkZXIuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShfYWJzdHJhY3RGaWxlOiBUQWJzdHJhY3RGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIG11bHRpcGxlIGFic3RyYWN0IGZpbGVzLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGNoZWNrcyBlYWNoIGZpbGUgaW5kaXZpZHVhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXM6IFRBYnN0cmFjdEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhYnN0cmFjdEZpbGVzLmxlbmd0aCA+IDAgJiYgYWJzdHJhY3RGaWxlcy5ldmVyeSgoZikgPT4gdGhpcy5jYW5FeGVjdXRlQWJzdHJhY3RGaWxlKGYpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCBmcm9tIHRoZSBjb21tYW5kIHBhbGV0dGUgdXNpbmcgdGhlIGFjdGl2ZSBmaWxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBgUHJvbWlzYWJsZTx2b2lkPmAgdGhhdCByZXNvbHZlcyB3aGVuIGNvbW1hbmQgaGFkIGJlZW4gZXhlY3V0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZXhlY3V0ZSgpOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBhY3RpdmVGaWxlID0gdGhpcy5nZXRBY3RpdmVGaWxlKCk7XG4gICAgaWYgKGFjdGl2ZUZpbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGVBYnN0cmFjdEZpbGUoYWN0aXZlRmlsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciBhIHNpbmdsZSBhYnN0cmFjdCBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGV4ZWN1dGVBYnN0cmFjdEZpbGUoYWJzdHJhY3RGaWxlOiBUQWJzdHJhY3RGaWxlKTogUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZm9yIG11bHRpcGxlIGFic3RyYWN0IGZpbGVzLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGV4ZWN1dGVzIHNlcXVlbnRpYWxseS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZXMgLSBUaGUgZmlsZXMgb3IgZm9sZGVycy5cbiAgICogQHJldHVybnMgYFByb21pc2FibGU8dm9pZD5gIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgYWJzdHJhY3QgZmlsZXMgaGF2ZSBiZWVuIGV4ZWN1dGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXM6IFRBYnN0cmFjdEZpbGVbXSk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIGxldCBwcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGFic3RyYWN0RmlsZXMpIHtcbiAgICAgIHByb21pc2UgPSBjaGFpbihwcm9taXNlLCAoKSA9PiB0aGlzLmV4ZWN1dGVBYnN0cmFjdEZpbGUoZmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYWN0aXZlIGZpbGUsIGlmIGFueSwgdG8gdXNlIGFzIHRoZSB0YXJnZXQgd2hlbiBleGVjdXRpbmcgZnJvbSB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgYWN0aXZlIGZpbGUgb3IgYG51bGxgIGlmIG5vbmUgaXMgYWN0aXZlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEFjdGl2ZUZpbGUoKTogbnVsbCB8IFRBYnN0cmFjdEZpbGUge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZpbGVQcm92aWRlci5nZXRBY3RpdmVGaWxlKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgc2luZ2xlLWZpbGUgY29udGV4dCBtZW51LlxuICAgKlxuICAgKiBAcGFyYW0gX2Fic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIF9sZWFmIC0gVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51KF9hYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUsIF9zb3VyY2U6IHN0cmluZywgX2xlYWY/OiBXb3Jrc3BhY2VMZWFmKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIG11bHRpLWZpbGUgY29udGV4dCBtZW51LlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGNoZWNrcyBlYWNoIGZpbGUgaW5kaXZpZHVhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBsZWFmIC0gVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlcyBtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvQWJzdHJhY3RGaWxlc01lbnUoYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdLCBzb3VyY2U6IHN0cmluZywgbGVhZj86IFdvcmtzcGFjZUxlYWYpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlcy5ldmVyeSgoZikgPT4gdGhpcy5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUoZiwgc291cmNlLCBsZWFmKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvQ29tbWFuZFBhbGV0dGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFic3RyYWN0RmlsZU1lbnUobWVudTogTWVudSwgYWJzdHJhY3RGaWxlOiBUQWJzdHJhY3RGaWxlLCBzb3VyY2U6IHN0cmluZywgbGVhZj86IFdvcmtzcGFjZUxlYWYpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51KGFic3RyYWN0RmlsZSwgc291cmNlLCBsZWFmKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5FeGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5maWxlTWVudVNlY3Rpb24gPz8gdGhpcy5wbHVnaW5OYW1lO1xuICAgIGlmICh0aGlzLnNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKSkge1xuICAgICAgbWVudS5zZXRTZWN0aW9uU3VibWVudShzZWN0aW9uLCB7XG4gICAgICAgIGljb246IHRoaXMuZmlsZU1lbnVTdWJtZW51SWNvbiA/PyAnJyxcbiAgICAgICAgdGl0bGU6IHNlY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgaXRlbVxuICAgICAgICAuc2V0VGl0bGUodGhpcy5maWxlTWVudUl0ZW1OYW1lID8/IHRoaXMubmFtZSlcbiAgICAgICAgLnNldEljb24odGhpcy5pY29uKVxuICAgICAgICAuc2V0U2VjdGlvbihzZWN0aW9uKVxuICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWJzdHJhY3RGaWxlc01lbnUobWVudTogTWVudSwgYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdLCBzb3VyY2U6IHN0cmluZywgbGVhZj86IFdvcmtzcGFjZUxlYWYpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudShhYnN0cmFjdEZpbGVzLCBzb3VyY2UsIGxlYWYpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNhbkV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZmlsZXNNZW51U2VjdGlvbiA/PyB0aGlzLmZpbGVNZW51U2VjdGlvbiA/PyB0aGlzLnBsdWdpbk5hbWU7XG4gICAgaWYgKHRoaXMuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSgpKSB7XG4gICAgICBtZW51LnNldFNlY3Rpb25TdWJtZW51KHNlY3Rpb24sIHtcbiAgICAgICAgaWNvbjogdGhpcy5maWxlc01lbnVTdWJtZW51SWNvbiA/PyB0aGlzLmZpbGVNZW51U3VibWVudUljb24gPz8gJycsXG4gICAgICAgIHRpdGxlOiBzZWN0aW9uXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtZW51LmFkZEl0ZW0oKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW1cbiAgICAgICAgLnNldFRpdGxlKHRoaXMuZmlsZXNNZW51SXRlbU5hbWUgPz8gdGhpcy5maWxlTWVudUl0ZW1OYW1lID8/IHRoaXMubmFtZSlcbiAgICAgICAgLnNldEljb24odGhpcy5pY29uKVxuICAgICAgICAuc2V0U2VjdGlvbihzZWN0aW9uKVxuICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzKSkpO1xuICAgIH0pO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFvQkEsbUJBR087QUFDUCx5QkFBa0M7QUFDbEMsb0NBQXFDO0FBZ0Q5QixNQUFlLG1DQUFtQyxtREFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNNUUsSUFBYyxxQkFBeUM7QUFDckQsZUFBTyxzQ0FBa0IsS0FBSyxtQkFBbUI7QUFBQSxFQUNuRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsbUJB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
409
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGFic3RyYWN0IGZpbGUgY29tbWFuZHMgd2l0aCBmaWxlL2ZpbGVzIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBJY29uTmFtZSxcbiAgTWVudSxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IEFjdGl2ZUZpbGVQcm92aWRlciB9IGZyb20gJy4uL2FjdGl2ZS1maWxlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyxcbiAgQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0XG59IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHtcbiAgY2hhaW4sXG4gIGNvbnZlcnRBc3luY1RvU3luY1xufSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IEdsb2JhbENvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi9nbG9iYWwtY29tbWFuZC1oYW5kbGVyLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBhbiBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIGV4dGVuZHMgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGljb24gdG8gdXNlIGluIHRoZSBzaW5nbGUtZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlc01lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlc01lbnVTZWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgdGhlIGNvbW1hbmQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyLmhhbmRsZUFic3RyYWN0RmlsZU1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVySGFuZGxlQWJzdHJhY3RGaWxlTWVudVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBvciBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3Jrc3BhY2UgbGVhZiwgaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGVhZj86IHVuZGVmaW5lZCB8IFdvcmtzcGFjZUxlYWY7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW51IHRvIGFkZCBpdGVtcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IG1lbnU6IE1lbnU7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyLmhhbmRsZUFic3RyYWN0RmlsZXNNZW51fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckhhbmRsZUFic3RyYWN0RmlsZXNNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGxlYWY/OiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVudSB0byBhZGQgaXRlbXMgdG8uXG4gICAqL1xuICByZWFkb25seSBtZW51OiBNZW51O1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlci5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyU2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSBsZWFmPzogdW5kZWZpbmVkIHwgV29ya3NwYWNlTGVhZjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXIuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGxlYWY/OiB1bmRlZmluZWQgfCBXb3Jrc3BhY2VMZWFmO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgYWJzdHJhY3QgZmlsZSBjb21tYW5kcy5cbiAqXG4gKiBIYW5kbGVzIGJvdGggc2luZ2xlLWZpbGUgYW5kIG11bHRpLWZpbGUgY29udGV4dCBtZW51cy5cbiAqIFN1YmNsYXNzZXMgb3ZlcnJpZGUge0BsaW5rIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGV9IGFuZCB7QGxpbmsgZXhlY3V0ZUFic3RyYWN0RmlsZX0uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlciBleHRlbmRzIEdsb2JhbENvbW1hbmRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIEdldCB0aGUgYWN0aXZlIGZpbGUgcHJvdmlkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhY3RpdmUgZmlsZSBwcm92aWRlci5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgYWN0aXZlRmlsZVByb3ZpZGVyKCk6IEFjdGl2ZUZpbGVQcm92aWRlciB7XG4gICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHRoaXMuX2FjdGl2ZUZpbGVQcm92aWRlcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBjb21tYW5kIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51SXRlbU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZU1lbnVJdGVtTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBwbHVnaW4gbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZU1lbnVTZWN0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiwgb3IgYHVuZGVmaW5lZGAgZm9yIG5vIGljb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWxlTWVudVN1Ym1lbnVJY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gZmFsbCBiYWNrIHRvIHNpbmdsZS1maWxlIGl0ZW0gbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZXNNZW51SXRlbU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51SXRlbU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gZmFsbCBiYWNrIHRvIHNpbmdsZS1maWxlIHNlY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVzTWVudVNlY3Rpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgdW5kZWZpbmVkYCB0byBmYWxsIGJhY2sgdG8gc2luZ2xlLWZpbGUgc3VibWVudSBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlc01lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVzTWVudVN1Ym1lbnVJY29uO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlRmlsZVByb3ZpZGVyPzogQWN0aXZlRmlsZVByb3ZpZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlTWVudUl0ZW1OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYWJzdHJhY3QgZmlsZSBjb21tYW5kIGhhbmRsZXIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGFic3RyYWN0IGZpbGUgY29tbWFuZCBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5fZmlsZU1lbnVJdGVtTmFtZSA9IHBhcmFtcy5maWxlTWVudUl0ZW1OYW1lO1xuICAgIHRoaXMuX2ZpbGVNZW51U2VjdGlvbiA9IHBhcmFtcy5maWxlTWVudVNlY3Rpb247XG4gICAgdGhpcy5fZmlsZU1lbnVTdWJtZW51SWNvbiA9IHBhcmFtcy5maWxlTWVudVN1Ym1lbnVJY29uO1xuICAgIHRoaXMuX2ZpbGVzTWVudUl0ZW1OYW1lID0gcGFyYW1zLmZpbGVzTWVudUl0ZW1OYW1lO1xuICAgIHRoaXMuX2ZpbGVzTWVudVNlY3Rpb24gPSBwYXJhbXMuZmlsZXNNZW51U2VjdGlvbjtcbiAgICB0aGlzLl9maWxlc01lbnVTdWJtZW51SWNvbiA9IHBhcmFtcy5maWxlc01lbnVTdWJtZW51SWNvbjtcbiAgICB0aGlzLl9zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51ID0gcGFyYW1zLnNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGZpbGUtbWVudSBhbmQgZmlsZXMtbWVudSBldmVudCBoYW5kbGVycy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgcmVnaXN0cmF0aW9uIGNvbnRleHQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25SZWdpc3RlcmVkKGNvbnRleHQ6IENvbW1hbmRIYW5kbGVyUmVnaXN0cmF0aW9uQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLm9uUmVnaXN0ZXJlZChjb250ZXh0KTtcbiAgICB0aGlzLl9hY3RpdmVGaWxlUHJvdmlkZXIgPSBjb250ZXh0LmFjdGl2ZUZpbGVQcm92aWRlcjtcbiAgICBjb250ZXh0Lm1lbnVFdmVudFJlZ2lzdHJhci5yZWdpc3RlckZpbGVNZW51RXZlbnRIYW5kbGVyKChtZW51LCBhYnN0cmFjdEZpbGUsIHNvdXJjZSwgbGVhZikgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVBYnN0cmFjdEZpbGVNZW51KHtcbiAgICAgICAgYWJzdHJhY3RGaWxlLFxuICAgICAgICBsZWFmLFxuICAgICAgICBtZW51LFxuICAgICAgICBzb3VyY2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKChtZW51LCBhYnN0cmFjdEZpbGVzLCBzb3VyY2UsIGxlYWYpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlQWJzdHJhY3RGaWxlc01lbnUoe1xuICAgICAgICBhYnN0cmFjdEZpbGVzLFxuICAgICAgICBsZWFmLFxuICAgICAgICBtZW51LFxuICAgICAgICBzb3VyY2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICogVXNlcyB0aGUgYWN0aXZlIGZpbGUgYXMgdGhlIHRhcmdldC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjYW5FeGVjdXRlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zaG91bGRBZGRUb0NvbW1hbmRQYWxldHRlKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVGaWxlID0gdGhpcy5nZXRBY3RpdmVGaWxlKCk7XG4gICAgcmV0dXJuICEhYWN0aXZlRmlsZSAmJiB0aGlzLmNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoYWN0aXZlRmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIGEgc2luZ2xlIGFic3RyYWN0IGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBfYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoX2Fic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZvciBtdWx0aXBsZSBhYnN0cmFjdCBmaWxlcy5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZWFjaCBmaWxlIGluZGl2aWR1YWxseS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZXMgLSBUaGUgZmlsZXMgb3IgZm9sZGVycy5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBjYW5FeGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlcy5sZW5ndGggPiAwICYmIGFic3RyYWN0RmlsZXMuZXZlcnkoKGYpID0+IHRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShmKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZnJvbSB0aGUgY29tbWFuZCBwYWxldHRlIHVzaW5nIHRoZSBhY3RpdmUgZmlsZS5cbiAgICpcbiAgICogQHJldHVybnMgYFByb21pc2FibGU8dm9pZD5gIHRoYXQgcmVzb2x2ZXMgd2hlbiBjb21tYW5kIGhhZCBiZWVuIGV4ZWN1dGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGV4ZWN1dGUoKTogUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgY29uc3QgYWN0aXZlRmlsZSA9IHRoaXMuZ2V0QWN0aXZlRmlsZSgpO1xuICAgIGlmIChhY3RpdmVGaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGFjdGl2ZUZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCBmb3IgYSBzaW5nbGUgYWJzdHJhY3QgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciBtdWx0aXBsZSBhYnN0cmFjdCBmaWxlcy5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBleGVjdXRlcyBzZXF1ZW50aWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEByZXR1cm5zIGBQcm9taXNhYmxlPHZvaWQ+YCB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGFic3RyYWN0IGZpbGVzIGhhdmUgYmVlbiBleGVjdXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBleGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBsZXQgcHJvbWlzZTogbnVsbCB8IFByb21pc2U8dm9pZD4gPSBudWxsO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBhYnN0cmFjdEZpbGVzKSB7XG4gICAgICBwcm9taXNlID0gY2hhaW4ocHJvbWlzZSwgKCkgPT4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFjdGl2ZSBmaWxlLCBpZiBhbnksIHRvIHVzZSBhcyB0aGUgdGFyZ2V0IHdoZW4gZXhlY3V0aW5nIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFjdGl2ZSBmaWxlIG9yIGBudWxsYCBpZiBub25lIGlzIGFjdGl2ZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRBY3RpdmVGaWxlKCk6IG51bGwgfCBUQWJzdHJhY3RGaWxlIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGaWxlUHJvdmlkZXIuZ2V0QWN0aXZlRmlsZSgpID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRvIGFkZCB0aGUgY29tbWFuZCB0byBhIHN1Ym1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIGEgc3VibWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIHNpbmdsZS1maWxlIGNvbnRleHQgbWVudS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgc2luZ2xlLWZpbGUgbWVudSBjaGVjay5cbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gdGhlIGZpbGUgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUocGFyYW1zOiBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlclNob3VsZEFkZFRvQWJzdHJhY3RGaWxlTWVudVBhcmFtcyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgYWJzdHJhY3RGaWxlOiBfYWJzdHJhY3RGaWxlLCBsZWFmOiBfbGVhZiwgc291cmNlOiBfc291cmNlIH0gPSBwYXJhbXM7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIG11bHRpLWZpbGUgY29udGV4dCBtZW51LlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGNoZWNrcyBlYWNoIGZpbGUgaW5kaXZpZHVhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBtdWx0aS1maWxlIG1lbnUgY2hlY2suXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlcyBtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvQWJzdHJhY3RGaWxlc01lbnUocGFyYW1zOiBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlclNob3VsZEFkZFRvQWJzdHJhY3RGaWxlc01lbnVQYXJhbXMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGFyYW1zLmFic3RyYWN0RmlsZXMuZXZlcnkoKGYpID0+XG4gICAgICB0aGlzLnNob3VsZEFkZFRvQWJzdHJhY3RGaWxlTWVudSh7XG4gICAgICAgIGFic3RyYWN0RmlsZTogZixcbiAgICAgICAgbGVhZjogcGFyYW1zLmxlYWYsXG4gICAgICAgIHNvdXJjZTogcGFyYW1zLnNvdXJjZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0NvbW1hbmRQYWxldHRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBYnN0cmFjdEZpbGVNZW51KHBhcmFtczogQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJIYW5kbGVBYnN0cmFjdEZpbGVNZW51UGFyYW1zKTogdm9pZCB7XG4gICAgY29uc3Qge1xuICAgICAgYWJzdHJhY3RGaWxlLFxuICAgICAgbGVhZixcbiAgICAgIG1lbnUsXG4gICAgICBzb3VyY2VcbiAgICB9ID0gcGFyYW1zO1xuICAgIGlmIChcbiAgICAgICF0aGlzLnNob3VsZEFkZFRvQWJzdHJhY3RGaWxlTWVudSh7XG4gICAgICAgIGFic3RyYWN0RmlsZSxcbiAgICAgICAgbGVhZixcbiAgICAgICAgc291cmNlXG4gICAgICB9KVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5FeGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5maWxlTWVudVNlY3Rpb24gPz8gdGhpcy5wbHVnaW5OYW1lO1xuICAgIGlmICh0aGlzLnNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKSkge1xuICAgICAgbWVudS5zZXRTZWN0aW9uU3VibWVudShzZWN0aW9uLCB7XG4gICAgICAgIGljb246IHRoaXMuZmlsZU1lbnVTdWJtZW51SWNvbiA/PyAnJyxcbiAgICAgICAgdGl0bGU6IHNlY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgaXRlbVxuICAgICAgICAuc2V0VGl0bGUodGhpcy5maWxlTWVudUl0ZW1OYW1lID8/IHRoaXMubmFtZSlcbiAgICAgICAgLnNldEljb24odGhpcy5pY29uKVxuICAgICAgICAuc2V0U2VjdGlvbihzZWN0aW9uKVxuICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWJzdHJhY3RGaWxlc01lbnUocGFyYW1zOiBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckhhbmRsZUFic3RyYWN0RmlsZXNNZW51UGFyYW1zKTogdm9pZCB7XG4gICAgY29uc3Qge1xuICAgICAgYWJzdHJhY3RGaWxlcyxcbiAgICAgIGxlYWYsXG4gICAgICBtZW51LFxuICAgICAgc291cmNlXG4gICAgfSA9IHBhcmFtcztcbiAgICBpZiAoXG4gICAgICAhdGhpcy5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZXNNZW51KHtcbiAgICAgICAgYWJzdHJhY3RGaWxlcyxcbiAgICAgICAgbGVhZixcbiAgICAgICAgc291cmNlXG4gICAgICB9KVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5FeGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmZpbGVzTWVudVNlY3Rpb24gPz8gdGhpcy5maWxlTWVudVNlY3Rpb24gPz8gdGhpcy5wbHVnaW5OYW1lO1xuICAgIGlmICh0aGlzLnNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKSkge1xuICAgICAgbWVudS5zZXRTZWN0aW9uU3VibWVudShzZWN0aW9uLCB7XG4gICAgICAgIGljb246IHRoaXMuZmlsZXNNZW51U3VibWVudUljb24gPz8gdGhpcy5maWxlTWVudVN1Ym1lbnVJY29uID8/ICcnLFxuICAgICAgICB0aXRsZTogc2VjdGlvblxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVudS5hZGRJdGVtKChpdGVtKSA9PiB7XG4gICAgICBpdGVtXG4gICAgICAgIC5zZXRUaXRsZSh0aGlzLmZpbGVzTWVudUl0ZW1OYW1lID8/IHRoaXMuZmlsZU1lbnVJdGVtTmFtZSA/PyB0aGlzLm5hbWUpXG4gICAgICAgIC5zZXRJY29uKHRoaXMuaWNvbilcbiAgICAgICAgLnNldFNlY3Rpb24oc2VjdGlvbilcbiAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHRoaXMuZXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlcykpKTtcbiAgICB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb0JBLG1CQUdPO0FBQ1AseUJBQWtDO0FBQ2xDLG9DQUFxQztBQTBJOUIsTUFBZSxtQ0FBbUMsbURBQXFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTTVFLElBQWMscUJBQXlDO0FBQ3JELGVBQU8sc0NBQWtCLEtBQUssbUJBQW1CO0FBQUEsRUFDbkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLG1CQUF1QztBQUNuRCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyxrQkFBc0M7QUFDbEQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsc0JBQTRDO0FBQ3hELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLG9CQUF3QztBQUNwRCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyxtQkFBdUM7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
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Command handler for abstract file commands with file/files menu integration.
6
6
  */
7
- import type { IconName, TAbstractFile, WorkspaceLeaf } from 'obsidian';
7
+ import type { IconName, Menu, TAbstractFile, WorkspaceLeaf } from 'obsidian';
8
8
  import type { Promisable } from 'type-fest';
9
9
  import type { ActiveFileProvider } from '../active-file-provider.cjs';
10
10
  import type { CommandHandlerConstructorParams, CommandHandlerRegistrationContext } from './command-handler.cjs';
@@ -42,6 +42,82 @@ export interface AbstractFileCommandHandlerConstructorParams extends CommandHand
42
42
  */
43
43
  readonly shouldAddCommandToSubmenu?: boolean | undefined;
44
44
  }
45
+ /**
46
+ * Parameters for {@link AbstractFileCommandHandler.handleAbstractFileMenu}.
47
+ */
48
+ export interface AbstractFileCommandHandlerHandleAbstractFileMenuParams {
49
+ /**
50
+ * The file or folder.
51
+ */
52
+ readonly abstractFile: TAbstractFile;
53
+ /**
54
+ * The workspace leaf, if available.
55
+ */
56
+ readonly leaf?: undefined | WorkspaceLeaf;
57
+ /**
58
+ * The menu to add items to.
59
+ */
60
+ readonly menu: Menu;
61
+ /**
62
+ * The source of the event.
63
+ */
64
+ readonly source: string;
65
+ }
66
+ /**
67
+ * Parameters for {@link AbstractFileCommandHandler.handleAbstractFilesMenu}.
68
+ */
69
+ export interface AbstractFileCommandHandlerHandleAbstractFilesMenuParams {
70
+ /**
71
+ * The files or folders.
72
+ */
73
+ readonly abstractFiles: TAbstractFile[];
74
+ /**
75
+ * The workspace leaf, if available.
76
+ */
77
+ readonly leaf?: undefined | WorkspaceLeaf;
78
+ /**
79
+ * The menu to add items to.
80
+ */
81
+ readonly menu: Menu;
82
+ /**
83
+ * The source of the event.
84
+ */
85
+ readonly source: string;
86
+ }
87
+ /**
88
+ * Parameters for {@link AbstractFileCommandHandler.shouldAddToAbstractFileMenu}.
89
+ */
90
+ export interface AbstractFileCommandHandlerShouldAddToAbstractFileMenuParams {
91
+ /**
92
+ * The file or folder.
93
+ */
94
+ readonly abstractFile: TAbstractFile;
95
+ /**
96
+ * The workspace leaf, if available.
97
+ */
98
+ readonly leaf?: undefined | WorkspaceLeaf;
99
+ /**
100
+ * The source of the event.
101
+ */
102
+ readonly source: string;
103
+ }
104
+ /**
105
+ * Parameters for {@link AbstractFileCommandHandler.shouldAddToAbstractFilesMenu}.
106
+ */
107
+ export interface AbstractFileCommandHandlerShouldAddToAbstractFilesMenuParams {
108
+ /**
109
+ * The files or folders.
110
+ */
111
+ readonly abstractFiles: TAbstractFile[];
112
+ /**
113
+ * The workspace leaf, if available.
114
+ */
115
+ readonly leaf?: undefined | WorkspaceLeaf;
116
+ /**
117
+ * The source of the event.
118
+ */
119
+ readonly source: string;
120
+ }
45
121
  /**
46
122
  * Command handler for abstract file commands.
47
123
  *
@@ -168,22 +244,18 @@ export declare abstract class AbstractFileCommandHandler extends GlobalCommandHa
168
244
  /**
169
245
  * Checks whether the command should appear in the single-file context menu.
170
246
  *
171
- * @param _abstractFile - The file or folder.
172
- * @param _source - The source of the event.
173
- * @param _leaf - The workspace leaf, if available.
247
+ * @param params - The parameters for the single-file menu check.
174
248
  * @returns Whether to add to the file menu.
175
249
  */
176
- protected shouldAddToAbstractFileMenu(_abstractFile: TAbstractFile, _source: string, _leaf?: WorkspaceLeaf): boolean;
250
+ protected shouldAddToAbstractFileMenu(params: AbstractFileCommandHandlerShouldAddToAbstractFileMenuParams): boolean;
177
251
  /**
178
252
  * Checks whether the command should appear in the multi-file context menu.
179
253
  * Default implementation checks each file individually.
180
254
  *
181
- * @param abstractFiles - The files or folders.
182
- * @param source - The source of the event.
183
- * @param leaf - The workspace leaf, if available.
255
+ * @param params - The parameters for the multi-file menu check.
184
256
  * @returns Whether to add to the files menu.
185
257
  */
186
- protected shouldAddToAbstractFilesMenu(abstractFiles: TAbstractFile[], source: string, leaf?: WorkspaceLeaf): boolean;
258
+ protected shouldAddToAbstractFilesMenu(params: AbstractFileCommandHandlerShouldAddToAbstractFilesMenuParams): boolean;
187
259
  /**
188
260
  * Checks whether the command should appear in the command palette.
189
261
  *
@@ -178,7 +178,11 @@ class EditorCommandHandler extends import_command_handler.CommandHandler {
178
178
  */
179
179
  buildCommand() {
180
180
  return {
181
- editorCheckCallback: (checking, editor, ctx) => this.editorCheckCallback(checking, editor, ctx),
181
+ editorCheckCallback: (checking, editor, ctx) => this.editorCheckCallback({
182
+ checking,
183
+ ctx,
184
+ editor
185
+ }),
182
186
  icon: this.icon,
183
187
  id: this.id,
184
188
  name: this.name
@@ -191,7 +195,13 @@ class EditorCommandHandler extends import_command_handler.CommandHandler {
191
195
  */
192
196
  async onRegistered(context) {
193
197
  await super.onRegistered(context);
194
- context.menuEventRegistrar.registerEditorMenuEventHandler(this.handleEditorMenu.bind(this));
198
+ context.menuEventRegistrar.registerEditorMenuEventHandler((menu, editor, ctx) => {
199
+ this.handleEditorMenu({
200
+ ctx,
201
+ editor,
202
+ menu
203
+ });
204
+ });
195
205
  }
196
206
  /**
197
207
  * Checks whether the command can execute for the given editor and context.
@@ -229,7 +239,12 @@ class EditorCommandHandler extends import_command_handler.CommandHandler {
229
239
  shouldAddToEditorMenu(_editor, _ctx) {
230
240
  return false;
231
241
  }
232
- editorCheckCallback(checking, editor, ctx) {
242
+ editorCheckCallback(params) {
243
+ const {
244
+ checking,
245
+ ctx,
246
+ editor
247
+ } = params;
233
248
  if (!this.shouldAddToCommandPalette()) {
234
249
  return false;
235
250
  }
@@ -241,7 +256,12 @@ class EditorCommandHandler extends import_command_handler.CommandHandler {
241
256
  }
242
257
  return true;
243
258
  }
244
- handleEditorMenu(menu, editor, ctx) {
259
+ handleEditorMenu(params) {
260
+ const {
261
+ ctx,
262
+ editor,
263
+ menu
264
+ } = params;
245
265
  if (!this.shouldAddToEditorMenu(editor, ctx)) {
246
266
  return;
247
267
  }
@@ -264,4 +284,4 @@ class EditorCommandHandler extends import_command_handler.CommandHandler {
264
284
  0 && (module.exports = {
265
285
  EditorCommandHandler
266
286
  });
267
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvZWRpdG9yLWNvbW1hbmQtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgZWRpdG9yIGNvbW1hbmRzIHdpdGggb3B0aW9uYWwgZWRpdG9yIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kLFxuICBFZGl0b3IsXG4gIEljb25OYW1lLFxuICBNYXJrZG93bkZpbGVJbmZvLFxuICBNZW51XG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyxcbiAgQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0XG59IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseVxufSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBhbiBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckNvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMgZXh0ZW5kcyBDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvck1lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvck1lbnVTZWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51IHN1Ym1lbnUuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3JNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgdGhlIGNvbW1hbmQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29tbWFuZCBoYW5kbGVyIGZvciBlZGl0b3IgY29tbWFuZHMuXG4gKlxuICogU3ViY2xhc3NlcyBvdmVycmlkZSB7QGxpbmsgY2FuRXhlY3V0ZUVkaXRvcn0gYW5kIHtAbGluayBleGVjdXRlRWRpdG9yfSB0byBwcm92aWRlIGJlaGF2aW9yLlxuICogT3B0aW9uYWxseSBpbnRlZ3JhdGVzIHdpdGggdGhlIGVkaXRvciBjb250ZXh0IG1lbnUgdmlhIHtAbGluayBzaG91bGRBZGRUb0VkaXRvck1lbnV9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWRpdG9yQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBDb21tYW5kSGFuZGxlciB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBjb21tYW5kIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGVkaXRvck1lbnVJdGVtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51SXRlbU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2VjdGlvbiBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byB1c2UgdGhlIHBsdWdpbiBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBlZGl0b3JNZW51U2VjdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgZWRpdG9yIG1lbnUgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGljb24sIG9yIGB1bmRlZmluZWRgIGZvciBubyBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBlZGl0b3JNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51U3VibWVudUljb247XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZWRpdG9yTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRvck1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRWRpdG9yQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5fZWRpdG9yTWVudUl0ZW1OYW1lID0gcGFyYW1zLmVkaXRvck1lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9lZGl0b3JNZW51U2VjdGlvbiA9IHBhcmFtcy5lZGl0b3JNZW51U2VjdGlvbjtcbiAgICB0aGlzLl9lZGl0b3JNZW51U3VibWVudUljb24gPSBwYXJhbXMuZWRpdG9yTWVudVN1Ym1lbnVJY29uO1xuICAgIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPSBwYXJhbXMuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBwbGFpbiBPYnNpZGlhbiB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0IHdpdGggYW4gYGVkaXRvckNoZWNrQ2FsbGJhY2tgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGJ1aWxkQ29tbWFuZCgpOiBDb21tYW5kIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yQ2hlY2tDYWxsYmFjazogKGNoZWNraW5nLCBlZGl0b3IsIGN0eCkgPT4gdGhpcy5lZGl0b3JDaGVja0NhbGxiYWNrKGNoZWNraW5nLCBlZGl0b3IsIGN0eCksXG4gICAgICBpY29uOiB0aGlzLmljb24sXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBlZGl0b3ItbWVudSBldmVudCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSByZWdpc3RyYXRpb24gY29udGV4dC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvblJlZ2lzdGVyZWQoY29udGV4dDogQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIub25SZWdpc3RlcmVkKGNvbnRleHQpO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRWRpdG9yTWVudUV2ZW50SGFuZGxlcih0aGlzLmhhbmRsZUVkaXRvck1lbnUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIHRoZSBnaXZlbiBlZGl0b3IgYW5kIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBfZWRpdG9yIC0gVGhlIGVkaXRvciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIF9jdHggLSBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVFZGl0b3IoX2VkaXRvcjogRWRpdG9yLCBfY3R4OiBNYXJrZG93bkZpbGVJbmZvKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZm9yIHRoZSBnaXZlbiBlZGl0b3IgYW5kIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBlZGl0b3IgLSBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIG1hcmtkb3duIGZpbGUgY29udGV4dC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlRWRpdG9yKGVkaXRvcjogRWRpdG9yLCBjdHg6IE1hcmtkb3duRmlsZUluZm8pOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvQ29tbWFuZFBhbGV0dGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgZWRpdG9yIGNvbnRleHQgbWVudS5cbiAgICpcbiAgICogQHBhcmFtIF9lZGl0b3IgLSBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gX2N0eCAtIFRoZSBtYXJrZG93biBmaWxlIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBlZGl0b3IgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0VkaXRvck1lbnUoX2VkaXRvcjogRWRpdG9yLCBfY3R4OiBNYXJrZG93bkZpbGVJbmZvKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBlZGl0b3JDaGVja0NhbGxiYWNrKGNoZWNraW5nOiBib29sZWFuLCBlZGl0b3I6IEVkaXRvciwgY3R4OiBNYXJrZG93bkZpbGVJbmZvKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNob3VsZEFkZFRvQ29tbWFuZFBhbGV0dGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5FeGVjdXRlRWRpdG9yKGVkaXRvciwgY3R4KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghY2hlY2tpbmcpIHtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHRoaXMuZXhlY3V0ZUVkaXRvcihlZGl0b3IsIGN0eCkpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFZGl0b3JNZW51KG1lbnU6IE1lbnUsIGVkaXRvcjogRWRpdG9yLCBjdHg6IE1hcmtkb3duRmlsZUluZm8pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkQWRkVG9FZGl0b3JNZW51KGVkaXRvciwgY3R4KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5FeGVjdXRlRWRpdG9yKGVkaXRvciwgY3R4KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmVkaXRvck1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmVkaXRvck1lbnVTdWJtZW51SWNvbiA/PyAnJyxcbiAgICAgICAgdGl0bGU6IHNlY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgaXRlbVxuICAgICAgICAuc2V0VGl0bGUodGhpcy5lZGl0b3JNZW51SXRlbU5hbWUgPz8gdGhpcy5uYW1lKVxuICAgICAgICAuc2V0SWNvbih0aGlzLmljb24pXG4gICAgICAgIC5zZXRTZWN0aW9uKHNlY3Rpb24pXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB0aGlzLmV4ZWN1dGVFZGl0b3IoZWRpdG9yLCBjdHgpKSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9CQSxtQkFHTztBQUNQLDZCQUErQjtBQWlDeEIsTUFBZSw2QkFBNkIsc0NBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNaEUsSUFBYyxxQkFBeUM7QUFDckQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsb0JBQXdDO0FBQ3BELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHdCQUE4QztBQUMxRCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFaUI7QUFBQSxFQUVBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVixZQUFZLFFBQStDO0FBQ2hFLFVBQU0sTUFBTTtBQUNaLFNBQUssc0JBQXNCLE9BQU87QUFDbEMsU0FBSyxxQkFBcUIsT0FBTztBQUNqQyxTQUFLLHlCQUF5QixPQUFPO0FBQ3JDLFNBQUssNkJBQTZCLE9BQU87QUFBQSxFQUMzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9nQixlQUF3QjtBQUN0QyxXQUFPO0FBQUEsTUFDTCxxQkFBcUIsQ0FBQyxVQUFVLFFBQVEsUUFBUSxLQUFLLG9CQUFvQixVQUFVLFFBQVEsR0FBRztBQUFBLE1BQzlGLE1BQU0sS0FBSztBQUFBLE1BQ1gsSUFBSSxLQUFLO0FBQUEsTUFDVCxNQUFNLEtBQUs7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE1BQXNCLGFBQWEsU0FBMkQ7QUFDNUYsVUFBTSxNQUFNLGFBQWEsT0FBTztBQUNoQyxZQUFRLG1CQUFtQiwrQkFBK0IsS0FBSyxpQkFBaUIsS0FBSyxJQUFJLENBQUM7QUFBQSxFQUM1RjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTVSxpQkFBaUIsU0FBaUIsTUFBaUM7QUFDM0UsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFlVSw0QkFBaUQ7QUFDekQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9VLDRCQUFxQztBQUM3QyxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTVSxzQkFBc0IsU0FBaUIsTUFBaUM7QUFDaEYsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVRLG9CQUFvQixVQUFtQixRQUFnQixLQUFnQztBQUM3RixRQUFJLENBQUMsS0FBSywwQkFBMEIsR0FBRztBQUNyQyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksQ0FBQyxLQUFLLGlCQUFpQixRQUFRLEdBQUcsR0FBRztBQUN2QyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksQ0FBQyxVQUFVO0FBQ2IsMENBQWtCLE1BQU0sS0FBSyxjQUFjLFFBQVEsR0FBRyxDQUFDO0FBQUEsSUFDekQ7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRVEsaUJBQWlCLE1BQVksUUFBZ0IsS0FBNkI7QUFDaEYsUUFBSSxDQUFDLEtBQUssc0JBQXNCLFFBQVEsR0FBRyxHQUFHO0FBQzVDO0FBQUEsSUFDRjtBQUVBLFFBQUksQ0FBQyxLQUFLLGlCQUFpQixRQUFRLEdBQUcsR0FBRztBQUN2QztBQUFBLElBQ0Y7QUFFQSxVQUFNLFVBQVUsS0FBSyxxQkFBcUIsS0FBSztBQUMvQyxRQUFJLEtBQUssMEJBQTBCLEdBQUc7QUFDcEMsV0FBSyxrQkFBa0IsU0FBUztBQUFBLFFBQzlCLE1BQU0sS0FBSyx5QkFBeUI7QUFBQSxRQUNwQyxPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSDtBQUVBLFNBQUssUUFBUSxDQUFDLFNBQVM7QUFDckIsV0FDRyxTQUFTLEtBQUssc0JBQXNCLEtBQUssSUFBSSxFQUM3QyxRQUFRLEtBQUssSUFBSSxFQUNqQixXQUFXLE9BQU8sRUFDbEIsWUFBUSxpQ0FBbUIsWUFBWSxLQUFLLGNBQWMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFBLElBQzVFLENBQUM7QUFBQSxFQUNIO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
287
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvZWRpdG9yLWNvbW1hbmQtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgZWRpdG9yIGNvbW1hbmRzIHdpdGggb3B0aW9uYWwgZWRpdG9yIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kLFxuICBFZGl0b3IsXG4gIEljb25OYW1lLFxuICBNYXJrZG93bkZpbGVJbmZvLFxuICBNZW51XG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyxcbiAgQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0XG59IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseVxufSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBhbiBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckNvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMgZXh0ZW5kcyBDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvck1lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvck1lbnVTZWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51IHN1Ym1lbnUuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3JNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgdGhlIGNvbW1hbmQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEVkaXRvckNvbW1hbmRIYW5kbGVyLmVkaXRvckNoZWNrQ2FsbGJhY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckNvbW1hbmRIYW5kbGVyRWRpdG9yQ2hlY2tDYWxsYmFja1BhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIE9ic2lkaWFuIGlzIG9ubHkgY2hlY2tpbmcgYXZhaWxhYmlsaXR5IChub3QgZXhlY3V0aW5nKS5cbiAgICovXG4gIHJlYWRvbmx5IGNoZWNraW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgY3R4OiBNYXJrZG93bkZpbGVJbmZvO1xuXG4gIC8qKlxuICAgKiBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yOiBFZGl0b3I7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEVkaXRvckNvbW1hbmRIYW5kbGVyLmhhbmRsZUVkaXRvck1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckNvbW1hbmRIYW5kbGVySGFuZGxlRWRpdG9yTWVudVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgY3R4OiBNYXJrZG93bkZpbGVJbmZvO1xuXG4gIC8qKlxuICAgKiBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yOiBFZGl0b3I7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW51IHRvIGFkZCBpdGVtcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IG1lbnU6IE1lbnU7XG59XG5cbi8qKlxuICogQ29tbWFuZCBoYW5kbGVyIGZvciBlZGl0b3IgY29tbWFuZHMuXG4gKlxuICogU3ViY2xhc3NlcyBvdmVycmlkZSB7QGxpbmsgY2FuRXhlY3V0ZUVkaXRvcn0gYW5kIHtAbGluayBleGVjdXRlRWRpdG9yfSB0byBwcm92aWRlIGJlaGF2aW9yLlxuICogT3B0aW9uYWxseSBpbnRlZ3JhdGVzIHdpdGggdGhlIGVkaXRvciBjb250ZXh0IG1lbnUgdmlhIHtAbGluayBzaG91bGRBZGRUb0VkaXRvck1lbnV9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWRpdG9yQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBDb21tYW5kSGFuZGxlciB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBjb21tYW5kIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGVkaXRvck1lbnVJdGVtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51SXRlbU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2VjdGlvbiBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byB1c2UgdGhlIHBsdWdpbiBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBlZGl0b3JNZW51U2VjdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgZWRpdG9yIG1lbnUgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGljb24sIG9yIGB1bmRlZmluZWRgIGZvciBubyBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBlZGl0b3JNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51U3VibWVudUljb247XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZWRpdG9yTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRvck1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRWRpdG9yQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5fZWRpdG9yTWVudUl0ZW1OYW1lID0gcGFyYW1zLmVkaXRvck1lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9lZGl0b3JNZW51U2VjdGlvbiA9IHBhcmFtcy5lZGl0b3JNZW51U2VjdGlvbjtcbiAgICB0aGlzLl9lZGl0b3JNZW51U3VibWVudUljb24gPSBwYXJhbXMuZWRpdG9yTWVudVN1Ym1lbnVJY29uO1xuICAgIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPSBwYXJhbXMuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBwbGFpbiBPYnNpZGlhbiB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0IHdpdGggYW4gYGVkaXRvckNoZWNrQ2FsbGJhY2tgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGJ1aWxkQ29tbWFuZCgpOiBDb21tYW5kIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yQ2hlY2tDYWxsYmFjazogKGNoZWNraW5nLCBlZGl0b3IsIGN0eCkgPT5cbiAgICAgICAgdGhpcy5lZGl0b3JDaGVja0NhbGxiYWNrKHtcbiAgICAgICAgICBjaGVja2luZyxcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgIH0pLFxuICAgICAgaWNvbjogdGhpcy5pY29uLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgZWRpdG9yLW1lbnUgZXZlbnQgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgcmVnaXN0cmF0aW9uIGNvbnRleHQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25SZWdpc3RlcmVkKGNvbnRleHQ6IENvbW1hbmRIYW5kbGVyUmVnaXN0cmF0aW9uQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLm9uUmVnaXN0ZXJlZChjb250ZXh0KTtcbiAgICBjb250ZXh0Lm1lbnVFdmVudFJlZ2lzdHJhci5yZWdpc3RlckVkaXRvck1lbnVFdmVudEhhbmRsZXIoKG1lbnUsIGVkaXRvciwgY3R4KSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZUVkaXRvck1lbnUoe1xuICAgICAgICBjdHgsXG4gICAgICAgIGVkaXRvcixcbiAgICAgICAgbWVudVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIHRoZSBnaXZlbiBlZGl0b3IgYW5kIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBfZWRpdG9yIC0gVGhlIGVkaXRvciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIF9jdHggLSBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVFZGl0b3IoX2VkaXRvcjogRWRpdG9yLCBfY3R4OiBNYXJrZG93bkZpbGVJbmZvKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZm9yIHRoZSBnaXZlbiBlZGl0b3IgYW5kIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBlZGl0b3IgLSBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIG1hcmtkb3duIGZpbGUgY29udGV4dC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlRWRpdG9yKGVkaXRvcjogRWRpdG9yLCBjdHg6IE1hcmtkb3duRmlsZUluZm8pOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvQ29tbWFuZFBhbGV0dGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgZWRpdG9yIGNvbnRleHQgbWVudS5cbiAgICpcbiAgICogQHBhcmFtIF9lZGl0b3IgLSBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gX2N0eCAtIFRoZSBtYXJrZG93biBmaWxlIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBlZGl0b3IgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0VkaXRvck1lbnUoX2VkaXRvcjogRWRpdG9yLCBfY3R4OiBNYXJrZG93bkZpbGVJbmZvKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBlZGl0b3JDaGVja0NhbGxiYWNrKHBhcmFtczogRWRpdG9yQ29tbWFuZEhhbmRsZXJFZGl0b3JDaGVja0NhbGxiYWNrUGFyYW1zKTogYm9vbGVhbiB7XG4gICAgY29uc3Qge1xuICAgICAgY2hlY2tpbmcsXG4gICAgICBjdHgsXG4gICAgICBlZGl0b3JcbiAgICB9ID0gcGFyYW1zO1xuICAgIGlmICghdGhpcy5zaG91bGRBZGRUb0NvbW1hbmRQYWxldHRlKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2FuRXhlY3V0ZUVkaXRvcihlZGl0b3IsIGN0eCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWNoZWNraW5nKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmV4ZWN1dGVFZGl0b3IoZWRpdG9yLCBjdHgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRWRpdG9yTWVudShwYXJhbXM6IEVkaXRvckNvbW1hbmRIYW5kbGVySGFuZGxlRWRpdG9yTWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGN0eCxcbiAgICAgIGVkaXRvcixcbiAgICAgIG1lbnVcbiAgICB9ID0gcGFyYW1zO1xuICAgIGlmICghdGhpcy5zaG91bGRBZGRUb0VkaXRvck1lbnUoZWRpdG9yLCBjdHgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNhbkV4ZWN1dGVFZGl0b3IoZWRpdG9yLCBjdHgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZWRpdG9yTWVudVNlY3Rpb24gPz8gdGhpcy5wbHVnaW5OYW1lO1xuICAgIGlmICh0aGlzLnNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKSkge1xuICAgICAgbWVudS5zZXRTZWN0aW9uU3VibWVudShzZWN0aW9uLCB7XG4gICAgICAgIGljb246IHRoaXMuZWRpdG9yTWVudVN1Ym1lbnVJY29uID8/ICcnLFxuICAgICAgICB0aXRsZTogc2VjdGlvblxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVudS5hZGRJdGVtKChpdGVtKSA9PiB7XG4gICAgICBpdGVtXG4gICAgICAgIC5zZXRUaXRsZSh0aGlzLmVkaXRvck1lbnVJdGVtTmFtZSA/PyB0aGlzLm5hbWUpXG4gICAgICAgIC5zZXRJY29uKHRoaXMuaWNvbilcbiAgICAgICAgLnNldFNlY3Rpb24oc2VjdGlvbilcbiAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHRoaXMuZXhlY3V0ZUVkaXRvcihlZGl0b3IsIGN0eCkpKTtcbiAgICB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb0JBLG1CQUdPO0FBQ1AsNkJBQStCO0FBeUV4QixNQUFlLDZCQUE2QixzQ0FBZTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1oRSxJQUFjLHFCQUF5QztBQUNyRCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyxvQkFBd0M7QUFDcEQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsd0JBQThDO0FBQzFELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUVpQjtBQUFBLEVBRUE7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBK0M7QUFDaEUsVUFBTSxNQUFNO0FBQ1osU0FBSyxzQkFBc0IsT0FBTztBQUNsQyxTQUFLLHFCQUFxQixPQUFPO0FBQ2pDLFNBQUsseUJBQXlCLE9BQU87QUFDckMsU0FBSyw2QkFBNkIsT0FBTztBQUFBLEVBQzNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Command handler for editor commands with optional editor menu integration.
6
6
  */
7
- import type { Command, Editor, IconName, MarkdownFileInfo } from 'obsidian';
7
+ import type { Command, Editor, IconName, MarkdownFileInfo, Menu } from 'obsidian';
8
8
  import type { Promisable } from 'type-fest';
9
9
  import type { CommandHandlerConstructorParams, CommandHandlerRegistrationContext } from './command-handler.cjs';
10
10
  import { CommandHandler } from './command-handler.cjs';
@@ -29,6 +29,40 @@ export interface EditorCommandHandlerConstructorParams extends CommandHandlerCon
29
29
  */
30
30
  readonly shouldAddCommandToSubmenu?: boolean | undefined;
31
31
  }
32
+ /**
33
+ * Parameters for {@link EditorCommandHandler.editorCheckCallback}.
34
+ */
35
+ export interface EditorCommandHandlerEditorCheckCallbackParams {
36
+ /**
37
+ * Whether Obsidian is only checking availability (not executing).
38
+ */
39
+ readonly checking: boolean;
40
+ /**
41
+ * The markdown file context.
42
+ */
43
+ readonly ctx: MarkdownFileInfo;
44
+ /**
45
+ * The editor instance.
46
+ */
47
+ readonly editor: Editor;
48
+ }
49
+ /**
50
+ * Parameters for {@link EditorCommandHandler.handleEditorMenu}.
51
+ */
52
+ export interface EditorCommandHandlerHandleEditorMenuParams {
53
+ /**
54
+ * The markdown file context.
55
+ */
56
+ readonly ctx: MarkdownFileInfo;
57
+ /**
58
+ * The editor instance.
59
+ */
60
+ readonly editor: Editor;
61
+ /**
62
+ * The menu to add items to.
63
+ */
64
+ readonly menu: Menu;
65
+ }
32
66
  /**
33
67
  * Command handler for editor commands.
34
68
  *
@@ -215,51 +215,65 @@ class FileCommandHandler extends import_abstract_file_command_handler.AbstractFi
215
215
  /**
216
216
  * Filters to only show menu for TFile instances.
217
217
  *
218
- * @param abstractFile - The file or folder.
219
- * @param source - The source of the event.
220
- * @param leaf - The workspace leaf, if available.
218
+ * @param params - The parameters for the single-file menu check.
221
219
  * @returns Whether to add to the file menu.
222
220
  */
223
- shouldAddToAbstractFileMenu(abstractFile, source, leaf) {
221
+ // eslint-disable-next-line obsidian-dev-utils/params-options-name-match -- Override keeps the base class param type.
222
+ shouldAddToAbstractFileMenu(params) {
223
+ const {
224
+ abstractFile,
225
+ leaf,
226
+ source
227
+ } = params;
224
228
  if (!(0, import_file_system.isFile)(abstractFile)) {
225
229
  return false;
226
230
  }
227
- return this.shouldAddToFileMenu(abstractFile, source, leaf);
231
+ return this.shouldAddToFileMenu({
232
+ file: abstractFile,
233
+ leaf,
234
+ source
235
+ });
228
236
  }
229
237
  /**
230
238
  * Filters to only show menu for TFile arrays.
231
239
  *
232
- * @param abstractFiles - The files or folders.
233
- * @param source - The source of the event.
234
- * @param leaf - The workspace leaf, if available.
240
+ * @param params - The parameters for the multi-file menu check.
235
241
  * @returns Whether to add to the files menu.
236
242
  */
237
- shouldAddToAbstractFilesMenu(abstractFiles, source, leaf) {
243
+ // eslint-disable-next-line obsidian-dev-utils/params-options-name-match -- Override keeps the base class param type.
244
+ shouldAddToAbstractFilesMenu(params) {
245
+ const {
246
+ abstractFiles,
247
+ leaf,
248
+ source
249
+ } = params;
238
250
  if (!abstractFiles.every((f) => (0, import_file_system.isFile)(f))) {
239
251
  return false;
240
252
  }
241
- return this.shouldAddToFilesMenu((0, import_file_system.asArrayOfFiles)(abstractFiles), source, leaf);
253
+ return this.shouldAddToFilesMenu({
254
+ files: (0, import_file_system.asArrayOfFiles)(abstractFiles),
255
+ leaf,
256
+ source
257
+ });
242
258
  }
243
259
  /**
244
260
  * Checks whether the command should appear in the single-file context menu.
245
261
  *
246
- * @param _file - The file.
247
- * @param _source - The source of the event.
248
- * @param _leaf - The workspace leaf, if available.
262
+ * @param params - The parameters for the single-file menu check.
249
263
  * @returns Whether to add to the file menu.
250
264
  */
251
- shouldAddToFileMenu(_file, _source, _leaf) {
265
+ shouldAddToFileMenu(params) {
266
+ const { file: _file, leaf: _leaf, source: _source } = params;
252
267
  return false;
253
268
  }
254
269
  /**
255
270
  * Checks whether the command should appear in the multi-file context menu.
256
271
  *
257
- * @param _files - The files.
258
- * @param _source - The source of the event.
259
- * @param _leaf - The workspace leaf, if available.
272
+ * @param params - The parameters for the multi-file menu check.
260
273
  * @returns Whether to add to the files menu.
261
274
  */
262
- shouldAddToFilesMenu(_files, _source, _leaf) {
275
+ shouldAddToFilesMenu(params) {
276
+ const { files: _files, leaf: _leaf, source: _source } = params;
263
277
  return false;
264
278
  }
265
279
  }
@@ -267,4 +281,4 @@ class FileCommandHandler extends import_abstract_file_command_handler.AbstractFi
267
281
  0 && (module.exports = {
268
282
  FileCommandHandler
269
283
  });
270
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvZmlsZS1jb21tYW5kLWhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGZpbGUtc3BlY2lmaWMgY29tbWFuZHMgKFRGaWxlIG9ubHksIG5vdCBURm9sZGVyKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFRBYnN0cmFjdEZpbGUsXG4gIFRGaWxlLFxuICBXb3Jrc3BhY2VMZWFmXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMnO1xuXG5pbXBvcnQgeyBjaGFpbiB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7XG4gIGFzQXJyYXlPZkZpbGVzLFxuICBhc0ZpbGUsXG4gIGlzRmlsZVxufSBmcm9tICcuLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgeyBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMnO1xuXG4vKipcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgZmlsZS1zcGVjaWZpYyBjb21tYW5kcy5cbiAqXG4gKiBGaWx0ZXJzIGFic3RyYWN0IGZpbGVzIHRvIG9ubHkgYWNjZXB0IHtAbGluayBURmlsZX0gaW5zdGFuY2VzLlxuICogU3ViY2xhc3NlcyBvdmVycmlkZSB7QGxpbmsgY2FuRXhlY3V0ZUZpbGV9IGFuZCB7QGxpbmsgZXhlY3V0ZUZpbGV9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRmlsZUNvbW1hbmRIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmlsZSBjb21tYW5kIGhhbmRsZXIuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gSW5oZXJpdHMgcGFyZW50J3MgcGFyYW1zIHR5cGUuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgdG8gb25seSBhY2NlcHQgVEZpbGUgaW5zdGFuY2VzLCB0aGVuIGRlbGVnYXRlcyB0byB7QGxpbmsgY2FuRXhlY3V0ZUZpbGV9LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoYWJzdHJhY3RGaWxlOiBUQWJzdHJhY3RGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRmlsZShhYnN0cmFjdEZpbGUpICYmIHRoaXMuY2FuRXhlY3V0ZUZpbGUoYWJzdHJhY3RGaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRvIG9ubHkgYWNjZXB0IFRGaWxlIGFycmF5cywgdGhlbiBkZWxlZ2F0ZXMgdG8ge0BsaW5rIGNhbkV4ZWN1dGVGaWxlc30uXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2FuRXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFic3RyYWN0RmlsZXMuZXZlcnkoKGYpID0+IGlzRmlsZShmKSkgJiYgdGhpcy5jYW5FeGVjdXRlRmlsZXMoYXNBcnJheU9mRmlsZXMoYWJzdHJhY3RGaWxlcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZvciBhIHNpbmdsZSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gX2ZpbGUgLSBUaGUgZmlsZS5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBjYW5FeGVjdXRlRmlsZShfZmlsZTogVEZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZSBmb3IgbXVsdGlwbGUgZmlsZXMuXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gY2hlY2tzIGVhY2ggZmlsZSBpbmRpdmlkdWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlcyAtIFRoZSBmaWxlcy5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBjYW5FeGVjdXRlRmlsZXMoZmlsZXM6IFRGaWxlW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmlsZXMubGVuZ3RoID4gMCAmJiBmaWxlcy5ldmVyeSgoZikgPT4gdGhpcy5jYW5FeGVjdXRlRmlsZShmKSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZWdhdGVzIHRvIHtAbGluayBleGVjdXRlRmlsZX0uXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGUgLSBUaGUgZmlsZSBvciBmb2xkZXIuXG4gICAqIEByZXR1cm5zIGBQcm9taXNhYmxlPHZvaWQ+YCB0aGF0IHJlc29sdmVzIHdoZW4gYWJzdHJhY3QgZmlsZSBoYWQgYmVlbiBleGVjdXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBleGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVGaWxlKGFzRmlsZShhYnN0cmFjdEZpbGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxlZ2F0ZXMgdG8ge0BsaW5rIGV4ZWN1dGVGaWxlc30uXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEByZXR1cm5zIGBQcm9taXNhYmxlPHZvaWQ+YCB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGFic3RyYWN0IGZpbGVzIGhhdmUgYmVlbiBleGVjdXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBleGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlRmlsZXMoYXNBcnJheU9mRmlsZXMoYWJzdHJhY3RGaWxlcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciBhIHNpbmdsZSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGV4ZWN1dGVGaWxlKGZpbGU6IFRGaWxlKTogUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZm9yIG11bHRpcGxlIGZpbGVzLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGV4ZWN1dGVzIHNlcXVlbnRpYWxseS5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVzIC0gVGhlIGZpbGVzLlxuICAgKiBAcmV0dXJucyBgUHJvbWlzYWJsZTx2b2lkPmAgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBmaWxlcyBoYXZlIGJlZW4gZXhlY3V0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZXhlY3V0ZUZpbGVzKGZpbGVzOiBURmlsZVtdKTogUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgbGV0IHByb21pc2U6IG51bGwgfCBQcm9taXNlPHZvaWQ+ID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIHByb21pc2UgPSBjaGFpbihwcm9taXNlLCAoKSA9PiB0aGlzLmV4ZWN1dGVGaWxlKGZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgdG8gb25seSBzaG93IG1lbnUgZm9yIFRGaWxlIGluc3RhbmNlcy5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gbGVhZiAtIFRoZSB3b3Jrc3BhY2UgbGVhZiwgaWYgYXZhaWxhYmxlLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgZmlsZSBtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZEFkZFRvQWJzdHJhY3RGaWxlTWVudShhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUsIHNvdXJjZTogc3RyaW5nLCBsZWFmPzogV29ya3NwYWNlTGVhZik6IGJvb2xlYW4ge1xuICAgIGlmICghaXNGaWxlKGFic3RyYWN0RmlsZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQWRkVG9GaWxlTWVudShhYnN0cmFjdEZpbGUsIHNvdXJjZSwgbGVhZik7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyB0byBvbmx5IHNob3cgbWVudSBmb3IgVEZpbGUgYXJyYXlzLlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBsZWFmIC0gVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlcyBtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZEFkZFRvQWJzdHJhY3RGaWxlc01lbnUoYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdLCBzb3VyY2U6IHN0cmluZywgbGVhZj86IFdvcmtzcGFjZUxlYWYpOiBib29sZWFuIHtcbiAgICBpZiAoIWFic3RyYWN0RmlsZXMuZXZlcnkoKGYpID0+IGlzRmlsZShmKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQWRkVG9GaWxlc01lbnUoYXNBcnJheU9mRmlsZXMoYWJzdHJhY3RGaWxlcyksIHNvdXJjZSwgbGVhZik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgc2luZ2xlLWZpbGUgY29udGV4dCBtZW51LlxuICAgKlxuICAgKiBAcGFyYW0gX2ZpbGUgLSBUaGUgZmlsZS5cbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIF9sZWFmIC0gVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9GaWxlTWVudShfZmlsZTogVEZpbGUsIF9zb3VyY2U6IHN0cmluZywgX2xlYWY/OiBXb3Jrc3BhY2VMZWFmKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIG11bHRpLWZpbGUgY29udGV4dCBtZW51LlxuICAgKlxuICAgKiBAcGFyYW0gX2ZpbGVzIC0gVGhlIGZpbGVzLlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gX2xlYWYgLSBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gdGhlIGZpbGVzIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9GaWxlc01lbnUoX2ZpbGVzOiBURmlsZVtdLCBfc291cmNlOiBzdHJpbmcsIF9sZWFmPzogV29ya3NwYWNlTGVhZik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUEsbUJBQXNCO0FBQ3RCLHlCQUlPO0FBQ1AsMkNBQTJDO0FBUXBDLE1BQWUsMkJBQTJCLGdFQUEyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT25FLFlBQVksUUFBcUQ7QUFDdEUsVUFBTSxNQUFNO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUW1CLHVCQUF1QixjQUFzQztBQUM5RSxlQUFPLDJCQUFPLFlBQVksS0FBSyxLQUFLLGVBQWUsWUFBWTtBQUFBLEVBQ2pFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRbUIsd0JBQXdCLGVBQXlDO0FBQ2xGLFdBQU8sY0FBYyxNQUFNLENBQUMsVUFBTSwyQkFBTyxDQUFDLENBQUMsS0FBSyxLQUFLLG9CQUFnQixtQ0FBZSxhQUFhLENBQUM7QUFBQSxFQUNwRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUVUsZUFBZSxPQUF1QjtBQUM5QyxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTVSxnQkFBZ0IsT0FBeUI7QUFDakQsV0FBTyxNQUFNLFNBQVMsS0FBSyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLENBQUM7QUFBQSxFQUN0RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUW1CLG9CQUFvQixjQUErQztBQUNwRixXQUFPLEtBQUssZ0JBQVksMkJBQU8sWUFBWSxDQUFDO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFtQixxQkFBcUIsZUFBa0Q7QUFDeEYsV0FBTyxLQUFLLGlCQUFhLG1DQUFlLGFBQWEsQ0FBQztBQUFBLEVBQ3hEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWdCVSxhQUFhLE9BQWtDO0FBQ3ZELFFBQUksVUFBZ0M7QUFDcEMsZUFBVyxRQUFRLE9BQU87QUFDeEIsb0JBQVUsb0JBQU0sU0FBUyxNQUFNLEtBQUssWUFBWSxJQUFJLENBQUM7QUFBQSxJQUN2RDtBQUVBLFFBQUksU0FBUztBQUNYLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVtQiw0QkFBNEIsY0FBNkIsUUFBZ0IsTUFBK0I7QUFDekgsUUFBSSxLQUFDLDJCQUFPLFlBQVksR0FBRztBQUN6QixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sS0FBSyxvQkFBb0IsY0FBYyxRQUFRLElBQUk7QUFBQSxFQUM1RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVtQiw2QkFBNkIsZUFBZ0MsUUFBZ0IsTUFBK0I7QUFDN0gsUUFBSSxDQUFDLGNBQWMsTUFBTSxDQUFDLFVBQU0sMkJBQU8sQ0FBQyxDQUFDLEdBQUc7QUFDMUMsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPLEtBQUsseUJBQXFCLG1DQUFlLGFBQWEsR0FBRyxRQUFRLElBQUk7QUFBQSxFQUM5RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVVLG9CQUFvQixPQUFjLFNBQWlCLE9BQWdDO0FBQzNGLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVVUscUJBQXFCLFFBQWlCLFNBQWlCLE9BQWdDO0FBQy9GLFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
284
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvZmlsZS1jb21tYW5kLWhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGZpbGUtc3BlY2lmaWMgY29tbWFuZHMgKFRGaWxlIG9ubHksIG5vdCBURm9sZGVyKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFRBYnN0cmFjdEZpbGUsXG4gIFRGaWxlLFxuICBXb3Jrc3BhY2VMZWFmXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyxcbiAgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnVQYXJhbXMsXG4gIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyU2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudVBhcmFtc1xufSBmcm9tICcuL2Fic3RyYWN0LWZpbGUtY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHsgY2hhaW4gfSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQge1xuICBhc0FycmF5T2ZGaWxlcyxcbiAgYXNGaWxlLFxuICBpc0ZpbGVcbn0gZnJvbSAnLi4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXIgfSBmcm9tICcuL2Fic3RyYWN0LWZpbGUtY29tbWFuZC1oYW5kbGVyLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgRmlsZUNvbW1hbmRIYW5kbGVyLnNob3VsZEFkZFRvRmlsZU1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVDb21tYW5kSGFuZGxlclNob3VsZEFkZFRvRmlsZU1lbnVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGZpbGUuXG4gICAqL1xuICByZWFkb25seSBmaWxlOiBURmlsZTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSBsZWFmPzogdW5kZWZpbmVkIHwgV29ya3NwYWNlTGVhZjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgRmlsZUNvbW1hbmRIYW5kbGVyLnNob3VsZEFkZFRvRmlsZXNNZW51fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0ZpbGVzTWVudVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZXMuXG4gICAqL1xuICByZWFkb25seSBmaWxlczogVEZpbGVbXTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSBsZWFmPzogdW5kZWZpbmVkIHwgV29ya3NwYWNlTGVhZjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGZpbGUtc3BlY2lmaWMgY29tbWFuZHMuXG4gKlxuICogRmlsdGVycyBhYnN0cmFjdCBmaWxlcyB0byBvbmx5IGFjY2VwdCB7QGxpbmsgVEZpbGV9IGluc3RhbmNlcy5cbiAqIFN1YmNsYXNzZXMgb3ZlcnJpZGUge0BsaW5rIGNhbkV4ZWN1dGVGaWxlfSBhbmQge0BsaW5rIGV4ZWN1dGVGaWxlfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpbGVDb21tYW5kSGFuZGxlciBleHRlbmRzIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZmlsZSBjb21tYW5kIGhhbmRsZXIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZpbGUgY29tbWFuZCBoYW5kbGVyLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIEluaGVyaXRzIHBhcmVudCdzIHBhcmFtcyB0eXBlLlxuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRvIG9ubHkgYWNjZXB0IFRGaWxlIGluc3RhbmNlcywgdGhlbiBkZWxlZ2F0ZXMgdG8ge0BsaW5rIGNhbkV4ZWN1dGVGaWxlfS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjYW5FeGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0ZpbGUoYWJzdHJhY3RGaWxlKSAmJiB0aGlzLmNhbkV4ZWN1dGVGaWxlKGFic3RyYWN0RmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyB0byBvbmx5IGFjY2VwdCBURmlsZSBhcnJheXMsIHRoZW4gZGVsZWdhdGVzIHRvIHtAbGluayBjYW5FeGVjdXRlRmlsZXN9LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXM6IFRBYnN0cmFjdEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhYnN0cmFjdEZpbGVzLmV2ZXJ5KChmKSA9PiBpc0ZpbGUoZikpICYmIHRoaXMuY2FuRXhlY3V0ZUZpbGVzKGFzQXJyYXlPZkZpbGVzKGFic3RyYWN0RmlsZXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZSBmb3IgYSBzaW5nbGUgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIF9maWxlIC0gVGhlIGZpbGUuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FuRXhlY3V0ZUZpbGUoX2ZpbGU6IFRGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIG11bHRpcGxlIGZpbGVzLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGNoZWNrcyBlYWNoIGZpbGUgaW5kaXZpZHVhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZXMgLSBUaGUgZmlsZXMuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FuRXhlY3V0ZUZpbGVzKGZpbGVzOiBURmlsZVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpbGVzLmxlbmd0aCA+IDAgJiYgZmlsZXMuZXZlcnkoKGYpID0+IHRoaXMuY2FuRXhlY3V0ZUZpbGUoZikpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGVnYXRlcyB0byB7QGxpbmsgZXhlY3V0ZUZpbGV9LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBgUHJvbWlzYWJsZTx2b2lkPmAgdGhhdCByZXNvbHZlcyB3aGVuIGFic3RyYWN0IGZpbGUgaGFkIGJlZW4gZXhlY3V0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUpOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlRmlsZShhc0ZpbGUoYWJzdHJhY3RGaWxlKSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZWdhdGVzIHRvIHtAbGluayBleGVjdXRlRmlsZXN9LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKiBAcmV0dXJucyBgUHJvbWlzYWJsZTx2b2lkPmAgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBhYnN0cmFjdCBmaWxlcyBoYXZlIGJlZW4gZXhlY3V0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdKTogUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUZpbGVzKGFzQXJyYXlPZkZpbGVzKGFic3RyYWN0RmlsZXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCBmb3IgYSBzaW5nbGUgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZS5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlRmlsZShmaWxlOiBURmlsZSk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciBtdWx0aXBsZSBmaWxlcy5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBleGVjdXRlcyBzZXF1ZW50aWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlcyAtIFRoZSBmaWxlcy5cbiAgICogQHJldHVybnMgYFByb21pc2FibGU8dm9pZD5gIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgZmlsZXMgaGF2ZSBiZWVuIGV4ZWN1dGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGV4ZWN1dGVGaWxlcyhmaWxlczogVEZpbGVbXSk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIGxldCBwcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBwcm9taXNlID0gY2hhaW4ocHJvbWlzZSwgKCkgPT4gdGhpcy5leGVjdXRlRmlsZShmaWxlKSk7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UpIHtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRvIG9ubHkgc2hvdyBtZW51IGZvciBURmlsZSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHNpbmdsZS1maWxlIG1lbnUgY2hlY2suXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlIG1lbnUuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gT3ZlcnJpZGUga2VlcHMgdGhlIGJhc2UgY2xhc3MgcGFyYW0gdHlwZS5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZEFkZFRvQWJzdHJhY3RGaWxlTWVudShwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyU2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51UGFyYW1zKTogYm9vbGVhbiB7XG4gICAgY29uc3Qge1xuICAgICAgYWJzdHJhY3RGaWxlLFxuICAgICAgbGVhZixcbiAgICAgIHNvdXJjZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgaWYgKCFpc0ZpbGUoYWJzdHJhY3RGaWxlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaG91bGRBZGRUb0ZpbGVNZW51KHtcbiAgICAgIGZpbGU6IGFic3RyYWN0RmlsZSxcbiAgICAgIGxlYWYsXG4gICAgICBzb3VyY2VcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRvIG9ubHkgc2hvdyBtZW51IGZvciBURmlsZSBhcnJheXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIG11bHRpLWZpbGUgbWVudSBjaGVjay5cbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gdGhlIGZpbGVzIG1lbnUuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gT3ZlcnJpZGUga2VlcHMgdGhlIGJhc2UgY2xhc3MgcGFyYW0gdHlwZS5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZEFkZFRvQWJzdHJhY3RGaWxlc01lbnUocGFyYW1zOiBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlclNob3VsZEFkZFRvQWJzdHJhY3RGaWxlc01lbnVQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7XG4gICAgICBhYnN0cmFjdEZpbGVzLFxuICAgICAgbGVhZixcbiAgICAgIHNvdXJjZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgaWYgKCFhYnN0cmFjdEZpbGVzLmV2ZXJ5KChmKSA9PiBpc0ZpbGUoZikpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNob3VsZEFkZFRvRmlsZXNNZW51KHtcbiAgICAgIGZpbGVzOiBhc0FycmF5T2ZGaWxlcyhhYnN0cmFjdEZpbGVzKSxcbiAgICAgIGxlYWYsXG4gICAgICBzb3VyY2VcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBzaW5nbGUtZmlsZSBjb250ZXh0IG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHNpbmdsZS1maWxlIG1lbnUgY2hlY2suXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9GaWxlTWVudShwYXJhbXM6IEZpbGVDb21tYW5kSGFuZGxlclNob3VsZEFkZFRvRmlsZU1lbnVQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGZpbGU6IF9maWxlLCBsZWFmOiBfbGVhZiwgc291cmNlOiBfc291cmNlIH0gPSBwYXJhbXM7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIG11bHRpLWZpbGUgY29udGV4dCBtZW51LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBtdWx0aS1maWxlIG1lbnUgY2hlY2suXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlcyBtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvRmlsZXNNZW51KHBhcmFtczogRmlsZUNvbW1hbmRIYW5kbGVyU2hvdWxkQWRkVG9GaWxlc01lbnVQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGZpbGVzOiBfZmlsZXMsIGxlYWY6IF9sZWFmLCBzb3VyY2U6IF9zb3VyY2UgfSA9IHBhcmFtcztcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxtQkFBc0I7QUFDdEIseUJBSU87QUFDUCwyQ0FBMkM7QUFnRHBDLE1BQWUsMkJBQTJCLGdFQUEyQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT25FLFlBQVksUUFBcUQ7QUFDdEUsVUFBTSxNQUFNO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUW1CLHVCQUF1QixjQUFzQztBQUM5RSxlQUFPLDJCQUFPLFlBQVksS0FBSyxLQUFLLGVBQWUsWUFBWTtBQUFBLEVBQ2pFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRbUIsd0JBQXdCLGVBQXlDO0FBQ2xGLFdBQU8sY0FBYyxNQUFNLENBQUMsVUFBTSwyQkFBTyxDQUFDLENBQUMsS0FBSyxLQUFLLG9CQUFnQixtQ0FBZSxhQUFhLENBQUM7QUFBQSxFQUNwRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUVUsZUFBZSxPQUF1QjtBQUM5QyxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTVSxnQkFBZ0IsT0FBeUI7QUFDakQsV0FBTyxNQUFNLFNBQVMsS0FBSyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLENBQUM7QUFBQSxFQUN0RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUW1CLG9CQUFvQixjQUErQztBQUNwRixXQUFPLEtBQUssZ0JBQVksMkJBQU8sWUFBWSxDQUFDO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFtQixxQkFBcUIsZUFBa0Q7QUFDeEYsV0FBTyxLQUFLLGlCQUFhLG1DQUFlLGFBQWEsQ0FBQztBQUFBLEVBQ3hEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWdCVSxhQUFhLE9BQWtDO0FBQ3ZELFFBQUksVUFBZ0M7QUFDcEMsZUFBVyxRQUFRLE9BQU87QUFDeEIsb0JBQVUsb0JBQU0sU0FBUyxNQUFNLEtBQUssWUFBWSxJQUFJLENBQUM7QUFBQSxJQUN2RDtBQUVBLFFBQUksU0FBUztBQUNYLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTbUIsNEJBQTRCLFFBQThFO0FBQzNILFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixRQUFJLEtBQUMsMkJBQU8sWUFBWSxHQUFHO0FBQ3pCLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxLQUFLLG9CQUFvQjtBQUFBLE1BQzlCLE1BQU07QUFBQSxNQUNOO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU21CLDZCQUE2QixRQUErRTtBQUM3SCxVQUFNO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixJQUFJO0FBQ0osUUFBSSxDQUFDLGNBQWMsTUFBTSxDQUFDLFVBQU0sMkJBQU8sQ0FBQyxDQUFDLEdBQUc7QUFDMUMsYUFBTztBQUFBLElBQ1Q7QUFDQSxXQUFPLEtBQUsscUJBQXFCO0FBQUEsTUFDL0IsV0FBTyxtQ0FBZSxhQUFhO0FBQUEsTUFDbkM7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUVUsb0JBQW9CLFFBQThEO0FBQzFGLFVBQU0sRUFBRSxNQUFNLE9BQU8sTUFBTSxPQUFPLFFBQVEsUUFBUSxJQUFJO0FBQ3RELFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRVSxxQkFBcUIsUUFBK0Q7QUFDNUYsVUFBTSxFQUFFLE9BQU8sUUFBUSxNQUFNLE9BQU8sUUFBUSxRQUFRLElBQUk7QUFDeEQsV0FBTztBQUFBLEVBQ1Q7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K