@projectcor/maia-components 2.31.1-1 → 2.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,58 +1,64 @@
1
1
  import { reasoningStore } from '../../../hooks/useReasoningTrace/reasoningStore';
2
+ import { findLeadingNarration, hasActionStep, looksLikeIntermediateNarrationStream, narrationTextsMatch } from './reasoningLeading';
2
3
  import { isVisibleStep } from './ReasoningSteps';
3
4
  export var PENDING_NARRATION_KEY = 'pending-narration';
5
+ export { narrationTextsMatch } from './reasoningLeading';
4
6
  export var visibleReasoningSteps = function visibleReasoningSteps(steps) {
5
7
  var showThinking = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
6
8
  return showThinking ? steps : steps.filter(isVisibleStep);
7
9
  };
8
- export var narrationTextsMatch = function narrationTextsMatch(committed, streamed) {
9
- if (!committed || !streamed) return false;
10
- if (committed === streamed) return true;
11
- // Mientras streamea: el texto en curso es prefijo de la narración commiteada.
12
- return committed.startsWith(streamed);
13
- };
14
10
  export var isSeamlessNarrationCommit = function isSeamlessNarrationCommit(step, streamedText) {
15
11
  return step.type === 'narration' && narrationTextsMatch(step.text, streamedText);
16
12
  };
17
13
 
18
14
  /**
19
- * Narración de turno intermedio: el back la absorbe con `reasoning_step` +
20
- * `answer_reset`. Mientras llega, va en la traza (no en el cuerpo del mensaje).
21
- * Tras una narración en la traza, lo que sigue escribiéndose es la respuesta final.
15
+ * Narración de turno: tokens sin step van anclados al inicio. Una narración
16
+ * commiteada (pre answer_reset) se pinta en su fila, no se recuelga al último tool.
22
17
  */
23
18
  export var shouldStreamNarrationInTimeline = function shouldStreamNarrationInTimeline(steps, streamActivity, streamingText, messageId) {
24
19
  var showThinking = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
25
20
  if ((streamActivity === null || streamActivity === void 0 ? void 0 : streamActivity.phase) !== 'writing') return false;
26
21
  if (!streamingText.trim()) return false;
27
22
  var visible = visibleReasoningSteps(steps, showThinking);
23
+ var leading = findLeadingNarration(steps);
24
+
25
+ // Tokens antes de cualquier acción: la narración es el primer paso.
26
+ if (leading && !hasActionStep(visible) && looksLikeIntermediateNarrationStream(streamingText)) {
27
+ return true;
28
+ }
29
+
30
+ // Leading ya anclada: el body todavía es esa misma narración (sin respuesta final).
31
+ if (leading && narrationTextsMatch(leading.text, streamingText)) {
32
+ return true;
33
+ }
34
+ if (!visible.length && looksLikeIntermediateNarrationStream(streamingText)) {
35
+ return true;
36
+ }
28
37
  var last = visible[visible.length - 1];
29
38
  if (!last || last.type === 'thinking') return false;
30
-
31
- // Carrera commit: narración commiteada, body aún no limpiado (pre answer_reset).
32
39
  if (last.type === 'narration') {
33
40
  if (messageId && !reasoningStore.isNarrationHandoffPending(messageId)) {
34
41
  return false;
35
42
  }
36
43
  return narrationTextsMatch(last.text, streamingText);
37
44
  }
38
-
39
- // Narración intermedia: solo tras una acción (tool/handoff). Lo demás va al cuerpo.
40
- if (last.type === 'tool' || last.type === 'handoff') {
41
- return true;
42
- }
43
45
  return false;
44
46
  };
45
47
 
46
- /** Texto de la fila live al final de la traza; null si ya está commiteado o va al cuerpo. */
48
+ /** Texto de la fila live al final de la traza; null si ya está anclada o va al cuerpo. */
47
49
  export var resolvePendingNarrationText = function resolvePendingNarrationText(steps, streamActivity, streamingText, messageId) {
48
50
  var showThinking = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
49
51
  if (!shouldStreamNarrationInTimeline(steps, streamActivity, streamingText, messageId, showThinking)) return null;
52
+ var leading = findLeadingNarration(steps);
53
+ // Ya está anclada al inicio: no recuelgues el mismo texto detrás de cada tool.
54
+ if (leading && narrationTextsMatch(leading.text, streamingText)) {
55
+ return null;
56
+ }
50
57
  var last = visibleReasoningSteps(steps, showThinking).at(-1);
51
- // Step commiteado pero body/stream aún no limpiado: seguir en fila live para no
52
- // desmontar MaiaStreamdown 1 frame antes del answer_reset.
53
58
  if ((last === null || last === void 0 ? void 0 : last.type) === 'narration' && narrationTextsMatch(last.text, streamingText)) {
54
59
  return streamingText;
55
60
  }
56
- return streamingText;
61
+ if (!last || last.type === 'thinking') return streamingText;
62
+ return null;
57
63
  };
58
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWFzb25pbmdTdG9yZSIsImlzVmlzaWJsZVN0ZXAiLCJQRU5ESU5HX05BUlJBVElPTl9LRVkiLCJ2aXNpYmxlUmVhc29uaW5nU3RlcHMiLCJzdGVwcyIsInNob3dUaGlua2luZyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImZpbHRlciIsIm5hcnJhdGlvblRleHRzTWF0Y2giLCJjb21taXR0ZWQiLCJzdHJlYW1lZCIsInN0YXJ0c1dpdGgiLCJpc1NlYW1sZXNzTmFycmF0aW9uQ29tbWl0Iiwic3RlcCIsInN0cmVhbWVkVGV4dCIsInR5cGUiLCJ0ZXh0Iiwic2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInN0cmVhbUFjdGl2aXR5Iiwic3RyZWFtaW5nVGV4dCIsIm1lc3NhZ2VJZCIsInBoYXNlIiwidHJpbSIsInZpc2libGUiLCJsYXN0IiwiaXNOYXJyYXRpb25IYW5kb2ZmUGVuZGluZyIsInJlc29sdmVQZW5kaW5nTmFycmF0aW9uVGV4dCIsImF0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvUmVhc29uaW5nQmxvY2svcmVhc29uaW5nTGl2ZU5hcnJhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1N0ZXAgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9yZWFzb25pbmcnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlL3JlYXNvbmluZ1N0b3JlJ1xuaW1wb3J0IHsgaXNWaXNpYmxlU3RlcCB9IGZyb20gJy4vUmVhc29uaW5nU3RlcHMnXG5cbmV4cG9ydCBjb25zdCBQRU5ESU5HX05BUlJBVElPTl9LRVkgPSAncGVuZGluZy1uYXJyYXRpb24nXG5cbmV4cG9ydCBjb25zdCB2aXNpYmxlUmVhc29uaW5nU3RlcHMgPSAoc3RlcHM6IFJlYXNvbmluZ1N0ZXBbXSwgc2hvd1RoaW5raW5nID0gZmFsc2UpOiBSZWFzb25pbmdTdGVwW10gPT5cbiAgc2hvd1RoaW5raW5nID8gc3RlcHMgOiBzdGVwcy5maWx0ZXIoaXNWaXNpYmxlU3RlcClcblxuZXhwb3J0IGNvbnN0IG5hcnJhdGlvblRleHRzTWF0Y2ggPSAoY29tbWl0dGVkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHN0cmVhbWVkOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiA9PiB7XG4gIGlmICghY29tbWl0dGVkIHx8ICFzdHJlYW1lZCkgcmV0dXJuIGZhbHNlXG4gIGlmIChjb21taXR0ZWQgPT09IHN0cmVhbWVkKSByZXR1cm4gdHJ1ZVxuICAvLyBNaWVudHJhcyBzdHJlYW1lYTogZWwgdGV4dG8gZW4gY3Vyc28gZXMgcHJlZmlqbyBkZSBsYSBuYXJyYWNpw7NuIGNvbW1pdGVhZGEuXG4gIHJldHVybiBjb21taXR0ZWQuc3RhcnRzV2l0aChzdHJlYW1lZClcbn1cblxuZXhwb3J0IGNvbnN0IGlzU2VhbWxlc3NOYXJyYXRpb25Db21taXQgPSAoc3RlcDogUmVhc29uaW5nU3RlcCwgc3RyZWFtZWRUZXh0OiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiA9PlxuICBzdGVwLnR5cGUgPT09ICduYXJyYXRpb24nICYmIG5hcnJhdGlvblRleHRzTWF0Y2goc3RlcC50ZXh0LCBzdHJlYW1lZFRleHQpXG5cbi8qKlxuICogTmFycmFjacOzbiBkZSB0dXJubyBpbnRlcm1lZGlvOiBlbCBiYWNrIGxhIGFic29yYmUgY29uIGByZWFzb25pbmdfc3RlcGAgK1xuICogYGFuc3dlcl9yZXNldGAuIE1pZW50cmFzIGxsZWdhLCB2YSBlbiBsYSB0cmF6YSAobm8gZW4gZWwgY3VlcnBvIGRlbCBtZW5zYWplKS5cbiAqIFRyYXMgdW5hIG5hcnJhY2nDs24gZW4gbGEgdHJhemEsIGxvIHF1ZSBzaWd1ZSBlc2NyaWJpw6luZG9zZSBlcyBsYSByZXNwdWVzdGEgZmluYWwuXG4gKi9cbmV4cG9ydCBjb25zdCBzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lID0gKFxuICBzdGVwczogUmVhc29uaW5nU3RlcFtdLFxuICBzdHJlYW1BY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBzdHJlYW1pbmdUZXh0OiBzdHJpbmcsXG4gIG1lc3NhZ2VJZD86IHN0cmluZyB8IG51bGwsXG4gIHNob3dUaGlua2luZyA9IGZhbHNlXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKHN0cmVhbUFjdGl2aXR5Py5waGFzZSAhPT0gJ3dyaXRpbmcnKSByZXR1cm4gZmFsc2VcbiAgaWYgKCFzdHJlYW1pbmdUZXh0LnRyaW0oKSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgdmlzaWJsZSA9IHZpc2libGVSZWFzb25pbmdTdGVwcyhzdGVwcywgc2hvd1RoaW5raW5nKVxuICBjb25zdCBsYXN0ID0gdmlzaWJsZVt2aXNpYmxlLmxlbmd0aCAtIDFdXG4gIGlmICghbGFzdCB8fCBsYXN0LnR5cGUgPT09ICd0aGlua2luZycpIHJldHVybiBmYWxzZVxuXG4gIC8vIENhcnJlcmEgY29tbWl0OiBuYXJyYWNpw7NuIGNvbW1pdGVhZGEsIGJvZHkgYcO6biBubyBsaW1waWFkbyAocHJlIGFuc3dlcl9yZXNldCkuXG4gIGlmIChsYXN0LnR5cGUgPT09ICduYXJyYXRpb24nKSB7XG4gICAgaWYgKG1lc3NhZ2VJZCAmJiAhcmVhc29uaW5nU3RvcmUuaXNOYXJyYXRpb25IYW5kb2ZmUGVuZGluZyhtZXNzYWdlSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIG5hcnJhdGlvblRleHRzTWF0Y2gobGFzdC50ZXh0LCBzdHJlYW1pbmdUZXh0KVxuICB9XG5cbiAgLy8gTmFycmFjacOzbiBpbnRlcm1lZGlhOiBzb2xvIHRyYXMgdW5hIGFjY2nDs24gKHRvb2wvaGFuZG9mZikuIExvIGRlbcOhcyB2YSBhbCBjdWVycG8uXG4gIGlmIChsYXN0LnR5cGUgPT09ICd0b29sJyB8fCBsYXN0LnR5cGUgPT09ICdoYW5kb2ZmJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqIFRleHRvIGRlIGxhIGZpbGEgbGl2ZSBhbCBmaW5hbCBkZSBsYSB0cmF6YTsgbnVsbCBzaSB5YSBlc3TDoSBjb21taXRlYWRvIG8gdmEgYWwgY3VlcnBvLiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVQZW5kaW5nTmFycmF0aW9uVGV4dCA9IChcbiAgc3RlcHM6IFJlYXNvbmluZ1N0ZXBbXSxcbiAgc3RyZWFtQWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgc3RyZWFtaW5nVGV4dDogc3RyaW5nLFxuICBtZXNzYWdlSWQ/OiBzdHJpbmcgfCBudWxsLFxuICBzaG93VGhpbmtpbmcgPSBmYWxzZVxuKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmICghc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZShzdGVwcywgc3RyZWFtQWN0aXZpdHksIHN0cmVhbWluZ1RleHQsIG1lc3NhZ2VJZCwgc2hvd1RoaW5raW5nKSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBsYXN0ID0gdmlzaWJsZVJlYXNvbmluZ1N0ZXBzKHN0ZXBzLCBzaG93VGhpbmtpbmcpLmF0KC0xKVxuICAvLyBTdGVwIGNvbW1pdGVhZG8gcGVybyBib2R5L3N0cmVhbSBhw7puIG5vIGxpbXBpYWRvOiBzZWd1aXIgZW4gZmlsYSBsaXZlIHBhcmEgbm9cbiAgLy8gZGVzbW9udGFyIE1haWFTdHJlYW1kb3duIDEgZnJhbWUgYW50ZXMgZGVsIGFuc3dlcl9yZXNldC5cbiAgaWYgKGxhc3Q/LnR5cGUgPT09ICduYXJyYXRpb24nICYmIG5hcnJhdGlvblRleHRzTWF0Y2gobGFzdC50ZXh0LCBzdHJlYW1pbmdUZXh0KSkge1xuICAgIHJldHVybiBzdHJlYW1pbmdUZXh0XG4gIH1cblxuICByZXR1cm4gc3RyZWFtaW5n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
64
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWFzb25pbmdTdG9yZSIsImZpbmRMZWFkaW5nTmFycmF0aW9uIiwiaGFzQWN0aW9uU3RlcCIsImxvb2tzTGlrZUludGVybWVkaWF0ZU5hcnJhdGlvblN0cmVhbSIsIm5hcnJhdGlvblRleHRzTWF0Y2giLCJpc1Zpc2libGVTdGVwIiwiUEVORElOR19OQVJSQVRJT05fS0VZIiwidmlzaWJsZVJlYXNvbmluZ1N0ZXBzIiwic3RlcHMiLCJzaG93VGhpbmtpbmciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmaWx0ZXIiLCJpc1NlYW1sZXNzTmFycmF0aW9uQ29tbWl0Iiwic3RlcCIsInN0cmVhbWVkVGV4dCIsInR5cGUiLCJ0ZXh0Iiwic2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInN0cmVhbUFjdGl2aXR5Iiwic3RyZWFtaW5nVGV4dCIsIm1lc3NhZ2VJZCIsInBoYXNlIiwidHJpbSIsInZpc2libGUiLCJsZWFkaW5nIiwibGFzdCIsImlzTmFycmF0aW9uSGFuZG9mZlBlbmRpbmciLCJyZXNvbHZlUGVuZGluZ05hcnJhdGlvblRleHQiLCJhdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL1JlYXNvbmluZ0Jsb2NrL3JlYXNvbmluZ0xpdmVOYXJyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdTdGVwIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvcmVhc29uaW5nJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHsgcmVhc29uaW5nU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZWFzb25pbmdUcmFjZS9yZWFzb25pbmdTdG9yZSdcbmltcG9ydCB7XG4gIGZpbmRMZWFkaW5nTmFycmF0aW9uLFxuICBoYXNBY3Rpb25TdGVwLFxuICBsb29rc0xpa2VJbnRlcm1lZGlhdGVOYXJyYXRpb25TdHJlYW0sXG4gIG5hcnJhdGlvblRleHRzTWF0Y2gsXG59IGZyb20gJy4vcmVhc29uaW5nTGVhZGluZydcbmltcG9ydCB7IGlzVmlzaWJsZVN0ZXAgfSBmcm9tICcuL1JlYXNvbmluZ1N0ZXBzJ1xuXG5leHBvcnQgY29uc3QgUEVORElOR19OQVJSQVRJT05fS0VZID0gJ3BlbmRpbmctbmFycmF0aW9uJ1xuXG5leHBvcnQgeyBuYXJyYXRpb25UZXh0c01hdGNoIH0gZnJvbSAnLi9yZWFzb25pbmdMZWFkaW5nJ1xuXG5leHBvcnQgY29uc3QgdmlzaWJsZVJlYXNvbmluZ1N0ZXBzID0gKHN0ZXBzOiBSZWFzb25pbmdTdGVwW10sIHNob3dUaGlua2luZyA9IGZhbHNlKTogUmVhc29uaW5nU3RlcFtdID0+XG4gIHNob3dUaGlua2luZyA/IHN0ZXBzIDogc3RlcHMuZmlsdGVyKGlzVmlzaWJsZVN0ZXApXG5cbmV4cG9ydCBjb25zdCBpc1NlYW1sZXNzTmFycmF0aW9uQ29tbWl0ID0gKHN0ZXA6IFJlYXNvbmluZ1N0ZXAsIHN0cmVhbWVkVGV4dDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gPT5cbiAgc3RlcC50eXBlID09PSAnbmFycmF0aW9uJyAmJiBuYXJyYXRpb25UZXh0c01hdGNoKHN0ZXAudGV4dCwgc3RyZWFtZWRUZXh0KVxuXG4vKipcbiAqIE5hcnJhY2nDs24gZGUgdHVybm86IHRva2VucyBzaW4gc3RlcCB2YW4gYW5jbGFkb3MgYWwgaW5pY2lvLiBVbmEgbmFycmFjacOzblxuICogY29tbWl0ZWFkYSAocHJlIGFuc3dlcl9yZXNldCkgc2UgcGludGEgZW4gc3UgZmlsYSwgbm8gc2UgcmVjdWVsZ2EgYWwgw7psdGltbyB0b29sLlxuICovXG5leHBvcnQgY29uc3Qgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSA9IChcbiAgc3RlcHM6IFJlYXNvbmluZ1N0ZXBbXSxcbiAgc3RyZWFtQWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgc3RyZWFtaW5nVGV4dDogc3RyaW5nLFxuICBtZXNzYWdlSWQ/OiBzdHJpbmcgfCBudWxsLFxuICBzaG93VGhpbmtpbmcgPSBmYWxzZVxuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChzdHJlYW1BY3Rpdml0eT8ucGhhc2UgIT09ICd3cml0aW5nJykgcmV0dXJuIGZhbHNlXG4gIGlmICghc3RyZWFtaW5nVGV4dC50cmltKCkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHZpc2libGUgPSB2aXNpYmxlUmVhc29uaW5nU3RlcHMoc3RlcHMsIHNob3dUaGlua2luZylcbiAgY29uc3QgbGVhZGluZyA9IGZpbmRMZWFkaW5nTmFycmF0aW9uKHN0ZXBzKVxuXG4gIC8vIFRva2VucyBhbnRlcyBkZSBjdWFscXVpZXIgYWNjacOzbjogbGEgbmFycmFjacOzbiBlcyBlbCBwcmltZXIgcGFzby5cbiAgaWYgKGxlYWRpbmcgJiYgIWhhc0FjdGlvblN0ZXAodmlzaWJsZSkgJiYgbG9va3NMaWtlSW50ZXJtZWRpYXRlTmFycmF0aW9uU3RyZWFtKHN0cmVhbWluZ1RleHQpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIExlYWRpbmcgeWEgYW5jbGFkYTogZWwgYm9keSB0b2RhdsOtYSBlcyBlc2EgbWlzbWEgbmFycmFjacOzbiAoc2luIHJlc3B1ZXN0YSBmaW5hbCkuXG4gIGlmIChsZWFkaW5nICYmIG5hcnJhdGlvblRleHRzTWF0Y2gobGVhZGluZy50ZXh0LCBzdHJlYW1pbmdUZXh0KSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoIXZpc2libGUubGVuZ3RoICYmIGxvb2tzTGlrZUludGVybWVkaWF0ZU5hcnJhdGlvblN0cmVhbShzdHJlYW1pbmdUZXh0KSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBjb25zdCBsYXN0ID0gdmlzaWJsZVt2aXNpYmxlLmxlbmd0aCAtIDFdXG4gIGlmICghbGFzdCB8fCBsYXN0LnR5cGUgPT09ICd0aGlua2luZycpIHJldHVybiBmYWxzZVxuXG4gIGlmIChsYXN0LnR5cGUgPT09ICduYXJyYXRpb24nKSB7XG4gICAgaWYgKG1lc3NhZ2VJZCAmJiAhcmVhc29uaW5nU3RvcmUuaXNOYXJyYXRpb25IYW5kb2ZmUGVuZGluZyhtZXNzYWdlSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIG5hcnJhdGlvblRleHRzTWF0Y2gobGFzdC50ZXh0LCBzdHJlYW1pbmdUZXh0KVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKiBUZXh0byBkZSBsYSBmaWxhIGxpdmUgYWwgZmluYWwgZGUgbGEgdHJhemE7IG51bGwgc2kgeWEgZXN0w6EgYW5jbGFkYSBvIHZhIGFsIGN1ZXJwby4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlUGVuZGluZ05hcnJhdGlvblRleHQgPSAoXG4gIHN0ZXBzOiBSZWFzb25pbmdTdGVwW10sXG4gIHN0cmVhbUFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIHN0cmVhbWluZ1RleHQ6IHN0cmluZyxcbiAgbWVzc2FnZUlkPzogc3RyaW5nIHwgbnVsbCxcbiAgc2hvd1RoaW5raW5nID0gZmFsc2Vcbik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBpZiAoIXNob3VsZFN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUoc3RlcHMsIHN0cmVhbUFjdGl2aXR5LCBzdHJlYW1pbmdUZXh0LCBtZXNzYWdlSWQsIHNob3dUaGlua2luZykpIHJldHVybiBudWxsXG5cbiAgY29uc3QgbGVhZGluZyA9IGZpbmRMZWFkaW5nTmFycmF0aW9uKHN0ZXBzKVxuICAvLyBZYSBlc3TDoSBhbmNsYWRhIGFsIGluaWNpbzogbm8gcmVjdWVsZ3VlcyBlbCBtaXNtbyB0ZXh0byBkZXRyw6FzIGRlIGNhZGEgdG9vbC5cbiAgaWYgKGxlYWRpbmcgJiYgbmFycmF0aW9uVGV4dHNNYXRjaChsZWFkaW5nLnRleHQsIHN0cmVhbWluZ1RleHQpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGxhc3QgPSB2aXNpYmxlUmVhc29uaW5nU3RlcHMoc3RlcHMsIHNob3dUaGlua2luZykuYXQoLTEpXG4gIGlmIChsYXN0Py50eXBlID09PSAnbmFycmF0aW9uJyAmJiBuYXJyYXRpb25UZXh0c01hdGNoKGxhc3QudGV4dCwgc3RyZWFtaW5nVGV4dCkpIHtcbiAgICByZXR1cm4gc3RyZWFtaW5nVGV4dFxuICB9XG5cbiAgaWYgKCFsYXN0IHx8IGxhc3QudHlwZSA9PT0gJ3RoaW5raW5nJykgcmV0dXJuIHN0cmVhbWluZ1RleHRcblxuICByZXR1cm4gbnVsbFxufVxuIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxjQUFjLFFBQVEsaURBQWlEO0FBQ2hGLFNBQ0VDLG9CQUFvQixFQUNwQkMsYUFBYSxFQUNiQyxvQ0FBb0MsRUFDcENDLG1CQUFtQixRQUNkLG9CQUFvQjtBQUMzQixTQUFTQyxhQUFhLFFBQVEsa0JBQWtCO0FBRWhELE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsbUJBQW1CO0FBRXhELFNBQVNGLG1CQUFtQixRQUFRLG9CQUFvQjtBQUV4RCxPQUFPLElBQU1HLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlDLEtBQXNCO0VBQUEsSUFBRUMsWUFBWSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxLQUFLO0VBQUEsT0FDaEZELFlBQVksR0FBR0QsS0FBSyxHQUFHQSxLQUFLLENBQUNLLE1BQU0sQ0FBQ1IsYUFBYSxDQUFDO0FBQUE7QUFFcEQsT0FBTyxJQUFNUyx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUFJQyxJQUFtQixFQUFFQyxZQUEyQjtFQUFBLE9BQ3hGRCxJQUFJLENBQUNFLElBQUksS0FBSyxXQUFXLElBQUliLG1CQUFtQixDQUFDVyxJQUFJLENBQUNHLElBQUksRUFBRUYsWUFBWSxDQUFDO0FBQUE7O0FBRTNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNRywrQkFBK0IsR0FBRyxT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