obsidian-dev-utils 66.0.1 → 68.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 (225) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/dev/main.js +543 -355
  3. package/dist/lib/cjs/async-events.cjs +182 -32
  4. package/dist/lib/cjs/async-events.d.cts +259 -24
  5. package/dist/lib/cjs/async.cjs +2 -2
  6. package/dist/lib/cjs/error.cjs +6 -7
  7. package/dist/lib/cjs/function.cjs +6 -2
  8. package/dist/lib/cjs/function.d.cts +6 -0
  9. package/dist/lib/cjs/library.cjs +1 -1
  10. package/dist/lib/cjs/object-utils.cjs +1 -1
  11. package/dist/lib/cjs/object-utils.d.cts +2 -0
  12. package/dist/lib/cjs/obsidian/active-file-provider.cjs +1 -1
  13. package/dist/lib/cjs/obsidian/active-file-provider.d.cts +0 -1
  14. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +2 -4
  15. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +1 -1
  16. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +4 -5
  17. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +3 -3
  18. package/dist/lib/cjs/obsidian/command-handlers/command-handler.cjs +3 -3
  19. package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +2 -1
  20. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +2 -3
  21. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +1 -1
  22. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +1 -6
  23. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +1 -6
  24. package/dist/lib/cjs/obsidian/components/abort-signal-component.cjs +3 -8
  25. package/dist/lib/cjs/obsidian/components/abort-signal-component.d.cts +2 -6
  26. package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +3 -3
  27. package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +2 -2
  28. package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +3 -8
  29. package/dist/lib/cjs/obsidian/components/async-error-handler-component.d.cts +2 -6
  30. package/dist/lib/cjs/obsidian/components/async-events-component.cjs +2 -20
  31. package/dist/lib/cjs/obsidian/components/async-events-component.d.cts +1 -18
  32. package/dist/lib/cjs/obsidian/components/component-ex.cjs +235 -0
  33. package/dist/lib/cjs/obsidian/components/component-ex.d.cts +55 -0
  34. package/dist/lib/cjs/obsidian/components/console-debug-component.cjs +3 -7
  35. package/dist/lib/cjs/obsidian/components/console-debug-component.d.cts +2 -6
  36. package/dist/lib/cjs/obsidian/components/disposable-component.cjs +1 -9
  37. package/dist/lib/cjs/obsidian/components/disposable-component.d.cts +0 -10
  38. package/dist/lib/cjs/obsidian/components/i18n-component.cjs +4 -9
  39. package/dist/lib/cjs/obsidian/components/i18n-component.d.cts +3 -7
  40. package/dist/lib/cjs/obsidian/components/index.cjs +9 -6
  41. package/dist/lib/cjs/obsidian/components/index.d.cts +2 -1
  42. package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +10 -4
  43. package/dist/lib/cjs/obsidian/components/layout-ready-component.d.cts +3 -3
  44. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +3 -3
  45. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +2 -3
  46. package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +4 -4
  47. package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +3 -3
  48. package/dist/lib/cjs/obsidian/components/plugin-context-component.cjs +3 -8
  49. package/dist/lib/cjs/obsidian/components/plugin-context-component.d.cts +2 -6
  50. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +3 -7
  51. package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +2 -6
  52. package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +75 -33
  53. package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +73 -28
  54. package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.cjs +3 -4
  55. package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.d.cts +2 -2
  56. package/dist/lib/cjs/obsidian/components/registry-component.cjs +180 -0
  57. package/dist/lib/cjs/obsidian/components/registry-component.d.cts +36 -0
  58. package/dist/lib/cjs/obsidian/markdown.cjs +2 -3
  59. package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +1 -1
  60. package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +0 -1
  61. package/dist/lib/cjs/obsidian/modals/alert.cjs +1 -3
  62. package/dist/lib/cjs/obsidian/modals/confirm.cjs +1 -3
  63. package/dist/lib/cjs/obsidian/modals/prompt.cjs +1 -3
  64. package/dist/lib/cjs/obsidian/modals/select-item.cjs +1 -2
  65. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +23 -22
  66. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.d.cts +7 -3
  67. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +35 -76
  68. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +35 -36
  69. package/dist/lib/cjs/obsidian/queue.cjs +2 -2
  70. package/dist/lib/cjs/obsidian/rename-delete-handler.cjs +1 -2
  71. package/dist/lib/cjs/obsidian/setting-components/checkbox-component.cjs +1 -1
  72. package/dist/lib/cjs/obsidian/setting-components/checkbox-component.d.cts +1 -2
  73. package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.cjs +4 -2
  74. package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.d.cts +4 -3
  75. package/dist/lib/cjs/obsidian/setting-components/date-component.cjs +1 -2
  76. package/dist/lib/cjs/obsidian/setting-components/date-time-component.cjs +1 -2
  77. package/dist/lib/cjs/obsidian/setting-components/file-component.cjs +1 -3
  78. package/dist/lib/cjs/obsidian/setting-components/month-component.cjs +1 -2
  79. package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.cjs +4 -2
  80. package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.d.cts +4 -3
  81. package/dist/lib/cjs/obsidian/setting-components/multiple-email-component.cjs +1 -2
  82. package/dist/lib/cjs/obsidian/setting-components/multiple-file-component.cjs +1 -3
  83. package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.cjs +4 -2
  84. package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.d.cts +4 -3
  85. package/dist/lib/cjs/obsidian/setting-components/time-component.cjs +1 -2
  86. package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.cjs +1 -1
  87. package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.d.cts +1 -2
  88. package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.cjs +4 -2
  89. package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.d.cts +4 -3
  90. package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.cjs +4 -2
  91. package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.d.cts +4 -3
  92. package/dist/lib/cjs/obsidian/setting-components/typed-text-component.cjs +4 -2
  93. package/dist/lib/cjs/obsidian/setting-components/typed-text-component.d.cts +1 -2
  94. package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.cjs +1 -1
  95. package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.d.cts +1 -2
  96. package/dist/lib/cjs/obsidian/setting-components/week-component.cjs +1 -2
  97. package/dist/lib/cjs/obsidian/setting-ex.cjs +3 -1
  98. package/dist/lib/cjs/obsidian/setting-ex.d.cts +2 -0
  99. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +8 -2
  100. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +10 -1
  101. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +3 -0
  102. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +7 -1
  103. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.cjs +184 -0
  104. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +3 -0
  105. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +242 -0
  106. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +5 -0
  107. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +222 -0
  108. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +4 -0
  109. package/dist/lib/cjs/transformers/group-transformer.cjs +1 -3
  110. package/dist/lib/esm/async-events.d.mts +259 -24
  111. package/dist/lib/esm/async-events.mjs +179 -31
  112. package/dist/lib/esm/async.mjs +6 -3
  113. package/dist/lib/esm/error.mjs +6 -7
  114. package/dist/lib/esm/function.d.mts +6 -0
  115. package/dist/lib/esm/function.mjs +5 -2
  116. package/dist/lib/esm/library.mjs +1 -1
  117. package/dist/lib/esm/object-utils.d.mts +2 -0
  118. package/dist/lib/esm/object-utils.mjs +1 -1
  119. package/dist/lib/esm/obsidian/active-file-provider.d.mts +0 -1
  120. package/dist/lib/esm/obsidian/active-file-provider.mjs +1 -1
  121. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +1 -1
  122. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +2 -4
  123. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +3 -3
  124. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +4 -5
  125. package/dist/lib/esm/obsidian/command-handlers/command-handler.d.mts +2 -1
  126. package/dist/lib/esm/obsidian/command-handlers/command-handler.mjs +4 -4
  127. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +1 -1
  128. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +2 -3
  129. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +1 -6
  130. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +1 -6
  131. package/dist/lib/esm/obsidian/components/abort-signal-component.d.mts +2 -6
  132. package/dist/lib/esm/obsidian/components/abort-signal-component.mjs +3 -8
  133. package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +2 -2
  134. package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +3 -3
  135. package/dist/lib/esm/obsidian/components/async-error-handler-component.d.mts +2 -6
  136. package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +3 -8
  137. package/dist/lib/esm/obsidian/components/async-events-component.d.mts +1 -18
  138. package/dist/lib/esm/obsidian/components/async-events-component.mjs +2 -19
  139. package/dist/lib/esm/obsidian/components/component-ex.d.mts +55 -0
  140. package/dist/lib/esm/obsidian/components/component-ex.mjs +130 -0
  141. package/dist/lib/esm/obsidian/components/console-debug-component.d.mts +2 -6
  142. package/dist/lib/esm/obsidian/components/console-debug-component.mjs +3 -7
  143. package/dist/lib/esm/obsidian/components/disposable-component.d.mts +0 -10
  144. package/dist/lib/esm/obsidian/components/disposable-component.mjs +1 -8
  145. package/dist/lib/esm/obsidian/components/i18n-component.d.mts +3 -7
  146. package/dist/lib/esm/obsidian/components/i18n-component.mjs +4 -9
  147. package/dist/lib/esm/obsidian/components/index.d.mts +2 -1
  148. package/dist/lib/esm/obsidian/components/index.mjs +6 -4
  149. package/dist/lib/esm/obsidian/components/layout-ready-component.d.mts +3 -3
  150. package/dist/lib/esm/obsidian/components/layout-ready-component.mjs +10 -4
  151. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.d.mts +2 -3
  152. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +3 -3
  153. package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +3 -3
  154. package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +4 -4
  155. package/dist/lib/esm/obsidian/components/plugin-context-component.d.mts +2 -6
  156. package/dist/lib/esm/obsidian/components/plugin-context-component.mjs +3 -8
  157. package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +2 -6
  158. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +3 -7
  159. package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +73 -28
  160. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +75 -33
  161. package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.d.mts +2 -2
  162. package/dist/lib/esm/obsidian/components/plugin-settings-tab-component.mjs +3 -4
  163. package/dist/lib/esm/obsidian/components/registry-component.d.mts +36 -0
  164. package/dist/lib/esm/obsidian/components/registry-component.mjs +72 -0
  165. package/dist/lib/esm/obsidian/markdown.mjs +2 -3
  166. package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +0 -1
  167. package/dist/lib/esm/obsidian/modals/alert.mjs +1 -3
  168. package/dist/lib/esm/obsidian/modals/confirm.mjs +1 -3
  169. package/dist/lib/esm/obsidian/modals/prompt.mjs +1 -3
  170. package/dist/lib/esm/obsidian/modals/select-item.mjs +1 -2
  171. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.d.mts +7 -3
  172. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +24 -23
  173. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +35 -36
  174. package/dist/lib/esm/obsidian/plugin/plugin.mjs +35 -77
  175. package/dist/lib/esm/obsidian/queue.mjs +6 -3
  176. package/dist/lib/esm/obsidian/rename-delete-handler.mjs +1 -2
  177. package/dist/lib/esm/obsidian/setting-components/checkbox-component.d.mts +1 -2
  178. package/dist/lib/esm/obsidian/setting-components/checkbox-component.mjs +1 -1
  179. package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.d.mts +4 -3
  180. package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.mjs +4 -2
  181. package/dist/lib/esm/obsidian/setting-components/date-component.mjs +1 -2
  182. package/dist/lib/esm/obsidian/setting-components/date-time-component.mjs +1 -2
  183. package/dist/lib/esm/obsidian/setting-components/file-component.mjs +1 -3
  184. package/dist/lib/esm/obsidian/setting-components/month-component.mjs +1 -2
  185. package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.d.mts +4 -3
  186. package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.mjs +4 -2
  187. package/dist/lib/esm/obsidian/setting-components/multiple-email-component.mjs +1 -2
  188. package/dist/lib/esm/obsidian/setting-components/multiple-file-component.mjs +1 -3
  189. package/dist/lib/esm/obsidian/setting-components/multiple-text-component.d.mts +4 -3
  190. package/dist/lib/esm/obsidian/setting-components/multiple-text-component.mjs +4 -2
  191. package/dist/lib/esm/obsidian/setting-components/time-component.mjs +1 -2
  192. package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.d.mts +1 -2
  193. package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.mjs +1 -1
  194. package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.d.mts +4 -3
  195. package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +4 -2
  196. package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.d.mts +4 -3
  197. package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.mjs +4 -2
  198. package/dist/lib/esm/obsidian/setting-components/typed-text-component.d.mts +1 -2
  199. package/dist/lib/esm/obsidian/setting-components/typed-text-component.mjs +4 -2
  200. package/dist/lib/esm/obsidian/setting-components/value-component-with-change-tracking.d.mts +1 -2
  201. package/dist/lib/esm/obsidian/setting-components/week-component.mjs +1 -2
  202. package/dist/lib/esm/obsidian/setting-ex.d.mts +2 -0
  203. package/dist/lib/esm/obsidian/setting-ex.mjs +3 -1
  204. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +8 -2
  205. package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +3 -0
  206. package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +7 -1
  207. package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +7 -1
  208. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +3 -0
  209. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs +75 -0
  210. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +5 -0
  211. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +131 -0
  212. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +4 -0
  213. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +112 -0
  214. package/dist/lib/esm/transformers/group-transformer.mjs +1 -3
  215. package/obsidian/Components/component-ex/package.json +6 -0
  216. package/obsidian/Components/registry-component/package.json +6 -0
  217. package/package.json +21 -20
  218. package/script-utils/linters/eslint-rules/prefer-noop-async/package.json +6 -0
  219. package/script-utils/linters/eslint-rules/require-component-suffix/package.json +6 -0
  220. package/script-utils/linters/eslint-rules/require-method-template/package.json +6 -0
  221. package/dist/lib/cjs/obsidian/components/async-component.cjs +0 -182
  222. package/dist/lib/cjs/obsidian/components/async-component.d.cts +0 -43
  223. package/dist/lib/esm/obsidian/components/async-component.d.mts +0 -43
  224. package/dist/lib/esm/obsidian/components/async-component.mjs +0 -72
  225. package/obsidian/Components/async-component/package.json +0 -6
@@ -138,9 +138,8 @@ __export(error_exports, {
138
138
  module.exports = __toCommonJS(error_exports);
139
139
  var import_async_events = require('./async-events.cjs');
140
140
  var import_type_guards = require('./type-guards.cjs');
141
- const ASYNC_ERROR_EVENT = "asyncError";
142
- const asyncErrorEventEmitter = new import_async_events.AsyncEvents();
143
- asyncErrorEventEmitter.on(ASYNC_ERROR_EVENT, handleAsyncError);
141
+ const errorAsyncEvents = new import_async_events.AsyncEvents();
142
+ errorAsyncEvents.on("asyncError", handleAsyncError);
144
143
  const ASYNC_WRAPPER_ERROR_MESSAGE = "An unhandled error occurred executing async operation";
145
144
  const STACK_TRACE_PREFIX = " at";
146
145
  class CustomStackTraceError extends Error {
@@ -187,7 +186,7 @@ class SilentError extends Error {
187
186
  }
188
187
  }
189
188
  function emitAsyncErrorEvent(asyncError) {
190
- asyncErrorEventEmitter.trigger(ASYNC_ERROR_EVENT, asyncError);
189
+ errorAsyncEvents.trigger("asyncError", asyncError);
191
190
  }
192
191
  function errorToString(error) {
193
192
  if (!(error instanceof Error)) {
@@ -220,9 +219,9 @@ function printError(error, console) {
220
219
  console.error(errorToString(error));
221
220
  }
222
221
  function registerAsyncErrorEventHandler(handler) {
223
- const eventRef = asyncErrorEventEmitter.on(ASYNC_ERROR_EVENT, handler);
222
+ const eventRef = errorAsyncEvents.on("asyncError", handler);
224
223
  return () => {
225
- asyncErrorEventEmitter.offref(eventRef);
224
+ errorAsyncEvents.offref(eventRef);
226
225
  };
227
226
  }
228
227
  function throwExpression(error) {
@@ -246,4 +245,4 @@ function handleAsyncError(asyncError) {
246
245
  registerAsyncErrorEventHandler,
247
246
  throwExpression
248
247
  });
249
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVycm9yIGhhbmRsaW5nLlxuICovXG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuY29uc3QgQVNZTkNfRVJST1JfRVZFTlQgPSAnYXN5bmNFcnJvcic7XG5cbmNvbnN0IGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIgPSBuZXcgQXN5bmNFdmVudHMoKTtcbmFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub24oQVNZTkNfRVJST1JfRVZFTlQsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG4vKipcbiAqIEEgbWVzc2FnZSBvZiB0aGUgQXN5bmNXcmFwcGVyRXJyb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBBU1lOQ19XUkFQUEVSX0VSUk9SX01FU1NBR0UgPSAnQW4gdW5oYW5kbGVkIGVycm9yIG9jY3VycmVkIGV4ZWN1dGluZyBhc3luYyBvcGVyYXRpb24nO1xuXG5jb25zdCBTVEFDS19UUkFDRV9QUkVGSVggPSAnICAgIGF0JztcblxuLyoqXG4gKiBBbiBlcnJvciB0aGF0IHdyYXBzIGFuIGVycm9yIHdpdGggYSBjdXN0b20gc3RhY2sgdHJhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21TdGFja1RyYWNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSBzdGFja1RyYWNlIC0gVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBlcnJvci5cbiAgICogQHBhcmFtIGNhdXNlIC0gVGhlIGNhdXNlIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YWNrVHJhY2U6IHN0cmluZywgY2F1c2U6IHVua25vd24pIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdDdXN0b21TdGFja1RyYWNlRXJyb3InO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gYD8uYCBpcyB1c2VkIHRvIHN1cHBvcnQgaU9TIGJlZm9yZSAxNy4yLlxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlPy4odGhpcywgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKTtcblxuICAgIGxldCByb290Q2F1c2UgPSBjYXVzZTtcbiAgICBjb25zdCBwYXJlbnRDYXVzZXMgPSBuZXcgU2V0PEN1c3RvbVN0YWNrVHJhY2VFcnJvcj4oKTtcbiAgICB3aGlsZSAocm9vdENhdXNlIGluc3RhbmNlb2YgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKSB7XG4gICAgICBpZiAocGFyZW50Q2F1c2VzLmhhcyhyb290Q2F1c2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2lyY3VsYXIgY2F1c2UgZGV0ZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudENhdXNlcy5hZGQocm9vdENhdXNlKTtcbiAgICAgIHJvb3RDYXVzZSA9IHJvb3RDYXVzZS5jYXVzZTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbFN0YWNrTGluZXMgPSBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLnN0YWNrKS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3Qgc3RhY2tMaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IEVSUk9SX0hFQURFUl9SRUdfRVhQID0gL15cXHcqRXJyb3IoPzo6IHwkKS87XG4gICAgaWYgKEVSUk9SX0hFQURFUl9SRUdfRVhQLnRlc3QoZW5zdXJlTm9uTnVsbGFibGUoc3RhY2tMaW5lc1swXSkpKSB7XG4gICAgICBzdGFja0xpbmVzLnNwbGljZSgwLCAxKTtcbiAgICB9XG4gICAgb3JpZ2luYWxTdGFja0xpbmVzLnNwbGljZSgxLCBvcmlnaW5hbFN0YWNrTGluZXMubGVuZ3RoIC0gMSwgLi4uc3RhY2tMaW5lcyk7XG4gICAgdGhpcy5zdGFjayA9IG9yaWdpbmFsU3RhY2tMaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGVycm9yIHRoYXQgaXMgbm90IHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaWxlbnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgU2lsZW50RXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdTaWxlbnRFcnJvcic7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBgPy5gIGlzIHVzZWQgdG8gc3VwcG9ydCBpT1MgYmVmb3JlIDE3LjIuXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/Lih0aGlzLCBTaWxlbnRFcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBFbWl0cyBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRXJyb3IgLSBUaGUgZXJyb3IgdG8gZW1pdCBhcyBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgYXN5bmNFcnJvckV2ZW50RW1pdHRlci50cmlnZ2VyKEFTWU5DX0VSUk9SX0VWRU5ULCBhc3luY0Vycm9yKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBlcnJvciB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiwgaW5jbHVkaW5nIG5lc3RlZCBjYXVzZXMgd2l0aCBpbmRlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gY29udmVydCB0byBhIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JUb1N0cmluZyhlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgcmV0dXJuIFN0cmluZyhlcnJvcik7XG4gIH1cblxuICBsZXQgbWVzc2FnZSA9IGVycm9yLnN0YWNrID8/IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgaWYgKGVycm9yLmNhdXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjYXVzZVN0ckxpbmVzID0gZXJyb3JUb1N0cmluZyhlcnJvci5jYXVzZSkuc3BsaXQoJ1xcbicpO1xuICAgIG1lc3NhZ2UgKz0gYFxcbiR7Z2VuZXJhdGVTdGFja1RyYWNlTGluZSgnQ2F1c2VkIGJ5OicpfWA7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGNhdXNlU3RyTGluZXMpIHtcbiAgICAgIGlmICghbGluZS50cmltKCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBtZXNzYWdlICs9IGxpbmUuc3RhcnRzV2l0aChTVEFDS19UUkFDRV9QUkVGSVgpXG4gICAgICAgID8gYFxcbiR7bGluZX1gXG4gICAgICAgIDogYFxcbiR7Z2VuZXJhdGVTdGFja1RyYWNlTGluZShsaW5lKX1gO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVzc2FnZTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlIGFzIGEgc3RyaW5nLCBleGNsdWRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbC5cbiAqXG4gKiBAcGFyYW0gZnJhbWVzVG9Ta2lwIC0gVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzdGFjayB0cmFjZSwgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFja1RyYWNlKGZyYW1lc1RvU2tpcCA9IDApOiBzdHJpbmcge1xuICAvLyBTa2lwcGluZyBFcnJvciBwcmVmaXggYW5kIGBnZXRTdGFja1RyYWNlYCBmdW5jdGlvbiBjYWxsXG4gIGNvbnN0IEFERElUSU9OQUxfRlJBTUVTX1RPX1NLSVAgPSAyO1xuICBjb25zdCBzdGFjayA9IGVuc3VyZU5vbk51bGxhYmxlKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgY29uc3QgbGluZXMgPSBzdGFjay5zcGxpdCgnXFxuJyk7XG4gIHJldHVybiBsaW5lcy5zbGljZShmcmFtZXNUb1NraXAgKyBBRERJVElPTkFMX0ZSQU1FU19UT19TS0lQKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBQcmludHMgYW4gZXJyb3IgdG8gdGhlIGNvbnNvbGUsIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzIGFuZCBvcHRpb25hbCBBTlNJIHNlcXVlbmNlIGNsZWFyaW5nLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBwcmludC5cbiAqIEBwYXJhbSBjb25zb2xlIC0gVGhlIGNvbnNvbGUgdG8gcHJpbnQgdG8gKGRlZmF1bHQ6IGBnbG9iYWxUaGlzLmNvbnNvbGVgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50RXJyb3IoZXJyb3I6IHVua25vd24sIGNvbnNvbGU/OiBDb25zb2xlKTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbm1kL25vLWdsb2JhbC10aGlzIC0tIEFjdGl2ZWx5IHVzZSBnbG9iYWxUaGlzLlxuICBjb25zb2xlID8/PSBnbG9iYWxUaGlzLmNvbnNvbGU7XG4gIGNvbnNvbGUuZXJyb3IoZXJyb3JUb1N0cmluZyhlcnJvcikpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBoYW5kbGVyIGZvciBhc3luY2hyb25vdXMgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSBoYW5kbGVyIC0gVGhlIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50IG9jY3Vycy5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdG8gdW5yZWdpc3RlciB0aGUgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXN5bmNFcnJvckV2ZW50SGFuZGxlcihoYW5kbGVyOiAoYXN5bmNFcnJvcjogdW5rbm93bikgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICBjb25zdCBldmVudFJlZiA9IGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub24oQVNZTkNfRVJST1JfRVZFTlQsIGhhbmRsZXIpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub2ZmcmVmKGV2ZW50UmVmKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYW4gZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIHRocm93LlxuICogQHRocm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dFeHByZXNzaW9uKGVycm9yOiB1bmtub3duKTogbmV2ZXIge1xuICB0aHJvdyBlcnJvcjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTdGFja1RyYWNlTGluZSh0aXRsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1NUQUNLX1RSQUNFX1BSRUZJWH0gLS0tICR7dGl0bGV9IC0tLSAoMClgO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYXN5bmNocm9ub3VzIGVycm9ycyBieSBwcmludGluZyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGFzeW5jaHJvbm91cyBlcnJvciB0byBoYW5kbGUuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUFzeW5jRXJyb3IoYXN5bmNFcnJvcjogdW5rbm93bik6IHZvaWQge1xuICBwcmludEVycm9yKGFzeW5jRXJyb3IpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLDBCQUE0QjtBQUM1Qix5QkFBa0M7QUFFbEMsTUFBTSxvQkFBb0I7QUFFMUIsTUFBTSx5QkFBeUIsSUFBSSxnQ0FBWTtBQUMvQyx1QkFBdUIsR0FBRyxtQkFBbUIsZ0JBQWdCO0FBS3RELE1BQU0sOEJBQThCO0FBRTNDLE1BQU0scUJBQXFCO0FBS3BCLE1BQU0sOEJBQThCLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUXhDLFlBQVksU0FBaUIsWUFBb0IsT0FBZ0I7QUFDdEUsVUFBTSxTQUFTLEVBQUUsTUFBTSxDQUFDO0FBQ3hCLFNBQUssT0FBTztBQUdaLFVBQU0sb0JBQW9CLE1BQU0scUJBQXFCO0FBRXJELFFBQUksWUFBWTtBQUNoQixVQUFNLGVBQWUsb0JBQUksSUFBMkI7QUFDcEQsV0FBTyxxQkFBcUIsdUJBQXVCO0FBQ2pELFVBQUksYUFBYSxJQUFJLFNBQVMsR0FBRztBQUMvQixjQUFNLElBQUksTUFBTSx5QkFBeUI7QUFBQSxNQUMzQztBQUNBLG1CQUFhLElBQUksU0FBUztBQUMxQixrQkFBWSxVQUFVO0FBQUEsSUFDeEI7QUFFQSxVQUFNLHlCQUFxQixzQ0FBa0IsS0FBSyxLQUFLLEVBQUUsTUFBTSxJQUFJO0FBQ25FLFVBQU0sYUFBYSxXQUFXLE1BQU0sSUFBSTtBQUN4QyxVQUFNLHVCQUF1QjtBQUM3QixRQUFJLHFCQUFxQixTQUFLLHNDQUFrQixXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFDL0QsaUJBQVcsT0FBTyxHQUFHLENBQUM7QUFBQSxJQUN4QjtBQUNBLHVCQUFtQixPQUFPLEdBQUcsbUJBQW1CLFNBQVMsR0FBRyxHQUFHLFVBQVU7QUFDekUsU0FBSyxRQUFRLG1CQUFtQixLQUFLLElBQUk7QUFBQSxFQUMzQztBQUNGO0FBS08sTUFBTSxvQkFBb0IsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU05QixZQUFZLFNBQWlCO0FBQ2xDLFVBQU0sT0FBTztBQUNiLFNBQUssT0FBTztBQUdaLFVBQU0sb0JBQW9CLE1BQU0sV0FBVztBQUFBLEVBQzdDO0FBQ0Y7QUFPTyxTQUFTLG9CQUFvQixZQUEyQjtBQUM3RCx5QkFBdUIsUUFBUSxtQkFBbUIsVUFBVTtBQUM5RDtBQVFPLFNBQVMsY0FBYyxPQUF3QjtBQUNwRCxNQUFJLEVBQUUsaUJBQWlCLFFBQVE7QUFDN0IsV0FBTyxPQUFPLEtBQUs7QUFBQSxFQUNyQjtBQUVBLE1BQUksVUFBVSxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksS0FBSyxNQUFNLE9BQU87QUFDNUQsTUFBSSxNQUFNLFVBQVUsUUFBVztBQUM3QixVQUFNLGdCQUFnQixjQUFjLE1BQU0sS0FBSyxFQUFFLE1BQU0sSUFBSTtBQUMzRCxlQUFXO0FBQUEsRUFBSyx1QkFBdUIsWUFBWSxDQUFDO0FBQ3BELGVBQVcsUUFBUSxlQUFlO0FBQ2hDLFVBQUksQ0FBQyxLQUFLLEtBQUssR0FBRztBQUNoQjtBQUFBLE1BQ0Y7QUFDQSxpQkFBVyxLQUFLLFdBQVcsa0JBQWtCLElBQ3pDO0FBQUEsRUFBSyxJQUFJLEtBQ1Q7QUFBQSxFQUFLLHVCQUF1QixJQUFJLENBQUM7QUFBQSxJQUN2QztBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFRTyxTQUFTLGNBQWMsZUFBZSxHQUFXO0FBRXRELFFBQU0sNEJBQTRCO0FBQ2xDLFFBQU0sWUFBUSxzQ0FBa0IsSUFBSSxNQUFNLEVBQUUsS0FBSztBQUNqRCxRQUFNLFFBQVEsTUFBTSxNQUFNLElBQUk7QUFDOUIsU0FBTyxNQUFNLE1BQU0sZUFBZSx5QkFBeUIsRUFBRSxLQUFLLElBQUk7QUFDeEU7QUFRTyxTQUFTLFdBQVcsT0FBZ0IsU0FBeUI7QUFFbEUsY0FBWSxXQUFXO0FBQ3ZCLFVBQVEsTUFBTSxjQUFjLEtBQUssQ0FBQztBQUNwQztBQVFPLFNBQVMsK0JBQStCLFNBQW9EO0FBQ2pHLFFBQU0sV0FBVyx1QkFBdUIsR0FBRyxtQkFBbUIsT0FBTztBQUNyRSxTQUFPLE1BQU07QUFDWCwyQkFBdUIsT0FBTyxRQUFRO0FBQUEsRUFDeEM7QUFDRjtBQVFPLFNBQVMsZ0JBQWdCLE9BQXVCO0FBQ3JELFFBQU07QUFDUjtBQUVBLFNBQVMsdUJBQXVCLE9BQXVCO0FBQ3JELFNBQU8sR0FBRyxrQkFBa0IsUUFBUSxLQUFLO0FBQzNDO0FBT0EsU0FBUyxpQkFBaUIsWUFBMkI7QUFDbkQsYUFBVyxVQUFVO0FBQ3ZCOyIsCiAgIm5hbWVzIjogW10KfQo=
248
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVycm9yIGhhbmRsaW5nLlxuICovXG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuaW50ZXJmYWNlIEVycm9yQXN5bmNFdmVudE1hcCB7XG4gIGFzeW5jRXJyb3I6IFtlcnJvcjogdW5rbm93bl07XG59XG5cbmNvbnN0IGVycm9yQXN5bmNFdmVudHMgPSBuZXcgQXN5bmNFdmVudHM8RXJyb3JBc3luY0V2ZW50TWFwPigpO1xuZXJyb3JBc3luY0V2ZW50cy5vbignYXN5bmNFcnJvcicsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG4vKipcbiAqIEEgbWVzc2FnZSBvZiB0aGUgQXN5bmNXcmFwcGVyRXJyb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBBU1lOQ19XUkFQUEVSX0VSUk9SX01FU1NBR0UgPSAnQW4gdW5oYW5kbGVkIGVycm9yIG9jY3VycmVkIGV4ZWN1dGluZyBhc3luYyBvcGVyYXRpb24nO1xuXG5jb25zdCBTVEFDS19UUkFDRV9QUkVGSVggPSAnICAgIGF0JztcblxuLyoqXG4gKiBBbiBlcnJvciB0aGF0IHdyYXBzIGFuIGVycm9yIHdpdGggYSBjdXN0b20gc3RhY2sgdHJhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21TdGFja1RyYWNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSBzdGFja1RyYWNlIC0gVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBlcnJvci5cbiAgICogQHBhcmFtIGNhdXNlIC0gVGhlIGNhdXNlIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YWNrVHJhY2U6IHN0cmluZywgY2F1c2U6IHVua25vd24pIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdDdXN0b21TdGFja1RyYWNlRXJyb3InO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gYD8uYCBpcyB1c2VkIHRvIHN1cHBvcnQgaU9TIGJlZm9yZSAxNy4yLlxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlPy4odGhpcywgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKTtcblxuICAgIGxldCByb290Q2F1c2UgPSBjYXVzZTtcbiAgICBjb25zdCBwYXJlbnRDYXVzZXMgPSBuZXcgU2V0PEN1c3RvbVN0YWNrVHJhY2VFcnJvcj4oKTtcbiAgICB3aGlsZSAocm9vdENhdXNlIGluc3RhbmNlb2YgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKSB7XG4gICAgICBpZiAocGFyZW50Q2F1c2VzLmhhcyhyb290Q2F1c2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2lyY3VsYXIgY2F1c2UgZGV0ZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudENhdXNlcy5hZGQocm9vdENhdXNlKTtcbiAgICAgIHJvb3RDYXVzZSA9IHJvb3RDYXVzZS5jYXVzZTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbFN0YWNrTGluZXMgPSBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLnN0YWNrKS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3Qgc3RhY2tMaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IEVSUk9SX0hFQURFUl9SRUdfRVhQID0gL15cXHcqRXJyb3IoPzo6IHwkKS87XG4gICAgaWYgKEVSUk9SX0hFQURFUl9SRUdfRVhQLnRlc3QoZW5zdXJlTm9uTnVsbGFibGUoc3RhY2tMaW5lc1swXSkpKSB7XG4gICAgICBzdGFja0xpbmVzLnNwbGljZSgwLCAxKTtcbiAgICB9XG4gICAgb3JpZ2luYWxTdGFja0xpbmVzLnNwbGljZSgxLCBvcmlnaW5hbFN0YWNrTGluZXMubGVuZ3RoIC0gMSwgLi4uc3RhY2tMaW5lcyk7XG4gICAgdGhpcy5zdGFjayA9IG9yaWdpbmFsU3RhY2tMaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGVycm9yIHRoYXQgaXMgbm90IHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaWxlbnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgU2lsZW50RXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdTaWxlbnRFcnJvcic7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBgPy5gIGlzIHVzZWQgdG8gc3VwcG9ydCBpT1MgYmVmb3JlIDE3LjIuXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/Lih0aGlzLCBTaWxlbnRFcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBFbWl0cyBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRXJyb3IgLSBUaGUgZXJyb3IgdG8gZW1pdCBhcyBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgZXJyb3JBc3luY0V2ZW50cy50cmlnZ2VyKCdhc3luY0Vycm9yJywgYXN5bmNFcnJvcik7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gZXJyb3IgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzIHdpdGggaW5kZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yVG9TdHJpbmcoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgIHJldHVybiBTdHJpbmcoZXJyb3IpO1xuICB9XG5cbiAgbGV0IG1lc3NhZ2UgPSBlcnJvci5zdGFjayA/PyBgJHtlcnJvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWA7XG4gIGlmIChlcnJvci5jYXVzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY2F1c2VTdHJMaW5lcyA9IGVycm9yVG9TdHJpbmcoZXJyb3IuY2F1c2UpLnNwbGl0KCdcXG4nKTtcbiAgICBtZXNzYWdlICs9IGBcXG4ke2dlbmVyYXRlU3RhY2tUcmFjZUxpbmUoJ0NhdXNlZCBieTonKX1gO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBjYXVzZVN0ckxpbmVzKSB7XG4gICAgICBpZiAoIWxpbmUudHJpbSgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbWVzc2FnZSArPSBsaW5lLnN0YXJ0c1dpdGgoU1RBQ0tfVFJBQ0VfUFJFRklYKVxuICAgICAgICA/IGBcXG4ke2xpbmV9YFxuICAgICAgICA6IGBcXG4ke2dlbmVyYXRlU3RhY2tUcmFjZUxpbmUobGluZSl9YDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY3VycmVudCBzdGFjayB0cmFjZSBhcyBhIHN0cmluZywgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwuXG4gKlxuICogQHBhcmFtIGZyYW1lc1RvU2tpcCAtIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIHNraXAgaW4gdGhlIHN0YWNrIHRyYWNlLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UsIGV4Y2x1ZGluZyB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhY2tUcmFjZShmcmFtZXNUb1NraXAgPSAwKTogc3RyaW5nIHtcbiAgLy8gU2tpcHBpbmcgRXJyb3IgcHJlZml4IGFuZCBgZ2V0U3RhY2tUcmFjZWAgZnVuY3Rpb24gY2FsbFxuICBjb25zdCBBRERJVElPTkFMX0ZSQU1FU19UT19TS0lQID0gMjtcbiAgY29uc3Qgc3RhY2sgPSBlbnN1cmVOb25OdWxsYWJsZShuZXcgRXJyb3IoKS5zdGFjayk7XG4gIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpO1xuICByZXR1cm4gbGluZXMuc2xpY2UoZnJhbWVzVG9Ta2lwICsgQURESVRJT05BTF9GUkFNRVNfVE9fU0tJUCkuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogUHJpbnRzIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyBhbmQgb3B0aW9uYWwgQU5TSSBzZXF1ZW5jZSBjbGVhcmluZy5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gcHJpbnQuXG4gKiBAcGFyYW0gY29uc29sZSAtIFRoZSBjb25zb2xlIHRvIHByaW50IHRvIChkZWZhdWx0OiBgZ2xvYmFsVGhpcy5jb25zb2xlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEVycm9yKGVycm9yOiB1bmtub3duLCBjb25zb2xlPzogQ29uc29sZSk6IHZvaWQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1nbG9iYWwtdGhpcyAtLSBBY3RpdmVseSB1c2UgZ2xvYmFsVGhpcy5cbiAgY29uc29sZSA/Pz0gZ2xvYmFsVGhpcy5jb25zb2xlO1xuICBjb25zb2xlLmVycm9yKGVycm9yVG9TdHJpbmcoZXJyb3IpKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgaGFuZGxlciBmb3IgYXN5bmNocm9ub3VzIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlciAtIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGFuIGFzeW5jaHJvbm91cyBlcnJvciBldmVudCBvY2N1cnMuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRvIHVucmVnaXN0ZXIgdGhlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckFzeW5jRXJyb3JFdmVudEhhbmRsZXIoaGFuZGxlcjogKGFzeW5jRXJyb3I6IHVua25vd24pID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgY29uc3QgZXZlbnRSZWYgPSBlcnJvckFzeW5jRXZlbnRzLm9uKCdhc3luY0Vycm9yJywgaGFuZGxlcik7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgZXJyb3JBc3luY0V2ZW50cy5vZmZyZWYoZXZlbnRSZWYpO1xuICB9O1xufVxuXG4vKipcbiAqIFRocm93cyBhbiBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gdGhyb3cuXG4gKiBAdGhyb3dzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0V4cHJlc3Npb24oZXJyb3I6IHVua25vd24pOiBuZXZlciB7XG4gIHRocm93IGVycm9yO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0YWNrVHJhY2VMaW5lKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7U1RBQ0tfVFJBQ0VfUFJFRklYfSAtLS0gJHt0aXRsZX0gLS0tICgwKWA7XG59XG5cbi8qKlxuICogSGFuZGxlcyBhc3luY2hyb25vdXMgZXJyb3JzIGJ5IHByaW50aW5nIHRoZW0uXG4gKlxuICogQHBhcmFtIGFzeW5jRXJyb3IgLSBUaGUgYXN5bmNocm9ub3VzIGVycm9yIHRvIGhhbmRsZS5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQXN5bmNFcnJvcihhc3luY0Vycm9yOiB1bmtub3duKTogdm9pZCB7XG4gIHByaW50RXJyb3IoYXN5bmNFcnJvcik7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsMEJBQTRCO0FBQzVCLHlCQUFrQztBQU1sQyxNQUFNLG1CQUFtQixJQUFJLGdDQUFnQztBQUM3RCxpQkFBaUIsR0FBRyxjQUFjLGdCQUFnQjtBQUszQyxNQUFNLDhCQUE4QjtBQUUzQyxNQUFNLHFCQUFxQjtBQUtwQixNQUFNLDhCQUE4QixNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVF4QyxZQUFZLFNBQWlCLFlBQW9CLE9BQWdCO0FBQ3RFLFVBQU0sU0FBUyxFQUFFLE1BQU0sQ0FBQztBQUN4QixTQUFLLE9BQU87QUFHWixVQUFNLG9CQUFvQixNQUFNLHFCQUFxQjtBQUVyRCxRQUFJLFlBQVk7QUFDaEIsVUFBTSxlQUFlLG9CQUFJLElBQTJCO0FBQ3BELFdBQU8scUJBQXFCLHVCQUF1QjtBQUNqRCxVQUFJLGFBQWEsSUFBSSxTQUFTLEdBQUc7QUFDL0IsY0FB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
@@ -128,6 +128,7 @@ __export(function_exports, {
128
128
  getFunctionExpressionString: () => getFunctionExpressionString,
129
129
  noop: () => noop,
130
130
  noopAsync: () => noopAsync,
131
+ noopAsyncSingletonPromise: () => noopAsyncSingletonPromise,
131
132
  omitAsyncReturnType: () => omitAsyncReturnType,
132
133
  omitReturnType: () => omitReturnType
133
134
  });
@@ -145,7 +146,9 @@ function getFunctionExpressionString(fn) {
145
146
  }
146
147
  function noop() {
147
148
  }
148
- async function noopAsync() {
149
+ const noopAsyncSingletonPromise = Promise.resolve();
150
+ function noopAsync() {
151
+ return noopAsyncSingletonPromise;
149
152
  }
150
153
  function omitAsyncReturnType(fn) {
151
154
  return async (...args) => {
@@ -164,7 +167,8 @@ function omitReturnType(fn) {
164
167
  getFunctionExpressionString,
165
168
  noop,
166
169
  noopAsync,
170
+ noopAsyncSingletonPromise,
167
171
  omitAsyncReturnType,
168
172
  omitReturnType
169
173
  });
170
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Z1bmN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHR5cGVzIGZvciB3b3JraW5nIHdpdGggZnVuY3Rpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdlbmVyaWMgYXN5bmMgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAdHlwZVBhcmFtIFJldHVybiAtIFRoZSBhd2FpdGVkIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY0FzeW5jRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10sIFJldHVybiA9IHVua25vd24+ID0gR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIFByb21pc2U8UmV0dXJuPj47XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdlbmVyaWMgYXN5bmMgdm9pZCBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgYXJndW1lbnRzIG9mIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY0FzeW5jVm9pZEZ1bmN0aW9uPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10gPSBuZXZlcltdPiA9IEdlbmVyaWNBc3luY0Z1bmN0aW9uPEFyZ3MsIHZvaWQ+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBnZW5lcmljIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLlxuICogQHR5cGVQYXJhbSBSZXR1cm4gLSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10sIFJldHVybiA9IHVua25vd24+ID0gKC4uLmFyZ3M6IEFyZ3MpID0+IFJldHVybjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZ2VuZXJpYyBwcm9taXNhYmxlIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLlxuICogQHR5cGVQYXJhbSBSZXR1cm4gLSBUaGUgYXdhaXRlZCByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNQcm9taXNhYmxlRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10sIFJldHVybiA9IHVua25vd24+ID0gR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIFByb21pc2FibGU8UmV0dXJuPj47XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdlbmVyaWMgcHJvbWlzYWJsZSB2b2lkIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljUHJvbWlzYWJsZVZvaWRGdW5jdGlvbjxBcmdzIGV4dGVuZHMgdW5rbm93bltdID0gbmV2ZXJbXT4gPSBHZW5lcmljUHJvbWlzYWJsZUZ1bmN0aW9uPEFyZ3MsIHZvaWQ+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBnZW5lcmljIHZvaWQgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNWb2lkRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10+ID0gR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIHZvaWQ+O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZnVuY3Rpb24gaW50byBhIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgZnVuY3Rpb24gZXhwcmVzc2lvbi5cbiAqXG4gKiBgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nKClgIG9uIGEgc2hvcnRoYW5kIG1ldGhvZCBsaWtlIGB7IGZuKCkge30gfWBcbiAqIHJldHVybnMgYFwiZm4oKSB7fVwiYCwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbi5cbiAqIFRoaXMgaGVscGVyIGRldGVjdHMgdGhhdCBmb3JtIGFuZCBwcmVmaXhlcyBpdCB3aXRoIGBmdW5jdGlvbiBgLlxuICpcbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIGZ1bmN0aW9uIGV4cHJlc3Npb24uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGUgLS0gV2UgbmVlZCB0byB1c2UgYEZ1bmN0aW9uYCB0eXBlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhmbjogRnVuY3Rpb24pOiBzdHJpbmcge1xuICBjb25zdCBmblN0cmluZyA9IGZuLnRvU3RyaW5nKCk7XG5cbiAgaWYgKEZVTkNUSU9OX0VYUFJFU1NJT05fUkUudGVzdChmblN0cmluZykpIHtcbiAgICByZXR1cm4gZm5TdHJpbmc7XG4gIH1cblxuICBjb25zdCBhc3luY01hdGNoID0gQVNZTkNfS0VZV09SRF9SRS5leGVjKGZuU3RyaW5nKTtcbiAgaWYgKGFzeW5jTWF0Y2gpIHtcbiAgICByZXR1cm4gYGFzeW5jIGZ1bmN0aW9uICR7Zm5TdHJpbmcuc2xpY2UoYXN5bmNNYXRjaFswXS5sZW5ndGgpfWA7XG4gIH1cblxuICByZXR1cm4gYGZ1bmN0aW9uICR7Zm5TdHJpbmd9YDtcbn1cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgLy8gRG9lcyBub3RoaW5nLlxufVxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBub29wQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIERvZXMgbm90aGluZy5cbn1cblxuLyoqXG4gKiBNYWtlcyBhbiBhc3luYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBhc3luYyBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYW5kIG9taXRzIHRoZSByZXR1cm4gdmFsdWUuXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gQXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcGFyYW0gZm4gLSBGdW5jdGlvbiB0byBiZSBjYWxsZWQuXG4gKiBAcmV0dXJucyBBbiBhc3luYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYW5kIG9taXRzIHRoZSByZXR1cm4gdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbWl0QXN5bmNSZXR1cm5UeXBlPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGZuOiBHZW5lcmljQXN5bmNGdW5jdGlvbjxBcmdzPik6IEdlbmVyaWNBc3luY1ZvaWRGdW5jdGlvbjxBcmdzPiB7XG4gIHJldHVybiBhc3luYyAoLi4uYXJnczogQXJncykgPT4ge1xuICAgIGF3YWl0IGZuKC4uLmFyZ3MpO1xuICB9O1xufVxuXG4vKipcbiAqIE1hdGNoZXMgc3RyaW5ncyB0aGF0IGFyZSBhbHJlYWR5IHZhbGlkIGZ1bmN0aW9uIGV4cHJlc3Npb25zOlxuICogLSBgZnVuY3Rpb24gLi4uYCAoa2V5d29yZCwgbm90IGlkZW50aWZpZXIgbGlrZSBgZnVuY3Rpb24xYClcbiAqIC0gYChgIChhcnJvdyBmdW5jdGlvbilcbiAqIC0gYGFzeW5jXFxiYCBmb2xsb3dlZCBieSBgZnVuY3Rpb25cXGJgIG9yIGAoYCAoYXN5bmMgZnVuY3Rpb24vYXJyb3cpXG4gKi9cbmNvbnN0IEZVTkNUSU9OX0VYUFJFU1NJT05fUkUgPSAvXig/OmZ1bmN0aW9uXFxifGFzeW5jXFxiXFxzKig/OmZ1bmN0aW9uXFxifFxcKCl8XFwoKS87XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgYGFzeW5jYCBrZXl3b3JkICh3b3JkIGJvdW5kYXJ5LCBub3QgYGFzeW5jMWApIGZvbGxvd2VkIGJ5IG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gKiBVc2VkIHRvIHN0cmlwIHRoZSBgYXN5bmNgIHByZWZpeCBmcm9tIGFzeW5jIHNob3J0aGFuZCBtZXRob2RzIGJlZm9yZSByZS1hZGRpbmcgYGFzeW5jIGZ1bmN0aW9uYC5cbiAqL1xuY29uc3QgQVNZTkNfS0VZV09SRF9SRSA9IC9eYXN5bmNcXGJcXHMqLztcblxuLyoqXG4gKiBNYWtlcyBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBhbmQgb21pdHMgdGhlIHJldHVybiB2YWx1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBBcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBmbiAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzIGFuZCBvbWl0cyB0aGUgcmV0dXJuIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb21pdFJldHVyblR5cGU8QXJncyBleHRlbmRzIHVua25vd25bXT4oZm46IEdlbmVyaWNGdW5jdGlvbjxBcmdzPik6IEdlbmVyaWNWb2lkRnVuY3Rpb248QXJncz4ge1xuICByZXR1cm4gKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBmbiguLi5hcmdzKTtcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0VPLFNBQVMsNEJBQTRCLElBQXNCO0FBQ2hFLFFBQU0sV0FBVyxHQUFHLFNBQVM7QUFFN0IsTUFBSSx1QkFBdUIsS0FBSyxRQUFRLEdBQUc7QUFDekMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGFBQWEsaUJBQWlCLEtBQUssUUFBUTtBQUNqRCxNQUFJLFlBQVk7QUFDZCxXQUFPLGtCQUFrQixTQUFTLE1BQU0sV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDO0FBQUEsRUFDL0Q7QUFFQSxTQUFPLFlBQVksUUFBUTtBQUM3QjtBQUtPLFNBQVMsT0FBYTtBQUU3QjtBQUtBLGVBQXNCLFlBQTJCO0FBRWpEO0FBU08sU0FBUyxvQkFBNEMsSUFBZ0U7QUFDMUgsU0FBTyxVQUFVLFNBQWU7QUFDOUIsVUFBTSxHQUFHLEdBQUcsSUFBSTtBQUFBLEVBQ2xCO0FBQ0Y7QUFRQSxNQUFNLHlCQUF5QjtBQU0vQixNQUFNLG1CQUFtQjtBQVNsQixTQUFTLGVBQXVDLElBQXNEO0FBQzNHLFNBQU8sSUFBSSxTQUFlO0FBQ3hCLE9BQUcsR0FBRyxJQUFJO0FBQUEsRUFDWjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
174
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Z1bmN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHR5cGVzIGZvciB3b3JraW5nIHdpdGggZnVuY3Rpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdlbmVyaWMgYXN5bmMgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAdHlwZVBhcmFtIFJldHVybiAtIFRoZSBhd2FpdGVkIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY0FzeW5jRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10sIFJldHVybiA9IHVua25vd24+ID0gR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIFByb21pc2U8UmV0dXJuPj47XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdlbmVyaWMgYXN5bmMgdm9pZCBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgYXJndW1lbnRzIG9mIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY0FzeW5jVm9pZEZ1bmN0aW9uPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10gPSBuZXZlcltdPiA9IEdlbmVyaWNBc3luY0Z1bmN0aW9uPEFyZ3MsIHZvaWQ+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBnZW5lcmljIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLlxuICogQHR5cGVQYXJhbSBSZXR1cm4gLSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10sIFJldHVybiA9IHVua25vd24+ID0gKC4uLmFyZ3M6IEFyZ3MpID0+IFJldHVybjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZ2VuZXJpYyBwcm9taXNhYmxlIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLlxuICogQHR5cGVQYXJhbSBSZXR1cm4gLSBUaGUgYXdhaXRlZCByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNQcm9taXNhYmxlRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10sIFJldHVybiA9IHVua25vd24+ID0gR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIFByb21pc2FibGU8UmV0dXJuPj47XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdlbmVyaWMgcHJvbWlzYWJsZSB2b2lkIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljUHJvbWlzYWJsZVZvaWRGdW5jdGlvbjxBcmdzIGV4dGVuZHMgdW5rbm93bltdID0gbmV2ZXJbXT4gPSBHZW5lcmljUHJvbWlzYWJsZUZ1bmN0aW9uPEFyZ3MsIHZvaWQ+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBnZW5lcmljIHZvaWQgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNWb2lkRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10+ID0gR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIHZvaWQ+O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZnVuY3Rpb24gaW50byBhIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgZnVuY3Rpb24gZXhwcmVzc2lvbi5cbiAqXG4gKiBgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nKClgIG9uIGEgc2hvcnRoYW5kIG1ldGhvZCBsaWtlIGB7IGZuKCkge30gfWBcbiAqIHJldHVybnMgYFwiZm4oKSB7fVwiYCwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbi5cbiAqIFRoaXMgaGVscGVyIGRldGVjdHMgdGhhdCBmb3JtIGFuZCBwcmVmaXhlcyBpdCB3aXRoIGBmdW5jdGlvbiBgLlxuICpcbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIGZ1bmN0aW9uIGV4cHJlc3Npb24uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGUgLS0gV2UgbmVlZCB0byB1c2UgYEZ1bmN0aW9uYCB0eXBlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhmbjogRnVuY3Rpb24pOiBzdHJpbmcge1xuICBjb25zdCBmblN0cmluZyA9IGZuLnRvU3RyaW5nKCk7XG5cbiAgaWYgKEZVTkNUSU9OX0VYUFJFU1NJT05fUkUudGVzdChmblN0cmluZykpIHtcbiAgICByZXR1cm4gZm5TdHJpbmc7XG4gIH1cblxuICBjb25zdCBhc3luY01hdGNoID0gQVNZTkNfS0VZV09SRF9SRS5leGVjKGZuU3RyaW5nKTtcbiAgaWYgKGFzeW5jTWF0Y2gpIHtcbiAgICByZXR1cm4gYGFzeW5jIGZ1bmN0aW9uICR7Zm5TdHJpbmcuc2xpY2UoYXN5bmNNYXRjaFswXS5sZW5ndGgpfWA7XG4gIH1cblxuICByZXR1cm4gYGZ1bmN0aW9uICR7Zm5TdHJpbmd9YDtcbn1cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgLy8gRG9lcyBub3RoaW5nLlxufVxuXG4vKipcbiAqIEEgc2luZ2xldG9uIG5vLW9wIHByb21pc2UuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcHJlZmVyLW5vb3AtYXN5bmMgLS0gQXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlLlxuZXhwb3J0IGNvbnN0IG5vb3BBc3luY1NpbmdsZXRvblByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9vcEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbm9vcEFzeW5jU2luZ2xldG9uUHJvbWlzZTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhbiBhc3luYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBhc3luYyBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYW5kIG9taXRzIHRoZSByZXR1cm4gdmFsdWUuXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gQXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcGFyYW0gZm4gLSBGdW5jdGlvbiB0byBiZSBjYWxsZWQuXG4gKiBAcmV0dXJucyBBbiBhc3luYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYW5kIG9taXRzIHRoZSByZXR1cm4gdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbWl0QXN5bmNSZXR1cm5UeXBlPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGZuOiBHZW5lcmljQXN5bmNGdW5jdGlvbjxBcmdzPik6IEdlbmVyaWNBc3luY1ZvaWRGdW5jdGlvbjxBcmdzPiB7XG4gIHJldHVybiBhc3luYyAoLi4uYXJnczogQXJncykgPT4ge1xuICAgIGF3YWl0IGZuKC4uLmFyZ3MpO1xuICB9O1xufVxuXG4vKipcbiAqIE1hdGNoZXMgc3RyaW5ncyB0aGF0IGFyZSBhbHJlYWR5IHZhbGlkIGZ1bmN0aW9uIGV4cHJlc3Npb25zOlxuICogLSBgZnVuY3Rpb24gLi4uYCAoa2V5d29yZCwgbm90IGlkZW50aWZpZXIgbGlrZSBgZnVuY3Rpb24xYClcbiAqIC0gYChgIChhcnJvdyBmdW5jdGlvbilcbiAqIC0gYGFzeW5jXFxiYCBmb2xsb3dlZCBieSBgZnVuY3Rpb25cXGJgIG9yIGAoYCAoYXN5bmMgZnVuY3Rpb24vYXJyb3cpXG4gKi9cbmNvbnN0IEZVTkNUSU9OX0VYUFJFU1NJT05fUkUgPSAvXig/OmZ1bmN0aW9uXFxifGFzeW5jXFxiXFxzKig/OmZ1bmN0aW9uXFxifFxcKCl8XFwoKS87XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgYGFzeW5jYCBrZXl3b3JkICh3b3JkIGJvdW5kYXJ5LCBub3QgYGFzeW5jMWApIGZvbGxvd2VkIGJ5IG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gKiBVc2VkIHRvIHN0cmlwIHRoZSBgYXN5bmNgIHByZWZpeCBmcm9tIGFzeW5jIHNob3J0aGFuZCBtZXRob2RzIGJlZm9yZSByZS1hZGRpbmcgYGFzeW5jIGZ1bmN0aW9uYC5cbiAqL1xuY29uc3QgQVNZTkNfS0VZV09SRF9SRSA9IC9eYXN5bmNcXGJcXHMqLztcblxuLyoqXG4gKiBNYWtlcyBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBhbmQgb21pdHMgdGhlIHJldHVybiB2YWx1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBBcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBmbiAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzIGFuZCBvbWl0cyB0aGUgcmV0dXJuIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb21pdFJldHVyblR5cGU8QXJncyBleHRlbmRzIHVua25vd25bXT4oZm46IEdlbmVyaWNGdW5jdGlvbjxBcmdzPik6IEdlbmVyaWNWb2lkRnVuY3Rpb248QXJncz4ge1xuICByZXR1cm4gKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBmbiguLi5hcmdzKTtcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnRU8sU0FBUyw0QkFBNEIsSUFBc0I7QUFDaEUsUUFBTSxXQUFXLEdBQUcsU0FBUztBQUU3QixNQUFJLHVCQUF1QixLQUFLLFFBQVEsR0FBRztBQUN6QyxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sYUFBYSxpQkFBaUIsS0FBSyxRQUFRO0FBQ2pELE1BQUksWUFBWTtBQUNkLFdBQU8sa0JBQWtCLFNBQVMsTUFBTSxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUM7QUFBQSxFQUMvRDtBQUVBLFNBQU8sWUFBWSxRQUFRO0FBQzdCO0FBS08sU0FBUyxPQUFhO0FBRTdCO0FBTU8sTUFBTSw0QkFBNEIsUUFBUSxRQUFRO0FBT2xELFNBQVMsWUFBMkI7QUFDekMsU0FBTztBQUNUO0FBU08sU0FBUyxvQkFBNEMsSUFBZ0U7QUFDMUgsU0FBTyxVQUFVLFNBQWU7QUFDOUIsVUFBTSxHQUFHLEdBQUcsSUFBSTtBQUFBLEVBQ2xCO0FBQ0Y7QUFRQSxNQUFNLHlCQUF5QjtBQU0vQixNQUFNLG1CQUFtQjtBQVNsQixTQUFTLGVBQXVDLElBQXNEO0FBQzNHLFNBQU8sSUFBSSxTQUFlO0FBQ3hCLE9BQUcsR0FBRyxJQUFJO0FBQUEsRUFDWjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -58,8 +58,14 @@ export declare function getFunctionExpressionString(fn: Function): string;
58
58
  * A function that does nothing.
59
59
  */
60
60
  export declare function noop(): void;
61
+ /**
62
+ * A singleton no-op promise.
63
+ */
64
+ export declare const noopAsyncSingletonPromise: Promise<void>;
61
65
  /**
62
66
  * A function that does nothing.
67
+ *
68
+ * @returns A promise that resolves when the function is complete.
63
69
  */
64
70
  export declare function noopAsync(): Promise<void>;
65
71
  /**
@@ -130,7 +130,7 @@ __export(library_exports, {
130
130
  LIBRARY_VERSION: () => LIBRARY_VERSION
131
131
  });
132
132
  module.exports = __toCommonJS(library_exports);
133
- const LIBRARY_VERSION = "66.0.1";
133
+ const LIBRARY_VERSION = "68.0.0";
134
134
  const LIBRARY_NAME = "obsidian-dev-utils";
135
135
  const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utilsprogress.loop {\n min-width: 200px;\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACzCJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;;;ACAA;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACRJ;EACE;;;ACDF;EACE;;;ACDF;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
136
136
  // Annotate the CommonJS export names for ESM import in node:
@@ -556,4 +556,4 @@ function tryHandleToJSON(value, key, depth, fullOptions, functionTexts, usedObje
556
556
  setNestedPropertyValue,
557
557
  toJson
558
558
  });
559
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29iamVjdC11dGlscy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBPYmplY3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29uc3RydWN0b3IsXG4gIFJlcXVpcmVkS2V5c09mLFxuICBVbmRlZmluZWRPblBhcnRpYWxEZWVwXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHR5cGUge1xuICBFeGFjdE1lbWJlcnMsXG4gIE1heWJlUmV0dXJuLFxuICBTdHJpbmdLZXlzXG59IGZyb20gJy4vdHlwZS50cyc7XG5cbmltcG9ydCB7IGVycm9yVG9TdHJpbmcgfSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7IGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyB9IGZyb20gJy4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJy4vc3RyaW5nLnRzJztcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgZW5zdXJlR2VuZXJpY09iamVjdCxcbiAgZW5zdXJlTm9uTnVsbGFibGVcbn0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogU3BlY2lmaWVzIGhvdyBmdW5jdGlvbnMgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIEpTT04gb3V0cHV0LlxuICovXG5leHBvcnQgZW51bSBGdW5jdGlvbkhhbmRsaW5nTW9kZSB7XG4gIC8qKlxuICAgKiBFeGNsdWRlcyBmdW5jdGlvbnMgZnJvbSB0aGUgSlNPTiBvdXRwdXQuXG4gICAqL1xuICBFeGNsdWRlID0gJ2V4Y2x1ZGUnLFxuICAvKipcbiAgICogSW5jbHVkZXMgdGhlIGZ1bGwgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiB0aGUgSlNPTiBvdXRwdXQuXG4gICAqL1xuICBGdWxsID0gJ2Z1bGwnLFxuICAvKipcbiAgICogSW5jbHVkZXMgb25seSB0aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgSlNPTiBvdXRwdXQuXG4gICAqL1xuICBOYW1lT25seSA9ICduYW1lT25seSdcbn1cblxuZW51bSBUb2tlblN1YnN0aXR1dGlvbktleSB7XG4gIENpcmN1bGFyUmVmZXJlbmNlID0gJ0NpcmN1bGFyUmVmZXJlbmNlJyxcbiAgRnVuY3Rpb24gPSAnRnVuY3Rpb24nLFxuICBNYXhEZXB0aExpbWl0UmVhY2hlZCA9ICdNYXhEZXB0aExpbWl0UmVhY2hlZCcsXG4gIE1heERlcHRoTGltaXRSZWFjaGVkQXJyYXkgPSAnTWF4RGVwdGhMaW1pdFJlYWNoZWRBcnJheScsXG4gIFRvSlNPTkZhaWxlZCA9ICdUb0pTT05GYWlsZWQnLFxuICBVbmRlZmluZWQgPSAnVW5kZWZpbmVkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0b0pzb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvSnNvbk9wdGlvbnMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBmdW5jdGlvbnMgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIEpTT04gb3V0cHV0IChkZWZhdWx0OiBgZXhjbHVkZWApLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25IYW5kbGluZ01vZGU6IEZ1bmN0aW9uSGFuZGxpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gZGVwdGggb2YgbmVzdGVkIG9iamVjdHMgdG8gaW5jbHVkZSBpbiB0aGUgSlNPTiBvdXRwdXQuXG4gICAqIFVzZSBgLTFgIGZvciBubyBsaW1pdC5cbiAgICogRGVmYXVsdHMgdG8gYC0xYC5cbiAgICovXG4gIHJlYWRvbmx5IG1heERlcHRoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGNhdGNoIGVycm9ycyBpbiBgdG9KU09OKClgIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBhIHBsYWNlaG9sZGVyLlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQ2F0Y2hUb0pTT05FcnJvcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGhhbmRsZSBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSBKU09OIG91dHB1dC5cbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEhhbmRsZUNpcmN1bGFyUmVmZXJlbmNlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gaGFuZGxlIGVycm9ycyBpbiB0aGUgSlNPTiBvdXRwdXQuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIYW5kbGVFcnJvcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGhhbmRsZSBgdW5kZWZpbmVkYCB2YWx1ZXMgaW4gdGhlIEpTT04gb3V0cHV0LlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSGFuZGxlVW5kZWZpbmVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBzb3J0IHRoZSBrZXlzIG9mIHRoZSBKU09OIG91dHB1dC5cbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNvcnRLZXlzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBKU09OIG91dHB1dC4gVGhpcyBjYW4gYmUgYSBudW1iZXIgb2Ygc3BhY2VzIG9yIGEgc3RyaW5nLiBEZWZhdWx0cyB0byBgMmAuXG4gICAqL1xuICByZWFkb25seSBzcGFjZTogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHN1YnN0aXR1dGlvbnMgdG8gdXNlIGluIHRoZSBKU09OIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHRva2VuU3Vic3RpdHV0aW9uczogUGFydGlhbDxUb2tlblN1YnN0aXR1dGlvbnM+O1xufVxuXG5pbnRlcmZhY2UgQXBwbHlTdWJzdGl0dXRpb25zUGFyYW1zIHtcbiAgcmVhZG9ubHkgZnVuY3Rpb25UZXh0czogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG4gIHJlYWRvbmx5IGtleTogVG9rZW5TdWJzdGl0dXRpb25LZXk7XG4gIHJlYWRvbmx5IHN1YnN0aXR1dGlvbnM6IFRva2VuU3Vic3RpdHV0aW9ucztcbn1cblxuaW50ZXJmYWNlIEVxdWFsaXR5Q29tcGFyZXJFbnRyeTxUPiB7XG4gIGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxUPjtcbiAgZXF1YWxpdHlDb21wYXJlcihhOiBULCBiOiBUKTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpTT05TZXJpYWxpemFibGUge1xuICB0b0pTT04oLi4uYXJnczogdW5rbm93bltdKTogdW5rbm93bjtcbn1cblxuaW50ZXJmYWNlIE1vZHVsZVdpdGhEZWZhdWx0RXhwb3J0PFQ+IHtcbiAgZGVmYXVsdDogVDtcbn1cblxuaW50ZXJmYWNlIFJlc29sdmVkVG9Kc29uT3B0aW9ucyBleHRlbmRzIFRvSnNvbk9wdGlvbnMge1xuICByZWFkb25seSB0b2tlblN1YnN0aXR1dGlvbnM6IFRva2VuU3Vic3RpdHV0aW9ucztcbn1cblxuaW50ZXJmYWNlIFRva2VuU3Vic3RpdHV0aW9ucyB7XG4gIGNpcmN1bGFyUmVmZXJlbmNlOiBzdHJpbmc7XG4gIG1heERlcHRoTGltaXRSZWFjaGVkOiBzdHJpbmc7XG4gIHRvSlNPTkZhaWxlZDogc3RyaW5nO1xufVxuXG5jb25zdCBLRVlfU0VQQVJBVE9SID0gJy4nO1xuY29uc3QgZXF1YWxpdHlDb21wYXJlckVudHJpZXMgPSBjcmVhdGVFcXVhbGl0eUNvbXBhcmVyRW50cmllcyhcbiAgW1xuICAgIHsgY29uc3RydWN0b3I6IEFycmF5QnVmZmVyLCBlcXVhbGl0eUNvbXBhcmVyOiBkZWVwRXF1YWxBcnJheUJ1ZmZlciB9LFxuICAgIHsgY29uc3RydWN0b3I6IERhdGUsIGVxdWFsaXR5Q29tcGFyZXI6IGRlZXBFcXVhbERhdGUgfSxcbiAgICB7IGNvbnN0cnVjdG9yOiBSZWdFeHAsIGVxdWFsaXR5Q29tcGFyZXI6IGRlZXBFcXVhbFJlZ0V4cCB9LFxuICAgIHsgY29uc3RydWN0b3I6IE1hcCwgZXF1YWxpdHlDb21wYXJlcjogZGVlcEVxdWFsTWFwIH0sXG4gICAgeyBjb25zdHJ1Y3RvcjogU2V0LCBlcXVhbGl0eUNvbXBhcmVyOiBkZWVwRXF1YWxTZXQgfVxuICBdIGFzIGNvbnN0XG4pO1xuXG50eXBlIEtleXNXaXRoVW5kZWZpbmVkPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXS0/OiB1bmRlZmluZWQgZXh0ZW5kcyBUW0tdID8gSyA6IG5ldmVyO1xufVtrZXlvZiBUXTtcblxudHlwZSBNYW5kYXRvcnlLZXlzV2l0aFVuZGVmaW5lZDxUIGV4dGVuZHMgb2JqZWN0PiA9IEV4dHJhY3Q8UmVxdWlyZWRLZXlzT2Y8VD4gJiBTdHJpbmdLZXlzPFQ+LCBLZXlzV2l0aFVuZGVmaW5lZDxUPj47XG5cbnR5cGUgUmVtb3ZlVW5kZWZpbmVkT3ZlcmxvYWQ8VCBleHRlbmRzIG9iamVjdD4gPSBNYW5kYXRvcnlLZXlzV2l0aFVuZGVmaW5lZDxUPiBleHRlbmRzIG5ldmVyID8gW29iajogVF1cbiAgOiBuZXZlcjtcblxudHlwZSBSZW1vdmVVbmRlZmluZWRXaXRoS2V5c092ZXJsb2FkPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXT4gPSBbb2JqOiBULCBrZXlzVG9LZWVwOiBFeGFjdE1lbWJlcnM8TWFuZGF0b3J5S2V5c1dpdGhVbmRlZmluZWQ8VD4sIEs+XTtcblxuLyoqXG4gKiBBc3NpZ25zIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhIHRhcmdldCBvYmplY3QsIGluY2x1ZGluZyBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0YXJnZXQgb2JqZWN0IHR5cGUuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgc291cmNlIG9iamVjdCB0eXBlLlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBhc3NpZ25lZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3QsIFU+KHRhcmdldDogVCwgc291cmNlOiBVKTogVCAmIFU7XG4vKipcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0YXJnZXQgb2JqZWN0IHR5cGUuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgZmlyc3Qgc291cmNlIG9iamVjdCB0eXBlLlxuICogQHR5cGVQYXJhbSBWIC0gVGhlIHNlY29uZCBzb3VyY2Ugb2JqZWN0IHR5cGUuXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIHRhcmdldCBvYmplY3QgdG8gYXNzaWduIHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0gc291cmNlMSAtIFRoZSBmaXJzdCBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0gc291cmNlMiAtIFRoZSBzZWNvbmQgc291cmNlIG9iamVjdCB0byBhc3NpZ24gcHJvcGVydGllcyBmcm9tLlxuICogQHJldHVybnMgVGhlIHRhcmdldCBvYmplY3Qgd2l0aCB0aGUgYXNzaWduZWQgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbldpdGhOb25FbnVtZXJhYmxlUHJvcGVydGllczxUIGV4dGVuZHMgb2JqZWN0LCBVLCBWPih0YXJnZXQ6IFQsIHNvdXJjZTE6IFUsIHNvdXJjZTI6IFYpOiBUICYgVSAmIFY7XG4vKipcbiAqIEFzc2lnbnMgcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGEgdGFyZ2V0IG9iamVjdCwgaW5jbHVkaW5nIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHRhcmdldCBvYmplY3QgdHlwZS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSBmaXJzdCBzb3VyY2Ugb2JqZWN0IHR5cGUuXG4gKiBAdHlwZVBhcmFtIFYgLSBUaGUgc2Vjb25kIHNvdXJjZSBvYmplY3QgdHlwZS5cbiAqIEB0eXBlUGFyYW0gVyAtIFRoZSB0aGlyZCBzb3VyY2Ugb2JqZWN0IHR5cGUuXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIHRhcmdldCBvYmplY3QgdG8gYXNzaWduIHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0gc291cmNlMSAtIFRoZSBmaXJzdCBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0gc291cmNlMiAtIFRoZSBzZWNvbmQgc291cmNlIG9iamVjdCB0byBhc3NpZ24gcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHNvdXJjZTMgLSBUaGUgdGhpcmQgc291cmNlIG9iamVjdCB0byBhc3NpZ24gcHJvcGVydGllcyBmcm9tLlxuICogQHJldHVybnMgVGhlIHRhcmdldCBvYmplY3Qgd2l0aCB0aGUgYXNzaWduZWQgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbldpdGhOb25FbnVtZXJhYmxlUHJvcGVydGllczxUIGV4dGVuZHMgb2JqZWN0LCBVLCBWLCBXPih0YXJnZXQ6IFQsIHNvdXJjZTE6IFUsIHNvdXJjZTI6IFYsIHNvdXJjZTM6IFcpOiBUICYgVSAmIFYgJiBXO1xuLyoqXG4gKiBBc3NpZ25zIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhIHRhcmdldCBvYmplY3QsIGluY2x1ZGluZyBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBhc3NpZ24gcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSBzb3VyY2VzIC0gVGhlIHNvdXJjZSBvYmplY3RzIHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBhc3NpZ25lZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzKHRhcmdldDogb2JqZWN0LCAuLi5zb3VyY2VzOiBvYmplY3RbXSk6IG9iamVjdCB7XG4gIHJldHVybiBhc3NpZ25XaXRoTm9uRW51bWVyYWJsZVByb3BlcnRpZXNJbXBsKHRhcmdldCwgLi4uc291cmNlcyk7XG59XG4vKipcbiAqIENhc3RzIGEgdmFsdWUgdG8gYSBzcGVjaWZpYyB0eXBlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0YXJnZXQgdHlwZSB0byBjYXN0IHRvLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNhc3QuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgYXMgdGhlIHNwZWNpZmllZCB0eXBlLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBXZSBuZWVkIHRvIGNhc3QuXG5leHBvcnQgZnVuY3Rpb24gY2FzdFRvPFQ+KHZhbHVlOiB1bmtub3duKTogVCB7XG4gIHJldHVybiB2YWx1ZSBhcyBUO1xufVxuLyoqXG4gKiBDbG9uZXMgYW4gb2JqZWN0LCBpbmNsdWRpbmcgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3Qgd2l0aCB0aGUgc2FtZSBwcm9wZXJ0aWVzIGFzIHRoZSBvcmlnaW5hbCBvYmplY3QsIGluY2x1ZGluZyBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVXaXRoTm9uRW51bWVyYWJsZVByb3BlcnRpZXM8VCBleHRlbmRzIG9iamVjdD4ob2JqOiBUKTogVCB7XG4gIHJldHVybiBPYmplY3QuY3JlYXRlKGdldFByb3RvdHlwZU9mKG9iaiksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaikpIGFzIFQ7XG59XG4vKipcbiAqIENvbXBhcmVzIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGRlZXBseSBlcXVhbC5cbiAqXG4gKiBAcGFyYW0gYSAtIFRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIGIgLSBUaGUgc2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZGVlcGx5IGVxdWFsLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBFcXVhbChhOiB1bmtub3duLCBiOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBiICE9PSAnb2JqZWN0JyB8fCBhID09PSBudWxsIHx8IGIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBhQ29uc3RydWN0b3IgPSBhLmNvbnN0cnVjdG9yO1xuICBjb25zdCBiQ29uc3RydWN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuXG4gIGlmIChhQ29uc3RydWN0b3IgIT09IGJDb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChhQ29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGRlZXBFcXVhbFR5cGVkKGEsIGIpO1xuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBrZXlzQSA9IGdldEFsbEtleXMoYSk7XG4gIGNvbnN0IGtleXNCID0gZ2V0QWxsS2V5cyhiKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBhUmVjb3JkID0gZW5zdXJlR2VuZXJpY09iamVjdChhKTtcbiAgY29uc3QgYlJlY29yZCA9IGVuc3VyZUdlbmVyaWNPYmplY3QoYik7XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcbiAgICBpZiAoIWtleXNCLmluY2x1ZGVzKGtleSkgfHwgIWRlZXBFcXVhbChhUmVjb3JkW2tleV0sIGJSZWNvcmRba2V5XSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBEZWxldGVzIG11bHRpcGxlIHByb3BlcnRpZXMgZnJvbSBhbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGRlbGV0ZSB0aGUgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHByb3BlcnR5TmFtZXMgLSBUaGUgbmFtZXMgb2YgdGhlIHByb3BlcnRpZXMgdG8gZGVsZXRlLlxuICogQHJldHVybnMgYHRydWVgIGlmIGFueSBvZiB0aGUgcHJvcGVydGllcyB3ZXJlIHByZXNlbnQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlUHJvcGVydGllczxUIGV4dGVuZHMgb2JqZWN0PihvYmo6IFQsIHByb3BlcnR5TmFtZXM6IChrZXlvZiBUKVtdKTogYm9vbGVhbiB7XG4gIGxldCBhbnMgPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiBwcm9wZXJ0eU5hbWVzKSB7XG4gICAgYW5zID0gZGVsZXRlUHJvcGVydHkob2JqLCBwcm9wZXJ0eU5hbWUpIHx8IGFucztcbiAgfVxuXG4gIHJldHVybiBhbnM7XG59XG5cbi8qKlxuICogRGVsZXRlcyBhIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBkZWxldGUgdGhlIHByb3BlcnR5IGZyb20uXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRlbGV0ZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgd2FzIHByZXNlbnQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlUHJvcGVydHk8VCBleHRlbmRzIG9iamVjdD4ob2JqOiBULCBwcm9wZXJ0eU5hbWU6IGtleW9mIFQpOiBib29sZWFuIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKG9iaiwgcHJvcGVydHlOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gIGRlbGV0ZSBvYmpbcHJvcGVydHlOYW1lXTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIGRlZmF1bHQgZXhwb3J0IGZyb20gYSBtb2R1bGUuXG4gKlxuICogVXNlZnVsIHRvIGhhbmRsZSBpbmNvcnJlY3QgZGVmYXVsdCBleHBvcnQgaW50ZXJvcCBiZXR3ZWVuIEVTTSBhbmQgQ0pTLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBkZWZhdWx0IGV4cG9ydC5cbiAqIEBwYXJhbSBtb2R1bGUgLSBUaGUgbW9kdWxlIHRvIGV4dHJhY3QgdGhlIGRlZmF1bHQgZXhwb3J0IGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZGVmYXVsdCBleHBvcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGVmYXVsdEV4cG9ydEludGVyb3A8VD4obW9kdWxlOiBNb2R1bGVXaXRoRGVmYXVsdEV4cG9ydDxUPiB8IFQpOiBUIHtcbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICdvYmplY3QnIHx8IG1vZHVsZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBtb2R1bGU7XG4gIH1cblxuICBpZiAoJ2RlZmF1bHQnIGluIG1vZHVsZSkge1xuICAgIHJldHVybiBtb2R1bGUuZGVmYXVsdDtcbiAgfVxuXG4gIHJldHVybiBtb2R1bGU7XG59XG5cbi8qKlxuICogR2V0cyBhbGwgZW50cmllcyBvZiBhbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGdldCB0aGUgZW50cmllcyBvZi5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFsbCBlbnRyaWVzIG9mIHRoZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxFbnRyaWVzPFQgZXh0ZW5kcyBvYmplY3Q+KG9iajogVCk6IFtTdHJpbmdLZXlzPFQ+LCBUW1N0cmluZ0tleXM8VD5dXVtdIHtcbiAgcmV0dXJuIGdldEFsbEtleXMob2JqKS5tYXAoKGtleSkgPT4gW2tleSwgb2JqW2tleV1dKTtcbn1cblxuLyoqXG4gKiBHZXRzIGFsbCBrZXlzIG9mIGFuIG9iamVjdC5cbiAqIEluY2x1ZGVzIGZpZWxkcyBhbmQgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gZ2V0IHRoZSBrZXlzIG9mLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWxsIGtleXMgb2YgdGhlIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbEtleXM8VCBleHRlbmRzIG9iamVjdD4ob2JqOiBUKTogU3RyaW5nS2V5czxUPltdIHtcbiAgY29uc3Qga2V5czogU3RyaW5nS2V5czxUPltdID0gW107XG4gIGxldCBjdXJyZW50OiBudWxsIHwgb2JqZWN0ID0gb2JqO1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY3VycmVudCk7XG4gICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdG9yXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdG9ycykpIHtcbiAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc0dldHRlciA9IHR5cGVvZiBkZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGNvbnN0IGhhc1NldHRlciA9IHR5cGVvZiBkZXNjcmlwdG9yLnNldCA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmIChoYXNHZXR0ZXIgfHwgaGFzU2V0dGVyKSB7XG4gICAgICAgIGlmIChoYXNHZXR0ZXIgJiYgaGFzU2V0dGVyKSB7XG4gICAgICAgICAga2V5cy5wdXNoKGtleSBhcyBTdHJpbmdLZXlzPFQ+KTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZSAmJiBkZXNjcmlwdG9yLndyaXRhYmxlKSB7XG4gICAgICAgIGtleXMucHVzaChrZXkgYXMgU3RyaW5nS2V5czxUPik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KSBhcyBudWxsIHwgb2JqZWN0O1xuICB9XG4gIHJldHVybiBrZXlzLnNvcnQoKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBvZiBhIG5lc3RlZCBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBnZXQgdGhlIG5lc3RlZCBwcm9wZXJ0eSB2YWx1ZSBmcm9tLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgbmVzdGVkIHByb3BlcnR5LlxuICogQHJldHVybnMgVGhlIHZhbHVlIG9mIHRoZSBuZXN0ZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKG9iajogR2VuZXJpY09iamVjdCwgcGF0aDogc3RyaW5nKTogdW5rbm93biB7XG4gIGxldCBub2RlOiBHZW5lcmljT2JqZWN0IHwgdW5kZWZpbmVkID0gb2JqO1xuICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdChLRVlfU0VQQVJBVE9SKTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG5vZGUgPSBub2RlW2tleV0gYXMgR2VuZXJpY09iamVjdCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHByb3RvdHlwZSBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtIGluc3RhbmNlIC0gVGhlIG9iamVjdCBpbnN0YW5jZSB0byByZXRyaWV2ZSB0aGUgcHJvdG90eXBlIG9mLlxuICogQHJldHVybnMgVGhlIHByb3RvdHlwZSBvZiB0aGUgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2Y8VD4oaW5zdGFuY2U6IFQpOiBUIHtcbiAgaWYgKGluc3RhbmNlID09PSB1bmRlZmluZWQgfHwgaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnN0YW5jZSkgYXMgVDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIG5hbWUgb2YgYSBwcm9wZXJ0eSBvZiBhIGdpdmVuIHR5cGUgYFRgLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgcHJvcGVydHkuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBhcyBhIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVvZjxUIGV4dGVuZHMgb2JqZWN0PihuYW1lOiBTdHJpbmdLZXlzPFQ+KTogU3RyaW5nS2V5czxUPiB7XG4gIHJldHVybiBuYW1lO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgb3B0aW9uYWwgcHJvcGVydGllcyB0byBhbGxvdyBgdW5kZWZpbmVkYCBhc3NpZ25tZW50IGluIHN0cmljdCBtb2RlLlxuICpcbiAqIFRoaXMgdXRpbGl0eSBwcm92aWRlcyBhIHdvcmthcm91bmQgZm9yIHRoZSBgZXhhY3RPcHRpb25hbFByb3BlcnR5VHlwZXNgIFR5cGVTY3JpcHQgZmxhZyxcbiAqIHdoaWNoIHByb2hpYml0cyBkaXJlY3RseSBhc3NpZ25pbmcgYHVuZGVmaW5lZGAgdG8gb3B0aW9uYWwgcHJvcGVydGllcyB3aGVuIHRoZSB0eXBlXG4gKiBleHBsaWNpdGx5IG9taXRzIGB1bmRlZmluZWRgLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBXaXRoIGBleGFjdE9wdGlvbmFsUHJvcGVydHlUeXBlczogdHJ1ZWBcbiAqIGNvbnN0IHg6IHsgcHJvcD86IHN0cmluZyB9ID0geyBwcm9wOiB1bmRlZmluZWQgfTsgLy8gQ29tcGlsZXIgZXJyb3JcbiAqXG4gKiAvLyBVc2luZyB0aGlzIHV0aWxpdHk6XG4gKiBjb25zdCB5OiB7IHByb3A/OiBzdHJpbmcgfSA9IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczx7IHByb3A/OiBzdHJpbmcgfT4oeyBwcm9wOiB1bmRlZmluZWQgfSk7IC8vIFdvcmtzXG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdGFyZ2V0IHR5cGUgd2l0aCBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIG5vcm1hbGl6ZS5cbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIG5vcm1hbGl6ZSwgYWxsb3dpbmcgZXhwbGljaXQgYHVuZGVmaW5lZGAgZm9yIG9wdGlvbmFsIHByb3BlcnRpZXMuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBvYmplY3QsIGNvbXBhdGlibGUgd2l0aCBgZXhhY3RPcHRpb25hbFByb3BlcnR5VHlwZXNgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFQ+KG9iajogVW5kZWZpbmVkT25QYXJ0aWFsRGVlcDxUPik6IFQge1xuICByZXR1cm4gb2JqIGFzIFQ7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgYHVuZGVmaW5lZGAgcHJvcGVydGllcyBmcm9tIGFuIG9iamVjdCB3aGVuIHRoZXJlIGFyZSBubyBtYW5kYXRvcnkga2V5cyB3aXRoIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtIGFyZ3MgLSBUaGUgYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBvYmplY3Qgd2l0aCBhbGwgYHVuZGVmaW5lZGAgcHJvcGVydGllcyByZW1vdmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllczxUeXBlIGV4dGVuZHMgb2JqZWN0PihcbiAgLi4uYXJnczogUmVtb3ZlVW5kZWZpbmVkT3ZlcmxvYWQ8VHlwZT5cbik6IFR5cGU7XG4vKipcbiAqIFJlbW92ZXMgYWxsIGB1bmRlZmluZWRgIHByb3BlcnRpZXMgZnJvbSBhbiBvYmplY3Qgd2hlbiB0aGVyZSBhcmUgbWFuZGF0b3J5IGtleXMgd2l0aCBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHR5cGVQYXJhbSBUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqIEB0eXBlUGFyYW0gS2V5c1RvS2VlcCAtIFRoZSBrZXlzIHRvIGtlZXAuXG4gKiBAcGFyYW0gYXJncyAtIFRoZSBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIG9iamVjdCB3aXRoIGFsbCBgdW5kZWZpbmVkYCBwcm9wZXJ0aWVzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzPFR5cGUgZXh0ZW5kcyBvYmplY3QsIGNvbnN0IEtleXNUb0tlZXAgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXT4oXG4gIC4uLmFyZ3M6IFJlbW92ZVVuZGVmaW5lZFdpdGhLZXlzT3ZlcmxvYWQ8VHlwZSwgS2V5c1RvS2VlcD5cbik6IFR5cGU7XG4vKipcbiAqIFJlbW92ZXMgYWxsIGB1bmRlZmluZWRgIHByb3BlcnRpZXMgZnJvbSBhbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIHJlbW92ZSBgdW5kZWZpbmVkYCBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0ga2V5c1RvS2VlcCAtIFRoZSBrZXlzIHRvIGtlZXAuXG4gKiBAcmV0dXJucyBUaGUgb2JqZWN0IHdpdGggYWxsIGB1bmRlZmluZWRgIHByb3BlcnRpZXMgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXM8VHlwZSBleHRlbmRzIG9iamVjdD4ob2JqOiBUeXBlLCBrZXlzVG9LZWVwPzogcmVhZG9ubHkgc3RyaW5nW10pOiBUeXBlIHtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSBhcyBbU3RyaW5nS2V5czxUeXBlPiwgdW5rbm93bl1bXSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFrZXlzVG9LZWVwPy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgb2YgYSBuZXN0ZWQgcHJvcGVydHkgaW4gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIHNldCB0aGUgbmVzdGVkIHByb3BlcnR5IHZhbHVlIGluLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgbmVzdGVkIHByb3BlcnR5LlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE5lc3RlZFByb3BlcnR5VmFsdWUob2JqOiBHZW5lcmljT2JqZWN0LCBwYXRoOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBQcm9wZXJ0eSBwYXRoICR7cGF0aH0gbm90IGZvdW5kYCk7XG4gIGxldCBub2RlOiBHZW5lcmljT2JqZWN0IHwgdW5kZWZpbmVkID0gb2JqO1xuICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdChLRVlfU0VQQVJBVE9SKTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cy5zbGljZSgwLCAtMSkpIHtcbiAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgbm9kZSA9IG5vZGVba2V5XSBhcyBHZW5lcmljT2JqZWN0IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbGFzdEtleSA9IGVuc3VyZU5vbk51bGxhYmxlKGtleXMuYXQoLTEpKTtcbiAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgbm9kZVtsYXN0S2V5XSA9IHZhbHVlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgZ2l2ZW4gdmFsdWUgdG8gYSBKU09OIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgY29udmVydGVkIHRvIEpTT04uIFRoaXMgY2FuIGJlIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciBjdXN0b21pemluZyB0aGUgSlNPTiBjb252ZXJzaW9uIHByb2Nlc3MuXG4gKiBAcmV0dXJucyBUaGUgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uKHZhbHVlOiB1bmtub3duLCBvcHRpb25zOiBQYXJ0aWFsPFRvSnNvbk9wdGlvbnM+ID0ge30pOiBzdHJpbmcge1xuICBjb25zdCBERUZBVUxUX09QVElPTlM6IFJlc29sdmVkVG9Kc29uT3B0aW9ucyA9IHtcbiAgICBmdW5jdGlvbkhhbmRsaW5nTW9kZTogRnVuY3Rpb25IYW5kbGluZ01vZGUuRXhjbHVkZSxcbiAgICBtYXhEZXB0aDogLTEsXG4gICAgc2hvdWxkQ2F0Y2hUb0pTT05FcnJvcnM6IGZhbHNlLFxuICAgIHNob3VsZEhhbmRsZUNpcmN1bGFyUmVmZXJlbmNlczogZmFsc2UsXG4gICAgc2hvdWxkSGFuZGxlRXJyb3JzOiBmYWxzZSxcbiAgICBzaG91bGRIYW5kbGVVbmRlZmluZWQ6IGZhbHNlLFxuICAgIHNob3VsZFNvcnRLZXlzOiBmYWxzZSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBFeHRyYWN0aW5nIG1hZ2ljIG51bWJlciBhcyBhIGNvbnN0YW50IHdvdWxkIGJlIHJlcGV0aXRpdmUsIGFzIHRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBhbmQgaXRzIG5hbWUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5LlxuICAgIHNwYWNlOiAyLFxuICAgIHRva2VuU3Vic3RpdHV0aW9uczoge1xuICAgICAgY2lyY3VsYXJSZWZlcmVuY2U6IG1ha2VPYmplY3RUb2tlblN1YnN0aXR1dGlvbihUb2tlblN1YnN0aXR1dGlvbktleS5DaXJjdWxhclJlZmVyZW5jZSksXG4gICAgICBtYXhEZXB0aExpbWl0UmVhY2hlZDogbWFrZU9iamVjdFRva2VuU3Vic3RpdHV0aW9uKFRva2VuU3Vic3RpdHV0aW9uS2V5Lk1heERlcHRoTGltaXRSZWFjaGVkKSxcbiAgICAgIHRvSlNPTkZhaWxlZDogbWFrZU9iamVjdFRva2VuU3Vic3RpdHV0aW9uKFRva2VuU3Vic3RpdHV0aW9uS2V5LlRvSlNPTkZhaWxlZClcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZnVsbE9wdGlvbnMgPSB7XG4gICAgLi4uREVGQVVMVF9PUFRJT05TLFxuICAgIC4uLm9wdGlvbnMsXG4gICAgdG9rZW5TdWJzdGl0dXRpb25zOiB7XG4gICAgICAuLi5ERUZBVUxUX09QVElPTlMudG9rZW5TdWJzdGl0dXRpb25zLFxuICAgICAgLi4ub3B0aW9ucy50b2tlblN1YnN0aXR1dGlvbnNcbiAgICB9XG4gIH07XG5cbiAgaWYgKGZ1bGxPcHRpb25zLm1heERlcHRoID09PSAtMSkge1xuICAgIGZ1bGxPcHRpb25zLm1heERlcHRoID0gSW5maW5pdHk7XG4gIH1cblxuICBjb25zdCBmdW5jdGlvblRleHRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCB1c2VkT2JqZWN0cyA9IG5ldyBXZWFrU2V0PG9iamVjdD4oKTtcblxuICBjb25zdCBwbGFpbk9iamVjdCA9IHRvUGxhaW5PYmplY3QodmFsdWUsICcnLCAwLCB0cnVlLCBmdWxsT3B0aW9ucywgZnVuY3Rpb25UZXh0cywgdXNlZE9iamVjdHMpO1xuICBsZXQganNvbiA9IGVuc3VyZU5vbk51bGxhYmxlKEpTT04uc3RyaW5naWZ5KHBsYWluT2JqZWN0LCBudWxsLCBmdWxsT3B0aW9ucy5zcGFjZSkpO1xuICBqc29uID0gcmVwbGFjZUFsbChqc29uLCAvXCJcXFtcXFsoPzxLZXk+W0EtWmEtel0rKSg/PEluZGV4PlxcZCopXFxdXFxdXCIvZywgKHsgY2FwdHVyZWRHcm91cEFyZ3M6IFtrZXkgPSAnJywgaW5kZXhTdHIgPSAnJ10gfSkgPT5cbiAgICBhcHBseVN1YnN0aXR1dGlvbnMoe1xuICAgICAgZnVuY3Rpb25UZXh0cyxcbiAgICAgIGluZGV4OiBpbmRleFN0ciA/IHBhcnNlSW50KGluZGV4U3RyLCAxMCkgOiAwLFxuICAgICAga2V5OiBrZXkgYXMgVG9rZW5TdWJzdGl0dXRpb25LZXksXG4gICAgICBzdWJzdGl0dXRpb25zOiBmdWxsT3B0aW9ucy50b2tlblN1YnN0aXR1dGlvbnNcbiAgICB9KSk7XG4gIHJldHVybiBqc29uO1xufVxuXG5mdW5jdGlvbiBhcHBseVN1YnN0aXR1dGlvbnMocGFyYW1zOiBBcHBseVN1YnN0aXR1dGlvbnNQYXJhbXMpOiBNYXliZVJldHVybjxzdHJpbmc+IHtcbiAgc3dpdGNoIChwYXJhbXMua2V5KSB7XG4gICAgY2FzZSBUb2tlblN1YnN0aXR1dGlvbktleS5DaXJjdWxhclJlZmVyZW5jZTpcbiAgICAgIHJldHVybiBwYXJhbXMuc3Vic3RpdHV0aW9ucy5jaXJjdWxhclJlZmVyZW5jZTtcbiAgICBjYXNlIFRva2VuU3Vic3RpdHV0aW9uS2V5LkZ1bmN0aW9uOlxuICAgICAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKHBhcmFtcy5mdW5jdGlvblRleHRzW3BhcmFtcy5pbmRleF0sIGBGdW5jdGlvbiB3aXRoIGluZGV4ICR7U3RyaW5nKHBhcmFtcy5pbmRleCl9IG5vdCBmb3VuZGApO1xuICAgIGNhc2UgVG9rZW5TdWJzdGl0dXRpb25LZXkuTWF4RGVwdGhMaW1pdFJlYWNoZWQ6XG4gICAgICByZXR1cm4gcGFyYW1zLnN1YnN0aXR1dGlvbnMubWF4RGVwdGhMaW1pdFJlYWNoZWQ7XG4gICAgY2FzZSBUb2tlblN1YnN0aXR1dGlvbktleS5NYXhEZXB0aExpbWl0UmVhY2hlZEFycmF5OlxuICAgICAgcmV0dXJuIGBBcnJheSgke1N0cmluZyhwYXJhbXMuaW5kZXgpfSlgO1xuICAgIGNhc2UgVG9rZW5TdWJzdGl0dXRpb25LZXkuVG9KU09ORmFpbGVkOlxuICAgICAgcmV0dXJuIHBhcmFtcy5zdWJzdGl0dXRpb25zLnRvSlNPTkZhaWxlZDtcbiAgICBjYXNlIFRva2VuU3Vic3RpdHV0aW9uS2V5LlVuZGVmaW5lZDpcbiAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gRXhoYXVzdGl2ZSBzd2l0Y2ggZ3VhcmQ7IGRlZmF1bHQgYnJhbmNoIGlzIHVucmVhY2hhYmxlLiAqL1xuICAgIGRlZmF1bHQ6XG4gICAgICBhc3NlcnQoZmFsc2UsICdVbmhhbmRsZWQgc3Vic3RpdHV0aW9uIGtleScpO1xuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NpZ25XaXRoTm9uRW51bWVyYWJsZVByb3BlcnRpZXNJbXBsKHRhcmdldDogb2JqZWN0LCAuLi5zb3VyY2VzOiBvYmplY3RbXSk6IG9iamVjdCB7XG4gIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGRlc2NyaXB0b3JdIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0b3JzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQXZvaWQgcmVkZWZpbmluZyByZWFkLW9ubHkgcHJvcGVydGllcyAoZXNwZWNpYWxseSBgcHJvdG90eXBlYClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSA9PT0gJ3Byb3RvdHlwZSdcbiAgICAgICAgICB8fCAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk/LndyaXRhYmxlID09PSBmYWxzZVxuICAgICAgICAgICAgJiYgIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpPy5jb25maWd1cmFibGUpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUgaWYgZGVmaW5lUHJvcGVydHkgZmFpbHNcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzb3VyY2VQcm90b3R5cGVzID0gc291cmNlc1xuICAgIC5tYXAoKHNvdXJjZSkgPT4gZ2V0UHJvdG90eXBlT2Y8b2JqZWN0IHwgdW5kZWZpbmVkPihzb3VyY2UpKVxuICAgIC5maWx0ZXIoKHByb3RvKTogcHJvdG8gaXMgb2JqZWN0ID0+ICEhcHJvdG8pO1xuXG4gIGlmIChzb3VyY2VQcm90b3R5cGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB0YXJnZXRQcm90b3R5cGUgPSBhc3NpZ25XaXRoTm9uRW51bWVyYWJsZVByb3BlcnRpZXNJbXBsKHt9LCBnZXRQcm90b3R5cGVPZih0YXJnZXQpLCAuLi5zb3VyY2VQcm90b3R5cGVzKTtcblxuICAgIHRyeSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCB0YXJnZXRQcm90b3R5cGUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU2lsZW50bHkgaWdub3JlIGlmIHNldFByb3RvdHlwZU9mIGZhaWxzXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gYHVua25vd25gIGRvZXNuJ3Qgd29yaywgZ2V0dGluZyBjb21waWxlciBlcnJvcnMuXG5mdW5jdGlvbiBjcmVhdGVFcXVhbGl0eUNvbXBhcmVyRW50cmllczxjb25zdCBUIGV4dGVuZHMgcmVhZG9ubHkgRXF1YWxpdHlDb21wYXJlckVudHJ5PGFueT5bXT4oZW50cmllczogVCk6IFQge1xuICByZXR1cm4gZW50cmllcztcbn1cblxuZnVuY3Rpb24gZGVlcEVxdWFsQXJyYXlCdWZmZXIoYTogQXJyYXlCdWZmZXIsIGI6IEFycmF5QnVmZmVyKTogYm9vbGVhbiB7XG4gIGlmIChhLmJ5dGVMZW5ndGggIT09IGIuYnl0ZUxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHZpZXdBID0gbmV3IFVpbnQ4QXJyYXkoYSk7XG4gIGNvbnN0IHZpZXdCID0gbmV3IFVpbnQ4QXJyYXkoYik7XG4gIHJldHVybiBkZWVwRXF1YWwodmlld0EsIHZpZXdCKTtcbn1cblxuZnVuY3Rpb24gZGVlcEVxdWFsRGF0ZShhOiBEYXRlLCBiOiBEYXRlKTogYm9vbGVhbiB7XG4gIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCk7XG59XG5cbmZ1bmN0aW9uIGRlZXBFcXVhbE1hcChhOiBNYXA8dW5rbm93biwgdW5rbm93bj4sIGI6IE1hcDx1bmtub3duLCB1bmtub3duPik6IGJvb2xlYW4ge1xuICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBhLmVudHJpZXMoKSkge1xuICAgIGlmICghYi5oYXMoa2V5KSB8fCAhZGVlcEVxdWFsKHZhbHVlLCBiLmdldChrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZWVwRXF1YWxSZWdFeHAoYTogUmVnRXhwLCBiOiBSZWdFeHApOiBib29sZWFuIHtcbiAgcmV0dXJuIGEuc291cmNlID09PSBiLnNvdXJjZSAmJiBhLmZsYWdzID09PSBiLmZsYWdzO1xufVxuXG5mdW5jdGlvbiBkZWVwRXF1YWxTZXQoYTogU2V0PHVua25vd24+LCBiOiBTZXQ8dW5rbm93bj4pOiBib29sZWFuIHtcbiAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChjb25zdCB2YWx1ZUEgb2YgYSkge1xuICAgIGlmIChiLmhhcyh2YWx1ZUEpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB2YWx1ZUIgb2YgYikge1xuICAgICAgaWYgKGRlZXBFcXVhbCh2YWx1ZUEsIHZhbHVlQikpIHtcbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmb3VuZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZWVwRXF1YWxUeXBlZChhOiB1bmtub3duLCBiOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgeyBjb25zdHJ1Y3RvciwgZXF1YWxpdHlDb21wYXJlciB9IG9mIGVxdWFsaXR5Q29tcGFyZXJFbnRyaWVzKSB7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvciAmJiBiIGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICAgIHJldHVybiBlcXVhbGl0eUNvbXBhcmVyKGEgYXMgbmV2ZXIsIGIgYXMgbmV2ZXIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVBcnJheShcbiAgdmFsdWU6IHVua25vd25bXSxcbiAgZGVwdGg6IG51bWJlcixcbiAgY2FuVXNlVG9KU09OOiBib29sZWFuLFxuICBmdWxsT3B0aW9uczogVG9Kc29uT3B0aW9ucyxcbiAgZnVuY3Rpb25UZXh0czogc3RyaW5nW10sXG4gIHVzZWRPYmplY3RzOiBXZWFrU2V0PG9iamVjdD5cbik6IHVua25vd24ge1xuICBpZiAoZGVwdGggPiBmdWxsT3B0aW9ucy5tYXhEZXB0aCkge1xuICAgIHJldHVybiBtYWtlUGxhY2Vob2xkZXIoVG9rZW5TdWJzdGl0dXRpb25LZXkuTWF4RGVwdGhMaW1pdFJlYWNoZWRBcnJheSwgdmFsdWUubGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB0b1BsYWluT2JqZWN0KGl0ZW0sIFN0cmluZyhpbmRleCksIGRlcHRoICsgMSwgY2FuVXNlVG9KU09OLCBmdWxsT3B0aW9ucywgZnVuY3Rpb25UZXh0cywgdXNlZE9iamVjdHMpKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlQ2lyY3VsYXJSZWZlcmVuY2UodmFsdWU6IG9iamVjdCwga2V5OiBzdHJpbmcsIGZ1bGxPcHRpb25zOiBUb0pzb25PcHRpb25zKTogdW5rbm93biB7XG4gIGlmIChmdWxsT3B0aW9ucy5zaG91bGRIYW5kbGVDaXJjdWxhclJlZmVyZW5jZXMpIHtcbiAgICByZXR1cm4gbWFrZVBsYWNlaG9sZGVyKFRva2VuU3Vic3RpdHV0aW9uS2V5LkNpcmN1bGFyUmVmZXJlbmNlKTtcbiAgfVxuICBjb25zdCB2YWx1ZUNvbnN0cnVjdG9yTmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ09iamVjdCc7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoYENvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT05cbi0tPiBzdGFydGluZyBhdCBvYmplY3Qgd2l0aCBjb25zdHJ1Y3RvciAnJHt2YWx1ZUNvbnN0cnVjdG9yTmFtZX0nXG4tLS0gcHJvcGVydHkgJyR7a2V5fScgY2xvc2VzIHRoZSBjaXJjbGVgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZnVuY3Rpb24tdHlwZSAtLSBXZSBuZWVkIHRvIHVzZSBgRnVuY3Rpb25gIHR5cGUgdG8gaGFuZGxlIHRoZW0gc2VwYXJhdGVseS5cbmZ1bmN0aW9uIGhhbmRsZUZ1bmN0aW9uKHZhbHVlOiBGdW5jdGlvbiwgZnVuY3Rpb25UZXh0czogc3RyaW5nW10sIGZ1bGxPcHRpb25zOiBUb0pzb25PcHRpb25zKTogdW5rbm93biB7XG4gIGlmIChmdWxsT3B0aW9ucy5mdW5jdGlvbkhhbmRsaW5nTW9kZSA9PT0gRnVuY3Rpb25IYW5kbGluZ01vZGUuRXhjbHVkZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgaW5kZXggPSBmdW5jdGlvblRleHRzLmxlbmd0aDtcbiAgY29uc3QgZnVuY3Rpb25UZXh0ID0gZnVsbE9wdGlvbnMuZnVuY3Rpb25IYW5kbGluZ01vZGUgPT09IEZ1bmN0aW9uSGFuZGxpbmdNb2RlLkZ1bGxcbiAgICA/IGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyh2YWx1ZSlcbiAgICA6IGBmdW5jdGlvbiAke3ZhbHVlLm5hbWUgfHwgJ2Fub255bW91cyd9KCkgeyAvKiAuLi4gKi8gfWA7XG4gIGZ1bmN0aW9uVGV4dHMucHVzaChmdW5jdGlvblRleHQpO1xuICByZXR1cm4gbWFrZVBsYWNlaG9sZGVyKFRva2VuU3Vic3RpdHV0aW9uS2V5LkZ1bmN0aW9uLCBpbmRleCk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZU9iamVjdChcbiAgdmFsdWU6IG9iamVjdCxcbiAga2V5OiBzdHJpbmcsXG4gIGRlcHRoOiBudW1iZXIsXG4gIGNhblVzZVRvSlNPTjogYm9vbGVhbixcbiAgZnVsbE9wdGlvbnM6IFRvSnNvbk9wdGlvbnMsXG4gIGZ1bmN0aW9uVGV4dHM6IHN0cmluZ1tdLFxuICB1c2VkT2JqZWN0czogV2Vha1NldDxvYmplY3Q+XG4pOiB1bmtub3duIHtcbiAgaWYgKHVzZWRPYmplY3RzLmhhcyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gaGFuZGxlQ2lyY3VsYXJSZWZlcmVuY2UodmFsdWUsIGtleSwgZnVsbE9wdGlvbnMpO1xuICB9XG5cbiAgdXNlZE9iamVjdHMuYWRkKHZhbHVlKTtcblxuICBpZiAoY2FuVXNlVG9KU09OKSB7XG4gICAgY29uc3QgdG9KU09OUmVzdWx0ID0gdHJ5SGFuZGxlVG9KU09OKHZhbHVlLCBrZXksIGRlcHRoLCBmdWxsT3B0aW9ucywgZnVuY3Rpb25UZXh0cywgdXNlZE9iamVjdHMpO1xuICAgIGlmICh0b0pTT05SZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRvSlNPTlJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gaGFuZGxlQXJyYXkodmFsdWUsIGRlcHRoLCBjYW5Vc2VUb0pTT04sIGZ1bGxPcHRpb25zLCBmdW5jdGlvblRleHRzLCB1c2VkT2JqZWN0cyk7XG4gIH1cblxuICBpZiAoZGVwdGggPiBmdWxsT3B0aW9ucy5tYXhEZXB0aCkge1xuICAgIHJldHVybiBtYWtlUGxhY2Vob2xkZXIoVG9rZW5TdWJzdGl0dXRpb25LZXkuTWF4RGVwdGhMaW1pdFJlYWNoZWQpO1xuICB9XG5cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IgJiYgZnVsbE9wdGlvbnMuc2hvdWxkSGFuZGxlRXJyb3JzKSB7XG4gICAgcmV0dXJuIGVycm9yVG9TdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIGhhbmRsZVBsYWluT2JqZWN0KHZhbHVlLCBkZXB0aCwgY2FuVXNlVG9KU09OLCBmdWxsT3B0aW9ucywgZnVuY3Rpb25UZXh0cywgdXNlZE9iamVjdHMpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVQbGFpbk9iamVjdChcbiAgdmFsdWU6IG9iamVjdCxcbiAgZGVwdGg6IG51bWJlcixcbiAgY2FuVXNlVG9KU09OOiBib29sZWFuLFxuICBmdWxsT3B0aW9uczogVG9Kc29uT3B0aW9ucyxcbiAgZnVuY3Rpb25UZXh0czogc3RyaW5nW10sXG4gIHVzZWRPYmplY3RzOiBXZWFrU2V0PG9iamVjdD5cbik6IHVua25vd24ge1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModmFsdWUpO1xuICBpZiAoZnVsbE9wdGlvbnMuc2hvdWxkU29ydEtleXMpIHtcbiAgICBlbnRyaWVzLnNvcnQoKFtrZXkxXSwgW2tleTJdKSA9PiBrZXkxLmxvY2FsZUNvbXBhcmUoa2V5MikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBlbnRyaWVzLm1hcCgoW2tleTIsIHZhbHVlMl0pID0+IFtcbiAgICAgIGtleTIsXG4gICAgICB0b1BsYWluT2JqZWN0KHZhbHVlMiwga2V5MiwgZGVwdGggKyAxLCBjYW5Vc2VUb0pTT04sIGZ1bGxPcHRpb25zLCBmdW5jdGlvblRleHRzLCB1c2VkT2JqZWN0cylcbiAgICBdKVxuICApO1xufVxuXG5mdW5jdGlvbiBtYWtlT2JqZWN0VG9rZW5TdWJzdGl0dXRpb24oa2V5OiBUb2tlblN1YnN0aXR1dGlvbktleSk6IHN0cmluZyB7XG4gIHJldHVybiBgeyBcIltbJHtrZXl9XV1cIjogbnVsbCB9YDtcbn1cblxuZnVuY3Rpb24gbWFrZVBsYWNlaG9sZGVyKGtleTogVG9rZW5TdWJzdGl0dXRpb25LZXksIGluZGV4PzogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBbWyR7a2V5fSR7aW5kZXggPyBTdHJpbmcoaW5kZXgpIDogJyd9XV1gO1xufVxuXG5mdW5jdGlvbiB0b1BsYWluT2JqZWN0KFxuICB2YWx1ZTogdW5rbm93bixcbiAga2V5OiBzdHJpbmcsXG4gIGRlcHRoOiBudW1iZXIsXG4gIGNhblVzZVRvSlNPTjogYm9vbGVhbixcbiAgZnVsbE9wdGlvbnM6IFRvSnNvbk9wdGlvbnMsXG4gIGZ1bmN0aW9uVGV4dHM6IHN0cmluZ1tdLFxuICB1c2VkT2JqZWN0czogV2Vha1NldDxvYmplY3Q+XG4pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gKGRlcHRoID09PSAwIHx8IGZ1bGxPcHRpb25zLnNob3VsZEhhbmRsZVVuZGVmaW5lZClcbiAgICAgID8gbWFrZVBsYWNlaG9sZGVyKFRva2VuU3Vic3RpdHV0aW9uS2V5LlVuZGVmaW5lZClcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBoYW5kbGVGdW5jdGlvbih2YWx1ZSwgZnVuY3Rpb25UZXh0cywgZnVsbE9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gaGFuZGxlT2JqZWN0KHZhbHVlLCBrZXksIGRlcHRoLCBjYW5Vc2VUb0pTT04sIGZ1bGxPcHRpb25zLCBmdW5jdGlvblRleHRzLCB1c2VkT2JqZWN0cyk7XG59XG5cbmZ1bmN0aW9uIHRyeUhhbmRsZVRvSlNPTihcbiAgdmFsdWU6IG9iamVjdCxcbiAga2V5OiBzdHJpbmcsXG4gIGRlcHRoOiBudW1iZXIsXG4gIGZ1bGxPcHRpb25zOiBUb0pzb25PcHRpb25zLFxuICBmdW5jdGlvblRleHRzOiBzdHJpbmdbXSxcbiAgdXNlZE9iamVjdHM6IFdlYWtTZXQ8b2JqZWN0PlxuKTogdW5rbm93biB7XG4gIGNvbnN0IHRvSlNPTiA9ICh2YWx1ZSBhcyBQYXJ0aWFsPEpTT05TZXJpYWxpemFibGU+KS50b0pTT047XG4gIGlmICh0eXBlb2YgdG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdG9KU09OLmNhbGwodmFsdWUsIGtleSk7XG4gICAgICByZXR1cm4gdG9QbGFpbk9iamVjdChuZXdWYWx1ZSwga2V5LCBkZXB0aCwgZmFsc2UsIGZ1bGxPcHRpb25zLCBmdW5jdGlvblRleHRzLCB1c2VkT2JqZWN0cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGZ1bGxPcHRpb25zLnNob3VsZENhdGNoVG9KU09ORXJyb3JzKSB7XG4gICAgICAgIHJldHVybiBtYWtlUGxhY2Vob2xkZXIoVG9rZW5TdWJzdGl0dXRpb25LZXkuVG9KU09ORmFpbGVkKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxtQkFBOEI7QUFDOUIsc0JBQTRDO0FBQzVDLG9CQUEyQjtBQUMzQix5QkFJTztBQUtBLElBQUssdUJBQUwsa0JBQUtBLDBCQUFMO0FBSUwsRUFBQUEsc0JBQUEsYUFBVTtBQUlWLEVBQUFBLHNCQUFBLFVBQU87QUFJUCxFQUFBQSxzQkFBQSxjQUFXO0FBWkQsU0FBQUE7QUFBQSxHQUFBO0FBK0da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QVEsS0FBSztBQUNwQyxNQUFJLFlBQVksZ0JBQWdCO0FBQzlCLFlBQVEsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxNQUFNLEtBQUssY0FBYyxJQUFJLENBQUM7QUFBQSxFQUMzRDtBQUVBLFNBQU8sT0FBTztBQUFBLElBQ1osUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLE1BQU0sTUFBTTtBQUFBLE1BQzlCO0FBQUEsTUFDQSxjQUFjLFFBQVEsTUFBTSxRQUFRLEdBQUcsY0FBYyxhQUFhLGVBQWUsV0FBVztBQUFBLElBQzlGLENBQUM7QUFBQSxFQUNIO0FBQ0Y7QUFFQSxTQUFTLDRCQUE0QixLQUFtQztBQUN0RSxTQUFPLFFBQVEsR0FBRztBQUNwQjtBQUVBLFNBQVMsZ0JBQWdCLEtBQTJCLE9BQXdCO0FBQzFFLFNBQU8sS0FBSyxHQUFHLEdBQUcsUUFBUSxPQUFPLEtBQUssSUFBSSxFQUFFO0FBQzlDO0FBRUEsU0FBUyxjQUNQLE9BQ0EsS0FDQSxPQUNBLGNBQ0EsYUFDQSxlQUNBLGFBQ1M7QUFDVCxNQUFJLFVBQVUsUUFBVztBQUN2QixXQUFRLFVBQVUsS0FBSyxZQUFZLHdCQUMvQixnQkFBZ0IsMkJBQThCLElBQzlDO0FBQUEsRUFDTjtBQUVBLE1BQUksT0FBTyxVQUFVLFlBQVk7QUFDL0IsV0FBTyxlQUFlLE9BQU8sZUFBZSxXQUFXO0FBQUEsRUFDekQ7QUFFQSxNQUFJLE9BQU8sVUFBVSxZQUFZLFVBQVUsTUFBTTtBQUMvQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sYUFBYSxPQUFPLEtBQUssT0FBTyxjQUFjLGFBQWEsZUFBZSxXQUFXO0FBQzlGO0FBRUEsU0FBUyxnQkFDUCxPQUNBLEtBQ0EsT0FDQSxhQUNBLGVBQ0EsYUFDUztBQUNULFFBQU0sU0FBVSxNQUFvQztBQUNwRCxNQUFJLE9BQU8sV0FBVyxZQUFZO0FBQ2hDLFFBQUk7QUFDRixZQUFNLFdBQVcsT0FBTyxLQUFLLE9BQU8sR0FBRztBQUN2QyxhQUFPLGNBQWMsVUFBVSxLQUFLLE9BQU8sT0FBTyxhQUFhLGVBQWUsV0FBVztBQUFBLElBQzNGLFNBQVMsR0FBRztBQUNWLFVBQUksWUFBWSx5QkFBeUI7QUFDdkMsZUFBTyxnQkFBZ0IsaUNBQWlDO0FBQUEsTUFDMUQ7QUFDQSxZQUFNO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbIkZ1bmN0aW9uSGFuZGxpbmdNb2RlIiwgIm1vZHVsZSJdCn0K
559
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29iamVjdC11dGlscy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBPYmplY3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29uc3RydWN0b3IsXG4gIFJlcXVpcmVkS2V5c09mLFxuICBVbmRlZmluZWRPblBhcnRpYWxEZWVwXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHR5cGUge1xuICBFeGFjdE1lbWJlcnMsXG4gIE1heWJlUmV0dXJuLFxuICBTdHJpbmdLZXlzXG59IGZyb20gJy4vdHlwZS50cyc7XG5cbmltcG9ydCB7IGVycm9yVG9TdHJpbmcgfSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7IGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyB9IGZyb20gJy4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJy4vc3RyaW5nLnRzJztcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgZW5zdXJlR2VuZXJpY09iamVjdCxcbiAgZW5zdXJlTm9uTnVsbGFibGVcbn0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogU3BlY2lmaWVzIGhvdyBmdW5jdGlvbnMgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIEpTT04gb3V0cHV0LlxuICovXG5leHBvcnQgZW51bSBGdW5jdGlvbkhhbmRsaW5nTW9kZSB7XG4gIC8qKlxuICAgKiBFeGNsdWRlcyBmdW5jdGlvbnMgZnJvbSB0aGUgSlNPTiBvdXRwdXQuXG4gICAqL1xuICBFeGNsdWRlID0gJ2V4Y2x1ZGUnLFxuICAvKipcbiAgICogSW5jbHVkZXMgdGhlIGZ1bGwgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiB0aGUgSlNPTiBvdXRwdXQuXG4gICAqL1xuICBGdWxsID0gJ2Z1bGwnLFxuICAvKipcbiAgICogSW5jbHVkZXMgb25seSB0aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgSlNPTiBvdXRwdXQuXG4gICAqL1xuICBOYW1lT25seSA9ICduYW1lT25seSdcbn1cblxuZW51bSBUb2tlblN1YnN0aXR1dGlvbktleSB7XG4gIENpcmN1bGFyUmVmZXJlbmNlID0gJ0NpcmN1bGFyUmVmZXJlbmNlJyxcbiAgRnVuY3Rpb24gPSAnRnVuY3Rpb24nLFxuICBNYXhEZXB0aExpbWl0UmVhY2hlZCA9ICdNYXhEZXB0aExpbWl0UmVhY2hlZCcsXG4gIE1heERlcHRoTGltaXRSZWFjaGVkQXJyYXkgPSAnTWF4RGVwdGhMaW1pdFJlYWNoZWRBcnJheScsXG4gIFRvSlNPTkZhaWxlZCA9ICdUb0pTT05GYWlsZWQnLFxuICBVbmRlZmluZWQgPSAnVW5kZWZpbmVkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0b0pzb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvSnNvbk9wdGlvbnMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBmdW5jdGlvbnMgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIEpTT04gb3V0cHV0IChkZWZhdWx0OiBgZXhjbHVkZWApLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25IYW5kbGluZ01vZGU6IEZ1bmN0aW9uSGFuZGxpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gZGVwdGggb2YgbmVzdGVkIG9iamVjdHMgdG8gaW5jbHVkZSBpbiB0aGUgSlNPTiBvdXRwdXQuXG4gICAqIFVzZSBgLTFgIGZvciBubyBsaW1pdC5cbiAgICogRGVmYXVsdHMgdG8gYC0xYC5cbiAgICovXG4gIHJlYWRvbmx5IG1heERlcHRoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGNhdGNoIGVycm9ycyBpbiBgdG9KU09OKClgIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBhIHBsYWNlaG9sZGVyLlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQ2F0Y2hUb0pTT05FcnJvcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGhhbmRsZSBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSBKU09OIG91dHB1dC5cbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEhhbmRsZUNpcmN1bGFyUmVmZXJlbmNlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gaGFuZGxlIGVycm9ycyBpbiB0aGUgSlNPTiBvdXRwdXQuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIYW5kbGVFcnJvcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGhhbmRsZSBgdW5kZWZpbmVkYCB2YWx1ZXMgaW4gdGhlIEpTT04gb3V0cHV0LlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSGFuZGxlVW5kZWZpbmVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBzb3J0IHRoZSBrZXlzIG9mIHRoZSBKU09OIG91dHB1dC5cbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNvcnRLZXlzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBKU09OIG91dHB1dC4gVGhpcyBjYW4gYmUgYSBudW1iZXIgb2Ygc3BhY2VzIG9yIGEgc3RyaW5nLiBEZWZhdWx0cyB0byBgMmAuXG4gICAqL1xuICByZWFkb25seSBzcGFjZTogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHN1YnN0aXR1dGlvbnMgdG8gdXNlIGluIHRoZSBKU09OIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHRva2VuU3Vic3RpdHV0aW9uczogUGFydGlhbDxUb2tlblN1YnN0aXR1dGlvbnM+O1xufVxuXG5pbnRlcmZhY2UgQXBwbHlTdWJzdGl0dXRpb25zUGFyYW1zIHtcbiAgcmVhZG9ubHkgZnVuY3Rpb25UZXh0czogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG4gIHJlYWRvbmx5IGtleTogVG9rZW5TdWJzdGl0dXRpb25LZXk7XG4gIHJlYWRvbmx5IHN1YnN0aXR1dGlvbnM6IFRva2VuU3Vic3RpdHV0aW9ucztcbn1cblxuaW50ZXJmYWNlIEVxdWFsaXR5Q29tcGFyZXJFbnRyeTxUPiB7XG4gIGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxUPjtcbiAgZXF1YWxpdHlDb21wYXJlcihhOiBULCBiOiBUKTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEpTT05TZXJpYWxpemFibGUge1xuICB0b0pTT04oLi4uYXJnczogdW5rbm93bltdKTogdW5rbm93bjtcbn1cblxuaW50ZXJmYWNlIE1vZHVsZVdpdGhEZWZhdWx0RXhwb3J0PFQ+IHtcbiAgZGVmYXVsdDogVDtcbn1cblxuaW50ZXJmYWNlIFJlc29sdmVkVG9Kc29uT3B0aW9ucyBleHRlbmRzIFRvSnNvbk9wdGlvbnMge1xuICByZWFkb25seSB0b2tlblN1YnN0aXR1dGlvbnM6IFRva2VuU3Vic3RpdHV0aW9ucztcbn1cblxuaW50ZXJmYWNlIFRva2VuU3Vic3RpdHV0aW9ucyB7XG4gIGNpcmN1bGFyUmVmZXJlbmNlOiBzdHJpbmc7XG4gIG1heERlcHRoTGltaXRSZWFjaGVkOiBzdHJpbmc7XG4gIHRvSlNPTkZhaWxlZDogc3RyaW5nO1xufVxuXG5jb25zdCBLRVlfU0VQQVJBVE9SID0gJy4nO1xuY29uc3QgZXF1YWxpdHlDb21wYXJlckVudHJpZXMgPSBjcmVhdGVFcXVhbGl0eUNvbXBhcmVyRW50cmllcyhcbiAgW1xuICAgIHsgY29uc3RydWN0b3I6IEFycmF5QnVmZmVyLCBlcXVhbGl0eUNvbXBhcmVyOiBkZWVwRXF1YWxBcnJheUJ1ZmZlciB9LFxuICAgIHsgY29uc3RydWN0b3I6IERhdGUsIGVxdWFsaXR5Q29tcGFyZXI6IGRlZXBFcXVhbERhdGUgfSxcbiAgICB7IGNvbnN0cnVjdG9yOiBSZWdFeHAsIGVxdWFsaXR5Q29tcGFyZXI6IGRlZXBFcXVhbFJlZ0V4cCB9LFxuICAgIHsgY29uc3RydWN0b3I6IE1hcCwgZXF1YWxpdHlDb21wYXJlcjogZGVlcEVxdWFsTWFwIH0sXG4gICAgeyBjb25zdHJ1Y3RvcjogU2V0LCBlcXVhbGl0eUNvbXBhcmVyOiBkZWVwRXF1YWxTZXQgfVxuICBdIGFzIGNvbnN0XG4pO1xuXG50eXBlIEtleXNXaXRoVW5kZWZpbmVkPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXS0/OiB1bmRlZmluZWQgZXh0ZW5kcyBUW0tdID8gSyA6IG5ldmVyO1xufVtrZXlvZiBUXTtcblxudHlwZSBNYW5kYXRvcnlLZXlzV2l0aFVuZGVmaW5lZDxUIGV4dGVuZHMgb2JqZWN0PiA9IEV4dHJhY3Q8UmVxdWlyZWRLZXlzT2Y8VD4gJiBTdHJpbmdLZXlzPFQ+LCBLZXlzV2l0aFVuZGVmaW5lZDxUPj47XG5cbnR5cGUgUmVtb3ZlVW5kZWZpbmVkT3ZlcmxvYWQ8VCBleHRlbmRzIG9iamVjdD4gPSBNYW5kYXRvcnlLZXlzV2l0aFVuZGVmaW5lZDxUPiBleHRlbmRzIG5ldmVyID8gW29iajogVF1cbiAgOiBuZXZlcjtcblxudHlwZSBSZW1vdmVVbmRlZmluZWRXaXRoS2V5c092ZXJsb2FkPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXT4gPSBbb2JqOiBULCBrZXlzVG9LZWVwOiBFeGFjdE1lbWJlcnM8TWFuZGF0b3J5S2V5c1dpdGhVbmRlZmluZWQ8VD4sIEs+XTtcblxuLyoqXG4gKiBBc3NpZ25zIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhIHRhcmdldCBvYmplY3QsIGluY2x1ZGluZyBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0YXJnZXQgb2JqZWN0IHR5cGUuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgc291cmNlIG9iamVjdCB0eXBlLlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBhc3NpZ25lZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3QsIFU+KHRhcmdldDogVCwgc291cmNlOiBVKTogVCAmIFU7XG4vKipcbiAqIEFzc2lnbnMgcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGEgdGFyZ2V0IG9iamVjdCwgaW5jbHVkaW5nIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHRhcmdldCBvYmplY3QgdHlwZS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSBmaXJzdCBzb3VyY2Ugb2JqZWN0IHR5cGUuXG4gKiBAdHlwZVBhcmFtIFYgLSBUaGUgc2Vjb25kIHNvdXJjZSBvYmplY3QgdHlwZS5cbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBhc3NpZ24gcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSBzb3VyY2UxIC0gVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgdG8gYXNzaWduIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBzb3VyY2UyIC0gVGhlIHNlY29uZCBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBhc3NpZ25lZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3QsIFUsIFY+KHRhcmdldDogVCwgc291cmNlMTogVSwgc291cmNlMjogVik6IFQgJiBVICYgVjtcbi8qKlxuICogQXNzaWducyBwcm9wZXJ0aWVzIGZyb20gb25lIG9yIG1vcmUgc291cmNlIG9iamVjdHMgdG8gYSB0YXJnZXQgb2JqZWN0LCBpbmNsdWRpbmcgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0eXBlLlxuICogQHR5cGVQYXJhbSBVIC0gVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgdHlwZS5cbiAqIEB0eXBlUGFyYW0gViAtIFRoZSBzZWNvbmQgc291cmNlIG9iamVjdCB0eXBlLlxuICogQHR5cGVQYXJhbSBXIC0gVGhlIHRoaXJkIHNvdXJjZSBvYmplY3QgdHlwZS5cbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBhc3NpZ24gcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSBzb3VyY2UxIC0gVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgdG8gYXNzaWduIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBzb3VyY2UyIC0gVGhlIHNlY29uZCBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0gc291cmNlMyAtIFRoZSB0aGlyZCBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBhc3NpZ25lZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3QsIFUsIFYsIFc+KHRhcmdldDogVCwgc291cmNlMTogVSwgc291cmNlMjogViwgc291cmNlMzogVyk6IFQgJiBVICYgViAmIFc7XG4vKipcbiAqIEFzc2lnbnMgcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGEgdGFyZ2V0IG9iamVjdCwgaW5jbHVkaW5nIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHNvdXJjZXMgLSBUaGUgc291cmNlIG9iamVjdHMgdG8gYXNzaWduIHByb3BlcnRpZXMgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0IHdpdGggdGhlIGFzc2lnbmVkIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25XaXRoTm9uRW51bWVyYWJsZVByb3BlcnRpZXModGFyZ2V0OiBvYmplY3QsIC4uLnNvdXJjZXM6IG9iamVjdFtdKTogb2JqZWN0IHtcbiAgcmV0dXJuIGFzc2lnbldpdGhOb25FbnVtZXJhYmxlUHJvcGVydGllc0ltcGwodGFyZ2V0LCAuLi5zb3VyY2VzKTtcbn1cbi8qKlxuICogQ2FzdHMgYSB2YWx1ZSB0byBhIHNwZWNpZmljIHR5cGUuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHRhcmdldCB0eXBlIHRvIGNhc3QgdG8uXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2FzdC5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBhcyB0aGUgc3BlY2lmaWVkIHR5cGUuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1wYXJhbWV0ZXJzIC0tIFdlIG5lZWQgdG8gY2FzdC5cbmV4cG9ydCBmdW5jdGlvbiBjYXN0VG88VD4odmFsdWU6IHVua25vd24pOiBUIHtcbiAgcmV0dXJuIHZhbHVlIGFzIFQ7XG59XG4vKipcbiAqIENsb25lcyBhbiBvYmplY3QsIGluY2x1ZGluZyBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIEEgbmV3IG9iamVjdCB3aXRoIHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgdGhlIG9yaWdpbmFsIG9iamVjdCwgaW5jbHVkaW5nIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZVdpdGhOb25FbnVtZXJhYmxlUHJvcGVydGllczxUIGV4dGVuZHMgb2JqZWN0PihvYmo6IFQpOiBUIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoZ2V0UHJvdG90eXBlT2Yob2JqKSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKSkgYXMgVDtcbn1cbi8qKlxuICogQ29tcGFyZXMgdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZGVlcGx5IGVxdWFsLlxuICpcbiAqIEBwYXJhbSBhIC0gVGhlIGZpcnN0IHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0gYiAtIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBkZWVwbHkgZXF1YWwsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcEVxdWFsKGE6IHVua25vd24sIGI6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT09ICdvYmplY3QnIHx8IGEgPT09IG51bGwgfHwgYiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGFDb25zdHJ1Y3RvciA9IGEuY29uc3RydWN0b3I7XG4gIGNvbnN0IGJDb25zdHJ1Y3RvciA9IGIuY29uc3RydWN0b3I7XG5cbiAgaWYgKGFDb25zdHJ1Y3RvciAhPT0gYkNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGFDb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZGVlcEVxdWFsVHlwZWQoYSwgYik7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGtleXNBID0gZ2V0QWxsS2V5cyhhKTtcbiAgY29uc3Qga2V5c0IgPSBnZXRBbGxLZXlzKGIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGFSZWNvcmQgPSBlbnN1cmVHZW5lcmljT2JqZWN0KGEpO1xuICBjb25zdCBiUmVjb3JkID0gZW5zdXJlR2VuZXJpY09iamVjdChiKTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzQSkge1xuICAgIGlmICgha2V5c0IuaW5jbHVkZXMoa2V5KSB8fCAhZGVlcEVxdWFsKGFSZWNvcmRba2V5XSwgYlJlY29yZFtrZXldKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgbXVsdGlwbGUgcHJvcGVydGllcyBmcm9tIGFuIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lcyAtIFRoZSBuYW1lcyBvZiB0aGUgcHJvcGVydGllcyB0byBkZWxldGUuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYW55IG9mIHRoZSBwcm9wZXJ0aWVzIHdlcmUgcHJlc2VudCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3Q+KG9iajogVCwgcHJvcGVydHlOYW1lczogKGtleW9mIFQpW10pOiBib29sZWFuIHtcbiAgbGV0IGFucyA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIHByb3BlcnR5TmFtZXMpIHtcbiAgICBhbnMgPSBkZWxldGVQcm9wZXJ0eShvYmosIHByb3BlcnR5TmFtZSkgfHwgYW5zO1xuICB9XG5cbiAgcmV0dXJuIGFucztcbn1cblxuLyoqXG4gKiBEZWxldGVzIGEgcHJvcGVydHkgZnJvbSBhbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkgZnJvbS5cbiAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGVsZXRlLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSB3YXMgcHJlc2VudCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eTxUIGV4dGVuZHMgb2JqZWN0PihvYmo6IFQsIHByb3BlcnR5TmFtZToga2V5b2YgVCk6IGJvb2xlYW4ge1xuICBpZiAoIU9iamVjdC5oYXNPd24ob2JqLCBwcm9wZXJ0eU5hbWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgZGVsZXRlIG9ialtwcm9wZXJ0eU5hbWVdO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZGVmYXVsdCBleHBvcnQgZnJvbSBhIG1vZHVsZS5cbiAqXG4gKiBVc2VmdWwgdG8gaGFuZGxlIGluY29ycmVjdCBkZWZhdWx0IGV4cG9ydCBpbnRlcm9wIGJldHdlZW4gRVNNIGFuZCBDSlMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRlZmF1bHQgZXhwb3J0LlxuICogQHBhcmFtIG1vZHVsZSAtIFRoZSBtb2R1bGUgdG8gZXh0cmFjdCB0aGUgZGVmYXVsdCBleHBvcnQgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IGV4cG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcDxUPihtb2R1bGU6IE1vZHVsZVdpdGhEZWZhdWx0RXhwb3J0PFQ+IHwgVCk6IFQge1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ29iamVjdCcgfHwgbW9kdWxlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG1vZHVsZTtcbiAgfVxuXG4gIGlmICgnZGVmYXVsdCcgaW4gbW9kdWxlKSB7XG4gICAgcmV0dXJuIG1vZHVsZS5kZWZhdWx0O1xuICB9XG5cbiAgcmV0dXJuIG1vZHVsZTtcbn1cblxuLyoqXG4gKiBHZXRzIGFsbCBlbnRyaWVzIG9mIGFuIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gZ2V0IHRoZSBlbnRyaWVzIG9mLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWxsIGVudHJpZXMgb2YgdGhlIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbEVudHJpZXM8VCBleHRlbmRzIG9iamVjdD4ob2JqOiBUKTogW1N0cmluZ0tleXM8VD4sIFRbU3RyaW5nS2V5czxUPl1dW10ge1xuICByZXR1cm4gZ2V0QWxsS2V5cyhvYmopLm1hcCgoa2V5KSA9PiBba2V5LCBvYmpba2V5XV0pO1xufVxuXG4vKipcbiAqIEdldHMgYWxsIGtleXMgb2YgYW4gb2JqZWN0LlxuICogSW5jbHVkZXMgZmllbGRzIGFuZCBwcm9wZXJ0aWVzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBnZXQgdGhlIGtleXMgb2YuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhbGwga2V5cyBvZiB0aGUgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsS2V5czxUIGV4dGVuZHMgb2JqZWN0PihvYmo6IFQpOiBTdHJpbmdLZXlzPFQ+W10ge1xuICBjb25zdCBrZXlzOiBTdHJpbmdLZXlzPFQ+W10gPSBbXTtcbiAgbGV0IGN1cnJlbnQ6IG51bGwgfCBvYmplY3QgPSBvYmo7XG4gIHdoaWxlIChjdXJyZW50KSB7XG4gICAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjdXJyZW50KTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGRlc2NyaXB0b3JdIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0b3JzKSkge1xuICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFzR2V0dGVyID0gdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nO1xuICAgICAgY29uc3QgaGFzU2V0dGVyID0gdHlwZW9mIGRlc2NyaXB0b3Iuc2V0ID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKGhhc0dldHRlciB8fCBoYXNTZXR0ZXIpIHtcbiAgICAgICAgaWYgKGhhc0dldHRlciAmJiBoYXNTZXR0ZXIpIHtcbiAgICAgICAgICBrZXlzLnB1c2goa2V5IGFzIFN0cmluZ0tleXM8VD4pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmIGRlc2NyaXB0b3Iud3JpdGFibGUpIHtcbiAgICAgICAga2V5cy5wdXNoKGtleSBhcyBTdHJpbmdLZXlzPFQ+KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnJlbnQpIGFzIG51bGwgfCBvYmplY3Q7XG4gIH1cbiAgcmV0dXJuIGtleXMuc29ydCgpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIG9mIGEgbmVzdGVkIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGdldCB0aGUgbmVzdGVkIHByb3BlcnR5IHZhbHVlIGZyb20uXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBuZXN0ZWQgcHJvcGVydHkuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIG5lc3RlZCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5lc3RlZFByb3BlcnR5VmFsdWUob2JqOiBHZW5lcmljT2JqZWN0LCBwYXRoOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgbGV0IG5vZGU6IEdlbmVyaWNPYmplY3QgfCB1bmRlZmluZWQgPSBvYmo7XG4gIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KEtFWV9TRVBBUkFUT1IpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbm9kZSA9IG5vZGVba2V5XSBhcyBHZW5lcmljT2JqZWN0IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvdG90eXBlIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAcGFyYW0gaW5zdGFuY2UgLSBUaGUgb2JqZWN0IGluc3RhbmNlIHRvIHJldHJpZXZlIHRoZSBwcm90b3R5cGUgb2YuXG4gKiBAcmV0dXJucyBUaGUgcHJvdG90eXBlIG9mIHRoZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZjxUPihpbnN0YW5jZTogVCk6IFQge1xuICBpZiAoaW5zdGFuY2UgPT09IHVuZGVmaW5lZCB8fCBpbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGluc3RhbmNlKSBhcyBUO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbmFtZSBvZiBhIHByb3BlcnR5IG9mIGEgZ2l2ZW4gdHlwZSBgVGAuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGFzIGEgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZW9mPFQgZXh0ZW5kcyBvYmplY3Q+KG5hbWU6IFN0cmluZ0tleXM8VD4pOiBTdHJpbmdLZXlzPFQ+IHtcbiAgcmV0dXJuIG5hbWU7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIGFsbG93IGB1bmRlZmluZWRgIGFzc2lnbm1lbnQgaW4gc3RyaWN0IG1vZGUuXG4gKlxuICogVGhpcyB1dGlsaXR5IHByb3ZpZGVzIGEgd29ya2Fyb3VuZCBmb3IgdGhlIGBleGFjdE9wdGlvbmFsUHJvcGVydHlUeXBlc2AgVHlwZVNjcmlwdCBmbGFnLFxuICogd2hpY2ggcHJvaGliaXRzIGRpcmVjdGx5IGFzc2lnbmluZyBgdW5kZWZpbmVkYCB0byBvcHRpb25hbCBwcm9wZXJ0aWVzIHdoZW4gdGhlIHR5cGVcbiAqIGV4cGxpY2l0bHkgb21pdHMgYHVuZGVmaW5lZGAuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFdpdGggYGV4YWN0T3B0aW9uYWxQcm9wZXJ0eVR5cGVzOiB0cnVlYFxuICogY29uc3QgeDogeyBwcm9wPzogc3RyaW5nIH0gPSB7IHByb3A6IHVuZGVmaW5lZCB9OyAvLyBDb21waWxlciBlcnJvclxuICpcbiAqIC8vIFVzaW5nIHRoaXMgdXRpbGl0eTpcbiAqIGNvbnN0IHk6IHsgcHJvcD86IHN0cmluZyB9ID0gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPHsgcHJvcD86IHN0cmluZyB9Pih7IHByb3A6IHVuZGVmaW5lZCB9KTsgLy8gV29ya3NcbiAqIGBgYFxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0YXJnZXQgdHlwZSB3aXRoIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gbm9ybWFsaXplLlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gbm9ybWFsaXplLCBhbGxvd2luZyBleHBsaWNpdCBgdW5kZWZpbmVkYCBmb3Igb3B0aW9uYWwgcHJvcGVydGllcy5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIG9iamVjdCwgY29tcGF0aWJsZSB3aXRoIGBleGFjdE9wdGlvbmFsUHJvcGVydHlUeXBlc2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8VD4ob2JqOiBVbmRlZmluZWRPblBhcnRpYWxEZWVwPFQ+KTogVCB7XG4gIHJldHVybiBvYmogYXMgVDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBgdW5kZWZpbmVkYCBwcm9wZXJ0aWVzIGZyb20gYW4gb2JqZWN0IHdoZW4gdGhlcmUgYXJlIG5vIG1hbmRhdG9yeSBrZXlzIHdpdGggYHVuZGVmaW5lZGAgdmFsdWVzLlxuICpcbiAqIEB0eXBlUGFyYW0gVHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAcGFyYW0gYXJncyAtIFRoZSBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIG9iamVjdCB3aXRoIGFsbCBgdW5kZWZpbmVkYCBwcm9wZXJ0aWVzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzPFR5cGUgZXh0ZW5kcyBvYmplY3Q+KFxuICAuLi5hcmdzOiBSZW1vdmVVbmRlZmluZWRPdmVybG9hZDxUeXBlPlxuKTogVHlwZTtcbi8qKlxuICogUmVtb3ZlcyBhbGwgYHVuZGVmaW5lZGAgcHJvcGVydGllcyBmcm9tIGFuIG9iamVjdCB3aGVuIHRoZXJlIGFyZSBtYW5kYXRvcnkga2V5cyB3aXRoIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHR5cGVQYXJhbSBLZXlzVG9LZWVwIC0gVGhlIGtleXMgdG8ga2VlcC5cbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgb2JqZWN0IHdpdGggYWxsIGB1bmRlZmluZWRgIHByb3BlcnRpZXMgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXM8VHlwZSBleHRlbmRzIG9iamVjdCwgY29uc3QgS2V5c1RvS2VlcCBleHRlbmRzIHJlYWRvbmx5IHN0cmluZ1tdPihcbiAgLi4uYXJnczogUmVtb3ZlVW5kZWZpbmVkV2l0aEtleXNPdmVybG9hZDxUeXBlLCBLZXlzVG9LZWVwPlxuKTogVHlwZTtcbi8qKlxuICogUmVtb3ZlcyBhbGwgYHVuZGVmaW5lZGAgcHJvcGVydGllcyBmcm9tIGFuIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtIFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gcmVtb3ZlIGB1bmRlZmluZWRgIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBrZXlzVG9LZWVwIC0gVGhlIGtleXMgdG8ga2VlcC5cbiAqIEByZXR1cm5zIFRoZSBvYmplY3Qgd2l0aCBhbGwgYHVuZGVmaW5lZGAgcHJvcGVydGllcyByZW1vdmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllczxUeXBlIGV4dGVuZHMgb2JqZWN0PihvYmo6IFR5cGUsIGtleXNUb0tlZXA/OiByZWFkb25seSBzdHJpbmdbXSk6IFR5cGUge1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopIGFzIFtTdHJpbmdLZXlzPFR5cGU+LCB1bmtub3duXVtdKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIWtleXNUb0tlZXA/LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIG5lc3RlZCBwcm9wZXJ0eSBpbiBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gc2V0IHRoZSBuZXN0ZWQgcHJvcGVydHkgdmFsdWUgaW4uXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBuZXN0ZWQgcHJvcGVydHkuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TmVzdGVkUHJvcGVydHlWYWx1ZShvYmo6IEdlbmVyaWNPYmplY3QsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYFByb3BlcnR5IHBhdGggJHtwYXRofSBub3QgZm91bmRgKTtcbiAgbGV0IG5vZGU6IEdlbmVyaWNPYmplY3QgfCB1bmRlZmluZWQgPSBvYmo7XG4gIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KEtFWV9TRVBBUkFUT1IpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzLnNsaWNlKDAsIC0xKSkge1xuICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBub2RlID0gbm9kZVtrZXldIGFzIEdlbmVyaWNPYmplY3QgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBsYXN0S2V5ID0gZW5zdXJlTm9uTnVsbGFibGUoa2V5cy5hdCgtMSkpO1xuICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBub2RlW2xhc3RLZXldID0gdmFsdWU7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBnaXZlbiB2YWx1ZSB0byBhIEpTT04gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQgdG8gSlNPTi4gVGhpcyBjYW4gYmUgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIGN1c3RvbWl6aW5nIHRoZSBKU09OIGNvbnZlcnNpb24gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIFRoZSBKU09OIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb24odmFsdWU6IHVua25vd24sIG9wdGlvbnM6IFBhcnRpYWw8VG9Kc29uT3B0aW9ucz4gPSB7fSk6IHN0cmluZyB7XG4gIGNvbnN0IERFRkFVTFRfT1BUSU9OUzogUmVzb2x2ZWRUb0pzb25PcHRpb25zID0ge1xuICAgIGZ1bmN0aW9uSGFuZGxpbmdNb2RlOiBGdW5jdGlvbkhhbmRsaW5nTW9kZS5FeGNsdWRlLFxuICAgIG1heERlcHRoOiAtMSxcbiAgICBzaG91bGRDYXRjaFRvSlNPTkVycm9yczogZmFsc2UsXG4gICAgc2hvdWxkSGFuZGxlQ2lyY3VsYXJSZWZlcmVuY2VzOiBmYWxzZSxcbiAgICBzaG91bGRIYW5kbGVFcnJvcnM6IGZhbHNlLFxuICAgIHNob3VsZEhhbmRsZVVuZGVmaW5lZDogZmFsc2UsXG4gICAgc2hvdWxkU29ydEtleXM6IGZhbHNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzIC0tIEV4dHJhY3RpbmcgbWFnaWMgbnVtYmVyIGFzIGEgY29uc3RhbnQgd291bGQgYmUgcmVwZXRpdGl2ZSwgYXMgdGhlIHZhbHVlIGlzIHVzZWQgb25seSBvbmNlIGFuZCBpdHMgbmFtZSB3b3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgcHJvcGVydHkuXG4gICAgc3BhY2U6IDIsXG4gICAgdG9rZW5TdWJzdGl0dXRpb25zOiB7XG4gICAgICBjaXJjdWxhclJlZmVyZW5jZTogbWFrZU9iamVjdFRva2VuU3Vic3RpdHV0aW9uKFRva2VuU3Vic3RpdHV0aW9uS2V5LkNpcmN1bGFyUmVmZXJlbmNlKSxcbiAgICAgIG1heERlcHRoTGltaXRSZWFjaGVkOiBtYWtlT2JqZWN0VG9rZW5TdWJzdGl0dXRpb24oVG9rZW5TdWJzdGl0dXRpb25LZXkuTWF4RGVwdGhMaW1pdFJlYWNoZWQpLFxuICAgICAgdG9KU09ORmFpbGVkOiBtYWtlT2JqZWN0VG9rZW5TdWJzdGl0dXRpb24oVG9rZW5TdWJzdGl0dXRpb25LZXkuVG9KU09ORmFpbGVkKVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBmdWxsT3B0aW9ucyA9IHtcbiAgICAuLi5ERUZBVUxUX09QVElPTlMsXG4gICAgLi4ub3B0aW9ucyxcbiAgICB0b2tlblN1YnN0aXR1dGlvbnM6IHtcbiAgICAgIC4uLkRFRkFVTFRfT1BUSU9OUy50b2tlblN1YnN0aXR1dGlvbnMsXG4gICAgICAuLi5vcHRpb25zLnRva2VuU3Vic3RpdHV0aW9uc1xuICAgIH1cbiAgfTtcblxuICBpZiAoZnVsbE9wdGlvbnMubWF4RGVwdGggPT09IC0xKSB7XG4gICAgZnVsbE9wdGlvbnMubWF4RGVwdGggPSBJbmZpbml0eTtcbiAgfVxuXG4gIGNvbnN0IGZ1bmN0aW9uVGV4dHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHVzZWRPYmplY3RzID0gbmV3IFdlYWtTZXQ8b2JqZWN0PigpO1xuXG4gIGNvbnN0IHBsYWluT2JqZWN0ID0gdG9QbGFpbk9iamVjdCh2YWx1ZSwgJycsIDAsIHRydWUsIGZ1bGxPcHRpb25zLCBmdW5jdGlvblRleHRzLCB1c2VkT2JqZWN0cyk7XG4gIGxldCBqc29uID0gZW5zdXJlTm9uTnVsbGFibGUoSlNPTi5zdHJpbmdpZnkocGxhaW5PYmplY3QsIG51bGwsIGZ1bGxPcHRpb25zLnNwYWNlKSk7XG4gIGpzb24gPSByZXBsYWNlQWxsKGpzb24sIC9cIlxcW1xcWyg/PEtleT5bQS1aYS16XSspKD88SW5kZXg+XFxkKilcXF1cXF1cIi9nLCAoeyBjYXB0dXJlZEdyb3VwQXJnczogW2tleSA9ICcnLCBpbmRleFN0ciA9ICcnXSB9KSA9PlxuICAgIGFwcGx5U3Vic3RpdHV0aW9ucyh7XG4gICAgICBmdW5jdGlvblRleHRzLFxuICAgICAgaW5kZXg6IGluZGV4U3RyID8gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKSA6IDAsXG4gICAgICBrZXk6IGtleSBhcyBUb2tlblN1YnN0aXR1dGlvbktleSxcbiAgICAgIHN1YnN0aXR1dGlvbnM6IGZ1bGxPcHRpb25zLnRva2VuU3Vic3RpdHV0aW9uc1xuICAgIH0pKTtcbiAgcmV0dXJuIGpzb247XG59XG5cbmZ1bmN0aW9uIGFwcGx5U3Vic3RpdHV0aW9ucyhwYXJhbXM6IEFwcGx5U3Vic3RpdHV0aW9uc1BhcmFtcyk6IE1heWJlUmV0dXJuPHN0cmluZz4ge1xuICBzd2l0Y2ggKHBhcmFtcy5rZXkpIHtcbiAgICBjYXNlIFRva2VuU3Vic3RpdHV0aW9uS2V5LkNpcmN1bGFyUmVmZXJlbmNlOlxuICAgICAgcmV0dXJuIHBhcmFtcy5zdWJzdGl0dXRpb25zLmNpcmN1bGFyUmVmZXJlbmNlO1xuICAgIGNhc2UgVG9rZW5TdWJzdGl0dXRpb25LZXkuRnVuY3Rpb246XG4gICAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUocGFyYW1zLmZ1bmN0aW9uVGV4dHNbcGFyYW1zLmluZGV4XSwgYEZ1bmN0aW9uIHdpdGggaW5kZXggJHtTdHJpbmcocGFyYW1zLmluZGV4KX0gbm90IGZvdW5kYCk7XG4gICAgY2FzZSBUb2tlblN1YnN0aXR1dGlvbktleS5NYXhEZXB0aExpbWl0UmVhY2hlZDpcbiAgICAgIHJldHVybiBwYXJhbXMuc3Vic3RpdHV0aW9ucy5tYXhEZXB0aExpbWl0UmVhY2hlZDtcbiAgICBjYXNlIFRva2VuU3Vic3RpdHV0aW9uS2V5Lk1heERlcHRoTGltaXRSZWFjaGVkQXJyYXk6XG4gICAgICByZXR1cm4gYEFycmF5KCR7U3RyaW5nKHBhcmFtcy5pbmRleCl9KWA7XG4gICAgY2FzZSBUb2tlblN1YnN0aXR1dGlvbktleS5Ub0pTT05GYWlsZWQ6XG4gICAgICByZXR1cm4gcGFyYW1zLnN1YnN0aXR1dGlvbnMudG9KU09ORmFpbGVkO1xuICAgIGNhc2UgVG9rZW5TdWJzdGl0dXRpb25LZXkuVW5kZWZpbmVkOlxuICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGhhdXN0aXZlIHN3aXRjaCBndWFyZDsgZGVmYXVsdCBicmFuY2ggaXMgdW5yZWFjaGFibGUuICovXG4gICAgZGVmYXVsdDpcbiAgICAgIGFzc2VydChmYWxzZSwgJ1VuaGFuZGxlZCBzdWJzdGl0dXRpb24ga2V5Jyk7XG4gICAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2lnbldpdGhOb25FbnVtZXJhYmxlUHJvcGVydGllc0ltcGwodGFyZ2V0OiBvYmplY3QsIC4uLnNvdXJjZXM6IG9iamVjdFtdKTogb2JqZWN0IHtcbiAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgZGVzY3JpcHRvcl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRvcnMpKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBBdm9pZCByZWRlZmluaW5nIHJlYWQtb25seSBwcm9wZXJ0aWVzIChlc3BlY2lhbGx5IGBwcm90b3R5cGVgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSAncHJvdG90eXBlJ1xuICAgICAgICAgIHx8IChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KT8ud3JpdGFibGUgPT09IGZhbHNlXG4gICAgICAgICAgICAmJiAhT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk/LmNvbmZpZ3VyYWJsZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSBpZiBkZWZpbmVQcm9wZXJ0eSBmYWlsc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNvdXJjZVByb3RvdHlwZXMgPSBzb3VyY2VzXG4gICAgLm1hcCgoc291cmNlKSA9PiBnZXRQcm90b3R5cGVPZjxvYmplY3QgfCB1bmRlZmluZWQ+KHNvdXJjZSkpXG4gICAgLmZpbHRlcigocHJvdG8pOiBwcm90byBpcyBvYmplY3QgPT4gISFwcm90byk7XG5cbiAgaWYgKHNvdXJjZVByb3RvdHlwZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHRhcmdldFByb3RvdHlwZSA9IGFzc2lnbldpdGhOb25FbnVtZXJhYmxlUHJvcGVydGllc0ltcGwoe30sIGdldFByb3RvdHlwZU9mKHRhcmdldCksIC4uLnNvdXJjZVByb3RvdHlwZXMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQsIHRhcmdldFByb3RvdHlwZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBTaWxlbnRseSBpZ25vcmUgaWYgc2V0UHJvdG90eXBlT2YgZmFpbHNcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBgdW5rbm93bmAgZG9lc24ndCB3b3JrLCBnZXR0aW5nIGNvbXBpbGVyIGVycm9ycy5cbmZ1bmN0aW9uIGNyZWF0ZUVxdWFsaXR5Q29tcGFyZXJFbnRyaWVzPGNvbnN0IFQgZXh0ZW5kcyByZWFkb25seSBFcXVhbGl0eUNvbXBhcmVyRW50cnk8YW55PltdPihlbnRyaWVzOiBUKTogVCB7XG4gIHJldHVybiBlbnRyaWVzO1xufVxuXG5mdW5jdGlvbiBkZWVwRXF1YWxBcnJheUJ1ZmZlcihhOiBBcnJheUJ1ZmZlciwgYjogQXJyYXlCdWZmZXIpOiBib29sZWFuIHtcbiAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gYi5ieXRlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgdmlld0EgPSBuZXcgVWludDhBcnJheShhKTtcbiAgY29uc3Qgdmlld0IgPSBuZXcgVWludDhBcnJheShiKTtcbiAgcmV0dXJuIGRlZXBFcXVhbCh2aWV3QSwgdmlld0IpO1xufVxuXG5mdW5jdGlvbiBkZWVwRXF1YWxEYXRlKGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbn1cblxuZnVuY3Rpb24gZGVlcEVxdWFsTWFwKGE6IE1hcDx1bmtub3duLCB1bmtub3duPiwgYjogTWFwPHVua25vd24sIHVua25vd24+KTogYm9vbGVhbiB7XG4gIGlmIChhLnNpemUgIT09IGIuc2l6ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGEuZW50cmllcygpKSB7XG4gICAgaWYgKCFiLmhhcyhrZXkpIHx8ICFkZWVwRXF1YWwodmFsdWUsIGIuZ2V0KGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGRlZXBFcXVhbFJlZ0V4cChhOiBSZWdFeHAsIGI6IFJlZ0V4cCk6IGJvb2xlYW4ge1xuICByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG59XG5cbmZ1bmN0aW9uIGRlZXBFcXVhbFNldChhOiBTZXQ8dW5rbm93bj4sIGI6IFNldDx1bmtub3duPik6IGJvb2xlYW4ge1xuICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IHZhbHVlQSBvZiBhKSB7XG4gICAgaWYgKGIuaGFzKHZhbHVlQSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHZhbHVlQiBvZiBiKSB7XG4gICAgICBpZiAoZGVlcEVxdWFsKHZhbHVlQSwgdmFsdWVCKSkge1xuICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGRlZXBFcXVhbFR5cGVkKGE6IHVua25vd24sIGI6IHVua25vd24pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCB7IGNvbnN0cnVjdG9yLCBlcXVhbGl0eUNvbXBhcmVyIH0gb2YgZXF1YWxpdHlDb21wYXJlckVudHJpZXMpIHtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yICYmIGIgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIGVxdWFsaXR5Q29tcGFyZXIoYSBhcyBuZXZlciwgYiBhcyBuZXZlcik7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUFycmF5KFxuICB2YWx1ZTogdW5rbm93bltdLFxuICBkZXB0aDogbnVtYmVyLFxuICBjYW5Vc2VUb0pTT046IGJvb2xlYW4sXG4gIGZ1bGxPcHRpb25zOiBUb0pzb25PcHRpb25zLFxuICBmdW5jdGlvblRleHRzOiBzdHJpbmdbXSxcbiAgdXNlZE9iamVjdHM6IFdlYWtTZXQ8b2JqZWN0PlxuKTogdW5rbm93biB7XG4gIGlmIChkZXB0aCA+IGZ1bGxPcHRpb25zLm1heERlcHRoKSB7XG4gICAgcmV0dXJuIG1ha2VQbGFjZWhvbGRlcihUb2tlblN1YnN0aXR1dGlvbktleS5NYXhEZXB0aExpbWl0UmVhY2hlZEFycmF5LCB2YWx1ZS5sZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlLm1hcCgoaXRlbSwgaW5kZXgpID0+IHRvUGxhaW5PYmplY3QoaXRlbSwgU3RyaW5nKGluZGV4KSwgZGVwdGggKyAxLCBjYW5Vc2VUb0pTT04sIGZ1bGxPcHRpb25zLCBmdW5jdGlvblRleHRzLCB1c2VkT2JqZWN0cykpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVDaXJjdWxhclJlZmVyZW5jZSh2YWx1ZTogb2JqZWN0LCBrZXk6IHN0cmluZywgZnVsbE9wdGlvbnM6IFRvSnNvbk9wdGlvbnMpOiB1bmtub3duIHtcbiAgaWYgKGZ1bGxPcHRpb25zLnNob3VsZEhhbmRsZUNpcmN1bGFyUmVmZXJlbmNlcykge1xuICAgIHJldHVybiBtYWtlUGxhY2Vob2xkZXIoVG9rZW5TdWJzdGl0dXRpb25LZXkuQ2lyY3VsYXJSZWZlcmVuY2UpO1xuICB9XG4gIGNvbnN0IHZhbHVlQ29uc3RydWN0b3JOYW1lID0gdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fCAnT2JqZWN0JztcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTlxuLS0+IHN0YXJ0aW5nIGF0IG9iamVjdCB3aXRoIGNvbnN0cnVjdG9yICcke3ZhbHVlQ29uc3RydWN0b3JOYW1lfSdcbi0tLSBwcm9wZXJ0eSAnJHtrZXl9JyBjbG9zZXMgdGhlIGNpcmNsZWApO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1mdW5jdGlvbi10eXBlIC0tIFdlIG5lZWQgdG8gdXNlIGBGdW5jdGlvbmAgdHlwZSB0byBoYW5kbGUgdGhlbSBzZXBhcmF0ZWx5LlxuZnVuY3Rpb24gaGFuZGxlRnVuY3Rpb24odmFsdWU6IEZ1bmN0aW9uLCBmdW5jdGlvblRleHRzOiBzdHJpbmdbXSwgZnVsbE9wdGlvbnM6IFRvSnNvbk9wdGlvbnMpOiB1bmtub3duIHtcbiAgaWYgKGZ1bGxPcHRpb25zLmZ1bmN0aW9uSGFuZGxpbmdNb2RlID09PSBGdW5jdGlvbkhhbmRsaW5nTW9kZS5FeGNsdWRlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBpbmRleCA9IGZ1bmN0aW9uVGV4dHMubGVuZ3RoO1xuICBjb25zdCBmdW5jdGlvblRleHQgPSBmdWxsT3B0aW9ucy5mdW5jdGlvbkhhbmRsaW5nTW9kZSA9PT0gRnVuY3Rpb25IYW5kbGluZ01vZGUuRnVsbFxuICAgID8gZ2V0RnVuY3Rpb25FeHByZXNzaW9uU3RyaW5nKHZhbHVlKVxuICAgIDogYGZ1bmN0aW9uICR7dmFsdWUubmFtZSB8fCAnYW5vbnltb3VzJ30oKSB7IC8qIC4uLiAqLyB9YDtcbiAgZnVuY3Rpb25UZXh0cy5wdXNoKGZ1bmN0aW9uVGV4dCk7XG4gIHJldHVybiBtYWtlUGxhY2Vob2xkZXIoVG9rZW5TdWJzdGl0dXRpb25LZXkuRnVuY3Rpb24sIGluZGV4KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlT2JqZWN0KFxuICB2YWx1ZTogb2JqZWN0LFxuICBrZXk6IHN0cmluZyxcbiAgZGVwdGg6IG51bWJlcixcbiAgY2FuVXNlVG9KU09OOiBib29sZWFuLFxuICBmdWxsT3B0aW9uczogVG9Kc29uT3B0aW9ucyxcbiAgZnVuY3Rpb25UZXh0czogc3RyaW5nW10sXG4gIHVzZWRPYmplY3RzOiBXZWFrU2V0PG9iamVjdD5cbik6IHVua25vd24ge1xuICBpZiAodXNlZE9iamVjdHMuaGFzKHZhbHVlKSkge1xuICAgIHJldHVybiBoYW5kbGVDaXJjdWxhclJlZmVyZW5jZSh2YWx1ZSwga2V5LCBmdWxsT3B0aW9ucyk7XG4gIH1cblxuICB1c2VkT2JqZWN0cy5hZGQodmFsdWUpO1xuXG4gIGlmIChjYW5Vc2VUb0pTT04pIHtcbiAgICBjb25zdCB0b0pTT05SZXN1bHQgPSB0cnlIYW5kbGVUb0pTT04odmFsdWUsIGtleSwgZGVwdGgsIGZ1bGxPcHRpb25zLCBmdW5jdGlvblRleHRzLCB1c2VkT2JqZWN0cyk7XG4gICAgaWYgKHRvSlNPTlJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdG9KU09OUmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBoYW5kbGVBcnJheSh2YWx1ZSwgZGVwdGgsIGNhblVzZVRvSlNPTiwgZnVsbE9wdGlvbnMsIGZ1bmN0aW9uVGV4dHMsIHVzZWRPYmplY3RzKTtcbiAgfVxuXG4gIGlmIChkZXB0aCA+IGZ1bGxPcHRpb25zLm1heERlcHRoKSB7XG4gICAgcmV0dXJuIG1ha2VQbGFjZWhvbGRlcihUb2tlblN1YnN0aXR1dGlvbktleS5NYXhEZXB0aExpbWl0UmVhY2hlZCk7XG4gIH1cblxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvciAmJiBmdWxsT3B0aW9ucy5zaG91bGRIYW5kbGVFcnJvcnMpIHtcbiAgICByZXR1cm4gZXJyb3JUb1N0cmluZyh2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gaGFuZGxlUGxhaW5PYmplY3QodmFsdWUsIGRlcHRoLCBjYW5Vc2VUb0pTT04sIGZ1bGxPcHRpb25zLCBmdW5jdGlvblRleHRzLCB1c2VkT2JqZWN0cyk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVBsYWluT2JqZWN0KFxuICB2YWx1ZTogb2JqZWN0LFxuICBkZXB0aDogbnVtYmVyLFxuICBjYW5Vc2VUb0pTT046IGJvb2xlYW4sXG4gIGZ1bGxPcHRpb25zOiBUb0pzb25PcHRpb25zLFxuICBmdW5jdGlvblRleHRzOiBzdHJpbmdbXSxcbiAgdXNlZE9iamVjdHM6IFdlYWtTZXQ8b2JqZWN0PlxuKTogdW5rbm93biB7XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh2YWx1ZSk7XG4gIGlmIChmdWxsT3B0aW9ucy5zaG91bGRTb3J0S2V5cykge1xuICAgIGVudHJpZXMuc29ydCgoW2tleTFdLCBba2V5Ml0pID0+IGtleTEubG9jYWxlQ29tcGFyZShrZXkyKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIGVudHJpZXMubWFwKChba2V5MiwgdmFsdWUyXSkgPT4gW1xuICAgICAga2V5MixcbiAgICAgIHRvUGxhaW5PYmplY3QodmFsdWUyLCBrZXkyLCBkZXB0aCArIDEsIGNhblVzZVRvSlNPTiwgZnVsbE9wdGlvbnMsIGZ1bmN0aW9uVGV4dHMsIHVzZWRPYmplY3RzKVxuICAgIF0pXG4gICk7XG59XG5cbmZ1bmN0aW9uIG1ha2VPYmplY3RUb2tlblN1YnN0aXR1dGlvbihrZXk6IFRva2VuU3Vic3RpdHV0aW9uS2V5KTogc3RyaW5nIHtcbiAgcmV0dXJuIGB7IFwiW1ske2tleX1dXVwiOiBudWxsIH1gO1xufVxuXG5mdW5jdGlvbiBtYWtlUGxhY2Vob2xkZXIoa2V5OiBUb2tlblN1YnN0aXR1dGlvbktleSwgaW5kZXg/OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYFtbJHtrZXl9JHtpbmRleCA/IFN0cmluZyhpbmRleCkgOiAnJ31dXWA7XG59XG5cbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QoXG4gIHZhbHVlOiB1bmtub3duLFxuICBrZXk6IHN0cmluZyxcbiAgZGVwdGg6IG51bWJlcixcbiAgY2FuVXNlVG9KU09OOiBib29sZWFuLFxuICBmdWxsT3B0aW9uczogVG9Kc29uT3B0aW9ucyxcbiAgZnVuY3Rpb25UZXh0czogc3RyaW5nW10sXG4gIHVzZWRPYmplY3RzOiBXZWFrU2V0PG9iamVjdD5cbik6IHVua25vd24ge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAoZGVwdGggPT09IDAgfHwgZnVsbE9wdGlvbnMuc2hvdWxkSGFuZGxlVW5kZWZpbmVkKVxuICAgICAgPyBtYWtlUGxhY2Vob2xkZXIoVG9rZW5TdWJzdGl0dXRpb25LZXkuVW5kZWZpbmVkKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGhhbmRsZUZ1bmN0aW9uKHZhbHVlLCBmdW5jdGlvblRleHRzLCBmdWxsT3B0aW9ucyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVPYmplY3QodmFsdWUsIGtleSwgZGVwdGgsIGNhblVzZVRvSlNPTiwgZnVsbE9wdGlvbnMsIGZ1bmN0aW9uVGV4dHMsIHVzZWRPYmplY3RzKTtcbn1cblxuZnVuY3Rpb24gdHJ5SGFuZGxlVG9KU09OKFxuICB2YWx1ZTogb2JqZWN0LFxuICBrZXk6IHN0cmluZyxcbiAgZGVwdGg6IG51bWJlcixcbiAgZnVsbE9wdGlvbnM6IFRvSnNvbk9wdGlvbnMsXG4gIGZ1bmN0aW9uVGV4dHM6IHN0cmluZ1tdLFxuICB1c2VkT2JqZWN0czogV2Vha1NldDxvYmplY3Q+XG4pOiB1bmtub3duIHtcbiAgY29uc3QgdG9KU09OID0gKHZhbHVlIGFzIFBhcnRpYWw8SlNPTlNlcmlhbGl6YWJsZT4pLnRvSlNPTjtcbiAgaWYgKHR5cGVvZiB0b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSB0b0pTT04uY2FsbCh2YWx1ZSwga2V5KTtcbiAgICAgIHJldHVybiB0b1BsYWluT2JqZWN0KG5ld1ZhbHVlLCBrZXksIGRlcHRoLCBmYWxzZSwgZnVsbE9wdGlvbnMsIGZ1bmN0aW9uVGV4dHMsIHVzZWRPYmplY3RzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZnVsbE9wdGlvbnMuc2hvdWxkQ2F0Y2hUb0pTT05FcnJvcnMpIHtcbiAgICAgICAgcmV0dXJuIG1ha2VQbGFjZWhvbGRlcihUb2tlblN1YnN0aXR1dGlvbktleS5Ub0pTT05GYWlsZWQpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUJBLG1CQUE4QjtBQUM5QixzQkFBNEM7QUFDNUMsb0JBQTJCO0FBQzNCLHlCQUlPO0FBS0Es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U0FBTyxrQkFBa0IsT0FBTyxPQUFPLGNBQWMsYUFBYSxlQUFlLFdBQVc7QUFDOUY7QUFFQSxTQUFTLGtCQUNQLE9BQ0EsT0FDQSxjQUNBLGFBQ0EsZUFDQSxhQUNTO0FBQ1QsUUFBTSxVQUFVLE9BQU8sUUFBUSxLQUFLO0FBQ3BDLE1BQUksWUFBWSxnQkFBZ0I7QUFDOUIsWUFBUSxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLE1BQU0sS0FBSyxjQUFjLElBQUksQ0FBQztBQUFBLEVBQzNEO0FBRUEsU0FBTyxPQUFPO0FBQUEsSUFDWixRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sTUFBTSxNQUFNO0FBQUEsTUFDOUI7QUFBQSxNQUNBLGNBQWMsUUFBUSxNQUFNLFFBQVEsR0FBRyxjQUFjLGFBQWEsZUFBZSxXQUFXO0FBQUEsSUFDOUYsQ0FBQztBQUFBLEVBQ0g7QUFDRjtBQUVBLFNBQVMsNEJBQTRCLEtBQW1DO0FBQ3RFLFNBQU8sUUFBUSxHQUFHO0FBQ3BCO0FBRUEsU0FBUyxnQkFBZ0IsS0FBMkIsT0FBd0I7QUFDMUUsU0FBTyxLQUFLLEdBQUcsR0FBRyxRQUFRLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDOUM7QUFFQSxTQUFTLGNBQ1AsT0FDQSxLQUNBLE9BQ0EsY0FDQSxhQUNBLGVBQ0EsYUFDUztBQUNULE1BQUksVUFBVSxRQUFXO0FBQ3ZCLFdBQVEsVUFBVSxLQUFLLFlBQVksd0JBQy9CLGdCQUFnQiwyQkFBOEIsSUFDOUM7QUFBQSxFQUNOO0FBRUEsTUFBSSxPQUFPLFVBQVUsWUFBWTtBQUMvQixXQUFPLGVBQWUsT0FBTyxlQUFlLFdBQVc7QUFBQSxFQUN6RDtBQUVBLE1BQUksT0FBTyxVQUFVLFlBQVksVUFBVSxNQUFNO0FBQy9DLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxhQUFhLE9BQU8sS0FBSyxPQUFPLGNBQWMsYUFBYSxlQUFlLFdBQVc7QUFDOUY7QUFFQSxTQUFTLGdCQUNQLE9BQ0EsS0FDQSxPQUNBLGFBQ0EsZUFDQSxhQUNTO0FBQ1QsUUFBTSxTQUFVLE1BQW9DO0FBQ3BELE1BQUksT0FBTyxXQUFXLFlBQVk7QUFDaEMsUUFBSTtBQUNGLFlBQU0sV0FBVyxPQUFPLEtBQUssT0FBTyxHQUFHO0FBQ3ZDLGFBQU8sY0FBYyxVQUFVLEtBQUssT0FBTyxPQUFPLGFBQWEsZUFBZSxXQUFXO0FBQUEsSUFDM0YsU0FBUyxHQUFHO0FBQ1YsVUFBSSxZQUFZLHlCQUF5QjtBQUN2QyxlQUFPLGdCQUFnQixpQ0FBaUM7QUFBQSxNQUMxRDtBQUNBLFlBQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsiRnVuY3Rpb25IYW5kbGluZ01vZGUiLCAibW9kdWxlIl0KfQo=
@@ -96,6 +96,8 @@ type RemoveUndefinedWithKeysOverload<T extends object, K extends readonly string
96
96
  */
97
97
  export declare function assignWithNonEnumerableProperties<T extends object, U>(target: T, source: U): T & U;
98
98
  /**
99
+ * Assigns properties from one or more source objects to a target object, including non-enumerable properties.
100
+ *
99
101
  * @typeParam T - The target object type.
100
102
  * @typeParam U - The first source object type.
101
103
  * @typeParam V - The second source object type.
@@ -151,4 +151,4 @@ class AppActiveFileProvider {
151
151
  0 && (module.exports = {
152
152
  AppActiveFileProvider
153
153
  });
154
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2FjdGl2ZS1maWxlLXByb3ZpZGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvdmlkZXIgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGZpbGUuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgZmlsZS5cbiAqL1xuXG4vKiogKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZlRmlsZVByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnRseSBhY3RpdmUgZmlsZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFjdGl2ZSBmaWxlLCBvciBgbnVsbGAgaWYgbm8gZmlsZSBpcyBhY3RpdmUuXG4gICAqL1xuICBnZXRBY3RpdmVGaWxlKCk6IG51bGwgfCBURmlsZTtcbn1cblxuLyoqXG4gKiB7QGxpbmsgQWN0aXZlRmlsZVByb3ZpZGVyfSBiYWNrZWQgYnkgT2JzaWRpYW4ncyB7QGxpbmsgQXBwfS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwcEFjdGl2ZUZpbGVQcm92aWRlciBpbXBsZW1lbnRzIEFjdGl2ZUZpbGVQcm92aWRlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGFwcC1iYWNrZWQgYWN0aXZlIGZpbGUgcHJvdmlkZXIuXG4gICAqXG4gICAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHApIHt9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnRseSBhY3RpdmUgZmlsZSBmcm9tIHRoZSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhY3RpdmUgZmlsZSwgb3IgYG51bGxgIGlmIG5vIGZpbGUgaXMgYWN0aXZlLlxuICAgKi9cbiAgcHVibGljIGdldEFjdGl2ZUZpbGUoKTogbnVsbCB8IFRGaWxlIHtcbiAgICByZXR1cm4gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNEJPLE1BQU0sc0JBQW9EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTXhELFlBQTZCLEtBQVU7QUFBVjtBQUFBLEVBQVc7QUFBQSxFQUFYO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTzdCLGdCQUE4QjtBQUNuQyxXQUFPLEtBQUssSUFBSSxVQUFVLGNBQWM7QUFBQSxFQUMxQztBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
154
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2FjdGl2ZS1maWxlLXByb3ZpZGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvdmlkZXIgZm9yIHRoZSBjdXJyZW50bHkgYWN0aXZlIGZpbGUuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3RpdmVGaWxlUHJvdmlkZXIge1xuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSBmaWxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgYWN0aXZlIGZpbGUsIG9yIGBudWxsYCBpZiBubyBmaWxlIGlzIGFjdGl2ZS5cbiAgICovXG4gIGdldEFjdGl2ZUZpbGUoKTogbnVsbCB8IFRGaWxlO1xufVxuXG4vKipcbiAqIHtAbGluayBBY3RpdmVGaWxlUHJvdmlkZXJ9IGJhY2tlZCBieSBPYnNpZGlhbidzIHtAbGluayBBcHB9LlxuICovXG5leHBvcnQgY2xhc3MgQXBwQWN0aXZlRmlsZVByb3ZpZGVyIGltcGxlbWVudHMgQWN0aXZlRmlsZVByb3ZpZGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYXBwLWJhY2tlZCBhY3RpdmUgZmlsZSBwcm92aWRlci5cbiAgICpcbiAgICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcCkge31cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSBmaWxlIGZyb20gdGhlIHdvcmtzcGFjZS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGFjdGl2ZSBmaWxlLCBvciBgbnVsbGAgaWYgbm8gZmlsZSBpcyBhY3RpdmUuXG4gICAqL1xuICBwdWJsaWMgZ2V0QWN0aXZlRmlsZSgpOiBudWxsIHwgVEZpbGUge1xuICAgIHJldHVybiB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwQk8sTUFBTSxzQkFBb0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNeEQsWUFBNkIsS0FBVTtBQUFWO0FBQUEsRUFBVztBQUFBLEVBQVg7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPN0IsZ0JBQThCO0FBQ25DLFdBQU8sS0FBSyxJQUFJLFVBQVUsY0FBYztBQUFBLEVBQzFDO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -7,7 +7,6 @@ import type { App, TFile } from 'obsidian';
7
7
  /**
8
8
  * Provides access to the currently active file.
9
9
  */
10
- /** */
11
10
  export interface ActiveFileProvider {
12
11
  /**
13
12
  * Gets the currently active file.
@@ -215,8 +215,7 @@ class AbstractFileCommandHandler extends import_global_command_handler.GlobalCom
215
215
  *
216
216
  * @param context - The registration context.
217
217
  */
218
- async onRegistered(context) {
219
- await super.onRegistered(context);
218
+ onRegistered(context) {
220
219
  this._activeFileProvider = context.activeFileProvider;
221
220
  this._pluginName = context.pluginName;
222
221
  context.menuEventRegistrar.registerFileMenuEventHandler(this.handleAbstractFileMenu.bind(this));
@@ -228,7 +227,6 @@ class AbstractFileCommandHandler extends import_global_command_handler.GlobalCom
228
227
  *
229
228
  * @returns Whether the command can execute.
230
229
  */
231
- // eslint-disable-next-line obsidian-dev-utils/require-super-call -- Intentionally replaces trivial parent default.
232
230
  canExecute() {
233
231
  if (!this._activeFileProvider) {
234
232
  return false;
@@ -365,4 +363,4 @@ class AbstractFileCommandHandler extends import_global_command_handler.GlobalCom
365
363
  0 && (module.exports = {
366
364
  AbstractFileCommandHandler
367
365
  });
368
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGFic3RyYWN0IGZpbGUgY29tbWFuZHMgd2l0aCBmaWxlL2ZpbGVzIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBJY29uTmFtZSxcbiAgTWVudSxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IEFjdGl2ZUZpbGVQcm92aWRlciB9IGZyb20gJy4uL2FjdGl2ZS1maWxlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyxcbiAgQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0XG59IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHsgaW52b2tlQXN5bmNTYWZlbHkgfSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IEdsb2JhbENvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi9nbG9iYWwtY29tbWFuZC1oYW5kbGVyLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBhbiBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIGV4dGVuZHMgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGljb24gdG8gdXNlIGluIHRoZSBzaW5nbGUtZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlc01lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlc01lbnVTZWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgdGhlIGNvbW1hbmQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29tbWFuZCBoYW5kbGVyIGZvciBhYnN0cmFjdCBmaWxlIGNvbW1hbmRzLlxuICpcbiAqIEhhbmRsZXMgYm90aCBzaW5nbGUtZmlsZSBhbmQgbXVsdGktZmlsZSBjb250ZXh0IG1lbnVzLlxuICogU3ViY2xhc3NlcyBvdmVycmlkZSB7QGxpbmsgY2FuRXhlY3V0ZUFic3RyYWN0RmlsZX0gYW5kIHtAbGluayBleGVjdXRlQWJzdHJhY3RGaWxlfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyIGV4dGVuZHMgR2xvYmFsQ29tbWFuZEhhbmRsZXIge1xuICAvKipcbiAgICogR2V0cyB0aGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBjb21tYW5kIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51SXRlbU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZU1lbnVJdGVtTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBwbHVnaW4gbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZU1lbnVTZWN0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiwgb3IgYHVuZGVmaW5lZGAgZm9yIG5vIGljb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWxlTWVudVN1Ym1lbnVJY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gZmFsbCBiYWNrIHRvIHNpbmdsZS1maWxlIGl0ZW0gbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZXNNZW51SXRlbU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51SXRlbU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gZmFsbCBiYWNrIHRvIHNpbmdsZS1maWxlIHNlY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVzTWVudVNlY3Rpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgdW5kZWZpbmVkYCB0byBmYWxsIGJhY2sgdG8gc2luZ2xlLWZpbGUgc3VibWVudSBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlc01lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVzTWVudVN1Ym1lbnVJY29uO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlRmlsZVByb3ZpZGVyPzogQWN0aXZlRmlsZVByb3ZpZGVyO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZU1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlc01lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfcGx1Z2luTmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgZ2V0IGFjdGl2ZUZpbGVQcm92aWRlcigpOiBBY3RpdmVGaWxlUHJvdmlkZXIge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLl9hY3RpdmVGaWxlUHJvdmlkZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcGx1Z2luTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLl9wbHVnaW5OYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGFic3RyYWN0IGZpbGUgY29tbWFuZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuX2ZpbGVNZW51SXRlbU5hbWUgPSBwYXJhbXMuZmlsZU1lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9maWxlTWVudVNlY3Rpb24gPSBwYXJhbXMuZmlsZU1lbnVTZWN0aW9uO1xuICAgIHRoaXMuX2ZpbGVNZW51U3VibWVudUljb24gPSBwYXJhbXMuZmlsZU1lbnVTdWJtZW51SWNvbjtcbiAgICB0aGlzLl9maWxlc01lbnVJdGVtTmFtZSA9IHBhcmFtcy5maWxlc01lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9maWxlc01lbnVTZWN0aW9uID0gcGFyYW1zLmZpbGVzTWVudVNlY3Rpb247XG4gICAgdGhpcy5fZmlsZXNNZW51U3VibWVudUljb24gPSBwYXJhbXMuZmlsZXNNZW51U3VibWVudUljb247XG4gICAgdGhpcy5fc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSA9IHBhcmFtcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBmaWxlLW1lbnUgYW5kIGZpbGVzLW1lbnUgZXZlbnQgaGFuZGxlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJlZ2lzdHJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIG9uUmVnaXN0ZXJlZChjb250ZXh0OiBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzdXBlci5vblJlZ2lzdGVyZWQoY29udGV4dCk7XG4gICAgdGhpcy5fYWN0aXZlRmlsZVByb3ZpZGVyID0gY29udGV4dC5hY3RpdmVGaWxlUHJvdmlkZXI7XG4gICAgdGhpcy5fcGx1Z2luTmFtZSA9IGNvbnRleHQucGx1Z2luTmFtZTtcbiAgICBjb250ZXh0Lm1lbnVFdmVudFJlZ2lzdHJhci5yZWdpc3RlckZpbGVNZW51RXZlbnRIYW5kbGVyKHRoaXMuaGFuZGxlQWJzdHJhY3RGaWxlTWVudS5iaW5kKHRoaXMpKTtcbiAgICBjb250ZXh0Lm1lbnVFdmVudFJlZ2lzdHJhci5yZWdpc3RlckZpbGVzTWVudUV2ZW50SGFuZGxlcih0aGlzLmhhbmRsZUFic3RyYWN0RmlsZXNNZW51LmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZS5cbiAgICogVXNlcyB0aGUgYWN0aXZlIGZpbGUgYXMgdGhlIHRhcmdldC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcmVxdWlyZS1zdXBlci1jYWxsIC0tIEludGVudGlvbmFsbHkgcmVwbGFjZXMgdHJpdmlhbCBwYXJlbnQgZGVmYXVsdC5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbkV4ZWN1dGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9hY3RpdmVGaWxlUHJvdmlkZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc2hvdWxkQWRkVG9Db21tYW5kUGFsZXR0ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlRmlsZSA9IHRoaXMuZ2V0QWN0aXZlRmlsZSgpO1xuICAgIHJldHVybiAhIWFjdGl2ZUZpbGUgJiYgdGhpcy5jYW5FeGVjdXRlQWJzdHJhY3RGaWxlKGFjdGl2ZUZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZvciBhIHNpbmdsZSBhYnN0cmFjdCBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gX2Fic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBjYW5FeGVjdXRlQWJzdHJhY3RGaWxlKF9hYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZSBmb3IgbXVsdGlwbGUgYWJzdHJhY3QgZmlsZXMuXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gY2hlY2tzIGVhY2ggZmlsZSBpbmRpdmlkdWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FuRXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFic3RyYWN0RmlsZXMubGVuZ3RoID4gMCAmJiBhYnN0cmFjdEZpbGVzLmV2ZXJ5KChmKSA9PiB0aGlzLmNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoZikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZSB1c2luZyB0aGUgYWN0aXZlIGZpbGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhY3RpdmVGaWxlID0gdGhpcy5nZXRBY3RpdmVGaWxlKCk7XG4gICAgaWYgKGFjdGl2ZUZpbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUFic3RyYWN0RmlsZShhY3RpdmVGaWxlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZm9yIGEgc2luZ2xlIGFic3RyYWN0IGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGUgLSBUaGUgZmlsZSBvciBmb2xkZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUpOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCBmb3IgbXVsdGlwbGUgYWJzdHJhY3QgZmlsZXMuXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gZXhlY3V0ZXMgc2VxdWVudGlhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXM6IFRBYnN0cmFjdEZpbGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBhYnN0cmFjdEZpbGVzKSB7XG4gICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBYnN0cmFjdEZpbGUoZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciB0byBhZGQgdGhlIGNvbW1hbmQgdG8gYSBzdWJtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byBhIHN1Ym1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBzaW5nbGUtZmlsZSBjb250ZXh0IG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSBfYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gX2xlYWYgLSBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gdGhlIGZpbGUgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUoX2Fic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSwgX3NvdXJjZTogc3RyaW5nLCBfbGVhZj86IFdvcmtzcGFjZUxlYWYpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgbXVsdGktZmlsZSBjb250ZXh0IG1lbnUuXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gY2hlY2tzIGVhY2ggZmlsZSBpbmRpdmlkdWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGxlYWYgLSBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gdGhlIGZpbGVzIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudShhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10sIHNvdXJjZTogc3RyaW5nLCBsZWFmPzogV29ya3NwYWNlTGVhZik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhYnN0cmFjdEZpbGVzLmV2ZXJ5KChmKSA9PiB0aGlzLnNob3VsZEFkZFRvQWJzdHJhY3RGaWxlTWVudShmLCBzb3VyY2UsIGxlYWYpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9Db21tYW5kUGFsZXR0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZlRmlsZSgpOiBudWxsIHwgVEFic3RyYWN0RmlsZSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRmlsZVByb3ZpZGVyLmdldEFjdGl2ZUZpbGUoKSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBYnN0cmFjdEZpbGVNZW51KG1lbnU6IE1lbnUsIGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSwgc291cmNlOiBzdHJpbmcsIGxlYWY/OiBXb3Jrc3BhY2VMZWFmKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZEFkZFRvQWJzdHJhY3RGaWxlTWVudShhYnN0cmFjdEZpbGUsIHNvdXJjZSwgbGVhZikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZmlsZU1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmZpbGVNZW51U3VibWVudUljb24gPz8gJycsXG4gICAgICAgIHRpdGxlOiBzZWN0aW9uXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtZW51LmFkZEl0ZW0oKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW1cbiAgICAgICAgLnNldFRpdGxlKHRoaXMuZmlsZU1lbnVJdGVtTmFtZSA/PyB0aGlzLm5hbWUpXG4gICAgICAgIC5zZXRJY29uKHRoaXMuaWNvbilcbiAgICAgICAgLnNldFNlY3Rpb24oc2VjdGlvbilcbiAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHRoaXMuZXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGUpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFic3RyYWN0RmlsZXNNZW51KG1lbnU6IE1lbnUsIGFic3RyYWN0RmlsZXM6IFRBYnN0cmFjdEZpbGVbXSwgc291cmNlOiBzdHJpbmcsIGxlYWY/OiBXb3Jrc3BhY2VMZWFmKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZEFkZFRvQWJzdHJhY3RGaWxlc01lbnUoYWJzdHJhY3RGaWxlcywgc291cmNlLCBsZWFmKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5FeGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmZpbGVzTWVudVNlY3Rpb24gPz8gdGhpcy5maWxlTWVudVNlY3Rpb24gPz8gdGhpcy5wbHVnaW5OYW1lO1xuICAgIGlmICh0aGlzLnNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKSkge1xuICAgICAgbWVudS5zZXRTZWN0aW9uU3VibWVudShzZWN0aW9uLCB7XG4gICAgICAgIGljb246IHRoaXMuZmlsZXNNZW51U3VibWVudUljb24gPz8gdGhpcy5maWxlTWVudVN1Ym1lbnVJY29uID8/ICcnLFxuICAgICAgICB0aXRsZTogc2VjdGlvblxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVudS5hZGRJdGVtKChpdGVtKSA9PiB7XG4gICAgICBpdGVtXG4gICAgICAgIC5zZXRUaXRsZSh0aGlzLmZpbGVzTWVudUl0ZW1OYW1lID8/IHRoaXMuZmlsZU1lbnVJdGVtTmFtZSA/PyB0aGlzLm5hbWUpXG4gICAgICAgIC5zZXRJY29uKHRoaXMuaWNvbilcbiAgICAgICAgLnNldFNlY3Rpb24oc2VjdGlvbilcbiAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHRoaXMuZXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlcykpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb0JBLG1CQUFrQztBQUNsQyx5QkFBa0M7QUFDbEMsb0NBQXFDO0FBZ0Q5QixNQUFlLG1DQUFtQyxtREFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNNUUsSUFBYyxtQkFBdUM7QUFDbkQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsa0JBQXNDO0FBQ2xELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHNCQUE0QztBQUN4RCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyxvQkFBd0M7QUFDcEQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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
366
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbW1hbmQtaGFuZGxlcnMvYWJzdHJhY3QtZmlsZS1jb21tYW5kLWhhbmRsZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21tYW5kIGhhbmRsZXIgZm9yIGFic3RyYWN0IGZpbGUgY29tbWFuZHMgd2l0aCBmaWxlL2ZpbGVzIG1lbnUgaW50ZWdyYXRpb24uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBJY29uTmFtZSxcbiAgTWVudSxcbiAgVEFic3RyYWN0RmlsZSxcbiAgV29ya3NwYWNlTGVhZlxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IEFjdGl2ZUZpbGVQcm92aWRlciB9IGZyb20gJy4uL2FjdGl2ZS1maWxlLXByb3ZpZGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyxcbiAgQ29tbWFuZEhhbmRsZXJSZWdpc3RyYXRpb25Db250ZXh0XG59IGZyb20gJy4vY29tbWFuZC1oYW5kbGVyLnRzJztcblxuaW1wb3J0IHsgaW52b2tlQXN5bmNTYWZlbHkgfSBmcm9tICcuLi8uLi9hc3luYy50cyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IEdsb2JhbENvbW1hbmRIYW5kbGVyIH0gZnJvbSAnLi9nbG9iYWwtY29tbWFuZC1oYW5kbGVyLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBhbiBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdEZpbGVDb21tYW5kSGFuZGxlckNvbnN0cnVjdG9yUGFyYW1zIGV4dGVuZHMgQ29tbWFuZEhhbmRsZXJDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGljb24gdG8gdXNlIGluIHRoZSBzaW5nbGUtZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlTWVudVN1Ym1lbnVJY29uPzogSWNvbk5hbWUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUgdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlc01lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gdG8gdXNlIGluIHRoZSBtdWx0aS1maWxlIG1lbnUuXG4gICAqL1xuICByZWFkb25seSBmaWxlc01lbnVTZWN0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXNNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgdGhlIGNvbW1hbmQgdG8gYSBzdWJtZW51LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29tbWFuZCBoYW5kbGVyIGZvciBhYnN0cmFjdCBmaWxlIGNvbW1hbmRzLlxuICpcbiAqIEhhbmRsZXMgYm90aCBzaW5nbGUtZmlsZSBhbmQgbXVsdGktZmlsZSBjb250ZXh0IG1lbnVzLlxuICogU3ViY2xhc3NlcyBvdmVycmlkZSB7QGxpbmsgY2FuRXhlY3V0ZUFic3RyYWN0RmlsZX0gYW5kIHtAbGluayBleGVjdXRlQWJzdHJhY3RGaWxlfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyIGV4dGVuZHMgR2xvYmFsQ29tbWFuZEhhbmRsZXIge1xuICAvKipcbiAgICogR2V0cyB0aGUgaXRlbSBuYW1lIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBjb21tYW5kIG5hbWUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51SXRlbU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZU1lbnVJdGVtTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZWN0aW9uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gdXNlIHRoZSBwbHVnaW4gbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZU1lbnVTZWN0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgc2luZ2xlLWZpbGUgbWVudSBzdWJtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWNvbiwgb3IgYHVuZGVmaW5lZGAgZm9yIG5vIGljb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVNZW51U3VibWVudUljb24oKTogSWNvbk5hbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9maWxlTWVudVN1Ym1lbnVJY29uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGl0ZW0gbmFtZSB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGl0ZW0gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gZmFsbCBiYWNrIHRvIHNpbmdsZS1maWxlIGl0ZW0gbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZmlsZXNNZW51SXRlbU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51SXRlbU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2VjdGlvbiB0byB1c2UgaW4gdGhlIG11bHRpLWZpbGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNlY3Rpb24gbmFtZSwgb3IgYHVuZGVmaW5lZGAgdG8gZmFsbCBiYWNrIHRvIHNpbmdsZS1maWxlIHNlY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpbGVzTWVudVNlY3Rpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZXNNZW51U2VjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpY29uIHRvIHVzZSBpbiB0aGUgbXVsdGktZmlsZSBtZW51IHN1Ym1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpY29uLCBvciBgdW5kZWZpbmVkYCB0byBmYWxsIGJhY2sgdG8gc2luZ2xlLWZpbGUgc3VibWVudSBpY29uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBmaWxlc01lbnVTdWJtZW51SWNvbigpOiBJY29uTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVzTWVudVN1Ym1lbnVJY29uO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlRmlsZVByb3ZpZGVyPzogQWN0aXZlRmlsZVByb3ZpZGVyO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51SXRlbU5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZU1lbnVTdWJtZW51SWNvbj86IEljb25OYW1lIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWxlc01lbnVJdGVtTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51U2VjdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNNZW51U3VibWVudUljb24/OiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfcGx1Z2luTmFtZT86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudT86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgZ2V0IGFjdGl2ZUZpbGVQcm92aWRlcigpOiBBY3RpdmVGaWxlUHJvdmlkZXIge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLl9hY3RpdmVGaWxlUHJvdmlkZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcGx1Z2luTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLl9wbHVnaW5OYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGFic3RyYWN0IGZpbGUgY29tbWFuZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBhYnN0cmFjdCBmaWxlIGNvbW1hbmQgaGFuZGxlci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFic3RyYWN0RmlsZUNvbW1hbmRIYW5kbGVyQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuX2ZpbGVNZW51SXRlbU5hbWUgPSBwYXJhbXMuZmlsZU1lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9maWxlTWVudVNlY3Rpb24gPSBwYXJhbXMuZmlsZU1lbnVTZWN0aW9uO1xuICAgIHRoaXMuX2ZpbGVNZW51U3VibWVudUljb24gPSBwYXJhbXMuZmlsZU1lbnVTdWJtZW51SWNvbjtcbiAgICB0aGlzLl9maWxlc01lbnVJdGVtTmFtZSA9IHBhcmFtcy5maWxlc01lbnVJdGVtTmFtZTtcbiAgICB0aGlzLl9maWxlc01lbnVTZWN0aW9uID0gcGFyYW1zLmZpbGVzTWVudVNlY3Rpb247XG4gICAgdGhpcy5fZmlsZXNNZW51U3VibWVudUljb24gPSBwYXJhbXMuZmlsZXNNZW51U3VibWVudUljb247XG4gICAgdGhpcy5fc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSA9IHBhcmFtcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBmaWxlLW1lbnUgYW5kIGZpbGVzLW1lbnUgZXZlbnQgaGFuZGxlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHJlZ2lzdHJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9uUmVnaXN0ZXJlZChjb250ZXh0OiBDb21tYW5kSGFuZGxlclJlZ2lzdHJhdGlvbkNvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3RpdmVGaWxlUHJvdmlkZXIgPSBjb250ZXh0LmFjdGl2ZUZpbGVQcm92aWRlcjtcbiAgICB0aGlzLl9wbHVnaW5OYW1lID0gY29udGV4dC5wbHVnaW5OYW1lO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRmlsZU1lbnVFdmVudEhhbmRsZXIodGhpcy5oYW5kbGVBYnN0cmFjdEZpbGVNZW51LmJpbmQodGhpcykpO1xuICAgIGNvbnRleHQubWVudUV2ZW50UmVnaXN0cmFyLnJlZ2lzdGVyRmlsZXNNZW51RXZlbnRIYW5kbGVyKHRoaXMuaGFuZGxlQWJzdHJhY3RGaWxlc01lbnUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgZnJvbSB0aGUgY29tbWFuZCBwYWxldHRlLlxuICAgKiBVc2VzIHRoZSBhY3RpdmUgZmlsZSBhcyB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbkV4ZWN1dGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9hY3RpdmVGaWxlUHJvdmlkZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc2hvdWxkQWRkVG9Db21tYW5kUGFsZXR0ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlRmlsZSA9IHRoaXMuZ2V0QWN0aXZlRmlsZSgpO1xuICAgIHJldHVybiAhIWFjdGl2ZUZpbGUgJiYgdGhpcy5jYW5FeGVjdXRlQWJzdHJhY3RGaWxlKGFjdGl2ZUZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIGZvciBhIHNpbmdsZSBhYnN0cmFjdCBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gX2Fic3RyYWN0RmlsZSAtIFRoZSBmaWxlIG9yIGZvbGRlci5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBjYW5FeGVjdXRlQWJzdHJhY3RGaWxlKF9hYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZSBmb3IgbXVsdGlwbGUgYWJzdHJhY3QgZmlsZXMuXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gY2hlY2tzIGVhY2ggZmlsZSBpbmRpdmlkdWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2FuRXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFic3RyYWN0RmlsZXMubGVuZ3RoID4gMCAmJiBhYnN0cmFjdEZpbGVzLmV2ZXJ5KChmKSA9PiB0aGlzLmNhbkV4ZWN1dGVBYnN0cmFjdEZpbGUoZikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kIGZyb20gdGhlIGNvbW1hbmQgcGFsZXR0ZSB1c2luZyB0aGUgYWN0aXZlIGZpbGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhY3RpdmVGaWxlID0gdGhpcy5nZXRBY3RpdmVGaWxlKCk7XG4gICAgaWYgKGFjdGl2ZUZpbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUFic3RyYWN0RmlsZShhY3RpdmVGaWxlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQgZm9yIGEgc2luZ2xlIGFic3RyYWN0IGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGUgLSBUaGUgZmlsZSBvciBmb2xkZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGU6IFRBYnN0cmFjdEZpbGUpOiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY29tbWFuZCBmb3IgbXVsdGlwbGUgYWJzdHJhY3QgZmlsZXMuXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gZXhlY3V0ZXMgc2VxdWVudGlhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBmaWxlcyBvciBmb2xkZXJzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGV4ZWN1dGVBYnN0cmFjdEZpbGVzKGFic3RyYWN0RmlsZXM6IFRBYnN0cmFjdEZpbGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBhYnN0cmFjdEZpbGVzKSB7XG4gICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBYnN0cmFjdEZpbGUoZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciB0byBhZGQgdGhlIGNvbW1hbmQgdG8gYSBzdWJtZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRvIGFkZCB0byBhIHN1Ym1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudSgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkQWRkQ29tbWFuZFRvU3VibWVudTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBzaW5nbGUtZmlsZSBjb250ZXh0IG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSBfYWJzdHJhY3RGaWxlIC0gVGhlIGZpbGUgb3IgZm9sZGVyLlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gX2xlYWYgLSBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gdGhlIGZpbGUgbWVudS5cbiAgICovXG4gIHByb3RlY3RlZCBzaG91bGRBZGRUb0Fic3RyYWN0RmlsZU1lbnUoX2Fic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSwgX3NvdXJjZTogc3RyaW5nLCBfbGVhZj86IFdvcmtzcGFjZUxlYWYpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGNvbW1hbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgbXVsdGktZmlsZSBjb250ZXh0IG1lbnUuXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gY2hlY2tzIGVhY2ggZmlsZSBpbmRpdmlkdWFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBhYnN0cmFjdEZpbGVzIC0gVGhlIGZpbGVzIG9yIGZvbGRlcnMuXG4gICAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIGxlYWYgLSBUaGUgd29ya3NwYWNlIGxlYWYsIGlmIGF2YWlsYWJsZS5cbiAgICogQHJldHVybnMgV2hldGhlciB0byBhZGQgdG8gdGhlIGZpbGVzIG1lbnUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9BYnN0cmFjdEZpbGVzTWVudShhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10sIHNvdXJjZTogc3RyaW5nLCBsZWFmPzogV29ya3NwYWNlTGVhZik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhYnN0cmFjdEZpbGVzLmV2ZXJ5KChmKSA9PiB0aGlzLnNob3VsZEFkZFRvQWJzdHJhY3RGaWxlTWVudShmLCBzb3VyY2UsIGxlYWYpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgYXBwZWFyIGluIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdG8gYWRkIHRvIHRoZSBjb21tYW5kIHBhbGV0dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2hvdWxkQWRkVG9Db21tYW5kUGFsZXR0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZlRmlsZSgpOiBudWxsIHwgVEFic3RyYWN0RmlsZSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRmlsZVByb3ZpZGVyLmdldEFjdGl2ZUZpbGUoKSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBYnN0cmFjdEZpbGVNZW51KG1lbnU6IE1lbnUsIGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSwgc291cmNlOiBzdHJpbmcsIGxlYWY/OiBXb3Jrc3BhY2VMZWFmKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZEFkZFRvQWJzdHJhY3RGaWxlTWVudShhYnN0cmFjdEZpbGUsIHNvdXJjZSwgbGVhZikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2FuRXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VjdGlvbiA9IHRoaXMuZmlsZU1lbnVTZWN0aW9uID8/IHRoaXMucGx1Z2luTmFtZTtcbiAgICBpZiAodGhpcy5zaG91bGRBZGRDb21tYW5kVG9TdWJtZW51KCkpIHtcbiAgICAgIG1lbnUuc2V0U2VjdGlvblN1Ym1lbnUoc2VjdGlvbiwge1xuICAgICAgICBpY29uOiB0aGlzLmZpbGVNZW51U3VibWVudUljb24gPz8gJycsXG4gICAgICAgIHRpdGxlOiBzZWN0aW9uXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtZW51LmFkZEl0ZW0oKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW1cbiAgICAgICAgLnNldFRpdGxlKHRoaXMuZmlsZU1lbnVJdGVtTmFtZSA/PyB0aGlzLm5hbWUpXG4gICAgICAgIC5zZXRJY29uKHRoaXMuaWNvbilcbiAgICAgICAgLnNldFNlY3Rpb24oc2VjdGlvbilcbiAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHRoaXMuZXhlY3V0ZUFic3RyYWN0RmlsZShhYnN0cmFjdEZpbGUpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFic3RyYWN0RmlsZXNNZW51KG1lbnU6IE1lbnUsIGFic3RyYWN0RmlsZXM6IFRBYnN0cmFjdEZpbGVbXSwgc291cmNlOiBzdHJpbmcsIGxlYWY/OiBXb3Jrc3BhY2VMZWFmKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3VsZEFkZFRvQWJzdHJhY3RGaWxlc01lbnUoYWJzdHJhY3RGaWxlcywgc291cmNlLCBsZWFmKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jYW5FeGVjdXRlQWJzdHJhY3RGaWxlcyhhYnN0cmFjdEZpbGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlY3Rpb24gPSB0aGlzLmZpbGVzTWVudVNlY3Rpb24gPz8gdGhpcy5maWxlTWVudVNlY3Rpb24gPz8gdGhpcy5wbHVnaW5OYW1lO1xuICAgIGlmICh0aGlzLnNob3VsZEFkZENvbW1hbmRUb1N1Ym1lbnUoKSkge1xuICAgICAgbWVudS5zZXRTZWN0aW9uU3VibWVudShzZWN0aW9uLCB7XG4gICAgICAgIGljb246IHRoaXMuZmlsZXNNZW51U3VibWVudUljb24gPz8gdGhpcy5maWxlTWVudVN1Ym1lbnVJY29uID8/ICcnLFxuICAgICAgICB0aXRsZTogc2VjdGlvblxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVudS5hZGRJdGVtKChpdGVtKSA9PiB7XG4gICAgICBpdGVtXG4gICAgICAgIC5zZXRUaXRsZSh0aGlzLmZpbGVzTWVudUl0ZW1OYW1lID8/IHRoaXMuZmlsZU1lbnVJdGVtTmFtZSA/PyB0aGlzLm5hbWUpXG4gICAgICAgIC5zZXRJY29uKHRoaXMuaWNvbilcbiAgICAgICAgLnNldFNlY3Rpb24oc2VjdGlvbilcbiAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IHRoaXMuZXhlY3V0ZUFic3RyYWN0RmlsZXMoYWJzdHJhY3RGaWxlcykpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb0JBLG1CQUFrQztBQUNsQyx5QkFBa0M7QUFDbEMsb0NBQXFDO0FBZ0Q5QixNQUFlLG1DQUFtQyxtREFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNNUUsSUFBYyxtQkFBdUM7QUFDbkQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsa0JBQXNDO0FBQ2xELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHNCQUE0QztBQUN4RCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsSUFBYyxvQkFBd0M7QUFDcEQsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLElBQWMsbUJBQXVDO0FBQ25ELFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxJQUFjLHVCQUE2QztBQUN6RCxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQUEsRUFFUTtBQUFBLEVBRVM7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFB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