@tolle_/tolle-ui 18.2.29 → 18.2.30

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 (279) hide show
  1. package/esm2022/lib/accordion-item.component.mjs +5 -11
  2. package/esm2022/lib/accordion.component.mjs +4 -9
  3. package/esm2022/lib/alert-dialog-dynamic.component.mjs +5 -10
  4. package/esm2022/lib/alert-dialog.component.mjs +44 -59
  5. package/esm2022/lib/alert.component.mjs +5 -11
  6. package/esm2022/lib/aspect-ratio.component.mjs +119 -0
  7. package/esm2022/lib/attachment.component.mjs +334 -0
  8. package/esm2022/lib/avatar-fallback.component.mjs +3 -3
  9. package/esm2022/lib/avatar.component.mjs +4 -9
  10. package/esm2022/lib/badge.component.mjs +4 -9
  11. package/esm2022/lib/breadcrumb-item.component.mjs +3 -3
  12. package/esm2022/lib/breadcrumb-link.component.mjs +3 -3
  13. package/esm2022/lib/breadcrumb-separator.component.mjs +3 -3
  14. package/esm2022/lib/breadcrumb.component.mjs +3 -3
  15. package/esm2022/lib/bubble.component.mjs +301 -0
  16. package/esm2022/lib/button.component.mjs +5 -11
  17. package/esm2022/lib/calendar.component.mjs +5 -11
  18. package/esm2022/lib/card.component.mjs +14 -43
  19. package/esm2022/lib/carousel/carousel.component.mjs +5 -12
  20. package/esm2022/lib/chain-of-thought.component.mjs +380 -0
  21. package/esm2022/lib/chart-pie.component.mjs +386 -0
  22. package/esm2022/lib/chart.component.mjs +1146 -0
  23. package/esm2022/lib/chart.service.mjs +555 -0
  24. package/esm2022/lib/checkbox.component.mjs +5 -11
  25. package/esm2022/lib/checkpoint.component.mjs +134 -0
  26. package/esm2022/lib/collapsible.component.mjs +4 -11
  27. package/esm2022/lib/combobox.component.mjs +372 -0
  28. package/esm2022/lib/command-dialog.component.mjs +164 -0
  29. package/esm2022/lib/command.component.mjs +514 -0
  30. package/esm2022/lib/command.service.mjs +130 -0
  31. package/esm2022/lib/confirmation.component.mjs +219 -0
  32. package/esm2022/lib/context-menu-trigger.directive.mjs +36 -0
  33. package/esm2022/lib/context-menu.component.mjs +460 -0
  34. package/esm2022/lib/context-menu.service.mjs +121 -0
  35. package/esm2022/lib/context.component.mjs +377 -0
  36. package/esm2022/lib/conversation.component.mjs +442 -0
  37. package/esm2022/lib/country-selector.component.mjs +5 -11
  38. package/esm2022/lib/data-table.component.mjs +59 -12
  39. package/esm2022/lib/date-picker.component.mjs +251 -198
  40. package/esm2022/lib/date-range-picker.component.mjs +224 -116
  41. package/esm2022/lib/date-time-picker.component.mjs +506 -0
  42. package/esm2022/lib/direction.component.mjs +79 -0
  43. package/esm2022/lib/dropdown-item.component.mjs +3 -3
  44. package/esm2022/lib/dropdown-label.component.mjs +3 -3
  45. package/esm2022/lib/dropdown-menu.component.mjs +3 -3
  46. package/esm2022/lib/dropdown-separator.component.mjs +3 -3
  47. package/esm2022/lib/dropdown-trigger.directive.mjs +6 -4
  48. package/esm2022/lib/empty-state.component.mjs +4 -9
  49. package/esm2022/lib/field.component.mjs +394 -0
  50. package/esm2022/lib/hover-card.component.mjs +6 -16
  51. package/esm2022/lib/inline-citation.component.mjs +263 -0
  52. package/esm2022/lib/input-group.component.mjs +418 -0
  53. package/esm2022/lib/input.component.mjs +5 -11
  54. package/esm2022/lib/item.component.mjs +243 -0
  55. package/esm2022/lib/kbd.component.mjs +82 -0
  56. package/esm2022/lib/label.component.mjs +4 -9
  57. package/esm2022/lib/marker.component.mjs +135 -0
  58. package/esm2022/lib/masked-input.component.mjs +5 -11
  59. package/esm2022/lib/menubar.component.mjs +683 -0
  60. package/esm2022/lib/message-scroller.component.mjs +353 -0
  61. package/esm2022/lib/message-scroller.service.mjs +157 -0
  62. package/esm2022/lib/message.component.mjs +228 -0
  63. package/esm2022/lib/model-selector.component.mjs +310 -0
  64. package/esm2022/lib/multi-select.component.mjs +155 -72
  65. package/esm2022/lib/native-select.component.mjs +201 -0
  66. package/esm2022/lib/navigation-menu.component.mjs +642 -0
  67. package/esm2022/lib/otp-group.component.mjs +3 -3
  68. package/esm2022/lib/otp-slot.component.mjs +4 -9
  69. package/esm2022/lib/otp.component.mjs +5 -11
  70. package/esm2022/lib/pagination.component.mjs +7 -10
  71. package/esm2022/lib/plan.component.mjs +335 -0
  72. package/esm2022/lib/popover-content.component.mjs +4 -9
  73. package/esm2022/lib/popover.component.mjs +15 -13
  74. package/esm2022/lib/progress.component.mjs +4 -9
  75. package/esm2022/lib/prompt-input.component.mjs +526 -0
  76. package/esm2022/lib/queue.component.mjs +280 -0
  77. package/esm2022/lib/radio-group.component.mjs +6 -13
  78. package/esm2022/lib/radio-item.component.mjs +4 -9
  79. package/esm2022/lib/range-calendar.component.mjs +5 -11
  80. package/esm2022/lib/reasoning.component.mjs +335 -0
  81. package/esm2022/lib/resizable.component.mjs +219 -0
  82. package/esm2022/lib/segment.component.mjs +17 -7
  83. package/esm2022/lib/select-group.component.mjs +4 -8
  84. package/esm2022/lib/select-item.component.mjs +4 -9
  85. package/esm2022/lib/select-separator.component.mjs +4 -8
  86. package/esm2022/lib/select.component.mjs +133 -49
  87. package/esm2022/lib/separator.component.mjs +4 -9
  88. package/esm2022/lib/sheet.component.mjs +38 -56
  89. package/esm2022/lib/shimmer.component.mjs +84 -0
  90. package/esm2022/lib/sidebar.component.mjs +11 -1
  91. package/esm2022/lib/skeleton.component.mjs +4 -9
  92. package/esm2022/lib/sources.component.mjs +452 -0
  93. package/esm2022/lib/spinner.component.mjs +68 -0
  94. package/esm2022/lib/suggestion.component.mjs +207 -0
  95. package/esm2022/lib/switch.component.mjs +5 -11
  96. package/esm2022/lib/table.component.mjs +213 -0
  97. package/esm2022/lib/tabs.component.mjs +4 -11
  98. package/esm2022/lib/tag-input.component.mjs +5 -11
  99. package/esm2022/lib/task.component.mjs +359 -0
  100. package/esm2022/lib/textarea.component.mjs +5 -11
  101. package/esm2022/lib/theme.service.mjs +17 -6
  102. package/esm2022/lib/time-picker.component.mjs +923 -0
  103. package/esm2022/lib/toast.service.mjs +3 -2
  104. package/esm2022/lib/toaster.component.mjs +76 -39
  105. package/esm2022/lib/toggle-group.component.mjs +4 -9
  106. package/esm2022/lib/toggle.component.mjs +5 -11
  107. package/esm2022/lib/tool.component.mjs +462 -0
  108. package/esm2022/lib/typography.component.mjs +83 -0
  109. package/esm2022/lib/utils/color.mjs +140 -19
  110. package/esm2022/public-api.mjs +61 -1
  111. package/fesm2022/tolle-ui.mjs +16453 -1024
  112. package/fesm2022/tolle-ui.mjs.map +1 -1
  113. package/lib/alert-dialog.component.d.ts +10 -2
  114. package/lib/aspect-ratio.component.d.ts +20 -0
  115. package/lib/attachment.component.d.ts +101 -0
  116. package/lib/bubble.component.d.ts +112 -0
  117. package/lib/chain-of-thought.component.d.ts +166 -0
  118. package/lib/chart-pie.component.d.ts +108 -0
  119. package/lib/chart.component.d.ts +369 -0
  120. package/lib/chart.service.d.ts +222 -0
  121. package/lib/checkpoint.component.d.ts +51 -0
  122. package/lib/combobox.component.d.ts +90 -0
  123. package/lib/command-dialog.component.d.ts +53 -0
  124. package/lib/command.component.d.ts +189 -0
  125. package/lib/command.service.d.ts +67 -0
  126. package/lib/confirmation.component.d.ts +70 -0
  127. package/lib/context-menu-trigger.directive.d.ts +12 -0
  128. package/lib/context-menu.component.d.ts +41 -0
  129. package/lib/context-menu.service.d.ts +38 -0
  130. package/lib/context.component.d.ts +134 -0
  131. package/lib/conversation.component.d.ts +165 -0
  132. package/lib/data-table.component.d.ts +26 -1
  133. package/lib/date-picker.component.d.ts +72 -11
  134. package/lib/date-range-picker.component.d.ts +63 -6
  135. package/lib/date-time-picker.component.d.ts +119 -0
  136. package/lib/direction.component.d.ts +45 -0
  137. package/lib/field.component.d.ts +201 -0
  138. package/lib/inline-citation.component.d.ts +103 -0
  139. package/lib/input-group.component.d.ts +150 -0
  140. package/lib/item.component.d.ts +154 -0
  141. package/lib/kbd.component.d.ts +50 -0
  142. package/lib/marker.component.d.ts +58 -0
  143. package/lib/menubar.component.d.ts +247 -0
  144. package/lib/message-scroller.component.d.ts +159 -0
  145. package/lib/message-scroller.service.d.ts +73 -0
  146. package/lib/message.component.d.ts +128 -0
  147. package/lib/model-selector.component.d.ts +103 -0
  148. package/lib/multi-select.component.d.ts +66 -14
  149. package/lib/native-select.component.d.ts +57 -0
  150. package/lib/navigation-menu.component.d.ts +230 -0
  151. package/lib/plan.component.d.ts +120 -0
  152. package/lib/popover.component.d.ts +1 -0
  153. package/lib/prompt-input.component.d.ts +194 -0
  154. package/lib/queue.component.d.ts +106 -0
  155. package/lib/reasoning.component.d.ts +127 -0
  156. package/lib/resizable.component.d.ts +43 -0
  157. package/lib/segment.component.d.ts +13 -3
  158. package/lib/select.component.d.ts +37 -5
  159. package/lib/sheet.component.d.ts +3 -0
  160. package/lib/shimmer.component.d.ts +38 -0
  161. package/lib/sidebar.component.d.ts +2 -0
  162. package/lib/sources.component.d.ts +156 -0
  163. package/lib/spinner.component.d.ts +29 -0
  164. package/lib/suggestion.component.d.ts +96 -0
  165. package/lib/table.component.d.ts +106 -0
  166. package/lib/task.component.d.ts +151 -0
  167. package/lib/theme.service.d.ts +9 -0
  168. package/lib/time-picker.component.d.ts +243 -0
  169. package/lib/toast.service.d.ts +3 -1
  170. package/lib/toaster.component.d.ts +26 -9
  171. package/lib/tool.component.d.ts +158 -0
  172. package/lib/typography.component.d.ts +32 -0
  173. package/lib/utils/color.d.ts +19 -5
  174. package/package.json +1 -1
  175. package/public-api.d.ts +50 -0
  176. package/registry/docs-content.json +8480 -1542
  177. package/registry/llms-full.txt +2679 -319
  178. package/registry/llms.txt +43 -4
  179. package/registry/manifest.json +9090 -1742
  180. package/registry/r/accordion-item.json +1 -1
  181. package/registry/r/accordion.json +1 -1
  182. package/registry/r/alert-dialog-dynamic.json +1 -1
  183. package/registry/r/alert-dialog.json +1 -1
  184. package/registry/r/alert.json +1 -1
  185. package/registry/r/attachment.json +23 -0
  186. package/registry/r/avatar-fallback.json +1 -1
  187. package/registry/r/avatar.json +1 -1
  188. package/registry/r/badge.json +1 -1
  189. package/registry/r/breadcrumb-item.json +1 -1
  190. package/registry/r/breadcrumb-link.json +1 -1
  191. package/registry/r/breadcrumb-separator.json +1 -1
  192. package/registry/r/breadcrumb.json +1 -1
  193. package/registry/r/bubble.json +23 -0
  194. package/registry/r/button.json +1 -1
  195. package/registry/r/calendar.json +1 -1
  196. package/registry/r/card.json +1 -1
  197. package/registry/r/carousel.json +1 -1
  198. package/registry/r/chain-of-thought.json +23 -0
  199. package/registry/r/chart-pie.json +30 -0
  200. package/registry/r/chart.json +28 -0
  201. package/registry/r/checkbox.json +1 -1
  202. package/registry/r/checkpoint.json +23 -0
  203. package/registry/r/collapsible.json +1 -1
  204. package/registry/r/combobox.json +31 -0
  205. package/registry/r/command-dialog.json +21 -0
  206. package/registry/r/command.json +26 -0
  207. package/registry/r/confirmation.json +23 -0
  208. package/registry/r/context.json +26 -0
  209. package/registry/r/conversation.json +23 -0
  210. package/registry/r/country-selector.json +1 -1
  211. package/registry/r/data-table.json +1 -1
  212. package/registry/r/date-picker.json +4 -4
  213. package/registry/r/date-range-picker.json +3 -3
  214. package/registry/r/date-time-picker.json +28 -0
  215. package/registry/r/direction.json +16 -0
  216. package/registry/r/dropdown-item.json +1 -1
  217. package/registry/r/dropdown-label.json +1 -1
  218. package/registry/r/dropdown-menu.json +1 -1
  219. package/registry/r/dropdown-separator.json +1 -1
  220. package/registry/r/dropdown-trigger.json +1 -1
  221. package/registry/r/empty-state.json +1 -1
  222. package/registry/r/field.json +23 -0
  223. package/registry/r/hover-card.json +1 -1
  224. package/registry/r/inline-citation.json +26 -0
  225. package/registry/r/input-group.json +23 -0
  226. package/registry/r/input.json +1 -1
  227. package/registry/r/item.json +23 -0
  228. package/registry/r/kbd.json +23 -0
  229. package/registry/r/label.json +1 -1
  230. package/registry/r/marker.json +23 -0
  231. package/registry/r/masked-input.json +1 -1
  232. package/registry/r/menubar.json +24 -0
  233. package/registry/r/message-scroller.json +26 -0
  234. package/registry/r/message.json +23 -0
  235. package/registry/r/model-selector.json +32 -0
  236. package/registry/r/multi-select.json +2 -2
  237. package/registry/r/native-select.json +23 -0
  238. package/registry/r/navigation-menu.json +24 -0
  239. package/registry/r/otp-group.json +1 -1
  240. package/registry/r/otp-slot.json +1 -1
  241. package/registry/r/otp.json +1 -1
  242. package/registry/r/pagination.json +3 -2
  243. package/registry/r/plan.json +23 -0
  244. package/registry/r/popover-content.json +1 -1
  245. package/registry/r/popover.json +1 -1
  246. package/registry/r/progress.json +1 -1
  247. package/registry/r/prompt-input.json +23 -0
  248. package/registry/r/queue.json +23 -0
  249. package/registry/r/radio-group.json +1 -1
  250. package/registry/r/radio-item.json +1 -1
  251. package/registry/r/range-calendar.json +1 -1
  252. package/registry/r/reasoning.json +23 -0
  253. package/registry/r/segment.json +1 -1
  254. package/registry/r/select-group.json +1 -1
  255. package/registry/r/select-item.json +1 -1
  256. package/registry/r/select-separator.json +1 -1
  257. package/registry/r/select.json +4 -3
  258. package/registry/r/separator.json +1 -1
  259. package/registry/r/sheet.json +1 -1
  260. package/registry/r/shimmer.json +23 -0
  261. package/registry/r/sidebar.json +1 -1
  262. package/registry/r/skeleton.json +1 -1
  263. package/registry/r/sources.json +23 -0
  264. package/registry/r/spinner.json +23 -0
  265. package/registry/r/suggestion.json +23 -0
  266. package/registry/r/switch.json +1 -1
  267. package/registry/r/table.json +21 -0
  268. package/registry/r/tabs.json +1 -1
  269. package/registry/r/tag-input.json +1 -1
  270. package/registry/r/task.json +23 -0
  271. package/registry/r/textarea.json +1 -1
  272. package/registry/r/time-picker.json +24 -0
  273. package/registry/r/toaster.json +2 -2
  274. package/registry/r/toggle-group.json +1 -1
  275. package/registry/r/toggle.json +1 -1
  276. package/registry/r/tool.json +23 -0
  277. package/registry/r/typography.json +23 -0
  278. package/registry/registry.json +915 -22
  279. package/theme.css +109 -8
@@ -291,34 +291,155 @@ export function generateBaseCss(baseId) {
291
291
  /* -------------------------------------------------------------------------- */
292
292
  /* Chart palette */
293
293
  /* -------------------------------------------------------------------------- */
294
+ /* --- OKLab/OKLCH helpers -----------------------------------------------------
295
+ * Chart steps are placed in OKLCH, not HSL. HSL "lightness" is not perceptual:
296
+ * HSL 71% on a yellow reads as OKLab L 0.86 while the same 71% on a blue reads
297
+ * ~0.55, so an HSL-based ramp silently produces steps that are far too light to
298
+ * sit alongside the others. Working in OKLCH lets us set perceived lightness and
299
+ * colourfulness directly.
300
+ * -------------------------------------------------------------------------- */
301
+ const srgbToLinear = (c) => (c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4));
302
+ const linearToSrgb = (c) => (c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055);
303
+ /** sRGB hex → OKLCH (L 0–1, C chroma, h degrees). */
304
+ function hexToOklch(hex) {
305
+ const r = srgbToLinear(parseInt(hex.slice(1, 3), 16) / 255);
306
+ const g = srgbToLinear(parseInt(hex.slice(3, 5), 16) / 255);
307
+ const b = srgbToLinear(parseInt(hex.slice(5, 7), 16) / 255);
308
+ const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);
309
+ const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);
310
+ const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);
311
+ const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s;
312
+ const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s;
313
+ return {
314
+ L: 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,
315
+ C: Math.hypot(A, B),
316
+ h: (Math.atan2(B, A) * 180) / Math.PI,
317
+ };
318
+ }
319
+ function oklchToLinearRgb(L, C, hDeg) {
320
+ const h = (hDeg * Math.PI) / 180;
321
+ const A = C * Math.cos(h);
322
+ const B = C * Math.sin(h);
323
+ const l = (L + 0.3963377774 * A + 0.2158037573 * B) ** 3;
324
+ const m = (L - 0.1055613458 * A - 0.0638541728 * B) ** 3;
325
+ const s = (L - 0.0894841775 * A - 1.291485548 * B) ** 3;
326
+ return [
327
+ 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
328
+ -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
329
+ -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,
330
+ ];
331
+ }
332
+ const inSrgbGamut = (rgb) => rgb.every((c) => c >= -0.0001 && c <= 1.0001);
333
+ /** Largest chroma this lightness/hue can carry inside sRGB. */
334
+ function maxChroma(L, h) {
335
+ let c = 0.4;
336
+ while (c > 0.001 && !inSrgbGamut(oklchToLinearRgb(L, c, h)))
337
+ c -= 0.004;
338
+ return c;
339
+ }
340
+ /** OKLCH → hex, reducing chroma to fit sRGB while preserving lightness and hue. */
341
+ function oklchToHex(L, C, h) {
342
+ const c = Math.min(C, maxChroma(L, h));
343
+ const [r, g, b] = oklchToLinearRgb(L, c, h).map((v) => Math.round(Math.min(1, Math.max(0, linearToSrgb(v))) * 255));
344
+ return `#${[r, g, b].map((v) => v.toString(16).padStart(2, '0')).join('')}`;
345
+ }
294
346
  /**
295
- * Derive 5 harmonious chart colors from one base hex the base hue plus
296
- * analogous hues at ±30°/±60°, with paired lightness shifts for separation.
297
- * Returns RGB triplets for `--chart-1`…`--chart-5`.
347
+ * Perceptual (OKLCH) lightness bands a categorical chart mark must sit inside to
348
+ * read as a distinct series against each surface. Below the band a mark muddies
349
+ * into the background; above it, marks wash out and stop being separable. Dark's
350
+ * band is both lower and narrower than light's — it is not a mirror image.
298
351
  */
299
- export function generateChartRamp(hex) {
300
- const hsl = hexToHsl(hex) ?? { h: 220, s: 70, l: 55 };
301
- const defs = [
302
- { dh: 0, s: hsl.s, l: hsl.l },
303
- { dh: 32, s: hsl.s * 0.9, l: clamp(hsl.l + 8, 32, 74) },
304
- { dh: -28, s: hsl.s * 0.95, l: clamp(hsl.l - 8, 28, 70) },
305
- { dh: 64, s: hsl.s * 0.82, l: clamp(hsl.l + 15, 38, 80) },
306
- { dh: -58, s: hsl.s, l: clamp(hsl.l - 16, 24, 66) },
307
- ];
308
- return defs.map((d) => rgbTriplet(hslToHex(hsl.h + d.dh, clamp(d.s, 24, 92), d.l)));
352
+ const CHART_BAND = { light: [0.43, 0.77], dark: [0.48, 0.67] };
353
+ /** Chroma below this reads as gray rather than as a colour. */
354
+ const CHART_CHROMA_FLOOR = 0.115;
355
+ /**
356
+ * Nudges lightness within the band until this hue can carry the chroma floor.
357
+ * Dark yellows and teals have a narrow sRGB gamut, so a step placed too dark
358
+ * would be clamped into a muddy near-gray.
359
+ */
360
+ function snapLightness(targetL, h, lo, hi) {
361
+ if (maxChroma(targetL, h) >= CHART_CHROMA_FLOOR)
362
+ return targetL;
363
+ for (let d = 0.01; d <= hi - lo; d += 0.01) {
364
+ if (targetL + d <= hi && maxChroma(targetL + d, h) >= CHART_CHROMA_FLOOR)
365
+ return targetL + d;
366
+ if (targetL - d >= lo && maxChroma(targetL - d, h) >= CHART_CHROMA_FLOOR)
367
+ return targetL - d;
368
+ }
369
+ // No lightness in the band clears the floor for this hue — take the most
370
+ // colourful point available rather than the target, which would otherwise be
371
+ // gamut-clamped into a near-gray.
372
+ let best = targetL;
373
+ let bestC = maxChroma(targetL, h);
374
+ for (let L = lo; L <= hi; L += 0.01) {
375
+ const c = maxChroma(L, h);
376
+ if (c > bestC) {
377
+ bestC = c;
378
+ best = L;
379
+ }
380
+ }
381
+ return best;
309
382
  }
310
- /** Emit the `:root` + `.dark` `--chart-1…5` block for a chart base color. */
383
+ /**
384
+ * Derive 5 chart colors from one base hex, spreading hues widely and
385
+ * alternating lightness so adjacent series stay separable — including for
386
+ * red-green colour blindness, where hue alone carries almost no information and
387
+ * the lightness difference does the work.
388
+ *
389
+ * `mode` re-steps the ramp for the target surface. Dark is NOT a lightened flip
390
+ * of light: its usable lightness band is both narrower and lower.
391
+ *
392
+ * NOTE: a palette derived from an arbitrary brand hue cannot be *guaranteed*
393
+ * colour-blind-safe — five hues spread from one starting point will, for some
394
+ * bases, put a confusable pair next to each other. The shipped defaults in
395
+ * `theme.css` are a fixed, validated palette; prefer those unless brand-matched
396
+ * charts matter more than guaranteed separation. Whatever you use, keep the
397
+ * legend and direct labels on, so colour is never the only channel.
398
+ */
399
+ export function generateChartRamp(hex, mode = 'light') {
400
+ const base = hexToOklch(/^#/.test(hex) ? hex : '#2563eb');
401
+ const [lo, hi] = CHART_BAND[mode];
402
+ // Hue offsets spread ~72–180° apart rather than the ±30° "analogous" set the
403
+ // first version used, which left neighbouring series only 32° apart — under
404
+ // protanopia those collapsed to ΔE 1.5, i.e. the same colour. Lightness also
405
+ // alternates, so hues that still converge under CVD differ in luminance.
406
+ const defs = mode === 'light'
407
+ ? [
408
+ { dh: 0, L: 0.55 },
409
+ { dh: 180, L: 0.72 },
410
+ { dh: 90, L: 0.46 },
411
+ { dh: 270, L: 0.68 },
412
+ { dh: 45, L: 0.6 },
413
+ ]
414
+ : [
415
+ { dh: 0, L: 0.58 },
416
+ { dh: 180, L: 0.66 },
417
+ { dh: 90, L: 0.5 },
418
+ { dh: 270, L: 0.63 },
419
+ { dh: 45, L: 0.54 },
420
+ ];
421
+ return defs.map((d) => {
422
+ const h = base.h + d.dh;
423
+ const L = snapLightness(d.L, h, lo, hi);
424
+ return rgbTriplet(oklchToHex(L, 0.15, h));
425
+ });
426
+ }
427
+ /**
428
+ * Emit the `:root` + `.dark` `--chart-1…5` block for a chart base color, with
429
+ * each mode re-stepped for its own surface.
430
+ */
311
431
  export function generateChartCss(hex) {
312
- const ramp = generateChartRamp(hex);
313
- const vars = ramp.map((t, i) => `--chart-${i + 1}: ${t};`).join('\n ');
432
+ const vars = (mode) => generateChartRamp(hex, mode)
433
+ .map((t, i) => `--chart-${i + 1}: ${t};`)
434
+ .join('\n ');
314
435
  return `
315
436
  :root {
316
- ${vars}
437
+ ${vars('light')}
317
438
  }
318
439
 
319
440
  .dark {
320
- ${vars}
441
+ ${vars('dark')}
321
442
  }
322
443
  `;
323
444
  }
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL3V0aWxzL2NvbG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQVFILHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVc7SUFDbEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25CLE9BQU87WUFDTCxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUM3QixDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPO1lBQ0wsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxtRkFBbUY7QUFDbkYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFXLEVBQUUsUUFBUSxHQUFHLFdBQVc7SUFDNUQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN2RCxDQUFDO0FBRUQsdUVBQXVFO0FBQ3ZFLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQzFDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzNCLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDeEUsT0FBTyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNqRCxDQUFDO0FBRUQscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBVztJQUN6QyxPQUFPLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsNkRBQTZEO0FBQzdELE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVyxFQUFFLE9BQWU7SUFDdkQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDckIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxDQUFTLEVBQUUsR0FBVyxFQUFFLEdBQVc7SUFDaEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFRRCw2RUFBNkU7QUFDN0UsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFXO0lBQ2xDLE1BQU0sR0FBRyxH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QUM7SUFDNUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQVcsRUFBRSxPQUFlO0lBQ3RELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3JCLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE9BQU8sSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ25ILENBQUM7QUFFRCxxRkFBcUY7QUFDckYsTUFBTSxV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QUU7UUFDekQsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtRQUN6RCxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtLQUNwRCxDQUFDO0lBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQzFDLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUUsT0FBTzs7VUFFQyxJQUFJOzs7O1VBSUosSUFBSTs7S0FFVCxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVyZSBjb2xvciArIHRoZW1lLXRva2VuIG1hdGggZm9yIFRvbGxlIFVJLlxuICpcbiAqIEZyYW1ld29yay0gYW5kIERPTS1mcmVlIHNvIGl0IGNhbiBiYWNrIGJvdGggdGhlIHJ1bnRpbWUgYFRoZW1lU2VydmljZWAgYW5kIGFcbiAqIGJ1aWxkLXRpbWUgdGhlbWUgZ2VuZXJhdG9yICh0aGUgc2hhZGNuLXN0eWxlIFwiY29weSB0aGlzIENTUyBibG9ja1wiIGZsb3cpLCBhbmRcbiAqIHRvIGNlbnRyYWxpemUgdGhlIG1hdGggYWhlYWQgb2YgYSBmdXR1cmUgb2tsY2ggbWlncmF0aW9uLiBObyBzaWRlIGVmZmVjdHMuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBSZ2Ige1xuICByOiBudW1iZXI7XG4gIGc6IG51bWJlcjtcbiAgYjogbnVtYmVyO1xufVxuXG4vKiogUGFyc2UgYSAjUkdCIG9yICNSUkdHQkIgaGV4IHN0cmluZyB0byBSR0IsIG9yIG51bGwgaWYgbWFsZm9ybWVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFRvUmdiKGhleDogc3RyaW5nKTogUmdiIHwgbnVsbCB7XG4gIGNvbnN0IGMgPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgaWYgKGMubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHBhcnNlSW50KGNbMF0gKyBjWzBdLCAxNiksXG4gICAgICBnOiBwYXJzZUludChjWzFdICsgY1sxXSwgMTYpLFxuICAgICAgYjogcGFyc2VJbnQoY1syXSArIGNbMl0sIDE2KSxcbiAgICB9O1xuICB9XG4gIGlmIChjLmxlbmd0aCA9PT0gNikge1xuICAgIHJldHVybiB7XG4gICAgICByOiBwYXJzZUludChjLnN1YnN0cmluZygwLCAyKSwgMTYpLFxuICAgICAgZzogcGFyc2VJbnQoYy5zdWJzdHJpbmcoMiwgNCksIDE2KSxcbiAgICAgIGI6IHBhcnNlSW50KGMuc3Vic3RyaW5nKDQsIDYpLCAxNiksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIFNwYWNlLXNlcGFyYXRlZCBSR0IgdHJpcGxldCBmb3IgYSBoZXggY29sb3IgKFRhaWx3aW5kIGA8YWxwaGEtdmFsdWU+YCBmb3JtKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZ2JUcmlwbGV0KGhleDogc3RyaW5nLCBmYWxsYmFjayA9ICczNyA5OSAyMzUnKTogc3RyaW5nIHtcbiAgY29uc3QgcmdiID0gaGV4VG9SZ2IoaGV4KTtcbiAgcmV0dXJuIHJnYiA/IGAke3JnYi5yfSAke3JnYi5nfSAke3JnYi5ifWAgOiBmYWxsYmFjaztcbn1cblxuLyoqIEJsYWNrIG9yIHdoaXRlLCB3aGljaGV2ZXIgY29udHJhc3RzIGJldHRlciB3aXRoIHRoZSBnaXZlbiBjb2xvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cmFzdENvbG9yKGhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmdiID0gaGV4VG9SZ2IoaGV4KTtcbiAgaWYgKCFyZ2IpIHJldHVybiAnI2ZmZmZmZic7XG4gIGNvbnN0IGx1bWluYW5jZSA9ICgwLjI5OSAqIHJnYi5yICsgMC41ODcgKiByZ2IuZyArIDAuMTE0ICogcmdiLmIpIC8gMjU1O1xuICByZXR1cm4gbHVtaW5hbmNlID4gMC41ID8gJyMwMDAwMDAnIDogJyNmZmZmZmYnO1xufVxuXG4vKiogQ29udHJhc3QgY29sb3IgYXMgYW4gUkdCIHRyaXBsZXQgKGZvciBgLS1wcmltYXJ5LWZvcmVncm91bmRgKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cmFzdFRyaXBsZXQoaGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmdiVHJpcGxldChnZXRDb250cmFzdENvbG9yKGhleCksICcyNTUgMjU1IDI1NScpO1xufVxuXG4vKiogTGlnaHRlbiBhIGhleCBjb2xvciB0b3dhcmQgd2hpdGUgYnkgYHBlcmNlbnRgICgw4oCTMTAwKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaWdodGVuQ29sb3IoaGV4OiBzdHJpbmcsIHBlcmNlbnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHJnYiA9IGhleFRvUmdiKGhleCk7XG4gIGlmICghcmdiKSByZXR1cm4gaGV4O1xuICBjb25zdCByID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKHJnYi5yICsgKDI1NSAtIHJnYi5yKSAqIChwZXJjZW50IC8gMTAwKSkpO1xuICBjb25zdCBnID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKHJnYi5nICsgKDI1NSAtIHJnYi5nKSAqIChwZXJjZW50IC8gMTAwKSkpO1xuICBjb25zdCBiID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKHJnYi5iICsgKDI1NSAtIHJnYi5iKSAqIChwZXJjZW50IC8gMTAwKSkpO1xuICByZXR1cm4gYCMkeygoMSA8PCAyNCkgKyAociA8PCAxNikgKyAoZyA8PCA4KSArIGIpLnRvU3RyaW5nKDE2KS5zbGljZSgxKX1gO1xufVxuXG5mdW5jdGlvbiBjbGFtcChuOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgbikpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhzbCB7XG4gIGg6IG51bWJlcjtcbiAgczogbnVtYmVyO1xuICBsOiBudW1iZXI7XG59XG5cbi8qKiBDb252ZXJ0IGEgaGV4IGNvbG9yIHRvIEhTTCAoaCAw4oCTMzYwLCBzL2wgMOKAkzEwMCksIG9yIG51bGwgaWYgbWFsZm9ybWVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFRvSHNsKGhleDogc3RyaW5nKTogSHNsIHwgbnVsbCB7XG4gIGNvbnN0IHJnYiA9IGhleFRvUmdiKGhleCk7XG4gIGlmICghcmdiKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgciA9IHJnYi5yIC8gMjU1LFxuICAgIGcgPSByZ2IuZyAvIDI1NSxcbiAgICBiID0gcmdiLmIgLyAyNTU7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICBsZXQgaCA9IDA7XG4gIGxldCBzID0gMDtcbiAgY29uc3QgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKG1heCAhPT0gbWluKSB7XG4gICAgY29uc3QgZCA9IG1heCAtIG1pbjtcbiAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgc3dpdGNoIChtYXgpIHtcbiAgICAgIGNhc2UgcjpcbiAgICAgICAgaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZzpcbiAgICAgICAgaCA9IChiIC0gcikgLyBkICsgMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBoID0gKHIgLSBnKSAvIGQgKyA0O1xuICAgIH1cbiAgICBoIC89IDY7XG4gIH1cbiAgcmV0dXJuIHsgaDogaCAqIDM2MCwgczogcyAqIDEwMCwgbDogbCAqIDEwMCB9O1xufVxuXG4vKiogQ29udmVydCBIU0wgKGggMOKAkzM2MCwgcy9sIDDigJMxMDApIHRvIGEgI1JSR0dCQiBoZXggc3RyaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhzbFRvSGV4KGg6IG51bWJlciwgczogbnVtYmVyLCBsOiBudW1iZXIpOiBzdHJpbmcge1xuICBoID0gKChoICUgMzYwKSArIDM2MCkgJSAzNjAgLyAzNjA7XG4gIHMgPSBjbGFtcChzLCAwLCAxMDApIC8gMTAwO1xuICBsID0gY2xhbXAobCwgMCwgMTAwKSAvIDEwMDtcbiAgY29uc3QgaHVlMnJnYiA9IChwOiBudW1iZXIsIHE6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHQgPCAwKSB0ICs9IDE7XG4gICAgaWYgKHQgPiAxKSB0IC09IDE7XG4gICAgaWYgKHQgPCAxIC8gNikgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHQ7XG4gICAgaWYgKHQgPCAxIC8gMikgcmV0dXJuIHE7XG4gICAgaWYgKHQgPCAyIC8gMykgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xuICAgIHJldHVybiBwO1xuICB9O1xuICBsZXQgcjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcjtcbiAgaWYgKHMgPT09IDApIHtcbiAgICByID0gZyA9IGIgPSBsO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHEgPSBsIDwgMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzO1xuICAgIGNvbnN0IHAgPSAyICogbCAtIHE7XG4gICAgciA9IGh1ZTJyZ2IocCwgcSwgaCArIDEgLyAzKTtcbiAgICBnID0gaHVlMnJnYihwLCBxLCBoKTtcbiAgICBiID0gaHVlMnJnYihwLCBxLCBoIC0gMSAvIDMpO1xuICB9XG4gIGNvbnN0IHRvID0gKHg6IG51bWJlcikgPT4gTWF0aC5yb3VuZCh4ICogMjU1KS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKTtcbiAgcmV0dXJuIGAjJHt0byhyKX0ke3RvKGcpfSR7dG8oYil9YDtcbn1cblxuLyoqIERhcmtlbiBhIGhleCBjb2xvciB0b3dhcmQgYmxhY2sgYnkgYHBlcmNlbnRgICgw4oCTMTAwKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXJrZW5Db2xvcihoZXg6IHN0cmluZywgcGVyY2VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgcmdiID0gaGV4VG9SZ2IoaGV4KTtcbiAgaWYgKCFyZ2IpIHJldHVybiBoZXg7XG4gIGNvbnN0IGZhY3RvciA9IDEgLSBwZXJjZW50IC8gMTAwO1xuICBjb25zdCByID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihyZ2IuciAqIGZhY3RvcikpO1xuICBjb25zdCBnID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihyZ2IuZyAqIGZhY3RvcikpO1xuICBjb25zdCBiID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihyZ2IuYiAqIGZhY3RvcikpO1xuICByZXR1cm4gYCMke3IudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyl9JHtnLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpfSR7Yi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKX1gO1xufVxuXG4vKiogRGVyaXZlZCByYWRpdXMgc2NhbGUgZnJvbSBhIGJhc2UgcmFkaXVzIChlLmcuICcwLjVyZW0nKSwgb3IgbnVsbCBpZiBtYWxmb3JtZWQuICovXG5leHBvcnQgZnVuY3Rpb24gcmFkaXVzU2NhbGUocmFkaXVzOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCB7XG4gIGNvbnN0IG0gPSByYWRpdXMubWF0Y2goL14oXFxkKlxcLj9cXGQrKShbYS16XSt8JSkkLyk7XG4gIGlmICghbSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IG4gPSBwYXJzZUZsb2F0KG1bMV0pO1xuICBjb25zdCB1ID0gbVsyXTtcbiAgcmV0dXJuIHtcbiAgICAnLS1yYWRpdXMnOiByYWRpdXMsXG4gICAgJy0tcmFkaXVzLXNtJzogYCR7biAqIDAuNX0ke3V9YCxcbiAgICAnLS1yYWRpdXMtbWQnOiBgJHtufSR7dX1gLFxuICAgICctLXJhZGl1cy1sZyc6IGAke24gKiAxLjV9JHt1fWAsXG4gICAgJy0tcmFkaXVzLXhsJzogYCR7biAqIDJ9JHt1fWAsXG4gICAgJy0tcmFkaXVzLTJ4bCc6IGAke24gKiAzfSR7dX1gLFxuICAgICctLXJhZGl1cy0zeGwnOiBgJHtuICogNH0ke3V9YCxcbiAgICAnLS1yYWRpdXMtZnVsbCc6ICc5OTk5cHgnLFxuICB9O1xufVxuXG4vKiogT3B0aW9uYWwgdHlwb2dyYXBoeSBzdGFja3MgZm9yIHRoZSB0aGVtZSBnZW5lcmF0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvbnRUb2tlbnMge1xuICBzYW5zPzogc3RyaW5nO1xuICBzZXJpZj86IHN0cmluZztcbiAgbW9ubz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYDpyb290YCArIGAuZGFya2AgQ1NTIGN1c3RvbS1wcm9wZXJ0eSBibG9jayBmb3IgYSBwcmltYXJ5IGNvbG9yXG4gKiAoZnVsbCA1MOKAkzkwMCByYW1wLCBjb250cmFzdCBmb3JlZ3JvdW5kLCBmb2N1cyByaW5nLCBhbmQgcmFkaXVzIHNjYWxlKS4gVGhpcyBpc1xuICogdGhlIHRoZW1lLWdlbmVyYXRvciBlbmdpbmUg4oCUIGlkZW50aWNhbCB0byB3aGF0IGBUaGVtZVNlcnZpY2VgIGluamVjdHMgYXQgcnVudGltZSxcbiAqIGFuZCBzdWl0YWJsZSBmb3IgZW1pdHRpbmcgYSBjb3B5LXBhc3RlIGJsb2NrIGEgY29uc3VtZXIgY2FuIGNvbW1pdC5cbiAqXG4gKiBQYXNzIGBmb250c2AgdG8gYWxzbyBlbWl0IGAtLWZvbnQtc2Fuc2AgLyBgLS1mb250LXNlcmlmYCAvIGAtLWZvbnQtbW9ub2AgKHRoZXlcbiAqIGRvIG5vdCB2YXJ5IGJldHdlZW4gbGlnaHQgYW5kIGRhcmssIHNvIHRoZXkgbGFuZCBpbiBgOnJvb3RgIG9ubHkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUaGVtZUNzcyhwcmltYXJ5SGV4OiBzdHJpbmcsIHJhZGl1cyA9ICcwLjVyZW0nLCBmb250cz86IEZvbnRUb2tlbnMpOiBzdHJpbmcge1xuICBjb25zdCBiYXNlID0gcmdiVHJpcGxldChwcmltYXJ5SGV4KTtcbiAgY29uc3QgcmluZ0xpZ2h0ID0gcmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgNDApLCAnOTYgMTY1IDI1MCcpO1xuICBjb25zdCByaW5nRGFyayA9IHJnYlRyaXBsZXQobGlnaHRlbkNvbG9yKHByaW1hcnlIZXgsIDIwKSwgJzE0NyAxOTcgMjUzJyk7XG4gIGNvbnN0IGZnID0gY29udHJhc3RUcmlwbGV0KHByaW1hcnlIZXgpO1xuXG4gIGNvbnN0IHNjYWxlID0gcmFkaXVzU2NhbGUocmFkaXVzKTtcbiAgY29uc3QgcmFkaXVzVmFycyA9IHNjYWxlXG4gICAgPyBPYmplY3QuZW50cmllcyhzY2FsZSlcbiAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfTogJHt2fTtgKVxuICAgICAgICAuam9pbignXFxuICAgICAgICAnKVxuICAgIDogYC0tcmFkaXVzOiAke3JhZGl1c307YDtcblxuICBjb25zdCBmb250VmFycyA9IGZvbnRzXG4gICAgPyBbXG4gICAgICAgIGZvbnRzLnNhbnMgPyBgLS1mb250LXNhbnM6ICR7Zm9udHMuc2Fuc307YCA6ICcnLFxuICAgICAgICBmb250cy5zZXJpZiA/IGAtLWZvbnQtc2VyaWY6ICR7Zm9udHMuc2VyaWZ9O2AgOiAnJyxcbiAgICAgICAgZm9udHMubW9ubyA/IGAtLWZvbnQtbW9ubzogJHtmb250cy5tb25vfTtgIDogJycsXG4gICAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJ1xcbiAgICAgICAgJylcbiAgICA6ICcnO1xuXG4gIHJldHVybiBgXG4gICAgICA6cm9vdCB7XG4gICAgICAgIC0tcHJpbWFyeTogJHtiYXNlfTtcbiAgICAgICAgLS1wcmltYXJ5LWZvcmVncm91bmQ6ICR7Zmd9O1xuICAgICAgICAke3JhZGl1c1ZhcnN9JHtmb250VmFycyA/ICdcXG4gICAgICAgICcgKyBmb250VmFycyA6ICcnfVxuICAgICAgICAtLXByaW1hcnktNTA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgOTApKX07XG4gICAgICAgIC0tcHJpbWFyeS0xMDA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgODApKX07XG4gICAgICAgIC0tcHJpbWFyeS0yMDA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgNjApKX07XG4gICAgICAgIC0tcHJpbWFyeS0zMDA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgNDApKX07XG4gICAgICAgIC0tcHJpbWFyeS00MDA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgMjApKX07XG4gICAgICAgIC0tcHJpbWFyeS01MDA6ICR7YmFzZX07XG4gICAgICAgIC0tcHJpbWFyeS02MDA6ICR7cmdiVHJpcGxldChkYXJrZW5Db2xvcihwcmltYXJ5SGV4LCAyMCkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTcwMDogJHtyZ2JUcmlwbGV0KGRhcmtlbkNvbG9yKHByaW1hcnlIZXgsIDQwKSl9O1xuICAgICAgICAtLXByaW1hcnktODAwOiAke3JnYlRyaXBsZXQoZGFya2VuQ29sb3IocHJpbWFyeUhleCwgNjApKX07XG4gICAgICAgIC0tcHJpbWFyeS05MDA6ICR7cmdiVHJpcGxldChkYXJrZW5Db2xvcihwcmltYXJ5SGV4LCA4MCkpfTtcbiAgICAgICAgLS1yaW5nOiAke3JpbmdMaWdodH07XG4gICAgICB9XG5cbiAgICAgIC5kYXJrIHtcbiAgICAgICAgLS1wcmltYXJ5OiAke2Jhc2V9O1xuICAgICAgICAtLXByaW1hcnktZm9yZWdyb3VuZDogJHtmZ307XG4gICAgICAgICR7cmFkaXVzVmFyc31cbiAgICAgICAgLS1wcmltYXJ5LTUwOiAke3JnYlRyaXBsZXQoZGFya2VuQ29sb3IocHJpbWFyeUhleCwgODUpKX07XG4gICAgICAgIC0tcHJpbWFyeS0xMDA6ICR7cmdiVHJpcGxldChkYXJrZW5Db2xvcihwcmltYXJ5SGV4LCA3NSkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTIwMDogJHtyZ2JUcmlwbGV0KGRhcmtlbkNvbG9yKHByaW1hcnlIZXgsIDY1KSl9O1xuICAgICAgICAtLXByaW1hcnktMzAwOiAke3JnYlRyaXBsZXQoZGFya2VuQ29sb3IocHJpbWFyeUhleCwgNTUpKX07XG4gICAgICAgIC0tcHJpbWFyeS00MDA6ICR7cmdiVHJpcGxldChkYXJrZW5Db2xvcihwcmltYXJ5SGV4LCA0NSkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTUwMDogJHtiYXNlfTtcbiAgICAgICAgLS1wcmltYXJ5LTYwMDogJHtyZ2JUcmlwbGV0KGxpZ2h0ZW5Db2xvcihwcmltYXJ5SGV4LCAyMCkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTcwMDogJHtyZ2JUcmlwbGV0KGxpZ2h0ZW5Db2xvcihwcmltYXJ5SGV4LCAzNSkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTgwMDogJHtyZ2JUcmlwbGV0KGxpZ2h0ZW5Db2xvcihwcmltYXJ5SGV4LCA1MCkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTkwMDogJHtyZ2JUcmlwbGV0KGxpZ2h0ZW5Db2xvcihwcmltYXJ5SGV4LCA2NSkpfTtcbiAgICAgICAgLS1yaW5nOiAke3JpbmdEYXJrfTtcbiAgICAgIH1cbiAgICBgO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogQmFzZSAobmV1dHJhbCkgY29sb3IgZmFtaWxpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBUaGUgbmV1dHJhbCBzdXJmYWNlL2ZvcmVncm91bmQgdG9rZW5zIGEgYmFzZSBjb2xvciBkcml2ZXMgKG9uZSBhcHBlYXJhbmNlKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVRva2VucyB7XG4gIGJhY2tncm91bmQ6IHN0cmluZztcbiAgZm9yZWdyb3VuZDogc3RyaW5nO1xuICBjYXJkOiBzdHJpbmc7XG4gIGNhcmRGb3JlZ3JvdW5kOiBzdHJpbmc7XG4gIHBvcG92ZXI6IHN0cmluZztcbiAgcG9wb3ZlckZvcmVncm91bmQ6IHN0cmluZztcbiAgbXV0ZWQ6IHN0cmluZztcbiAgbXV0ZWRGb3JlZ3JvdW5kOiBzdHJpbmc7XG4gIGFjY2VudDogc3RyaW5nO1xuICBhY2NlbnRGb3JlZ3JvdW5kOiBzdHJpbmc7XG4gIHNlY29uZGFyeTogc3RyaW5nO1xuICBzZWNvbmRhcnlGb3JlZ3JvdW5kOiBzdHJpbmc7XG4gIGJvcmRlcjogc3RyaW5nO1xuICBpbnB1dDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VQYWxldHRlIHtcbiAgbGlnaHQ6IEJhc2VUb2tlbnM7XG4gIGRhcms6IEJhc2VUb2tlbnM7XG59XG5cbi8qKiBCdWlsZCBhIGxpZ2h0K2RhcmsgbmV1dHJhbCBwYWxldHRlIGZyb20gYSBUYWlsd2luZC1zdHlsZSBzaGFkZSByYW1wLiAqL1xuZnVuY3Rpb24gbmV1dHJhbFBhbGV0dGUoczogUmVjb3JkPDUwIHwgMTAwIHwgMjAwIHwgNDAwIHwgNTAwIHwgODAwIHwgOTAwIHwgOTUwLCBzdHJpbmc+KTogQmFzZVBhbGV0dGUge1xuICByZXR1cm4ge1xuICAgIGxpZ2h0OiB7XG4gICAgICBiYWNrZ3JvdW5kOiAnMjU1IDI1NSAyNTUnLFxuICAgICAgZm9yZWdyb3VuZDogc1s5NTBdLFxuICAgICAgY2FyZDogJzI1NSAyNTUgMjU1JyxcbiAgICAgIGNhcmRGb3JlZ3JvdW5kOiBzWzk1MF0sXG4gICAgICBwb3BvdmVyOiAnMjU1IDI1NSAyNTUnLFxuICAgICAgcG9wb3ZlckZvcmVncm91bmQ6IHNbOTUwXSxcbiAgICAgIG11dGVkOiBzWzEwMF0sXG4gICAgICBtdXRlZEZvcmVncm91bmQ6IHNbNTAwXSxcbiAgICAgIGFjY2VudDogc1sxMDBdLFxuICAgICAgYWNjZW50Rm9yZWdyb3VuZDogc1s5MDBdLFxuICAgICAgc2Vjb25kYXJ5OiBzWzEwMF0sXG4gICAgICBzZWNvbmRhcnlGb3JlZ3JvdW5kOiBzWzkwMF0sXG4gICAgICBib3JkZXI6IHNbMjAwXSxcbiAgICAgIGlucHV0OiBzWzIwMF0sXG4gICAgfSxcbiAgICBkYXJrOiB7XG4gICAgICBiYWNrZ3JvdW5kOiBzWzk1MF0sXG4gICAgICBmb3JlZ3JvdW5kOiBzWzUwXSxcbiAgICAgIGNhcmQ6IHNbOTUwXSxcbiAgICAgIGNhcmRGb3JlZ3JvdW5kOiBzWzUwXSxcbiAgICAgIHBvcG92ZXI6IHNbOTUwXSxcbiAgICAgIHBvcG92ZXJGb3JlZ3JvdW5kOiBzWzUwXSxcbiAgICAgIG11dGVkOiBzWzgwMF0sXG4gICAgICBtdXRlZEZvcmVncm91bmQ6IHNbNDAwXSxcbiAgICAgIGFjY2VudDogc1s4MDBdLFxuICAgICAgYWNjZW50Rm9yZWdyb3VuZDogc1s1MF0sXG4gICAgICBzZWNvbmRhcnk6IHNbODAwXSxcbiAgICAgIHNlY29uZGFyeUZvcmVncm91bmQ6IHNbNTBdLFxuICAgICAgYm9yZGVyOiBzWzgwMF0sXG4gICAgICBpbnB1dDogc1s4MDBdLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogTmV1dHJhbCBiYXNlLWNvbG9yIGZhbWlsaWVzIChSR0IgdHJpcGxldHMpLCBtYXRjaGluZyBUYWlsd2luZCdzIFppbmMgLyBTbGF0ZSAvXG4gKiBHcmF5IC8gTmV1dHJhbCAvIFN0b25lIHJhbXBzLiBgemluY2AgcmVwcm9kdWNlcyB0aGUgbGlicmFyeSdzIHNoaXBwZWQgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBCQVNFX1BBTEVUVEVTOiBSZWNvcmQ8c3RyaW5nLCBCYXNlUGFsZXR0ZT4gPSB7XG4gIHppbmM6IG5ldXRyYWxQYWxldHRlKHsgNTA6ICcyNTAgMjUwIDI1MCcsIDEwMDogJzI0NCAyNDQgMjQ1JywgMjAwOiAnMjI4IDIyOCAyMzEnLCA0MDA6ICcxNjEgMTYxIDE3MCcsIDUwMDogJzExMyAxMTMgMTIyJywgODAwOiAnMzkgMzkgNDInLCA5MDA6ICcyNCAyNCAyNycsIDk1MDogJzkgOSAxMScgfSksXG4gIHNsYXRlOiBuZXV0cmFsUGFsZXR0ZSh7IDUwOiAnMjQ4IDI1MCAyNTInLCAxMDA6ICcyNDEgMjQ1IDI0OScsIDIwMDogJzIyNiAyMzIgMjQwJywgNDAwOiAnMTQ4IDE2MyAxODQnLCA1MDA6ICcxMDAgMTE2IDEzOScsIDgwMDogJzMwIDQxIDU5JywgOTAwOiAnMTUgMjMgNDInLCA5NTA6ICcyIDYgMjMnIH0pLFxuICBncmF5OiBuZXV0cmFsUGFsZXR0ZSh7IDUwOiAnMjQ5IDI1MCAyNTEnLCAxMDA6ICcyNDMgMjQ0IDI0NicsIDIwMDogJzIyOSAyMzEgMjM1JywgNDAwOiAnMTU2IDE2MyAxNzUnLCA1MDA6ICcxMDcgMTE0IDEyOCcsIDgwMDogJzMxIDQxIDU1JywgOTAwOiAnMTcgMjQgMzknLCA5NTA6ICczIDcgMTgnIH0pLFxuICBuZXV0cmFsOiBuZXV0cmFsUGFsZXR0ZSh7IDUwOiAnMjUwIDI1MCAyNTAnLCAxMDA6ICcyNDUgMjQ1IDI0NScsIDIwMDogJzIyOSAyMjkgMjI5JywgNDAwOiAnMTYzIDE2MyAxNjMnLCA1MDA6ICcxMTUgMTE1IDExNScsIDgwMDogJzM4IDM4IDM4JywgOTAwOiAnMjMgMjMgMjMnLCA5NTA6ICcxMCAxMCAxMCcgfSksXG4gIHN0b25lOiBuZXV0cmFsUGFsZXR0ZSh7IDUwOiAnMjUwIDI1MCAyNDknLCAxMDA6ICcyNDUgMjQ1IDI0NCcsIDIwMDogJzIzMSAyMjkgMjI4JywgNDAwOiAnMTY4IDE2MiAxNTgnLCA1MDA6ICcxMjAgMTEzIDEwOCcsIDgwMDogJzQxIDM3IDM2JywgOTAwOiAnMjggMjUgMjMnLCA5NTA6ICcxMiAxMCA5JyB9KSxcbn07XG5cbmZ1bmN0aW9uIGJhc2VUb2tlbkJsb2NrKHQ6IEJhc2VUb2tlbnMpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoe1xuICAgICctLWJhY2tncm91bmQnOiB0LmJhY2tncm91bmQsXG4gICAgJy0tZm9yZWdyb3VuZCc6IHQuZm9yZWdyb3VuZCxcbiAgICAnLS1jYXJkJzogdC5jYXJkLFxuICAgICctLWNhcmQtZm9yZWdyb3VuZCc6IHQuY2FyZEZvcmVncm91bmQsXG4gICAgJy0tcG9wb3Zlcic6IHQucG9wb3ZlcixcbiAgICAnLS1wb3BvdmVyLWZvcmVncm91bmQnOiB0LnBvcG92ZXJGb3JlZ3JvdW5kLFxuICAgICctLW11dGVkJzogdC5tdXRlZCxcbiAgICAnLS1tdXRlZC1mb3JlZ3JvdW5kJzogdC5tdXRlZEZvcmVncm91bmQsXG4gICAgJy0tYWNjZW50JzogdC5hY2NlbnQsXG4gICAgJy0tYWNjZW50LWZvcmVncm91bmQnOiB0LmFjY2VudEZvcmVncm91bmQsXG4gICAgJy0tc2Vjb25kYXJ5JzogdC5zZWNvbmRhcnksXG4gICAgJy0tc2Vjb25kYXJ5LWZvcmVncm91bmQnOiB0LnNlY29uZGFyeUZvcmVncm91bmQsXG4gICAgJy0tYm9yZGVyJzogdC5ib3JkZXIsXG4gICAgJy0taW5wdXQnOiB0LmlucHV0LFxuICB9KVxuICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a306ICR7dn07YClcbiAgICAuam9pbignXFxuICAgICAgICAnKTtcbn1cblxuLyoqIEVtaXQgdGhlIGA6cm9vdGAgKyBgLmRhcmtgIG5ldXRyYWwtdG9rZW4gYmxvY2sgZm9yIGEgYmFzZSBjb2xvciBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUJhc2VDc3MoYmFzZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwID0gQkFTRV9QQUxFVFRFU1tiYXNlSWRdID8/IEJBU0VfUEFMRVRURVNbJ3ppbmMnXTtcbiAgcmV0dXJuIGBcbiAgICAgIDpyb290IHtcbiAgICAgICAgJHtiYXNlVG9rZW5CbG9jayhwLmxpZ2h0KX1cbiAgICAgIH1cblxuICAgICAgLmRhcmsge1xuICAgICAgICAke2Jhc2VUb2tlbkJsb2NrKHAuZGFyayl9XG4gICAgICB9XG4gICAgYDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qIENoYXJ0IHBhbGV0dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIERlcml2ZSA1IGhhcm1vbmlvdXMgY2hhcnQgY29sb3JzIGZyb20gb25lIGJhc2UgaGV4IOKAlCB0aGUgYmFzZSBodWUgcGx1c1xuICogYW5hbG9nb3VzIGh1ZXMgYXQgwrEzMMKwL8KxNjDCsCwgd2l0aCBwYWlyZWQgbGlnaHRuZXNzIHNoaWZ0cyBmb3Igc2VwYXJhdGlvbi5cbiAqIFJldHVybnMgUkdCIHRyaXBsZXRzIGZvciBgLS1jaGFydC0xYOKApmAtLWNoYXJ0LTVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDaGFydFJhbXAoaGV4OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGhzbCA9IGhleFRvSHNsKGhleCkgPz8geyBoOiAyMjAsIHM6IDcwLCBsOiA1NSB9O1xuICBjb25zdCBkZWZzID0gW1xuICAgIHsgZGg6IDAsIHM6IGhzbC5zLCBsOiBoc2wubCB9LFxuICAgIHsgZGg6IDMyLCBzOiBoc2wucyAqIDAuOSwgbDogY2xhbXAoaHNsLmwgKyA4LCAzMiwgNzQpIH0sXG4gICAgeyBkaDogLTI4LCBzOiBoc2wucyAqIDAuOTUsIGw6IGNsYW1wKGhzbC5sIC0gOCwgMjgsIDcwKSB9LFxuICAgIHsgZGg6IDY0LCBzOiBoc2wucyAqIDAuODIsIGw6IGNsYW1wKGhzbC5sICsgMTUsIDM4LCA4MCkgfSxcbiAgICB7IGRoOiAtNTgsIHM6IGhzbC5zLCBsOiBjbGFtcChoc2wubCAtIDE2LCAyNCwgNjYpIH0sXG4gIF07XG4gIHJldHVybiBkZWZzLm1hcCgoZCkgPT4gcmdiVHJpcGxldChoc2xUb0hleChoc2wuaCArIGQuZGgsIGNsYW1wKGQucywgMjQsIDkyKSwgZC5sKSkpO1xufVxuXG4vKiogRW1pdCB0aGUgYDpyb290YCArIGAuZGFya2AgYC0tY2hhcnQtMeKApjVgIGJsb2NrIGZvciBhIGNoYXJ0IGJhc2UgY29sb3IuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDaGFydENzcyhoZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJhbXAgPSBnZW5lcmF0ZUNoYXJ0UmFtcChoZXgpO1xuICBjb25zdCB2YXJzID0gcmFtcC5tYXAoKHQsIGkpID0+IGAtLWNoYXJ0LSR7aSArIDF9OiAke3R9O2ApLmpvaW4oJ1xcbiAgICAgICAgJyk7XG4gIHJldHVybiBgXG4gICAgICA6cm9vdCB7XG4gICAgICAgICR7dmFyc31cbiAgICAgIH1cblxuICAgICAgLmRhcmsge1xuICAgICAgICAke3ZhcnN9XG4gICAgICB9XG4gICAgYDtcbn1cbiJdfQ==
445
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL3V0aWxzL2NvbG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQVFILHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVc7SUFDbEMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25CLE9BQU87WUFDTCxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUM3QixDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuQixPQUFPO1lBQ0wsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxtRkFBbUY7QUFDbkYsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFXLEVBQUUsUUFBUSxHQUFHLFdBQVc7SUFDNUQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN2RCxDQUFDO0FBRUQsdUVBQXVFO0FBQ3ZFLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQzFDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzNCLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDeEUsT0FBTyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNqRCxDQUFDO0FBRUQscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBVztJQUN6QyxPQUFPLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsNkRBQTZEO0FBQzdELE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVyxFQUFFLE9BQWU7SUFDdkQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDckIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxDQUFTLEVBQUUsR0FBVyxFQUFFLEdBQVc7SUFDaEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFRRCw2RUFBNkU7QUFDN0UsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFXO0lBQ2xDLE1BQU0sR0FBRyxH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QUM7SUFDNUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQVcsRUFBRSxPQUFlO0lBQ3RELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3JCLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE9BQU8sSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ25ILENBQUM7QUFFRCxxRkFBcUY7QUFDckYsTUFBTSxV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QUFDLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM1RCxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzVELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ2hFLE9BQU87UUFDTCxDQUFDLEVBQUUsWUFBWSxHQUFHLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDO1FBQ3hELENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdB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LEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO1lBQ2xCLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFO1lBQ3BCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFO1NBQ3BCLENBQUM7SUFFUixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNwQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQzFDLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBc0IsRUFBRSxFQUFFLENBQ3RDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7U0FDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV4QixPQUFPOztVQUVDLElBQUksQ0FBQyxPQUFPLENBQUM7Ozs7VUFJYixJQUFJLENBQUMsTUFBTSxDQUFDOztLQUVqQixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVyZSBjb2xvciArIHRoZW1lLXRva2VuIG1hdGggZm9yIFRvbGxlIFVJLlxuICpcbiAqIEZyYW1ld29yay0gYW5kIERPTS1mcmVlIHNvIGl0IGNhbiBiYWNrIGJvdGggdGhlIHJ1bnRpbWUgYFRoZW1lU2VydmljZWAgYW5kIGFcbiAqIGJ1aWxkLXRpbWUgdGhlbWUgZ2VuZXJhdG9yICh0aGUgc2hhZGNuLXN0eWxlIFwiY29weSB0aGlzIENTUyBibG9ja1wiIGZsb3cpLCBhbmRcbiAqIHRvIGNlbnRyYWxpemUgdGhlIG1hdGggYWhlYWQgb2YgYSBmdXR1cmUgb2tsY2ggbWlncmF0aW9uLiBObyBzaWRlIGVmZmVjdHMuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBSZ2Ige1xuICByOiBudW1iZXI7XG4gIGc6IG51bWJlcjtcbiAgYjogbnVtYmVyO1xufVxuXG4vKiogUGFyc2UgYSAjUkdCIG9yICNSUkdHQkIgaGV4IHN0cmluZyB0byBSR0IsIG9yIG51bGwgaWYgbWFsZm9ybWVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFRvUmdiKGhleDogc3RyaW5nKTogUmdiIHwgbnVsbCB7XG4gIGNvbnN0IGMgPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgaWYgKGMubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHBhcnNlSW50KGNbMF0gKyBjWzBdLCAxNiksXG4gICAgICBnOiBwYXJzZUludChjWzFdICsgY1sxXSwgMTYpLFxuICAgICAgYjogcGFyc2VJbnQoY1syXSArIGNbMl0sIDE2KSxcbiAgICB9O1xuICB9XG4gIGlmIChjLmxlbmd0aCA9PT0gNikge1xuICAgIHJldHVybiB7XG4gICAgICByOiBwYXJzZUludChjLnN1YnN0cmluZygwLCAyKSwgMTYpLFxuICAgICAgZzogcGFyc2VJbnQoYy5zdWJzdHJpbmcoMiwgNCksIDE2KSxcbiAgICAgIGI6IHBhcnNlSW50KGMuc3Vic3RyaW5nKDQsIDYpLCAxNiksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIFNwYWNlLXNlcGFyYXRlZCBSR0IgdHJpcGxldCBmb3IgYSBoZXggY29sb3IgKFRhaWx3aW5kIGA8YWxwaGEtdmFsdWU+YCBmb3JtKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZ2JUcmlwbGV0KGhleDogc3RyaW5nLCBmYWxsYmFjayA9ICczNyA5OSAyMzUnKTogc3RyaW5nIHtcbiAgY29uc3QgcmdiID0gaGV4VG9SZ2IoaGV4KTtcbiAgcmV0dXJuIHJnYiA/IGAke3JnYi5yfSAke3JnYi5nfSAke3JnYi5ifWAgOiBmYWxsYmFjaztcbn1cblxuLyoqIEJsYWNrIG9yIHdoaXRlLCB3aGljaGV2ZXIgY29udHJhc3RzIGJldHRlciB3aXRoIHRoZSBnaXZlbiBjb2xvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cmFzdENvbG9yKGhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmdiID0gaGV4VG9SZ2IoaGV4KTtcbiAgaWYgKCFyZ2IpIHJldHVybiAnI2ZmZmZmZic7XG4gIGNvbnN0IGx1bWluYW5jZSA9ICgwLjI5OSAqIHJnYi5yICsgMC41ODcgKiByZ2IuZyArIDAuMTE0ICogcmdiLmIpIC8gMjU1O1xuICByZXR1cm4gbHVtaW5hbmNlID4gMC41ID8gJyMwMDAwMDAnIDogJyNmZmZmZmYnO1xufVxuXG4vKiogQ29udHJhc3QgY29sb3IgYXMgYW4gUkdCIHRyaXBsZXQgKGZvciBgLS1wcmltYXJ5LWZvcmVncm91bmRgKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cmFzdFRyaXBsZXQoaGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmdiVHJpcGxldChnZXRDb250cmFzdENvbG9yKGhleCksICcyNTUgMjU1IDI1NScpO1xufVxuXG4vKiogTGlnaHRlbiBhIGhleCBjb2xvciB0b3dhcmQgd2hpdGUgYnkgYHBlcmNlbnRgICgw4oCTMTAwKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaWdodGVuQ29sb3IoaGV4OiBzdHJpbmcsIHBlcmNlbnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHJnYiA9IGhleFRvUmdiKGhleCk7XG4gIGlmICghcmdiKSByZXR1cm4gaGV4O1xuICBjb25zdCByID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKHJnYi5yICsgKDI1NSAtIHJnYi5yKSAqIChwZXJjZW50IC8gMTAwKSkpO1xuICBjb25zdCBnID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKHJnYi5nICsgKDI1NSAtIHJnYi5nKSAqIChwZXJjZW50IC8gMTAwKSkpO1xuICBjb25zdCBiID0gTWF0aC5taW4oMjU1LCBNYXRoLmZsb29yKHJnYi5iICsgKDI1NSAtIHJnYi5iKSAqIChwZXJjZW50IC8gMTAwKSkpO1xuICByZXR1cm4gYCMkeygoMSA8PCAyNCkgKyAociA8PCAxNikgKyAoZyA8PCA4KSArIGIpLnRvU3RyaW5nKDE2KS5zbGljZSgxKX1gO1xufVxuXG5mdW5jdGlvbiBjbGFtcChuOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgbikpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhzbCB7XG4gIGg6IG51bWJlcjtcbiAgczogbnVtYmVyO1xuICBsOiBudW1iZXI7XG59XG5cbi8qKiBDb252ZXJ0IGEgaGV4IGNvbG9yIHRvIEhTTCAoaCAw4oCTMzYwLCBzL2wgMOKAkzEwMCksIG9yIG51bGwgaWYgbWFsZm9ybWVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhleFRvSHNsKGhleDogc3RyaW5nKTogSHNsIHwgbnVsbCB7XG4gIGNvbnN0IHJnYiA9IGhleFRvUmdiKGhleCk7XG4gIGlmICghcmdiKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgciA9IHJnYi5yIC8gMjU1LFxuICAgIGcgPSByZ2IuZyAvIDI1NSxcbiAgICBiID0gcmdiLmIgLyAyNTU7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICBsZXQgaCA9IDA7XG4gIGxldCBzID0gMDtcbiAgY29uc3QgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKG1heCAhPT0gbWluKSB7XG4gICAgY29uc3QgZCA9IG1heCAtIG1pbjtcbiAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgc3dpdGNoIChtYXgpIHtcbiAgICAgIGNhc2UgcjpcbiAgICAgICAgaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZzpcbiAgICAgICAgaCA9IChiIC0gcikgLyBkICsgMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBoID0gKHIgLSBnKSAvIGQgKyA0O1xuICAgIH1cbiAgICBoIC89IDY7XG4gIH1cbiAgcmV0dXJuIHsgaDogaCAqIDM2MCwgczogcyAqIDEwMCwgbDogbCAqIDEwMCB9O1xufVxuXG4vKiogQ29udmVydCBIU0wgKGggMOKAkzM2MCwgcy9sIDDigJMxMDApIHRvIGEgI1JSR0dCQiBoZXggc3RyaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhzbFRvSGV4KGg6IG51bWJlciwgczogbnVtYmVyLCBsOiBudW1iZXIpOiBzdHJpbmcge1xuICBoID0gKChoICUgMzYwKSArIDM2MCkgJSAzNjAgLyAzNjA7XG4gIHMgPSBjbGFtcChzLCAwLCAxMDApIC8gMTAwO1xuICBsID0gY2xhbXAobCwgMCwgMTAwKSAvIDEwMDtcbiAgY29uc3QgaHVlMnJnYiA9IChwOiBudW1iZXIsIHE6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHQgPCAwKSB0ICs9IDE7XG4gICAgaWYgKHQgPiAxKSB0IC09IDE7XG4gICAgaWYgKHQgPCAxIC8gNikgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHQ7XG4gICAgaWYgKHQgPCAxIC8gMikgcmV0dXJuIHE7XG4gICAgaWYgKHQgPCAyIC8gMykgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xuICAgIHJldHVybiBwO1xuICB9O1xuICBsZXQgcjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcjtcbiAgaWYgKHMgPT09IDApIHtcbiAgICByID0gZyA9IGIgPSBsO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHEgPSBsIDwgMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzO1xuICAgIGNvbnN0IHAgPSAyICogbCAtIHE7XG4gICAgciA9IGh1ZTJyZ2IocCwgcSwgaCArIDEgLyAzKTtcbiAgICBnID0gaHVlMnJnYihwLCBxLCBoKTtcbiAgICBiID0gaHVlMnJnYihwLCBxLCBoIC0gMSAvIDMpO1xuICB9XG4gIGNvbnN0IHRvID0gKHg6IG51bWJlcikgPT4gTWF0aC5yb3VuZCh4ICogMjU1KS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKTtcbiAgcmV0dXJuIGAjJHt0byhyKX0ke3RvKGcpfSR7dG8oYil9YDtcbn1cblxuLyoqIERhcmtlbiBhIGhleCBjb2xvciB0b3dhcmQgYmxhY2sgYnkgYHBlcmNlbnRgICgw4oCTMTAwKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXJrZW5Db2xvcihoZXg6IHN0cmluZywgcGVyY2VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgcmdiID0gaGV4VG9SZ2IoaGV4KTtcbiAgaWYgKCFyZ2IpIHJldHVybiBoZXg7XG4gIGNvbnN0IGZhY3RvciA9IDEgLSBwZXJjZW50IC8gMTAwO1xuICBjb25zdCByID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihyZ2IuciAqIGZhY3RvcikpO1xuICBjb25zdCBnID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihyZ2IuZyAqIGZhY3RvcikpO1xuICBjb25zdCBiID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihyZ2IuYiAqIGZhY3RvcikpO1xuICByZXR1cm4gYCMke3IudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyl9JHtnLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpfSR7Yi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKX1gO1xufVxuXG4vKiogRGVyaXZlZCByYWRpdXMgc2NhbGUgZnJvbSBhIGJhc2UgcmFkaXVzIChlLmcuICcwLjVyZW0nKSwgb3IgbnVsbCBpZiBtYWxmb3JtZWQuICovXG5leHBvcnQgZnVuY3Rpb24gcmFkaXVzU2NhbGUocmFkaXVzOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCB7XG4gIGNvbnN0IG0gPSByYWRpdXMubWF0Y2goL14oXFxkKlxcLj9cXGQrKShbYS16XSt8JSkkLyk7XG4gIGlmICghbSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IG4gPSBwYXJzZUZsb2F0KG1bMV0pO1xuICBjb25zdCB1ID0gbVsyXTtcbiAgcmV0dXJuIHtcbiAgICAnLS1yYWRpdXMnOiByYWRpdXMsXG4gICAgJy0tcmFkaXVzLXNtJzogYCR7biAqIDAuNX0ke3V9YCxcbiAgICAnLS1yYWRpdXMtbWQnOiBgJHtufSR7dX1gLFxuICAgICctLXJhZGl1cy1sZyc6IGAke24gKiAxLjV9JHt1fWAsXG4gICAgJy0tcmFkaXVzLXhsJzogYCR7biAqIDJ9JHt1fWAsXG4gICAgJy0tcmFkaXVzLTJ4bCc6IGAke24gKiAzfSR7dX1gLFxuICAgICctLXJhZGl1cy0zeGwnOiBgJHtuICogNH0ke3V9YCxcbiAgICAnLS1yYWRpdXMtZnVsbCc6ICc5OTk5cHgnLFxuICB9O1xufVxuXG4vKiogT3B0aW9uYWwgdHlwb2dyYXBoeSBzdGFja3MgZm9yIHRoZSB0aGVtZSBnZW5lcmF0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvbnRUb2tlbnMge1xuICBzYW5zPzogc3RyaW5nO1xuICBzZXJpZj86IHN0cmluZztcbiAgbW9ubz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYDpyb290YCArIGAuZGFya2AgQ1NTIGN1c3RvbS1wcm9wZXJ0eSBibG9jayBmb3IgYSBwcmltYXJ5IGNvbG9yXG4gKiAoZnVsbCA1MOKAkzkwMCByYW1wLCBjb250cmFzdCBmb3JlZ3JvdW5kLCBmb2N1cyByaW5nLCBhbmQgcmFkaXVzIHNjYWxlKS4gVGhpcyBpc1xuICogdGhlIHRoZW1lLWdlbmVyYXRvciBlbmdpbmUg4oCUIGlkZW50aWNhbCB0byB3aGF0IGBUaGVtZVNlcnZpY2VgIGluamVjdHMgYXQgcnVudGltZSxcbiAqIGFuZCBzdWl0YWJsZSBmb3IgZW1pdHRpbmcgYSBjb3B5LXBhc3RlIGJsb2NrIGEgY29uc3VtZXIgY2FuIGNvbW1pdC5cbiAqXG4gKiBQYXNzIGBmb250c2AgdG8gYWxzbyBlbWl0IGAtLWZvbnQtc2Fuc2AgLyBgLS1mb250LXNlcmlmYCAvIGAtLWZvbnQtbW9ub2AgKHRoZXlcbiAqIGRvIG5vdCB2YXJ5IGJldHdlZW4gbGlnaHQgYW5kIGRhcmssIHNvIHRoZXkgbGFuZCBpbiBgOnJvb3RgIG9ubHkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUaGVtZUNzcyhwcmltYXJ5SGV4OiBzdHJpbmcsIHJhZGl1cyA9ICcwLjVyZW0nLCBmb250cz86IEZvbnRUb2tlbnMpOiBzdHJpbmcge1xuICBjb25zdCBiYXNlID0gcmdiVHJpcGxldChwcmltYXJ5SGV4KTtcbiAgY29uc3QgcmluZ0xpZ2h0ID0gcmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgNDApLCAnOTYgMTY1IDI1MCcpO1xuICBjb25zdCByaW5nRGFyayA9IHJnYlRyaXBsZXQobGlnaHRlbkNvbG9yKHByaW1hcnlIZXgsIDIwKSwgJzE0NyAxOTcgMjUzJyk7XG4gIGNvbnN0IGZnID0gY29udHJhc3RUcmlwbGV0KHByaW1hcnlIZXgpO1xuXG4gIGNvbnN0IHNjYWxlID0gcmFkaXVzU2NhbGUocmFkaXVzKTtcbiAgY29uc3QgcmFkaXVzVmFycyA9IHNjYWxlXG4gICAgPyBPYmplY3QuZW50cmllcyhzY2FsZSlcbiAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfTogJHt2fTtgKVxuICAgICAgICAuam9pbignXFxuICAgICAgICAnKVxuICAgIDogYC0tcmFkaXVzOiAke3JhZGl1c307YDtcblxuICBjb25zdCBmb250VmFycyA9IGZvbnRzXG4gICAgPyBbXG4gICAgICAgIGZvbnRzLnNhbnMgPyBgLS1mb250LXNhbnM6ICR7Zm9udHMuc2Fuc307YCA6ICcnLFxuICAgICAgICBmb250cy5zZXJpZiA/IGAtLWZvbnQtc2VyaWY6ICR7Zm9udHMuc2VyaWZ9O2AgOiAnJyxcbiAgICAgICAgZm9udHMubW9ubyA/IGAtLWZvbnQtbW9ubzogJHtmb250cy5tb25vfTtgIDogJycsXG4gICAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJ1xcbiAgICAgICAgJylcbiAgICA6ICcnO1xuXG4gIHJldHVybiBgXG4gICAgICA6cm9vdCB7XG4gICAgICAgIC0tcHJpbWFyeTogJHtiYXNlfTtcbiAgICAgICAgLS1wcmltYXJ5LWZvcmVncm91bmQ6ICR7Zmd9O1xuICAgICAgICAke3JhZGl1c1ZhcnN9JHtmb250VmFycyA/ICdcXG4gICAgICAgICcgKyBmb250VmFycyA6ICcnfVxuICAgICAgICAtLXByaW1hcnktNTA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgOTApKX07XG4gICAgICAgIC0tcHJpbWFyeS0xMDA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgODApKX07XG4gICAgICAgIC0tcHJpbWFyeS0yMDA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgNjApKX07XG4gICAgICAgIC0tcHJpbWFyeS0zMDA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgNDApKX07XG4gICAgICAgIC0tcHJpbWFyeS00MDA6ICR7cmdiVHJpcGxldChsaWdodGVuQ29sb3IocHJpbWFyeUhleCwgMjApKX07XG4gICAgICAgIC0tcHJpbWFyeS01MDA6ICR7YmFzZX07XG4gICAgICAgIC0tcHJpbWFyeS02MDA6ICR7cmdiVHJpcGxldChkYXJrZW5Db2xvcihwcmltYXJ5SGV4LCAyMCkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTcwMDogJHtyZ2JUcmlwbGV0KGRhcmtlbkNvbG9yKHByaW1hcnlIZXgsIDQwKSl9O1xuICAgICAgICAtLXByaW1hcnktODAwOiAke3JnYlRyaXBsZXQoZGFya2VuQ29sb3IocHJpbWFyeUhleCwgNjApKX07XG4gICAgICAgIC0tcHJpbWFyeS05MDA6ICR7cmdiVHJpcGxldChkYXJrZW5Db2xvcihwcmltYXJ5SGV4LCA4MCkpfTtcbiAgICAgICAgLS1yaW5nOiAke3JpbmdMaWdodH07XG4gICAgICB9XG5cbiAgICAgIC5kYXJrIHtcbiAgICAgICAgLS1wcmltYXJ5OiAke2Jhc2V9O1xuICAgICAgICAtLXByaW1hcnktZm9yZWdyb3VuZDogJHtmZ307XG4gICAgICAgICR7cmFkaXVzVmFyc31cbiAgICAgICAgLS1wcmltYXJ5LTUwOiAke3JnYlRyaXBsZXQoZGFya2VuQ29sb3IocHJpbWFyeUhleCwgODUpKX07XG4gICAgICAgIC0tcHJpbWFyeS0xMDA6ICR7cmdiVHJpcGxldChkYXJrZW5Db2xvcihwcmltYXJ5SGV4LCA3NSkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTIwMDogJHtyZ2JUcmlwbGV0KGRhcmtlbkNvbG9yKHByaW1hcnlIZXgsIDY1KSl9O1xuICAgICAgICAtLXByaW1hcnktMzAwOiAke3JnYlRyaXBsZXQoZGFya2VuQ29sb3IocHJpbWFyeUhleCwgNTUpKX07XG4gICAgICAgIC0tcHJpbWFyeS00MDA6ICR7cmdiVHJpcGxldChkYXJrZW5Db2xvcihwcmltYXJ5SGV4LCA0NSkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTUwMDogJHtiYXNlfTtcbiAgICAgICAgLS1wcmltYXJ5LTYwMDogJHtyZ2JUcmlwbGV0KGxpZ2h0ZW5Db2xvcihwcmltYXJ5SGV4LCAyMCkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTcwMDogJHtyZ2JUcmlwbGV0KGxpZ2h0ZW5Db2xvcihwcmltYXJ5SGV4LCAzNSkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTgwMDogJHtyZ2JUcmlwbGV0KGxpZ2h0ZW5Db2xvcihwcmltYXJ5SGV4LCA1MCkpfTtcbiAgICAgICAgLS1wcmltYXJ5LTkwMDogJHtyZ2JUcmlwbGV0KGxpZ2h0ZW5Db2xvcihwcmltYXJ5SGV4LCA2NSkpfTtcbiAgICAgICAgLS1yaW5nOiAke3JpbmdEYXJrfTtcbiAgICAgIH1cbiAgICBgO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogQmFzZSAobmV1dHJhbCkgY29sb3IgZmFtaWxpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBUaGUgbmV1dHJhbCBzdXJmYWNlL2ZvcmVncm91bmQgdG9rZW5zIGEgYmFzZSBjb2xvciBkcml2ZXMgKG9uZSBhcHBlYXJhbmNlKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVRva2VucyB7XG4gIGJhY2tncm91bmQ6IHN0cmluZztcbiAgZm9yZWdyb3VuZDogc3RyaW5nO1xuICBjYXJkOiBzdHJpbmc7XG4gIGNhcmRGb3JlZ3JvdW5kOiBzdHJpbmc7XG4gIHBvcG92ZXI6IHN0cmluZztcbiAgcG9wb3ZlckZvcmVncm91bmQ6IHN0cmluZztcbiAgbXV0ZWQ6IHN0cmluZztcbiAgbXV0ZWRGb3JlZ3JvdW5kOiBzdHJpbmc7XG4gIGFjY2VudDogc3RyaW5nO1xuICBhY2NlbnRGb3JlZ3JvdW5kOiBzdHJpbmc7XG4gIHNlY29uZGFyeTogc3RyaW5nO1xuICBzZWNvbmRhcnlGb3JlZ3JvdW5kOiBzdHJpbmc7XG4gIGJvcmRlcjogc3RyaW5nO1xuICBpbnB1dDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VQYWxldHRlIHtcbiAgbGlnaHQ6IEJhc2VUb2tlbnM7XG4gIGRhcms6IEJhc2VUb2tlbnM7XG59XG5cbi8qKiBCdWlsZCBhIGxpZ2h0K2RhcmsgbmV1dHJhbCBwYWxldHRlIGZyb20gYSBUYWlsd2luZC1zdHlsZSBzaGFkZSByYW1wLiAqL1xuZnVuY3Rpb24gbmV1dHJhbFBhbGV0dGUoczogUmVjb3JkPDUwIHwgMTAwIHwgMjAwIHwgNDAwIHwgNTAwIHwgODAwIHwgOTAwIHwgOTUwLCBzdHJpbmc+KTogQmFzZVBhbGV0dGUge1xuICByZXR1cm4ge1xuICAgIGxpZ2h0OiB7XG4gICAgICBiYWNrZ3JvdW5kOiAnMjU1IDI1NSAyNTUnLFxuICAgICAgZm9yZWdyb3VuZDogc1s5NTBdLFxuICAgICAgY2FyZDogJzI1NSAyNTUgMjU1JyxcbiAgICAgIGNhcmRGb3JlZ3JvdW5kOiBzWzk1MF0sXG4gICAgICBwb3BvdmVyOiAnMjU1IDI1NSAyNTUnLFxuICAgICAgcG9wb3ZlckZvcmVncm91bmQ6IHNbOTUwXSxcbiAgICAgIG11dGVkOiBzWzEwMF0sXG4gICAgICBtdXRlZEZvcmVncm91bmQ6IHNbNTAwXSxcbiAgICAgIGFjY2VudDogc1sxMDBdLFxuICAgICAgYWNjZW50Rm9yZWdyb3VuZDogc1s5MDBdLFxuICAgICAgc2Vjb25kYXJ5OiBzWzEwMF0sXG4gICAgICBzZWNvbmRhcnlGb3JlZ3JvdW5kOiBzWzkwMF0sXG4gICAgICBib3JkZXI6IHNbMjAwXSxcbiAgICAgIGlucHV0OiBzWzIwMF0sXG4gICAgfSxcbiAgICBkYXJrOiB7XG4gICAgICBiYWNrZ3JvdW5kOiBzWzk1MF0sXG4gICAgICBmb3JlZ3JvdW5kOiBzWzUwXSxcbiAgICAgIGNhcmQ6IHNbOTUwXSxcbiAgICAgIGNhcmRGb3JlZ3JvdW5kOiBzWzUwXSxcbiAgICAgIHBvcG92ZXI6IHNbOTUwXSxcbiAgICAgIHBvcG92ZXJGb3JlZ3JvdW5kOiBzWzUwXSxcbiAgICAgIG11dGVkOiBzWzgwMF0sXG4gICAgICBtdXRlZEZvcmVncm91bmQ6IHNbNDAwXSxcbiAgICAgIGFjY2VudDogc1s4MDBdLFxuICAgICAgYWNjZW50Rm9yZWdyb3VuZDogc1s1MF0sXG4gICAgICBzZWNvbmRhcnk6IHNbODAwXSxcbiAgICAgIHNlY29uZGFyeUZvcmVncm91bmQ6IHNbNTBdLFxuICAgICAgYm9yZGVyOiBzWzgwMF0sXG4gICAgICBpbnB1dDogc1s4MDBdLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogTmV1dHJhbCBiYXNlLWNvbG9yIGZhbWlsaWVzIChSR0IgdHJpcGxldHMpLCBtYXRjaGluZyBUYWlsd2luZCdzIFppbmMgLyBTbGF0ZSAvXG4gKiBHcmF5IC8gTmV1dHJhbCAvIFN0b25lIHJhbXBzLiBgemluY2AgcmVwcm9kdWNlcyB0aGUgbGlicmFyeSdzIHNoaXBwZWQgZGVmYXVsdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBCQVNFX1BBTEVUVEVTOiBSZWNvcmQ8c3RyaW5nLCBCYXNlUGFsZXR0ZT4gPSB7XG4gIHppbmM6IG5ldXRyYWxQYWxldHRlKHsgNTA6ICcyNTAgMjUwIDI1MCcsIDEwMDogJzI0NCAyNDQgMjQ1JywgMjAwOiAnMjI4IDIyOCAyMzEnLCA0MDA6ICcxNjEgMTYxIDE3MCcsIDUwMDogJzExMyAxMTMgMTIyJywgODAwOiAnMzkgMzkgNDInLCA5MDA6ICcyNCAyNCAyNycsIDk1MDogJzkgOSAxMScgfSksXG4gIHNsYXRlOiBuZXV0cmFsUGFsZXR0ZSh7IDUwOiAnMjQ4IDI1MCAyNTInLCAxMDA6ICcyNDEgMjQ1IDI0OScsIDIwMDogJzIyNiAyMzIgMjQwJywgNDAwOiAnMTQ4IDE2MyAxODQnLCA1MDA6ICcxMDAgMTE2IDEzOScsIDgwMDogJzMwIDQxIDU5JywgOTAwOiAnMTUgMjMgNDInLCA5NTA6ICcyIDYgMjMnIH0pLFxuICBncmF5OiBuZXV0cmFsUGFsZXR0ZSh7IDUwOiAnMjQ5IDI1MCAyNTEnLCAxMDA6ICcyNDMgMjQ0IDI0NicsIDIwMDogJzIyOSAyMzEgMjM1JywgNDAwOiAnMTU2IDE2MyAxNzUnLCA1MDA6ICcxMDcgMTE0IDEyOCcsIDgwMDogJzMxIDQxIDU1JywgOTAwOiAnMTcgMjQgMzknLCA5NTA6ICczIDcgMTgnIH0pLFxuICBuZXV0cmFsOiBuZXV0cmFsUGFsZXR0ZSh7IDUwOiAnMjUwIDI1MCAyNTAnLCAxMDA6ICcyNDUgMjQ1IDI0NScsIDIwMDogJzIyOSAyMjkgMjI5JywgNDAwOiAnMTYzIDE2MyAxNjMnLCA1MDA6ICcxMTUgMTE1IDExNScsIDgwMDogJzM4IDM4IDM4JywgOTAwOiAnMjMgMjMgMjMnLCA5NTA6ICcxMCAxMCAxMCcgfSksXG4gIHN0b25lOiBuZXV0cmFsUGFsZXR0ZSh7IDUwOiAnMjUwIDI1MCAyNDknLCAxMDA6ICcyNDUgMjQ1IDI0NCcsIDIwMDogJzIzMSAyMjkgMjI4JywgNDAwOiAnMTY4IDE2MiAxNTgnLCA1MDA6ICcxMjAgMTEzIDEwOCcsIDgwMDogJzQxIDM3IDM2JywgOTAwOiAnMjggMjUgMjMnLCA5NTA6ICcxMiAxMCA5JyB9KSxcbn07XG5cbmZ1bmN0aW9uIGJhc2VUb2tlbkJsb2NrKHQ6IEJhc2VUb2tlbnMpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoe1xuICAgICctLWJhY2tncm91bmQnOiB0LmJhY2tncm91bmQsXG4gICAgJy0tZm9yZWdyb3VuZCc6IHQuZm9yZWdyb3VuZCxcbiAgICAnLS1jYXJkJzogdC5jYXJkLFxuICAgICctLWNhcmQtZm9yZWdyb3VuZCc6IHQuY2FyZEZvcmVncm91bmQsXG4gICAgJy0tcG9wb3Zlcic6IHQucG9wb3ZlcixcbiAgICAnLS1wb3BvdmVyLWZvcmVncm91bmQnOiB0LnBvcG92ZXJGb3JlZ3JvdW5kLFxuICAgICctLW11dGVkJzogdC5tdXRlZCxcbiAgICAnLS1tdXRlZC1mb3JlZ3JvdW5kJzogdC5tdXRlZEZvcmVncm91bmQsXG4gICAgJy0tYWNjZW50JzogdC5hY2NlbnQsXG4gICAgJy0tYWNjZW50LWZvcmVncm91bmQnOiB0LmFjY2VudEZvcmVncm91bmQsXG4gICAgJy0tc2Vjb25kYXJ5JzogdC5zZWNvbmRhcnksXG4gICAgJy0tc2Vjb25kYXJ5LWZvcmVncm91bmQnOiB0LnNlY29uZGFyeUZvcmVncm91bmQsXG4gICAgJy0tYm9yZGVyJzogdC5ib3JkZXIsXG4gICAgJy0taW5wdXQnOiB0LmlucHV0LFxuICB9KVxuICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a306ICR7dn07YClcbiAgICAuam9pbignXFxuICAgICAgICAnKTtcbn1cblxuLyoqIEVtaXQgdGhlIGA6cm9vdGAgKyBgLmRhcmtgIG5ldXRyYWwtdG9rZW4gYmxvY2sgZm9yIGEgYmFzZSBjb2xvciBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUJhc2VDc3MoYmFzZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwID0gQkFTRV9QQUxFVFRFU1tiYXNlSWRdID8/IEJBU0VfUEFMRVRURVNbJ3ppbmMnXTtcbiAgcmV0dXJuIGBcbiAgICAgIDpyb290IHtcbiAgICAgICAgJHtiYXNlVG9rZW5CbG9jayhwLmxpZ2h0KX1cbiAgICAgIH1cblxuICAgICAgLmRhcmsge1xuICAgICAgICAke2Jhc2VUb2tlbkJsb2NrKHAuZGFyayl9XG4gICAgICB9XG4gICAgYDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qIENoYXJ0IHBhbGV0dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKiAtLS0gT0tMYWIvT0tMQ0ggaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2hhcnQgc3RlcHMgYXJlIHBsYWNlZCBpbiBPS0xDSCwgbm90IEhTTC4gSFNMIFwibGlnaHRuZXNzXCIgaXMgbm90IHBlcmNlcHR1YWw6XG4gKiBIU0wgNzElIG9uIGEgeWVsbG93IHJlYWRzIGFzIE9LTGFiIEwgMC44NiB3aGlsZSB0aGUgc2FtZSA3MSUgb24gYSBibHVlIHJlYWRzXG4gKiB+MC41NSwgc28gYW4gSFNMLWJhc2VkIHJhbXAgc2lsZW50bHkgcHJvZHVjZXMgc3RlcHMgdGhhdCBhcmUgZmFyIHRvbyBsaWdodCB0b1xuICogc2l0IGFsb25nc2lkZSB0aGUgb3RoZXJzLiBXb3JraW5nIGluIE9LTENIIGxldHMgdXMgc2V0IHBlcmNlaXZlZCBsaWdodG5lc3MgYW5kXG4gKiBjb2xvdXJmdWxuZXNzIGRpcmVjdGx5LlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuY29uc3Qgc3JnYlRvTGluZWFyID0gKGM6IG51bWJlcikgPT4gKGMgPD0gMC4wNDA0NSA/IGMgLyAxMi45MiA6IE1hdGgucG93KChjICsgMC4wNTUpIC8gMS4wNTUsIDIuNCkpO1xuY29uc3QgbGluZWFyVG9TcmdiID0gKGM6IG51bWJlcikgPT4gKGMgPD0gMC4wMDMxMzA4ID8gMTIuOTIgKiBjIDogMS4wNTUgKiBNYXRoLnBvdyhjLCAxIC8gMi40KSAtIDAuMDU1KTtcblxuLyoqIHNSR0IgaGV4IOKGkiBPS0xDSCAoTCAw4oCTMSwgQyBjaHJvbWEsIGggZGVncmVlcykuICovXG5mdW5jdGlvbiBoZXhUb09rbGNoKGhleDogc3RyaW5nKTogeyBMOiBudW1iZXI7IEM6IG51bWJlcjsgaDogbnVtYmVyIH0ge1xuICBjb25zdCByID0gc3JnYlRvTGluZWFyKHBhcnNlSW50KGhleC5zbGljZSgxLCAzKSwgMTYpIC8gMjU1KTtcbiAgY29uc3QgZyA9IHNyZ2JUb0xpbmVhcihwYXJzZUludChoZXguc2xpY2UoMywgNSksIDE2KSAvIDI1NSk7XG4gIGNvbnN0IGIgPSBzcmdiVG9MaW5lYXIocGFyc2VJbnQoaGV4LnNsaWNlKDUsIDcpLCAxNikgLyAyNTUpO1xuICBjb25zdCBsID0gTWF0aC5jYnJ0KDAuNDEyMjIxNDcwOCAqIHIgKyAwLjUzNjMzMjUzNjMgKiBnICsgMC4wNTE0NDU5OTI5ICogYik7XG4gIGNvbnN0IG0gPSBNYXRoLmNicnQoMC4yMTE5MDM0OTgyICogciArIDAuNjgwNjk5NTQ1MSAqIGcgKyAwLjEwNzM5Njk1NjYgKiBiKTtcbiAgY29uc3QgcyA9IE1hdGguY2JydCgwLjA4ODMwMjQ2MTkgKiByICsgMC4yODE3MTg4Mzc2ICogZyArIDAuNjI5OTc4NzAwNSAqIGIpO1xuICBjb25zdCBBID0gMS45Nzc5OTg0OTUxICogbCAtIDIuNDI4NTkyMjA1ICogbSArIDAuNDUwNTkzNzA5OSAqIHM7XG4gIGNvbnN0IEIgPSAwLjAyNTkwNDAzNzEgKiBsICsgMC43ODI3NzE3NjYyICogbSAtIDAuODA4Njc1NzY2ICogcztcbiAgcmV0dXJuIHtcbiAgICBMOiAwLjIxMDQ1NDI1NTMgKiBsICsgMC43OTM2MTc3ODUgKiBtIC0gMC4wMDQwNzIwNDY4ICogcyxcbiAgICBDOiBNYXRoLmh5cG90KEEsIEIpLFxuICAgIGg6IChNYXRoLmF0YW4yKEIsIEEpICogMTgwKSAvIE1hdGguUEksXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9rbGNoVG9MaW5lYXJSZ2IoTDogbnVtYmVyLCBDOiBudW1iZXIsIGhEZWc6IG51bWJlcik6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IGggPSAoaERlZyAqIE1hdGguUEkpIC8gMTgwO1xuICBjb25zdCBBID0gQyAqIE1hdGguY29zKGgpO1xuICBjb25zdCBCID0gQyAqIE1hdGguc2luKGgpO1xuICBjb25zdCBsID0gKEwgKyAwLjM5NjMzNzc3NzQgKiBBICsgMC4yMTU4MDM3NTczICogQikgKiogMztcbiAgY29uc3QgbSA9IChMIC0gMC4xMDU1NjEzNDU4ICogQSAtIDAuMDYzODU0MTcyOCAqIEIpICoqIDM7XG4gIGNvbnN0IHMgPSAoTCAtIDAuMDg5NDg0MTc3NSAqIEEgLSAxLjI5MTQ4NTU0OCAqIEIpICoqIDM7XG4gIHJldHVybiBbXG4gICAgNC4wNzY3NDE2NjIxICogbCAtIDMuMzA3NzExNTkxMyAqIG0gKyAwLjIzMDk2OTkyOTIgKiBzLFxuICAgIC0xLjI2ODQzODAwNDYgKiBsICsgMi42MDk3NTc0MDExICogbSAtIDAuMzQxMzE5Mzk2NSAqIHMsXG4gICAgLTAuMDA0MTk2MDg2MyAqIGwgLSAwLjcwMzQxODYxNDcgKiBtICsgMS43MDc2MTQ3MDEgKiBzLFxuICBdO1xufVxuXG5jb25zdCBpblNyZ2JHYW11dCA9IChyZ2I6IG51bWJlcltdKSA9PiByZ2IuZXZlcnkoKGMpID0+IGMgPj0gLTAuMDAwMSAmJiBjIDw9IDEuMDAwMSk7XG5cbi8qKiBMYXJnZXN0IGNocm9tYSB0aGlzIGxpZ2h0bmVzcy9odWUgY2FuIGNhcnJ5IGluc2lkZSBzUkdCLiAqL1xuZnVuY3Rpb24gbWF4Q2hyb21hKEw6IG51bWJlciwgaDogbnVtYmVyKTogbnVtYmVyIHtcbiAgbGV0IGMgPSAwLjQ7XG4gIHdoaWxlIChjID4gMC4wMDEgJiYgIWluU3JnYkdhbXV0KG9rbGNoVG9MaW5lYXJSZ2IoTCwgYywgaCkpKSBjIC09IDAuMDA0O1xuICByZXR1cm4gYztcbn1cblxuLyoqIE9LTENIIOKGkiBoZXgsIHJlZHVjaW5nIGNocm9tYSB0byBmaXQgc1JHQiB3aGlsZSBwcmVzZXJ2aW5nIGxpZ2h0bmVzcyBhbmQgaHVlLiAqL1xuZnVuY3Rpb24gb2tsY2hUb0hleChMOiBudW1iZXIsIEM6IG51bWJlciwgaDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgYyA9IE1hdGgubWluKEMsIG1heENocm9tYShMLCBoKSk7XG4gIGNvbnN0IFtyLCBnLCBiXSA9IG9rbGNoVG9MaW5lYXJSZ2IoTCwgYywgaCkubWFwKCh2KSA9PlxuICAgIE1hdGgucm91bmQoTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgbGluZWFyVG9TcmdiKHYpKSkgKiAyNTUpXG4gICk7XG4gIHJldHVybiBgIyR7W3IsIGcsIGJdLm1hcCgodikgPT4gdi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YDtcbn1cblxuLyoqXG4gKiBQZXJjZXB0dWFsIChPS0xDSCkgbGlnaHRuZXNzIGJhbmRzIGEgY2F0ZWdvcmljYWwgY2hhcnQgbWFyayBtdXN0IHNpdCBpbnNpZGUgdG9cbiAqIHJlYWQgYXMgYSBkaXN0aW5jdCBzZXJpZXMgYWdhaW5zdCBlYWNoIHN1cmZhY2UuIEJlbG93IHRoZSBiYW5kIGEgbWFyayBtdWRkaWVzXG4gKiBpbnRvIHRoZSBiYWNrZ3JvdW5kOyBhYm92ZSBpdCwgbWFya3Mgd2FzaCBvdXQgYW5kIHN0b3AgYmVpbmcgc2VwYXJhYmxlLiBEYXJrJ3NcbiAqIGJhbmQgaXMgYm90aCBsb3dlciBhbmQgbmFycm93ZXIgdGhhbiBsaWdodCdzIOKAlCBpdCBpcyBub3QgYSBtaXJyb3IgaW1hZ2UuXG4gKi9cbmNvbnN0IENIQVJUX0JBTkQgPSB7IGxpZ2h0OiBbMC40MywgMC43N10gYXMgY29uc3QsIGRhcms6IFswLjQ4LCAwLjY3XSBhcyBjb25zdCB9O1xuXG4vKiogQ2hyb21hIGJlbG93IHRoaXMgcmVhZHMgYXMgZ3JheSByYXRoZXIgdGhhbiBhcyBhIGNvbG91ci4gKi9cbmNvbnN0IENIQVJUX0NIUk9NQV9GTE9PUiA9IDAuMTE1O1xuXG4vKipcbiAqIE51ZGdlcyBsaWdodG5lc3Mgd2l0aGluIHRoZSBiYW5kIHVudGlsIHRoaXMgaHVlIGNhbiBjYXJyeSB0aGUgY2hyb21hIGZsb29yLlxuICogRGFyayB5ZWxsb3dzIGFuZCB0ZWFscyBoYXZlIGEgbmFycm93IHNSR0IgZ2FtdXQsIHNvIGEgc3RlcCBwbGFjZWQgdG9vIGRhcmtcbiAqIHdvdWxkIGJlIGNsYW1wZWQgaW50byBhIG11ZGR5IG5lYXItZ3JheS5cbiAqL1xuZnVuY3Rpb24gc25hcExpZ2h0bmVzcyh0YXJnZXRMOiBudW1iZXIsIGg6IG51bWJlciwgbG86IG51bWJlciwgaGk6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChtYXhDaHJvbWEodGFyZ2V0TCwgaCkgPj0gQ0hBUlRfQ0hST01BX0ZMT09SKSByZXR1cm4gdGFyZ2V0TDtcbiAgZm9yIChsZXQgZCA9IDAuMDE7IGQgPD0gaGkgLSBsbzsgZCArPSAwLjAxKSB7XG4gICAgaWYgKHRhcmdldEwgKyBkIDw9IGhpICYmIG1heENocm9tYSh0YXJnZXRMICsgZCwgaCkgPj0gQ0hBUlRfQ0hST01BX0ZMT09SKSByZXR1cm4gdGFyZ2V0TCArIGQ7XG4gICAgaWYgKHRhcmdldEwgLSBkID49IGxvICYmIG1heENocm9tYSh0YXJnZXRMIC0gZCwgaCkgPj0gQ0hBUlRfQ0hST01BX0ZMT09SKSByZXR1cm4gdGFyZ2V0TCAtIGQ7XG4gIH1cbiAgLy8gTm8gbGlnaHRuZXNzIGluIHRoZSBiYW5kIGNsZWFycyB0aGUgZmxvb3IgZm9yIHRoaXMgaHVlIOKAlCB0YWtlIHRoZSBtb3N0XG4gIC8vIGNvbG91cmZ1bCBwb2ludCBhdmFpbGFibGUgcmF0aGVyIHRoYW4gdGhlIHRhcmdldCwgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGJlXG4gIC8vIGdhbXV0LWNsYW1wZWQgaW50byBhIG5lYXItZ3JheS5cbiAgbGV0IGJlc3QgPSB0YXJnZXRMO1xuICBsZXQgYmVzdEMgPSBtYXhDaHJvbWEodGFyZ2V0TCwgaCk7XG4gIGZvciAobGV0IEwgPSBsbzsgTCA8PSBoaTsgTCArPSAwLjAxKSB7XG4gICAgY29uc3QgYyA9IG1heENocm9tYShMLCBoKTtcbiAgICBpZiAoYyA+IGJlc3RDKSB7XG4gICAgICBiZXN0QyA9IGM7XG4gICAgICBiZXN0ID0gTDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJlc3Q7XG59XG5cbi8qKlxuICogRGVyaXZlIDUgY2hhcnQgY29sb3JzIGZyb20gb25lIGJhc2UgaGV4LCBzcHJlYWRpbmcgaHVlcyB3aWRlbHkgYW5kXG4gKiBhbHRlcm5hdGluZyBsaWdodG5lc3Mgc28gYWRqYWNlbnQgc2VyaWVzIHN0YXkgc2VwYXJhYmxlIOKAlCBpbmNsdWRpbmcgZm9yXG4gKiByZWQtZ3JlZW4gY29sb3VyIGJsaW5kbmVzcywgd2hlcmUgaHVlIGFsb25lIGNhcnJpZXMgYWxtb3N0IG5vIGluZm9ybWF0aW9uIGFuZFxuICogdGhlIGxpZ2h0bmVzcyBkaWZmZXJlbmNlIGRvZXMgdGhlIHdvcmsuXG4gKlxuICogYG1vZGVgIHJlLXN0ZXBzIHRoZSByYW1wIGZvciB0aGUgdGFyZ2V0IHN1cmZhY2UuIERhcmsgaXMgTk9UIGEgbGlnaHRlbmVkIGZsaXBcbiAqIG9mIGxpZ2h0OiBpdHMgdXNhYmxlIGxpZ2h0bmVzcyBiYW5kIGlzIGJvdGggbmFycm93ZXIgYW5kIGxvd2VyLlxuICpcbiAqIE5PVEU6IGEgcGFsZXR0ZSBkZXJpdmVkIGZyb20gYW4gYXJiaXRyYXJ5IGJyYW5kIGh1ZSBjYW5ub3QgYmUgKmd1YXJhbnRlZWQqXG4gKiBjb2xvdXItYmxpbmQtc2FmZSDigJQgZml2ZSBodWVzIHNwcmVhZCBmcm9tIG9uZSBzdGFydGluZyBwb2ludCB3aWxsLCBmb3Igc29tZVxuICogYmFzZXMsIHB1dCBhIGNvbmZ1c2FibGUgcGFpciBuZXh0IHRvIGVhY2ggb3RoZXIuIFRoZSBzaGlwcGVkIGRlZmF1bHRzIGluXG4gKiBgdGhlbWUuY3NzYCBhcmUgYSBmaXhlZCwgdmFsaWRhdGVkIHBhbGV0dGU7IHByZWZlciB0aG9zZSB1bmxlc3MgYnJhbmQtbWF0Y2hlZFxuICogY2hhcnRzIG1hdHRlciBtb3JlIHRoYW4gZ3VhcmFudGVlZCBzZXBhcmF0aW9uLiBXaGF0ZXZlciB5b3UgdXNlLCBrZWVwIHRoZVxuICogbGVnZW5kIGFuZCBkaXJlY3QgbGFiZWxzIG9uLCBzbyBjb2xvdXIgaXMgbmV2ZXIgdGhlIG9ubHkgY2hhbm5lbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ2hhcnRSYW1wKGhleDogc3RyaW5nLCBtb2RlOiAnbGlnaHQnIHwgJ2RhcmsnID0gJ2xpZ2h0Jyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgYmFzZSA9IGhleFRvT2tsY2goL14jLy50ZXN0KGhleCkgPyBoZXggOiAnIzI1NjNlYicpO1xuICBjb25zdCBbbG8sIGhpXSA9IENIQVJUX0JBTkRbbW9kZV07XG5cbiAgLy8gSHVlIG9mZnNldHMgc3ByZWFkIH43MuKAkzE4MMKwIGFwYXJ0IHJhdGhlciB0aGFuIHRoZSDCsTMwwrAgXCJhbmFsb2dvdXNcIiBzZXQgdGhlXG4gIC8vIGZpcnN0IHZlcnNpb24gdXNlZCwgd2hpY2ggbGVmdCBuZWlnaGJvdXJpbmcgc2VyaWVzIG9ubHkgMzLCsCBhcGFydCDigJQgdW5kZXJcbiAgLy8gcHJvdGFub3BpYSB0aG9zZSBjb2xsYXBzZWQgdG8gzpRFIDEuNSwgaS5lLiB0aGUgc2FtZSBjb2xvdXIuIExpZ2h0bmVzcyBhbHNvXG4gIC8vIGFsdGVybmF0ZXMsIHNvIGh1ZXMgdGhhdCBzdGlsbCBjb252ZXJnZSB1bmRlciBDVkQgZGlmZmVyIGluIGx1bWluYW5jZS5cbiAgY29uc3QgZGVmcyA9XG4gICAgbW9kZSA9PT0gJ2xpZ2h0J1xuICAgICAgPyBbXG4gICAgICAgICAgeyBkaDogMCwgTDogMC41NSB9LFxuICAgICAgICAgIHsgZGg6IDE4MCwgTDogMC43MiB9LFxuICAgICAgICAgIHsgZGg6IDkwLCBMOiAwLjQ2IH0sXG4gICAgICAgICAgeyBkaDogMjcwLCBMOiAwLjY4IH0sXG4gICAgICAgICAgeyBkaDogNDUsIEw6IDAuNiB9LFxuICAgICAgICBdXG4gICAgICA6IFtcbiAgICAgICAgICB7IGRoOiAwLCBMOiAwLjU4IH0sXG4gICAgICAgICAgeyBkaDogMTgwLCBMOiAwLjY2IH0sXG4gICAgICAgICAgeyBkaDogOTAsIEw6IDAuNSB9LFxuICAgICAgICAgIHsgZGg6IDI3MCwgTDogMC42MyB9LFxuICAgICAgICAgIHsgZGg6IDQ1LCBMOiAwLjU0IH0sXG4gICAgICAgIF07XG5cbiAgcmV0dXJuIGRlZnMubWFwKChkKSA9PiB7XG4gICAgY29uc3QgaCA9IGJhc2UuaCArIGQuZGg7XG4gICAgY29uc3QgTCA9IHNuYXBMaWdodG5lc3MoZC5MLCBoLCBsbywgaGkpO1xuICAgIHJldHVybiByZ2JUcmlwbGV0KG9rbGNoVG9IZXgoTCwgMC4xNSwgaCkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBFbWl0IHRoZSBgOnJvb3RgICsgYC5kYXJrYCBgLS1jaGFydC0x4oCmNWAgYmxvY2sgZm9yIGEgY2hhcnQgYmFzZSBjb2xvciwgd2l0aFxuICogZWFjaCBtb2RlIHJlLXN0ZXBwZWQgZm9yIGl0cyBvd24gc3VyZmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ2hhcnRDc3MoaGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB2YXJzID0gKG1vZGU6ICdsaWdodCcgfCAnZGFyaycpID0+XG4gICAgZ2VuZXJhdGVDaGFydFJhbXAoaGV4LCBtb2RlKVxuICAgICAgLm1hcCgodCwgaSkgPT4gYC0tY2hhcnQtJHtpICsgMX06ICR7dH07YClcbiAgICAgIC5qb2luKCdcXG4gICAgICAgICcpO1xuXG4gIHJldHVybiBgXG4gICAgICA6cm9vdCB7XG4gICAgICAgICR7dmFycygnbGlnaHQnKX1cbiAgICAgIH1cblxuICAgICAgLmRhcmsge1xuICAgICAgICAke3ZhcnMoJ2RhcmsnKX1cbiAgICAgIH1cbiAgICBgO1xufVxuIl19
@@ -86,4 +86,64 @@ export * from './lib/phone-number.service';
86
86
  export * from './lib/country-codes.service';
87
87
  export * from './lib/resizable-panel.component';
88
88
  export * from './lib/resizable-panel-item.component';
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxxQkFBcUIsQ0FBQTtBQUNuQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw4QkFBOEIsQ0FBQTtBQUM1QyxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsOEJBQThCLENBQUE7QUFDNUMsY0FBYyw2QkFBNkIsQ0FBQTtBQUMzQyxjQUFjLDRCQUE0QixDQUFBO0FBQzFDLGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQTtBQUMxQyxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMsMkJBQTJCLENBQUE7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQTtBQUNyQyxjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMscUJBQXFCLENBQUE7QUFDbkMsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLDhCQUE4QixDQUFBO0FBQzVDLGNBQWMsbUNBQW1DLENBQUE7QUFDakQsY0FBYyxnQ0FBZ0MsQ0FBQTtBQUM5QyxjQUFjLHFCQUFxQixDQUFBO0FBQ25DLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxnQ0FBZ0MsQ0FBQTtBQUM5QyxjQUFjLCtCQUErQixDQUFBO0FBQzdDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHRvbGxlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvY24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvY29sb3InO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnV0dG9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2FyZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VsZWN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWxlY3QtaXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VsZWN0LWdyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWxlY3Qtc2VwYXJhdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zd2l0Y2guY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JhZGdlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9za2VsZXRvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hlY2tib3guY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhZy1pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9vbHRpcC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9hc3Quc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvYXN0ZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvbGxlLWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tdWx0aS1zZWxlY3QuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2FsZW5kYXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWFza2VkLWlucHV0LmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGUtcGlja2VyLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BhZ2luYXRpb24uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0YS10YWJsZS5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2xsZS1jZWxsLmRpcmVjdGl2ZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FjY29yZGlvbi1pdGVtLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FjY29yZGlvbi5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbC1yZWYnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbC5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwtc3RhY2suc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnV0dG9uLWdyb3VwLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhbmdlLWNhbGVuZGFyLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RoZW1lLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi1sYWJlbC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi1tZW51LmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duLXNlcGFyYXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24tdHJpZ2dlci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGV4dGFyZWEuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FsZXJ0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdmF0YXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F2YXRhci1mYWxsYmFjay5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJlYWRjcnVtYi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJlYWRjcnVtYi1saW5rLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icmVhZGNydW1iLXNlcGFyYXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJlYWRjcnVtYi1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvb3RwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9vdHAtc2xvdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvb3RwLWdyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wb3BvdmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wb3BvdmVyLWNvbnRlbnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhZGlvLWdyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYWRpby1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWdtZW50LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaWRlYmFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jYXJvdXNlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sYWJlbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VwYXJhdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm9ncmVzcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2xpZGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2dnbGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvZ2dsZS1ncm91cC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaG92ZXItY2FyZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFicy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29sbGFwc2libGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Njcm9sbC1hcmVhLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbGVydC1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FsZXJ0LWRpYWxvZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FsZXJ0LWRpYWxvZy50eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbGVydC1kaWFsb2ctZHluYW1pYy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hlZXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoZWV0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hlZXQtcmVmJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoZWV0LnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoZWV0LXdyYXBwZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvdW50cnktc2VsZWN0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Bob25lLW51bWJlci1pbnB1dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGhvbmUtbnVtYmVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY291bnRyeS1jb2Rlcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Jlc2l6YWJsZS1wYW5lbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzaXphYmxlLXBhbmVsLWl0ZW0uY29tcG9uZW50JzsiXX0=
89
+ export * from './lib/aspect-ratio.component';
90
+ export * from './lib/resizable.component';
91
+ export * from './lib/context-menu.component';
92
+ export * from './lib/context-menu-trigger.directive';
93
+ export * from './lib/context-menu.service';
94
+ export * from './lib/select.service';
95
+ export * from './lib/radio-service';
96
+ export * from './lib/types/date-range';
97
+ /* --- shadcn parity: phase 1 --- */
98
+ export * from './lib/spinner.component';
99
+ export * from './lib/kbd.component';
100
+ export * from './lib/item.component';
101
+ export * from './lib/native-select.component';
102
+ export * from './lib/typography.component';
103
+ /* --- shadcn parity: phase 2 --- */
104
+ export * from './lib/field.component';
105
+ export * from './lib/input-group.component';
106
+ /* --- shadcn parity: phase 3 --- */
107
+ export * from './lib/table.component';
108
+ export * from './lib/menubar.component';
109
+ export * from './lib/navigation-menu.component';
110
+ /* --- shadcn parity: phase 4 --- */
111
+ export * from './lib/command.service';
112
+ export * from './lib/command.component';
113
+ export * from './lib/command-dialog.component';
114
+ export * from './lib/combobox.component';
115
+ /* --- AI & chat: transcript surface --- */
116
+ export * from './lib/message-scroller.service';
117
+ export * from './lib/message-scroller.component';
118
+ export * from './lib/message.component';
119
+ export * from './lib/bubble.component';
120
+ export * from './lib/marker.component';
121
+ export * from './lib/attachment.component';
122
+ export * from './lib/conversation.component';
123
+ /* --- AI & chat: composer and response parts --- */
124
+ export * from './lib/prompt-input.component';
125
+ export * from './lib/reasoning.component';
126
+ export * from './lib/tool.component';
127
+ export * from './lib/sources.component';
128
+ export * from './lib/suggestion.component';
129
+ export * from './lib/inline-citation.component';
130
+ export * from './lib/shimmer.component';
131
+ /* --- AI & chat: agent workflow --- */
132
+ export * from './lib/task.component';
133
+ export * from './lib/chain-of-thought.component';
134
+ export * from './lib/plan.component';
135
+ export * from './lib/queue.component';
136
+ export * from './lib/checkpoint.component';
137
+ export * from './lib/confirmation.component';
138
+ export * from './lib/context.component';
139
+ export * from './lib/model-selector.component';
140
+ /* --- Charts --- */
141
+ export * from './lib/chart.service';
142
+ export * from './lib/chart.component';
143
+ export * from './lib/chart-pie.component';
144
+ /* --- Internationalisation --- */
145
+ export * from './lib/direction.component';
146
+ /* --- Date & time --- */
147
+ export * from './lib/time-picker.component';
148
+ export * from './lib/date-time-picker.component';
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxxQkFBcUIsQ0FBQTtBQUNuQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw4QkFBOEIsQ0FBQTtBQUM1QyxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsOEJBQThCLENBQUE7QUFDNUMsY0FBYyw2QkFBNkIsQ0FBQTtBQUMzQyxjQUFjLDRCQUE0QixDQUFBO0FBQzFDLGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQTtBQUMxQyxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMsMkJBQTJCLENBQUE7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQTtBQUNyQyxjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMscUJBQXFCLENBQUE7QUFDbkMsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLDhCQUE4QixDQUFBO0FB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Q0FBa0MsQ0FBQztBQUNqRCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsOEJBQThCLENBQUM7QUFFN0Msb0RBQW9EO0FBQ3BELGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMseUJBQXlCLENBQUM7QUFFeEMsdUNBQXVDO0FBQ3ZDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUUvQyxvQkFBb0I7QUFDcEIsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsa0NBQWtDO0FBQ2xDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMseUJBQXlCO0FBQ3pCLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdG9sbGVcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9jbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9jb2xvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9idXR0b24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2lucHV0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWxlY3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbGVjdC1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWxlY3QtZ3JvdXAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbGVjdC1zZXBhcmF0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N3aXRjaC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFkZ2UuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NrZWxldG9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jaGVja2JveC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFnLWlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b29sdGlwLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2FzdC5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9hc3Rlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9sbGUtY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL211bHRpLXNlbGVjdC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jYWxlbmRhci5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXNrZWQtaW5wdXQuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS1waWNrZXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGFnaW5hdGlvbi5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRhLXRhYmxlLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvbGxlLWNlbGwuZGlyZWN0aXZlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWNjb3JkaW9uLWl0ZW0uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWNjb3JkaW9uLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsLXJlZidcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbC1zdGFjay5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9idXR0b24tZ3JvdXAuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmFuZ2UtY2FsZW5kYXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGhlbWUuc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duLWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duLWxhYmVsLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24tc2VwYXJhdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi10cmlnZ2VyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZXh0YXJlYS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWxlcnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F2YXRhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXZhdGFyLWZhbGxiYWNrLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icmVhZGNydW1iLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icmVhZGNydW1iLWxpbmsuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyZWFkY3J1bWItc2VwYXJhdG9yLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icmVhZGNydW1iLWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9vdHAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL290cC1zbG90LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9vdHAtZ3JvdXAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BvcG92ZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BvcG92ZXItY29udGVudC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmFkaW8tZ3JvdXAuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhZGlvLWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlZ21lbnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NpZGViYXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Nhcm91c2VsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xhYmVsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXBhcmF0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb2dyZXNzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbGlkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RvZ2dsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9nZ2xlLWdyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ob3Zlci1jYXJkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWJzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb2xsYXBzaWJsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2Nyb2xsLWFyZWEuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FsZXJ0LWRpYWxvZy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWxlcnQtZGlhbG9nLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWxlcnQtZGlhbG9nLnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FsZXJ0LWRpYWxvZy1keW5hbWljLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGVldC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hlZXQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGVldC1yZWYnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hlZXQudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hlZXQtd3JhcHBlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY291bnRyeS1zZWxlY3Rvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGhvbmUtbnVtYmVyLWlucHV0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9waG9uZS1udW1iZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3VudHJ5LWNvZGVzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzaXphYmxlLXBhbmVsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZXNpemFibGUtcGFuZWwtaXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXNwZWN0LXJhdGlvLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZXNpemFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRleHQtbWVudS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udGV4dC1tZW51LXRyaWdnZXIuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRleHQtbWVudS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlbGVjdC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhZGlvLXNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMvZGF0ZS1yYW5nZSc7XG5cbi8qIC0tLSBzaGFkY24gcGFyaXR5OiBwaGFzZSAxIC0tLSAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3Bpbm5lci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIva2JkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9uYXRpdmUtc2VsZWN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBvZ3JhcGh5LmNvbXBvbmVudCc7XG5cbi8qIC0tLSBzaGFkY24gcGFyaXR5OiBwaGFzZSAyIC0tLSAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2lucHV0LWdyb3VwLmNvbXBvbmVudCc7XG5cbi8qIC0tLSBzaGFkY24gcGFyaXR5OiBwaGFzZSAzIC0tLSAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lbnViYXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25hdmlnYXRpb24tbWVudS5jb21wb25lbnQnO1xuXG5cbi8qIC0tLSBzaGFkY24gcGFyaXR5OiBwaGFzZSA0IC0tLSAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tbWFuZC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbW1hbmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbW1hbmQtZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21ib2JveC5jb21wb25lbnQnO1xuXG4vKiAtLS0gQUkgJiBjaGF0OiB0cmFuc2NyaXB0IHN1cmZhY2UgLS0tICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNzYWdlLXNjcm9sbGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzc2FnZS1zY3JvbGxlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzc2FnZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnViYmxlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXJrZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F0dGFjaG1lbnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnZlcnNhdGlvbi5jb21wb25lbnQnO1xuXG4vKiAtLS0gQUkgJiBjaGF0OiBjb21wb3NlciBhbmQgcmVzcG9uc2UgcGFydHMgLS0tICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm9tcHQtaW5wdXQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlYXNvbmluZy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9vbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc291cmNlcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3VnZ2VzdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5saW5lLWNpdGF0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGltbWVyLmNvbXBvbmVudCc7XG5cbi8qIC0tLSBBSSAmIGNoYXQ6IGFnZW50IHdvcmtmbG93IC0tLSAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFzay5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hhaW4tb2YtdGhvdWdodC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGxhbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcXVldWUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NoZWNrcG9pbnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbmZpcm1hdGlvbi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udGV4dC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWwtc2VsZWN0b3IuY29tcG9uZW50JztcblxuLyogLS0tIENoYXJ0cyAtLS0gKi9cbmV4cG9ydCAqIGZyb20gJy4vbGliL2NoYXJ0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hhcnQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NoYXJ0LXBpZS5jb21wb25lbnQnO1xuXG4vKiAtLS0gSW50ZXJuYXRpb25hbGlzYXRpb24gLS0tICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3Rpb24uY29tcG9uZW50Jztcbi8qIC0tLSBEYXRlICYgdGltZSAtLS0gKi9cbmV4cG9ydCAqIGZyb20gJy4vbGliL3RpbWUtcGlja2VyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudCc7XG4iXX0=