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
@@ -115,8 +115,22 @@ class AbstractFileCommandHandler extends GlobalCommandHandler {
115
115
  async onRegistered(context) {
116
116
  await super.onRegistered(context);
117
117
  this._activeFileProvider = context.activeFileProvider;
118
- context.menuEventRegistrar.registerFileMenuEventHandler(this.handleAbstractFileMenu.bind(this));
119
- context.menuEventRegistrar.registerFilesMenuEventHandler(this.handleAbstractFilesMenu.bind(this));
118
+ context.menuEventRegistrar.registerFileMenuEventHandler((menu, abstractFile, source, leaf) => {
119
+ this.handleAbstractFileMenu({
120
+ abstractFile,
121
+ leaf,
122
+ menu,
123
+ source
124
+ });
125
+ });
126
+ context.menuEventRegistrar.registerFilesMenuEventHandler((menu, abstractFiles, source, leaf) => {
127
+ this.handleAbstractFilesMenu({
128
+ abstractFiles,
129
+ leaf,
130
+ menu,
131
+ source
132
+ });
133
+ });
120
134
  }
121
135
  /**
122
136
  * Checks whether the command can execute from the command palette.
@@ -196,25 +210,28 @@ class AbstractFileCommandHandler extends GlobalCommandHandler {
196
210
  /**
197
211
  * Checks whether the command should appear in the single-file context menu.
198
212
  *
199
- * @param _abstractFile - The file or folder.
200
- * @param _source - The source of the event.
201
- * @param _leaf - The workspace leaf, if available.
213
+ * @param params - The parameters for the single-file menu check.
202
214
  * @returns Whether to add to the file menu.
203
215
  */
204
- shouldAddToAbstractFileMenu(_abstractFile, _source, _leaf) {
216
+ shouldAddToAbstractFileMenu(params) {
217
+ const { abstractFile: _abstractFile, leaf: _leaf, source: _source } = params;
205
218
  return false;
206
219
  }
207
220
  /**
208
221
  * Checks whether the command should appear in the multi-file context menu.
209
222
  * Default implementation checks each file individually.
210
223
  *
211
- * @param abstractFiles - The files or folders.
212
- * @param source - The source of the event.
213
- * @param leaf - The workspace leaf, if available.
224
+ * @param params - The parameters for the multi-file menu check.
214
225
  * @returns Whether to add to the files menu.
215
226
  */
216
- shouldAddToAbstractFilesMenu(abstractFiles, source, leaf) {
217
- return abstractFiles.every((f) => this.shouldAddToAbstractFileMenu(f, source, leaf));
227
+ shouldAddToAbstractFilesMenu(params) {
228
+ return params.abstractFiles.every(
229
+ (f) => this.shouldAddToAbstractFileMenu({
230
+ abstractFile: f,
231
+ leaf: params.leaf,
232
+ source: params.source
233
+ })
234
+ );
218
235
  }
219
236
  /**
220
237
  * Checks whether the command should appear in the command palette.
@@ -224,8 +241,18 @@ class AbstractFileCommandHandler extends GlobalCommandHandler {
224
241
  shouldAddToCommandPalette() {
225
242
  return true;
226
243
  }
227
- handleAbstractFileMenu(menu, abstractFile, source, leaf) {
228
- if (!this.shouldAddToAbstractFileMenu(abstractFile, source, leaf)) {
244
+ handleAbstractFileMenu(params) {
245
+ const {
246
+ abstractFile,
247
+ leaf,
248
+ menu,
249
+ source
250
+ } = params;
251
+ if (!this.shouldAddToAbstractFileMenu({
252
+ abstractFile,
253
+ leaf,
254
+ source
255
+ })) {
229
256
  return;
230
257
  }
231
258
  if (!this.canExecuteAbstractFile(abstractFile)) {
@@ -242,8 +269,18 @@ class AbstractFileCommandHandler extends GlobalCommandHandler {
242
269
  item.setTitle(this.fileMenuItemName ?? this.name).setIcon(this.icon).setSection(section).onClick(convertAsyncToSync(async () => this.executeAbstractFile(abstractFile)));
243
270
  });
244
271
  }
245
- handleAbstractFilesMenu(menu, abstractFiles, source, leaf) {
246
- if (!this.shouldAddToAbstractFilesMenu(abstractFiles, source, leaf)) {
272
+ handleAbstractFilesMenu(params) {
273
+ const {
274
+ abstractFiles,
275
+ leaf,
276
+ menu,
277
+ source
278
+ } = params;
279
+ if (!this.shouldAddToAbstractFilesMenu({
280
+ abstractFiles,
281
+ leaf,
282
+ source
283
+ })) {
247
284
  return;
248
285
  }
249
286
  if (!this.canExecuteAbstractFiles(abstractFiles)) {
@@ -264,4 +301,4 @@ class AbstractFileCommandHandler extends GlobalCommandHandler {
264
301
  export {
265
302
  AbstractFileCommandHandler
266
303
  };
267
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGFic3RyYWN0IGZpbGUgY29tbWFuZHMgd2l0aCBmaWxlL2ZpbGVzIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBJY29uTmFtZSxcbiAgTWVudSxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IEFjdGl2ZUZpbGVQcm92aWRlciB9IGZyb20gJy4uL2FjdGl2ZS1maWxlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyxcbiAgQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0XG59IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHtcbiAgY2hhaW4sXG4gIGNvbnZlcnRBc3luY1RvU3luY1xufSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IEdsb2JhbENvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi9nbG9iYWwtY29tbWFuZC1oYW5kbGVyLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBhbiBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIGV4dGVuZHMgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGljb24gdG8gdXNlIGluIHRoZSBzaW5nbGUtZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlc01lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlc01lbnVTZWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgdGhlIGNvbW1hbmQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29tbWFuZCBoYW5kbGVyIGZvciBhYnN0cmFjdCBmaWxlIGNvbW1hbmRzLlxuICpcbiAqIEhhbmRsZXMgYm90aCBzaW5nbGUtZmlsZSBhbmQgbXVsdGktZmlsZSBjb250ZXh0IG1lbnVzLlxuICogU3ViY2xhc3NlcyBvdmVycmlkZSB7QGxpbmsgY2FuRXhlY3V0ZUFic3RyYWN0RmlsZX0gYW5kIHtAbGluayBleGVjdXRlQWJzdHJhY3RGaWxlfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyIGV4dGVuZHMgR2xvYmFsQ29tbWFuZEhhbmRsZXIge1xuICAvKipcbiAgICogR2V0IHRoZSBhY3RpdmUgZmlsZSBwcm92aWRlci5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFjdGl2ZSBmaWxlIHByb3ZpZGVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBhY3RpdmVGaWxlUHJvdmlkZXIoKTogQWN0aXZlRmlsZVByb3ZpZGVyIHtcbiAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5fYWN0aXZlRmlsZVByb3ZpZGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBzaW5nbGUtZmlsZSBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byB1c2UgdGhlIGNvbW1hbmQgbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZU1lbnVJdGVtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWxlTWVudUl0ZW1OYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBzaW5nbGUtZmlsZSBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2VjdGlvbiBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byB1c2UgdGhlIHBsdWdpbiBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlTWVudVNlY3Rpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZU1lbnVTZWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGljb24gdG8gdXNlIGluIHRoZSBzaW5nbGUtZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgdW5kZWZpbmVkYCBmb3Igbm8gaWNvbi5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZU1lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVNZW51U3VibWVudUljb247XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byBmYWxsIGJhY2sgdG8gc2luZ2xlLWZpbGUgaXRlbSBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlc01lbnVJdGVtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWxlc01lbnVJdGVtTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2VjdGlvbiBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byBmYWxsIGJhY2sgdG8gc2luZ2xlLWZpbGUgc2VjdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZXNNZW51U2VjdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWxlc01lbnVTZWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGljb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGljb24sIG9yIGB1bmRlZmluZWRgIHRvIGZhbGwgYmFjayB0byBzaW5nbGUtZmlsZSBzdWJtZW51IGljb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVzTWVudVN1Ym1lbnVJY29uKCk6IEljb25OYW1lIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51U3VibWVudUljb247XG4gIH1cblxuICBwcml2YXRlIF9hY3RpdmVGaWxlUHJvdmlkZXI/OiBBY3RpdmVGaWxlUHJvdmlkZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZU1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlc01lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYWJzdHJhY3QgZmlsZSBjb21tYW5kIGhhbmRsZXIuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgICB0aGlzLl9maWxlTWVudUl0ZW1OYW1lID0gcGFyYW1zLmZpbGVNZW51SXRlbU5hbWU7XG4gICAgdGhpcy5fZmlsZU1lbnVTZWN0aW9uID0gcGFyYW1zLmZpbGVNZW51U2VjdGlvbjtcbiAgICB0aGlzLl9maWxlTWVudVN1Ym1lbnVJY29uID0gcGFyYW1zLmZpbGVNZW51U3VibWVudUljb247XG4gICAgdGhpcy5fZmlsZXNNZW51SXRlbU5hbWUgPSBwYXJhbXMuZmlsZXNNZW51SXRlbU5hbWU7XG4gICAgdGhpcy5fZmlsZXNNZW51U2VjdGlvbiA9IHBhcmFtcy5maWxlc01lbnVTZWN0aW9uO1xuICAgIHRoaXMuX2ZpbGVzTWVudVN1Ym1lbnVJY29uID0gcGFyYW1zLmZpbGVzTWVudVN1Ym1lbnVJY29uO1xuICAgIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPSBwYXJhbXMuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgZmlsZS1tZW51IGFuZCBmaWxlcy1tZW51IGV2ZW50IGhhbmRsZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSByZWdpc3RyYXRpb24gY29udGV4dC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvblJlZ2lzdGVyZWQoY29udGV4dDogQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIub25SZWdpc3RlcmVkKGNvbnRleHQpO1xuICAgIHRoaXMuX2FjdGl2ZUZpbGVQcm92aWRlciA9IGNvbnRleHQuYWN0aXZlRmlsZVByb3ZpZGVyO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRmlsZU1lbnVFdmVudEhhbmRsZXIodGhpcy5oYW5kbGVBYnN0cmFjdEZpbGVNZW51LmJpbmQodGhpcykpO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKHRoaXMuaGFuZGxlQWJzdHJhY3RGaWxlc01lbnUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZnJvbSB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKiBVc2VzIHRoZSBhY3RpdmUgZmlsZSBhcyB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbkV4ZWN1dGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNob3VsZEFkZFRvQ29tbWFuZFBhbGV0dGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUZpbGUgPSB0aGlzLmdldEFjdGl2ZUZpbGUoKTtcbiAgICByZXR1cm4gISFhY3RpdmVGaWxlICYmIHRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShhY3RpdmVGaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZSBmb3IgYSBzaW5nbGUgYWJzdHJhY3QgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIF9hYnN0cmFjdEZpbGUgLSBUaGUgZmlsZSBvciBmb2xkZXIuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShfYWJzdHJhY3RGaWxlOiBUQWJzdHJhY3RGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIG11bHRpcGxlIGFic3RyYWN0IGZpbGVzLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGNoZWNrcyBlYWNoIGZpbGUgaW5kaXZpZHVhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXM6IFRBYnN0cmFjdEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhYnN0cmFjdEZpbGVzLmxlbmd0aCA+IDAgJiYgYWJzdHJhY3RGaWxlcy5ldmVyeSgoZikgPT4gdGhpcy5jYW5FeGVjdXRlQWJzdHJhY3RGaWxlKGYpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCBmcm9tIHRoZSBjb21tYW5kIHBhbGV0dGUgdXNpbmcgdGhlIGFjdGl2ZSBmaWxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBgUHJvbWlzYWJsZTx2b2lkPmAgdGhhdCByZXNvbHZlcyB3aGVuIGNvbW1hbmQgaGFkIGJlZW4gZXhlY3V0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZXhlY3V0ZSgpOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBhY3RpdmVGaWxlID0gdGhpcy5nZXRBY3RpdmVGaWxlKCk7XG4gICAgaWYgKGFjdGl2ZUZpbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGVBYnN0cmFjdEZpbGUoYWN0aXZlRmlsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciBhIHNpbmdsZSBhYnN0cmFjdCBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGV4ZWN1dGVBYnN0cmFjdEZpbGUoYWJzdHJhY3RGaWxlOiBUQWJzdHJhY3RGaWxlKTogUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZm9yIG11bHRpcGxlIGFic3RyYWN0IGZpbGVzLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGV4ZWN1dGVzIHNlcXVlbnRpYWxseS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZXMgLSBUaGUgZmlsZXMgb3IgZm9sZGVycy5cbiAgICogQHJldHVybnMgYFByb21pc2FibGU8dm9pZD5gIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgYWJzdHJhY3QgZmlsZXMgaGF2ZSBiZWVuIGV4ZWN1dGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXM6IFRBYnN0cmFjdEZpbGVbXSk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIGxldCBwcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGFic3RyYWN0RmlsZXMpIHtcbiAgICAgIHByb21pc2UgPSBjaGFpbihwcm9taXNlLCAoKSA9PiB0aGlzLmV4ZWN1dGVBYnN0cmFjdEZpbGUoZmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYWN0aXZlIGZpbGUsIGlmIGFueSwgdG8gdXNlIGFzIHRoZSB0YXJnZXQgd2hlbiBleGVjdXRpbmcgZnJvbSB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgYWN0aXZlIGZpbGUgb3IgYG51bGxgIGlmIG5vbmUgaXMgYWN0aXZlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEFjdGl2ZUZpbGUoKTogbnVsbCB8IFRBYnN0cmFjdEZpbGUge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZpbGVQcm92aWRlci5nZXRBY3RpdmVGaWxlKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgc2luZ2xlLWZpbGUgY29udGV4dCBtZW51LlxuICAgKlxuICAgKiBAcGFyYW0gX2Fic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIF9sZWFmIC0gVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51KF9hYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUsIF9zb3VyY2U6IHN0cmluZywgX2xlYWY/OiBXb3Jrc3BhY2VMZWFmKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIG11bHRpLWZpbGUgY29udGV4dCBtZW51LlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGNoZWNrcyBlYWNoIGZpbGUgaW5kaXZpZHVhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBsZWFmIC0gVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlcyBtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvQWJzdHJhY3RGaWxlc01lbnUoYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdLCBzb3VyY2U6IHN0cmluZywgbGVhZj86IFdvcmtzcGFjZUxlYWYpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlcy5ldmVyeSgoZikgPT4gdGhpcy5zaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUoZiwgc291cmNlLCBsZWFmKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvQ29tbWFuZFBhbGV0dGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFic3RyYWN0RmlsZU1lbnUobWVudTogTWVudSwgYWJzdHJhY3RGaWxlOiBUQWJzdHJhY3RGaWxlLCBzb3VyY2U6IHN0cmluZywgbGVhZj86IFdvcmtzcGFjZUxlYWYpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51KGFic3RyYWN0RmlsZSwgc291cmNlLCBsZWFmKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5FeGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZWN0aW9uID0gdGhpcy5maWxlTWVudVNlY3Rpb24gPz8gdGhpcy5wbHVnaW5OYW1lO1xuICAgIGlmICh0aGlzLnNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKSkge1xuICAgICAgbWVudS5zZXRTZWN0aW9uU3VibWVudShzZWN0aW9uLCB7XG4gICAgICAgIGljb246IHRoaXMuZmlsZU1lbnVTdWJtZW51SWNvbiA/PyAnJyxcbiAgICAgICAgdGl0bGU6IHNlY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgaXRlbVxuICAgICAgICAuc2V0VGl0bGUodGhpcy5maWxlTWVudUl0ZW1OYW1lID8/IHRoaXMubmFtZSlcbiAgICAgICAgLnNldEljb24odGhpcy5pY29uKVxuICAgICAgICAuc2V0U2VjdGlvbihzZWN0aW9uKVxuICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWJzdHJhY3RGaWxlc01lbnUobWVudTogTWVudSwgYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdLCBzb3VyY2U6IHN0cmluZywgbGVhZj86IFdvcmtzcGFjZUxlYWYpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudShhYnN0cmFjdEZpbGVzLCBzb3VyY2UsIGxlYWYpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNhbkV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZmlsZXNNZW51U2VjdGlvbiA/PyB0aGlzLmZpbGVNZW51U2VjdGlvbiA/PyB0aGlzLnBsdWdpbk5hbWU7XG4gICAgaWYgKHRoaXMuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSgpKSB7XG4gICAgICBtZW51LnNldFNlY3Rpb25TdWJtZW51KHNlY3Rpb24sIHtcbiAgICAgICAgaWNvbjogdGhpcy5maWxlc01lbnVTdWJtZW51SWNvbiA/PyB0aGlzLmZpbGVNZW51U3VibWVudUljb24gPz8gJycsXG4gICAgICAgIHRpdGxlOiBzZWN0aW9uXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtZW51LmFkZEl0ZW0oKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW1cbiAgICAgICAgLnNldFRpdGxlKHRoaXMuZmlsZXNNZW51SXRlbU5hbWUgPz8gdGhpcy5maWxlTWVudUl0ZW1OYW1lID8/IHRoaXMubmFtZSlcbiAgICAgICAgLnNldEljb24odGhpcy5pY29uKVxuICAgICAgICAuc2V0U2VjdGlvbihzZWN0aW9uKVxuICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4gdGhpcy5leGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzKSkpO1xuICAgIH0pO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsNEJBQTRCO0FBZ0Q5QixNQUFlLG1DQUFtQyxxQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNNUUsSUFBYyxxQkFBeUM7QUFDckQsV0FBTyxrQkFBa0IsS0FBSyxtQkFBbUI7QUFBQSxFQUNuRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsbUJBQXVDO0FBQ25ELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLGtCQUFzQztBQUNsRCxXQUFPLEtBQUs7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
304
+ //# 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+IHRoaXMuZXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlcykpKTtcbiAgICB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLDRCQUE0QjtBQTBJOUIsTUFBZSxtQ0FBbUMscUJBQXFCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTTVFLElBQWMscUJBQXlDO0FBQ3JELFdBQU8sa0JBQWtCLEtBQUssbUJBQW1CO0FBQUEsRUFDbkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLG1CQUF1QztBQUNuRCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyxrQkFBc0M7QUFDbEQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsc0JBQTRDO0FBQ3hELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLG9CQUF3QztBQUNwRCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyxtQkFBdUM7QUFDbkQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsdUJBQTZDO0FBQ3pELFdBQU8sS0FBSztBQUFB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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.mjs';
10
10
  import { CommandHandler } from './command-handler.mjs';
@@ -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
  *
@@ -74,7 +74,11 @@ class EditorCommandHandler extends CommandHandler {
74
74
  */
75
75
  buildCommand() {
76
76
  return {
77
- editorCheckCallback: (checking, editor, ctx) => this.editorCheckCallback(checking, editor, ctx),
77
+ editorCheckCallback: (checking, editor, ctx) => this.editorCheckCallback({
78
+ checking,
79
+ ctx,
80
+ editor
81
+ }),
78
82
  icon: this.icon,
79
83
  id: this.id,
80
84
  name: this.name
@@ -87,7 +91,13 @@ class EditorCommandHandler extends CommandHandler {
87
91
  */
88
92
  async onRegistered(context) {
89
93
  await super.onRegistered(context);
90
- context.menuEventRegistrar.registerEditorMenuEventHandler(this.handleEditorMenu.bind(this));
94
+ context.menuEventRegistrar.registerEditorMenuEventHandler((menu, editor, ctx) => {
95
+ this.handleEditorMenu({
96
+ ctx,
97
+ editor,
98
+ menu
99
+ });
100
+ });
91
101
  }
92
102
  /**
93
103
  * Checks whether the command can execute for the given editor and context.
@@ -125,7 +135,12 @@ class EditorCommandHandler extends CommandHandler {
125
135
  shouldAddToEditorMenu(_editor, _ctx) {
126
136
  return false;
127
137
  }
128
- editorCheckCallback(checking, editor, ctx) {
138
+ editorCheckCallback(params) {
139
+ const {
140
+ checking,
141
+ ctx,
142
+ editor
143
+ } = params;
129
144
  if (!this.shouldAddToCommandPalette()) {
130
145
  return false;
131
146
  }
@@ -137,7 +152,12 @@ class EditorCommandHandler extends CommandHandler {
137
152
  }
138
153
  return true;
139
154
  }
140
- handleEditorMenu(menu, editor, ctx) {
155
+ handleEditorMenu(params) {
156
+ const {
157
+ ctx,
158
+ editor,
159
+ menu
160
+ } = params;
141
161
  if (!this.shouldAddToEditorMenu(editor, ctx)) {
142
162
  return;
143
163
  }
@@ -159,4 +179,4 @@ class EditorCommandHandler extends CommandHandler {
159
179
  export {
160
180
  EditorCommandHandler
161
181
  };
162
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvZWRpdG9yLWNvbW1hbmQtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgZWRpdG9yIGNvbW1hbmRzIHdpdGggb3B0aW9uYWwgZWRpdG9yIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kLFxuICBFZGl0b3IsXG4gIEljb25OYW1lLFxuICBNYXJrZG93bkZpbGVJbmZvLFxuICBNZW51XG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyxcbiAgQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0XG59IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseVxufSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBhbiBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckNvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMgZXh0ZW5kcyBDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvck1lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvck1lbnVTZWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51IHN1Ym1lbnUuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3JNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgdGhlIGNvbW1hbmQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29tbWFuZCBoYW5kbGVyIGZvciBlZGl0b3IgY29tbWFuZHMuXG4gKlxuICogU3ViY2xhc3NlcyBvdmVycmlkZSB7QGxpbmsgY2FuRXhlY3V0ZUVkaXRvcn0gYW5kIHtAbGluayBleGVjdXRlRWRpdG9yfSB0byBwcm92aWRlIGJlaGF2aW9yLlxuICogT3B0aW9uYWxseSBpbnRlZ3JhdGVzIHdpdGggdGhlIGVkaXRvciBjb250ZXh0IG1lbnUgdmlhIHtAbGluayBzaG91bGRBZGRUb0VkaXRvck1lbnV9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWRpdG9yQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBDb21tYW5kSGFuZGxlciB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBjb21tYW5kIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGVkaXRvck1lbnVJdGVtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51SXRlbU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2VjdGlvbiBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byB1c2UgdGhlIHBsdWdpbiBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBlZGl0b3JNZW51U2VjdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgZWRpdG9yIG1lbnUgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGljb24sIG9yIGB1bmRlZmluZWRgIGZvciBubyBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBlZGl0b3JNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51U3VibWVudUljb247XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZWRpdG9yTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRvck1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRWRpdG9yQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5fZWRpdG9yTWVudUl0ZW1OYW1lID0gcGFyYW1zLmVkaXRvck1lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9lZGl0b3JNZW51U2VjdGlvbiA9IHBhcmFtcy5lZGl0b3JNZW51U2VjdGlvbjtcbiAgICB0aGlzLl9lZGl0b3JNZW51U3VibWVudUljb24gPSBwYXJhbXMuZWRpdG9yTWVudVN1Ym1lbnVJY29uO1xuICAgIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPSBwYXJhbXMuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBwbGFpbiBPYnNpZGlhbiB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0IHdpdGggYW4gYGVkaXRvckNoZWNrQ2FsbGJhY2tgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGJ1aWxkQ29tbWFuZCgpOiBDb21tYW5kIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yQ2hlY2tDYWxsYmFjazogKGNoZWNraW5nLCBlZGl0b3IsIGN0eCkgPT4gdGhpcy5lZGl0b3JDaGVja0NhbGxiYWNrKGNoZWNraW5nLCBlZGl0b3IsIGN0eCksXG4gICAgICBpY29uOiB0aGlzLmljb24sXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBlZGl0b3ItbWVudSBldmVudCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSByZWdpc3RyYXRpb24gY29udGV4dC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBvblJlZ2lzdGVyZWQoY29udGV4dDogQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIub25SZWdpc3RlcmVkKGNvbnRleHQpO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRWRpdG9yTWVudUV2ZW50SGFuZGxlcih0aGlzLmhhbmRsZUVkaXRvck1lbnUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIHRoZSBnaXZlbiBlZGl0b3IgYW5kIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBfZWRpdG9yIC0gVGhlIGVkaXRvciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIF9jdHggLSBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVFZGl0b3IoX2VkaXRvcjogRWRpdG9yLCBfY3R4OiBNYXJrZG93bkZpbGVJbmZvKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZm9yIHRoZSBnaXZlbiBlZGl0b3IgYW5kIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBlZGl0b3IgLSBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIG1hcmtkb3duIGZpbGUgY29udGV4dC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlRWRpdG9yKGVkaXRvcjogRWRpdG9yLCBjdHg6IE1hcmtkb3duRmlsZUluZm8pOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvQ29tbWFuZFBhbGV0dGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgZWRpdG9yIGNvbnRleHQgbWVudS5cbiAgICpcbiAgICogQHBhcmFtIF9lZGl0b3IgLSBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gX2N0eCAtIFRoZSBtYXJrZG93biBmaWxlIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBlZGl0b3IgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0VkaXRvck1lbnUoX2VkaXRvcjogRWRpdG9yLCBfY3R4OiBNYXJrZG93bkZpbGVJbmZvKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBlZGl0b3JDaGVja0NhbGxiYWNrKGNoZWNraW5nOiBib29sZWFuLCBlZGl0b3I6IEVkaXRvciwgY3R4OiBNYXJrZG93bkZpbGVJbmZvKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNob3VsZEFkZFRvQ29tbWFuZFBhbGV0dGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5FeGVjdXRlRWRpdG9yKGVkaXRvciwgY3R4KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghY2hlY2tpbmcpIHtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHRoaXMuZXhlY3V0ZUVkaXRvcihlZGl0b3IsIGN0eCkpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFZGl0b3JNZW51KG1lbnU6IE1lbnUsIGVkaXRvcjogRWRpdG9yLCBjdHg6IE1hcmtkb3duRmlsZUluZm8pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkQWRkVG9FZGl0b3JNZW51KGVkaXRvciwgY3R4KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5FeGVjdXRlRWRpdG9yKGVkaXRvciwgY3R4KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmVkaXRvck1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmVkaXRvck1lbnVTdWJtZW51SWNvbiA/PyAnJyxcbiAgICAgICAgdGl0bGU6IHNlY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lbnUuYWRkSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgaXRlbVxuICAgICAgICAuc2V0VGl0bGUodGhpcy5lZGl0b3JNZW51SXRlbU5hbWUgPz8gdGhpcy5uYW1lKVxuICAgICAgICAuc2V0SWNvbih0aGlzLmljb24pXG4gICAgICAgIC5zZXRTZWN0aW9uKHNlY3Rpb24pXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB0aGlzLmV4ZWN1dGVFZGl0b3IoZWRpdG9yLCBjdHgpKSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxzQkFBc0I7QUFpQ3hCLE1BQWUsNkJBQTZCLGVBQWU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNaEUsSUFBYyxxQkFBeUM7QUFDckQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsb0JBQXdDO0FBQ3BELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHdCQUE4QztBQUMxRCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFaUI7QUFBQSxFQUVBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPVixZQUFZLFFBQStDO0FBQ2hFLFVBQU0sTUFBTTtBQUNaLFNBQUssc0JBQXNCLE9BQU87QUFDbEMsU0FBSyxxQkFBcUIsT0FBTztBQUNqQyxTQUFLLHlCQUF5QixPQUFPO0FBQ3JDLFNBQUssNkJBQTZCLE9BQU87QUFBQSxFQUMzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9nQixlQUF3QjtBQUN0QyxXQUFPO0FBQUEsTUFDTCxxQkFBcUIsQ0FBQyxVQUFVLFFBQVEsUUFBUSxLQUFLLG9CQUFvQixVQUFVLFFBQVEsR0FBRztBQUFBLE1BQzlGLE1BQU0sS0FBSztBQUFBLE1BQ1gsSUFBSSxLQUFLO0FBQUEsTUFDVCxNQUFNLEtBQUs7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE1BQXNCLGFBQWEsU0FBMkQ7QUFDNUYsVUFBTSxNQUFNLGFBQWEsT0FBTztBQUNoQyxZQUFRLG1CQUFtQiwrQkFBK0IsS0FBSyxpQkFBaUIsS0FBSyxJQUFJLENBQUM7QUFBQSxFQUM1RjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTVSxpQkFBaUIsU0FBaUIsTUFBaUM7QUFDM0UsV0FBTztBQUFBLEVBQ1Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFlVSw0QkFBaUQ7QUFDekQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9VLDRCQUFxQztBQUM3QyxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFTVSxzQkFBc0IsU0FBaUIsTUFBaUM7QUFDaEYsV0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUVRLG9CQUFvQixVQUFtQixRQUFnQixLQUFnQztBQUM3RixRQUFJLENBQUMsS0FBSywwQkFBMEIsR0FBRztBQUNyQyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksQ0FBQyxLQUFLLGlCQUFpQixRQUFRLEdBQUcsR0FBRztBQUN2QyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksQ0FBQyxVQUFVO0FBQ2Isd0JBQWtCLE1BQU0sS0FBSyxjQUFjLFFBQVEsR0FBRyxDQUFDO0FBQUEsSUFDekQ7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRVEsaUJBQWlCLE1BQVksUUFBZ0IsS0FBNkI7QUFDaEYsUUFBSSxDQUFDLEtBQUssc0JBQXNCLFFBQVEsR0FBRyxHQUFHO0FBQzVDO0FBQUEsSUFDRjtBQUVBLFFBQUksQ0FBQyxLQUFLLGlCQUFpQixRQUFRLEdBQUcsR0FBRztBQUN2QztBQUFBLElBQ0Y7QUFFQSxVQUFNLFVBQVUsS0FBSyxxQkFBcUIsS0FBSztBQUMvQyxRQUFJLEtBQUssMEJBQTBCLEdBQUc7QUFDcEMsV0FBSyxrQkFBa0IsU0FBUztBQUFBLFFBQzlCLE1BQU0sS0FBSyx5QkFBeUI7QUFBQSxRQUNwQyxPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDSDtBQUVBLFNBQUssUUFBUSxDQUFDLFNBQVM7QUFDckIsV0FDRyxTQUFTLEtBQUssc0JBQXNCLEtBQUssSUFBSSxFQUM3QyxRQUFRLEtBQUssSUFBSSxFQUNqQixXQUFXLE9BQU8sRUFDbEIsUUFBUSxtQkFBbUIsWUFBWSxLQUFLLGNBQWMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFBLElBQzVFLENBQUM7QUFBQSxFQUNIO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
182
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvZWRpdG9yLWNvbW1hbmQtaGFuZGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgZWRpdG9yIGNvbW1hbmRzIHdpdGggb3B0aW9uYWwgZWRpdG9yIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kLFxuICBFZGl0b3IsXG4gIEljb25OYW1lLFxuICBNYXJrZG93bkZpbGVJbmZvLFxuICBNZW51XG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyxcbiAgQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0XG59IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHtcbiAgY29udmVydEFzeW5jVG9TeW5jLFxuICBpbnZva2VBc3luY1NhZmVseVxufSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBhbiBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckNvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMgZXh0ZW5kcyBDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvck1lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvck1lbnVTZWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51IHN1Ym1lbnUuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3JNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgdGhlIGNvbW1hbmQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEVkaXRvckNvbW1hbmRIYW5kbGVyLmVkaXRvckNoZWNrQ2FsbGJhY2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckNvbW1hbmRIYW5kbGVyRWRpdG9yQ2hlY2tDYWxsYmFja1BhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIE9ic2lkaWFuIGlzIG9ubHkgY2hlY2tpbmcgYXZhaWxhYmlsaXR5IChub3QgZXhlY3V0aW5nKS5cbiAgICovXG4gIHJlYWRvbmx5IGNoZWNraW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgY3R4OiBNYXJrZG93bkZpbGVJbmZvO1xuXG4gIC8qKlxuICAgKiBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yOiBFZGl0b3I7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEVkaXRvckNvbW1hbmRIYW5kbGVyLmhhbmRsZUVkaXRvck1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckNvbW1hbmRIYW5kbGVySGFuZGxlRWRpdG9yTWVudVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgY3R4OiBNYXJrZG93bkZpbGVJbmZvO1xuXG4gIC8qKlxuICAgKiBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yOiBFZGl0b3I7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW51IHRvIGFkZCBpdGVtcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IG1lbnU6IE1lbnU7XG59XG5cbi8qKlxuICogQ29tbWFuZCBoYW5kbGVyIGZvciBlZGl0b3IgY29tbWFuZHMuXG4gKlxuICogU3ViY2xhc3NlcyBvdmVycmlkZSB7QGxpbmsgY2FuRXhlY3V0ZUVkaXRvcn0gYW5kIHtAbGluayBleGVjdXRlRWRpdG9yfSB0byBwcm92aWRlIGJlaGF2aW9yLlxuICogT3B0aW9uYWxseSBpbnRlZ3JhdGVzIHdpdGggdGhlIGVkaXRvciBjb250ZXh0IG1lbnUgdmlhIHtAbGluayBzaG91bGRBZGRUb0VkaXRvck1lbnV9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWRpdG9yQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBDb21tYW5kSGFuZGxlciB7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBlZGl0b3IgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBjb21tYW5kIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGVkaXRvck1lbnVJdGVtTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51SXRlbU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIGVkaXRvciBtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2VjdGlvbiBuYW1lLCBvciBgdW5kZWZpbmVkYCB0byB1c2UgdGhlIHBsdWdpbiBuYW1lLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBlZGl0b3JNZW51U2VjdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgZWRpdG9yIG1lbnUgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGljb24sIG9yIGB1bmRlZmluZWRgIGZvciBubyBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBlZGl0b3JNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JNZW51U3VibWVudUljb247XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZWRpdG9yTWVudVNlY3Rpb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRvck1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0b3IgY29tbWFuZCBoYW5kbGVyLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogRWRpdG9yQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5fZWRpdG9yTWVudUl0ZW1OYW1lID0gcGFyYW1zLmVkaXRvck1lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9lZGl0b3JNZW51U2VjdGlvbiA9IHBhcmFtcy5lZGl0b3JNZW51U2VjdGlvbjtcbiAgICB0aGlzLl9lZGl0b3JNZW51U3VibWVudUljb24gPSBwYXJhbXMuZWRpdG9yTWVudVN1Ym1lbnVJY29uO1xuICAgIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUgPSBwYXJhbXMuc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBwbGFpbiBPYnNpZGlhbiB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0IHdpdGggYW4gYGVkaXRvckNoZWNrQ2FsbGJhY2tgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29tbWFuZH0gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGJ1aWxkQ29tbWFuZCgpOiBDb21tYW5kIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yQ2hlY2tDYWxsYmFjazogKGNoZWNraW5nLCBlZGl0b3IsIGN0eCkgPT5cbiAgICAgICAgdGhpcy5lZGl0b3JDaGVja0NhbGxiYWNrKHtcbiAgICAgICAgICBjaGVja2luZyxcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgIH0pLFxuICAgICAgaWNvbjogdGhpcy5pY29uLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgZWRpdG9yLW1lbnUgZXZlbnQgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgcmVnaXN0cmF0aW9uIGNvbnRleHQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25SZWdpc3RlcmVkKGNvbnRleHQ6IENvbW1hbmRIYW5kbGVyUmVnaXN0cmF0aW9uQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLm9uUmVnaXN0ZXJlZChjb250ZXh0KTtcbiAgICBjb250ZXh0Lm1lbnVFdmVudFJlZ2lzdHJhci5yZWdpc3RlckVkaXRvck1lbnVFdmVudEhhbmRsZXIoKG1lbnUsIGVkaXRvciwgY3R4KSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZUVkaXRvck1lbnUoe1xuICAgICAgICBjdHgsXG4gICAgICAgIGVkaXRvcixcbiAgICAgICAgbWVudVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIHRoZSBnaXZlbiBlZGl0b3IgYW5kIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBfZWRpdG9yIC0gVGhlIGVkaXRvciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIF9jdHggLSBUaGUgbWFya2Rvd24gZmlsZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNhbkV4ZWN1dGVFZGl0b3IoX2VkaXRvcjogRWRpdG9yLCBfY3R4OiBNYXJrZG93bkZpbGVJbmZvKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZm9yIHRoZSBnaXZlbiBlZGl0b3IgYW5kIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBlZGl0b3IgLSBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIG1hcmtkb3duIGZpbGUgY29udGV4dC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlRWRpdG9yKGVkaXRvcjogRWRpdG9yLCBjdHg6IE1hcmtkb3duRmlsZUluZm8pOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdG8gYWRkIHRoZSBjb21tYW5kIHRvIGEgc3VibWVudS5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvQ29tbWFuZFBhbGV0dGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgZWRpdG9yIGNvbnRleHQgbWVudS5cbiAgICpcbiAgICogQHBhcmFtIF9lZGl0b3IgLSBUaGUgZWRpdG9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gX2N0eCAtIFRoZSBtYXJrZG93biBmaWxlIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBlZGl0b3IgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0VkaXRvck1lbnUoX2VkaXRvcjogRWRpdG9yLCBfY3R4OiBNYXJrZG93bkZpbGVJbmZvKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBlZGl0b3JDaGVja0NhbGxiYWNrKHBhcmFtczogRWRpdG9yQ29tbWFuZEhhbmRsZXJFZGl0b3JDaGVja0NhbGxiYWNrUGFyYW1zKTogYm9vbGVhbiB7XG4gICAgY29uc3Qge1xuICAgICAgY2hlY2tpbmcsXG4gICAgICBjdHgsXG4gICAgICBlZGl0b3JcbiAgICB9ID0gcGFyYW1zO1xuICAgIGlmICghdGhpcy5zaG91bGRBZGRUb0NvbW1hbmRQYWxldHRlKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2FuRXhlY3V0ZUVkaXRvcihlZGl0b3IsIGN0eCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWNoZWNraW5nKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmV4ZWN1dGVFZGl0b3IoZWRpdG9yLCBjdHgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRWRpdG9yTWVudShwYXJhbXM6IEVkaXRvckNvbW1hbmRIYW5kbGVySGFuZGxlRWRpdG9yTWVudVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGN0eCxcbiAgICAgIGVkaXRvcixcbiAgICAgIG1lbnVcbiAgICB9ID0gcGFyYW1zO1xuICAgIGlmICghdGhpcy5zaG91bGRBZGRUb0VkaXRvck1lbnUoZWRpdG9yLCBjdHgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNhbkV4ZWN1dGVFZGl0b3IoZWRpdG9yLCBjdHgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZWRpdG9yTWVudVNlY3Rpb24gPz8gdGhpcy5wbHVnaW5OYW1lO1xuICAgIGlmICh0aGlzLnNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKSkge1xuICAgICAgbWVudS5zZXRTZWN0aW9uU3VibWVudShzZWN0aW9uLCB7XG4gICAgICAgIGljb246IHRoaXMuZWRpdG9yTWVudVN1Ym1lbnVJY29uID8/ICcnLFxuICAgICAgICB0aXRsZTogc2VjdGlvblxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVudS5hZGRJdGVtKChpdGVtKSA9PiB7XG4gICAgICBpdGVtXG4gICAgICAgIC5zZXRUaXRsZSh0aGlzLmVkaXRvck1lbnVJdGVtTmFtZSA/PyB0aGlzLm5hbWUpXG4gICAgICAgIC5zZXRJY29uKHRoaXMuaWNvbilcbiAgICAgICAgLnNldFNlY3Rpb24oc2VjdGlvbilcbiAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHRoaXMuZXhlY3V0ZUVkaXRvcihlZGl0b3IsIGN0eCkpKTtcbiAgICB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHNCQUFzQjtBQXlFeEIsTUFBZSw2QkFBNkIsZUFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1oRSxJQUFjLHFCQUF5QztBQUNyRCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyxvQkFBd0M7QUFDcEQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsd0JBQThDO0FBQzFELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUVpQjtBQUFBLEVBRUE7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBK0M7QUFDaEUsVUFBTSxNQUFNO0FBQ1osU0FBSyxzQkFBc0IsT0FBTztBQUNsQyxTQUFLLHFCQUFxQixPQUFPO0FBQ2pDLFNBQUsseUJBQXlCLE9BQU87QUFDckMsU0FBSyw2QkFBNkIsT0FBTztBQUFBLEVBQzNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT2dCLGVBQXdCO0FBQ3RDLFdBQU87QUFBQSxNQUNMLHFCQUFxQixDQUFDLFVBQVUsUUFBUSxRQUN0QyxLQUFLLG9CQUFvQjtBQUFBLFFBQ3ZCO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFBQSxNQUNILE1BQU0sS0FBSztBQUFBLE1BQ1gsSUFBSSxLQUFLO0FBQUEsTUFDVCxNQUFNLEtBQUs7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE1BQXNCLGFBQWEsU0FBMkQ7QUFDNUYsVUFBTSxNQUFNLGFBQWEsT0FBTztBQUNoQyxZQUFRLG1CQUFtQiwrQkFBK0IsQ0FBQyxNQUFNLFFBQVEsUUFBUTtBQUMvRSxXQUFLLGlCQUFpQjtBQUFBLFFBQ3BCO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNVLGlCQUFpQixTQUFpQixNQUFpQztBQUMzRSxXQUFPO0FBQUEsRUFDVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWVVLDRCQUFpRDtBQUN6RCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1UsNEJBQXFDO0FBQzdDLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNVLHNCQUFzQixTQUFpQixNQUFpQztBQUNoRixXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRVEsb0JBQW9CLFFBQWdFO0FBQzFGLFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixRQUFJLENBQUMsS0FBSywwQkFBMEIsR0FBRztBQUNyQyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksQ0FBQyxLQUFLLGlCQUFpQixRQUFRLEdBQUcsR0FBRztBQUN2QyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksQ0FBQyxVQUFVO0FBQ2Isd0JBQWtCLE1BQU0sS0FBSyxjQUFjLFFBQVEsR0FBRyxDQUFDO0FBQUEsSUFDekQ7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRVEsaUJBQWlCLFFBQTBEO0FBQ2pGLFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUk7QUFDSixRQUFJLENBQUMsS0FBSyxzQkFBc0IsUUFBUSxHQUFHLEdBQUc7QUFDNUM7QUFBQSxJQUNGO0FBRUEsUUFBSSxDQUFDLEtBQUssaUJBQWlCLFFBQVEsR0FBRyxHQUFHO0FBQ3ZDO0FBQUEsSUFDRjtBQUVBLFVBQU0sVUFBVSxLQUFLLHFCQUFxQixLQUFLO0FBQy9DLFFBQUksS0FBSywwQkFBMEIsR0FBRztBQUNwQyxXQUFLLGtCQUFrQixTQUFTO0FBQUEsUUFDOUIsTUFBTSxLQUFLLHlCQUF5QjtBQUFBLFFBQ3BDLE9BQU87QUFBQSxNQUNULENBQUM7QUFBQSxJQUNIO0FBRUEsU0FBSyxRQUFRLENBQUMsU0FBUztBQUNyQixXQUNHLFNBQVMsS0FBSyxzQkFBc0IsS0FBSyxJQUFJLEVBQzdDLFFBQVEsS0FBSyxJQUFJLEVBQ2pCLFdBQVcsT0FBTyxFQUNsQixRQUFRLG1CQUFtQixZQUFZLEtBQUssY0FBYyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQUEsSUFDNUUsQ0FBQztBQUFBLEVBQ0g7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -6,8 +6,42 @@
6
6
  */
7
7
  import type { TAbstractFile, TFile, WorkspaceLeaf } from 'obsidian';
8
8
  import type { Promisable } from 'type-fest';
9
- import type { AbstractFileCommandHandlerConstructorParams } from './abstract-file-command-handler.mjs';
9
+ import type { AbstractFileCommandHandlerConstructorParams, AbstractFileCommandHandlerShouldAddToAbstractFileMenuParams, AbstractFileCommandHandlerShouldAddToAbstractFilesMenuParams } from './abstract-file-command-handler.mjs';
10
10
  import { AbstractFileCommandHandler } from './abstract-file-command-handler.mjs';
11
+ /**
12
+ * Parameters for {@link FileCommandHandler.shouldAddToFileMenu}.
13
+ */
14
+ export interface FileCommandHandlerShouldAddToFileMenuParams {
15
+ /**
16
+ * The file.
17
+ */
18
+ readonly file: TFile;
19
+ /**
20
+ * The workspace leaf, if available.
21
+ */
22
+ readonly leaf?: undefined | WorkspaceLeaf;
23
+ /**
24
+ * The source of the event.
25
+ */
26
+ readonly source: string;
27
+ }
28
+ /**
29
+ * Parameters for {@link FileCommandHandler.shouldAddToFilesMenu}.
30
+ */
31
+ export interface FileCommandHandlerShouldAddToFilesMenuParams {
32
+ /**
33
+ * The files.
34
+ */
35
+ readonly files: TFile[];
36
+ /**
37
+ * The workspace leaf, if available.
38
+ */
39
+ readonly leaf?: undefined | WorkspaceLeaf;
40
+ /**
41
+ * The source of the event.
42
+ */
43
+ readonly source: string;
44
+ }
11
45
  /**
12
46
  * Command handler for file-specific commands.
13
47
  *
@@ -81,37 +115,29 @@ export declare abstract class FileCommandHandler extends AbstractFileCommandHand
81
115
  /**
82
116
  * Filters to only show menu for TFile instances.
83
117
  *
84
- * @param abstractFile - The file or folder.
85
- * @param source - The source of the event.
86
- * @param leaf - The workspace leaf, if available.
118
+ * @param params - The parameters for the single-file menu check.
87
119
  * @returns Whether to add to the file menu.
88
120
  */
89
- protected shouldAddToAbstractFileMenu(abstractFile: TAbstractFile, source: string, leaf?: WorkspaceLeaf): boolean;
121
+ protected shouldAddToAbstractFileMenu(params: AbstractFileCommandHandlerShouldAddToAbstractFileMenuParams): boolean;
90
122
  /**
91
123
  * Filters to only show menu for TFile arrays.
92
124
  *
93
- * @param abstractFiles - The files or folders.
94
- * @param source - The source of the event.
95
- * @param leaf - The workspace leaf, if available.
125
+ * @param params - The parameters for the multi-file menu check.
96
126
  * @returns Whether to add to the files menu.
97
127
  */
98
- protected shouldAddToAbstractFilesMenu(abstractFiles: TAbstractFile[], source: string, leaf?: WorkspaceLeaf): boolean;
128
+ protected shouldAddToAbstractFilesMenu(params: AbstractFileCommandHandlerShouldAddToAbstractFilesMenuParams): boolean;
99
129
  /**
100
130
  * Checks whether the command should appear in the single-file context menu.
101
131
  *
102
- * @param _file - The file.
103
- * @param _source - The source of the event.
104
- * @param _leaf - The workspace leaf, if available.
132
+ * @param params - The parameters for the single-file menu check.
105
133
  * @returns Whether to add to the file menu.
106
134
  */
107
- protected shouldAddToFileMenu(_file: TFile, _source: string, _leaf?: WorkspaceLeaf): boolean;
135
+ protected shouldAddToFileMenu(params: FileCommandHandlerShouldAddToFileMenuParams): boolean;
108
136
  /**
109
137
  * Checks whether the command should appear in the multi-file context menu.
110
138
  *
111
- * @param _files - The files.
112
- * @param _source - The source of the event.
113
- * @param _leaf - The workspace leaf, if available.
139
+ * @param params - The parameters for the multi-file menu check.
114
140
  * @returns Whether to add to the files menu.
115
141
  */
116
- protected shouldAddToFilesMenu(_files: TFile[], _source: string, _leaf?: WorkspaceLeaf): boolean;
142
+ protected shouldAddToFilesMenu(params: FileCommandHandlerShouldAddToFilesMenuParams): boolean;
117
143
  }
@@ -112,55 +112,69 @@ class FileCommandHandler extends AbstractFileCommandHandler {
112
112
  /**
113
113
  * Filters to only show menu for TFile instances.
114
114
  *
115
- * @param abstractFile - The file or folder.
116
- * @param source - The source of the event.
117
- * @param leaf - The workspace leaf, if available.
115
+ * @param params - The parameters for the single-file menu check.
118
116
  * @returns Whether to add to the file menu.
119
117
  */
120
- shouldAddToAbstractFileMenu(abstractFile, source, leaf) {
118
+ // eslint-disable-next-line obsidian-dev-utils/params-options-name-match -- Override keeps the base class param type.
119
+ shouldAddToAbstractFileMenu(params) {
120
+ const {
121
+ abstractFile,
122
+ leaf,
123
+ source
124
+ } = params;
121
125
  if (!isFile(abstractFile)) {
122
126
  return false;
123
127
  }
124
- return this.shouldAddToFileMenu(abstractFile, source, leaf);
128
+ return this.shouldAddToFileMenu({
129
+ file: abstractFile,
130
+ leaf,
131
+ source
132
+ });
125
133
  }
126
134
  /**
127
135
  * Filters to only show menu for TFile arrays.
128
136
  *
129
- * @param abstractFiles - The files or folders.
130
- * @param source - The source of the event.
131
- * @param leaf - The workspace leaf, if available.
137
+ * @param params - The parameters for the multi-file menu check.
132
138
  * @returns Whether to add to the files menu.
133
139
  */
134
- shouldAddToAbstractFilesMenu(abstractFiles, source, leaf) {
140
+ // eslint-disable-next-line obsidian-dev-utils/params-options-name-match -- Override keeps the base class param type.
141
+ shouldAddToAbstractFilesMenu(params) {
142
+ const {
143
+ abstractFiles,
144
+ leaf,
145
+ source
146
+ } = params;
135
147
  if (!abstractFiles.every((f) => isFile(f))) {
136
148
  return false;
137
149
  }
138
- return this.shouldAddToFilesMenu(asArrayOfFiles(abstractFiles), source, leaf);
150
+ return this.shouldAddToFilesMenu({
151
+ files: asArrayOfFiles(abstractFiles),
152
+ leaf,
153
+ source
154
+ });
139
155
  }
140
156
  /**
141
157
  * Checks whether the command should appear in the single-file context menu.
142
158
  *
143
- * @param _file - The file.
144
- * @param _source - The source of the event.
145
- * @param _leaf - The workspace leaf, if available.
159
+ * @param params - The parameters for the single-file menu check.
146
160
  * @returns Whether to add to the file menu.
147
161
  */
148
- shouldAddToFileMenu(_file, _source, _leaf) {
162
+ shouldAddToFileMenu(params) {
163
+ const { file: _file, leaf: _leaf, source: _source } = params;
149
164
  return false;
150
165
  }
151
166
  /**
152
167
  * Checks whether the command should appear in the multi-file context menu.
153
168
  *
154
- * @param _files - The files.
155
- * @param _source - The source of the event.
156
- * @param _leaf - The workspace leaf, if available.
169
+ * @param params - The parameters for the multi-file menu check.
157
170
  * @returns Whether to add to the files menu.
158
171
  */
159
- shouldAddToFilesMenu(_files, _source, _leaf) {
172
+ shouldAddToFilesMenu(params) {
173
+ const { files: _files, leaf: _leaf, source: _source } = params;
160
174
  return false;
161
175
  }
162
176
  }
163
177
  export {
164
178
  FileCommandHandler
165
179
  };
166
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvZmlsZS1jb21tYW5kLWhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGZpbGUtc3BlY2lmaWMgY29tbWFuZHMgKFRGaWxlIG9ubHksIG5vdCBURm9sZGVyKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFRBYnN0cmFjdEZpbGUsXG4gIFRGaWxlLFxuICBXb3Jrc3BhY2VMZWFmXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMnO1xuXG5pbXBvcnQgeyBjaGFpbiB9IGZyb20gJy4uLy4uL2FzeW5jLnRzJztcbmltcG9ydCB7XG4gIGFzQXJyYXlPZkZpbGVzLFxuICBhc0ZpbGUsXG4gIGlzRmlsZVxufSBmcm9tICcuLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgeyBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlciB9IGZyb20gJy4vYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMnO1xuXG4vKipcbiAqIENvbW1hbmQgaGFuZGxlciBmb3IgZmlsZS1zcGVjaWZpYyBjb21tYW5kcy5cbiAqXG4gKiBGaWx0ZXJzIGFic3RyYWN0IGZpbGVzIHRvIG9ubHkgYWNjZXB0IHtAbGluayBURmlsZX0gaW5zdGFuY2VzLlxuICogU3ViY2xhc3NlcyBvdmVycmlkZSB7QGxpbmsgY2FuRXhlY3V0ZUZpbGV9IGFuZCB7QGxpbmsgZXhlY3V0ZUZpbGV9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRmlsZUNvbW1hbmRIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmlsZSBjb21tYW5kIGhhbmRsZXIuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gSW5oZXJpdHMgcGFyZW50J3MgcGFyYW1zIHR5cGUuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgdG8gb25seSBhY2NlcHQgVEZpbGUgaW5zdGFuY2VzLCB0aGVuIGRlbGVnYXRlcyB0byB7QGxpbmsgY2FuRXhlY3V0ZUZpbGV9LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoYWJzdHJhY3RGaWxlOiBUQWJzdHJhY3RGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRmlsZShhYnN0cmFjdEZpbGUpICYmIHRoaXMuY2FuRXhlY3V0ZUZpbGUoYWJzdHJhY3RGaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRvIG9ubHkgYWNjZXB0IFRGaWxlIGFycmF5cywgdGhlbiBkZWxlZ2F0ZXMgdG8ge0BsaW5rIGNhbkV4ZWN1dGVGaWxlc30uXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2FuRXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFic3RyYWN0RmlsZXMuZXZlcnkoKGYpID0+IGlzRmlsZShmKSkgJiYgdGhpcy5jYW5FeGVjdXRlRmlsZXMoYXNBcnJheU9mRmlsZXMoYWJzdHJhY3RGaWxlcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZvciBhIHNpbmdsZSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gX2ZpbGUgLSBUaGUgZmlsZS5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBjYW5FeGVjdXRlRmlsZShfZmlsZTogVEZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZSBmb3IgbXVsdGlwbGUgZmlsZXMuXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gY2hlY2tzIGVhY2ggZmlsZSBpbmRpdmlkdWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlcyAtIFRoZSBmaWxlcy5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBjYW5FeGVjdXRlRmlsZXMoZmlsZXM6IFRGaWxlW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmlsZXMubGVuZ3RoID4gMCAmJiBmaWxlcy5ldmVyeSgoZikgPT4gdGhpcy5jYW5FeGVjdXRlRmlsZShmKSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZWdhdGVzIHRvIHtAbGluayBleGVjdXRlRmlsZX0uXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGUgLSBUaGUgZmlsZSBvciBmb2xkZXIuXG4gICAqIEByZXR1cm5zIGBQcm9taXNhYmxlPHZvaWQ+YCB0aGF0IHJlc29sdmVzIHdoZW4gYWJzdHJhY3QgZmlsZSBoYWQgYmVlbiBleGVjdXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBleGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVGaWxlKGFzRmlsZShhYnN0cmFjdEZpbGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxlZ2F0ZXMgdG8ge0BsaW5rIGV4ZWN1dGVGaWxlc30uXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEByZXR1cm5zIGBQcm9taXNhYmxlPHZvaWQ+YCB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIGFic3RyYWN0IGZpbGVzIGhhdmUgYmVlbiBleGVjdXRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBleGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlRmlsZXMoYXNBcnJheU9mRmlsZXMoYWJzdHJhY3RGaWxlcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciBhIHNpbmdsZSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGV4ZWN1dGVGaWxlKGZpbGU6IFRGaWxlKTogUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZm9yIG11bHRpcGxlIGZpbGVzLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGV4ZWN1dGVzIHNlcXVlbnRpYWxseS5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVzIC0gVGhlIGZpbGVzLlxuICAgKiBAcmV0dXJucyBgUHJvbWlzYWJsZTx2b2lkPmAgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBmaWxlcyBoYXZlIGJlZW4gZXhlY3V0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZXhlY3V0ZUZpbGVzKGZpbGVzOiBURmlsZVtdKTogUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgbGV0IHByb21pc2U6IG51bGwgfCBQcm9taXNlPHZvaWQ+ID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIHByb21pc2UgPSBjaGFpbihwcm9taXNlLCAoKSA9PiB0aGlzLmV4ZWN1dGVGaWxlKGZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgdG8gb25seSBzaG93IG1lbnUgZm9yIFRGaWxlIGluc3RhbmNlcy5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gbGVhZiAtIFRoZSB3b3Jrc3BhY2UgbGVhZiwgaWYgYXZhaWxhYmxlLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byB0aGUgZmlsZSBtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZEFkZFRvQWJzdHJhY3RGaWxlTWVudShhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUsIHNvdXJjZTogc3RyaW5nLCBsZWFmPzogV29ya3NwYWNlTGVhZik6IGJvb2xlYW4ge1xuICAgIGlmICghaXNGaWxlKGFic3RyYWN0RmlsZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQWRkVG9GaWxlTWVudShhYnN0cmFjdEZpbGUsIHNvdXJjZSwgbGVhZik7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyB0byBvbmx5IHNob3cgbWVudSBmb3IgVEZpbGUgYXJyYXlzLlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBsZWFmIC0gVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlcyBtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZEFkZFRvQWJzdHJhY3RGaWxlc01lbnUoYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdLCBzb3VyY2U6IHN0cmluZywgbGVhZj86IFdvcmtzcGFjZUxlYWYpOiBib29sZWFuIHtcbiAgICBpZiAoIWFic3RyYWN0RmlsZXMuZXZlcnkoKGYpID0+IGlzRmlsZShmKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkQWRkVG9GaWxlc01lbnUoYXNBcnJheU9mRmlsZXMoYWJzdHJhY3RGaWxlcyksIHNvdXJjZSwgbGVhZik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgc2luZ2xlLWZpbGUgY29udGV4dCBtZW51LlxuICAgKlxuICAgKiBAcGFyYW0gX2ZpbGUgLSBUaGUgZmlsZS5cbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIF9sZWFmIC0gVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9GaWxlTWVudShfZmlsZTogVEZpbGUsIF9zb3VyY2U6IHN0cmluZywgX2xlYWY/OiBXb3Jrc3BhY2VMZWFmKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIG11bHRpLWZpbGUgY29udGV4dCBtZW51LlxuICAgKlxuICAgKiBAcGFyYW0gX2ZpbGVzIC0gVGhlIGZpbGVzLlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gX2xlYWYgLSBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gdGhlIGZpbGVzIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9GaWxlc01lbnUoX2ZpbGVzOiBURmlsZVtdLCBfc291cmNlOiBzdHJpbmcsIF9sZWFmPzogV29ya3NwYWNlTGVhZik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQSxTQUFTLGFBQWE7QUFDdEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxrQ0FBa0M7QUFRcEMsTUFBZSwyQkFBMkIsMkJBQTJCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPbkUsWUFBWSxRQUFxRDtBQUN0RSxVQUFNLE1BQU07QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRbUIsdUJBQXVCLGNBQXNDO0FBQzlFLFdBQU8sT0FBTyxZQUFZLEtBQUssS0FBSyxlQUFlLFlBQVk7QUFBQSxFQUNqRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUW1CLHdCQUF3QixlQUF5QztBQUNsRixXQUFPLGNBQWMsTUFBTSxDQUFDLE1BQU0sT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLGdCQUFnQixlQUFlLGFBQWEsQ0FBQztBQUFBLEVBQ3BHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRVSxlQUFlLE9BQXVCO0FBQzlDLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNVLGdCQUFnQixPQUF5QjtBQUNqRCxXQUFPLE1BQU0sU0FBUyxLQUFLLE1BQU0sTUFBTSxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsQ0FBQztBQUFBLEVBQ3RFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRbUIsb0JBQW9CLGNBQStDO0FBQ3BGLFdBQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxDQUFDO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFtQixxQkFBcUIsZUFBa0Q7QUFDeEYsV0FBTyxLQUFLLGFBQWEsZUFBZSxhQUFhLENBQUM7QUFBQSxFQUN4RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFnQlUsYUFBYSxPQUFrQztBQUN2RCxRQUFJLFVBQWdDO0FBQ3BDLGVBQVcsUUFBUSxPQUFPO0FBQ3hCLGdCQUFVLE1BQU0sU0FBUyxNQUFNLEtBQUssWUFBWSxJQUFJLENBQUM7QUFBQSxJQUN2RDtBQUVBLFFBQUksU0FBUztBQUNYLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVtQiw0QkFBNEIsY0FBNkIsUUFBZ0IsTUFBK0I7QUFDekgsUUFBSSxDQUFDLE9BQU8sWUFBWSxHQUFHO0FBQ3pCLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxLQUFLLG9CQUFvQixjQUFjLFFBQVEsSUFBSTtBQUFBLEVBQzVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVW1CLDZCQUE2QixlQUFnQyxRQUFnQixNQUErQjtBQUM3SCxRQUFJLENBQUMsY0FBYyxNQUFNLENBQUMsTUFBTSxPQUFPLENBQUMsQ0FBQyxHQUFHO0FBQzFDLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxLQUFLLHFCQUFxQixlQUFlLGFBQWEsR0FBRyxRQUFRLElBQUk7QUFBQSxFQUM5RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVVLG9CQUFvQixPQUFjLFNBQWlCLE9BQWdDO0FBQzNGLFdBQU87QUFBQSxFQUNUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVVUscUJBQXFCLFFBQWlCLFNBQWlCLE9BQWdDO0FBQy9GLFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
180
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvZmlsZS1jb21tYW5kLWhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGZpbGUtc3BlY2lmaWMgY29tbWFuZHMgKFRGaWxlIG9ubHksIG5vdCBURm9sZGVyKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIFRBYnN0cmFjdEZpbGUsXG4gIFRGaWxlLFxuICBXb3Jrc3BhY2VMZWFmXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyxcbiAgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnVQYXJhbXMsXG4gIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyU2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudVBhcmFtc1xufSBmcm9tICcuL2Fic3RyYWN0LWZpbGUtY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHsgY2hhaW4gfSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQge1xuICBhc0FycmF5T2ZGaWxlcyxcbiAgYXNGaWxlLFxuICBpc0ZpbGVcbn0gZnJvbSAnLi4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RGaWxlQ29tbWFuZEhhbmRsZXIgfSBmcm9tICcuL2Fic3RyYWN0LWZpbGUtY29tbWFuZC1oYW5kbGVyLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgRmlsZUNvbW1hbmRIYW5kbGVyLnNob3VsZEFkZFRvRmlsZU1lbnV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVDb21tYW5kSGFuZGxlclNob3VsZEFkZFRvRmlsZU1lbnVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGZpbGUuXG4gICAqL1xuICByZWFkb25seSBmaWxlOiBURmlsZTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSBsZWFmPzogdW5kZWZpbmVkIHwgV29ya3NwYWNlTGVhZjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgRmlsZUNvbW1hbmRIYW5kbGVyLnNob3VsZEFkZFRvRmlsZXNNZW51fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlQ29tbWFuZEhhbmRsZXJTaG91bGRBZGRUb0ZpbGVzTWVudVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZXMuXG4gICAqL1xuICByZWFkb25seSBmaWxlczogVEZpbGVbXTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBsZWFmLCBpZiBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSBsZWFmPzogdW5kZWZpbmVkIHwgV29ya3NwYWNlTGVhZjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGZpbGUtc3BlY2lmaWMgY29tbWFuZHMuXG4gKlxuICogRmlsdGVycyBhYnN0cmFjdCBmaWxlcyB0byBvbmx5IGFjY2VwdCB7QGxpbmsgVEZpbGV9IGluc3RhbmNlcy5cbiAqIFN1YmNsYXNzZXMgb3ZlcnJpZGUge0BsaW5rIGNhbkV4ZWN1dGVGaWxlfSBhbmQge0BsaW5rIGV4ZWN1dGVGaWxlfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpbGVDb21tYW5kSGFuZGxlciBleHRlbmRzIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZmlsZSBjb21tYW5kIGhhbmRsZXIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZpbGUgY29tbWFuZCBoYW5kbGVyLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIEluaGVyaXRzIHBhcmVudCdzIHBhcmFtcyB0eXBlLlxuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRvIG9ubHkgYWNjZXB0IFRGaWxlIGluc3RhbmNlcywgdGhlbiBkZWxlZ2F0ZXMgdG8ge0BsaW5rIGNhbkV4ZWN1dGVGaWxlfS5cbiAgICpcbiAgICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBjYW5FeGVjdXRlQWJzdHJhY3RGaWxlKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0ZpbGUoYWJzdHJhY3RGaWxlKSAmJiB0aGlzLmNhbkV4ZWN1dGVGaWxlKGFic3RyYWN0RmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyB0byBvbmx5IGFjY2VwdCBURmlsZSBhcnJheXMsIHRoZW4gZGVsZWdhdGVzIHRvIHtAbGluayBjYW5FeGVjdXRlRmlsZXN9LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbkV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXM6IFRBYnN0cmFjdEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhYnN0cmFjdEZpbGVzLmV2ZXJ5KChmKSA9PiBpc0ZpbGUoZikpICYmIHRoaXMuY2FuRXhlY3V0ZUZpbGVzKGFzQXJyYXlPZkZpbGVzKGFic3RyYWN0RmlsZXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZSBmb3IgYSBzaW5nbGUgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIF9maWxlIC0gVGhlIGZpbGUuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FuRXhlY3V0ZUZpbGUoX2ZpbGU6IFRGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZm9yIG11bHRpcGxlIGZpbGVzLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGNoZWNrcyBlYWNoIGZpbGUgaW5kaXZpZHVhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZXMgLSBUaGUgZmlsZXMuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FuRXhlY3V0ZUZpbGVzKGZpbGVzOiBURmlsZVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpbGVzLmxlbmd0aCA+IDAgJiYgZmlsZXMuZXZlcnkoKGYpID0+IHRoaXMuY2FuRXhlY3V0ZUZpbGUoZikpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGVnYXRlcyB0byB7QGxpbmsgZXhlY3V0ZUZpbGV9LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBgUHJvbWlzYWJsZTx2b2lkPmAgdGhhdCByZXNvbHZlcyB3aGVuIGFic3RyYWN0IGZpbGUgaGFkIGJlZW4gZXhlY3V0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUpOiBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlRmlsZShhc0ZpbGUoYWJzdHJhY3RGaWxlKSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZWdhdGVzIHRvIHtAbGluayBleGVjdXRlRmlsZXN9LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKiBAcmV0dXJucyBgUHJvbWlzYWJsZTx2b2lkPmAgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBhYnN0cmFjdCBmaWxlcyBoYXZlIGJlZW4gZXhlY3V0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdKTogUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUZpbGVzKGFzQXJyYXlPZkZpbGVzKGFic3RyYWN0RmlsZXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCBmb3IgYSBzaW5nbGUgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZS5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBleGVjdXRlRmlsZShmaWxlOiBURmlsZSk6IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZvciBtdWx0aXBsZSBmaWxlcy5cbiAgICogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBleGVjdXRlcyBzZXF1ZW50aWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlcyAtIFRoZSBmaWxlcy5cbiAgICogQHJldHVybnMgYFByb21pc2FibGU8dm9pZD5gIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgZmlsZXMgaGF2ZSBiZWVuIGV4ZWN1dGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGV4ZWN1dGVGaWxlcyhmaWxlczogVEZpbGVbXSk6IFByb21pc2FibGU8dm9pZD4ge1xuICAgIGxldCBwcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBwcm9taXNlID0gY2hhaW4ocHJvbWlzZSwgKCkgPT4gdGhpcy5leGVjdXRlRmlsZShmaWxlKSk7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UpIHtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRvIG9ubHkgc2hvdyBtZW51IGZvciBURmlsZSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHNpbmdsZS1maWxlIG1lbnUgY2hlY2suXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlIG1lbnUuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gT3ZlcnJpZGUga2VlcHMgdGhlIGJhc2UgY2xhc3MgcGFyYW0gdHlwZS5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZEFkZFRvQWJzdHJhY3RGaWxlTWVudShwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyU2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVNZW51UGFyYW1zKTogYm9vbGVhbiB7XG4gICAgY29uc3Qge1xuICAgICAgYWJzdHJhY3RGaWxlLFxuICAgICAgbGVhZixcbiAgICAgIHNvdXJjZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgaWYgKCFpc0ZpbGUoYWJzdHJhY3RGaWxlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaG91bGRBZGRUb0ZpbGVNZW51KHtcbiAgICAgIGZpbGU6IGFic3RyYWN0RmlsZSxcbiAgICAgIGxlYWYsXG4gICAgICBzb3VyY2VcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRvIG9ubHkgc2hvdyBtZW51IGZvciBURmlsZSBhcnJheXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIG11bHRpLWZpbGUgbWVudSBjaGVjay5cbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gdGhlIGZpbGVzIG1lbnUuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gT3ZlcnJpZGUga2VlcHMgdGhlIGJhc2UgY2xhc3MgcGFyYW0gdHlwZS5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZEFkZFRvQWJzdHJhY3RGaWxlc01lbnUocGFyYW1zOiBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlclNob3VsZEFkZFRvQWJzdHJhY3RGaWxlc01lbnVQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7XG4gICAgICBhYnN0cmFjdEZpbGVzLFxuICAgICAgbGVhZixcbiAgICAgIHNvdXJjZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgaWYgKCFhYnN0cmFjdEZpbGVzLmV2ZXJ5KChmKSA9PiBpc0ZpbGUoZikpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNob3VsZEFkZFRvRmlsZXNNZW51KHtcbiAgICAgIGZpbGVzOiBhc0FycmF5T2ZGaWxlcyhhYnN0cmFjdEZpbGVzKSxcbiAgICAgIGxlYWYsXG4gICAgICBzb3VyY2VcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBzaW5nbGUtZmlsZSBjb250ZXh0IG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHNpbmdsZS1maWxlIG1lbnUgY2hlY2suXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9GaWxlTWVudShwYXJhbXM6IEZpbGVDb21tYW5kSGFuZGxlclNob3VsZEFkZFRvRmlsZU1lbnVQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGZpbGU6IF9maWxlLCBsZWFmOiBfbGVhZiwgc291cmNlOiBfc291cmNlIH0gPSBwYXJhbXM7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIG11bHRpLWZpbGUgY29udGV4dCBtZW51LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBtdWx0aS1maWxlIG1lbnUgY2hlY2suXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBmaWxlcyBtZW51LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNob3VsZEFkZFRvRmlsZXNNZW51KHBhcmFtczogRmlsZUNvbW1hbmRIYW5kbGVyU2hvdWxkQWRkVG9GaWxlc01lbnVQYXJhbXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGZpbGVzOiBfZmlsZXMsIGxlYWY6IF9sZWFmLCBzb3VyY2U6IF9zb3VyY2UgfSA9IHBhcmFtcztcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7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