@projectcor/maia-components 2.31.0 → 2.31.1-1

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 (42) hide show
  1. package/CHANGELOG.md +664 -0
  2. package/lib/App.js +4 -2
  3. package/lib/components/atoms/MAIAInput/MAIAInput.js +62 -14
  4. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +121 -0
  5. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +197 -0
  6. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +182 -0
  7. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +123 -0
  8. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +115 -0
  9. package/lib/components/atoms/ReasoningBlock/index.js +3 -0
  10. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +58 -0
  11. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +391 -120
  12. package/lib/components/molecules/ChatAIMessages/newStyles.js +50 -18
  13. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +42 -21
  14. package/lib/components/molecules/MessageFeedback/styles.js +6 -2
  15. package/lib/context/global-context.js +1 -1
  16. package/lib/dev/DevReasoningTimeline.js +237 -0
  17. package/lib/dev/reasoningTraceMock.js +556 -0
  18. package/lib/hooks/useChatManager/useChatManager.js +111 -63
  19. package/lib/hooks/useChatMessages/useChatMessages.js +28 -27
  20. package/lib/hooks/useEvent.js +2 -1
  21. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  22. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -3
  23. package/lib/hooks/useProjectSummaryConfig.js +45 -17
  24. package/lib/hooks/useReasoningTrace/index.js +3 -0
  25. package/lib/hooks/useReasoningTrace/reasoningStore.js +170 -0
  26. package/lib/hooks/useReasoningTrace/useReasoningTrace.js +14 -0
  27. package/lib/lang/br/index.js +237 -31
  28. package/lib/lang/en/index.js +237 -31
  29. package/lib/lang/es/index.js +237 -31
  30. package/lib/lang/fr/index.js +237 -31
  31. package/lib/services/maia/Orchestrator/orchestrator.js +9 -7
  32. package/lib/services/utils/mapChatMessages.js +21 -18
  33. package/lib/store/sessions/sessionStreamManager.js +99 -51
  34. package/lib/store/sessions/sessions.types.js +1 -1
  35. package/lib/types/Chat.js +1 -1
  36. package/lib/types/reasoning.js +2 -0
  37. package/lib/utils/autoApproveStorage.js +26 -0
  38. package/lib/utils/hitlAnalytics.js +4 -3
  39. package/lib/utils/reasoningMappers.js +62 -0
  40. package/lib/utils/streamActivityMessages.js +106 -41
  41. package/package.json +1 -1
  42. package/README.md +0 -2
@@ -0,0 +1,121 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import { ChevronRight } from '@projectcor/icons/lib/components/ChevronRight';
4
+ import { useT } from '../../../hooks/useT';
5
+ import { EVENTS, useEvent } from '../../../hooks/useEvent';
6
+ import { useReasoningTrace } from '../../../hooks/useReasoningTrace';
7
+ import { formatActivityElapsed } from '../AgentActivityIndicator/AgentActivityIndicator.utils';
8
+ import { deriveReasoningSummary } from '../../../utils/reasoningMappers';
9
+ import { isVisibleStep, StepList } from './ReasoningSteps';
10
+ import { SCExpandedTrace, SCReasoningBlock, SCSummaryToggle, SCTraceCollapse, SCTraceNote } from './ReasoningBlock.styles';
11
+
12
+ /** Tiempo que queda visible el detalle antes de plegarse solo al terminar el turno. */
13
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
14
+ var AUTO_COLLAPSE_DELAY_MS = 900;
15
+ // Preview del resultado de la tool: deshabilitado. El `result_preview` del back
16
+ // son los primeros 200 chars del retorno crudo, así que lo que se mostraba era
17
+ // el encabezado interno del payload ("DATOS DE PROYECTO"): redundante con el
18
+ // label y ausente en las tools que devuelven JSON.
19
+ // PENDIENTE: definir qué mostrar acá o dejar de emitir `result_preview` en el back.
20
+ // const cleanPreview = (preview: string | undefined): string => {
21
+ // if (!preview) return ''
22
+ // return preview
23
+ // .replace(/^[\s=\-_*#|~]+/, '')
24
+ // .split('\n')[0]
25
+ // .trim()
26
+ // }
27
+ //
28
+ // const isMeaningfulPreview = (preview: string | undefined): boolean => {
29
+ // const cleaned = cleanPreview(preview)
30
+ // if (cleaned.length < 2) return false
31
+ // if (cleaned.startsWith('{') || cleaned.startsWith('[')) return false
32
+ // return cleaned.replace(/[^\p{L}\p{N}]/gu, '').length >= 2
33
+ // }
34
+
35
+ export var ReasoningBlock = function ReasoningBlock(_ref) {
36
+ var _ref2, _liveTrace$summary;
37
+ var messageId = _ref.messageId,
38
+ trace = _ref.trace;
39
+ var _useT = useT(),
40
+ t = _useT.t;
41
+ var eventAmplitude = useEvent();
42
+ var liveTrace = useReasoningTrace(messageId);
43
+ // Este bloque reemplaza al timeline en vivo cuando el turno cierra: si hay
44
+ // snapshot propio ya terminado, monta expandido y se pliega solo, así se ve
45
+ // el traspaso. Los mensajes del histórico no tienen snapshot => colapsados.
46
+ var tookOverFromLive = useRef(liveTrace.phase === 'done' && liveTrace.steps.length > 0);
47
+ var _useState = useState(tookOverFromLive.current),
48
+ _useState2 = _slicedToArray(_useState, 2),
49
+ isExpanded = _useState2[0],
50
+ setIsExpanded = _useState2[1];
51
+ useEffect(function () {
52
+ if (!tookOverFromLive.current) return undefined;
53
+ var timeoutId = window.setTimeout(function () {
54
+ return setIsExpanded(false);
55
+ }, AUTO_COLLAPSE_DELAY_MS);
56
+ return function () {
57
+ return window.clearTimeout(timeoutId);
58
+ };
59
+ }, []);
60
+ var liveSteps = liveTrace.steps;
61
+ var effectiveSummary = (_ref2 = (_liveTrace$summary = liveTrace.summary) !== null && _liveTrace$summary !== void 0 ? _liveTrace$summary : trace === null || trace === void 0 ? void 0 : trace.summary) !== null && _ref2 !== void 0 ? _ref2 : liveSteps.length ? deriveReasoningSummary(liveSteps) : null;
62
+ var expandedSteps = useMemo(function () {
63
+ var _trace$steps;
64
+ return (liveSteps.length > 0 ? liveSteps : (_trace$steps = trace === null || trace === void 0 ? void 0 : trace.steps) !== null && _trace$steps !== void 0 ? _trace$steps : []).filter(isVisibleStep);
65
+ }, [liveSteps, trace]);
66
+
67
+ // El auto-collapse del traspaso no pasa por acá: solo se trackea el toggle manual.
68
+ var handleToggle = useCallback(function () {
69
+ eventAmplitude(EVENTS.aiChatThinking, {
70
+ option: isExpanded ? 'close' : 'open'
71
+ });
72
+ setIsExpanded(!isExpanded);
73
+ }, [eventAmplitude, isExpanded]);
74
+ if (!expandedSteps.length) return null;
75
+ var actionCount = deriveReasoningSummary(expandedSteps).toolCount;
76
+ var durationLabel = (effectiveSummary === null || effectiveSummary === void 0 ? void 0 : effectiveSummary.durationMs) !== undefined ? formatActivityElapsed(Math.max(1, Math.round(effectiveSummary.durationMs / 1000))) : null;
77
+ return /*#__PURE__*/_jsxs(SCReasoningBlock, {
78
+ children: [/*#__PURE__*/_jsxs(SCSummaryToggle, {
79
+ type: "button",
80
+ onClick: handleToggle,
81
+ "aria-expanded": isExpanded,
82
+ title: isExpanded ? t('chat.reasoning.collapse') : t('chat.reasoning.expand'),
83
+ children: [/*#__PURE__*/_jsx("span", {
84
+ children: durationLabel ? t('chat.reasoning.thoughtFor', {
85
+ duration: durationLabel
86
+ }) : t('chat.reasoning.thought')
87
+ }), actionCount > 0 && /*#__PURE__*/_jsxs(_Fragment, {
88
+ children: [/*#__PURE__*/_jsx("span", {
89
+ className: "ReasoningBlock-separator",
90
+ "aria-hidden": true,
91
+ children: "-"
92
+ }), /*#__PURE__*/_jsx("span", {
93
+ children: t('chat.reasoning.actionCount', {
94
+ count: actionCount
95
+ })
96
+ })]
97
+ }), /*#__PURE__*/_jsx("span", {
98
+ className: "ReasoningBlock-chevron",
99
+ "aria-hidden": true,
100
+ children: /*#__PURE__*/_jsx(ChevronRight, {
101
+ color: "currentColor",
102
+ width: "18px",
103
+ height: "18px"
104
+ })
105
+ })]
106
+ }), /*#__PURE__*/_jsx(SCTraceCollapse, {
107
+ $isOpen: isExpanded,
108
+ "aria-hidden": !isExpanded,
109
+ children: /*#__PURE__*/_jsxs(SCExpandedTrace, {
110
+ $isOpen: isExpanded,
111
+ children: [/*#__PURE__*/_jsx(StepList, {
112
+ steps: expandedSteps,
113
+ t: t
114
+ }), (effectiveSummary === null || effectiveSummary === void 0 ? void 0 : effectiveSummary.truncated) && /*#__PURE__*/_jsx(SCTraceNote, {
115
+ children: t('chat.reasoning.truncated')
116
+ })]
117
+ })
118
+ })]
119
+ });
120
+ };
121
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZiIsInVzZVN0YXRlIiwiQ2hldnJvblJpZ2h0IiwidXNlVCIsIkVWRU5UUyIsInVzZUV2ZW50IiwidXNlUmVhc29uaW5nVHJhY2UiLCJmb3JtYXRBY3Rpdml0eUVsYXBzZWQiLCJkZXJpdmVSZWFzb25pbmdTdW1tYXJ5IiwiaXNWaXNpYmxlU3RlcCIsIlN0ZXBMaXN0IiwiU0NFeHBhbmRlZFRyYWNlIiwiU0NSZWFzb25pbmdCbG9jayIsIlNDU3VtbWFyeVRvZ2dsZSIsIlNDVHJhY2VDb2xsYXBzZSIsIlNDVHJhY2VOb3RlIiwianN4IiwiX2pzeCIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwianN4cyIsIl9qc3hzIiwiQVVUT19DT0xMQVBTRV9ERUxBWV9NUyIsIlJlYXNvbmluZ0Jsb2NrIiwiX3JlZiIsIl9yZWYyIiwiX2xpdmVUcmFjZSRzdW1tYXJ5IiwibWVzc2FnZUlkIiwidHJhY2UiLCJfdXNlVCIsInQiLCJldmVudEFtcGxpdHVkZSIsImxpdmVUcmFjZSIsInRvb2tPdmVyRnJvbUxpdmUiLCJwaGFzZSIsInN0ZXBzIiwibGVuZ3RoIiwiX3VzZVN0YXRlIiwiY3VycmVudCIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzRXhwYW5kZWQiLCJzZXRJc0V4cGFuZGVkIiwidW5kZWZpbmVkIiwidGltZW91dElkIiwid2luZG93Iiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsImxpdmVTdGVwcyIsImVmZmVjdGl2ZVN1bW1hcnkiLCJzdW1tYXJ5IiwiZXhwYW5kZWRTdGVwcyIsIl90cmFjZSRzdGVwcyIsImZpbHRlciIsImhhbmRsZVRvZ2dsZSIsImFpQ2hhdFRoaW5raW5nIiwib3B0aW9uIiwiYWN0aW9uQ291bnQiLCJ0b29sQ291bnQiLCJkdXJhdGlvbkxhYmVsIiwiZHVyYXRpb25NcyIsIk1hdGgiLCJtYXgiLCJyb3VuZCIsImNoaWxkcmVuIiwidHlwZSIsIm9uQ2xpY2siLCJ0aXRsZSIsImR1cmF0aW9uIiwiY2xhc3NOYW1lIiwiY291bnQiLCJjb2xvciIsIndpZHRoIiwiaGVpZ2h0IiwiJGlzT3BlbiIsInRydW5jYXRlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL1JlYXNvbmluZ0Jsb2NrL1JlYXNvbmluZ0Jsb2NrLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2hldnJvblJpZ2h0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hldnJvblJpZ2h0J1xuXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IHVzZVJlYXNvbmluZ1RyYWNlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgeyBmb3JtYXRBY3Rpdml0eUVsYXBzZWQgfSBmcm9tICcuLi9BZ2VudEFjdGl2aXR5SW5kaWNhdG9yL0FnZW50QWN0aXZpdHlJbmRpY2F0b3IudXRpbHMnXG5pbXBvcnQgeyBkZXJpdmVSZWFzb25pbmdTdW1tYXJ5IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmVhc29uaW5nTWFwcGVycydcbmltcG9ydCB0eXBlIHsgUmVhc29uaW5nVHJhY2UgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9yZWFzb25pbmcnXG5pbXBvcnQgeyBpc1Zpc2libGVTdGVwLCBTdGVwTGlzdCB9IGZyb20gJy4vUmVhc29uaW5nU3RlcHMnXG5pbXBvcnQge1xuICBTQ0V4cGFuZGVkVHJhY2UsXG4gIFNDUmVhc29uaW5nQmxvY2ssXG4gIFNDU3VtbWFyeVRvZ2dsZSxcbiAgU0NUcmFjZUNvbGxhcHNlLFxuICBTQ1RyYWNlTm90ZSxcbn0gZnJvbSAnLi9SZWFzb25pbmdCbG9jay5zdHlsZXMnXG5cbi8qKiBUaWVtcG8gcXVlIHF1ZWRhIHZpc2libGUgZWwgZGV0YWxsZSBhbnRlcyBkZSBwbGVnYXJzZSBzb2xvIGFsIHRlcm1pbmFyIGVsIHR1cm5vLiAqL1xuY29uc3QgQVVUT19DT0xMQVBTRV9ERUxBWV9NUyA9IDkwMFxuXG5leHBvcnQgdHlwZSBSZWFzb25pbmdCbG9ja1Byb3BzID0ge1xuICBtZXNzYWdlSWQ6IHN0cmluZ1xuICB0cmFjZT86IFJlYXNvbmluZ1RyYWNlIHwgbnVsbFxufVxuXG4vLyBQcmV2aWV3IGRlbCByZXN1bHRhZG8gZGUgbGEgdG9vbDogZGVzaGFiaWxpdGFkby4gRWwgYHJlc3VsdF9wcmV2aWV3YCBkZWwgYmFja1xuLy8gc29uIGxvcyBwcmltZXJvcyAyMDAgY2hhcnMgZGVsIHJldG9ybm8gY3J1ZG8sIGFzw60gcXVlIGxvIHF1ZSBzZSBtb3N0cmFiYSBlcmFcbi8vIGVsIGVuY2FiZXphZG8gaW50ZXJubyBkZWwgcGF5bG9hZCAoXCJEQVRPUyBERSBQUk9ZRUNUT1wiKTogcmVkdW5kYW50ZSBjb24gZWxcbi8vIGxhYmVsIHkgYXVzZW50ZSBlbiBsYXMgdG9vbHMgcXVlIGRldnVlbHZlbiBKU09OLlxuLy8gUEVORElFTlRFOiBkZWZpbmlyIHF1w6kgbW9zdHJhciBhY8OhIG8gZGVqYXIgZGUgZW1pdGlyIGByZXN1bHRfcHJldmlld2AgZW4gZWwgYmFjay5cbi8vIGNvbnN0IGNsZWFuUHJldmlldyA9IChwcmV2aWV3OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuLy8gICBpZiAoIXByZXZpZXcpIHJldHVybiAnJ1xuLy8gICByZXR1cm4gcHJldmlld1xuLy8gICAgIC5yZXBsYWNlKC9eW1xccz1cXC1fKiN8fl0rLywgJycpXG4vLyAgICAgLnNwbGl0KCdcXG4nKVswXVxuLy8gICAgIC50cmltKClcbi8vIH1cbi8vXG4vLyBjb25zdCBpc01lYW5pbmdmdWxQcmV2aWV3ID0gKHByZXZpZXc6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4ge1xuLy8gICBjb25zdCBjbGVhbmVkID0gY2xlYW5QcmV2aWV3KHByZXZpZXcpXG4vLyAgIGlmIChjbGVhbmVkLmxlbmd0aCA8IDIpIHJldHVybiBmYWxzZVxuLy8gICBpZiAoY2xlYW5lZC5zdGFydHNXaXRoKCd7JykgfHwgY2xlYW5lZC5zdGFydHNXaXRoKCdbJykpIHJldHVybiBmYWxzZVxuLy8gICByZXR1cm4gY2xlYW5lZC5yZXBsYWNlKC9bXlxccHtMfVxccHtOfV0vZ3UsICcnKS5sZW5ndGggPj0gMlxuLy8gfVxuXG5leHBvcnQgY29uc3QgUmVhc29uaW5nQmxvY2sgPSAoeyBtZXNzYWdlSWQsIHRyYWNlIH06IFJlYXNvbmluZ0Jsb2NrUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IGxpdmVUcmFjZSA9IHVzZVJlYXNvbmluZ1RyYWNlKG1lc3NhZ2VJZClcbiAgLy8gRXN0ZSBibG9xdWUgcmVlbXBsYXphIGFsIHRpbWVsaW5lIGVuIHZpdm8gY3VhbmRvIGVsIHR1cm5vIGNpZXJyYTogc2kgaGF5XG4gIC8vIHNuYXBzaG90IHByb3BpbyB5YSB0ZXJtaW5hZG8sIG1vbnRhIGV4cGFuZGlkbyB5IHNlIHBsaWVnYSBzb2xvLCBhc8OtIHNlIHZlXG4gIC8vIGVsIHRyYXNwYXNvLiBMb3MgbWVuc2FqZXMgZGVsIGhpc3TDs3JpY28gbm8gdGllbmVuIHNuYXBzaG90ID0+IGNvbGFwc2Fkb3MuXG4gIGNvbnN0IHRvb2tPdmVyRnJvbUxpdmUgPSB1c2VSZWYobGl2ZVRyYWNlLnBoYXNlID09PSAnZG9uZScgJiYgbGl2ZVRyYWNlLnN0ZXBzLmxlbmd0aCA+IDApXG4gIGNvbnN0IFtpc0V4cGFuZGVkLCBzZXRJc0V4cGFuZGVkXSA9IHVzZVN0YXRlKHRvb2tPdmVyRnJvbUxpdmUuY3VycmVudClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghdG9va092ZXJGcm9tTGl2ZS5jdXJyZW50KSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gc2V0SXNFeHBhbmRlZChmYWxzZSksIEFVVE9fQ09MTEFQU0VfREVMQVlfTVMpXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKVxuICB9LCBbXSlcblxuICBjb25zdCBsaXZlU3RlcHMgPSBsaXZlVHJhY2Uuc3RlcHNcbiAgY29uc3QgZWZmZWN0aXZlU3VtbWFyeSA9XG4gICAgbGl2ZVRyYWNlLnN1bW1hcnkgPz8gdHJhY2U/LnN1bW1hcnkgPz8gKGxpdmVTdGVwcy5sZW5ndGggPyBkZXJpdmVSZWFzb25pbmdTdW1tYXJ5KGxpdmVTdGVwcykgOiBudWxsKVxuXG4gIGNvbnN0IGV4cGFuZGVkU3RlcHMgPSB1c2VNZW1vKFxuICAgICgpID0+IChsaXZlU3RlcHMubGVuZ3RoID4gMCA/IGxpdmVTdGVwcyA6ICh0cmFjZT8uc3RlcHMgPz8gW10pKS5maWx0ZXIoaXNWaXNpYmxlU3RlcCksXG4gICAgW2xpdmVTdGVwcywgdHJhY2VdXG4gIClcblxuICAvLyBFbCBhdXRvLWNvbGxhcHNlIGRlbCB0cmFzcGFzbyBubyBwYXNhIHBvciBhY8OhOiBzb2xvIHNlIHRyYWNrZWEgZWwgdG9nZ2xlIG1hbnVhbC5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRUaGlua2luZywgeyBvcHRpb246IGlzRXhwYW5kZWQgPyAnY2xvc2UnIDogJ29wZW4nIH0pXG4gICAgc2V0SXNFeHBhbmRlZCghaXNFeHBhbmRlZClcbiAgfSwgW2V2ZW50QW1wbGl0dWRlLCBpc0V4cGFuZGVkXSlcblxuICBpZiAoIWV4cGFuZGVkU3RlcHMubGVuZ3RoKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGFjdGlvbkNvdW50ID0gZGVyaXZlUmVhc29uaW5nU3VtbWFyeShleHBhbmRlZFN0ZXBzKS50b29sQ291bnRcbiAgY29uc3QgZHVyYXRpb25MYWJlbCA9XG4gICAgZWZmZWN0aXZlU3VtbWFyeT8uZHVyYXRpb25NcyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGZvcm1hdEFjdGl2aXR5RWxhcHNlZChNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGVmZmVjdGl2ZVN1bW1hcnkuZHVyYXRpb25NcyAvIDEwMDApKSlcbiAgICAgIDogbnVsbFxuXG4gIHJldHVybiAoXG4gICAgPFNDUmVhc29uaW5nQmxvY2s+XG4gICAgICA8U0NTdW1tYXJ5VG9nZ2xlXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVUb2dnbGV9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9e2lzRXhwYW5kZWR9XG4gICAgICAgIHRpdGxlPXtpc0V4cGFuZGVkID8gdCgnY2hhdC5yZWFzb25pbmcuY29sbGFwc2UnKSA6IHQoJ2NoYXQucmVhc29uaW5nLmV4cGFuZCcpfVxuICAgICAgPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7ZHVyYXRpb25MYWJlbCA/IHQoJ2NoYXQucmVhc29uaW5nLnRob3VnaHRGb3InLCB7IGR1cmF0aW9uOiBkdXJhdGlvbkxhYmVsIH0pIDogdCgnY2hhdC5yZWFzb25pbmcudGhvdWdodCcpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHthY3Rpb25Db3VudCA+IDAgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJSZWFzb25pbmdCbG9jay1zZXBhcmF0b3JcIiBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3QoJ2NoYXQucmVhc29uaW5nLmFjdGlvbkNvdW50JywgeyBjb3VudDogYWN0aW9uQ291bnQgfSl9PC9zcGFuPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJSZWFzb25pbmdCbG9jay1jaGV2cm9uXCIgYXJpYS1oaWRkZW4+XG4gICAgICAgICAgPENoZXZyb25SaWdodCBjb2xvcj1cImN1cnJlbnRDb2xvclwiIHdpZHRoPVwiMThweFwiIGhlaWdodD1cIjE4cHhcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L1NDU3VtbWFyeVRvZ2dsZT5cblxuICAgICAgPFNDVHJhY2VDb2xsYXBzZSAkaXNPcGVuPXtpc0V4cGFuZGVkfSBhcmlhLWhpZGRlbj17IWlzRXhwYW5kZWR9PlxuICAgICAgICA8U0NFeHBhbmRlZFRyYWNlICRpc09wZW49e2lzRXhwYW5kZWR9PlxuICAgICAgICAgIDxTdGVwTGlzdCBzdGVwcz17ZXhwYW5kZWRTdGVwc30gdD17dH0gLz5cbiAgICAgICAgICB7ZWZmZWN0aXZlU3VtbWFyeT8udHJ1bmNhdGVkICYmIDxTQ1RyYWNlTm90ZT57dCgnY2hhdC5yZWFzb25pbmcudHJ1bmNhdGVkJyl9PC9TQ1RyYWNlTm90ZT59XG4gICAgICAgIDwvU0NFeHBhbmRlZFRyYWNlPlxuICAgICAgPC9TQ1RyYWNlQ29sbGFwc2U+XG4gICAgPC9TQ1JlYXNvbmluZ0Jsb2NrPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxLQUFLLElBQUlDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDaEYsU0FBU0MsWUFBWSxRQUFRLCtDQUErQztBQUU1RSxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLHlCQUF5QjtBQUMxRCxTQUFTQyxpQkFBaUIsUUFBUSxrQ0FBa0M7QUFDcEUsU0FBU0MscUJBQXFCLFFBQVEsd0RBQXdEO0FBQzlGLFNBQVNDLHNCQUFzQixRQUFRLGlDQUFpQztBQUV4RSxTQUFTQyxhQUFhLEVBQUVDLFFBQVEsUUFBUSxrQkFBa0I7QUFD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
@@ -0,0 +1,197 @@
1
+ import styled, { css, keyframes } from 'styled-components';
2
+ import colors from '@projectcor/theme/lib/base/colors';
3
+ export var LIVE_VIEWPORT_MAX_HEIGHT = 72;
4
+ var shimmer = keyframes(["0%{background-position:200% 0;}100%{background-position:-200% 0;}"]);
5
+ var fadeIn = keyframes(["from{opacity:0;transform:translateY(-2px);}to{opacity:1;transform:none;}"]);
6
+ var stepReplace = keyframes(["from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:none;}"]);
7
+
8
+ /* Halo del paso en curso: lo distingue de los ya cerrados sin cambiar su tamaño. */
9
+ var markerPulse = keyframes(["0%{box-shadow:0 0 0 0 rgba(32,32,32,0.28);}70%{box-shadow:0 0 0 5px rgba(32,32,32,0);}100%{box-shadow:0 0 0 0 rgba(32,32,32,0);}"]);
10
+
11
+ /** Gutter donde viven el marcador y la línea que une los pasos. */
12
+ var MARKER_SIZE = 7;
13
+ var GUTTER_WIDTH = 16;
14
+ var MARKER_PADDING_Y = 4;
15
+ /* Centra el marcador con la primera línea de texto (16px * 1.5 = 24px) + padding vertical. */
16
+ var MARKER_TOP = MARKER_PADDING_Y + (24 - MARKER_SIZE) / 2;
17
+ /** Centra el rail de 1px con el círculo de 7px. */
18
+ var MARKER_RAIL_LEFT = (MARKER_SIZE - 1) / 2;
19
+ /** Separación entre el rail y el borde del círculo. */
20
+ var RAIL_GAP = 4;
21
+ var MARKER_RAIL_TOP_END = MARKER_TOP - RAIL_GAP;
22
+ var MARKER_RAIL_BOTTOM_START = MARKER_TOP + MARKER_SIZE + RAIL_GAP;
23
+ var railBeforeBottom = function railBeforeBottom(railThrough, railTop) {
24
+ if (railThrough) return '0';
25
+ if (railTop) return "calc(100% - ".concat(MARKER_RAIL_TOP_END, "px)");
26
+ return '0';
27
+ };
28
+ var stepRowPaddingBottom = function stepRowPaddingBottom(hasMarker, connectBelow) {
29
+ if (hasMarker) return "".concat(MARKER_PADDING_Y, "px");
30
+ return connectBelow ? '8px' : '0';
31
+ };
32
+ var railBeforeDisplay = function railBeforeDisplay(showChrome, railThrough, railTop) {
33
+ return showChrome && (railThrough || railTop) ? 'block' : 'none';
34
+ };
35
+ var railAfterDisplay = function railAfterDisplay(showChrome, railBottom) {
36
+ return showChrome && railBottom ? 'block' : 'none';
37
+ };
38
+ var railSegmentStyle = "\n position: absolute;\n left: ".concat(MARKER_RAIL_LEFT, "px;\n width: 1px;\n z-index: 0;\n background: ").concat(colors.text.mediumGray, ";\n opacity: 0.25;\n");
39
+
40
+ /** El paso activo va a color pleno; los cerrados quedan atenuados. */
41
+ var markerColor = function markerColor(status, isActive) {
42
+ if (status === 'error') return colors.error.main;
43
+ if (isActive) return colors.text.primary;
44
+ return colors.text.mediumGray;
45
+ };
46
+ export var SCReasoningBlock = styled.div.withConfig({
47
+ displayName: "ReasoningBlockstyles__SCReasoningBlock",
48
+ componentId: "sc-y2psdb-0"
49
+ })(["width:100%;max-width:640px;display:flex;flex-direction:column;"]);
50
+ export var SCLiveStep = styled.div.withConfig({
51
+ displayName: "ReasoningBlockstyles__SCLiveStep",
52
+ componentId: "sc-y2psdb-1"
53
+ })(["width:100%;max-height:", "px;overflow:hidden;animation:", " 0.22s ease-out;"], LIVE_VIEWPORT_MAX_HEIGHT, stepReplace);
54
+
55
+ /* Timeline en vivo: los pasos se apilan en vez de reemplazarse. */
56
+ export var SCReasoningTimeline = styled.div.withConfig({
57
+ displayName: "ReasoningBlockstyles__SCReasoningTimeline",
58
+ componentId: "sc-y2psdb-2"
59
+ })(["width:100%;max-width:640px;display:flex;flex-direction:column;"]);
60
+ var stepReplaceAnim = css(["animation:", " 0.24s ease-out both;"], stepReplace);
61
+
62
+ /* Cada fila entra sola cuando llega su paso: sin delay escalonado (no es un listado que monta junto). */
63
+ export var SCTimelineRow = styled.div.withConfig({
64
+ displayName: "ReasoningBlockstyles__SCTimelineRow",
65
+ componentId: "sc-y2psdb-3"
66
+ })(["", ""], function (_ref) {
67
+ var $seamless = _ref.$seamless;
68
+ return $seamless ? css([""]) : stepReplaceAnim;
69
+ });
70
+
71
+ /* Va debajo del cuerpo del mensaje: separa del texto y no deja aire sobrante abajo. */
72
+ export var SCTimelineIndicator = styled.div.withConfig({
73
+ displayName: "ReasoningBlockstyles__SCTimelineIndicator",
74
+ componentId: "sc-y2psdb-4"
75
+ })(["padding-top:6px;animation:", " 0.24s ease-out both;> *{padding-bottom:0;}"], stepReplace);
76
+
77
+ /** Respuesta final en stream: sin gutter de la traza, debajo del razonamiento. */
78
+ export var SCFinalAnswerBody = styled.div.withConfig({
79
+ displayName: "ReasoningBlockstyles__SCFinalAnswerBody",
80
+ componentId: "sc-y2psdb-5"
81
+ })(["width:100%;max-width:640px;"]);
82
+
83
+ /* El markdown lo resuelve MaiaStreamdown (mismo variant que el cuerpo del mensaje). */
84
+ export var SCThinkingText = styled.div.withConfig({
85
+ displayName: "ReasoningBlockstyles__SCThinkingText",
86
+ componentId: "sc-y2psdb-6"
87
+ })(["overflow-wrap:anywhere;opacity:", ";font-style:", ";"], function (_ref2) {
88
+ var $muted = _ref2.$muted;
89
+ return $muted ? 0.6 : 1;
90
+ }, function (_ref3) {
91
+ var $muted = _ref3.$muted;
92
+ return $muted ? 'italic' : 'normal';
93
+ });
94
+
95
+ /**
96
+ * Fila de la traza. Solo los pasos de acción (tool/handoff) llevan círculo; las
97
+ * narraciones comparten el gutter para que la línea las atraviese. El rail deja
98
+ * 4px de separación antes de cada círculo.
99
+ */
100
+ export var SCStepRow = styled.div.withConfig({
101
+ displayName: "ReasoningBlockstyles__SCStepRow",
102
+ componentId: "sc-y2psdb-7"
103
+ })(["position:relative;padding-left:", ";padding-top:", ";padding-bottom:", ";&::before{content:'';display:", ";", " top:0;bottom:", ";}&::after{content:'';display:", ";", " top:", "px;bottom:0;}.ReasoningBlock-marker{display:", ";position:absolute;left:0;top:", "px;z-index:1;width:", "px;height:", "px;border-radius:50%;background:", ";opacity:", ";animation:", " 1.6s ease-out infinite;}"], function (_ref4) {
104
+ var $showChrome = _ref4.$showChrome;
105
+ return $showChrome ? "".concat(GUTTER_WIDTH, "px") : '0';
106
+ }, function (_ref5) {
107
+ var $hasMarker = _ref5.$hasMarker;
108
+ return $hasMarker ? "".concat(MARKER_PADDING_Y, "px") : '0';
109
+ }, function (_ref6) {
110
+ var $hasMarker = _ref6.$hasMarker,
111
+ $connectBelow = _ref6.$connectBelow;
112
+ return stepRowPaddingBottom($hasMarker, $connectBelow);
113
+ }, function (_ref7) {
114
+ var $showChrome = _ref7.$showChrome,
115
+ $railThrough = _ref7.$railThrough,
116
+ $railTop = _ref7.$railTop;
117
+ return railBeforeDisplay($showChrome, $railThrough, $railTop);
118
+ }, railSegmentStyle, function (_ref8) {
119
+ var $railThrough = _ref8.$railThrough,
120
+ $railTop = _ref8.$railTop;
121
+ return railBeforeBottom($railThrough, $railTop);
122
+ }, function (_ref9) {
123
+ var $showChrome = _ref9.$showChrome,
124
+ $railBottom = _ref9.$railBottom;
125
+ return railAfterDisplay($showChrome, $railBottom);
126
+ }, railSegmentStyle, MARKER_RAIL_BOTTOM_START, function (_ref0) {
127
+ var $showChrome = _ref0.$showChrome;
128
+ return $showChrome ? 'block' : 'none';
129
+ }, MARKER_TOP, MARKER_SIZE, MARKER_SIZE, function (_ref1) {
130
+ var $status = _ref1.$status,
131
+ $isActive = _ref1.$isActive;
132
+ return markerColor($status, $isActive);
133
+ }, function (_ref10) {
134
+ var $isActive = _ref10.$isActive;
135
+ return $isActive ? 1 : 0.45;
136
+ }, function (_ref11) {
137
+ var $isActive = _ref11.$isActive;
138
+ return $isActive ? markerPulse : 'none';
139
+ });
140
+ export var SCParallelContent = styled.div.withConfig({
141
+ displayName: "ReasoningBlockstyles__SCParallelContent",
142
+ componentId: "sc-y2psdb-8"
143
+ })(["display:flex;flex-direction:column;min-width:0;"]);
144
+ export var SCToolStep = styled.div.withConfig({
145
+ displayName: "ReasoningBlockstyles__SCToolStep",
146
+ componentId: "sc-y2psdb-9"
147
+ })(["display:flex;align-items:baseline;gap:6px;font-size:16px;line-height:150%;color:#202020;.ReasoningBlock-toolLabel{flex-shrink:0;white-space:nowrap;color:", ";}.ReasoningBlock-toolPreview{flex:1;min-width:0;opacity:0.75;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}"], function (_ref12) {
148
+ var $status = _ref12.$status;
149
+ return $status === 'error' ? colors.error.main : colors.text.primary;
150
+ });
151
+ export var SCParallelCount = styled.span.withConfig({
152
+ displayName: "ReasoningBlockstyles__SCParallelCount",
153
+ componentId: "sc-y2psdb-10"
154
+ })(["flex-shrink:0;font-size:14px;line-height:150%;color:#808080;"]);
155
+ export var SCParallelDetail = styled.div.withConfig({
156
+ displayName: "ReasoningBlockstyles__SCParallelDetail",
157
+ componentId: "sc-y2psdb-11"
158
+ })(["margin-top:2px;font-size:13px;line-height:150%;color:#808080;overflow-wrap:anywhere;"]);
159
+ export var SCSummaryToggle = styled.button.withConfig({
160
+ displayName: "ReasoningBlockstyles__SCSummaryToggle",
161
+ componentId: "sc-y2psdb-12"
162
+ })(["align-self:flex-start;display:inline-flex;align-items:center;gap:4px;padding:0;border:none;background:transparent;cursor:pointer;font-family:'Work Sans',sans-serif;font-size:16px;font-weight:400;line-height:26px;color:#808080;transition:color 0.18s ease;animation:", " 0.24s ease-out;&:hover:not(:disabled){color:", ";}&:disabled{cursor:default;opacity:0.7;}&:disabled .ReasoningBlock-chevron{display:none;}&:focus-visible{outline:2px solid ", ";outline-offset:2px;}.ReasoningBlock-chevron{flex-shrink:0;display:inline-flex;transition:transform 200ms ease;}&[aria-expanded='true'] .ReasoningBlock-chevron{transform:rotate(-90deg);}"], fadeIn, colors.text.primary, colors.primary.main);
163
+
164
+ /* height: auto <-> 0 sin medir el contenido: el track de grid interpola entre 0fr y 1fr. */
165
+ export var SCTraceCollapse = styled.div.withConfig({
166
+ displayName: "ReasoningBlockstyles__SCTraceCollapse",
167
+ componentId: "sc-y2psdb-13"
168
+ })(["display:grid;grid-template-rows:", ";transition:grid-template-rows 240ms cubic-bezier(0.2,0,0,1);> *{min-height:0;overflow:hidden;}"], function (_ref13) {
169
+ var $isOpen = _ref13.$isOpen;
170
+ return $isOpen ? '1fr' : '0fr';
171
+ });
172
+ export var SCExpandedTrace = styled.div.withConfig({
173
+ displayName: "ReasoningBlockstyles__SCExpandedTrace",
174
+ componentId: "sc-y2psdb-14"
175
+ })(["display:flex;flex-direction:column;opacity:", ";padding-bottom:", ";transform:translateY(", ");transition:opacity 140ms ease-out,transform 140ms ease-out,padding 240ms cubic-bezier(0.2,0,0,1);"], function (_ref14) {
176
+ var $isOpen = _ref14.$isOpen;
177
+ return $isOpen ? 1 : 0;
178
+ }, function (_ref15) {
179
+ var $isOpen = _ref15.$isOpen;
180
+ return $isOpen ? '24px' : '0';
181
+ }, function (_ref16) {
182
+ var $isOpen = _ref16.$isOpen;
183
+ return $isOpen ? '0' : '-4px';
184
+ });
185
+ export var SCTraceNote = styled.p.withConfig({
186
+ displayName: "ReasoningBlockstyles__SCTraceNote",
187
+ componentId: "sc-y2psdb-15"
188
+ })(["margin:8px 0 0;font-size:11px;font-style:italic;color:", ";opacity:0.75;"], colors.text.mediumGray);
189
+ export var SCLoadingLine = styled.div.withConfig({
190
+ displayName: "ReasoningBlockstyles__SCLoadingLine",
191
+ componentId: "sc-y2psdb-16"
192
+ })(["height:10px;width:60%;border-radius:6px;background:linear-gradient(90deg,rgba(0,0,0,0.04) 0%,rgba(0,0,0,0.08) 50%,rgba(0,0,0,0.04) 100%);background-size:200% 100%;animation:", " 1.8s ease-in-out infinite;"], shimmer);
193
+ export var SCErrorRow = styled.div.withConfig({
194
+ displayName: "ReasoningBlockstyles__SCErrorRow",
195
+ componentId: "sc-y2psdb-17"
196
+ })(["display:flex;align-items:center;gap:8px;font-size:12px;color:", ";button{border:none;background:none;padding:0;cursor:pointer;font-size:12px;text-decoration:underline;color:", ";}"], colors.text.mediumGray, colors.text.primary);
197
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJjc3MiLCJrZXlmcmFtZXMiLCJjb2xvcnMiLCJMSVZFX1ZJRVdQT1JUX01BWF9IRUlHSFQiLCJzaGltbWVyIiwiZmFkZUluIiwic3RlcFJlcGxhY2UiLCJtYXJrZXJQdWxzZSIsIk1BUktFUl9TSVpFIiwiR1VUVEVSX1dJRFRIIiwiTUFSS0VSX1BBRERJTkdfWSIsIk1BUktFUl9UT1AiLCJNQVJLRVJfUkFJTF9MRUZUIiwiUkFJTF9HQVAiLCJNQVJLRVJfUkFJTF9UT1BfRU5EIiwiTUFSS0VSX1JBSUxfQk9UVE9NX1NUQVJUIiwicmFpbEJlZm9yZUJvdHRvbSIsInJhaWxUaHJvdWdoIiwicmFpbFRvcCIsImNvbmNhdCIsInN0ZXBSb3dQYWRkaW5nQm90dG9tIiwiaGFzTWFya2VyIiwiY29ubmVjdEJlbG93IiwicmFpbEJlZm9yZURpc3BsYXkiLCJzaG93Q2hyb21lIiwicmFpbEFmdGVyRGlzcGxheSIsInJhaWxCb3R0b20iLCJyYWlsU2VnbWVudFN0eWxlIiwidGV4dCIsIm1lZGl1bUdyYXkiLCJtYXJrZXJDb2xvciIsInN0YXR1cyIsImlzQWN0aXZlIiwiZXJyb3IiLCJtYWluIiwicHJpbWFyeSIsIlNDUmVhc29uaW5nQmxvY2siLCJkaXYiLCJ3aXRoQ29uZmlnIiwiZGlzcGxheU5hbWUiLCJjb21wb25lbnRJZCIsIlNDTGl2ZVN0ZXAiLCJTQ1JlYXNvbmluZ1RpbWVsaW5lIiwic3RlcFJlcGxhY2VBbmltIiwiU0NUaW1lbGluZVJvdyIsIl9yZWYiLCIkc2VhbWxlc3MiLCJTQ1RpbWVsaW5lSW5kaWNhdG9yIiwiU0NGaW5hbEFuc3dlckJvZHkiLCJTQ1RoaW5raW5nVGV4dCIsIl9yZWYyIiwiJG11dGVkIiwiX3JlZjMiLCJTQ1N0ZXBSb3ciLCJfcmVmNCIsIiRzaG93Q2hyb21lIiwiX3JlZjUiLCIkaGFzTWFya2VyIiwiX3JlZjYiLCIkY29ubmVjdEJlbG93IiwiX3JlZjciLCIkcmFpbFRocm91Z2giLCIkcmFpbFRvcCIsIl9yZWY4IiwiX3JlZjkiLCIkcmFpbEJvdHRvbSIsIl9yZWYwIiwiX3JlZjEiLCIkc3RhdHVzIiwiJGlzQWN0aXZlIiwiX3JlZjEwIiwiX3JlZjExIiwiU0NQYXJhbGxlbENvbnRlbnQiLCJTQ1Rvb2xTdGVwIiwiX3JlZjEyIiwiU0NQYXJhbGxlbENvdW50Iiwic3BhbiIsIlNDUGFyYWxsZWxEZXRhaWwiLCJTQ1N1bW1hcnlUb2dnbGUiLCJidXR0b24iLCJTQ1RyYWNlQ29sbGFwc2UiLCJfcmVmMTMiLCIkaXNPcGVuIiwiU0NFeHBhbmRlZFRyYWNlIiwiX3JlZjE0IiwiX3JlZjE1IiwiX3JlZjE2IiwiU0NUcmFjZU5vdGUiLCJwIiwiU0NMb2FkaW5nTGluZSIsIlNDRXJyb3JSb3ciXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdCbG9jay5zdHlsZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN0eWxlZCwgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJ1xuaW1wb3J0IGNvbG9ycyBmcm9tICdAcHJvamVjdGNvci90aGVtZS9saWIvYmFzZS9jb2xvcnMnXG5cbmV4cG9ydCBjb25zdCBMSVZFX1ZJRVdQT1JUX01BWF9IRUlHSFQgPSA3MlxuXG5jb25zdCBzaGltbWVyID0ga2V5ZnJhbWVzYFxuICAwJSB7IGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMDsgfVxuICAxMDAlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwMCUgMDsgfVxuYFxuXG5jb25zdCBmYWRlSW4gPSBrZXlmcmFtZXNgXG4gIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7IH1cbiAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7IH1cbmBcblxuY29uc3Qgc3RlcFJlcGxhY2UgPSBrZXlmcmFtZXNgXG4gIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNHB4KTsgfVxuICB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogbm9uZTsgfVxuYFxuXG4vKiBIYWxvIGRlbCBwYXNvIGVuIGN1cnNvOiBsbyBkaXN0aW5ndWUgZGUgbG9zIHlhIGNlcnJhZG9zIHNpbiBjYW1iaWFyIHN1IHRhbWHDsW8uICovXG5jb25zdCBtYXJrZXJQdWxzZSA9IGtleWZyYW1lc2BcbiAgMCUgeyBib3gtc2hhZG93OiAwIDAgMCAwIHJnYmEoMzIsIDMyLCAzMiwgMC4yOCk7IH1cbiAgNzAlIHsgYm94LXNoYWRvdzogMCAwIDAgNXB4IHJnYmEoMzIsIDMyLCAzMiwgMCk7IH1cbiAgMTAwJSB7IGJveC1zaGFkb3c6IDAgMCAwIDAgcmdiYSgzMiwgMzIsIDMyLCAwKTsgfVxuYFxuXG4vKiogR3V0dGVyIGRvbmRlIHZpdmVuIGVsIG1hcmNhZG9yIHkgbGEgbMOtbmVhIHF1ZSB1bmUgbG9zIHBhc29zLiAqL1xuY29uc3QgTUFSS0VSX1NJWkUgPSA3XG5jb25zdCBHVVRURVJfV0lEVEggPSAxNlxuY29uc3QgTUFSS0VSX1BBRERJTkdfWSA9IDRcbi8qIENlbnRyYSBlbCBtYXJjYWRvciBjb24gbGEgcHJpbWVyYSBsw61uZWEgZGUgdGV4dG8gKDE2cHggKiAxLjUgPSAyNHB4KSArIHBhZGRpbmcgdmVydGljYWwuICovXG5jb25zdCBNQVJLRVJfVE9QID0gTUFSS0VSX1BBRERJTkdfWSArICgyNCAtIE1BUktFUl9TSVpFKSAvIDJcbi8qKiBDZW50cmEgZWwgcmFpbCBkZSAxcHggY29uIGVsIGPDrXJjdWxvIGRlIDdweC4gKi9cbmNvbnN0IE1BUktFUl9SQUlMX0xFRlQgPSAoTUFSS0VSX1NJWkUgLSAxKSAvIDJcbi8qKiBTZXBhcmFjacOzbiBlbnRyZSBlbCByYWlsIHkgZWwgYm9yZGUgZGVsIGPDrXJjdWxvLiAqL1xuY29uc3QgUkFJTF9HQVAgPSA0XG5jb25zdCBNQVJLRVJfUkFJTF9UT1BfRU5EID0gTUFSS0VSX1RPUCAtIFJBSUxfR0FQXG5jb25zdCBNQVJLRVJfUkFJTF9CT1RUT01fU1RBUlQgPSBNQVJLRVJfVE9QICsgTUFSS0VSX1NJWkUgKyBSQUlMX0dBUFxuXG5jb25zdCByYWlsQmVmb3JlQm90dG9tID0gKHJhaWxUaHJvdWdoPzogYm9vbGVhbiwgcmFpbFRvcD86IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuICBpZiAocmFpbFRocm91Z2gpIHJldHVybiAnMCdcbiAgaWYgKHJhaWxUb3ApIHJldHVybiBgY2FsYygxMDAlIC0gJHtNQVJLRVJfUkFJTF9UT1BfRU5EfXB4KWBcbiAgcmV0dXJuICcwJ1xufVxuXG5jb25zdCBzdGVwUm93UGFkZGluZ0JvdHRvbSA9IChoYXNNYXJrZXI/OiBib29sZWFuLCBjb25uZWN0QmVsb3c/OiBib29sZWFuKTogc3RyaW5nID0+IHtcbiAgaWYgKGhhc01hcmtlcikgcmV0dXJuIGAke01BUktFUl9QQURESU5HX1l9cHhgXG4gIHJldHVybiBjb25uZWN0QmVsb3cgPyAnOHB4JyA6ICcwJ1xufVxuXG5jb25zdCByYWlsQmVmb3JlRGlzcGxheSA9IChzaG93Q2hyb21lPzogYm9vbGVhbiwgcmFpbFRocm91Z2g/OiBib29sZWFuLCByYWlsVG9wPzogYm9vbGVhbik6IHN0cmluZyA9PlxuICBzaG93Q2hyb21lICYmIChyYWlsVGhyb3VnaCB8fCByYWlsVG9wKSA/ICdibG9jaycgOiAnbm9uZSdcblxuY29uc3QgcmFpbEFmdGVyRGlzcGxheSA9IChzaG93Q2hyb21lPzogYm9vbGVhbiwgcmFpbEJvdHRvbT86IGJvb2xlYW4pOiBzdHJpbmcgPT5cbiAgc2hvd0Nocm9tZSAmJiByYWlsQm90dG9tID8gJ2Jsb2NrJyA6ICdub25lJ1xuXG5jb25zdCByYWlsU2VnbWVudFN0eWxlID0gYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6ICR7TUFSS0VSX1JBSUxfTEVGVH1weDtcbiAgd2lkdGg6IDFweDtcbiAgei1pbmRleDogMDtcbiAgYmFja2dyb3VuZDogJHtjb2xvcnMudGV4dC5tZWRpdW1HcmF5fTtcbiAgb3BhY2l0eTogMC4yNTtcbmBcblxuLyoqIEVsIHBhc28gYWN0aXZvIHZhIGEgY29sb3IgcGxlbm87IGxvcyBjZXJyYWRvcyBxdWVkYW4gYXRlbnVhZG9zLiAqL1xuY29uc3QgbWFya2VyQ29sb3IgPSAoc3RhdHVzPzogc3RyaW5nLCBpc0FjdGl2ZT86IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuICBpZiAoc3RhdHVzID09PSAnZXJyb3InKSByZXR1cm4gY29sb3JzLmVycm9yLm1haW5cbiAgaWYgKGlzQWN0aXZlKSByZXR1cm4gY29sb3JzLnRleHQucHJpbWFyeVxuICByZXR1cm4gY29sb3JzLnRleHQubWVkaXVtR3JheVxufVxuXG5leHBvcnQgY29uc3QgU0NSZWFzb25pbmdCbG9jayA9IHN0eWxlZC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDY0MHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAvKiBTaW4gZ2FwOiBlbCBlc3BhY2lvIGhhY2lhIGVsIGRldGFsbGUgdml2ZSBlbiBzdSBwYWRkaW5nLXRvcCwgYXPDrSBjb2xhcHNhIGp1bnRvIGNvbiDDqWwuICovXG5gXG5cbmV4cG9ydCBjb25zdCBTQ0xpdmVTdGVwID0gc3R5bGVkLmRpdmBcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC1oZWlnaHQ6ICR7TElWRV9WSUVXUE9SVF9NQVhfSEVJR0hUfXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBhbmltYXRpb246ICR7c3RlcFJlcGxhY2V9IDAuMjJzIGVhc2Utb3V0O1xuYFxuXG4vKiBUaW1lbGluZSBlbiB2aXZvOiBsb3MgcGFzb3Mgc2UgYXBpbGFuIGVuIHZleiBkZSByZWVtcGxhemFyc2UuICovXG5leHBvcnQgY29uc3QgU0NSZWFzb25pbmdUaW1lbGluZSA9IHN0eWxlZC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDY0MHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuYFxuXG5jb25zdCBzdGVwUmVwbGFjZUFuaW0gPSBjc3NgXG4gIGFuaW1hdGlvbjogJHtzdGVwUmVwbGFjZX0gMC4yNHMgZWFzZS1vdXQgYm90aDtcbmBcblxuLyogQ2FkYSBmaWxhIGVudHJhIHNvbGEgY3VhbmRvIGxsZWdhIHN1IHBhc286IHNpbiBkZWxheSBlc2NhbG9uYWRvIChubyBlcyB1biBsaXN0YWRvIHF1ZSBtb250YSBqdW50bykuICovXG5leHBvcnQgY29uc3QgU0NUaW1lbGluZVJvdyA9IHN0eWxlZC5kaXY8eyAkc2VhbWxlc3M/OiBib29sZWFuIH0+YFxuICAkeyh7ICRzZWFtbGVzcyB9KSA9PiAoJHNlYW1sZXNzID8gY3NzYGAgOiBzdGVwUmVwbGFjZUFuaW0pfVxuYFxuXG4vKiBWYSBkZWJham8gZGVsIGN1ZXJwbyBkZWwgbWVuc2FqZTogc2VwYXJhIGRlbCB0ZXh0byB5IG5vIGRlamEgYWlyZSBzb2JyYW50ZSBhYmFqby4gKi9cbmV4cG9ydCBjb25zdCBTQ1RpbWVsaW5lSW5kaWNhdG9yID0gc3R5bGVkLmRpdmBcbiAgcGFkZGluZy10b3A6IDZweDtcbiAgYW5pbWF0aW9uOiAke3N0ZXBSZXBsYWNlfSAwLjI0cyBlYXNlLW91dCBib3RoO1xuXG4gID4gKiB7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG4gIH1cbmBcblxuLyoqIFJlc3B1ZXN0YSBmaW5hbCBlbiBzdHJlYW06IHNpbiBndXR0ZXIgZGUgbGEgdHJhemEsIGRlYmFqbyBkZWwgcmF6b25hbWllbnRvLiAqL1xuZXhwb3J0IGNvbnN0IFNDRmluYWxBbnN3ZXJCb2R5ID0gc3R5bGVkLmRpdmBcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogNjQwcHg7XG5gXG5cbi8qIEVsIG1hcmtkb3duIGxvIHJlc3VlbHZlIE1haWFTdHJlYW1kb3duIChtaXNtbyB2YXJpYW50IHF1ZSBlbCBjdWVycG8gZGVsIG1lbnNhamUpLiAqL1xuZXhwb3J0IGNvbnN0IFNDVGhpbmtpbmdUZXh0ID0gc3R5bGVkLmRpdjx7ICRtdXRlZD86IGJvb2xlYW4gfT5gXG4gIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICAvKiBFbCB0aGlua2luZyAocmF6b25hbWllbnRvIGNydWRvKSB2YSBhdGVudWFkbyBwYXJhIGRpc3Rpbmd1aXJsbyBkZSBsYSBuYXJyYWNpw7NuLiAqL1xuICBvcGFjaXR5OiAkeyh7ICRtdXRlZCB9KSA9PiAoJG11dGVkID8gMC42IDogMSl9O1xuICBmb250LXN0eWxlOiAkeyh7ICRtdXRlZCB9KSA9PiAoJG11dGVkID8gJ2l0YWxpYycgOiAnbm9ybWFsJyl9O1xuYFxuXG4vKipcbiAqIEZpbGEgZGUgbGEgdHJhemEuIFNvbG8gbG9zIHBhc29zIGRlIGFjY2nDs24gKHRvb2wvaGFuZG9mZikgbGxldmFuIGPDrXJjdWxvOyBsYXNcbiAqIG5hcnJhY2lvbmVzIGNvbXBhcnRlbiBlbCBndXR0ZXIgcGFyYSBxdWUgbGEgbMOtbmVhIGxhcyBhdHJhdmllc2UuIEVsIHJhaWwgZGVqYVxuICogNHB4IGRlIHNlcGFyYWNpw7NuIGFudGVzIGRlIGNhZGEgY8OtcmN1bG8uXG4gKi9cbmV4cG9ydCBjb25zdCBTQ1N0ZXBSb3cgPSBzdHlsZWQuZGl2PHtcbiAgJHN0YXR1cz86IHN0cmluZ1xuICAkaGFzTWFya2VyPzogYm9vbGVhblxuICAkY29ubmVjdEFib3ZlPzogYm9vbGVhblxuICAkY29ubmVjdEJlbG93PzogYm9vbGVhblxuICAkaXNBY3RpdmU/OiBib29sZWFuXG4gICRzaG93Q2hyb21lPzogYm9vbGVhblxuICAkcmFpbFRocm91Z2g/OiBib29sZWFuXG4gICRyYWlsVG9wPzogYm9vbGVhblxuICAkcmFpbEJvdHRvbT86IGJvb2xlYW5cbn0+YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctbGVmdDogJHsoeyAkc2hvd0Nocm9tZSB9KSA9PiAoJHNob3dDaHJvbWUgPyBgJHtHVVRURVJfV0lEVEh9cHhgIDogJzAnKX07XG4gIHBhZGRpbmctdG9wOiAkeyh7ICRoYXNNYXJrZXIgfSkgPT4gKCRoYXNNYXJrZXIgPyBgJHtNQVJLRVJfUEFERElOR19ZfXB4YCA6ICcwJyl9O1xuICBwYWRkaW5nLWJvdHRvbTogJHsoeyAkaGFzTWFya2VyLCAkY29ubmVjdEJlbG93IH0pID0+IHN0ZXBSb3dQYWRkaW5nQm90dG9tKCRoYXNNYXJrZXIsICRjb25uZWN0QmVsb3cpfTtcblxuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6ICR7KHsgJHNob3dDaHJvbWUsICRyYWlsVGhyb3VnaCwgJHJhaWxUb3AgfSkgPT4gcmFpbEJlZm9yZURpc3BsYXkoJHNob3dDaHJvbWUsICRyYWlsVGhyb3VnaCwgJHJhaWxUb3ApfTtcbiAgICAke3JhaWxTZWdtZW50U3R5bGV9XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogJHsoeyAkcmFpbFRocm91Z2gsICRyYWlsVG9wIH0pID0+IHJhaWxCZWZvcmVCb3R0b20oJHJhaWxUaHJvdWdoLCAkcmFpbFRvcCl9O1xuICB9XG5cbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIGRpc3BsYXk6ICR7KHsgJHNob3dDaHJvbWUsICRyYWlsQm90dG9tIH0pID0+IHJhaWxBZnRlckRpc3BsYXkoJHNob3dDaHJvbWUsICRyYWlsQm90dG9tKX07XG4gICAgJHtyYWlsU2VnbWVudFN0eWxlfVxuICAgIHRvcDogJHtNQVJLRVJfUkFJTF9CT1RUT01fU1RBUlR9cHg7XG4gICAgYm90dG9tOiAwO1xuICB9XG5cbiAgLlJlYXNvbmluZ0Jsb2NrLW1hcmtlciB7XG4gICAgZGlzcGxheTogJHsoeyAkc2hvd0Nocm9tZSB9KSA9PiAoJHNob3dDaHJvbWUgPyAnYmxvY2snIDogJ25vbmUnKX07XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAke01BUktFUl9UT1B9cHg7XG4gICAgei1pbmRleDogMTtcbiAgICB3aWR0aDogJHtNQVJLRVJfU0laRX1weDtcbiAgICBoZWlnaHQ6ICR7TUFSS0VSX1NJWkV9cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQ6ICR7KHsgJHN0YXR1cywgJGlzQWN0aXZlIH0pID0+IG1hcmtlckNvbG9yKCRzdGF0dXMsICRpc0FjdGl2ZSl9O1xuICAgIG9wYWNpdHk6ICR7KHsgJGlzQWN0aXZlIH0pID0+ICgkaXNBY3RpdmUgPyAxIDogMC40NSl9O1xuICAgIGFuaW1hdGlvbjogJHsoeyAkaXNBY3RpdmUgfSkgPT4gKCRpc0FjdGl2ZSA/IG1hcmtlclB1bHNlIDogJ25vbmUnKX0gMS42cyBlYXNlLW91dCBpbmZpbml0ZTtcbiAgfVxuYFxuXG5leHBvcnQgY29uc3QgU0NQYXJhbGxlbENvbnRlbnQgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtaW4td2lkdGg6IDA7XG5gXG5cbmV4cG9ydCBjb25zdCBTQ1Rvb2xTdGVwID0gc3R5bGVkLmRpdjx7ICRzdGF0dXM/OiBzdHJpbmcgfT5gXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgZ2FwOiA2cHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XG4gIGNvbG9yOiAjMjAyMDIwO1xuXG4gIC5SZWFzb25pbmdCbG9jay10b29sTGFiZWwge1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgY29sb3I6ICR7KHsgJHN0YXR1cyB9KSA9PiAoJHN0YXR1cyA9PT0gJ2Vycm9yJyA/IGNvbG9ycy5lcnJvci5tYWluIDogY29sb3JzLnRleHQucHJpbWFyeSl9O1xuICB9XG5cbiAgLlJlYXNvbmluZ0Jsb2NrLXRvb2xQcmV2aWV3IHtcbiAgICBmbGV4OiAxO1xuICAgIG1pbi13aWR0aDogMDtcbiAgICBvcGFjaXR5OiAwLjc1O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuYFxuXG5leHBvcnQgY29uc3QgU0NQYXJhbGxlbENvdW50ID0gc3R5bGVkLnNwYW5gXG4gIGZsZXgtc2hyaW5rOiAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xuICBjb2xvcjogIzgwODA4MDtcbmBcblxuZXhwb3J0IGNvbnN0IFNDUGFyYWxsZWxEZXRhaWwgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tdG9wOiAycHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XG4gIGNvbG9yOiAjODA4MDgwO1xuICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTtcbmBcblxuZXhwb3J0IGNvbnN0IFNDU3VtbWFyeVRvZ2dsZSA9IHN0eWxlZC5idXR0b25gXG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDRweDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LWZhbWlseTogJ1dvcmsgU2FucycsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDI2cHg7XG4gIGNvbG9yOiAjODA4MDgwO1xuICB0cmFuc2l0aW9uOiBjb2xvciAwLjE4cyBlYXNlO1xuICBhbmltYXRpb246ICR7ZmFkZUlufSAwLjI0cyBlYXNlLW91dDtcblxuICAmOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBjb2xvcjogJHtjb2xvcnMudGV4dC5wcmltYXJ5fTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBvcGFjaXR5OiAwLjc7XG4gIH1cblxuICAmOmRpc2FibGVkIC5SZWFzb25pbmdCbG9jay1jaGV2cm9uIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICBvdXRsaW5lOiAycHggc29saWQgJHtjb2xvcnMucHJpbWFyeS5tYWlufTtcbiAgICBvdXRsaW5lLW9mZnNldDogMnB4O1xuICB9XG5cbiAgLlJlYXNvbmluZ0Jsb2NrLWNoZXZyb24ge1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyMDBtcyBlYXNlO1xuICB9XG5cbiAgLyogQ29sYXBzYWRvIGFwdW50YSBhIGxhIGRlcmVjaGEgKG9yaWVudGFjacOzbiBuYXRpdmEgZGVsIGljb25vKTsgZXhwYW5kaWRvLCBhcnJpYmEuICovXG4gICZbYXJpYS1leHBhbmRlZD0ndHJ1ZSddIC5SZWFzb25pbmdCbG9jay1jaGV2cm9uIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICB9XG5cbiAgLyogRWwgZ3Vpb24gZXMgcGFydGUgZGVsIHRleHRvIGVuIGVsIG1hcXVldGFkbywgbm8gdW4gc2VwYXJhZG9yIGF0ZW51YWRvLiAqL1xuYFxuXG4vKiBoZWlnaHQ6IGF1dG8gPC0+IDAgc2luIG1lZGlyIGVsIGNvbnRlbmlkbzogZWwgdHJhY2sgZGUgZ3JpZCBpbnRlcnBvbGEgZW50cmUgMGZyIHkgMWZyLiAqL1xuZXhwb3J0IGNvbnN0IFNDVHJhY2VDb2xsYXBzZSA9IHN0eWxlZC5kaXY8eyAkaXNPcGVuOiBib29sZWFuIH0+YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLXJvd3M6ICR7KHsgJGlzT3BlbiB9KSA9PiAoJGlzT3BlbiA/ICcxZnInIDogJzBmcicpfTtcbiAgdHJhbnNpdGlvbjogZ3JpZC10ZW1wbGF0ZS1yb3dzIDI0MG1zIGN1YmljLWJlemllcigwLjIsIDAsIDAsIDEpO1xuXG4gID4gKiB7XG4gICAgbWluLWhlaWdodDogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5gXG5cbmV4cG9ydCBjb25zdCBTQ0V4cGFuZGVkVHJhY2UgPSBzdHlsZWQuZGl2PHsgJGlzT3BlbjogYm9vbGVhbiB9PmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgb3BhY2l0eTogJHsoeyAkaXNPcGVuIH0pID0+ICgkaXNPcGVuID8gMSA6IDApfTtcbiAgcGFkZGluZy1ib3R0b206ICR7KHsgJGlzT3BlbiB9KSA9PiAoJGlzT3BlbiA/ICcyNHB4JyA6ICcwJyl9O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoJHsoeyAkaXNPcGVuIH0pID0+ICgkaXNPcGVuID8gJzAnIDogJy00cHgnKX0pO1xuICB0cmFuc2l0aW9uOlxuICAgIG9wYWNpdHkgMTQwbXMgZWFzZS1vdXQsXG4gICAgdHJhbnNmb3JtIDE0MG1zIGVhc2Utb3V0LFxuICAgIHBhZGRpbmcgMjQwbXMgY3ViaWMtYmV6aWVyKDAuMiwgMCwgMCwgMSk7XG5gXG5cbmV4cG9ydCBjb25zdCBTQ1RyYWNlTm90ZSA9IHN0eWxlZC5wYFxuICBtYXJnaW46IDhweCAwIDA7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBjb2xvcjogJHtjb2xvcnMudGV4dC5tZWRpdW1HcmF5fTtcbiAgb3BhY2l0eTogMC43NTtcbmBcblxuZXhwb3J0IGNvbnN0IFNDTG9hZGluZ0xpbmUgPSBzdHlsZWQuZGl2YFxuICBoZWlnaHQ6IDEwcHg7XG4gIHdpZHRoOiA2MCU7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDAsIDAsIDAsIDAuMDQpIDAlLCByZ2JhKDAsIDAsIDAsIDAuMDgpIDUwJSwgcmdiYSgwLCAwLCAwLCAwLjA0KSAxMDAlKTtcbiAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDEwMCU7XG4gIGFuaW1hdGlvbjogJHtzaGltbWVyfSAxLjhzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYFxuXG5leHBvcnQgY29uc3QgU0NFcnJvclJvdyA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogOHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAke2NvbG9ycy50ZXh0Lm1lZGl1bUdyYXl9O1xuXG4gIGJ1dHRvbiB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgcGFkZGluZzogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIGNvbG9yOiAke2NvbG9ycy50ZXh0LnByaW1hcnl9O1xuICB9XG5gXG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQU0sSUFBSUMsR0FBRyxFQUFFQyxTQUFTLFFBQVEsbUJBQW1CO0FBQzFELE9BQU9DLE1BQU0sTUFBTSxtQ0FBbUM7QUFFdEQsT0FBTyxJQUFNQyx3QkFBd0IsR0FBRyxFQUFFO0FBRTFDLElBQU1DLE9BQU8sR0FBR0gsU0FBUyx1RUFHeEI7QUFFRCxJQUFNSSxNQUFNLEdBQUdKLFNBQVMsOEVBR3ZCO0FBRUQsSUFBTUssV0FBVyxHQUFHTCxTQUFTLDZFQUc1Qjs7QUFFRDtBQUNBLElBQU1NLFdBQVcsR0FBR04sU0FBUyxzSUFJNUI7O0FBRUQ7QUFDQSxJQUFNTyxXQUFXLEdBQUcsQ0FBQztBQUNyQixJQUFNQyxZQUFZLEdBQUcsRUFBRTtBQUN2QixJQUFNQyxnQkFBZ0IsR0FBRyxDQUFDO0FBQzFCO0FBQ0EsSUFBTUMsVUFBVSxHQUFHRCxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsR0FBR0YsV0FBVyxJQUFJLENBQUM7QUFDNUQ7QUFDQSxJQUFNSSxnQkFBZ0IsR0FBRyxDQUFDSixXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDOUM7QUFDQSxJQUFNSyxRQUFRLEdBQUcsQ0FBQztBQUNsQixJQUFNQyxtQkFBbUIsR0FBR0gsVUFBVSxHQUFHRSxRQUFRO0FBQ2pELElBQU1FLHdCQUF3QixHQUFHSixVQUFVLEdBQUdILFdBQVcsR0FB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
@@ -0,0 +1,182 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ import React from 'react';
5
+ import { resolveToolStepPastLabel } from '../../../utils/streamActivityMessages';
6
+ import { MaiaStreamdown } from '../MaiaStreamdown/MaiaStreamdown';
7
+ import { displayRowKey, groupParallelSteps, parallelStepDetail } from './groupParallelSteps';
8
+ import { SCParallelContent, SCParallelCount, SCParallelDetail, SCStepRow, SCThinkingText, SCToolStep } from './ReasoningBlock.styles';
9
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
10
+ export var stepLabel = function stepLabel(step, t) {
11
+ if (step.type === 'handoff') {
12
+ return step.to ? t('chat.reasoning.calledAgent', {
13
+ agent: step.to
14
+ }) : t('chat.activity.executedAction');
15
+ }
16
+ if (!step.tool) return t('chat.activity.executedAction');
17
+ return resolveToolStepPastLabel(step.tool, t);
18
+ };
19
+
20
+ /** Los `thinking` son el razonamiento crudo del modelo: fuera de la vista por defecto. */
21
+ export var isVisibleStep = function isVisibleStep(step) {
22
+ return step.type !== 'thinking';
23
+ };
24
+
25
+ /** Solo tool/handoff llevan círculo en la traza; narraciones y thinking no. */
26
+ export var isActionStep = function isActionStep(step) {
27
+ return step.type === 'tool' || step.type === 'handoff';
28
+ };
29
+
30
+ /** Narración/thinking al cierre de la traza: no llevan rail colgante. */
31
+ export var isTextStepRow = function isTextStepRow(row) {
32
+ return row.kind === 'single' && (row.step.type === 'narration' || row.step.type === 'thinking');
33
+ };
34
+
35
+ /** Conectores de rail: sin línea hacia abajo si lo siguiente es narración final. */
36
+ export var resolveRowConnections = function resolveRowConnections(rows, index) {
37
+ var connectAbove = index > 0;
38
+ if (index >= rows.length - 1) {
39
+ return {
40
+ connectAbove: connectAbove,
41
+ connectBelow: false
42
+ };
43
+ }
44
+ var isLastPair = index === rows.length - 2;
45
+ var nextIsTerminalText = isLastPair && isTextStepRow(rows[index + 1]);
46
+ return {
47
+ connectAbove: connectAbove,
48
+ connectBelow: !nextIsTerminalText
49
+ };
50
+ };
51
+ var stepRowRailProps = function stepRowRailProps(hasMarker, connectAbove, connectBelow) {
52
+ var showChrome = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
53
+ return {
54
+ $showChrome: showChrome,
55
+ $hasMarker: hasMarker,
56
+ $connectAbove: !!connectAbove,
57
+ $connectBelow: !!connectBelow,
58
+ $railThrough: showChrome && !hasMarker && !!(connectAbove && connectBelow),
59
+ $railTop: showChrome && hasMarker && !!connectAbove,
60
+ $railBottom: showChrome && hasMarker && !!connectBelow
61
+ };
62
+ };
63
+ export var ReasoningStepRow = function ReasoningStepRow(_ref) {
64
+ var step = _ref.step,
65
+ t = _ref.t,
66
+ connectAbove = _ref.connectAbove,
67
+ connectBelow = _ref.connectBelow,
68
+ isActive = _ref.isActive,
69
+ _ref$showChrome = _ref.showChrome,
70
+ showChrome = _ref$showChrome === void 0 ? true : _ref$showChrome;
71
+ var isText = step.type === 'narration' || step.type === 'thinking';
72
+ var hasMarker = isActionStep(step);
73
+ if (isText && !step.text) return null;
74
+ return /*#__PURE__*/_jsxs(SCStepRow, _objectSpread(_objectSpread({}, stepRowRailProps(hasMarker, connectAbove, connectBelow, showChrome)), {}, {
75
+ $status: step.status,
76
+ $isActive: showChrome ? isActive : false,
77
+ children: [showChrome && hasMarker && /*#__PURE__*/_jsx("span", {
78
+ className: "ReasoningBlock-marker",
79
+ "aria-hidden": true
80
+ }), isText ? /*#__PURE__*/_jsx(SCThinkingText, {
81
+ $muted: step.type === 'thinking',
82
+ children: /*#__PURE__*/_jsx(MaiaStreamdown, {
83
+ variant: "chat",
84
+ children: step.text
85
+ })
86
+ }) : /*#__PURE__*/_jsx(SCToolStep, {
87
+ $status: step.status,
88
+ children: /*#__PURE__*/_jsx("span", {
89
+ className: "ReasoningBlock-toolLabel",
90
+ children: stepLabel(step, t)
91
+ })
92
+ })]
93
+ }));
94
+ };
95
+ var ParallelStepRow = function ParallelStepRow(_ref2) {
96
+ var row = _ref2.row,
97
+ t = _ref2.t,
98
+ connectAbove = _ref2.connectAbove,
99
+ connectBelow = _ref2.connectBelow,
100
+ showDetail = _ref2.showDetail,
101
+ isActive = _ref2.isActive,
102
+ _ref2$showChrome = _ref2.showChrome,
103
+ showChrome = _ref2$showChrome === void 0 ? true : _ref2$showChrome;
104
+ var detail = showDetail ? parallelStepDetail(row.steps) : null;
105
+ var countLabel = t('chat.reasoning.parallelCount', {
106
+ count: row.steps.length
107
+ });
108
+ return /*#__PURE__*/_jsxs(SCStepRow, _objectSpread(_objectSpread({}, stepRowRailProps(true, connectAbove, connectBelow, showChrome)), {}, {
109
+ $status: row.status,
110
+ $isActive: showChrome ? isActive : false,
111
+ children: [showChrome && /*#__PURE__*/_jsx("span", {
112
+ className: "ReasoningBlock-marker",
113
+ "aria-hidden": true
114
+ }), /*#__PURE__*/_jsxs(SCParallelContent, {
115
+ children: [/*#__PURE__*/_jsxs(SCToolStep, {
116
+ $status: row.status,
117
+ children: [/*#__PURE__*/_jsx("span", {
118
+ className: "ReasoningBlock-toolLabel",
119
+ children: row.label
120
+ }), /*#__PURE__*/_jsx(SCParallelCount, {
121
+ "aria-label": countLabel,
122
+ children: countLabel
123
+ })]
124
+ }), detail && /*#__PURE__*/_jsx(SCParallelDetail, {
125
+ children: detail
126
+ })]
127
+ })]
128
+ }));
129
+ };
130
+ export var DisplayStepRow = function DisplayStepRow(_ref3) {
131
+ var row = _ref3.row,
132
+ t = _ref3.t,
133
+ connectAbove = _ref3.connectAbove,
134
+ connectBelow = _ref3.connectBelow,
135
+ showDetail = _ref3.showDetail,
136
+ isActive = _ref3.isActive,
137
+ _ref3$showChrome = _ref3.showChrome,
138
+ showChrome = _ref3$showChrome === void 0 ? true : _ref3$showChrome;
139
+ if (row.kind === 'parallel') {
140
+ return /*#__PURE__*/_jsx(ParallelStepRow, {
141
+ row: row,
142
+ t: t,
143
+ connectAbove: connectAbove,
144
+ connectBelow: connectBelow,
145
+ showDetail: showDetail,
146
+ isActive: isActive,
147
+ showChrome: showChrome
148
+ });
149
+ }
150
+ return /*#__PURE__*/_jsx(ReasoningStepRow, {
151
+ step: row.step,
152
+ t: t,
153
+ connectAbove: connectAbove,
154
+ connectBelow: connectBelow,
155
+ isActive: isActive,
156
+ showChrome: showChrome
157
+ });
158
+ };
159
+ export var StepList = function StepList(_ref4) {
160
+ var steps = _ref4.steps,
161
+ t = _ref4.t,
162
+ _ref4$showDetail = _ref4.showDetail,
163
+ showDetail = _ref4$showDetail === void 0 ? true : _ref4$showDetail;
164
+ var rows = groupParallelSteps(steps, function (step) {
165
+ return stepLabel(step, t);
166
+ });
167
+ return /*#__PURE__*/_jsx(_Fragment, {
168
+ children: rows.map(function (row, index) {
169
+ var _resolveRowConnection = resolveRowConnections(rows, index),
170
+ connectAbove = _resolveRowConnection.connectAbove,
171
+ connectBelow = _resolveRowConnection.connectBelow;
172
+ return /*#__PURE__*/_jsx(DisplayStepRow, {
173
+ row: row,
174
+ t: t,
175
+ connectAbove: connectAbove,
176
+ connectBelow: connectBelow,
177
+ showDetail: showDetail
178
+ }, displayRowKey(row));
179
+ })
180
+ });
181
+ };
182
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInJlc29sdmVUb29sU3RlcFBhc3RMYWJlbCIsIk1haWFTdHJlYW1kb3duIiwiZGlzcGxheVJvd0tleSIsImdyb3VwUGFyYWxsZWxTdGVwcyIsInBhcmFsbGVsU3RlcERldGFpbCIsIlNDUGFyYWxsZWxDb250ZW50IiwiU0NQYXJhbGxlbENvdW50IiwiU0NQYXJhbGxlbERldGFpbCIsIlNDU3RlcFJvdyIsIlNDVGhpbmtpbmdUZXh0IiwiU0NUb29sU3RlcCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsInN0ZXBMYWJlbCIsInN0ZXAiLCJ0IiwidHlwZSIsInRvIiwiYWdlbnQiLCJ0b29sIiwiaXNWaXNpYmxlU3RlcCIsImlzQWN0aW9uU3RlcCIsImlzVGV4dFN0ZXBSb3ciLCJyb3ciLCJraW5kIiwicmVzb2x2ZVJvd0Nvbm5lY3Rpb25zIiwicm93cyIsImluZGV4IiwiY29ubmVjdEFib3ZlIiwibGVuZ3RoIiwiY29ubmVjdEJlbG93IiwiaXNMYXN0UGFpciIsIm5leHRJc1Rlcm1pbmFsVGV4dCIsInN0ZXBSb3dSYWlsUHJvcHMiLCJoYXNNYXJrZXIiLCJzaG93Q2hyb21lIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiJHNob3dDaHJvbWUiLCIkaGFzTWFya2VyIiwiJGNvbm5lY3RBYm92ZSIsIiRjb25uZWN0QmVsb3ciLCIkcmFpbFRocm91Z2giLCIkcmFpbFRvcCIsIiRyYWlsQm90dG9tIiwiUmVhc29uaW5nU3RlcFJvdyIsIl9yZWYiLCJpc0FjdGl2ZSIsIl9yZWYkc2hvd0Nocm9tZSIsImlzVGV4dCIsInRleHQiLCJfb2JqZWN0U3ByZWFkIiwiJHN0YXR1cyIsInN0YXR1cyIsIiRpc0FjdGl2ZSIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiJG11dGVkIiwidmFyaWFudCIsIlBhcmFsbGVsU3RlcFJvdyIsIl9yZWYyIiwic2hvd0RldGFpbCIsIl9yZWYyJHNob3dDaHJvbWUiLCJkZXRhaWwiLCJzdGVwcyIsImNvdW50TGFiZWwiLCJjb3VudCIsImxhYmVsIiwiRGlzcGxheVN0ZXBSb3ciLCJfcmVmMyIsIl9yZWYzJHNob3dDaHJvbWUiLCJTdGVwTGlzdCIsIl9yZWY0IiwiX3JlZjQkc2hvd0RldGFpbCIsIm1hcCIsIl9yZXNvbHZlUm93Q29ubmVjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL1JlYXNvbmluZ0Jsb2NrL1JlYXNvbmluZ1N0ZXBzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xTdGVwUGFzdExhYmVsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vTWFpYVN0cmVhbWRvd24vTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1N0ZXAgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9yZWFzb25pbmcnXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ0Rpc3BsYXlSb3cgfSBmcm9tICcuL2dyb3VwUGFyYWxsZWxTdGVwcydcbmltcG9ydCB7IGRpc3BsYXlSb3dLZXksIGdyb3VwUGFyYWxsZWxTdGVwcywgcGFyYWxsZWxTdGVwRGV0YWlsIH0gZnJvbSAnLi9ncm91cFBhcmFsbGVsU3RlcHMnXG5pbXBvcnQge1xuICBTQ1BhcmFsbGVsQ29udGVudCxcbiAgU0NQYXJhbGxlbENvdW50LFxuICBTQ1BhcmFsbGVsRGV0YWlsLFxuICBTQ1N0ZXBSb3csXG4gIFNDVGhpbmtpbmdUZXh0LFxuICBTQ1Rvb2xTdGVwLFxufSBmcm9tICcuL1JlYXNvbmluZ0Jsb2NrLnN0eWxlcydcblxuZXhwb3J0IHR5cGUgVHJhbnNsYXRlRm4gPSBSZXR1cm5UeXBlPHR5cGVvZiB1c2VUPlsndCddXG5cbmV4cG9ydCBjb25zdCBzdGVwTGFiZWwgPSAoc3RlcDogUmVhc29uaW5nU3RlcCwgdDogVHJhbnNsYXRlRm4pOiBzdHJpbmcgPT4ge1xuICBpZiAoc3RlcC50eXBlID09PSAnaGFuZG9mZicpIHtcbiAgICByZXR1cm4gc3RlcC50byA/IHQoJ2NoYXQucmVhc29uaW5nLmNhbGxlZEFnZW50JywgeyBhZ2VudDogc3RlcC50byB9KSA6IHQoJ2NoYXQuYWN0aXZpdHkuZXhlY3V0ZWRBY3Rpb24nKVxuICB9XG4gIGlmICghc3RlcC50b29sKSByZXR1cm4gdCgnY2hhdC5hY3Rpdml0eS5leGVjdXRlZEFjdGlvbicpXG4gIHJldHVybiByZXNvbHZlVG9vbFN0ZXBQYXN0TGFiZWwoc3RlcC50b29sLCB0KVxufVxuXG4vKiogTG9zIGB0aGlua2luZ2Agc29uIGVsIHJhem9uYW1pZW50byBjcnVkbyBkZWwgbW9kZWxvOiBmdWVyYSBkZSBsYSB2aXN0YSBwb3IgZGVmZWN0by4gKi9cbmV4cG9ydCBjb25zdCBpc1Zpc2libGVTdGVwID0gKHN0ZXA6IFJlYXNvbmluZ1N0ZXApOiBib29sZWFuID0+IHN0ZXAudHlwZSAhPT0gJ3RoaW5raW5nJ1xuXG4vKiogU29sbyB0b29sL2hhbmRvZmYgbGxldmFuIGPDrXJjdWxvIGVuIGxhIHRyYXphOyBuYXJyYWNpb25lcyB5IHRoaW5raW5nIG5vLiAqL1xuZXhwb3J0IGNvbnN0IGlzQWN0aW9uU3RlcCA9IChzdGVwOiBSZWFzb25pbmdTdGVwKTogYm9vbGVhbiA9PiBzdGVwLnR5cGUgPT09ICd0b29sJyB8fCBzdGVwLnR5cGUgPT09ICdoYW5kb2ZmJ1xuXG4vKiogTmFycmFjacOzbi90aGlua2luZyBhbCBjaWVycmUgZGUgbGEgdHJhemE6IG5vIGxsZXZhbiByYWlsIGNvbGdhbnRlLiAqL1xuZXhwb3J0IGNvbnN0IGlzVGV4dFN0ZXBSb3cgPSAocm93OiBSZWFzb25pbmdEaXNwbGF5Um93KTogYm9vbGVhbiA9PlxuICByb3cua2luZCA9PT0gJ3NpbmdsZScgJiYgKHJvdy5zdGVwLnR5cGUgPT09ICduYXJyYXRpb24nIHx8IHJvdy5zdGVwLnR5cGUgPT09ICd0aGlua2luZycpXG5cbi8qKiBDb25lY3RvcmVzIGRlIHJhaWw6IHNpbiBsw61uZWEgaGFjaWEgYWJham8gc2kgbG8gc2lndWllbnRlIGVzIG5hcnJhY2nDs24gZmluYWwuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZVJvd0Nvbm5lY3Rpb25zID0gKFxuICByb3dzOiBSZWFzb25pbmdEaXNwbGF5Um93W10sXG4gIGluZGV4OiBudW1iZXJcbik6IHsgY29ubmVjdEFib3ZlOiBib29sZWFuOyBjb25uZWN0QmVsb3c6IGJvb2xlYW4gfSA9PiB7XG4gIGNvbnN0IGNvbm5lY3RBYm92ZSA9IGluZGV4ID4gMFxuICBpZiAoaW5kZXggPj0gcm93cy5sZW5ndGggLSAxKSB7XG4gICAgcmV0dXJuIHsgY29ubmVjdEFib3ZlLCBjb25uZWN0QmVsb3c6IGZhbHNlIH1cbiAgfVxuXG4gIGNvbnN0IGlzTGFzdFBhaXIgPSBpbmRleCA9PT0gcm93cy5sZW5ndGggLSAyXG4gIGNvbnN0IG5leHRJc1Rlcm1pbmFsVGV4dCA9IGlzTGFzdFBhaXIgJiYgaXNUZXh0U3RlcFJvdyhyb3dzW2luZGV4ICsgMV0pXG5cbiAgcmV0dXJuIHtcbiAgICBjb25uZWN0QWJvdmUsXG4gICAgY29ubmVjdEJlbG93OiAhbmV4dElzVGVybWluYWxUZXh0LFxuICB9XG59XG5cbmNvbnN0IHN0ZXBSb3dSYWlsUHJvcHMgPSAoXG4gIGhhc01hcmtlcjogYm9vbGVhbixcbiAgY29ubmVjdEFib3ZlPzogYm9vbGVhbixcbiAgY29ubmVjdEJlbG93PzogYm9vbGVhbixcbiAgc2hvd0Nocm9tZSA9IHRydWVcbik6IHtcbiAgJHNob3dDaHJvbWU6IGJvb2xlYW5cbiAgJGhhc01hcmtlcjogYm9vbGVhblxuICAkY29ubmVjdEFib3ZlOiBib29sZWFuXG4gICRjb25uZWN0QmVsb3c6IGJvb2xlYW5cbiAgJHJhaWxUaHJvdWdoOiBib29sZWFuXG4gICRyYWlsVG9wOiBib29sZWFuXG4gICRyYWlsQm90dG9tOiBib29sZWFuXG59ID0+ICh7XG4gICRzaG93Q2hyb21lOiBzaG93Q2hyb21lLFxuICAkaGFzTWFya2VyOiBoYXNNYXJrZXIsXG4gICRjb25uZWN0QWJvdmU6ICEhY29ubmVjdEFib3ZlLFxuICAkY29ubmVjdEJlbG93OiAhIWNvbm5lY3RCZWxvdyxcbiAgJHJhaWxUaHJvdWdoOiBzaG93Q2hyb21lICYmICFoYXNNYXJrZXIgJiYgISEoY29ubmVjdEFib3ZlICYmIGNvbm5lY3RCZWxvdyksXG4gICRyYWlsVG9wOiBzaG93Q2hyb21lICYmIGhhc01hcmtlciAmJiAhIWNvbm5lY3RBYm92ZSxcbiAgJHJhaWxCb3R0b206IHNob3dDaHJvbWUgJiYgaGFzTWFya2VyICYmICEhY29ubmVjdEJlbG93LFxufSlcblxuZXhwb3J0IHR5cGUgUmVhc29uaW5nU3RlcFJvd1Byb3BzID0ge1xuICBzdGVwOiBSZWFzb25pbmdTdGVwXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGNvbm5lY3RBYm92ZT86IGJvb2xlYW5cbiAgY29ubmVjdEJlbG93PzogYm9vbGVhblxuICBpc0FjdGl2ZT86IGJvb2xlYW5cbiAgLyoqIEPDrXJjdWxvcyB5IHJhaWw6IHNvbG8gZW4gZWwgYmxvcXVlIGV4cGFuZGlkbywgbm8gZW4gdGltZWxpbmUgZW4gdml2by4gKi9cbiAgc2hvd0Nocm9tZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N0ZXBSb3cgPSAoe1xuICBzdGVwLFxuICB0LFxuICBjb25uZWN0QWJvdmUsXG4gIGNvbm5lY3RCZWxvdyxcbiAgaXNBY3RpdmUsXG4gIHNob3dDaHJvbWUgPSB0cnVlLFxufTogUmVhc29uaW5nU3RlcFJvd1Byb3BzKSA9PiB7XG4gIGNvbnN0IGlzVGV4dCA9IHN0ZXAudHlwZSA9PT0gJ25hcnJhdGlvbicgfHwgc3RlcC50eXBlID09PSAndGhpbmtpbmcnXG4gIGNvbnN0IGhhc01hcmtlciA9IGlzQWN0aW9uU3RlcChzdGVwKVxuICBpZiAoaXNUZXh0ICYmICFzdGVwLnRleHQpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIChcbiAgICA8U0NTdGVwUm93XG4gICAgICB7Li4uc3RlcFJvd1JhaWxQcm9wcyhoYXNNYXJrZXIsIGNvbm5lY3RBYm92ZSwgY29ubmVjdEJlbG93LCBzaG93Q2hyb21lKX1cbiAgICAgICRzdGF0dXM9e3N0ZXAuc3RhdHVzfVxuICAgICAgJGlzQWN0aXZlPXtzaG93Q2hyb21lID8gaXNBY3RpdmUgOiBmYWxzZX1cbiAgICA+XG4gICAgICB7c2hvd0Nocm9tZSAmJiBoYXNNYXJrZXIgJiYgPHNwYW4gY2xhc3NOYW1lPVwiUmVhc29uaW5nQmxvY2stbWFya2VyXCIgYXJpYS1oaWRkZW4gLz59XG4gICAgICB7aXNUZXh0ID8gKFxuICAgICAgICA8U0NUaGlua2luZ1RleHQgJG11dGVkPXtzdGVwLnR5cGUgPT09ICd0aGlua2luZyd9PlxuICAgICAgICAgIDxNYWlhU3RyZWFtZG93biB2YXJpYW50PVwiY2hhdFwiPntzdGVwLnRleHR9PC9NYWlhU3RyZWFtZG93bj5cbiAgICAgICAgPC9TQ1RoaW5raW5nVGV4dD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ1Rvb2xTdGVwICRzdGF0dXM9e3N0ZXAuc3RhdHVzfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJSZWFzb25pbmdCbG9jay10b29sTGFiZWxcIj57c3RlcExhYmVsKHN0ZXAsIHQpfTwvc3Bhbj5cbiAgICAgICAgICB7LyogUHJldmlldyBkZWwgcmVzdWx0YWRvIGRlc2hhYmlsaXRhZG86IHZlciBub3RhIGVuIFJlYXNvbmluZ0Jsb2NrLnRzeCAqL31cbiAgICAgICAgPC9TQ1Rvb2xTdGVwPlxuICAgICAgKX1cbiAgICA8L1NDU3RlcFJvdz5cbiAgKVxufVxuXG50eXBlIFBhcmFsbGVsU3RlcFJvd1Byb3BzID0ge1xuICByb3c6IEV4dHJhY3Q8UmVhc29uaW5nRGlzcGxheVJvdywgeyBraW5kOiAncGFyYWxsZWwnIH0+XG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGNvbm5lY3RBYm92ZT86IGJvb2xlYW5cbiAgY29ubmVjdEJlbG93PzogYm9vbGVhblxuICBzaG93RGV0YWlsPzogYm9vbGVhblxuICBpc0FjdGl2ZT86IGJvb2xlYW5cbiAgc2hvd0Nocm9tZT86IGJvb2xlYW5cbn1cblxuY29uc3QgUGFyYWxsZWxTdGVwUm93ID0gKHtcbiAgcm93LFxuICB0LFxuICBjb25uZWN0QWJvdmUsXG4gIGNvbm5lY3RCZWxvdyxcbiAgc2hvd0RldGFpbCxcbiAgaXNBY3RpdmUsXG4gIHNob3dDaHJvbWUgPSB0cnVlLFxufTogUGFyYWxsZWxTdGVwUm93UHJvcHMpID0+IHtcbiAgY29uc3QgZGV0YWlsID0gc2hvd0RldGFpbCA/IHBhcmFsbGVsU3RlcERldGFpbChyb3cuc3RlcHMpIDogbnVsbFxuICBjb25zdCBjb3VudExhYmVsID0gdCgnY2hhdC5yZWFzb25pbmcucGFyYWxsZWxDb3VudCcsIHsgY291bnQ6IHJvdy5zdGVwcy5sZW5ndGggfSlcblxuICByZXR1cm4gKFxuICAgIDxTQ1N0ZXBSb3dcbiAgICAgIHsuLi5zdGVwUm93UmFpbFByb3BzKHRydWUsIGNvbm5lY3RBYm92ZSwgY29ubmVjdEJlbG93LCBzaG93Q2hyb21lKX1cbiAgICAgICRzdGF0dXM9e3Jvdy5zdGF0dXN9XG4gICAgICAkaXNBY3RpdmU9e3Nob3dDaHJvbWUgPyBpc0FjdGl2ZSA6IGZhbHNlfVxuICAgID5cbiAgICAgIHtzaG93Q2hyb21lICYmIDxzcGFuIGNsYXNzTmFtZT1cIlJlYXNvbmluZ0Jsb2NrLW1hcmtlclwiIGFyaWEtaGlkZGVuIC8+fVxuICAgICAgPFNDUGFyYWxsZWxDb250ZW50PlxuICAgICAgICA8U0NUb29sU3RlcCAkc3RhdHVzPXtyb3cuc3RhdHVzfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJSZWFzb25pbmdCbG9jay10b29sTGFiZWxcIj57cm93LmxhYmVsfTwvc3Bhbj5cbiAgICAgICAgICA8U0NQYXJhbGxlbENvdW50IGFyaWEtbGFiZWw9e2NvdW50TGFiZWx9Pntjb3VudExhYmVsfTwvU0NQYXJhbGxlbENvdW50PlxuICAgICAgICA8L1NDVG9vbFN0ZXA+XG4gICAgICAgIHtkZXRhaWwgJiYgPFNDUGFyYWxsZWxEZXRhaWw+e2RldGFpbH08L1NDUGFyYWxsZWxEZXRhaWw+fVxuICAgICAgPC9TQ1BhcmFsbGVsQ29udGVudD5cbiAgICA8L1NDU3RlcFJvdz5cbiAgKVxufVxuXG5leHBvcnQgdHlwZSBEaXNwbGF5U3RlcFJvd1Byb3BzID0ge1xuICByb3c6IFJlYXNvbmluZ0Rpc3BsYXlSb3dcbiAgdDogVHJhbnNsYXRlRm5cbiAgY29ubmVjdEFib3ZlPzogYm9vbGVhblxuICBjb25uZWN0QmVsb3c/OiBib29sZWFuXG4gIHNob3dEZXRhaWw/OiBib29sZWFuXG4gIGlzQWN0aXZlPzogYm9vbGVhblxuICBzaG93Q2hyb21lPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgRGlzcGxheVN0ZXBSb3cgPSAoe1xuICByb3csXG4gIHQsXG4gIGNvbm5lY3RBYm92ZSxcbiAgY29ubmVjdEJlbG93LFxuICBzaG93RGV0YWlsLFxuICBpc0FjdGl2ZSxcbiAgc2hvd0Nocm9tZSA9IHRydWUsXG59OiBEaXNwbGF5U3RlcFJvd1Byb3BzKSA9PiB7XG4gIGlmIChyb3cua2luZCA9PT0gJ3BhcmFsbGVsJykge1xuICAgIHJldHVybiAoXG4gICAgICA8UGFyYWxsZWxTdGVwUm93XG4gICAgICAgIHJvdz17cm93fVxuICAgICAgICB0PXt0fVxuICAgICAgICBjb25uZWN0QWJvdmU9e2Nvbm5lY3RBYm92ZX1cbiAgICAgICAgY29ubmVjdEJlbG93PXtjb25uZWN0QmVsb3d9XG4gICAgICAgIHNob3dEZXRhaWw9e3Nob3dEZXRhaWx9XG4gICAgICAgIGlzQWN0aXZlPXtpc0FjdGl2ZX1cbiAgICAgICAgc2hvd0Nocm9tZT17c2hvd0Nocm9tZX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG4gIHJldHVybiAoXG4gICAgPFJlYXNvbmluZ1N0ZXBSb3dcbiAgICAgIHN0ZXA9e3Jvdy5zdGVwfVxuICAgICAgdD17dH1cbiAgICAgIGNvbm5lY3RBYm92ZT17Y29ubmVjdEFib3ZlfVxuICAgICAgY29ubmVjdEJlbG93PXtjb25uZWN0QmVsb3d9XG4gICAgICBpc0FjdGl2ZT17aXNBY3RpdmV9XG4gICAgICBzaG93Q2hyb21lPXtzaG93Q2hyb21lfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHR5cGUgU3RlcExpc3RQcm9wcyA9IHtcbiAgc3RlcHM6IFJlYXNvbmluZ1N0ZXBbXVxuICB0OiBUcmFuc2xhdGVGblxuICBzaG93RGV0YWlsPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgU3RlcExpc3QgPSAoeyBzdGVwcywgdCwgc2hvd0RldGFpbCA9IHRydWUgfTogU3RlcExpc3RQcm9wcykgPT4ge1xuICBjb25zdCByb3dzID0gZ3JvdXBQYXJhbGxlbFN0ZXBzKHN0ZXBzLCBzdGVwID0+IHN0ZXBMYWJlbChzdGVwLCB0KSlcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7cm93cy5tYXAoKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25uZWN0QWJvdmUsIGNvbm5lY3RCZWxvdyB9ID0gcmVzb2x2ZVJvd0Nvbm5lY3Rpb25zKHJvd3MsIGluZGV4KVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxEaXNwbGF5U3RlcFJvd1xuICAgICAgICAgICAga2V5PXtkaXNwbGF5Um93S2V5KHJvdyl9XG4gICAgICAgICAgICByb3c9e3Jvd31cbiAgICAgICAgICAgIHQ9e3R9XG4gICAgICAgICAgICBjb25uZWN0QWJvdmU9e2Nvbm5lY3RBYm92ZX1cbiAgICAgICAgICAgIGNvbm5lY3RCZWxvdz17Y29ubmVjdEJlbG93fVxuICAgICAgICAgICAgc2hvd0RldGFpbD17c2hvd0RldGFpbH1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPQSxLQUFLLE1BQU0sT0FBTztBQUd6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