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
@@ -39,7 +39,10 @@ import {
39
39
  printError,
40
40
  SilentError
41
41
  } from "./error.mjs";
42
- import { noop } from "./function.mjs";
42
+ import {
43
+ noop,
44
+ noopAsync
45
+ } from "./function.mjs";
43
46
  import { normalizeOptionalProperties } from "./object-utils.mjs";
44
47
  import {
45
48
  assert,
@@ -104,7 +107,7 @@ ${innerStackTrace}`;
104
107
  }
105
108
  function convertSyncToAsync(syncFn) {
106
109
  return async (...args) => {
107
- await Promise.resolve();
110
+ await noopAsync();
108
111
  return syncFn(...args);
109
112
  };
110
113
  }
@@ -364,4 +367,4 @@ export {
364
367
  timeout,
365
368
  toArray
366
369
  };
367
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgR2VuZXJpY0FzeW5jRnVuY3Rpb24sXG4gIEdlbmVyaWNGdW5jdGlvbixcbiAgR2VuZXJpY1ZvaWRGdW5jdGlvblxufSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcblxuaW1wb3J0IHtcbiAgYWJvcnRTaWduYWxBbnksXG4gIGFib3J0U2lnbmFsTmV2ZXIsXG4gIGFib3J0U2lnbmFsVGltZW91dCxcbiAgd2FpdEZvckFib3J0XG59IGZyb20gJy4vYWJvcnQtY29udHJvbGxlci50cyc7XG5pbXBvcnQge1xuICBnZXRMaWJEZWJ1Z2dlcixcbiAgcHJpbnRXaXRoU3RhY2tUcmFjZVxufSBmcm9tICcuL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIEFTWU5DX1dSQVBQRVJfRVJST1JfTUVTU0FHRSxcbiAgQ3VzdG9tU3RhY2tUcmFjZUVycm9yLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBwcmludEVycm9yLFxuICBTaWxlbnRFcnJvclxufSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgYXNzZXJ0Tm9uTnVsbGFibGVcbn0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogQSB0eXBlIHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgYSB7QGxpbmsgUHJvbWlzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBQcm9taXNlUmVzb2x2ZTxUPiA9IHVuZGVmaW5lZCBleHRlbmRzIFQgPyAodmFsdWU/OiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWRcbiAgOiAodmFsdWU6IFByb21pc2VMaWtlPFQ+IHwgVCkgPT4gdm9pZDtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmV0cnlXaXRoVGltZW91dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogQSBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy5cbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXRyeSB0aGUgZnVuY3Rpb24gb24gZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXRyeU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZ2l2aW5nIHVwIG9uIHJldHJ5aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZXJyb3IgaGFuZGxlciB0byBhIHtAbGluayBQcm9taXNlfSB0aGF0IGNhdGNoZXMgYW55IGVycm9ycyBhbmQgZW1pdHMgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGFkZCBhbiBlcnJvciBoYW5kbGVyIHRvLlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBlbWl0cyBhc3luYyBlcnJvciBldmVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcihhc3luY0ZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+LCBzdGFja1RyYWNlPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHN0YWNrVHJhY2UgPz89IGdldFN0YWNrVHJhY2UoMSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYXN5bmNGbigpO1xuICB9IGNhdGNoIChhc3luY0Vycm9yKSB7XG4gICAgY29uc3Qgd3JhcHBlZEVycm9yID0gbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcihBU1lOQ19XUkFQUEVSX0VSUk9SX01FU1NBR0UsIHN0YWNrVHJhY2UsIGFzeW5jRXJyb3IpO1xuICAgIGlmIChoYW5kbGVTaWxlbnRFcnJvcih3cmFwcGVkRXJyb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVtaXRBc3luY0Vycm9yRXZlbnQod3JhcHBlZEVycm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmlsdGVyPFQ+KGFycjogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IGFuczogVFtdID0gW107XG5cbiAgY29uc3QgbGVuZ3RoID0gYXJyLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihhcnIsIGkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtID0gYXJyW2ldIGFzIFQ7XG4gICAgaWYgKGF3YWl0IHByZWRpY2F0ZShpdGVtLCBpLCBhcnIpKSB7XG4gICAgICBhbnMucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYW5zO1xufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHkgaW4gcGxhY2UsIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXJyYXkgaXMgZmlsdGVyZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0ZpbHRlckluUGxhY2U8VD4oYXJyOiBUW10sIHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPGJvb2xlYW4+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGxlbmd0aCA9IGFyci5sZW5ndGg7XG4gIGxldCB3cml0ZUluZGV4ID0gMDtcbiAgZm9yIChsZXQgcmVhZEluZGV4ID0gMDsgcmVhZEluZGV4IDwgbGVuZ3RoOyByZWFkSW5kZXgrKykge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihhcnIsIHJlYWRJbmRleCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnQgPSBhcnJbcmVhZEluZGV4XSBhcyBUO1xuICAgIGlmIChhd2FpdCBwcmVkaWNhdGUoY3VycmVudCwgcmVhZEluZGV4LCBhcnIpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBZZXMsIGl0IGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLCBidXQgSSBkb24ndCBhbiBlbGVnYW50IHdheSB0byBmaXggaXQuXG4gICAgICBhcnJbd3JpdGVJbmRleCsrXSA9IGN1cnJlbnQ7XG4gICAgfVxuICB9XG4gIGFyci5sZW5ndGggPSB3cml0ZUluZGV4O1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCwgYW5kIHRoZW4gZmxhdHRlbnMgdGhlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBhcnJheS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3ZlciBhbmQgZmxhdHRlbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSBmbGF0dGVuZWQgYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFVbXT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gKGF3YWl0IGFzeW5jTWFwKGFyciwgY2FsbGJhY2spKS5mbGF0KCk7XG59XG5cbi8qKlxuICogTWFwcyBvdmVyIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY01hcDxULCBVPihhcnI6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVPik6IFByb21pc2U8VVtdPiB7XG4gIHJldHVybiBhd2FpdCBwcm9taXNlQWxsU2VxdWVudGlhbGx5KGFyci5tYXAoY2FsbGJhY2spKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYSBzeW5jaHJvbm91cyBvbmUgYnkgYXV0b21hdGljYWxseSBoYW5kbGluZyB0aGUgUHJvbWlzZSByZWplY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMuXG4gKiBAcGFyYW0gYXN5bmNGdW5jIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFzeW5jVG9TeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGFzeW5jRnVuYzogR2VuZXJpY0FzeW5jRnVuY3Rpb248QXJncz4sIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiBHZW5lcmljVm9pZEZ1bmN0aW9uPEFyZ3M+IHtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgcmV0dXJuICguLi5hcmdzOiBBcmdzKTogdm9pZCA9PiB7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUoc3RhY2tUcmFjZSk7XG4gICAgY29uc3QgaW5uZXJTdGFja1RyYWNlID0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgICBzdGFja1RyYWNlID0gYCR7c3RhY2tUcmFjZX1cXG4gICAgYXQgLS0tIGNvbnZlcnRBc3luY1RvU3luYyAtLS0gKDApXFxuJHtpbm5lclN0YWNrVHJhY2V9YDtcbiAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBhc3luY0Z1bmMoLi4uYXJncyksIHN0YWNrVHJhY2UpO1xuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYW4gYXN5bmNocm9ub3VzIG9uZSBieSB3cmFwcGluZyBpdCBpbiBhIHtAbGluayBQcm9taXNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyB0aGUgZnVuY3Rpb24gYWNjZXB0cy5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlLlxuICogQHBhcmFtIHN5bmNGbiAtIFRoZSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHdyYXBzIHRoZSBzeW5jaHJvbm91cyBmdW5jdGlvbiBpbiBhbiBhc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFN5bmNUb0FzeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFJlc3VsdD4oc3luY0ZuOiBHZW5lcmljRnVuY3Rpb248QXJncywgUmVzdWx0Pik6IEdlbmVyaWNBc3luY0Z1bmN0aW9uPEFyZ3MsIFJlc3VsdD4ge1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IEFyZ3MpOiBQcm9taXNlPFJlc3VsdD4gPT4ge1xuICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHJldHVybiBzeW5jRm4oLi4uYXJncyk7XG4gIH07XG59XG5cbi8qKlxuICogSGFuZGxlcyBhIHNpbGVudCBlcnJvci5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gaGFuZGxlLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZXJyb3IgaXMgYSBzaWxlbnQgZXJyb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVTaWxlbnRFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBsZXQgY2F1c2UgPSBlcnJvcjtcbiAgd2hpbGUgKCEoY2F1c2UgaW5zdGFuY2VvZiBTaWxlbnRFcnJvcikpIHtcbiAgICBpZiAoIShjYXVzZSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNhdXNlID0gY2F1c2UuY2F1c2U7XG4gIH1cblxuICBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6aGFuZGxlU2lsZW50RXJyb3InKShlcnJvcik7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIElnbm9yZXMgYW4gZXJyb3IgdGhhdCBpcyB0aHJvd24gYnkgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBwcm9taXNlIC0gVGhlIHByb21pc2UgdG8gaWdub3JlIHRoZSBlcnJvciBvZi5cbiAqIEBwYXJhbSBmYWxsYmFja1ZhbHVlIC0gQWx3YXlzIGB1bmRlZmluZWRgLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gY29tcGxldGVzIG9yIGZhaWxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3IocHJvbWlzZTogUHJvbWlzZTx1bmtub3duPiwgZmFsbGJhY2tWYWx1ZT86IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD47XG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZTogVCk6IFByb21pc2U8VD47XG4vKipcbiAqIElnbm9yZXMgYW4gZXJyb3IgdGhhdCBpcyB0aHJvd24gYnkgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZT86IFQpOiBQcm9taXNlPFQgfCB2b2lkPiB7XG4gIGNvbnN0IGlnbm9yZUVycm9yRGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6aWdub3JlRXJyb3InKTtcbiAgY29uc3Qgc3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoMSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHByb21pc2U7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZ25vcmVFcnJvckRlYnVnZ2VyKCdJZ25vcmVkIGVycm9yJywgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcignSWdub3JlZCBlcnJvcicsIHN0YWNrVHJhY2UsIGUpKTtcbiAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYSB7QGxpbmsgUHJvbWlzZX0gYW5kIHNhZmVseSBoYW5kbGVzIGFueSBlcnJvcnMgYnkgY2F0Y2hpbmcgdGhlbSBhbmQgZW1pdHRpbmcgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZSBzYWZlbHkuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIFRoZSBzdGFjayB0cmFjZSBvZiB0aGUgc291cmNlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlQXN5bmNTYWZlbHkoYXN5bmNGbjogKCkgPT4gUHJvbWlzYWJsZTx1bmtub3duPiwgc3RhY2tUcmFjZT86IHN0cmluZyk6IHZvaWQge1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuXG4gIGxldCByZXN1bHQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcmVzdWx0ID0gYXN5bmNGbigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkLCBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9ycyAtLSBXZSBuZWVkIHRvIGZpcmUtYW5kLWZvcmdldC4gUmUtcmVqZWN0aW5nIHRoZSBvcmlnaW5hbCBjYXVnaHQgZXJyb3IgYXMtaXMuXG4gICAgdm9pZCBhZGRFcnJvckhhbmRsZXIoKCkgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpLCBzdGFja1RyYWNlKTtcbiAgfVxuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkIC0tIFdlIG5lZWQgdG8gZmlyZS1hbmQtZm9yZ2V0LlxuICAgIHZvaWQgYWRkRXJyb3JIYW5kbGVyKCgpID0+IHJlc3VsdCwgc3RhY2tUcmFjZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZva2VzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBhZnRlciBhIGRlbGF5LlxuICpcbiAqIEBwYXJhbSBhc3luY0ZuIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0gZGVsYXlJbk1pbGxpc2Vjb25kcyAtIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIFRoZSBzdGFjayB0cmFjZSBvZiB0aGUgc291cmNlIGZ1bmN0aW9uLlxuICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VBc3luY1NhZmVseUFmdGVyRGVsYXkoXG4gIGFzeW5jRm46IChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpID0+IFByb21pc2FibGU8dm9pZD4sXG4gIGRlbGF5SW5NaWxsaXNlY29uZHMgPSAwLFxuICBzdGFja1RyYWNlPzogc3RyaW5nLFxuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4pOiB2b2lkIHtcbiAgYWJvcnRTaWduYWwgPz89IGFib3J0U2lnbmFsTmV2ZXIoKTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHNsZWVwKGRlbGF5SW5NaWxsaXNlY29uZHMsIGFib3J0U2lnbmFsLCB0cnVlKTtcbiAgICBhd2FpdCBhc3luY0ZuKGFib3J0U2lnbmFsKTtcbiAgfSwgc3RhY2tUcmFjZSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYXN5bmMgZnVuY3Rpb25zIHNlcXVlbnRpYWxseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gYXN5bmNGbnMgLSBUaGUgYXN5bmMgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgc2VxdWVudGlhbGx5LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHRoZSByZXN1bHRzIG9mIHRoZSBhc3luYyBmdW5jdGlvbnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9taXNlQWxsQXN5bmNGbnNTZXF1ZW50aWFsbHk8VD4oYXN5bmNGbnM6ICgoKSA9PiBQcm9taXNhYmxlPFQ+KVtdKTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgcmVzdWx0czogVFtdID0gW107XG4gIGZvciAoY29uc3QgYXN5bmNGbiBvZiBhc3luY0Zucykge1xuICAgIHJlc3VsdHMucHVzaChhd2FpdCBhc3luY0ZuKCkpO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHByb21pc2VzIHNlcXVlbnRpYWxseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gcHJvbWlzZXMgLSBUaGUgcHJvbWlzZXMgdG8gZXhlY3V0ZSBzZXF1ZW50aWFsbHkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIHByb21pc2VzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvbWlzZUFsbFNlcXVlbnRpYWxseTxUPihwcm9taXNlczogUHJvbWlzYWJsZTxUPltdKTogUHJvbWlzZTxUW10+IHtcbiAgcmV0dXJuIGF3YWl0IHByb21pc2VBbGxBc3luY0Zuc1NlcXVlbnRpYWxseShwcm9taXNlcy5tYXAoKHByb21pc2UpID0+ICgpID0+IHByb21pc2UpKTtcbn1cblxuY29uc3QgdGVybWluYXRlUmV0cnlFcnJvcnMgPSBuZXcgV2Vha1NldDxFcnJvcj4oKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmV0cnlXaXRoVGltZW91dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlXaXRoVGltZW91dFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSB0aW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSB0aW1lb3V0IGNvbnRleHQuXG4gICAqL1xuICBvblRpbWVvdXQ/KHRoaXM6IHZvaWQsIGNvbnRleHQ6IFRpbWVvdXRDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gICAqXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIG9wZXJhdGlvbkZuKHRoaXM6IHZvaWQsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2FibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmV0cnkgb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5T3B0aW9ucz86IFJldHJ5T3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBydW5XaXRoVGltZW91dH0uXG4gKlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBvcGVyYXRpb24gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuV2l0aFRpbWVvdXRQYXJhbXM8UmVzdWx0PiB7XG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgdGltZW91dC5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgdGltZW91dCBjb250ZXh0LlxuICAgKi9cbiAgb25UaW1lb3V0Pyh0aGlzOiB2b2lkLCBjb250ZXh0OiBUaW1lb3V0Q29udGV4dCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpb24gZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAgICpcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgb3BlcmF0aW9uRm4odGhpczogdm9pZCwgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzYWJsZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29udGV4dCBwcm92aWRlZCB0byB0aGUgdGltZW91dCBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIG9wZXJhdGlvbiBzdGFydGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb246IG51bWJlcjtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy5cbiAgICovXG4gIG9uT3BlcmF0aW9uQ29tcGxldGVkKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZDtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25OYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUZXJtaW5hdGVzIHRoZSBvcGVyYXRpb24gdGhhdCB0aW1lZCBvdXQuXG4gICAqL1xuICB0ZXJtaW5hdGVPcGVyYXRpb24oKTogdm9pZDtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5KGVycm9yOiBFcnJvcik6IHZvaWQge1xuICB0ZXJtaW5hdGVSZXRyeUVycm9ycy5hZGQoZXJyb3IpO1xufVxuXG4vKipcbiAqIEFuIGFzeW5jIGZ1bmN0aW9uIHRoYXQgbmV2ZXIgZW5kcy5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IG5ldmVyIHJlc29sdmVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmV2ZXJFbmRzKCk6IFByb21pc2U8bmV2ZXI+IHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKCkgPT4ge1xuICAgIG5vb3AoKTtcbiAgfSk7XG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGhhdXN0aXZlIHN3aXRjaCBndWFyZDsgdGhlIGF3YWl0IGFib3ZlIG5ldmVyIHJlc29sdmVzLiAqL1xuICBhc3NlcnQoZmFsc2UsICdTaG91bGQgbmV2ZXIgaGFwcGVuJyk7XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCB0aWNrLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgdGljayBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuZXh0VGlja0FzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCBxdWV1ZSBtaWNyb3Rhc2suXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbmV4dCBxdWV1ZSBtaWNyb3Rhc2sgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcXVldWVNaWNyb3Rhc2tBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuZXh0IHJlcXVlc3QgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgcmVxdWVzdCBhbmltYXRpb24gZnJhbWUgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWVzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB1bnRpbCBpdCByZXR1cm5zIGB0cnVlYCBvciB0aGUgdGltZW91dCBpcyByZWFjaGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCBvciByZWplY3RzIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5V2l0aFRpbWVvdXQocGFyYW1zOiBSZXRyeVdpdGhUaW1lb3V0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdBc3luYzpyZXRyeVdpdGhUaW1lb3V0Jyk7XG4gIGNvbnN0IHN0YWNrVHJhY2UgPSBwYXJhbXMuc3RhY2tUcmFjZSA/PyBnZXRTdGFja1RyYWNlKDEpO1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICByZXRyeURlbGF5SW5NaWxsaXNlY29uZHM6IDEwMCxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IGZhbHNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzIC0tIEV4dHJhY3RpbmcgbWFnaWMgbnVtYmVyIGFzIGEgY29uc3RhbnQgd291bGQgYmUgcmVwZXRpdGl2ZSwgYXMgdGhlIHZhbHVlIGlzIHVzZWQgb25seSBvbmNlIGFuZCBpdHMgbmFtZSB3b3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgcHJvcGVydHkuXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnBhcmFtcy5yZXRyeU9wdGlvbnMgfTtcbiAgZnVsbE9wdGlvbnMuYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgYXdhaXQgcnVuV2l0aFRpbWVvdXQobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFJ1bldpdGhUaW1lb3V0UGFyYW1zPHZvaWQ+Pih7XG4gICAgY29udGV4dDogeyBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJywgcmV0cnlGbjogcGFyYW1zLm9wZXJhdGlvbkZuIH0sXG4gICAgb25UaW1lb3V0OiBwYXJhbXMub25UaW1lb3V0LFxuICAgIGFzeW5jIG9wZXJhdGlvbkZuKGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgY29tYmluZWRBYm9ydFNpZ25hbCA9IGFib3J0U2lnbmFsQW55KGZ1bGxPcHRpb25zLmFib3J0U2lnbmFsLCBhYm9ydFNpZ25hbCk7XG4gICAgICBjb21iaW5lZEFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgICB3aGlsZSAoIWNvbWJpbmVkQWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGxldCBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaXNTdWNjZXNzID0gYXdhaXQgcGFyYW1zLm9wZXJhdGlvbkZuKGNvbWJpbmVkQWJvcnRTaWduYWwpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IG1pZ2h0IGNoYW5nZWQgaW5zaWRlIGBmbigpYC4gRVNMaW50IG1pc3Rha2VubHkgZG9lcyBub3QgcmVjb2duaXplIGl0LlxuICAgICAgICAgIGlmIChjb21iaW5lZEFib3J0U2lnbmFsLmFib3J0ZWQgfHwgIWZ1bGxPcHRpb25zLnNob3VsZFJldHJ5T25FcnJvciB8fCB0ZXJtaW5hdGVSZXRyeUVycm9ycy5oYXMoZXJyb3IgYXMgRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKCdyZXRyeVdpdGhUaW1lb3V0IGZhaWxlZCcsIHN0YWNrVHJhY2UsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpbnRFcnJvcihlcnJvcik7XG4gICAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3VjY2Vzcykge1xuICAgICAgICAgIHByaW50V2l0aFN0YWNrVHJhY2UocmV0cnlXaXRoVGltZW91dERlYnVnZ2VyLCBzdGFja1RyYWNlLCBgUmV0cnkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhZnRlciAke1N0cmluZyhhdHRlbXB0KX0gYXR0ZW1wdHNgLCB7XG4gICAgICAgICAgICBvcGVyYXRpb25GbjogcGFyYW1zLm9wZXJhdGlvbkZuLFxuICAgICAgICAgICAgb3BlcmF0aW9uTmFtZTogcGFyYW1zLm9wZXJhdGlvbk5hbWUgPz8gJydcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFdpdGhTdGFja1RyYWNlKFxuICAgICAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlcixcbiAgICAgICAgICBzdGFja1RyYWNlLFxuICAgICAgICAgIGBSZXRyeSBhdHRlbXB0ICR7U3RyaW5nKGF0dGVtcHQpfSBjb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkuIFRyeWluZyBhZ2FpbiBpbiAke1N0cmluZyhmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMpfSBtaWxsaXNlY29uZHNgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbkZuOiBwYXJhbXMub3BlcmF0aW9uRm4sXG4gICAgICAgICAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCBzbGVlcChmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMsIGFib3J0U2lnbmFsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnLFxuICAgIHN0YWNrVHJhY2UsXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgfSkpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgZnVuY3Rpb24gd2l0aCBhIHRpbWVvdXQuIElmIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBjb21wbGV0ZSB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lLCBpdCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgdGltZWQgb3V0LlxuICpcbiAqIElmIGBERUJVRz1vYnNpZGlhbi1kZXYtdXRpbHM6QXN5bmM6cnVuV2l0aFRpbWVvdXRgIGlzIHNldCwgdGhlIGV4ZWN1dGlvbiBpcyBub3QgdGVybWluYXRlZCBhZnRlciB0aGUgdGltZW91dCBhbmQgdGhlIGZ1bmN0aW9uIGlzIGFsbG93ZWQgdG8gcnVuIGluZGVmaW5pdGVseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFJlc3VsdCAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgZnJvbSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIG9yIHJlamVjdHMgaWYgaXQgdGltZXMgb3V0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aFRpbWVvdXQ8UmVzdWx0PihwYXJhbXM6IFJ1bldpdGhUaW1lb3V0UGFyYW1zPFJlc3VsdD4pOiBQcm9taXNlPFJlc3VsdD4ge1xuICBjb25zdCBzdGFja1RyYWNlID0gcGFyYW1zLnN0YWNrVHJhY2UgPz8gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgY29uc3QgcnVuQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCB0aW1lb3V0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGxldCByZXN1bHQ6IG51bGwgfCBSZXN1bHQgPSBudWxsO1xuICBsZXQgaGFzUmVzdWx0ID0gZmFsc2U7XG4gIGxldCBpc0NvbXBsZXRlZCA9IGZhbHNlO1xuICBjb25zdCBydW5XaXRoVGltZW91dERlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0Jyk7XG4gIGNvbnN0IG9uVGltZW91dCA9IHBhcmFtcy5vblRpbWVvdXQgPz8gZGVmYXVsdE9uVGltZW91dDtcblxuICBhd2FpdCBQcm9taXNlLnJhY2UoW3J1bigpLCBpbm5lclRpbWVvdXQoKV0pO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBJdCBtaWdodCBjaGFuZ2VkIGluc2lkZSBgcnVuKClgLiBFU0xpbnQgbWlzdGFrZW5seSBkb2VzIG5vdCByZWNvZ25pemUgaXQuXG4gIGlmIChoYXNSZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0IGFzIFJlc3VsdDtcbiAgfVxuXG4gIHRocm93IG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3IoJ1J1biB3aXRoIHRpbWVvdXQgZmFpbGVkJywgc3RhY2tUcmFjZSwgcnVuQWJvcnRDb250cm9sbGVyLnNpZ25hbC5yZWFzb24pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgcGFyYW1zLm9wZXJhdGlvbkZuKHJ1bkFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBNYXRoLnRydW5jKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lKTtcbiAgICAgIHByaW50V2l0aFN0YWNrVHJhY2UocnVuV2l0aFRpbWVvdXREZWJ1Z2dlciwgc3RhY2tUcmFjZSwgYEV4ZWN1dGlvbiB0aW1lOiAke1N0cmluZyhkdXJhdGlvbil9IG1pbGxpc2Vjb25kc2AsIHtcbiAgICAgICAgY29udGV4dDogcGFyYW1zLmNvbnRleHQsXG4gICAgICAgIG9wZXJhdGlvbkZuOiBwYXJhbXMub3BlcmF0aW9uRm4sXG4gICAgICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnXG4gICAgICB9KTtcbiAgICAgIGhhc1Jlc3VsdCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcnVuQWJvcnRDb250cm9sbGVyLmFib3J0KGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICB0aW1lb3V0QWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignQ29tcGxldGVkJykpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGlubmVyVGltZW91dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzbGVlcChwYXJhbXMudGltZW91dEluTWlsbGlzZWNvbmRzLCB0aW1lb3V0QWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG5cbiAgICBpZiAoaXNDb21wbGV0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZHVyYXRpb24gPSBNYXRoLnRydW5jKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lKTtcbiAgICBwcmludFdpdGhTdGFja1RyYWNlKHJ1bldpdGhUaW1lb3V0RGVidWdnZXIsIHN0YWNrVHJhY2UsIGBUaW1lZCBvdXQgYWZ0ZXIgJHtTdHJpbmcoZHVyYXRpb24pfSBtaWxsaXNlY29uZHNgLCB7XG4gICAgICBjb250ZXh0OiBwYXJhbXMuY29udGV4dCxcbiAgICAgIG9wZXJhdGlvbkZuOiBwYXJhbXMub3BlcmF0aW9uRm4sXG4gICAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJ1xuICAgIH0pO1xuXG4gICAgY29uc3QgdGltZW91dENvbnRleHQ6IFRpbWVvdXRDb250ZXh0ID0gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFRpbWVvdXRDb250ZXh0Pih7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIG9uT3BlcmF0aW9uQ29tcGxldGVkKGNhbGxiYWNrKSB7XG4gICAgICAgIHRpbWVvdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgY2FsbGJhY2spO1xuICAgICAgfSxcbiAgICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnLFxuICAgICAgdGVybWluYXRlT3BlcmF0aW9uKCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgVGltZWQgb3V0IGFmdGVyICR7U3RyaW5nKGR1cmF0aW9uKX0gbWlsbGlzZWNvbmRzYCk7XG4gICAgICAgIHJ1bkFib3J0Q29udHJvbGxlci5hYm9ydChlcnJvcik7XG4gICAgICAgIHRpbWVvdXRBYm9ydENvbnRyb2xsZXIuYWJvcnQoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgb25UaW1lb3V0KHRpbWVvdXRDb250ZXh0KTtcbiAgICBhd2FpdCB3YWl0Rm9yQWJvcnQodGltZW91dEFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmYXVsdE9uVGltZW91dChjdHg6IFRpbWVvdXRDb250ZXh0KTogdm9pZCB7XG4gICAgY3R4LnRlcm1pbmF0ZU9wZXJhdGlvbigpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCBzZXQgaW1tZWRpYXRlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgc2V0IGltbWVkaWF0ZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRJbW1lZGlhdGVBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsYXlzIGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gZGVsYXkgLSBUaGUgdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldFRpbWVvdXRBc3luYyhkZWxheT86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsYXlzIGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gbWlsbGlzZWNvbmRzIC0gVGhlIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAqIEBwYXJhbSBzaG91bGRUaHJvd09uQWJvcnQgLSBXaGV0aGVyIHRvIHRocm93IGFuIGVycm9yIGlmIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25kczogbnVtYmVyLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsLCBzaG91bGRUaHJvd09uQWJvcnQ/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHdhaXRGb3JBYm9ydChhYm9ydFNpZ25hbEFueShhYm9ydFNpZ25hbCwgYWJvcnRTaWduYWxUaW1lb3V0KG1pbGxpc2Vjb25kcykpKTtcbiAgaWYgKHNob3VsZFRocm93T25BYm9ydCkge1xuICAgIGFib3J0U2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlamVjdHMgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lb3V0IHBlcmlvZC5cbiAqXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIHRpbWVvdXQgcGVyaW9kIGluIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICogQHBhcmFtIHNob3VsZFRocm93T25BYm9ydCAtIFdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGFib3J0IHNpZ25hbCBpcyBhYm9ydGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBhbHdheXMgcmVqZWN0cyB3aXRoIGEgdGltZW91dCBlcnJvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQodGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwsIHNob3VsZFRocm93T25BYm9ydD86IGJvb2xlYW4pOiBQcm9taXNlPG5ldmVyPiB7XG4gIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcywgYWJvcnRTaWduYWwsIHNob3VsZFRocm93T25BYm9ydCk7XG4gIHRocm93IG5ldyBFcnJvcihgVGltZWQgb3V0IGluICR7U3RyaW5nKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyl9IG1pbGxpc2Vjb25kc2ApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBhbiBhcnJheSBieSBjb25zdW1pbmcgYWxsIGl0cyBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBwcm9kdWNlZCBieSB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICogQHBhcmFtIGl0ZXIgLSBUaGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9BcnJheTxUPihpdGVyOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8VD4pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBhcnI6IFRbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcikge1xuICAgIGFyci5wdXNoKGl0ZW0pO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsWUFBWTtBQUNyQixTQUFTLG1DQUFtQztBQUM1QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQTBDUCxlQUFzQixnQkFBZ0IsU0FBaUMsWUFBb0M7QUFDekcsaUJBQWUsY0FBYyxDQUFDO0FBQzlCLE1BQUk7QUFDRixVQUFNLFFBQVE7QUFBQSxFQUNoQixTQUFTLFlBQVk7QUFDbkIsVUFBTSxlQUFlLElBQUksc0JBQXNCLDZCQUE2QixZQUFZLFVBQVU7QUFDbEcsUUFBSSxrQkFBa0IsWUFBWSxHQUFHO0FBQ25DO0FBQUEsSUFDRjtBQUNBLHdCQUFvQixZQUFZO0FBQUEsRUFDbEM7QUFDRjtBQVVBLGVBQXNCLFlBQWUsS0FBVSxXQUF1RjtBQUNwSSxRQUFNLE1BQVcsQ0FBQztBQUVsQixRQUFNLFNBQVMsSUFBSTtBQUNuQixXQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsS0FBSztBQUMvQixRQUFJLENBQUMsT0FBTyxPQUFPLEtBQUssQ0FBQyxHQUFHO0FBQzFCO0FBQUEsSUFDRjtBQUVBLFVBQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsUUFBSSxNQUFNLFVBQVUsTUFBTSxHQUFHLEdBQUcsR0FBRztBQUNqQyxVQUFJLEtBQUssSUFBSTtBQUFBLElBQ2Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBVUEsZUFBc0IsbUJBQXNCLEtBQVUsV0FBd0Y7QUFDNUksUUFBTSxTQUFTLElBQUk7QUFDbkIsTUFBSSxhQUFhO0FBQ2pCLFdBQVMsWUFBWSxHQUFHLFlBQVksUUFBUSxhQUFhO0FBQ3ZELFFBQUksQ0FBQyxPQUFPLE9BQU8sS0FBSyxTQUFTLEdBQUc7QUFDbEM7QUFBQSxJQUNGO0FBRUEsVUFBTSxVQUFVLElBQUksU0FBUztBQUM3QixRQUFJLE1BQU0sVUFBVSxTQUFTLFdBQVcsR0FBRyxHQUFHO0FBRTVDLFVBQUksWUFBWSxJQUFJO0FBQUEsSUFDdEI7QUFBQSxFQUNGO0FBQ0EsTUFBSSxTQUFTO0FBQ2Y7QUFXQSxlQUFzQixhQUFtQixLQUFVLFVBQWtGO0FBQ25JLFVBQVEsTUFBTSxTQUFTLEtBQUssUUFBUSxHQUFHLEtBQUs7QUFDOUM7QUFXQSxlQUFzQixTQUFlLEtBQVUsVUFBZ0Y7QUFDN0gsU0FBTyxNQUFNLHVCQUF1QixJQUFJLElBQUksUUFBUSxDQUFDO0FBQ3ZEO0FBVU8sU0FBUyxtQkFBMkMsV0FBdUMsWUFBZ0Q7QUFDaEosaUJBQWUsY0FBYyxDQUFDO0FBQzlCLFNBQU8sSUFBSSxTQUFxQjtBQUM5QixzQkFBa0IsVUFBVTtBQUM1QixVQUFNLGtCQUFrQixjQUFjLENBQUM7QUFDdkMsaUJBQWEsR0FBRyxVQUFVO0FBQUE7QUFBQSxFQUE0QyxlQUFlO0FBQ3JGLHNCQUFrQixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsVUFBVTtBQUFBLEVBQ3hEO0FBQ0Y7QUFVTyxTQUFTLG1CQUFtRCxRQUEyRTtBQUM1SSxTQUFPLFVBQVUsU0FBZ0M7QUFDL0MsVUFBTSxRQUFRLFFBQVE7QUFDdEIsV0FBTyxPQUFPLEdBQUcsSUFBSTtBQUFBLEVBQ3ZCO0FBQ0Y7QUFRTyxTQUFTLGtCQUFrQixPQUF5QjtBQUN6RCxNQUFJLFFBQVE7QUFDWixTQUFPLEVBQUUsaUJBQWlCLGNBQWM7QUFDdEMsUUFBSSxFQUFFLGlCQUFpQixRQUFRO0FBQzdCLGFBQU87QUFBQSxJQUNUO0FBRUEsWUFBUSxNQUFNO0FBQUEsRUFDaEI7QUFFQSxpQkFBZSx5QkFBeUIsRUFBRSxLQUFLO0FBQy9DLFNBQU87QUFDVDtBQTJCQSxlQUFzQixZQUFlLFNBQXFCLGVBQXNDO0FBQzlGLFFBQU0sc0JBQXNCLGVBQWUsbUJBQW1CO0FBQzlELFFBQU0sYUFBYSxjQUFjLENBQUM7QUFDbEMsTUFBSTtBQUNGLFdBQU8sTUFBTTtBQUFBLEVBQ2YsU0FBUyxHQUFHO0FBQ1Ysd0JBQW9CLGlCQUFpQixJQUFJLHNCQUFzQixpQkFBaUIsWUFBWSxDQUFDLENBQUM7QUFDOUYsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQVFPLFNBQVMsa0JBQWtCLFNBQW9DLFlBQTJCO0FBQy9GLGlCQUFlLGNBQWMsQ0FBQztBQUU5QixNQUFJO0FBQ0osTUFBSTtBQUNGLGFBQVMsUUFBUTtBQUFBLEVBQ25CLFNBQVMsT0FBTztBQUVkLFNBQUssZ0JBQWdCLE1BQU0sUUFBUSxPQUFPLEtBQUssR0FBRyxVQUFVO0FBQUEsRUFDOUQ7QUFDQSxNQUFJLGtCQUFrQixTQUFTO0FBRTdCLFNBQUssZ0JBQWdCLE1BQU0sUUFBUSxVQUFVO0FBQUEsRUFDL0M7QUFDRjtBQVVPLFNBQVMsNEJBQ2QsU0FDQSxzQkFBc0IsR0FDdEIsWUFDQSxhQUNNO0FBQ04sa0JBQWdCLGlCQUFpQjtBQUNqQyxjQUFZLGVBQWU7QUFDM0IsaUJBQWUsY0FBYyxDQUFDO0FBQzlCLG9CQUFrQixZQUFZO0FBQzVCLFVBQU0sTUFBTSxxQkFBcUIsYUFBYSxJQUFJO0FBQ2xELFVBQU0sUUFBUSxXQUFXO0FBQUEsRUFDM0IsR0FBRyxVQUFVO0FBQ2Y7QUFTQSxlQUFzQiwrQkFBa0MsVUFBaUQ7QUFDdkcsUUFBTSxVQUFlLENBQUM7QUFDdEIsYUFBVyxXQUFXLFVBQVU7QUFDOUIsWUFBUSxLQUFLLE1BQU0sUUFBUSxDQUFDO0FBQUEsRUFDOUI7QUFDQSxTQUFPO0FBQ1Q7QUFTQSxlQUFzQix1QkFBMEIsVUFBeUM7QUFDdkYsU0FBTyxNQUFNLCtCQUErQixTQUFTLElBQUksQ0FBQyxZQUFZLE1BQU0sT0FBTyxDQUFDO0FBQ3RGO0FBRUEsTUFBTSx1QkFBdUIsb0JBQUksUUFBZTtBQTRHekMsU0FBUyxzQkFBc0IsT0FBb0I7QUFDeEQsdUJBQXFCLElBQUksS0FBSztBQUNoQztBQU9BLGVBQXNCLFlBQTRCO0FBQ2hELFFBQU0sSUFBSSxRQUFRLE1BQU07QUFDdEIsU0FBSztBQUFBLEVBQ1AsQ0FBQztBQUVELFNBQU8sT0FBTyxxQkFBcUI7QUFFckM7QUFPQSxlQUFzQixnQkFBK0I7QUFDbkQsU0FBTyxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzlCLFlBQVEsU0FBUyxNQUFNO0FBQ3JCLGNBQVE7QUFBQSxJQUNWLENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDtBQU9BLGVBQXNCLHNCQUFxQztBQUN6RCxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsbUJBQWUsTUFBTTtBQUNuQixjQUFRO0FBQUEsSUFDVixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFPQSxlQUFzQiw2QkFBNEM7QUFDaEUsU0FBTyxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzlCLFdBQU8sc0JBQXNCLE1BQU07QUFDakMsY0FBUTtBQUFBLElBQ1YsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBUUEsZUFBc0IsaUJBQWlCLFFBQStDO0FBQ3BGLFFBQU0sMkJBQTJCLGVBQWUsd0JBQXdCO0FBQ3hFLFFBQU0sYUFBYSxPQUFPLGNBQWMsY0FBYyxDQUFDO0FBQ3ZELFFBQU0sd0JBQXdCO0FBQUE7QUFBQSxJQUU1QiwwQkFBMEI7QUFBQSxJQUMxQixvQkFBb0I7QUFBQTtBQUFBLElBRXBCLHVCQUF1QjtBQUFBLEVBQ3pCO0FBQ0EsUUFBTSxjQUFjLEVBQUUsR0FBRyx1QkFBdUIsR0FBRyxPQUFPLGFBQWE7QUFDdkUsY0FBWSxhQUFhLGVBQWU7QUFFeEMsUUFBTSxlQUFlLDRCQUF3RDtBQUFBLElBQzNFLFNBQVMsRUFBRSxlQUFlLE9BQU8saUJBQWlCLElBQUksU0FBUyxPQUFPLFlBQVk7QUFBQSxJQUNsRixXQUFXLE9BQU87QUFBQSxJQUNsQixNQUFNLFlBQVksYUFBeUM7QUFDekQsWUFBTSxzQkFBc0IsZUFBZSxZQUFZLGFBQWEsV0FBVztBQUMvRSwwQkFBb0IsZUFBZTtBQUNuQyxVQUFJLFVBQVU7QUFDZCxhQUFPLENBQUMsb0JBQW9CLFNBQVM7QUFDbkM7QUFDQSxZQUFJO0FBQ0osWUFBSTtBQUNGLHNCQUFZLE1BQU0sT0FBTyxZQUFZLG1CQUFtQjtBQUFBLFFBQzFELFNBQVMsT0FBTztBQUVkLGNBQUksb0JBQW9CLFdBQVcsQ0FBQyxZQUFZLHNCQUFzQixxQkFBcUIsSUFBSSxLQUFjLEdBQUc7QUFDOUcsa0JBQU0sSUFBSSxzQkFBc0IsMkJBQTJCLFlBQVksS0FBSztBQUFBLFVBQzlFO0FBQ0EscUJBQVcsS0FBSztBQUNoQixzQkFBWTtBQUFBLFFBQ2Q7QUFDQSxZQUFJLFdBQVc7QUFDYiw4QkFBb0IsMEJBQTBCLFlBQVksc0NBQXNDLE9BQU8sT0FBTyxDQUFDLGFBQWE7QUFBQSxZQUMxSCxhQUFhLE9BQU87QUFBQSxZQUNwQixlQUFlLE9BQU8saUJBQWlCO0FBQUEsVUFDekMsQ0FBQztBQUNEO0FBQUEsUUFDRjtBQUVBO0FBQUEsVUFDRTtBQUFBLFVBQ0E7QUFBQSxVQUNBLGlCQUFpQixPQUFPLE9BQU8sQ0FBQyw4Q0FBOEMsT0FBTyxZQUFZLHdCQUF3QixDQUFDO0FBQUEsVUFDMUg7QUFBQSxZQUNFLGFBQWEsT0FBTztBQUFBLFlBQ3BCLGVBQWUsT0FBTyxpQkFBaUI7QUFBQSxVQUN6QztBQUFBLFFBQ0Y7QUFFQSxjQUFNLE1BQU0sWUFBWSwwQkFBMEIsV0FBVztBQUFBLE1BQy9EO0FBQUEsSUFDRjtBQUFBLElBQ0EsZUFBZSxPQUFPLGlCQUFpQjtBQUFBLElBQ3ZDO0FBQUEsSUFDQSx1QkFBdUIsWUFBWTtBQUFBLEVBQ3JDLENBQUMsQ0FBQztBQUNKO0FBV0EsZUFBc0IsZUFBdUIsUUFBdUQ7QUFDbEcsUUFBTSxhQUFhLE9BQU8sY0FBYyxjQUFjLENBQUM7QUFDdkQsUUFBTSxZQUFZLFlBQVksSUFBSTtBQUVsQyxRQUFNLHFCQUFxQixJQUFJLGdCQUFnQjtBQUMvQyxRQUFNLHlCQUF5QixJQUFJLGdCQUFnQjtBQUVuRCxNQUFJLFNBQXdCO0FBQzVCLE1BQUksWUFBWTtBQUNoQixNQUFJLGNBQWM7QUFDbEIsUUFBTSx5QkFBeUIsZUFBZSxzQkFBc0I7QUFDcEUsUUFBTSxZQUFZLE9BQU8sYUFBYTtBQUV0QyxRQUFNLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsQ0FBQztBQUUxQyxNQUFJLFdBQVc7QUFDYixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sSUFBSSxzQkFBc0IsMkJBQTJCLFlBQVksbUJBQW1CLE9BQU8sTUFBTTtBQUV2RyxpQkFBZSxNQUFxQjtBQUNsQyxRQUFJO0FBQ0YsZUFBUyxNQUFNLE9BQU8sWUFBWSxtQkFBbUIsTUFBTTtBQUMzRCxZQUFNLFdBQVcsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLFNBQVM7QUFDekQsMEJBQW9CLHdCQUF3QixZQUFZLG1CQUFtQixPQUFPLFFBQVEsQ0FBQyxpQkFBaUI7QUFBQSxRQUMxRyxTQUFTLE9BQU87QUFBQSxRQUNoQixhQUFhLE9BQU87QUFBQSxRQUNwQixlQUFlLE9BQU8saUJBQWlCO0FBQUEsTUFDekMsQ0FBQztBQUNELGtCQUFZO0FBQUEsSUFDZCxTQUFTLEdBQUc7QUFDVix5QkFBbUIsTUFBTSxDQUFDO0FBQUEsSUFDNUIsVUFBRTtBQUNBLG9CQUFjO0FBQ2QsNkJBQXVCLE1BQU0sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUFBLElBQ3JEO0FBQUEsRUFDRjtBQUVBLGlCQUFlLGVBQThCO0FBQzNDLFVBQU0sTUFBTSxPQUFPLHVCQUF1Qix1QkFBdUIsTUFBTTtBQUV2RSxRQUFJLGFBQWE7QUFDZjtBQUFBLElBQ0Y7QUFDQSxVQUFNLFdBQVcsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLFNBQVM7QUFDekQsd0JBQW9CLHdCQUF3QixZQUFZLG1CQUFtQixPQUFPLFFBQVEsQ0FBQyxpQkFBaUI7QUFBQSxNQUMxRyxTQUFTLE9BQU87QUFBQSxNQUNoQixhQUFhLE9BQU87QUFBQSxNQUNwQixlQUFlLE9BQU8saUJBQWlCO0FBQUEsSUFDekMsQ0FBQztBQUVELFVBQU0saUJBQWlDLDRCQUE0QztBQUFBLE1BQ2pGO0FBQUEsTUFDQSxxQkFBcUIsVUFBVTtBQUM3QiwrQkFBdUIsT0FBTyxpQkFBaUIsU0FBUyxRQUFRO0FBQUEsTUFDbEU7QUFBQSxNQUNBLGVBQWUsT0FBTyxpQkFBaUI7QUFBQSxNQUN2QyxxQkFBcUI7QUFDbkIsY0FBTSxRQUFRLElBQUksTUFBTSxtQkFBbUIsT0FBTyxRQUFRLENBQUMsZUFBZTtBQUMxRSwyQkFBbUIsTUFBTSxLQUFLO0FBQzlCLCtCQUF1QixNQUFNLEtBQUs7QUFBQSxNQUNwQztBQUFBLElBQ0YsQ0FBQztBQUVELGNBQVUsY0FBYztBQUN4QixVQUFNLGFBQWEsdUJBQXVCLE1BQU07QUFBQSxFQUNsRDtBQUVBLFdBQVMsaUJBQWlCLEtBQTJCO0FBQ25ELFFBQUksbUJBQW1CO0FBQUEsRUFDekI7QUFDRjtBQU9BLGVBQXNCLG9CQUFtQztBQUN2RCxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsaUJBQWEsTUFBTTtBQUNqQixjQUFRO0FBQUEsSUFDVixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFRQSxlQUFzQixnQkFBZ0IsT0FBK0I7QUFDbkUsUUFBTSxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzdCLFdBQU8sV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUNsQyxDQUFDO0FBQ0g7QUFVQSxlQUFzQixNQUFNLGNBQXNCLGFBQTJCLG9CQUE2QztBQUN4SCxRQUFNLGFBQWEsZUFBZSxhQUFhLG1CQUFtQixZQUFZLENBQUMsQ0FBQztBQUNoRixNQUFJLG9CQUFvQjtBQUN0QixpQkFBYSxlQUFlO0FBQUEsRUFDOUI7QUFDRjtBQVVBLGVBQXNCLFFBQVEsdUJBQStCLGFBQTJCLG9CQUE4QztBQUNwSSxRQUFNLE1BQU0sdUJBQXVCLGFBQWEsa0JBQWtCO0FBQ2xFLFFBQU0sSUFBSSxNQUFNLGdCQUFnQixPQUFPLHFCQUFxQixDQUFDLGVBQWU7QUFDOUU7QUFTQSxlQUFzQixRQUFXLE1BQThDO0FBQzdFLFFBQU0sTUFBVyxDQUFDO0FBQ2xCLG1CQUFpQixRQUFRLE1BQU07QUFDN0IsUUFBSSxLQUFLLElBQUk7QUFBQSxFQUNmO0FBQ0EsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
370
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgR2VuZXJpY0FzeW5jRnVuY3Rpb24sXG4gIEdlbmVyaWNGdW5jdGlvbixcbiAgR2VuZXJpY1ZvaWRGdW5jdGlvblxufSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcblxuaW1wb3J0IHtcbiAgYWJvcnRTaWduYWxBbnksXG4gIGFib3J0U2lnbmFsTmV2ZXIsXG4gIGFib3J0U2lnbmFsVGltZW91dCxcbiAgd2FpdEZvckFib3J0XG59IGZyb20gJy4vYWJvcnQtY29udHJvbGxlci50cyc7XG5pbXBvcnQge1xuICBnZXRMaWJEZWJ1Z2dlcixcbiAgcHJpbnRXaXRoU3RhY2tUcmFjZVxufSBmcm9tICcuL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIEFTWU5DX1dSQVBQRVJfRVJST1JfTUVTU0FHRSxcbiAgQ3VzdG9tU3RhY2tUcmFjZUVycm9yLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBwcmludEVycm9yLFxuICBTaWxlbnRFcnJvclxufSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7XG4gIG5vb3AsXG4gIG5vb3BBc3luY1xufSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgYXNzZXJ0Tm9uTnVsbGFibGVcbn0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogQSB0eXBlIHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgYSB7QGxpbmsgUHJvbWlzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBQcm9taXNlUmVzb2x2ZTxUPiA9IHVuZGVmaW5lZCBleHRlbmRzIFQgPyAodmFsdWU/OiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWRcbiAgOiAodmFsdWU6IFByb21pc2VMaWtlPFQ+IHwgVCkgPT4gdm9pZDtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmV0cnlXaXRoVGltZW91dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogQSBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy5cbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXRyeSB0aGUgZnVuY3Rpb24gb24gZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXRyeU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZ2l2aW5nIHVwIG9uIHJldHJ5aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZXJyb3IgaGFuZGxlciB0byBhIHtAbGluayBQcm9taXNlfSB0aGF0IGNhdGNoZXMgYW55IGVycm9ycyBhbmQgZW1pdHMgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGFkZCBhbiBlcnJvciBoYW5kbGVyIHRvLlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBlbWl0cyBhc3luYyBlcnJvciBldmVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcihhc3luY0ZuOiAoKSA9PiBQcm9taXNlPHVua25vd24+LCBzdGFja1RyYWNlPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHN0YWNrVHJhY2UgPz89IGdldFN0YWNrVHJhY2UoMSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYXN5bmNGbigpO1xuICB9IGNhdGNoIChhc3luY0Vycm9yKSB7XG4gICAgY29uc3Qgd3JhcHBlZEVycm9yID0gbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcihBU1lOQ19XUkFQUEVSX0VSUk9SX01FU1NBR0UsIHN0YWNrVHJhY2UsIGFzeW5jRXJyb3IpO1xuICAgIGlmIChoYW5kbGVTaWxlbnRFcnJvcih3cmFwcGVkRXJyb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVtaXRBc3luY0Vycm9yRXZlbnQod3JhcHBlZEVycm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmlsdGVyPFQ+KGFycjogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IGFuczogVFtdID0gW107XG5cbiAgY29uc3QgbGVuZ3RoID0gYXJyLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihhcnIsIGkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtID0gYXJyW2ldIGFzIFQ7XG4gICAgaWYgKGF3YWl0IHByZWRpY2F0ZShpdGVtLCBpLCBhcnIpKSB7XG4gICAgICBhbnMucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYW5zO1xufVxuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHkgaW4gcGxhY2UsIGtlZXBpbmcgb25seSB0aGUgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXJyYXkgaXMgZmlsdGVyZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0ZpbHRlckluUGxhY2U8VD4oYXJyOiBUW10sIHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPGJvb2xlYW4+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGxlbmd0aCA9IGFyci5sZW5ndGg7XG4gIGxldCB3cml0ZUluZGV4ID0gMDtcbiAgZm9yIChsZXQgcmVhZEluZGV4ID0gMDsgcmVhZEluZGV4IDwgbGVuZ3RoOyByZWFkSW5kZXgrKykge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihhcnIsIHJlYWRJbmRleCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnQgPSBhcnJbcmVhZEluZGV4XSBhcyBUO1xuICAgIGlmIChhd2FpdCBwcmVkaWNhdGUoY3VycmVudCwgcmVhZEluZGV4LCBhcnIpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBZZXMsIGl0IGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLCBidXQgSSBkb24ndCBhbiBlbGVnYW50IHdheSB0byBmaXggaXQuXG4gICAgICBhcnJbd3JpdGVJbmRleCsrXSA9IGN1cnJlbnQ7XG4gICAgfVxuICB9XG4gIGFyci5sZW5ndGggPSB3cml0ZUluZGV4O1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCwgYW5kIHRoZW4gZmxhdHRlbnMgdGhlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBhcnJheS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFyciAtIFRoZSBhcnJheSB0byBtYXAgb3ZlciBhbmQgZmxhdHRlbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYSBmbGF0dGVuZWQgYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFVbXT4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gKGF3YWl0IGFzeW5jTWFwKGFyciwgY2FsbGJhY2spKS5mbGF0KCk7XG59XG5cbi8qKlxuICogTWFwcyBvdmVyIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY01hcDxULCBVPihhcnI6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVPik6IFByb21pc2U8VVtdPiB7XG4gIHJldHVybiBhd2FpdCBwcm9taXNlQWxsU2VxdWVudGlhbGx5KGFyci5tYXAoY2FsbGJhY2spKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYSBzeW5jaHJvbm91cyBvbmUgYnkgYXV0b21hdGljYWxseSBoYW5kbGluZyB0aGUgUHJvbWlzZSByZWplY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMuXG4gKiBAcGFyYW0gYXN5bmNGdW5jIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGEgc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydEFzeW5jVG9TeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGFzeW5jRnVuYzogR2VuZXJpY0FzeW5jRnVuY3Rpb248QXJncz4sIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiBHZW5lcmljVm9pZEZ1bmN0aW9uPEFyZ3M+IHtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgcmV0dXJuICguLi5hcmdzOiBBcmdzKTogdm9pZCA9PiB7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUoc3RhY2tUcmFjZSk7XG4gICAgY29uc3QgaW5uZXJTdGFja1RyYWNlID0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgICBzdGFja1RyYWNlID0gYCR7c3RhY2tUcmFjZX1cXG4gICAgYXQgLS0tIGNvbnZlcnRBc3luY1RvU3luYyAtLS0gKDApXFxuJHtpbm5lclN0YWNrVHJhY2V9YDtcbiAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBhc3luY0Z1bmMoLi4uYXJncyksIHN0YWNrVHJhY2UpO1xuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYW4gYXN5bmNocm9ub3VzIG9uZSBieSB3cmFwcGluZyBpdCBpbiBhIHtAbGluayBQcm9taXNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyB0aGUgZnVuY3Rpb24gYWNjZXB0cy5cbiAqIEB0eXBlUGFyYW0gUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlLlxuICogQHBhcmFtIHN5bmNGbiAtIFRoZSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHdyYXBzIHRoZSBzeW5jaHJvbm91cyBmdW5jdGlvbiBpbiBhbiBhc3luY2hyb25vdXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFN5bmNUb0FzeW5jPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sIFJlc3VsdD4oc3luY0ZuOiBHZW5lcmljRnVuY3Rpb248QXJncywgUmVzdWx0Pik6IEdlbmVyaWNBc3luY0Z1bmN0aW9uPEFyZ3MsIFJlc3VsdD4ge1xuICByZXR1cm4gYXN5bmMgKC4uLmFyZ3M6IEFyZ3MpOiBQcm9taXNlPFJlc3VsdD4gPT4ge1xuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICAgIHJldHVybiBzeW5jRm4oLi4uYXJncyk7XG4gIH07XG59XG5cbi8qKlxuICogSGFuZGxlcyBhIHNpbGVudCBlcnJvci5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gaGFuZGxlLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZXJyb3IgaXMgYSBzaWxlbnQgZXJyb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVTaWxlbnRFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBsZXQgY2F1c2UgPSBlcnJvcjtcbiAgd2hpbGUgKCEoY2F1c2UgaW5zdGFuY2VvZiBTaWxlbnRFcnJvcikpIHtcbiAgICBpZiAoIShjYXVzZSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNhdXNlID0gY2F1c2UuY2F1c2U7XG4gIH1cblxuICBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6aGFuZGxlU2lsZW50RXJyb3InKShlcnJvcik7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIElnbm9yZXMgYW4gZXJyb3IgdGhhdCBpcyB0aHJvd24gYnkgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBwcm9taXNlIC0gVGhlIHByb21pc2UgdG8gaWdub3JlIHRoZSBlcnJvciBvZi5cbiAqIEBwYXJhbSBmYWxsYmFja1ZhbHVlIC0gQWx3YXlzIGB1bmRlZmluZWRgLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gY29tcGxldGVzIG9yIGZhaWxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3IocHJvbWlzZTogUHJvbWlzZTx1bmtub3duPiwgZmFsbGJhY2tWYWx1ZT86IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD47XG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZTogVCk6IFByb21pc2U8VD47XG4vKipcbiAqIElnbm9yZXMgYW4gZXJyb3IgdGhhdCBpcyB0aHJvd24gYnkgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZT86IFQpOiBQcm9taXNlPFQgfCB2b2lkPiB7XG4gIGNvbnN0IGlnbm9yZUVycm9yRGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6aWdub3JlRXJyb3InKTtcbiAgY29uc3Qgc3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoMSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHByb21pc2U7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZ25vcmVFcnJvckRlYnVnZ2VyKCdJZ25vcmVkIGVycm9yJywgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcignSWdub3JlZCBlcnJvcicsIHN0YWNrVHJhY2UsIGUpKTtcbiAgICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEludm9rZXMgYSB7QGxpbmsgUHJvbWlzZX0gYW5kIHNhZmVseSBoYW5kbGVzIGFueSBlcnJvcnMgYnkgY2F0Y2hpbmcgdGhlbSBhbmQgZW1pdHRpbmcgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRm4gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGludm9rZSBzYWZlbHkuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIFRoZSBzdGFjayB0cmFjZSBvZiB0aGUgc291cmNlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlQXN5bmNTYWZlbHkoYXN5bmNGbjogKCkgPT4gUHJvbWlzYWJsZTx1bmtub3duPiwgc3RhY2tUcmFjZT86IHN0cmluZyk6IHZvaWQge1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuXG4gIGxldCByZXN1bHQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcmVzdWx0ID0gYXN5bmNGbigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkLCBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9ycyAtLSBXZSBuZWVkIHRvIGZpcmUtYW5kLWZvcmdldC4gUmUtcmVqZWN0aW5nIHRoZSBvcmlnaW5hbCBjYXVnaHQgZXJyb3IgYXMtaXMuXG4gICAgdm9pZCBhZGRFcnJvckhhbmRsZXIoKCkgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpLCBzdGFja1RyYWNlKTtcbiAgfVxuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkIC0tIFdlIG5lZWQgdG8gZmlyZS1hbmQtZm9yZ2V0LlxuICAgIHZvaWQgYWRkRXJyb3JIYW5kbGVyKCgpID0+IHJlc3VsdCwgc3RhY2tUcmFjZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZva2VzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBhZnRlciBhIGRlbGF5LlxuICpcbiAqIEBwYXJhbSBhc3luY0ZuIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0gZGVsYXlJbk1pbGxpc2Vjb25kcyAtIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIFRoZSBzdGFjayB0cmFjZSBvZiB0aGUgc291cmNlIGZ1bmN0aW9uLlxuICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VBc3luY1NhZmVseUFmdGVyRGVsYXkoXG4gIGFzeW5jRm46IChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpID0+IFByb21pc2FibGU8dm9pZD4sXG4gIGRlbGF5SW5NaWxsaXNlY29uZHMgPSAwLFxuICBzdGFja1RyYWNlPzogc3RyaW5nLFxuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4pOiB2b2lkIHtcbiAgYWJvcnRTaWduYWwgPz89IGFib3J0U2lnbmFsTmV2ZXIoKTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHNsZWVwKGRlbGF5SW5NaWxsaXNlY29uZHMsIGFib3J0U2lnbmFsLCB0cnVlKTtcbiAgICBhd2FpdCBhc3luY0ZuKGFib3J0U2lnbmFsKTtcbiAgfSwgc3RhY2tUcmFjZSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYXN5bmMgZnVuY3Rpb25zIHNlcXVlbnRpYWxseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gYXN5bmNGbnMgLSBUaGUgYXN5bmMgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgc2VxdWVudGlhbGx5LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHRoZSByZXN1bHRzIG9mIHRoZSBhc3luYyBmdW5jdGlvbnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9taXNlQWxsQXN5bmNGbnNTZXF1ZW50aWFsbHk8VD4oYXN5bmNGbnM6ICgoKSA9PiBQcm9taXNhYmxlPFQ+KVtdKTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgcmVzdWx0czogVFtdID0gW107XG4gIGZvciAoY29uc3QgYXN5bmNGbiBvZiBhc3luY0Zucykge1xuICAgIHJlc3VsdHMucHVzaChhd2FpdCBhc3luY0ZuKCkpO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHByb21pc2VzIHNlcXVlbnRpYWxseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gcHJvbWlzZXMgLSBUaGUgcHJvbWlzZXMgdG8gZXhlY3V0ZSBzZXF1ZW50aWFsbHkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIHByb21pc2VzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvbWlzZUFsbFNlcXVlbnRpYWxseTxUPihwcm9taXNlczogUHJvbWlzYWJsZTxUPltdKTogUHJvbWlzZTxUW10+IHtcbiAgcmV0dXJuIGF3YWl0IHByb21pc2VBbGxBc3luY0Zuc1NlcXVlbnRpYWxseShwcm9taXNlcy5tYXAoKHByb21pc2UpID0+ICgpID0+IHByb21pc2UpKTtcbn1cblxuY29uc3QgdGVybWluYXRlUmV0cnlFcnJvcnMgPSBuZXcgV2Vha1NldDxFcnJvcj4oKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmV0cnlXaXRoVGltZW91dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlXaXRoVGltZW91dFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSB0aW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSB0aW1lb3V0IGNvbnRleHQuXG4gICAqL1xuICBvblRpbWVvdXQ/KHRoaXM6IHZvaWQsIGNvbnRleHQ6IFRpbWVvdXRDb250ZXh0KTogdm9pZDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gICAqXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIG9wZXJhdGlvbkZuKHRoaXM6IHZvaWQsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2FibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmV0cnkgb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5T3B0aW9ucz86IFJldHJ5T3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBydW5XaXRoVGltZW91dH0uXG4gKlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBvcGVyYXRpb24gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuV2l0aFRpbWVvdXRQYXJhbXM8UmVzdWx0PiB7XG4gIC8qKlxuICAgKiBUaGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgdGltZW91dC5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgdGltZW91dCBjb250ZXh0LlxuICAgKi9cbiAgb25UaW1lb3V0Pyh0aGlzOiB2b2lkLCBjb250ZXh0OiBUaW1lb3V0Q29udGV4dCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpb24gZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAgICpcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgb3BlcmF0aW9uRm4odGhpczogdm9pZCwgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzYWJsZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29udGV4dCBwcm92aWRlZCB0byB0aGUgdGltZW91dCBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIG9wZXJhdGlvbiBzdGFydGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb246IG51bWJlcjtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy5cbiAgICovXG4gIG9uT3BlcmF0aW9uQ29tcGxldGVkKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZDtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25OYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUZXJtaW5hdGVzIHRoZSBvcGVyYXRpb24gdGhhdCB0aW1lZCBvdXQuXG4gICAqL1xuICB0ZXJtaW5hdGVPcGVyYXRpb24oKTogdm9pZDtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5KGVycm9yOiBFcnJvcik6IHZvaWQge1xuICB0ZXJtaW5hdGVSZXRyeUVycm9ycy5hZGQoZXJyb3IpO1xufVxuXG4vKipcbiAqIEFuIGFzeW5jIGZ1bmN0aW9uIHRoYXQgbmV2ZXIgZW5kcy5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IG5ldmVyIHJlc29sdmVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmV2ZXJFbmRzKCk6IFByb21pc2U8bmV2ZXI+IHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKCkgPT4ge1xuICAgIG5vb3AoKTtcbiAgfSk7XG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGhhdXN0aXZlIHN3aXRjaCBndWFyZDsgdGhlIGF3YWl0IGFib3ZlIG5ldmVyIHJlc29sdmVzLiAqL1xuICBhc3NlcnQoZmFsc2UsICdTaG91bGQgbmV2ZXIgaGFwcGVuJyk7XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCB0aWNrLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgdGljayBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuZXh0VGlja0FzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCBxdWV1ZSBtaWNyb3Rhc2suXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbmV4dCBxdWV1ZSBtaWNyb3Rhc2sgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcXVldWVNaWNyb3Rhc2tBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuZXh0IHJlcXVlc3QgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgcmVxdWVzdCBhbmltYXRpb24gZnJhbWUgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWVzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB1bnRpbCBpdCByZXR1cm5zIGB0cnVlYCBvciB0aGUgdGltZW91dCBpcyByZWFjaGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCBvciByZWplY3RzIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5V2l0aFRpbWVvdXQocGFyYW1zOiBSZXRyeVdpdGhUaW1lb3V0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdBc3luYzpyZXRyeVdpdGhUaW1lb3V0Jyk7XG4gIGNvbnN0IHN0YWNrVHJhY2UgPSBwYXJhbXMuc3RhY2tUcmFjZSA/PyBnZXRTdGFja1RyYWNlKDEpO1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICByZXRyeURlbGF5SW5NaWxsaXNlY29uZHM6IDEwMCxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IGZhbHNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzIC0tIEV4dHJhY3RpbmcgbWFnaWMgbnVtYmVyIGFzIGEgY29uc3RhbnQgd291bGQgYmUgcmVwZXRpdGl2ZSwgYXMgdGhlIHZhbHVlIGlzIHVzZWQgb25seSBvbmNlIGFuZCBpdHMgbmFtZSB3b3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgcHJvcGVydHkuXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnBhcmFtcy5yZXRyeU9wdGlvbnMgfTtcbiAgZnVsbE9wdGlvbnMuYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgYXdhaXQgcnVuV2l0aFRpbWVvdXQobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFJ1bldpdGhUaW1lb3V0UGFyYW1zPHZvaWQ+Pih7XG4gICAgY29udGV4dDogeyBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJywgcmV0cnlGbjogcGFyYW1zLm9wZXJhdGlvbkZuIH0sXG4gICAgb25UaW1lb3V0OiBwYXJhbXMub25UaW1lb3V0LFxuICAgIGFzeW5jIG9wZXJhdGlvbkZuKGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgY29tYmluZWRBYm9ydFNpZ25hbCA9IGFib3J0U2lnbmFsQW55KGZ1bGxPcHRpb25zLmFib3J0U2lnbmFsLCBhYm9ydFNpZ25hbCk7XG4gICAgICBjb21iaW5lZEFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgICB3aGlsZSAoIWNvbWJpbmVkQWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGxldCBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaXNTdWNjZXNzID0gYXdhaXQgcGFyYW1zLm9wZXJhdGlvbkZuKGNvbWJpbmVkQWJvcnRTaWduYWwpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IG1pZ2h0IGNoYW5nZWQgaW5zaWRlIGBmbigpYC4gRVNMaW50IG1pc3Rha2VubHkgZG9lcyBub3QgcmVjb2duaXplIGl0LlxuICAgICAgICAgIGlmIChjb21iaW5lZEFib3J0U2lnbmFsLmFib3J0ZWQgfHwgIWZ1bGxPcHRpb25zLnNob3VsZFJldHJ5T25FcnJvciB8fCB0ZXJtaW5hdGVSZXRyeUVycm9ycy5oYXMoZXJyb3IgYXMgRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKCdyZXRyeVdpdGhUaW1lb3V0IGZhaWxlZCcsIHN0YWNrVHJhY2UsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpbnRFcnJvcihlcnJvcik7XG4gICAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3VjY2Vzcykge1xuICAgICAgICAgIHByaW50V2l0aFN0YWNrVHJhY2UocmV0cnlXaXRoVGltZW91dERlYnVnZ2VyLCBzdGFja1RyYWNlLCBgUmV0cnkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhZnRlciAke1N0cmluZyhhdHRlbXB0KX0gYXR0ZW1wdHNgLCB7XG4gICAgICAgICAgICBvcGVyYXRpb25GbjogcGFyYW1zLm9wZXJhdGlvbkZuLFxuICAgICAgICAgICAgb3BlcmF0aW9uTmFtZTogcGFyYW1zLm9wZXJhdGlvbk5hbWUgPz8gJydcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFdpdGhTdGFja1RyYWNlKFxuICAgICAgICAgIHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlcixcbiAgICAgICAgICBzdGFja1RyYWNlLFxuICAgICAgICAgIGBSZXRyeSBhdHRlbXB0ICR7U3RyaW5nKGF0dGVtcHQpfSBjb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkuIFRyeWluZyBhZ2FpbiBpbiAke1N0cmluZyhmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMpfSBtaWxsaXNlY29uZHNgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbkZuOiBwYXJhbXMub3BlcmF0aW9uRm4sXG4gICAgICAgICAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCBzbGVlcChmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMsIGFib3J0U2lnbmFsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnLFxuICAgIHN0YWNrVHJhY2UsXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgfSkpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgZnVuY3Rpb24gd2l0aCBhIHRpbWVvdXQuIElmIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBjb21wbGV0ZSB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lLCBpdCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgdGltZWQgb3V0LlxuICpcbiAqIElmIGBERUJVRz1vYnNpZGlhbi1kZXYtdXRpbHM6QXN5bmM6cnVuV2l0aFRpbWVvdXRgIGlzIHNldCwgdGhlIGV4ZWN1dGlvbiBpcyBub3QgdGVybWluYXRlZCBhZnRlciB0aGUgdGltZW91dCBhbmQgdGhlIGZ1bmN0aW9uIGlzIGFsbG93ZWQgdG8gcnVuIGluZGVmaW5pdGVseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFJlc3VsdCAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgZnJvbSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIG9yIHJlamVjdHMgaWYgaXQgdGltZXMgb3V0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aFRpbWVvdXQ8UmVzdWx0PihwYXJhbXM6IFJ1bldpdGhUaW1lb3V0UGFyYW1zPFJlc3VsdD4pOiBQcm9taXNlPFJlc3VsdD4ge1xuICBjb25zdCBzdGFja1RyYWNlID0gcGFyYW1zLnN0YWNrVHJhY2UgPz8gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgY29uc3QgcnVuQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCB0aW1lb3V0QWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGxldCByZXN1bHQ6IG51bGwgfCBSZXN1bHQgPSBudWxsO1xuICBsZXQgaGFzUmVzdWx0ID0gZmFsc2U7XG4gIGxldCBpc0NvbXBsZXRlZCA9IGZhbHNlO1xuICBjb25zdCBydW5XaXRoVGltZW91dERlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0Jyk7XG4gIGNvbnN0IG9uVGltZW91dCA9IHBhcmFtcy5vblRpbWVvdXQgPz8gZGVmYXVsdE9uVGltZW91dDtcblxuICBhd2FpdCBQcm9taXNlLnJhY2UoW3J1bigpLCBpbm5lclRpbWVvdXQoKV0pO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBJdCBtaWdodCBjaGFuZ2VkIGluc2lkZSBgcnVuKClgLiBFU0xpbnQgbWlzdGFrZW5seSBkb2VzIG5vdCByZWNvZ25pemUgaXQuXG4gIGlmIChoYXNSZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0IGFzIFJlc3VsdDtcbiAgfVxuXG4gIHRocm93IG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3IoJ1J1biB3aXRoIHRpbWVvdXQgZmFpbGVkJywgc3RhY2tUcmFjZSwgcnVuQWJvcnRDb250cm9sbGVyLnNpZ25hbC5yZWFzb24pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgcGFyYW1zLm9wZXJhdGlvbkZuKHJ1bkFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBNYXRoLnRydW5jKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lKTtcbiAgICAgIHByaW50V2l0aFN0YWNrVHJhY2UocnVuV2l0aFRpbWVvdXREZWJ1Z2dlciwgc3RhY2tUcmFjZSwgYEV4ZWN1dGlvbiB0aW1lOiAke1N0cmluZyhkdXJhdGlvbil9IG1pbGxpc2Vjb25kc2AsIHtcbiAgICAgICAgY29udGV4dDogcGFyYW1zLmNvbnRleHQsXG4gICAgICAgIG9wZXJhdGlvbkZuOiBwYXJhbXMub3BlcmF0aW9uRm4sXG4gICAgICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnXG4gICAgICB9KTtcbiAgICAgIGhhc1Jlc3VsdCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcnVuQWJvcnRDb250cm9sbGVyLmFib3J0KGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICB0aW1lb3V0QWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignQ29tcGxldGVkJykpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGlubmVyVGltZW91dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzbGVlcChwYXJhbXMudGltZW91dEluTWlsbGlzZWNvbmRzLCB0aW1lb3V0QWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG5cbiAgICBpZiAoaXNDb21wbGV0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZHVyYXRpb24gPSBNYXRoLnRydW5jKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lKTtcbiAgICBwcmludFdpdGhTdGFja1RyYWNlKHJ1bldpdGhUaW1lb3V0RGVidWdnZXIsIHN0YWNrVHJhY2UsIGBUaW1lZCBvdXQgYWZ0ZXIgJHtTdHJpbmcoZHVyYXRpb24pfSBtaWxsaXNlY29uZHNgLCB7XG4gICAgICBjb250ZXh0OiBwYXJhbXMuY29udGV4dCxcbiAgICAgIG9wZXJhdGlvbkZuOiBwYXJhbXMub3BlcmF0aW9uRm4sXG4gICAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJ1xuICAgIH0pO1xuXG4gICAgY29uc3QgdGltZW91dENvbnRleHQ6IFRpbWVvdXRDb250ZXh0ID0gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFRpbWVvdXRDb250ZXh0Pih7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIG9uT3BlcmF0aW9uQ29tcGxldGVkKGNhbGxiYWNrKSB7XG4gICAgICAgIHRpbWVvdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgY2FsbGJhY2spO1xuICAgICAgfSxcbiAgICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnLFxuICAgICAgdGVybWluYXRlT3BlcmF0aW9uKCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgVGltZWQgb3V0IGFmdGVyICR7U3RyaW5nKGR1cmF0aW9uKX0gbWlsbGlzZWNvbmRzYCk7XG4gICAgICAgIHJ1bkFib3J0Q29udHJvbGxlci5hYm9ydChlcnJvcik7XG4gICAgICAgIHRpbWVvdXRBYm9ydENvbnRyb2xsZXIuYWJvcnQoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgb25UaW1lb3V0KHRpbWVvdXRDb250ZXh0KTtcbiAgICBhd2FpdCB3YWl0Rm9yQWJvcnQodGltZW91dEFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmYXVsdE9uVGltZW91dChjdHg6IFRpbWVvdXRDb250ZXh0KTogdm9pZCB7XG4gICAgY3R4LnRlcm1pbmF0ZU9wZXJhdGlvbigpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCBzZXQgaW1tZWRpYXRlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgc2V0IGltbWVkaWF0ZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRJbW1lZGlhdGVBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsYXlzIGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gZGVsYXkgLSBUaGUgdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldFRpbWVvdXRBc3luYyhkZWxheT86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsYXlzIGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gbWlsbGlzZWNvbmRzIC0gVGhlIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAqIEBwYXJhbSBzaG91bGRUaHJvd09uQWJvcnQgLSBXaGV0aGVyIHRvIHRocm93IGFuIGVycm9yIGlmIHRoZSBhYm9ydCBzaWduYWwgaXMgYWJvcnRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25kczogbnVtYmVyLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsLCBzaG91bGRUaHJvd09uQWJvcnQ/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHdhaXRGb3JBYm9ydChhYm9ydFNpZ25hbEFueShhYm9ydFNpZ25hbCwgYWJvcnRTaWduYWxUaW1lb3V0KG1pbGxpc2Vjb25kcykpKTtcbiAgaWYgKHNob3VsZFRocm93T25BYm9ydCkge1xuICAgIGFib3J0U2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlamVjdHMgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lb3V0IHBlcmlvZC5cbiAqXG4gKiBAcGFyYW0gdGltZW91dEluTWlsbGlzZWNvbmRzIC0gVGhlIHRpbWVvdXQgcGVyaW9kIGluIG1pbGxpc2Vjb25kcy5cbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICogQHBhcmFtIHNob3VsZFRocm93T25BYm9ydCAtIFdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGFib3J0IHNpZ25hbCBpcyBhYm9ydGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBhbHdheXMgcmVqZWN0cyB3aXRoIGEgdGltZW91dCBlcnJvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQodGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXIsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwsIHNob3VsZFRocm93T25BYm9ydD86IGJvb2xlYW4pOiBQcm9taXNlPG5ldmVyPiB7XG4gIGF3YWl0IHNsZWVwKHRpbWVvdXRJbk1pbGxpc2Vjb25kcywgYWJvcnRTaWduYWwsIHNob3VsZFRocm93T25BYm9ydCk7XG4gIHRocm93IG5ldyBFcnJvcihgVGltZWQgb3V0IGluICR7U3RyaW5nKHRpbWVvdXRJbk1pbGxpc2Vjb25kcyl9IG1pbGxpc2Vjb25kc2ApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBhbiBhcnJheSBieSBjb25zdW1pbmcgYWxsIGl0cyBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBwcm9kdWNlZCBieSB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICogQHBhcmFtIGl0ZXIgLSBUaGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgQXN5bmNJdGVyYWJsZUl0ZXJhdG9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9BcnJheTxUPihpdGVyOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8VD4pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCBhcnI6IFRbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcikge1xuICAgIGFyci5wdXNoKGl0ZW0pO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxtQ0FBbUM7QUFDNUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUEwQ1AsZUFBc0IsZ0JBQWdCLFNBQWlDLFlBQW9DO0FBQ3pHLGlCQUFlLGNBQWMsQ0FBQztBQUM5QixNQUFJO0FBQ0YsVUFBTSxRQUFRO0FBQUEsRUFDaEIsU0FBUyxZQUFZO0FBQ25CLFVBQU0s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
@@ -23,9 +23,8 @@ if you want to view the source, please visit the github repository of this plugi
23
23
 
24
24
  import { AsyncEvents } from "./async-events.mjs";
25
25
  import { ensureNonNullable } from "./type-guards.mjs";
26
- const ASYNC_ERROR_EVENT = "asyncError";
27
- const asyncErrorEventEmitter = new AsyncEvents();
28
- asyncErrorEventEmitter.on(ASYNC_ERROR_EVENT, handleAsyncError);
26
+ const errorAsyncEvents = new AsyncEvents();
27
+ errorAsyncEvents.on("asyncError", handleAsyncError);
29
28
  const ASYNC_WRAPPER_ERROR_MESSAGE = "An unhandled error occurred executing async operation";
30
29
  const STACK_TRACE_PREFIX = " at";
31
30
  class CustomStackTraceError extends Error {
@@ -72,7 +71,7 @@ class SilentError extends Error {
72
71
  }
73
72
  }
74
73
  function emitAsyncErrorEvent(asyncError) {
75
- asyncErrorEventEmitter.trigger(ASYNC_ERROR_EVENT, asyncError);
74
+ errorAsyncEvents.trigger("asyncError", asyncError);
76
75
  }
77
76
  function errorToString(error) {
78
77
  if (!(error instanceof Error)) {
@@ -105,9 +104,9 @@ function printError(error, console) {
105
104
  console.error(errorToString(error));
106
105
  }
107
106
  function registerAsyncErrorEventHandler(handler) {
108
- const eventRef = asyncErrorEventEmitter.on(ASYNC_ERROR_EVENT, handler);
107
+ const eventRef = errorAsyncEvents.on("asyncError", handler);
109
108
  return () => {
110
- asyncErrorEventEmitter.offref(eventRef);
109
+ errorAsyncEvents.offref(eventRef);
111
110
  };
112
111
  }
113
112
  function throwExpression(error) {
@@ -130,4 +129,4 @@ export {
130
129
  registerAsyncErrorEventHandler,
131
130
  throwExpression
132
131
  };
133
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVycm9yIGhhbmRsaW5nLlxuICovXG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuY29uc3QgQVNZTkNfRVJST1JfRVZFTlQgPSAnYXN5bmNFcnJvcic7XG5cbmNvbnN0IGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIgPSBuZXcgQXN5bmNFdmVudHMoKTtcbmFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub24oQVNZTkNfRVJST1JfRVZFTlQsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG4vKipcbiAqIEEgbWVzc2FnZSBvZiB0aGUgQXN5bmNXcmFwcGVyRXJyb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBBU1lOQ19XUkFQUEVSX0VSUk9SX01FU1NBR0UgPSAnQW4gdW5oYW5kbGVkIGVycm9yIG9jY3VycmVkIGV4ZWN1dGluZyBhc3luYyBvcGVyYXRpb24nO1xuXG5jb25zdCBTVEFDS19UUkFDRV9QUkVGSVggPSAnICAgIGF0JztcblxuLyoqXG4gKiBBbiBlcnJvciB0aGF0IHdyYXBzIGFuIGVycm9yIHdpdGggYSBjdXN0b20gc3RhY2sgdHJhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21TdGFja1RyYWNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSBzdGFja1RyYWNlIC0gVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBlcnJvci5cbiAgICogQHBhcmFtIGNhdXNlIC0gVGhlIGNhdXNlIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YWNrVHJhY2U6IHN0cmluZywgY2F1c2U6IHVua25vd24pIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdDdXN0b21TdGFja1RyYWNlRXJyb3InO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gYD8uYCBpcyB1c2VkIHRvIHN1cHBvcnQgaU9TIGJlZm9yZSAxNy4yLlxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlPy4odGhpcywgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKTtcblxuICAgIGxldCByb290Q2F1c2UgPSBjYXVzZTtcbiAgICBjb25zdCBwYXJlbnRDYXVzZXMgPSBuZXcgU2V0PEN1c3RvbVN0YWNrVHJhY2VFcnJvcj4oKTtcbiAgICB3aGlsZSAocm9vdENhdXNlIGluc3RhbmNlb2YgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKSB7XG4gICAgICBpZiAocGFyZW50Q2F1c2VzLmhhcyhyb290Q2F1c2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2lyY3VsYXIgY2F1c2UgZGV0ZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudENhdXNlcy5hZGQocm9vdENhdXNlKTtcbiAgICAgIHJvb3RDYXVzZSA9IHJvb3RDYXVzZS5jYXVzZTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbFN0YWNrTGluZXMgPSBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLnN0YWNrKS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3Qgc3RhY2tMaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IEVSUk9SX0hFQURFUl9SRUdfRVhQID0gL15cXHcqRXJyb3IoPzo6IHwkKS87XG4gICAgaWYgKEVSUk9SX0hFQURFUl9SRUdfRVhQLnRlc3QoZW5zdXJlTm9uTnVsbGFibGUoc3RhY2tMaW5lc1swXSkpKSB7XG4gICAgICBzdGFja0xpbmVzLnNwbGljZSgwLCAxKTtcbiAgICB9XG4gICAgb3JpZ2luYWxTdGFja0xpbmVzLnNwbGljZSgxLCBvcmlnaW5hbFN0YWNrTGluZXMubGVuZ3RoIC0gMSwgLi4uc3RhY2tMaW5lcyk7XG4gICAgdGhpcy5zdGFjayA9IG9yaWdpbmFsU3RhY2tMaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGVycm9yIHRoYXQgaXMgbm90IHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaWxlbnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgU2lsZW50RXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdTaWxlbnRFcnJvcic7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBgPy5gIGlzIHVzZWQgdG8gc3VwcG9ydCBpT1MgYmVmb3JlIDE3LjIuXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/Lih0aGlzLCBTaWxlbnRFcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBFbWl0cyBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRXJyb3IgLSBUaGUgZXJyb3IgdG8gZW1pdCBhcyBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgYXN5bmNFcnJvckV2ZW50RW1pdHRlci50cmlnZ2VyKEFTWU5DX0VSUk9SX0VWRU5ULCBhc3luY0Vycm9yKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBlcnJvciB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiwgaW5jbHVkaW5nIG5lc3RlZCBjYXVzZXMgd2l0aCBpbmRlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gY29udmVydCB0byBhIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JUb1N0cmluZyhlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgcmV0dXJuIFN0cmluZyhlcnJvcik7XG4gIH1cblxuICBsZXQgbWVzc2FnZSA9IGVycm9yLnN0YWNrID8/IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgaWYgKGVycm9yLmNhdXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjYXVzZVN0ckxpbmVzID0gZXJyb3JUb1N0cmluZyhlcnJvci5jYXVzZSkuc3BsaXQoJ1xcbicpO1xuICAgIG1lc3NhZ2UgKz0gYFxcbiR7Z2VuZXJhdGVTdGFja1RyYWNlTGluZSgnQ2F1c2VkIGJ5OicpfWA7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGNhdXNlU3RyTGluZXMpIHtcbiAgICAgIGlmICghbGluZS50cmltKCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBtZXNzYWdlICs9IGxpbmUuc3RhcnRzV2l0aChTVEFDS19UUkFDRV9QUkVGSVgpXG4gICAgICAgID8gYFxcbiR7bGluZX1gXG4gICAgICAgIDogYFxcbiR7Z2VuZXJhdGVTdGFja1RyYWNlTGluZShsaW5lKX1gO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWVzc2FnZTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlIGFzIGEgc3RyaW5nLCBleGNsdWRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbC5cbiAqXG4gKiBAcGFyYW0gZnJhbWVzVG9Ta2lwIC0gVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzdGFjayB0cmFjZSwgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFja1RyYWNlKGZyYW1lc1RvU2tpcCA9IDApOiBzdHJpbmcge1xuICAvLyBTa2lwcGluZyBFcnJvciBwcmVmaXggYW5kIGBnZXRTdGFja1RyYWNlYCBmdW5jdGlvbiBjYWxsXG4gIGNvbnN0IEFERElUSU9OQUxfRlJBTUVTX1RPX1NLSVAgPSAyO1xuICBjb25zdCBzdGFjayA9IGVuc3VyZU5vbk51bGxhYmxlKG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgY29uc3QgbGluZXMgPSBzdGFjay5zcGxpdCgnXFxuJyk7XG4gIHJldHVybiBsaW5lcy5zbGljZShmcmFtZXNUb1NraXAgKyBBRERJVElPTkFMX0ZSQU1FU19UT19TS0lQKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBQcmludHMgYW4gZXJyb3IgdG8gdGhlIGNvbnNvbGUsIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzIGFuZCBvcHRpb25hbCBBTlNJIHNlcXVlbmNlIGNsZWFyaW5nLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBwcmludC5cbiAqIEBwYXJhbSBjb25zb2xlIC0gVGhlIGNvbnNvbGUgdG8gcHJpbnQgdG8gKGRlZmF1bHQ6IGBnbG9iYWxUaGlzLmNvbnNvbGVgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50RXJyb3IoZXJyb3I6IHVua25vd24sIGNvbnNvbGU/OiBDb25zb2xlKTogdm9pZCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbm1kL25vLWdsb2JhbC10aGlzIC0tIEFjdGl2ZWx5IHVzZSBnbG9iYWxUaGlzLlxuICBjb25zb2xlID8/PSBnbG9iYWxUaGlzLmNvbnNvbGU7XG4gIGNvbnNvbGUuZXJyb3IoZXJyb3JUb1N0cmluZyhlcnJvcikpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBoYW5kbGVyIGZvciBhc3luY2hyb25vdXMgZXJyb3JzLlxuICpcbiAqIEBwYXJhbSBoYW5kbGVyIC0gVGhlIGhhbmRsZXIgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50IG9jY3Vycy5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdG8gdW5yZWdpc3RlciB0aGUgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXN5bmNFcnJvckV2ZW50SGFuZGxlcihoYW5kbGVyOiAoYXN5bmNFcnJvcjogdW5rbm93bikgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICBjb25zdCBldmVudFJlZiA9IGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub24oQVNZTkNfRVJST1JfRVZFTlQsIGhhbmRsZXIpO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGFzeW5jRXJyb3JFdmVudEVtaXR0ZXIub2ZmcmVmKGV2ZW50UmVmKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYW4gZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIHRocm93LlxuICogQHRocm93c1xuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dFeHByZXNzaW9uKGVycm9yOiB1bmtub3duKTogbmV2ZXIge1xuICB0aHJvdyBlcnJvcjtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTdGFja1RyYWNlTGluZSh0aXRsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1NUQUNLX1RSQUNFX1BSRUZJWH0gLS0tICR7dGl0bGV9IC0tLSAoMClgO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYXN5bmNocm9ub3VzIGVycm9ycyBieSBwcmludGluZyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGFzeW5jaHJvbm91cyBlcnJvciB0byBoYW5kbGUuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUFzeW5jRXJyb3IoYXN5bmNFcnJvcjogdW5rbm93bik6IHZvaWQge1xuICBwcmludEVycm9yKGFzeW5jRXJyb3IpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLHlCQUF5QjtBQUVsQyxNQUFNLG9CQUFvQjtBQUUxQixNQUFNLHlCQUF5QixJQUFJLFlBQVk7QUFDL0MsdUJBQXVCLEdBQUcsbUJBQW1CLGdCQUFnQjtBQUt0RCxNQUFNLDhCQUE4QjtBQUUzQyxNQUFNLHFCQUFxQjtBQUtwQixNQUFNLDhCQUE4QixNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVF4QyxZQUFZLFNBQWlCLFlBQW9CLE9BQWdCO0FBQ3RFLFVBQU0sU0FBUyxFQUFFLE1BQU0sQ0FBQztBQUN4QixTQUFLLE9BQU87QUFHWixVQUFNLG9CQUFvQixNQUFNLHFCQUFxQjtBQUVyRCxRQUFJLFlBQVk7QUFDaEIsVUFBTSxlQUFlLG9CQUFJLElBQTJCO0FBQ3BELFdBQU8scUJBQXFCLHVCQUF1QjtBQUNqRCxVQUFJLGFBQWEsSUFBSSxTQUFTLEdBQUc7QUFDL0IsY0FBTSxJQUFJLE1BQU0seUJBQXlCO0FBQUEsTUFDM0M7QUFDQSxtQkFBYSxJQUFJLFNBQVM7QUFDMUIsa0JBQVksVUFBVTtBQUFBLElBQ3hCO0FBRUEsVUFBTSxxQkFBcUIsa0JBQWtCLEtBQUssS0FBSyxFQUFFLE1BQU0sSUFBSTtBQUNuRSxVQUFNLGFBQWEsV0FBVyxNQUFNLElBQUk7QUFDeEMsVUFBTSx1QkFBdUI7QUFDN0IsUUFBSSxxQkFBcUIsS0FBSyxrQkFBa0IsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHO0FBQy9ELGlCQUFXLE9BQU8sR0FBRyxDQUFDO0FBQUEsSUFDeEI7QUFDQSx1QkFBbUIsT0FBTyxHQUFHLG1CQUFtQixTQUFTLEdBQUcsR0FBRyxVQUFVO0FBQ3pFLFNBQUssUUFBUSxtQkFBbUIsS0FBSyxJQUFJO0FBQUEsRUFDM0M7QUFDRjtBQUtPLE1BQU0sb0JBQW9CLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNOUIsWUFBWSxTQUFpQjtBQUNsQyxVQUFNLE9BQU87QUFDYixTQUFLLE9BQU87QUFHWixVQUFNLG9CQUFvQixNQUFNLFdBQVc7QUFBQSxFQUM3QztBQUNGO0FBT08sU0FBUyxvQkFBb0IsWUFBMkI7QUFDN0QseUJBQXVCLFFBQVEsbUJBQW1CLFVBQVU7QUFDOUQ7QUFRTyxTQUFTLGNBQWMsT0FBd0I7QUFDcEQsTUFBSSxFQUFFLGlCQUFpQixRQUFRO0FBQzdCLFdBQU8sT0FBTyxLQUFLO0FBQUEsRUFDckI7QUFFQSxNQUFJLFVBQVUsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLEtBQUssTUFBTSxPQUFPO0FBQzVELE1BQUksTUFBTSxVQUFVLFFBQVc7QUFDN0IsVUFBTSxnQkFBZ0IsY0FBYyxNQUFNLEtBQUssRUFBRSxNQUFNLElBQUk7QUFDM0QsZUFBVztBQUFBLEVBQUssdUJBQXVCLFlBQVksQ0FBQztBQUNwRCxlQUFXLFFBQVEsZUFBZTtBQUNoQyxVQUFJLENBQUMsS0FBSyxLQUFLLEdBQUc7QUFDaEI7QUFBQSxNQUNGO0FBQ0EsaUJBQVcsS0FBSyxXQUFXLGtCQUFrQixJQUN6QztBQUFBLEVBQUssSUFBSSxLQUNUO0FBQUEsRUFBSyx1QkFBdUIsSUFBSSxDQUFDO0FBQUEsSUFDdkM7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBUU8sU0FBUyxjQUFjLGVBQWUsR0FBVztBQUV0RCxRQUFNLDRCQUE0QjtBQUNsQyxRQUFNLFFBQVEsa0JBQWtCLElBQUksTUFBTSxFQUFFLEtBQUs7QUFDakQsUUFBTSxRQUFRLE1BQU0sTUFBTSxJQUFJO0FBQzlCLFNBQU8sTUFBTSxNQUFNLGVBQWUseUJBQXlCLEVBQUUsS0FBSyxJQUFJO0FBQ3hFO0FBUU8sU0FBUyxXQUFXLE9BQWdCLFNBQXlCO0FBRWxFLGNBQVksV0FBVztBQUN2QixVQUFRLE1BQU0sY0FBYyxLQUFLLENBQUM7QUFDcEM7QUFRTyxTQUFTLCtCQUErQixTQUFvRDtBQUNqRyxRQUFNLFdBQVcsdUJBQXVCLEdBQUcsbUJBQW1CLE9BQU87QUFDckUsU0FBTyxNQUFNO0FBQ1gsMkJBQXVCLE9BQU8sUUFBUTtBQUFBLEVBQ3hDO0FBQ0Y7QUFRTyxTQUFTLGdCQUFnQixPQUF1QjtBQUNyRCxRQUFNO0FBQ1I7QUFFQSxTQUFTLHVCQUF1QixPQUF1QjtBQUNyRCxTQUFPLEdBQUcsa0JBQWtCLFFBQVEsS0FBSztBQUMzQztBQU9BLFNBQVMsaUJBQWlCLFlBQTJCO0FBQ25ELGFBQVcsVUFBVTtBQUN2QjsiLAogICJuYW1lcyI6IFtdCn0K
132
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVycm9yIGhhbmRsaW5nLlxuICovXG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuaW50ZXJmYWNlIEVycm9yQXN5bmNFdmVudE1hcCB7XG4gIGFzeW5jRXJyb3I6IFtlcnJvcjogdW5rbm93bl07XG59XG5cbmNvbnN0IGVycm9yQXN5bmNFdmVudHMgPSBuZXcgQXN5bmNFdmVudHM8RXJyb3JBc3luY0V2ZW50TWFwPigpO1xuZXJyb3JBc3luY0V2ZW50cy5vbignYXN5bmNFcnJvcicsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG4vKipcbiAqIEEgbWVzc2FnZSBvZiB0aGUgQXN5bmNXcmFwcGVyRXJyb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBBU1lOQ19XUkFQUEVSX0VSUk9SX01FU1NBR0UgPSAnQW4gdW5oYW5kbGVkIGVycm9yIG9jY3VycmVkIGV4ZWN1dGluZyBhc3luYyBvcGVyYXRpb24nO1xuXG5jb25zdCBTVEFDS19UUkFDRV9QUkVGSVggPSAnICAgIGF0JztcblxuLyoqXG4gKiBBbiBlcnJvciB0aGF0IHdyYXBzIGFuIGVycm9yIHdpdGggYSBjdXN0b20gc3RhY2sgdHJhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21TdGFja1RyYWNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gICAqIEBwYXJhbSBzdGFja1RyYWNlIC0gVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBlcnJvci5cbiAgICogQHBhcmFtIGNhdXNlIC0gVGhlIGNhdXNlIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YWNrVHJhY2U6IHN0cmluZywgY2F1c2U6IHVua25vd24pIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdDdXN0b21TdGFja1RyYWNlRXJyb3InO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gYD8uYCBpcyB1c2VkIHRvIHN1cHBvcnQgaU9TIGJlZm9yZSAxNy4yLlxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlPy4odGhpcywgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKTtcblxuICAgIGxldCByb290Q2F1c2UgPSBjYXVzZTtcbiAgICBjb25zdCBwYXJlbnRDYXVzZXMgPSBuZXcgU2V0PEN1c3RvbVN0YWNrVHJhY2VFcnJvcj4oKTtcbiAgICB3aGlsZSAocm9vdENhdXNlIGluc3RhbmNlb2YgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKSB7XG4gICAgICBpZiAocGFyZW50Q2F1c2VzLmhhcyhyb290Q2F1c2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2lyY3VsYXIgY2F1c2UgZGV0ZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudENhdXNlcy5hZGQocm9vdENhdXNlKTtcbiAgICAgIHJvb3RDYXVzZSA9IHJvb3RDYXVzZS5jYXVzZTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbFN0YWNrTGluZXMgPSBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLnN0YWNrKS5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3Qgc3RhY2tMaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IEVSUk9SX0hFQURFUl9SRUdfRVhQID0gL15cXHcqRXJyb3IoPzo6IHwkKS87XG4gICAgaWYgKEVSUk9SX0hFQURFUl9SRUdfRVhQLnRlc3QoZW5zdXJlTm9uTnVsbGFibGUoc3RhY2tMaW5lc1swXSkpKSB7XG4gICAgICBzdGFja0xpbmVzLnNwbGljZSgwLCAxKTtcbiAgICB9XG4gICAgb3JpZ2luYWxTdGFja0xpbmVzLnNwbGljZSgxLCBvcmlnaW5hbFN0YWNrTGluZXMubGVuZ3RoIC0gMSwgLi4uc3RhY2tMaW5lcyk7XG4gICAgdGhpcy5zdGFjayA9IG9yaWdpbmFsU3RhY2tMaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGVycm9yIHRoYXQgaXMgbm90IHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaWxlbnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgU2lsZW50RXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdTaWxlbnRFcnJvcic7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBgPy5gIGlzIHVzZWQgdG8gc3VwcG9ydCBpT1MgYmVmb3JlIDE3LjIuXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/Lih0aGlzLCBTaWxlbnRFcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBFbWl0cyBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRXJyb3IgLSBUaGUgZXJyb3IgdG8gZW1pdCBhcyBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgZXJyb3JBc3luY0V2ZW50cy50cmlnZ2VyKCdhc3luY0Vycm9yJywgYXN5bmNFcnJvcik7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gZXJyb3IgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGluY2x1ZGluZyBuZXN0ZWQgY2F1c2VzIHdpdGggaW5kZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yVG9TdHJpbmcoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgIHJldHVybiBTdHJpbmcoZXJyb3IpO1xuICB9XG5cbiAgbGV0IG1lc3NhZ2UgPSBlcnJvci5zdGFjayA/PyBgJHtlcnJvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWA7XG4gIGlmIChlcnJvci5jYXVzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY2F1c2VTdHJMaW5lcyA9IGVycm9yVG9TdHJpbmcoZXJyb3IuY2F1c2UpLnNwbGl0KCdcXG4nKTtcbiAgICBtZXNzYWdlICs9IGBcXG4ke2dlbmVyYXRlU3RhY2tUcmFjZUxpbmUoJ0NhdXNlZCBieTonKX1gO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBjYXVzZVN0ckxpbmVzKSB7XG4gICAgICBpZiAoIWxpbmUudHJpbSgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbWVzc2FnZSArPSBsaW5lLnN0YXJ0c1dpdGgoU1RBQ0tfVFJBQ0VfUFJFRklYKVxuICAgICAgICA/IGBcXG4ke2xpbmV9YFxuICAgICAgICA6IGBcXG4ke2dlbmVyYXRlU3RhY2tUcmFjZUxpbmUobGluZSl9YDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY3VycmVudCBzdGFjayB0cmFjZSBhcyBhIHN0cmluZywgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwuXG4gKlxuICogQHBhcmFtIGZyYW1lc1RvU2tpcCAtIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIHNraXAgaW4gdGhlIHN0YWNrIHRyYWNlLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UsIGV4Y2x1ZGluZyB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhY2tUcmFjZShmcmFtZXNUb1NraXAgPSAwKTogc3RyaW5nIHtcbiAgLy8gU2tpcHBpbmcgRXJyb3IgcHJlZml4IGFuZCBgZ2V0U3RhY2tUcmFjZWAgZnVuY3Rpb24gY2FsbFxuICBjb25zdCBBRERJVElPTkFMX0ZSQU1FU19UT19TS0lQID0gMjtcbiAgY29uc3Qgc3RhY2sgPSBlbnN1cmVOb25OdWxsYWJsZShuZXcgRXJyb3IoKS5zdGFjayk7XG4gIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpO1xuICByZXR1cm4gbGluZXMuc2xpY2UoZnJhbWVzVG9Ta2lwICsgQURESVRJT05BTF9GUkFNRVNfVE9fU0tJUCkuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogUHJpbnRzIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyBhbmQgb3B0aW9uYWwgQU5TSSBzZXF1ZW5jZSBjbGVhcmluZy5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gcHJpbnQuXG4gKiBAcGFyYW0gY29uc29sZSAtIFRoZSBjb25zb2xlIHRvIHByaW50IHRvIChkZWZhdWx0OiBgZ2xvYmFsVGhpcy5jb25zb2xlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEVycm9yKGVycm9yOiB1bmtub3duLCBjb25zb2xlPzogQ29uc29sZSk6IHZvaWQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1nbG9iYWwtdGhpcyAtLSBBY3RpdmVseSB1c2UgZ2xvYmFsVGhpcy5cbiAgY29uc29sZSA/Pz0gZ2xvYmFsVGhpcy5jb25zb2xlO1xuICBjb25zb2xlLmVycm9yKGVycm9yVG9TdHJpbmcoZXJyb3IpKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgaGFuZGxlciBmb3IgYXN5bmNocm9ub3VzIGVycm9ycy5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlciAtIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGFuIGFzeW5jaHJvbm91cyBlcnJvciBldmVudCBvY2N1cnMuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRvIHVucmVnaXN0ZXIgdGhlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckFzeW5jRXJyb3JFdmVudEhhbmRsZXIoaGFuZGxlcjogKGFzeW5jRXJyb3I6IHVua25vd24pID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgY29uc3QgZXZlbnRSZWYgPSBlcnJvckFzeW5jRXZlbnRzLm9uKCdhc3luY0Vycm9yJywgaGFuZGxlcik7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgZXJyb3JBc3luY0V2ZW50cy5vZmZyZWYoZXZlbnRSZWYpO1xuICB9O1xufVxuXG4vKipcbiAqIFRocm93cyBhbiBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gdGhyb3cuXG4gKiBAdGhyb3dzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0V4cHJlc3Npb24oZXJyb3I6IHVua25vd24pOiBuZXZlciB7XG4gIHRocm93IGVycm9yO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0YWNrVHJhY2VMaW5lKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7U1RBQ0tfVFJBQ0VfUFJFRklYfSAtLS0gJHt0aXRsZX0gLS0tICgwKWA7XG59XG5cbi8qKlxuICogSGFuZGxlcyBhc3luY2hyb25vdXMgZXJyb3JzIGJ5IHByaW50aW5nIHRoZW0uXG4gKlxuICogQHBhcmFtIGFzeW5jRXJyb3IgLSBUaGUgYXN5bmNocm9ub3VzIGVycm9yIHRvIGhhbmRsZS5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQXN5bmNFcnJvcihhc3luY0Vycm9yOiB1bmtub3duKTogdm9pZCB7XG4gIHByaW50RXJyb3IoYXN5bmNFcnJvcik7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMseUJBQXlCO0FBTWxDLE1BQU0sbUJBQW1CLElBQUksWUFBZ0M7QUFDN0QsaUJBQWlCLEdBQUcsY0FBYyxnQkFBZ0I7QUFLM0MsTUFBTSw4QkFBOEI7QUFFM0MsTUFBTSxxQkFBcUI7QUFLcEIsTUFBTSw4QkFBOEIsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFReEMsWUFBWSxTQUFpQixZQUFvQixPQUFnQjtBQUN0RSxVQUFNLFNBQVMsRUFBRSxNQUFNLENBQUM7QUFDeEIsU0FBSyxPQUFPO0FBR1osVUFBTSxvQkFBb0IsTUFBTSxxQkFBcUI7QUFFckQsUUFBSSxZQUFZO0FBQ2hCLFVBQU0sZUFBZSxvQkFBSSxJQUEyQjtBQUNwRCxXQUFPLHFCQUFxQix1QkFBdUI7QUFDakQsVUFBSSxhQUFhLElBQUksU0FBUyxHQUFHO0FBQy9CLGNBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBLE1BQzNDO0FBQ0EsbUJBQWEsSUFBSSxTQUFTO0FBQzFCLGtCQUFZLFVBQVU7QUFBQSxJQUN4QjtBQUVBLFVBQU0scUJBQXFCLGtCQUFrQixLQUFLLEtBQUssRUFBRSxNQUFNLElBQUk7QUFDbkUsVUFBTSxhQUFhLFdBQVcsTUFBTSxJQUFJO0FBQ3hDLFVBQU0sdUJBQXVCO0FBQzdCLFFBQUkscUJBQXFCLEtBQUssa0JBQWtCLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRztBQUMvRCxpQkFBVyxPQUFPLEdBQUcsQ0FBQztBQUFBLElBQ3hCO0FBQ0EsdUJBQW1CLE9BQU8sR0FBRyxtQkFBbUIsU0FBUyxHQUFHLEdBQUcsVUFBVTtBQUN6RSxTQUFLLFFBQVEsbUJBQW1CLEtBQUssSUFBSTtBQUFBLEVBQzNDO0FBQ0Y7QUFLTyxNQUFNLG9CQUFvQixNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTTlCLFlBQVksU0FBaUI7QUFDbEMsVUFBTSxPQUFPO0FBQ2IsU0FBSyxPQUFPO0FBR1osVUFBTSxvQkFBb0IsTUFBTSxXQUFXO0FBQUEsRUFDN0M7QUFDRjtBQU9PLFNBQVMsb0JBQW9CLFlBQTJCO0FBQzdELG1CQUFpQixRQUFRLGNBQWMsVUFBVTtBQUNuRDtBQVFPLFNBQVMsY0FBYyxPQUF3QjtBQUNwRCxNQUFJLEVBQUUsaUJBQWlCLFFBQVE7QUFDN0IsV0FBTyxPQUFPLEtBQUs7QUFBQSxFQUNyQjtBQUVBLE1BQUksVUFBVSxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksS0FBSyxNQUFNLE9BQU87QUFDNUQsTUFBSSxNQUFNLFVBQVUsUUFBVztBQUM3QixVQUFNLGdCQUFnQixjQUFjLE1BQU0sS0FBSyxFQUFFLE1BQU0sSUFBSTtBQUMzRCxlQUFXO0FBQUEsRUFBSyx1QkFBdUIsWUFBWSxDQUFDO0FBQ3BELGVBQVcsUUFBUSxlQUFlO0FBQ2hDLFVBQUksQ0FBQyxLQUFLLEtBQUssR0FBRztBQUNoQjtBQUFBLE1BQ0Y7QUFDQSxpQkFBVyxLQUFLLFdBQVcsa0JBQWtCLElBQ3pDO0FBQUEsRUFBSyxJQUFJLEtBQ1Q7QUFBQSxFQUFLLHVCQUF1QixJQUFJLENBQUM7QUFBQSxJQUN2QztBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFRTyxTQUFTLGNBQWMsZUFBZSxHQUFXO0FBRXRELFFBQU0sNEJBQTRCO0FBQ2xDLFFBQU0sUUFBUSxrQkFBa0IsSUFBSSxNQUFNLEVBQUUsS0FBSztBQUNqRCxRQUFNLFFBQVEsTUFBTSxNQUFNLElBQUk7QUFDOUIsU0FBTyxNQUFNLE1BQU0sZUFBZSx5QkFBeUIsRUFBRSxLQUFLLElBQUk7QUFDeEU7QUFRTyxTQUFTLFdBQVcsT0FBZ0IsU0FBeUI7QUFFbEUsY0FBWSxXQUFXO0FBQ3ZCLFVBQVEsTUFBTSxjQUFjLEtBQUssQ0FBQztBQUNwQztBQVFPLFNBQVMsK0JBQStCLFNBQW9EO0FBQ2pHLFFBQU0sV0FBVyxpQkFBaUIsR0FBRyxjQUFjLE9BQU87QUFDMUQsU0FBTyxNQUFNO0FBQ1gscUJBQWlCLE9BQU8sUUFBUTtBQUFBLEVBQ2xDO0FBQ0Y7QUFRTyxTQUFTLGdCQUFnQixPQUF1QjtBQUNyRCxRQUFNO0FBQ1I7QUFFQSxTQUFTLHVCQUF1QixPQUF1QjtBQUNyRCxTQUFPLEdBQUcsa0JBQWtCLFFBQVEsS0FBSztBQUMzQztBQU9BLFNBQVMsaUJBQWlCLFlBQTJCO0FBQ25ELGFBQVcsVUFBVTtBQUN2QjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -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
  /**
@@ -34,7 +34,9 @@ function getFunctionExpressionString(fn) {
34
34
  }
35
35
  function noop() {
36
36
  }
37
- async function noopAsync() {
37
+ const noopAsyncSingletonPromise = Promise.resolve();
38
+ function noopAsync() {
39
+ return noopAsyncSingletonPromise;
38
40
  }
39
41
  function omitAsyncReturnType(fn) {
40
42
  return async (...args) => {
@@ -52,7 +54,8 @@ export {
52
54
  getFunctionExpressionString,
53
55
  noop,
54
56
  noopAsync,
57
+ noopAsyncSingletonPromise,
55
58
  omitAsyncReturnType,
56
59
  omitReturnType
57
60
  };
58
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Z1bmN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHR5cGVzIGZvciB3b3JraW5nIHdpdGggZnVuY3Rpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdlbmVyaWMgYXN5bmMgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAdHlwZVBhcmFtIFJldHVybiAtIFRoZSBhd2FpdGVkIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY0FzeW5jRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10sIFJldHVybiA9IHVua25vd24+ID0gR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIFByb21pc2U8UmV0dXJuPj47XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdlbmVyaWMgYXN5bmMgdm9pZCBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgYXJndW1lbnRzIG9mIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY0FzeW5jVm9pZEZ1bmN0aW9uPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10gPSBuZXZlcltdPiA9IEdlbmVyaWNBc3luY0Z1bmN0aW9uPEFyZ3MsIHZvaWQ+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBnZW5lcmljIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLlxuICogQHR5cGVQYXJhbSBSZXR1cm4gLSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10sIFJldHVybiA9IHVua25vd24+ID0gKC4uLmFyZ3M6IEFyZ3MpID0+IFJldHVybjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZ2VuZXJpYyBwcm9taXNhYmxlIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLlxuICogQHR5cGVQYXJhbSBSZXR1cm4gLSBUaGUgYXdhaXRlZCByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNQcm9taXNhYmxlRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10sIFJldHVybiA9IHVua25vd24+ID0gR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIFByb21pc2FibGU8UmV0dXJuPj47XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdlbmVyaWMgcHJvbWlzYWJsZSB2b2lkIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljUHJvbWlzYWJsZVZvaWRGdW5jdGlvbjxBcmdzIGV4dGVuZHMgdW5rbm93bltdID0gbmV2ZXJbXT4gPSBHZW5lcmljUHJvbWlzYWJsZUZ1bmN0aW9uPEFyZ3MsIHZvaWQ+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBnZW5lcmljIHZvaWQgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNWb2lkRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10+ID0gR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIHZvaWQ+O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZnVuY3Rpb24gaW50byBhIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgZnVuY3Rpb24gZXhwcmVzc2lvbi5cbiAqXG4gKiBgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nKClgIG9uIGEgc2hvcnRoYW5kIG1ldGhvZCBsaWtlIGB7IGZuKCkge30gfWBcbiAqIHJldHVybnMgYFwiZm4oKSB7fVwiYCwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbi5cbiAqIFRoaXMgaGVscGVyIGRldGVjdHMgdGhhdCBmb3JtIGFuZCBwcmVmaXhlcyBpdCB3aXRoIGBmdW5jdGlvbiBgLlxuICpcbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIGZ1bmN0aW9uIGV4cHJlc3Npb24uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGUgLS0gV2UgbmVlZCB0byB1c2UgYEZ1bmN0aW9uYCB0eXBlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhmbjogRnVuY3Rpb24pOiBzdHJpbmcge1xuICBjb25zdCBmblN0cmluZyA9IGZuLnRvU3RyaW5nKCk7XG5cbiAgaWYgKEZVTkNUSU9OX0VYUFJFU1NJT05fUkUudGVzdChmblN0cmluZykpIHtcbiAgICByZXR1cm4gZm5TdHJpbmc7XG4gIH1cblxuICBjb25zdCBhc3luY01hdGNoID0gQVNZTkNfS0VZV09SRF9SRS5leGVjKGZuU3RyaW5nKTtcbiAgaWYgKGFzeW5jTWF0Y2gpIHtcbiAgICByZXR1cm4gYGFzeW5jIGZ1bmN0aW9uICR7Zm5TdHJpbmcuc2xpY2UoYXN5bmNNYXRjaFswXS5sZW5ndGgpfWA7XG4gIH1cblxuICByZXR1cm4gYGZ1bmN0aW9uICR7Zm5TdHJpbmd9YDtcbn1cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgLy8gRG9lcyBub3RoaW5nLlxufVxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBub29wQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIERvZXMgbm90aGluZy5cbn1cblxuLyoqXG4gKiBNYWtlcyBhbiBhc3luYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBhc3luYyBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYW5kIG9taXRzIHRoZSByZXR1cm4gdmFsdWUuXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gQXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcGFyYW0gZm4gLSBGdW5jdGlvbiB0byBiZSBjYWxsZWQuXG4gKiBAcmV0dXJucyBBbiBhc3luYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYW5kIG9taXRzIHRoZSByZXR1cm4gdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbWl0QXN5bmNSZXR1cm5UeXBlPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGZuOiBHZW5lcmljQXN5bmNGdW5jdGlvbjxBcmdzPik6IEdlbmVyaWNBc3luY1ZvaWRGdW5jdGlvbjxBcmdzPiB7XG4gIHJldHVybiBhc3luYyAoLi4uYXJnczogQXJncykgPT4ge1xuICAgIGF3YWl0IGZuKC4uLmFyZ3MpO1xuICB9O1xufVxuXG4vKipcbiAqIE1hdGNoZXMgc3RyaW5ncyB0aGF0IGFyZSBhbHJlYWR5IHZhbGlkIGZ1bmN0aW9uIGV4cHJlc3Npb25zOlxuICogLSBgZnVuY3Rpb24gLi4uYCAoa2V5d29yZCwgbm90IGlkZW50aWZpZXIgbGlrZSBgZnVuY3Rpb24xYClcbiAqIC0gYChgIChhcnJvdyBmdW5jdGlvbilcbiAqIC0gYGFzeW5jXFxiYCBmb2xsb3dlZCBieSBgZnVuY3Rpb25cXGJgIG9yIGAoYCAoYXN5bmMgZnVuY3Rpb24vYXJyb3cpXG4gKi9cbmNvbnN0IEZVTkNUSU9OX0VYUFJFU1NJT05fUkUgPSAvXig/OmZ1bmN0aW9uXFxifGFzeW5jXFxiXFxzKig/OmZ1bmN0aW9uXFxifFxcKCl8XFwoKS87XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgYGFzeW5jYCBrZXl3b3JkICh3b3JkIGJvdW5kYXJ5LCBub3QgYGFzeW5jMWApIGZvbGxvd2VkIGJ5IG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gKiBVc2VkIHRvIHN0cmlwIHRoZSBgYXN5bmNgIHByZWZpeCBmcm9tIGFzeW5jIHNob3J0aGFuZCBtZXRob2RzIGJlZm9yZSByZS1hZGRpbmcgYGFzeW5jIGZ1bmN0aW9uYC5cbiAqL1xuY29uc3QgQVNZTkNfS0VZV09SRF9SRSA9IC9eYXN5bmNcXGJcXHMqLztcblxuLyoqXG4gKiBNYWtlcyBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBhbmQgb21pdHMgdGhlIHJldHVybiB2YWx1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBBcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBmbiAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzIGFuZCBvbWl0cyB0aGUgcmV0dXJuIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb21pdFJldHVyblR5cGU8QXJncyBleHRlbmRzIHVua25vd25bXT4oZm46IEdlbmVyaWNGdW5jdGlvbjxBcmdzPik6IEdlbmVyaWNWb2lkRnVuY3Rpb248QXJncz4ge1xuICByZXR1cm4gKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBmbiguLi5hcmdzKTtcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0VPLFNBQVMsNEJBQTRCLElBQXNCO0FBQ2hFLFFBQU0sV0FBVyxHQUFHLFNBQVM7QUFFN0IsTUFBSSx1QkFBdUIsS0FBSyxRQUFRLEdBQUc7QUFDekMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGFBQWEsaUJBQWlCLEtBQUssUUFBUTtBQUNqRCxNQUFJLFlBQVk7QUFDZCxXQUFPLGtCQUFrQixTQUFTLE1BQU0sV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDO0FBQUEsRUFDL0Q7QUFFQSxTQUFPLFlBQVksUUFBUTtBQUM3QjtBQUtPLFNBQVMsT0FBYTtBQUU3QjtBQUtBLGVBQXNCLFlBQTJCO0FBRWpEO0FBU08sU0FBUyxvQkFBNEMsSUFBZ0U7QUFDMUgsU0FBTyxVQUFVLFNBQWU7QUFDOUIsVUFBTSxHQUFHLEdBQUcsSUFBSTtBQUFBLEVBQ2xCO0FBQ0Y7QUFRQSxNQUFNLHlCQUF5QjtBQU0vQixNQUFNLG1CQUFtQjtBQVNsQixTQUFTLGVBQXVDLElBQXNEO0FBQzNHLFNBQU8sSUFBSSxTQUFlO0FBQ3hCLE9BQUcsR0FBRyxJQUFJO0FBQUEsRUFDWjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
61
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Z1bmN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHR5cGVzIGZvciB3b3JraW5nIHdpdGggZnVuY3Rpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdlbmVyaWMgYXN5bmMgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAdHlwZVBhcmFtIFJldHVybiAtIFRoZSBhd2FpdGVkIHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY0FzeW5jRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10sIFJldHVybiA9IHVua25vd24+ID0gR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIFByb21pc2U8UmV0dXJuPj47XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdlbmVyaWMgYXN5bmMgdm9pZCBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgYXJndW1lbnRzIG9mIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY0FzeW5jVm9pZEZ1bmN0aW9uPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10gPSBuZXZlcltdPiA9IEdlbmVyaWNBc3luY0Z1bmN0aW9uPEFyZ3MsIHZvaWQ+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBnZW5lcmljIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLlxuICogQHR5cGVQYXJhbSBSZXR1cm4gLSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10sIFJldHVybiA9IHVua25vd24+ID0gKC4uLmFyZ3M6IEFyZ3MpID0+IFJldHVybjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZ2VuZXJpYyBwcm9taXNhYmxlIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLlxuICogQHR5cGVQYXJhbSBSZXR1cm4gLSBUaGUgYXdhaXRlZCByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNQcm9taXNhYmxlRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10sIFJldHVybiA9IHVua25vd24+ID0gR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIFByb21pc2FibGU8UmV0dXJuPj47XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdlbmVyaWMgcHJvbWlzYWJsZSB2b2lkIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJncyAtIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljUHJvbWlzYWJsZVZvaWRGdW5jdGlvbjxBcmdzIGV4dGVuZHMgdW5rbm93bltdID0gbmV2ZXJbXT4gPSBHZW5lcmljUHJvbWlzYWJsZUZ1bmN0aW9uPEFyZ3MsIHZvaWQ+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBnZW5lcmljIHZvaWQgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIGFyZ3VtZW50cyBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNWb2lkRnVuY3Rpb248QXJncyBleHRlbmRzIHVua25vd25bXSA9IG5ldmVyW10+ID0gR2VuZXJpY0Z1bmN0aW9uPEFyZ3MsIHZvaWQ+O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZnVuY3Rpb24gaW50byBhIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgZnVuY3Rpb24gZXhwcmVzc2lvbi5cbiAqXG4gKiBgRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nKClgIG9uIGEgc2hvcnRoYW5kIG1ldGhvZCBsaWtlIGB7IGZuKCkge30gfWBcbiAqIHJldHVybnMgYFwiZm4oKSB7fVwiYCwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZXhwcmVzc2lvbi5cbiAqIFRoaXMgaGVscGVyIGRldGVjdHMgdGhhdCBmb3JtIGFuZCBwcmVmaXhlcyBpdCB3aXRoIGBmdW5jdGlvbiBgLlxuICpcbiAqIEBwYXJhbSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIGZ1bmN0aW9uIGV4cHJlc3Npb24uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGUgLS0gV2UgbmVlZCB0byB1c2UgYEZ1bmN0aW9uYCB0eXBlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyhmbjogRnVuY3Rpb24pOiBzdHJpbmcge1xuICBjb25zdCBmblN0cmluZyA9IGZuLnRvU3RyaW5nKCk7XG5cbiAgaWYgKEZVTkNUSU9OX0VYUFJFU1NJT05fUkUudGVzdChmblN0cmluZykpIHtcbiAgICByZXR1cm4gZm5TdHJpbmc7XG4gIH1cblxuICBjb25zdCBhc3luY01hdGNoID0gQVNZTkNfS0VZV09SRF9SRS5leGVjKGZuU3RyaW5nKTtcbiAgaWYgKGFzeW5jTWF0Y2gpIHtcbiAgICByZXR1cm4gYGFzeW5jIGZ1bmN0aW9uICR7Zm5TdHJpbmcuc2xpY2UoYXN5bmNNYXRjaFswXS5sZW5ndGgpfWA7XG4gIH1cblxuICByZXR1cm4gYGZ1bmN0aW9uICR7Zm5TdHJpbmd9YDtcbn1cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgLy8gRG9lcyBub3RoaW5nLlxufVxuXG4vKipcbiAqIEEgc2luZ2xldG9uIG5vLW9wIHByb21pc2UuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcHJlZmVyLW5vb3AtYXN5bmMgLS0gQXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlLlxuZXhwb3J0IGNvbnN0IG5vb3BBc3luY1NpbmdsZXRvblByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9vcEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbm9vcEFzeW5jU2luZ2xldG9uUHJvbWlzZTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhbiBhc3luYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBhc3luYyBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYW5kIG9taXRzIHRoZSByZXR1cm4gdmFsdWUuXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gQXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcGFyYW0gZm4gLSBGdW5jdGlvbiB0byBiZSBjYWxsZWQuXG4gKiBAcmV0dXJucyBBbiBhc3luYyBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYW5kIG9taXRzIHRoZSByZXR1cm4gdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbWl0QXN5bmNSZXR1cm5UeXBlPEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KGZuOiBHZW5lcmljQXN5bmNGdW5jdGlvbjxBcmdzPik6IEdlbmVyaWNBc3luY1ZvaWRGdW5jdGlvbjxBcmdzPiB7XG4gIHJldHVybiBhc3luYyAoLi4uYXJnczogQXJncykgPT4ge1xuICAgIGF3YWl0IGZuKC4uLmFyZ3MpO1xuICB9O1xufVxuXG4vKipcbiAqIE1hdGNoZXMgc3RyaW5ncyB0aGF0IGFyZSBhbHJlYWR5IHZhbGlkIGZ1bmN0aW9uIGV4cHJlc3Npb25zOlxuICogLSBgZnVuY3Rpb24gLi4uYCAoa2V5d29yZCwgbm90IGlkZW50aWZpZXIgbGlrZSBgZnVuY3Rpb24xYClcbiAqIC0gYChgIChhcnJvdyBmdW5jdGlvbilcbiAqIC0gYGFzeW5jXFxiYCBmb2xsb3dlZCBieSBgZnVuY3Rpb25cXGJgIG9yIGAoYCAoYXN5bmMgZnVuY3Rpb24vYXJyb3cpXG4gKi9cbmNvbnN0IEZVTkNUSU9OX0VYUFJFU1NJT05fUkUgPSAvXig/OmZ1bmN0aW9uXFxifGFzeW5jXFxiXFxzKig/OmZ1bmN0aW9uXFxifFxcKCl8XFwoKS87XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgYGFzeW5jYCBrZXl3b3JkICh3b3JkIGJvdW5kYXJ5LCBub3QgYGFzeW5jMWApIGZvbGxvd2VkIGJ5IG9wdGlvbmFsIHdoaXRlc3BhY2UuXG4gKiBVc2VkIHRvIHN0cmlwIHRoZSBgYXN5bmNgIHByZWZpeCBmcm9tIGFzeW5jIHNob3J0aGFuZCBtZXRob2RzIGJlZm9yZSByZS1hZGRpbmcgYGFzeW5jIGZ1bmN0aW9uYC5cbiAqL1xuY29uc3QgQVNZTkNfS0VZV09SRF9SRSA9IC9eYXN5bmNcXGJcXHMqLztcblxuLyoqXG4gKiBNYWtlcyBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBhbmQgb21pdHMgdGhlIHJldHVybiB2YWx1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBBcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSBmbiAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzIGFuZCBvbWl0cyB0aGUgcmV0dXJuIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb21pdFJldHVyblR5cGU8QXJncyBleHRlbmRzIHVua25vd25bXT4oZm46IEdlbmVyaWNGdW5jdGlvbjxBcmdzPik6IEdlbmVyaWNWb2lkRnVuY3Rpb248QXJncz4ge1xuICByZXR1cm4gKC4uLmFyZ3M6IEFyZ3MpID0+IHtcbiAgICBmbiguLi5hcmdzKTtcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0VPLFNBQVMsNEJBQTRCLElBQXNCO0FBQ2hFLFFBQU0sV0FBVyxHQUFHLFNBQVM7QUFFN0IsTUFBSSx1QkFBdUIsS0FBSyxRQUFRLEdBQUc7QUFDekMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGFBQWEsaUJBQWlCLEtBQUssUUFBUTtBQUNqRCxNQUFJLFlBQVk7QUFDZCxXQUFPLGtCQUFrQixTQUFTLE1BQU0sV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDO0FBQUEsRUFDL0Q7QUFFQSxTQUFPLFlBQVksUUFBUTtBQUM3QjtBQUtPLFNBQVMsT0FBYTtBQUU3QjtBQU1PLE1BQU0sNEJBQTRCLFFBQVEsUUFBUTtBQU9sRCxTQUFTLFlBQTJCO0FBQ3pDLFNBQU87QUFDVDtBQVNPLFNBQVMsb0JBQTRDLElBQWdFO0FBQzFILFNBQU8sVUFBVSxTQUFlO0FBQzlCLFVBQU0sR0FBRyxHQUFHLElBQUk7QUFBQSxFQUNsQjtBQUNGO0FBUUEsTUFBTSx5QkFBeUI7QUFNL0IsTUFBTSxtQkFBbUI7QUFTbEIsU0FBUyxlQUF1QyxJQUFzRDtBQUMzRyxTQUFPLElBQUksU0FBZTtBQUN4QixPQUFHLEdBQUcsSUFBSTtBQUFBLEVBQ1o7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -21,7 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
21
21
  globalThis.process = browserProcess;
22
22
  })();
23
23
 
24
- const LIBRARY_VERSION = "66.0.1";
24
+ const LIBRARY_VERSION = "68.0.0";
25
25
  const LIBRARY_NAME = "obsidian-dev-utils";
26
26
  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";
27
27
  export {
@@ -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.