@projectcor/maia-components 2.49.0-beta.1 → 2.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
  3. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +117 -0
  4. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +31 -101
  5. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +91 -0
  6. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +49 -140
  7. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +257 -0
  8. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -205
  9. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
  10. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
  11. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
  12. package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
  13. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
  14. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
  15. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +59 -0
  16. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -57
  17. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
  18. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +184 -0
  19. package/lib/components/atoms/MAIAInput/MAIAInput.js +127 -176
  20. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +96 -0
  21. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -113
  22. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
  23. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
  24. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +3 -4
  25. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +3 -11
  26. package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
  27. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +2 -3
  28. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
  29. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
  30. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
  31. package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
  32. package/lib/components/atoms/TextArea/TextArea.js +11 -20
  33. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
  34. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +6 -29
  35. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +68 -0
  36. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +17 -56
  37. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +133 -0
  38. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +31 -112
  39. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
  40. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
  41. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
  42. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +197 -233
  43. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +398 -0
  44. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +209 -235
  45. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +515 -4
  46. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +228 -344
  47. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
  48. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
  49. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +49 -0
  50. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +36 -33
  51. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
  52. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
  53. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
  54. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
  55. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
  56. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
  57. package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
  58. package/lib/components/molecules/Sidebar/Sidebar.js +25 -22
  59. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +512 -0
  60. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +309 -643
  61. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
  62. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
  63. package/lib/constants/formatExtensions.js +7 -8
  64. package/lib/dev/DevReasoningTimeline.js +8 -50
  65. package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
  66. package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
  67. package/lib/hooks/useChatManager/useChatManager.helpers.js +902 -0
  68. package/lib/hooks/useChatManager/useChatManager.js +267 -741
  69. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +365 -0
  70. package/lib/hooks/useChatMessages/useChatMessages.js +59 -285
  71. package/lib/hooks/useClientSearch.helpers.js +36 -0
  72. package/lib/hooks/useClientSearch.js +4 -32
  73. package/lib/hooks/useContextMentions.helpers.js +212 -0
  74. package/lib/hooks/useContextMentions.js +5 -223
  75. package/lib/hooks/useContextMentions.types.js +2 -0
  76. package/lib/hooks/useContextPinPopover.helpers.js +95 -0
  77. package/lib/hooks/useContextPinPopover.js +16 -75
  78. package/lib/hooks/useEntitySearch.helpers.js +407 -0
  79. package/lib/hooks/useEntitySearch.js +52 -436
  80. package/lib/hooks/useMentionPopover.helpers.js +41 -0
  81. package/lib/hooks/useMentionPopover.js +9 -35
  82. package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
  83. package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
  84. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
  85. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
  86. package/lib/hooks/useProjectSearch.helpers.js +61 -0
  87. package/lib/hooks/useProjectSearch.js +4 -58
  88. package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
  89. package/lib/hooks/useProjectSummaryConfig.js +14 -52
  90. package/lib/hooks/useReasoningTrace/reasoningStore.js +8 -39
  91. package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
  92. package/lib/hooks/useRecentClientsSearch.js +4 -32
  93. package/lib/lang/br/index.js +1 -7
  94. package/lib/lang/en/index.js +1 -7
  95. package/lib/lang/es/index.js +1 -7
  96. package/lib/lang/fr/index.js +1 -7
  97. package/lib/services/maia/Agents/getAgents.helpers.js +241 -0
  98. package/lib/services/maia/Agents/getAgents.js +90 -282
  99. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
  100. package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
  101. package/lib/services/utils/mapChatMessages.helpers.js +223 -0
  102. package/lib/services/utils/mapChatMessages.js +25 -254
  103. package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
  104. package/lib/store/sessions/sessionNotifications.js +35 -41
  105. package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
  106. package/lib/store/sessions/sessionStreamManager.js +172 -236
  107. package/lib/test/mockSseStream.js +121 -0
  108. package/lib/test/streamdownCodeMock.js +6 -0
  109. package/lib/test/streamdownMock.js +12 -0
  110. package/lib/types/Chat.js +1 -1
  111. package/lib/types/agentModal.js +1 -1
  112. package/lib/types/reasoning.js +1 -1
  113. package/lib/utils/imagePreprocessor.helpers.js +28 -0
  114. package/lib/utils/imagePreprocessor.js +12 -37
  115. package/lib/utils/renderContextMentions.helpers.js +110 -0
  116. package/lib/utils/renderContextMentions.js +4 -110
  117. package/lib/utils/streamActivityMessages.helpers.js +222 -0
  118. package/lib/utils/streamActivityMessages.js +4 -221
  119. package/package.json +2 -2
  120. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +0 -53
  121. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +0 -8
  122. package/lib/components/atoms/ContextCompactedNotice/index.js +0 -2
  123. package/lib/types/contextCompaction.js +0 -48
  124. package/lib/types/jest-dom.d.js +0 -2
@@ -0,0 +1,96 @@
1
+ /** Líneas visuales con wrap de palabras al ancho dado (aprox. el navegador en LTR). */
2
+ export var countVisualLinesWrapped = function countVisualLinesWrapped(raw, contentWidthPx, measureTextWidth) {
3
+ if (contentWidthPx <= 1) {
4
+ return 1;
5
+ }
6
+ var paragraphs = raw.split('\n');
7
+ var total = paragraphs.reduce(function (sum, paragraph) {
8
+ if (paragraph.length === 0) {
9
+ return sum + 1;
10
+ }
11
+ var words = paragraph.split(/\s+/).filter(function (word) {
12
+ return word.length > 0;
13
+ });
14
+ var _words$reduce = words.reduce(function (state, word, index) {
15
+ var wordWidth = measureTextWidth(word);
16
+ var spaceWidth = index > 0 ? measureTextWidth(' ') : 0;
17
+ if (wordWidth > contentWidthPx) {
18
+ var lines = state.linesInParagraph,
19
+ currentLineWidth = state.currentLineWidth;
20
+ if (currentLineWidth > 0) {
21
+ lines += 1;
22
+ currentLineWidth = 0;
23
+ }
24
+ lines += Math.ceil(wordWidth / contentWidthPx) - 1;
25
+ return {
26
+ linesInParagraph: lines,
27
+ currentLineWidth: 0
28
+ };
29
+ }
30
+ var candidateWidth = state.currentLineWidth === 0 ? wordWidth : state.currentLineWidth + spaceWidth + wordWidth;
31
+ if (candidateWidth > contentWidthPx && state.currentLineWidth > 0) {
32
+ return {
33
+ linesInParagraph: state.linesInParagraph + 1,
34
+ currentLineWidth: wordWidth
35
+ };
36
+ }
37
+ return {
38
+ linesInParagraph: state.linesInParagraph,
39
+ currentLineWidth: candidateWidth
40
+ };
41
+ }, {
42
+ linesInParagraph: 1,
43
+ currentLineWidth: 0
44
+ }),
45
+ linesInParagraph = _words$reduce.linesInParagraph;
46
+ return sum + linesInParagraph;
47
+ }, 0);
48
+ return Math.max(1, total);
49
+ };
50
+ export var resolveSingleLineOuterHeight = function resolveSingleLineOuterHeight(metrics) {
51
+ return Math.round(metrics.lineHeight + metrics.paddingTop + metrics.paddingBottom + metrics.borderTop + metrics.borderBottom);
52
+ };
53
+ export var detectMultilineFromCanvas = function detectMultilineFromCanvas(text, wrapCheckWidth, measureSegmentWidth, scrollHeight, singleLineHeight) {
54
+ var lines = text.split('\n');
55
+ if (lines.length > 1) return true;
56
+ if (lines.some(function (line) {
57
+ return line.trim() !== '' && measureSegmentWidth(line) > wrapCheckWidth;
58
+ })) return true;
59
+ return scrollHeight > singleLineHeight * 2.05;
60
+ };
61
+ export var resolveVisualLineCounts = function resolveVisualLineCounts(params) {
62
+ var visualLinesAtWrapWidth = 1;
63
+ var visualLinesAtCurrentWidth = 1;
64
+ if (!params.isEmpty && params.canvasContext) {
65
+ visualLinesAtWrapWidth = countVisualLinesWrapped(params.text, params.wrapCheckWidth, params.measureSegmentWidth);
66
+ visualLinesAtCurrentWidth = countVisualLinesWrapped(params.text, params.textareaWidth, params.measureSegmentWidth);
67
+ } else if (!params.isEmpty && !params.canvasContext) {
68
+ visualLinesAtWrapWidth = params.scrollHeight > params.singleLineHeight * 1.85 ? Math.ceil(params.scrollHeight / params.singleLineHeight) : 1;
69
+ visualLinesAtCurrentWidth = visualLinesAtWrapWidth;
70
+ }
71
+ var linesForHeight = !params.isEmpty && params.canvasContext ? visualLinesAtCurrentWidth : visualLinesAtWrapWidth;
72
+ return {
73
+ visualLinesAtWrapWidth: visualLinesAtWrapWidth,
74
+ visualLinesAtCurrentWidth: visualLinesAtCurrentWidth,
75
+ linesForHeight: linesForHeight
76
+ };
77
+ };
78
+ export var resolveTextareaContentHeight = function resolveTextareaContentHeight(params) {
79
+ var isEmpty = params.isEmpty,
80
+ hasMultipleVisualLines = params.hasMultipleVisualLines,
81
+ linesForHeight = params.linesForHeight,
82
+ scrollHeight = params.scrollHeight,
83
+ minHeight = params.minHeight,
84
+ maxHeight = params.maxHeight,
85
+ singleLineOuterHeight = params.singleLineOuterHeight,
86
+ lineHeight = params.lineHeight,
87
+ paddingTop = params.paddingTop,
88
+ paddingBottom = params.paddingBottom,
89
+ borderTop = params.borderTop,
90
+ borderBottom = params.borderBottom;
91
+ if (isEmpty || !hasMultipleVisualLines) return singleLineOuterHeight;
92
+ if (linesForHeight <= 1) return Math.min(Math.max(singleLineOuterHeight, minHeight), maxHeight);
93
+ var snappedHeight = paddingTop + paddingBottom + borderTop + borderBottom + linesForHeight * lineHeight;
94
+ return Math.min(Math.max(Math.min(scrollHeight, snappedHeight), minHeight), maxHeight);
95
+ };
96
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb3VudFZpc3VhbExpbmVzV3JhcHBlZCIsInJhdyIsImNvbnRlbnRXaWR0aFB4IiwibWVhc3VyZVRleHRXaWR0aCIsInBhcmFncmFwaHMiLCJzcGxpdCIsInRvdGFsIiwicmVkdWNlIiwic3VtIiwicGFyYWdyYXBoIiwibGVuZ3RoIiwid29yZHMiLCJmaWx0ZXIiLCJ3b3JkIiwiX3dvcmRzJHJlZHVjZSIsInN0YXRlIiwiaW5kZXgiLCJ3b3JkV2lkdGgiLCJzcGFjZVdpZHRoIiwibGluZXMiLCJsaW5lc0luUGFyYWdyYXBoIiwiY3VycmVudExpbmVXaWR0aCIsIk1hdGgiLCJjZWlsIiwiY2FuZGlkYXRlV2lkdGgiLCJtYXgiLCJyZXNvbHZlU2luZ2xlTGluZU91dGVySGVpZ2h0IiwibWV0cmljcyIsInJvdW5kIiwibGluZUhlaWdodCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwiYm9yZGVyVG9wIiwiYm9yZGVyQm90dG9tIiwiZGV0ZWN0TXVsdGlsaW5lRnJvbUNhbnZhcyIsInRleHQiLCJ3cmFwQ2hlY2tXaWR0aCIsIm1lYXN1cmVTZWdtZW50V2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJzaW5nbGVMaW5lSGVpZ2h0Iiwic29tZSIsImxpbmUiLCJ0cmltIiwicmVzb2x2ZVZpc3VhbExpbmVDb3VudHMiLCJwYXJhbXMiLCJ2aXN1YWxMaW5lc0F0V3JhcFdpZHRoIiwidmlzdWFsTGluZXNBdEN1cnJlbnRXaWR0aCIsImlzRW1wdHkiLCJjYW52YXNDb250ZXh0IiwidGV4dGFyZWFXaWR0aCIsImxpbmVzRm9ySGVpZ2h0IiwicmVzb2x2ZVRleHRhcmVhQ29udGVudEhlaWdodCIsImhhc011bHRpcGxlVmlzdWFsTGluZXMiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJzaW5nbGVMaW5lT3V0ZXJIZWlnaHQiLCJtaW4iLCJzbmFwcGVkSGVpZ2h0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dEVkaXRvci5oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBMw61uZWFzIHZpc3VhbGVzIGNvbiB3cmFwIGRlIHBhbGFicmFzIGFsIGFuY2hvIGRhZG8gKGFwcm94LiBlbCBuYXZlZ2Fkb3IgZW4gTFRSKS4gKi9cbmV4cG9ydCBjb25zdCBjb3VudFZpc3VhbExpbmVzV3JhcHBlZCA9IChcbiAgcmF3OiBzdHJpbmcsXG4gIGNvbnRlbnRXaWR0aFB4OiBudW1iZXIsXG4gIG1lYXN1cmVUZXh0V2lkdGg6IChzZWdtZW50OiBzdHJpbmcpID0+IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgaWYgKGNvbnRlbnRXaWR0aFB4IDw9IDEpIHtcbiAgICByZXR1cm4gMVxuICB9XG4gIGNvbnN0IHBhcmFncmFwaHMgPSByYXcuc3BsaXQoJ1xcbicpXG5cbiAgY29uc3QgdG90YWwgPSBwYXJhZ3JhcGhzLnJlZHVjZSgoc3VtLCBwYXJhZ3JhcGgpID0+IHtcbiAgICBpZiAocGFyYWdyYXBoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN1bSArIDFcbiAgICB9XG5cbiAgICBjb25zdCB3b3JkcyA9IHBhcmFncmFwaC5zcGxpdCgvXFxzKy8pLmZpbHRlcih3b3JkID0+IHdvcmQubGVuZ3RoID4gMClcblxuICAgIGNvbnN0IHsgbGluZXNJblBhcmFncmFwaCB9ID0gd29yZHMucmVkdWNlKFxuICAgICAgKHN0YXRlLCB3b3JkLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB3b3JkV2lkdGggPSBtZWFzdXJlVGV4dFdpZHRoKHdvcmQpXG4gICAgICAgIGNvbnN0IHNwYWNlV2lkdGggPSBpbmRleCA+IDAgPyBtZWFzdXJlVGV4dFdpZHRoKCcgJykgOiAwXG5cbiAgICAgICAgaWYgKHdvcmRXaWR0aCA+IGNvbnRlbnRXaWR0aFB4KSB7XG4gICAgICAgICAgbGV0IHsgbGluZXNJblBhcmFncmFwaDogbGluZXMsIGN1cnJlbnRMaW5lV2lkdGggfSA9IHN0YXRlXG4gICAgICAgICAgaWYgKGN1cnJlbnRMaW5lV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBsaW5lcyArPSAxXG4gICAgICAgICAgICBjdXJyZW50TGluZVdpZHRoID0gMFxuICAgICAgICAgIH1cbiAgICAgICAgICBsaW5lcyArPSBNYXRoLmNlaWwod29yZFdpZHRoIC8gY29udGVudFdpZHRoUHgpIC0gMVxuICAgICAgICAgIHJldHVybiB7IGxpbmVzSW5QYXJhZ3JhcGg6IGxpbmVzLCBjdXJyZW50TGluZVdpZHRoOiAwIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVdpZHRoID1cbiAgICAgICAgICBzdGF0ZS5jdXJyZW50TGluZVdpZHRoID09PSAwID8gd29yZFdpZHRoIDogc3RhdGUuY3VycmVudExpbmVXaWR0aCArIHNwYWNlV2lkdGggKyB3b3JkV2lkdGhcbiAgICAgICAgaWYgKGNhbmRpZGF0ZVdpZHRoID4gY29udGVudFdpZHRoUHggJiYgc3RhdGUuY3VycmVudExpbmVXaWR0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4geyBsaW5lc0luUGFyYWdyYXBoOiBzdGF0ZS5saW5lc0luUGFyYWdyYXBoICsgMSwgY3VycmVudExpbmVXaWR0aDogd29yZFdpZHRoIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBsaW5lc0luUGFyYWdyYXBoOiBzdGF0ZS5saW5lc0luUGFyYWdyYXBoLCBjdXJyZW50TGluZVdpZHRoOiBjYW5kaWRhdGVXaWR0aCB9XG4gICAgICB9LFxuICAgICAgeyBsaW5lc0luUGFyYWdyYXBoOiAxLCBjdXJyZW50TGluZVdpZHRoOiAwIH1cbiAgICApXG5cbiAgICByZXR1cm4gc3VtICsgbGluZXNJblBhcmFncmFwaFxuICB9LCAwKVxuXG4gIHJldHVybiBNYXRoLm1heCgxLCB0b3RhbClcbn1cblxuZXhwb3J0IHR5cGUgVGV4dGFyZWFCb3hNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiBudW1iZXJcbiAgcGFkZGluZ1RvcDogbnVtYmVyXG4gIHBhZGRpbmdCb3R0b206IG51bWJlclxuICBib3JkZXJUb3A6IG51bWJlclxuICBib3JkZXJCb3R0b206IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVNpbmdsZUxpbmVPdXRlckhlaWdodCA9IChtZXRyaWNzOiBUZXh0YXJlYUJveE1ldHJpY3MpOiBudW1iZXIgPT5cbiAgTWF0aC5yb3VuZChtZXRyaWNzLmxpbmVIZWlnaHQgKyBtZXRyaWNzLnBhZGRpbmdUb3AgKyBtZXRyaWNzLnBhZGRpbmdCb3R0b20gKyBtZXRyaWNzLmJvcmRlclRvcCArIG1ldHJpY3MuYm9yZGVyQm90dG9tKVxuXG5leHBvcnQgY29uc3QgZGV0ZWN0TXVsdGlsaW5lRnJvbUNhbnZhcyA9IChcbiAgdGV4dDogc3RyaW5nLFxuICB3cmFwQ2hlY2tXaWR0aDogbnVtYmVyLFxuICBtZWFzdXJlU2VnbWVudFdpZHRoOiAoc2VnbWVudDogc3RyaW5nKSA9PiBudW1iZXIsXG4gIHNjcm9sbEhlaWdodDogbnVtYmVyLFxuICBzaW5nbGVMaW5lSGVpZ2h0OiBudW1iZXJcbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpXG4gIGlmIChsaW5lcy5sZW5ndGggPiAxKSByZXR1cm4gdHJ1ZVxuICBpZiAobGluZXMuc29tZShsaW5lID0+IGxpbmUudHJpbSgpICE9PSAnJyAmJiBtZWFzdXJlU2VnbWVudFdpZHRoKGxpbmUpID4gd3JhcENoZWNrV2lkdGgpKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gc2Nyb2xsSGVpZ2h0ID4gc2luZ2xlTGluZUhlaWdodCAqIDIuMDVcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVWaXN1YWxMaW5lQ291bnRzID0gKHBhcmFtczoge1xuICBpc0VtcHR5OiBib29sZWFuXG4gIGNhbnZhc0NvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGxcbiAgdGV4dDogc3RyaW5nXG4gIHdyYXBDaGVja1dpZHRoOiBudW1iZXJcbiAgdGV4dGFyZWFXaWR0aDogbnVtYmVyXG4gIG1lYXN1cmVTZWdtZW50V2lkdGg6IChzZWdtZW50OiBzdHJpbmcpID0+IG51bWJlclxuICBzY3JvbGxIZWlnaHQ6IG51bWJlclxuICBzaW5nbGVMaW5lSGVpZ2h0OiBudW1iZXJcbn0pOiB7IHZpc3VhbExpbmVzQXRXcmFwV2lkdGg6IG51bWJlcjsgdmlzdWFsTGluZXNBdEN1cnJlbnRXaWR0aDogbnVtYmVyOyBsaW5lc0ZvckhlaWdodDogbnVtYmVyIH0gPT4ge1xuICBsZXQgdmlzdWFsTGluZXNBdFdyYXBXaWR0aCA9IDFcbiAgbGV0IHZpc3VhbExpbmVzQXRDdXJyZW50V2lkdGggPSAxXG5cbiAgaWYgKCFwYXJhbXMuaXNFbXB0eSAmJiBwYXJhbXMuY2FudmFzQ29udGV4dCkge1xuICAgIHZpc3VhbExpbmVzQXRXcmFwV2lkdGggPSBjb3VudFZpc3VhbExpbmVzV3JhcHBlZChwYXJhbXMudGV4dCwgcGFyYW1zLndyYXBDaGVja1dpZHRoLCBwYXJhbXMubWVhc3VyZVNlZ21lbnRXaWR0aClcbiAgICB2aXN1YWxMaW5lc0F0Q3VycmVudFdpZHRoID0gY291bnRWaXN1YWxMaW5lc1dyYXBwZWQocGFyYW1zLnRleHQsIHBhcmFtcy50ZXh0YXJlYVdpZHRoLCBwYXJhbXMubWVhc3VyZVNlZ21lbnRXaWR0aClcbiAgfSBlbHNlIGlmICghcGFyYW1zLmlzRW1wdHkgJiYgIXBhcmFtcy5jYW52YXNDb250ZXh0KSB7XG4gICAgdmlzdWFsTGluZXNBdFdyYXBXaWR0aCA9XG4gICAgICBwYXJhbXMuc2Nyb2xsSGVpZ2h0ID4gcGFyYW1zLnNpbmdsZUxpbmVIZWlnaHQgKiAxLjg1XG4gICAgICAgID8gTWF0aC5jZWlsKHBhcmFtcy5zY3JvbGxIZWlnaHQgLyBwYXJhbXMuc2luZ2xlTGluZUhlaWdodClcbiAgICAgICAgOiAxXG4gICAgdmlzdWFsTGluZXNBdEN1cnJlbnRXaWR0aCA9IHZpc3VhbExpbmVzQXRXcmFwV2lkdGhcbiAgfVxuXG4gIGNvbnN0IGxpbmVzRm9ySGVpZ2h0ID0gIXBhcmFtcy5pc0VtcHR5ICYmIHBhcmFtcy5jYW52YXNDb250ZXh0ID8gdmlzdWFsTGluZXNBdEN1cnJlbnRXaWR0aCA6IHZpc3VhbExpbmVzQXRXcmFwV2lkdGhcblxuICByZXR1cm4geyB2aXN1YWxMaW5lc0F0V3JhcFdpZHRoLCB2aXN1YWxMaW5lc0F0Q3VycmVudFdpZHRoLCBsaW5lc0ZvckhlaWdodCB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlVGV4dGFyZWFDb250ZW50SGVpZ2h0ID0gKHBhcmFtczoge1xuICBpc0VtcHR5OiBib29sZWFuXG4gIGhhc011bHRpcGxlVmlzdWFsTGluZXM6IGJvb2xlYW5cbiAgbGluZXNGb3JIZWlnaHQ6IG51bWJlclxuICBzY3JvbGxIZWlnaHQ6IG51bWJlclxuICBtaW5IZWlnaHQ6IG51bWJlclxuICBtYXhIZWlnaHQ6IG51bWJlclxuICBzaW5nbGVMaW5lT3V0ZXJIZWlnaHQ6IG51bWJlclxuICBsaW5lSGVpZ2h0OiBudW1iZXJcbiAgcGFkZGluZ1RvcDogbnVtYmVyXG4gIHBhZGRpbmdCb3R0b206IG51bWJlclxuICBib3JkZXJUb3A6IG51bWJlclxuICBib3JkZXJCb3R0b206IG51bWJlclxufSk6IG51bWJlciA9PiB7XG4gIGNvbnN0IHtcbiAgICBpc0VtcHR5LFxuICAgIGhhc011bHRpcGxlVmlzdWFsTGluZXMsXG4gICAgbGluZXNGb3JIZWlnaHQsXG4gICAgc2Nyb2xsSGVpZ2h0LFxuICAgIG1pbkhlaWdodCxcbiAgICBtYXhIZWlnaHQsXG4gICAgc2luZ2xlTGluZU91dGVySGVpZ2h0LFxuICAgIGxpbmVIZWlnaHQsXG4gICAgcGFkZGluZ1RvcCxcbiAgICBwYWRkaW5nQm90dG9tLFxuICAgIGJvcmRlclRvcCxcbiAgICBib3JkZXJCb3R0b20sXG4gIH0gPSBwYXJhbXNcblxuICBpZiAoaXNFbXB0eSB8fCAhaGFzTXVsdGlwbGVWaXN1YWxMaW5lcykgcmV0dXJuIHNpbmdsZUxpbmVPdXRlckhlaWdodFxuICBpZiAobGluZXNGb3JIZWlnaHQgPD0gMSkgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHNpbmdsZUxpbmVPdXRlckhlaWdodCwgbWluSGVpZ2h0KSwgbWF4SGVpZ2h0KVxuXG4gIGNvbnN0IHNuYXBwZWRIZWlnaHQgPSBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlclRvcCArIGJvcmRlckJvdHRvbSArIGxpbmVzRm9ySGVpZ2h0ICogbGluZUhlaWdodFxuICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoTWF0aC5taW4oc2Nyb2xsSGVpZ2h0LCBzbmFwcGVkSGVpZ2h0KSwgbWluSGVpZ2h0KSwgbWF4SGVpZ2h0KVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLE9BQU8sSUFBTUEsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbENDLEdBQVcsRUFDWEMsY0FBc0IsRUFDdEJDLGdCQUE2QyxFQUNsQztFQUNYLElBQUlELGNBQWMsSUFBSSxDQUFDLEVBQUU7SUFDdkIsT0FBTyxDQUFDO0VBQ1Y7RUFDQSxJQUFNRSxVQUFVLEdBQUdILEdBQUcsQ0FBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQztFQUVsQyxJQUFNQyxLQUFLLEdBQUdGLFVBQVUsQ0FBQ0csTUFBTSxDQUFDLFVBQUNDLEdBQUcsRUFBRUMsU0FBUyxFQUFLO0lBQ2xELElBQUlBLFNBQVMsQ0FBQ0MsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUMxQixPQUFPRixHQUFHLEdBQUcsQ0FBQztJQUNoQjtJQUVBLElBQU1HLEtBQUssR0FBR0YsU0FBUyxDQUFDSixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUNPLE1BQU0sQ0FBQyxVQUFBQyxJQUFJO01BQUEsT0FBSUEsSUFBSSxDQUFDSCxNQUFNLEdBQUcsQ0FBQztJQUFBLEVBQUM7SUFFcEUsSUFBQUksYUFBQSxHQUE2QkgsS0FBSyxDQUFDSixNQUFNLENBQ3ZDLFVBQUNRLEtBQUssRUFBRUYsSUFBSSxFQUFFRyxLQUFLLEVBQUs7UUFDdEIsSUFBTUMsU0FBUyxHQUFHZCxnQkFBZ0IsQ0FBQ1UsSUFBSSxDQUFDO1FBQ3hDLElBQU1LLFVBQVUsR0FBR0YsS0FBSyxHQUFHLENBQUMsR0FBR2IsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUV4RCxJQUFJYyxTQUFTLEdBQUdmLGNBQWMsRUFBRTtVQUM5QixJQUF3QmlCLEtBQUssR0FBdUJKLEtBQUssQ0FBbkRLLGdCQUFnQjtZQUFTQyxnQkFBZ0IsR0FBS04sS0FBSyxDQUExQk0sZ0JBQWdCO1VBQy9DLElBQUlBLGdCQUFnQixHQUFHLENBQUMsRUFBRTtZQUN4QkYsS0FBSyxJQUFJLENBQUM7WUFDVkUsZ0JBQWdCLEdBQUcsQ0FBQztVQUN0QjtVQUNBRixLQUFLLElBQUlHLElBQUksQ0FBQ0MsSUFBSSxDQUFDTixTQUFTLEdBQUdmLGNBQWMsQ0FBQyxHQUFHLENBQUM7VUFDbEQsT0FBTztZQUFFa0IsZ0JBQWdCLEVBQUVELEtBQUs7WUFBRUUsZ0JBQWdCLEVBQUU7VUFBRSxDQUFDO1FBQ3pEO1FBRUEsSUFBTUcsY0FBYyxHQUNsQlQsS0FBSyxDQUFDTSxnQkFBZ0IsS0FBSyxDQUFDLEdBQUdKLFNBQVMsR0FBR0YsS0FBSyxDQUFDTSxnQkFBZ0IsR0FBR0gsVUFBVSxHQUFHRCxTQUFTO1FBQzVGLElBQUlPLGNBQWMsR0FBR3RCLGNBQWMsSUFBSWEsS0FBSyxDQUFDTSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7VUFDakUsT0FBTztZQUFFRCxnQkFBZ0IsRUFBRUwsS0FBSyxDQUFDSyxnQkFBZ0IsR0FBRyxDQUFDO1lBQUVDLGdCQUFnQixFQUFFSjtVQUFVLENBQUM7UUFDdEY7UUFDQSxPQUFPO1VBQUVHLGdCQUFnQixFQUFFTCxLQUFLLENBQUNLLGdCQUFnQjtVQUFFQyxnQkFBZ0IsRUFBRUc7UUFBZSxDQUFDO01BQ3ZGLENBQUMsRUFDRDtRQUFFSixnQkFBZ0IsRUFBRSxDQUFDO1FBQUVDLGdCQUFnQixFQUFFO01BQUUsQ0FDN0MsQ0FBQztNQXZCT0QsZ0JBQWdCLEdBQUFOLGFBQUEsQ0FBaEJNLGdCQUFnQjtJQXlCeEIsT0FBT1osR0FBRyxHQUFHWSxnQkFBZ0I7RUFDL0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUVMLE9BQU9FLElBQUksQ0FBQ0csR0FBRyxDQUFDLENBQUMsRUFBRW5CLEtBQUssQ0FBQztBQUMzQixDQUFDO0FBVUQsT0FBTyxJQUFNb0IsNEJBQTRCLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FBSUMsT0FBMkI7RUFBQSxPQUN0RUwsSUFBSSxDQUFDTSxLQUFLLENBQUNELE9BQU8sQ0FBQ0UsVUFBVSxHQUFHRixPQUFPLENBQUNHLFVBQVUsR0FBR0gsT0FBTyxDQUFDSSxhQUFhLEdBQUdKLE9BQU8sQ0FBQ0ssU0FBUyxHQUFHTCxPQUFPLENBQUNNLFlBQVksQ0FBQztBQUFBO0FBRXhILE9BQU8sSUFBTUMseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FDcENDLElBQVksRUFDWkMsY0FBc0IsRUFDdEJDLG1CQUFnRCxFQUNoREMsWUFBb0IsRUFDcEJDLGdCQUF3QixFQUNaO0VBQ1osSUFBTXBCLEtBQUssR0FBR2dCLElBQUksQ0FBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUM7RUFDOUIsSUFBSWMsS0FBSyxDQUFDVCxNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBSTtFQUNqQyxJQUFJUyxLQUFLLENBQUNxQixJQUFJLENBQUMsVUFBQUMsSUFBSTtJQUFBLE9BQUlBLElBQUksQ0FBQ0MsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUlMLG1CQUFtQixDQUFDSSxJQUFJLENBQUMsR0FBR0wsY0FBYztFQUFBLEVBQUMsRUFBRSxPQUFPLElBQUk7RUFDckcsT0FBT0UsWUFBWSxHQUFHQyxnQkFBZ0IsR0FBRyxJQUFJO0FBQy9DLENBQUM7QUFFRCxPQUFPLElBQU1JLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQUlDLE1BU3ZDLEVBQW9HO0VBQ25HLElBQUlDLHNCQUFzQixHQUFHLENBQUM7RUFDOUIsSUFBSUMseUJBQXlCLEdBQUcsQ0FBQztFQUVqQyxJQUFJLENBQUNGLE1BQU0sQ0FBQ0csT0FBTyxJQUFJSCxNQUFNLENBQUNJLGFBQWEsRUFBRTtJQUMzQ0gsc0JBQXNCLEdBQUc3Qyx1QkFBdUIsQ0FBQzRDLE1BQU0sQ0FBQ1QsSUFBSSxFQUFFUyxNQUFNLENBQUNSLGNBQWMsRUFBRVEsTUFBTSxDQUFDUCxtQkFBbUIsQ0FBQztJQUNoSFMseUJBQXlCLEdBQUc5Qyx1QkFBdUIsQ0FBQzRDLE1BQU0sQ0FBQ1QsSUFBSSxFQUFFUyxNQUFNLENBQUNLLGFBQWEsRUFBRUwsTUFBTSxDQUFDUCxtQkFBbUIsQ0FBQztFQUNwSCxDQUFDLE1BQU0sSUFBSSxDQUFDTyxNQUFNLENBQUNHLE9BQU8sSUFBSSxDQUFDSCxNQUFNLENBQUNJLGFBQWEsRUFBRTtJQUNuREgsc0JBQXNCLEdBQ3BCRCxNQUFNLENBQUNOLFlBQVksR0FBR00sTUFBTSxDQUFDTCxnQkFBZ0IsR0FBRyxJQUFJLEdBQ2hEakIsSUFBSSxDQUFDQyxJQUFJLENBQUNxQixNQUFNLENBQUNOLFlBQVksR0FBR00sTUFBTSxDQUFDTCxnQkFBZ0IsQ0FBQyxHQUN4RCxDQUFDO0lBQ1BPLHlCQUF5QixHQUFHRCxzQkFBc0I7RUFDcEQ7RUFFQSxJQUFNSyxjQUFjLEdBQUcsQ0FBQ04sTUFBTSxDQUFDRyxPQUFPLElBQUlILE1BQU0sQ0FBQ0ksYUFBYSxHQUFHRix5QkFBeUIsR0FBR0Qsc0JBQXNCO0VBRW5ILE9BQU87SUFBRUEsc0JBQXNCLEVBQXRCQSxzQkFBc0I7SUFBRUMseUJBQXlCLEVBQXpCQSx5QkFBeUI7SUFBRUksY0FBYyxFQUFkQTtFQUFlLENBQUM7QUFDOUUsQ0FBQztBQUVELE9BQU8sSUFBTUMsNEJBQTRCLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FBSVAsTUFhNUMsRUFBYTtFQUNaLElBQ0VHLE9BQU8sR0FZTEgsTUFBTSxDQVpSRyxPQUFPO0lBQ1BLLHNCQUFzQixHQVdwQlIsTUFBTSxDQVhSUSxzQkFBc0I7SUFDdEJGLGNBQWMsR0FVWk4sTUFBTSxDQVZSTSxjQUFjO0lBQ2RaLFlBQVksR0FTVk0sTUFBTSxDQVRSTixZQUFZO0lBQ1plLFNBQVMsR0FRUFQsTUFBTSxDQVJSUyxTQUFTO0lBQ1RDLFNBQVMsR0FPUFYsTUFBTSxDQVBSVSxTQUFTO0lBQ1RDLHFCQUFxQixHQU1uQlgsTUFBTSxDQU5SVyxxQkFBcUI7SUFDckIxQixVQUFVLEdBS1JlLE1BQU0sQ0FMUmYsVUFBVTtJQUNWQyxVQUFVLEdBSVJjLE1BQU0sQ0FKUmQsVUFBVTtJQUNWQyxhQUFhLEdBR1hhLE1BQU0sQ0FIUmIsYUFBYTtJQUNiQyxTQUFTLEdBRVBZLE1BQU0sQ0FGUlosU0FBUztJQUNUQyxZQUFZLEdBQ1ZXLE1BQU0sQ0FEUlgsWUFBWTtFQUdkLElBQUljLE9BQU8sSUFBSSxDQUFDSyxzQkFBc0IsRUFBRSxPQUFPRyxxQkFBcUI7RUFDcEUsSUFBSUwsY0FBYyxJQUFJLENBQUMsRUFBRSxPQUFPNUIsSUFBSSxDQUFDa0MsR0FBRyxDQUFDbEMsSUFBSSxDQUFDRyxHQUFHLENBQUM4QixxQkFBcUIsRUFBRUYsU0FBUyxDQUFDLEVBQUVDLFNBQVMsQ0FBQztFQUUvRixJQUFNRyxhQUFhLEdBQUczQixVQUFVLEdBQUdDLGFBQWEsR0FBR0MsU0FBUyxHQUFHQyxZQUFZLEdBQUdpQixjQUFjLEdBQUdyQixVQUFVO0VBQ3pHLE9BQU9QLElBQUksQ0FBQ2tDLEdBQUcsQ0FBQ2xDLElBQUksQ0FBQ0csR0FBRyxDQUFDSCxJQUFJLENBQUNrQyxHQUFHLENBQUNsQixZQUFZLEVBQUVtQixhQUFhLENBQUMsRUFBRUosU0FBUyxDQUFDLEVBQUVDLFNBQVMsQ0FBQztBQUN4RixDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -1,67 +1,12 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
- function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
3
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
2
  /* eslint-disable no-restricted-syntax */
6
3
  /* eslint-disable no-continue */
7
4
  /* eslint-disable no-void */
8
5
  /* eslint-disable prefer-destructuring */
9
6
  import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
7
+ import { detectMultilineFromCanvas, resolveSingleLineOuterHeight, resolveTextareaContentHeight, resolveVisualLineCounts } from './MAIAInputEditor.helpers';
10
8
  import { StyledMAIAInput } from './styles';
11
-
12
- /**
13
- * Líneas visuales con wrap de palabras al ancho dado (aprox. el navegador en LTR).
14
- */
15
9
  import { jsx as _jsx } from "react/jsx-runtime";
16
- function countVisualLinesWrapped(raw, contentWidthPx, measureTextWidth) {
17
- if (contentWidthPx <= 1) {
18
- return 1;
19
- }
20
- var paragraphs = raw.split('\n');
21
- var total = 0;
22
- var _iterator = _createForOfIteratorHelper(paragraphs),
23
- _step;
24
- try {
25
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
26
- var paragraph = _step.value;
27
- if (paragraph.length === 0) {
28
- total += 1;
29
- continue;
30
- }
31
- var words = paragraph.split(/\s+/).filter(function (w) {
32
- return w.length > 0;
33
- });
34
- var linesInParagraph = 1;
35
- var currentLineWidth = 0;
36
- for (var i = 0; i < words.length; i += 1) {
37
- var word = words[i];
38
- var wordWidth = measureTextWidth(word);
39
- var spaceWidth = i > 0 ? measureTextWidth(' ') : 0;
40
- if (wordWidth > contentWidthPx) {
41
- if (currentLineWidth > 0) {
42
- linesInParagraph += 1;
43
- currentLineWidth = 0;
44
- }
45
- linesInParagraph += Math.ceil(wordWidth / contentWidthPx) - 1;
46
- continue;
47
- }
48
- var candidateWidth = currentLineWidth === 0 ? wordWidth : currentLineWidth + spaceWidth + wordWidth;
49
- if (candidateWidth > contentWidthPx && currentLineWidth > 0) {
50
- linesInParagraph += 1;
51
- currentLineWidth = wordWidth;
52
- } else {
53
- currentLineWidth = candidateWidth;
54
- }
55
- }
56
- total += linesInParagraph;
57
- }
58
- } catch (err) {
59
- _iterator.e(err);
60
- } finally {
61
- _iterator.f();
62
- }
63
- return Math.max(1, total);
64
- }
65
10
  export var MAIAInputEditor = function MAIAInputEditor(_ref) {
66
11
  var inputRef = _ref.inputRef,
67
12
  disabled = _ref.disabled,
@@ -105,7 +50,14 @@ export var MAIAInputEditor = function MAIAInputEditor(_ref) {
105
50
  var paddingBottom = parseFloat(computedStyle.paddingBottom) || 0;
106
51
  var borderTop = parseFloat(computedStyle.borderTopWidth) || 0;
107
52
  var borderBottom = parseFloat(computedStyle.borderBottomWidth) || 0;
108
- var singleLineHeight = lineHeight + paddingTop + paddingBottom + borderTop + borderBottom;
53
+ var boxMetrics = {
54
+ lineHeight: lineHeight,
55
+ paddingTop: paddingTop,
56
+ paddingBottom: paddingBottom,
57
+ borderTop: borderTop,
58
+ borderBottom: borderBottom
59
+ };
60
+ var singleLineHeight = resolveSingleLineOuterHeight(boxMetrics);
109
61
  var isEmpty = textarea.value.trim() === '';
110
62
  var paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;
111
63
  var paddingRight = parseFloat(computedStyle.paddingRight) || 0;
@@ -116,69 +68,44 @@ export var MAIAInputEditor = function MAIAInputEditor(_ref) {
116
68
  textareaMinContentWidthSeenRef.current = textareaMinContentWidthSeenRef.current === null ? textareaWidth : Math.min(textareaMinContentWidthSeenRef.current, textareaWidth);
117
69
  }
118
70
  var wrapCheckWidth = (_textareaMinContentWi = textareaMinContentWidthSeenRef.current) !== null && _textareaMinContentWi !== void 0 ? _textareaMinContentWi : textareaWidth;
119
- var canvasMeasureIndicatesMultiline = false;
120
71
  var canvas = document.createElement('canvas');
121
72
  var canvasContext = canvas.getContext('2d');
122
73
  var text = textarea.value || '';
123
- var lines = text.split('\n');
124
- if (!canvasContext) {
125
- canvasMeasureIndicatesMultiline = scrollHeight > singleLineHeight * 2.05;
126
- } else {
74
+ if (canvasContext) {
127
75
  var textareaStyles = window.getComputedStyle(textarea);
128
76
  canvasContext.font = "".concat(textareaStyles.fontWeight, " ").concat(textareaStyles.fontSize, " ").concat(textareaStyles.fontFamily);
129
- if (lines.length > 1) {
130
- canvasMeasureIndicatesMultiline = true;
131
- } else {
132
- var _iterator2 = _createForOfIteratorHelper(lines),
133
- _step2;
134
- try {
135
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
136
- var line = _step2.value;
137
- if (line.trim() === '') continue;
138
- if (canvasContext.measureText(line).width > wrapCheckWidth) {
139
- canvasMeasureIndicatesMultiline = true;
140
- break;
141
- }
142
- }
143
- } catch (err) {
144
- _iterator2.e(err);
145
- } finally {
146
- _iterator2.f();
147
- }
148
- }
149
77
  }
78
+ var measureSegmentWidth = function measureSegmentWidth(segment) {
79
+ return canvasContext ? canvasContext.measureText(segment).width : 0;
80
+ };
81
+ var canvasMeasureIndicatesMultiline = canvasContext ? detectMultilineFromCanvas(text, wrapCheckWidth, measureSegmentWidth, scrollHeight, singleLineHeight) : scrollHeight > singleLineHeight * 2.05;
150
82
  var hasMultipleVisualLines = canvasMeasureIndicatesMultiline;
151
83
  var nextMultiline = !isEmpty && hasMultipleVisualLines;
152
-
153
- /** Líneas según ancho estrecho (history min) — toolbar compacto y detección multiline */
154
- var visualLinesAtWrapWidth = 1;
155
- /** Líneas al ancho actual del textarea — en stacked suele ser mayor que wrapCheckWidth */
156
- var visualLinesAtCurrentWidth = 1;
157
- if (!isEmpty && canvasContext) {
158
- visualLinesAtWrapWidth = countVisualLinesWrapped(text, wrapCheckWidth, function (segment) {
159
- return canvasContext.measureText(segment).width;
160
- });
161
- visualLinesAtCurrentWidth = countVisualLinesWrapped(text, textareaWidth, function (segment) {
162
- return canvasContext.measureText(segment).width;
163
- });
164
- } else if (!isEmpty && !canvasContext) {
165
- visualLinesAtWrapWidth = scrollHeight > singleLineHeight * 1.85 ? Math.ceil(scrollHeight / singleLineHeight) : 1;
166
- visualLinesAtCurrentWidth = visualLinesAtWrapWidth;
167
- }
168
- var linesForHeight = !isEmpty && canvasContext ? visualLinesAtCurrentWidth : visualLinesAtWrapWidth;
169
- var newHeight;
170
- /** Una línea al ancho actual: altura fijada por tipografía (+ padding/borde), no scrollHeight — evita ~39px al pasar a stacked cuando el canvas ya cuenta 1 línea a ancho amplio pero scrollHeight aún viene de líneas viejas/wrap anterior. */
171
- var snappedSingleLineOuterHeight = Math.round(singleLineHeight);
172
- if (isEmpty) {
173
- newHeight = snappedSingleLineOuterHeight;
174
- } else if (!hasMultipleVisualLines) {
175
- newHeight = snappedSingleLineOuterHeight;
176
- } else if (linesForHeight <= 1) {
177
- newHeight = Math.min(Math.max(snappedSingleLineOuterHeight, minHeight), maxHeight);
178
- } else {
179
- var snappedHeight = paddingTop + paddingBottom + borderTop + borderBottom + linesForHeight * lineHeight;
180
- newHeight = Math.min(Math.max(Math.min(scrollHeight, snappedHeight), minHeight), maxHeight);
181
- }
84
+ var _resolveVisualLineCou = resolveVisualLineCounts({
85
+ isEmpty: isEmpty,
86
+ canvasContext: canvasContext,
87
+ text: text,
88
+ wrapCheckWidth: wrapCheckWidth,
89
+ textareaWidth: textareaWidth,
90
+ measureSegmentWidth: measureSegmentWidth,
91
+ scrollHeight: scrollHeight,
92
+ singleLineHeight: singleLineHeight
93
+ }),
94
+ linesForHeight = _resolveVisualLineCou.linesForHeight;
95
+ var newHeight = resolveTextareaContentHeight({
96
+ isEmpty: isEmpty,
97
+ hasMultipleVisualLines: hasMultipleVisualLines,
98
+ linesForHeight: linesForHeight,
99
+ scrollHeight: scrollHeight,
100
+ minHeight: minHeight,
101
+ maxHeight: maxHeight,
102
+ singleLineOuterHeight: singleLineHeight,
103
+ lineHeight: lineHeight,
104
+ paddingTop: paddingTop,
105
+ paddingBottom: paddingBottom,
106
+ borderTop: borderTop,
107
+ borderBottom: borderBottom
108
+ });
182
109
  setIsTextMultiline(function (prev) {
183
110
  return prev === nextMultiline ? prev : nextMultiline;
184
111
  });
@@ -263,4 +190,4 @@ export var MAIAInputEditor = function MAIAInputEditor(_ref) {
263
190
  onBlur: handleBlur
264
191
  });
265
192
  };
266
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiU3R5bGVkTUFJQUlucHV0IiwianN4IiwiX2pzeCIsImNvdW50VmlzdWFsTGluZXNXcmFwcGVkIiwicmF3IiwiY29udGVudFdpZHRoUHgiLCJtZWFzdXJlVGV4dFdpZHRoIiwicGFyYWdyYXBocyIsInNwbGl0IiwidG90YWwiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwicGFyYWdyYXBoIiwidmFsdWUiLCJsZW5ndGgiLCJ3b3JkcyIsImZpbHRlciIsInciLCJsaW5lc0luUGFyYWdyYXBoIiwiY3VycmVudExpbmVXaWR0aCIsImkiLCJ3b3JkIiwid29yZFdpZHRoIiwic3BhY2VXaWR0aCIsIk1hdGgiLCJjZWlsIiwiY2FuZGlkYXRlV2lkdGgiLCJlcnIiLCJlIiwiZiIsIm1heCIsIk1BSUFJbnB1dEVkaXRvciIsIl9yZWYiLCJpbnB1dFJlZiIsImRpc2FibGVkIiwicGxhY2Vob2xkZXIiLCJhbGlnbkJ1dHRvbnMiLCJzZXRJc1RleHRNdWx0aWxpbmUiLCJjaGF0SWQiLCJuZXdDaGF0S2V5IiwiY2xlYXJTZXEiLCJzZW5kRGlzYWJsZWQiLCJvblR5cGluZ1ByZXNlbmNlQ2hhbmdlIiwib25FbnRlclNlbmQiLCJvbkNoYW5nZVByb3AiLCJ0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYiLCJwcmVzZW5jZVByZXZSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJyZXNpemVFcG9jaCIsInNldFJlc2l6ZUVwb2NoIiwiaGFuZGxlUmVzaXplIiwiX3RleHRhcmVhTWluQ29udGVudFdpIiwidGV4dGFyZWEiLCJjdXJyZW50IiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwicHJldmlvdXNNaW5IZWlnaHQiLCJzdHlsZSIsInByZXZpb3VzTWF4SGVpZ2h0IiwiaGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0IiwiY29tcHV0ZWRTdHlsZSIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJsaW5lSGVpZ2h0IiwicGFyc2VGbG9hdCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwiYm9yZGVyVG9wIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b20iLCJib3JkZXJCb3R0b21XaWR0aCIsInNpbmdsZUxpbmVIZWlnaHQiLCJpc0VtcHR5IiwidHJpbSIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwiYm9yZGVyTGVmdCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyUmlnaHRXaWR0aCIsInRleHRhcmVhV2lkdGgiLCJvZmZzZXRXaWR0aCIsIm1pbiIsIndyYXBDaGVja1dpZHRoIiwiY2FudmFzTWVhc3VyZUluZGljYXRlc011bHRpbGluZSIsImNhbnZhcyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNhbnZhc0NvbnRleHQiLCJnZXRDb250ZXh0IiwidGV4dCIsImxpbmVzIiwidGV4dGFyZWFTdHlsZXMiLCJmb250IiwiY29uY2F0IiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJsaW5lIiwibWVhc3VyZVRleHQiLCJ3aWR0aCIsImhhc011bHRpcGxlVmlzdWFsTGluZXMiLCJuZXh0TXVsdGlsaW5lIiwidmlzdWFsTGluZXNBdFdyYXBXaWR0aCIsInZpc3VhbExpbmVzQXRDdXJyZW50V2lkdGgiLCJzZWdtZW50IiwibGluZXNGb3JIZWlnaHQiLCJuZXdIZWlnaHQiLCJzbmFwcGVkU2luZ2xlTGluZU91dGVySGVpZ2h0Iiwicm91bmQiLCJzbmFwcGVkSGVpZ2h0IiwicHJldiIsIl9pbnB1dFJlZiRjdXJyZW50IiwiZm9jdXMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJpZCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaGFuZGxlQ2hhbmdlIiwiaGFzVHJpbSIsInRhcmdldCIsIngiLCJoYW5kbGVCbHVyIiwiX2lucHV0UmVmJGN1cnJlbnQkdmFsIiwiX2lucHV0UmVmJGN1cnJlbnQyIiwidiIsImhhbmRsZUtleURvd24iLCJrZXkiLCJzaGlmdEtleSIsInByZXZlbnREZWZhdWx0IiwicmVmIiwib25DaGFuZ2UiLCJvbktleURvd24iLCIkdG9vbGJhckxheW91dFZhcmlhbnQiLCJvbkJsdXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9NQUlBSW5wdXQvTUFJQUlucHV0RWRpdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZvaWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHByZWZlci1kZXN0cnVjdHVyaW5nICovXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgS2V5Ym9hcmRFdmVudCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERpc3BhdGNoLCBSZWZPYmplY3QsIFNldFN0YXRlQWN0aW9uIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IFN0eWxlZE1BSUFJbnB1dCB9IGZyb20gJy4vc3R5bGVzJ1xuXG4vKipcbiAqIEzDrW5lYXMgdmlzdWFsZXMgY29uIHdyYXAgZGUgcGFsYWJyYXMgYWwgYW5jaG8gZGFkbyAoYXByb3guIGVsIG5hdmVnYWRvciBlbiBMVFIpLlxuICovXG5mdW5jdGlvbiBjb3VudFZpc3VhbExpbmVzV3JhcHBlZChyYXc6IHN0cmluZywgY29udGVudFdpZHRoUHg6IG51bWJlciwgbWVhc3VyZVRleHRXaWR0aDogKHM6IHN0cmluZykgPT4gbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKGNvbnRlbnRXaWR0aFB4IDw9IDEpIHtcbiAgICByZXR1cm4gMVxuICB9XG4gIGNvbnN0IHBhcmFncmFwaHMgPSByYXcuc3BsaXQoJ1xcbicpXG4gIGxldCB0b3RhbCA9IDBcbiAgZm9yIChjb25zdCBwYXJhZ3JhcGggb2YgcGFyYWdyYXBocykge1xuICAgIGlmIChwYXJhZ3JhcGgubGVuZ3RoID09PSAwKSB7XG4gICAgICB0b3RhbCArPSAxXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCB3b3JkcyA9IHBhcmFncmFwaC5zcGxpdCgvXFxzKy8pLmZpbHRlcih3ID0+IHcubGVuZ3RoID4gMClcbiAgICBsZXQgbGluZXNJblBhcmFncmFwaCA9IDFcbiAgICBsZXQgY3VycmVudExpbmVXaWR0aCA9IDBcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCB3b3JkID0gd29yZHNbaV1cbiAgICAgIGNvbnN0IHdvcmRXaWR0aCA9IG1lYXN1cmVUZXh0V2lkdGgod29yZClcbiAgICAgIGNvbnN0IHNwYWNlV2lkdGggPSBpID4gMCA/IG1lYXN1cmVUZXh0V2lkdGgoJyAnKSA6IDBcblxuICAgICAgaWYgKHdvcmRXaWR0aCA+IGNvbnRlbnRXaWR0aFB4KSB7XG4gICAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoID4gMCkge1xuICAgICAgICAgIGxpbmVzSW5QYXJhZ3JhcGggKz0gMVxuICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwXG4gICAgICAgIH1cbiAgICAgICAgbGluZXNJblBhcmFncmFwaCArPSBNYXRoLmNlaWwod29yZFdpZHRoIC8gY29udGVudFdpZHRoUHgpIC0gMVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYW5kaWRhdGVXaWR0aCA9IGN1cnJlbnRMaW5lV2lkdGggPT09IDAgPyB3b3JkV2lkdGggOiBjdXJyZW50TGluZVdpZHRoICsgc3BhY2VXaWR0aCArIHdvcmRXaWR0aFxuICAgICAgaWYgKGNhbmRpZGF0ZVdpZHRoID4gY29udGVudFdpZHRoUHggJiYgY3VycmVudExpbmVXaWR0aCA+IDApIHtcbiAgICAgICAgbGluZXNJblBhcmFncmFwaCArPSAxXG4gICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSB3b3JkV2lkdGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSBjYW5kaWRhdGVXaWR0aFxuICAgICAgfVxuICAgIH1cbiAgICB0b3RhbCArPSBsaW5lc0luUGFyYWdyYXBoXG4gIH1cbiAgcmV0dXJuIE1hdGgubWF4KDEsIHRvdGFsKVxufVxuXG5leHBvcnQgdHlwZSBNQUlBSW5wdXRFZGl0b3JQcm9wcyA9IHtcbiAgaW5wdXRSZWY6IFJlZk9iamVjdDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbD5cbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIGFsaWduQnV0dG9ucz86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbiAgc2V0SXNUZXh0TXVsdGlsaW5lOiBEaXNwYXRjaDxTZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cbiAgY2hhdElkPzogc3RyaW5nXG4gIG5ld0NoYXRLZXk/OiBudW1iZXJcbiAgLyoqIEluY3JlbWVudGFyIGRlc2RlIGVsIHBhZHJlIHRyYXMgZW52aWFyIC8gY2FtYmlhciBzZXNpw7NuIHBhcmEgc2luY3Jvbml6YXIgbWVkaWNpw7NuIHNpbiBlc3RhZG8gZGVsIHRleHRvIGVuIGVsIHBhZHJlLiAqL1xuICBjbGVhclNlcTogbnVtYmVyXG4gIHNlbmREaXNhYmxlZDogYm9vbGVhblxuICBvblR5cGluZ1ByZXNlbmNlQ2hhbmdlOiAoaGFzVHJpbW1lZFRleHQ6IGJvb2xlYW4pID0+IHZvaWRcbiAgb25FbnRlclNlbmQ6ICgpID0+IHZvaWRcbiAgb25DaGFuZ2VQcm9wPzogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgTUFJQUlucHV0RWRpdG9yID0gKHtcbiAgaW5wdXRSZWYsXG4gIGRpc2FibGVkLFxuICBwbGFjZWhvbGRlcixcbiAgYWxpZ25CdXR0b25zLFxuICBzZXRJc1RleHRNdWx0aWxpbmUsXG4gIGNoYXRJZCxcbiAgbmV3Q2hhdEtleSxcbiAgY2xlYXJTZXEsXG4gIHNlbmREaXNhYmxlZCxcbiAgb25UeXBpbmdQcmVzZW5jZUNoYW5nZSxcbiAgb25FbnRlclNlbmQsXG4gIG9uQ2hhbmdlUHJvcCxcbn06IE1BSUFJbnB1dEVkaXRvclByb3BzKSA9PiB7XG4gIGNvbnN0IHRleHRhcmVhTWluQ29udGVudFdpZHRoU2VlblJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBwcmVzZW5jZVByZXZSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8qKiBTb2xvIHBhcmEgcmUtYWdlbmRhciBtZWRpY2nDs24gZGUgYWx0byBzaW4gZ3VhcmRhciBlbCBzdHJpbmcgZW4gZWwgcGFkcmUgKGFpc2xhIHJlLXJlbmRlcnMgZGVsIHRvb2xiYXIpLiAqL1xuICBjb25zdCBbcmVzaXplRXBvY2gsIHNldFJlc2l6ZUVwb2NoXSA9IHVzZVN0YXRlKDApXG5cbiAgY29uc3QgaGFuZGxlUmVzaXplID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRleHRhcmVhID0gaW5wdXRSZWYuY3VycmVudFxuICAgIGlmICghdGV4dGFyZWEpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKiBDb2luY2lkZSBjb24gU3R5bGVkTUFJQUlucHV0OiBsaW5lLWhlaWdodCAyMHB4IHNvYnJlIGZ1ZW50ZSAxNHB4ICh+dW5hIGzDrW5lYSBkZSB0ZXh0byB2aXNpYmxlKS4gKi9cbiAgICBjb25zdCBtaW5IZWlnaHQgPSAyMFxuICAgIGNvbnN0IG1heEhlaWdodCA9IDE3MFxuXG4gICAgY29uc3QgcHJldmlvdXNNaW5IZWlnaHQgPSB0ZXh0YXJlYS5zdHlsZS5taW5IZWlnaHRcbiAgICBjb25zdCBwcmV2aW91c01heEhlaWdodCA9IHRleHRhcmVhLnN0eWxlLm1heEhlaWdodFxuXG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nXG4gICAgdGV4dGFyZWEuc3R5bGUubWluSGVpZ2h0ID0gJzBweCdcbiAgICB0ZXh0YXJlYS5zdHlsZS5tYXhIZWlnaHQgPSAnbm9uZSdcblxuICAgIHZvaWQgdGV4dGFyZWEub2Zmc2V0SGVpZ2h0XG5cbiAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0ZXh0YXJlYS5zY3JvbGxIZWlnaHRcblxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0YXJlYSlcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmxpbmVIZWlnaHQpIHx8IDIwXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nVG9wKSB8fCAwXG4gICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nQm90dG9tKSB8fCAwXG4gICAgY29uc3QgYm9yZGVyVG9wID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoKSB8fCAwXG4gICAgY29uc3QgYm9yZGVyQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKSB8fCAwXG5cbiAgICBjb25zdCBzaW5nbGVMaW5lSGVpZ2h0ID0gbGluZUhlaWdodCArIHBhZGRpbmdUb3AgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyVG9wICsgYm9yZGVyQm90dG9tXG5cbiAgICBjb25zdCBpc0VtcHR5ID0gdGV4dGFyZWEudmFsdWUudHJpbSgpID09PSAnJ1xuXG4gICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ0xlZnQpIHx8IDBcbiAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ1JpZ2h0KSB8fCAwXG4gICAgY29uc3QgYm9yZGVyTGVmdCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJMZWZ0V2lkdGgpIHx8IDBcbiAgICBjb25zdCBib3JkZXJSaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJSaWdodFdpZHRoKSB8fCAwXG4gICAgY29uc3QgdGV4dGFyZWFXaWR0aCA9IHRleHRhcmVhLm9mZnNldFdpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQgLSBib3JkZXJMZWZ0IC0gYm9yZGVyUmlnaHRcblxuICAgIGlmICghaXNFbXB0eSkge1xuICAgICAgdGV4dGFyZWFNaW5Db250ZW50V2lkdGhTZWVuUmVmLmN1cnJlbnQgPVxuICAgICAgICB0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCA9PT0gbnVsbFxuICAgICAgICAgID8gdGV4dGFyZWFXaWR0aFxuICAgICAgICAgIDogTWF0aC5taW4odGV4dGFyZWFNaW5Db250ZW50V2lkdGhTZWVuUmVmLmN1cnJlbnQsIHRleHRhcmVhV2lkdGgpXG4gICAgfVxuXG4gICAgY29uc3Qgd3JhcENoZWNrV2lkdGggPSB0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCA/PyB0ZXh0YXJlYVdpZHRoXG5cbiAgICBsZXQgY2FudmFzTWVhc3VyZUluZGljYXRlc011bHRpbGluZSA9IGZhbHNlXG5cbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxuICAgIGNvbnN0IGNhbnZhc0NvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKVxuICAgIGNvbnN0IHRleHQgPSB0ZXh0YXJlYS52YWx1ZSB8fCAnJ1xuICAgIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdCgnXFxuJylcblxuICAgIGlmICghY2FudmFzQ29udGV4dCkge1xuICAgICAgY2FudmFzTWVhc3VyZUluZGljYXRlc011bHRpbGluZSA9IHNjcm9sbEhlaWdodCA+IHNpbmdsZUxpbmVIZWlnaHQgKiAyLjA1XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRleHRhcmVhU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGV4dGFyZWEpXG4gICAgICBjYW52YXNDb250ZXh0LmZvbnQgPSBgJHt0ZXh0YXJlYVN0eWxlcy5mb250V2VpZ2h0fSAke3RleHRhcmVhU3R5bGVzLmZvbnRTaXplfSAke3RleHRhcmVhU3R5bGVzLmZvbnRGYW1pbHl9YFxuICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY2FudmFzTWVhc3VyZUluZGljYXRlc011bHRpbGluZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgIGlmIChsaW5lLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlXG4gICAgICAgICAgaWYgKGNhbnZhc0NvbnRleHQubWVhc3VyZVRleHQobGluZSkud2lkdGggPiB3cmFwQ2hlY2tXaWR0aCkge1xuICAgICAgICAgICAgY2FudmFzTWVhc3VyZUluZGljYXRlc011bHRpbGluZSA9IHRydWVcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFzTXVsdGlwbGVWaXN1YWxMaW5lcyA9IGNhbnZhc01lYXN1cmVJbmRpY2F0ZXNNdWx0aWxpbmVcblxuICAgIGNvbnN0IG5leHRNdWx0aWxpbmUgPSAhaXNFbXB0eSAmJiBoYXNNdWx0aXBsZVZpc3VhbExpbmVzXG5cbiAgICAvKiogTMOtbmVhcyBzZWfDum4gYW5jaG8gZXN0cmVjaG8gKGhpc3RvcnkgbWluKSDigJQgdG9vbGJhciBjb21wYWN0byB5IGRldGVjY2nDs24gbXVsdGlsaW5lICovXG4gICAgbGV0IHZpc3VhbExpbmVzQXRXcmFwV2lkdGggPSAxXG4gICAgLyoqIEzDrW5lYXMgYWwgYW5jaG8gYWN0dWFsIGRlbCB0ZXh0YXJlYSDigJQgZW4gc3RhY2tlZCBzdWVsZSBzZXIgbWF5b3IgcXVlIHdyYXBDaGVja1dpZHRoICovXG4gICAgbGV0IHZpc3VhbExpbmVzQXRDdXJyZW50V2lkdGggPSAxXG4gICAgaWYgKCFpc0VtcHR5ICYmIGNhbnZhc0NvbnRleHQpIHtcbiAgICAgIHZpc3VhbExpbmVzQXRXcmFwV2lkdGggPSBjb3VudFZpc3VhbExpbmVzV3JhcHBlZChcbiAgICAgICAgdGV4dCxcbiAgICAgICAgd3JhcENoZWNrV2lkdGgsXG4gICAgICAgIHNlZ21lbnQgPT4gY2FudmFzQ29udGV4dC5tZWFzdXJlVGV4dChzZWdtZW50KS53aWR0aFxuICAgICAgKVxuICAgICAgdmlzdWFsTGluZXNBdEN1cnJlbnRXaWR0aCA9IGNvdW50VmlzdWFsTGluZXNXcmFwcGVkKFxuICAgICAgICB0ZXh0LFxuICAgICAgICB0ZXh0YXJlYVdpZHRoLFxuICAgICAgICBzZWdtZW50ID0+IGNhbnZhc0NvbnRleHQubWVhc3VyZVRleHQoc2VnbWVudCkud2lkdGhcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKCFpc0VtcHR5ICYmICFjYW52YXNDb250ZXh0KSB7XG4gICAgICB2aXN1YWxMaW5lc0F0V3JhcFdpZHRoID0gc2Nyb2xsSGVpZ2h0ID4gc2luZ2xlTGluZUhlaWdodCAqIDEuODUgPyBNYXRoLmNlaWwoc2Nyb2xsSGVpZ2h0IC8gc2luZ2xlTGluZUhlaWdodCkgOiAxXG4gICAgICB2aXN1YWxMaW5lc0F0Q3VycmVudFdpZHRoID0gdmlzdWFsTGluZXNBdFdyYXBXaWR0aFxuICAgIH1cblxuICAgIGNvbnN0IGxpbmVzRm9ySGVpZ2h0ID0gIWlzRW1wdHkgJiYgY2FudmFzQ29udGV4dCA/IHZpc3VhbExpbmVzQXRDdXJyZW50V2lkdGggOiB2aXN1YWxMaW5lc0F0V3JhcFdpZHRoXG5cbiAgICBsZXQgbmV3SGVpZ2h0OiBudW1iZXJcbiAgICAvKiogVW5hIGzDrW5lYSBhbCBhbmNobyBhY3R1YWw6IGFsdHVyYSBmaWphZGEgcG9yIHRpcG9ncmFmw61hICgrIHBhZGRpbmcvYm9yZGUpLCBubyBzY3JvbGxIZWlnaHQg4oCUIGV2aXRhIH4zOXB4IGFsIHBhc2FyIGEgc3RhY2tlZCBjdWFuZG8gZWwgY2FudmFzIHlhIGN1ZW50YSAxIGzDrW5lYSBhIGFuY2hvIGFtcGxpbyBwZXJvIHNjcm9sbEhlaWdodCBhw7puIHZpZW5lIGRlIGzDrW5lYXMgdmllamFzL3dyYXAgYW50ZXJpb3IuICovXG4gICAgY29uc3Qgc25hcHBlZFNpbmdsZUxpbmVPdXRlckhlaWdodCA9IE1hdGgucm91bmQoc2luZ2xlTGluZUhlaWdodClcbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgbmV3SGVpZ2h0ID0gc25hcHBlZFNpbmdsZUxpbmVPdXRlckhlaWdodFxuICAgIH0gZWxzZSBpZiAoIWhhc011bHRpcGxlVmlzdWFsTGluZXMpIHtcbiAgICAgIG5ld0hlaWdodCA9IHNuYXBwZWRTaW5nbGVMaW5lT3V0ZXJIZWlnaHRcbiAgICB9IGVsc2UgaWYgKGxpbmVzRm9ySGVpZ2h0IDw9IDEpIHtcbiAgICAgIG5ld0hlaWdodCA9IE1hdGgubWluKE1hdGgubWF4KHNuYXBwZWRTaW5nbGVMaW5lT3V0ZXJIZWlnaHQsIG1pbkhlaWdodCksIG1heEhlaWdodClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc25hcHBlZEhlaWdodCA9IHBhZGRpbmdUb3AgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyVG9wICsgYm9yZGVyQm90dG9tICsgbGluZXNGb3JIZWlnaHQgKiBsaW5lSGVpZ2h0XG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1pbihNYXRoLm1heChNYXRoLm1pbihzY3JvbGxIZWlnaHQsIHNuYXBwZWRIZWlnaHQpLCBtaW5IZWlnaHQpLCBtYXhIZWlnaHQpXG4gICAgfVxuXG4gICAgc2V0SXNUZXh0TXVsdGlsaW5lKHByZXYgPT4gKHByZXYgPT09IG5leHRNdWx0aWxpbmUgPyBwcmV2IDogbmV4dE11bHRpbGluZSkpXG5cbiAgICB0ZXh0YXJlYS5zdHlsZS5taW5IZWlnaHQgPSBwcmV2aW91c01pbkhlaWdodCB8fCBgJHttaW5IZWlnaHR9cHhgXG4gICAgdGV4dGFyZWEuc3R5bGUubWF4SGVpZ2h0ID0gcHJldmlvdXNNYXhIZWlnaHQgfHwgJzE3MHB4J1xuXG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YFxuICB9LCBbaW5wdXRSZWYsIHNldElzVGV4dE11bHRpbGluZV0pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBoYW5kbGVSZXNpemUoKVxuICB9LCBbaGFuZGxlUmVzaXplXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50Py52YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICB0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCA9IG51bGxcbiAgICB9XG4gIH0sIFtyZXNpemVFcG9jaF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCA9IG51bGxcbiAgfSwgW2NoYXRJZCwgbmV3Q2hhdEtleV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKVxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaGFuZGxlUmVzaXplKClcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbZGlzYWJsZWQsIGhhbmRsZVJlc2l6ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2xlYXJTZXEgPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCA9IG51bGxcbiAgICBwcmVzZW5jZVByZXZSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgfSlcbiAgfSwgW2NsZWFyU2VxLCBoYW5kbGVSZXNpemVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgaGFuZGxlUmVzaXplKClcbiAgICB9KVxuICAgIHJldHVybiAoKSA9PiBjYW5jZWxBbmltYXRpb25GcmFtZShpZClcbiAgfSwgW3Jlc2l6ZUVwb2NoLCBoYW5kbGVSZXNpemVdKVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGhhc1RyaW0gPSBlLnRhcmdldC52YWx1ZS50cmltKCkubGVuZ3RoID4gMFxuICAgIGlmIChoYXNUcmltICE9PSBwcmVzZW5jZVByZXZSZWYuY3VycmVudCkge1xuICAgICAgcHJlc2VuY2VQcmV2UmVmLmN1cnJlbnQgPSBoYXNUcmltXG4gICAgICBvblR5cGluZ1ByZXNlbmNlQ2hhbmdlKGhhc1RyaW0pXG4gICAgfVxuICAgIHNldFJlc2l6ZUVwb2NoKHggPT4geCArIDEpXG4gICAgb25DaGFuZ2VQcm9wPy4oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQmx1ciA9ICgpID0+IHtcbiAgICBjb25zdCB2ID0gaW5wdXRSZWYuY3VycmVudD8udmFsdWUgPz8gJydcbiAgICBjb25zdCBoYXNUcmltID0gdi50cmltKCkubGVuZ3RoID4gMFxuICAgIGlmIChoYXNUcmltICE9PSBwcmVzZW5jZVByZXZSZWYuY3VycmVudCkge1xuICAgICAgcHJlc2VuY2VQcmV2UmVmLmN1cnJlbnQgPSBoYXNUcmltXG4gICAgICBvblR5cGluZ1ByZXNlbmNlQ2hhbmdlKGhhc1RyaW0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGlmICghc2VuZERpc2FibGVkICYmICFkaXNhYmxlZCkge1xuICAgICAgICBvbkVudGVyU2VuZCgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkTUFJQUlucHV0XG4gICAgICByZWY9e2lucHV0UmVmIGFzIFJlZk9iamVjdDxIVE1MVGV4dEFyZWFFbGVtZW50Pn1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBhbGlnbkJ1dHRvbnM9e2FsaWduQnV0dG9uc31cbiAgICAgICR0b29sYmFyTGF5b3V0VmFyaWFudD1cInN0YWNrZWRSb3dzXCJcbiAgICAgIG9uQmx1cj17aGFuZGxlQmx1cn1cbiAgICAvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQXFDQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBRzdHLFNBQVNDLGVBQWUsUUFBUSxVQUFVOztBQUUxQztBQUNBO0FBQ0E7QUFGQSxTQUFBQyxHQUFBLElBQUFDLElBQUE7QUFHQSxTQUFTQyx1QkFBdUJBLENBQUNDLEdBQVcsRUFBRUMsY0FBc0IsRUFBRUMsZ0JBQXVDLEVBQVU7RUFDckgsSUFBSUQsY0FBYyxJQUFJLENBQUMsRUFBRTtJQUN2QixPQUFPLENBQUM7RUFDVjtFQUNBLElBQU1FLFVBQVUsR0FBR0gsR0FBRyxDQUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDO0VBQ2xDLElBQUlDLEtBQUssR0FBRyxDQUFDO0VBQUEsSUFBQUMsU0FBQSxHQUFBQywwQkFBQSxDQUNXSixV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
193
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiZGV0ZWN0TXVsdGlsaW5lRnJvbUNhbnZhcyIsInJlc29sdmVTaW5nbGVMaW5lT3V0ZXJIZWlnaHQiLCJyZXNvbHZlVGV4dGFyZWFDb250ZW50SGVpZ2h0IiwicmVzb2x2ZVZpc3VhbExpbmVDb3VudHMiLCJTdHlsZWRNQUlBSW5wdXQiLCJqc3giLCJfanN4IiwiTUFJQUlucHV0RWRpdG9yIiwiX3JlZiIsImlucHV0UmVmIiwiZGlzYWJsZWQiLCJwbGFjZWhvbGRlciIsImFsaWduQnV0dG9ucyIsInNldElzVGV4dE11bHRpbGluZSIsImNoYXRJZCIsIm5ld0NoYXRLZXkiLCJjbGVhclNlcSIsInNlbmREaXNhYmxlZCIsIm9uVHlwaW5nUHJlc2VuY2VDaGFuZ2UiLCJvbkVudGVyU2VuZCIsIm9uQ2hhbmdlUHJvcCIsInRleHRhcmVhTWluQ29udGVudFdpZHRoU2VlblJlZiIsInByZXNlbmNlUHJldlJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInJlc2l6ZUVwb2NoIiwic2V0UmVzaXplRXBvY2giLCJoYW5kbGVSZXNpemUiLCJfdGV4dGFyZWFNaW5Db250ZW50V2kiLCJ0ZXh0YXJlYSIsImN1cnJlbnQiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJwcmV2aW91c01pbkhlaWdodCIsInN0eWxlIiwicHJldmlvdXNNYXhIZWlnaHQiLCJoZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJjb21wdXRlZFN0eWxlIiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImxpbmVIZWlnaHQiLCJwYXJzZUZsb2F0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJib3JkZXJUb3AiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbSIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm94TWV0cmljcyIsInNpbmdsZUxpbmVIZWlnaHQiLCJpc0VtcHR5IiwidmFsdWUiLCJ0cmltIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJib3JkZXJMZWZ0IiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJSaWdodFdpZHRoIiwidGV4dGFyZWFXaWR0aCIsIm9mZnNldFdpZHRoIiwiTWF0aCIsIm1pbiIsIndyYXBDaGVja1dpZHRoIiwiY2FudmFzIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2FudmFzQ29udGV4dCIsImdldENvbnRleHQiLCJ0ZXh0IiwidGV4dGFyZWFTdHlsZXMiLCJmb250IiwiY29uY2F0IiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsIm1lYXN1cmVTZWdtZW50V2lkdGgiLCJzZWdtZW50IiwibWVhc3VyZVRleHQiLCJ3aWR0aCIsImNhbnZhc01lYXN1cmVJbmRpY2F0ZXNNdWx0aWxpbmUiLCJoYXNNdWx0aXBsZVZpc3VhbExpbmVzIiwibmV4dE11bHRpbGluZSIsIl9yZXNvbHZlVmlzdWFsTGluZUNvdSIsImxpbmVzRm9ySGVpZ2h0IiwibmV3SGVpZ2h0Iiwic2luZ2xlTGluZU91dGVySGVpZ2h0IiwicHJldiIsIl9pbnB1dFJlZiRjdXJyZW50IiwiZm9jdXMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJpZCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaGFuZGxlQ2hhbmdlIiwiZSIsImhhc1RyaW0iLCJ0YXJnZXQiLCJsZW5ndGgiLCJ4IiwiaGFuZGxlQmx1ciIsIl9pbnB1dFJlZiRjdXJyZW50JHZhbCIsIl9pbnB1dFJlZiRjdXJyZW50MiIsInYiLCJoYW5kbGVLZXlEb3duIiwia2V5Iiwic2hpZnRLZXkiLCJwcmV2ZW50RGVmYXVsdCIsInJlZiIsIm9uQ2hhbmdlIiwib25LZXlEb3duIiwiJHRvb2xiYXJMYXlvdXRWYXJpYW50Iiwib25CbHVyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dEVkaXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12b2lkICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItZGVzdHJ1Y3R1cmluZyAqL1xuaW1wb3J0IHsgQ2hhbmdlRXZlbnQsIEtleWJvYXJkRXZlbnQsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCwgUmVmT2JqZWN0LCBTZXRTdGF0ZUFjdGlvbiB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQge1xuICBkZXRlY3RNdWx0aWxpbmVGcm9tQ2FudmFzLFxuICByZXNvbHZlU2luZ2xlTGluZU91dGVySGVpZ2h0LFxuICByZXNvbHZlVGV4dGFyZWFDb250ZW50SGVpZ2h0LFxuICByZXNvbHZlVmlzdWFsTGluZUNvdW50cyxcbn0gZnJvbSAnLi9NQUlBSW5wdXRFZGl0b3IuaGVscGVycydcbmltcG9ydCB7IFN0eWxlZE1BSUFJbnB1dCB9IGZyb20gJy4vc3R5bGVzJ1xuXG5leHBvcnQgdHlwZSBNQUlBSW5wdXRFZGl0b3JQcm9wcyA9IHtcbiAgaW5wdXRSZWY6IFJlZk9iamVjdDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbD5cbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIGFsaWduQnV0dG9ucz86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbiAgc2V0SXNUZXh0TXVsdGlsaW5lOiBEaXNwYXRjaDxTZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cbiAgY2hhdElkPzogc3RyaW5nXG4gIG5ld0NoYXRLZXk/OiBudW1iZXJcbiAgLyoqIEluY3JlbWVudGFyIGRlc2RlIGVsIHBhZHJlIHRyYXMgZW52aWFyIC8gY2FtYmlhciBzZXNpw7NuIHBhcmEgc2luY3Jvbml6YXIgbWVkaWNpw7NuIHNpbiBlc3RhZG8gZGVsIHRleHRvIGVuIGVsIHBhZHJlLiAqL1xuICBjbGVhclNlcTogbnVtYmVyXG4gIHNlbmREaXNhYmxlZDogYm9vbGVhblxuICBvblR5cGluZ1ByZXNlbmNlQ2hhbmdlOiAoaGFzVHJpbW1lZFRleHQ6IGJvb2xlYW4pID0+IHZvaWRcbiAgb25FbnRlclNlbmQ6ICgpID0+IHZvaWRcbiAgb25DaGFuZ2VQcm9wPzogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgTUFJQUlucHV0RWRpdG9yID0gKHtcbiAgaW5wdXRSZWYsXG4gIGRpc2FibGVkLFxuICBwbGFjZWhvbGRlcixcbiAgYWxpZ25CdXR0b25zLFxuICBzZXRJc1RleHRNdWx0aWxpbmUsXG4gIGNoYXRJZCxcbiAgbmV3Q2hhdEtleSxcbiAgY2xlYXJTZXEsXG4gIHNlbmREaXNhYmxlZCxcbiAgb25UeXBpbmdQcmVzZW5jZUNoYW5nZSxcbiAgb25FbnRlclNlbmQsXG4gIG9uQ2hhbmdlUHJvcCxcbn06IE1BSUFJbnB1dEVkaXRvclByb3BzKSA9PiB7XG4gIGNvbnN0IHRleHRhcmVhTWluQ29udGVudFdpZHRoU2VlblJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBwcmVzZW5jZVByZXZSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8qKiBTb2xvIHBhcmEgcmUtYWdlbmRhciBtZWRpY2nDs24gZGUgYWx0byBzaW4gZ3VhcmRhciBlbCBzdHJpbmcgZW4gZWwgcGFkcmUgKGFpc2xhIHJlLXJlbmRlcnMgZGVsIHRvb2xiYXIpLiAqL1xuICBjb25zdCBbcmVzaXplRXBvY2gsIHNldFJlc2l6ZUVwb2NoXSA9IHVzZVN0YXRlKDApXG5cbiAgY29uc3QgaGFuZGxlUmVzaXplID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRleHRhcmVhID0gaW5wdXRSZWYuY3VycmVudFxuICAgIGlmICghdGV4dGFyZWEpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKiBDb2luY2lkZSBjb24gU3R5bGVkTUFJQUlucHV0OiBsaW5lLWhlaWdodCAyMHB4IHNvYnJlIGZ1ZW50ZSAxNHB4ICh+dW5hIGzDrW5lYSBkZSB0ZXh0byB2aXNpYmxlKS4gKi9cbiAgICBjb25zdCBtaW5IZWlnaHQgPSAyMFxuICAgIGNvbnN0IG1heEhlaWdodCA9IDE3MFxuXG4gICAgY29uc3QgcHJldmlvdXNNaW5IZWlnaHQgPSB0ZXh0YXJlYS5zdHlsZS5taW5IZWlnaHRcbiAgICBjb25zdCBwcmV2aW91c01heEhlaWdodCA9IHRleHRhcmVhLnN0eWxlLm1heEhlaWdodFxuXG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nXG4gICAgdGV4dGFyZWEuc3R5bGUubWluSGVpZ2h0ID0gJzBweCdcbiAgICB0ZXh0YXJlYS5zdHlsZS5tYXhIZWlnaHQgPSAnbm9uZSdcblxuICAgIHZvaWQgdGV4dGFyZWEub2Zmc2V0SGVpZ2h0XG5cbiAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0ZXh0YXJlYS5zY3JvbGxIZWlnaHRcblxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0YXJlYSlcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmxpbmVIZWlnaHQpIHx8IDIwXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nVG9wKSB8fCAwXG4gICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nQm90dG9tKSB8fCAwXG4gICAgY29uc3QgYm9yZGVyVG9wID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoKSB8fCAwXG4gICAgY29uc3QgYm9yZGVyQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKSB8fCAwXG5cbiAgICBjb25zdCBib3hNZXRyaWNzID0geyBsaW5lSGVpZ2h0LCBwYWRkaW5nVG9wLCBwYWRkaW5nQm90dG9tLCBib3JkZXJUb3AsIGJvcmRlckJvdHRvbSB9XG4gICAgY29uc3Qgc2luZ2xlTGluZUhlaWdodCA9IHJlc29sdmVTaW5nbGVMaW5lT3V0ZXJIZWlnaHQoYm94TWV0cmljcylcblxuICAgIGNvbnN0IGlzRW1wdHkgPSB0ZXh0YXJlYS52YWx1ZS50cmltKCkgPT09ICcnXG5cbiAgICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nTGVmdCkgfHwgMFxuICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nUmlnaHQpIHx8IDBcbiAgICBjb25zdCBib3JkZXJMZWZ0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCkgfHwgMFxuICAgIGNvbnN0IGJvcmRlclJpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlclJpZ2h0V2lkdGgpIHx8IDBcbiAgICBjb25zdCB0ZXh0YXJlYVdpZHRoID0gdGV4dGFyZWEub2Zmc2V0V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodCAtIGJvcmRlckxlZnQgLSBib3JkZXJSaWdodFxuXG4gICAgaWYgKCFpc0VtcHR5KSB7XG4gICAgICB0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCA9XG4gICAgICAgIHRleHRhcmVhTWluQ29udGVudFdpZHRoU2VlblJlZi5jdXJyZW50ID09PSBudWxsXG4gICAgICAgICAgPyB0ZXh0YXJlYVdpZHRoXG4gICAgICAgICAgOiBNYXRoLm1pbih0ZXh0YXJlYU1pbkNvbnRlbnRXaWR0aFNlZW5SZWYuY3VycmVudCwgdGV4dGFyZWFXaWR0aClcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwQ2hlY2tXaWR0aCA9IHRleHRhcmVhTWluQ29udGVudFdpZHRoU2VlblJlZi5jdXJyZW50ID8/IHRleHRhcmVhV2lkdGhcblxuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gICAgY29uc3QgY2FudmFzQ29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpXG4gICAgY29uc3QgdGV4dCA9IHRleHRhcmVhLnZhbHVlIHx8ICcnXG5cbiAgICBpZiAoY2FudmFzQ29udGV4dCkge1xuICAgICAgY29uc3QgdGV4dGFyZWFTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0YXJlYSlcbiAgICAgIGNhbnZhc0NvbnRleHQuZm9udCA9IGAke3RleHRhcmVhU3R5bGVzLmZvbnRXZWlnaHR9ICR7dGV4dGFyZWFTdHlsZXMuZm9udFNpemV9ICR7dGV4dGFyZWFTdHlsZXMuZm9udEZhbWlseX1gXG4gICAgfVxuXG4gICAgY29uc3QgbWVhc3VyZVNlZ21lbnRXaWR0aCA9IChzZWdtZW50OiBzdHJpbmcpID0+IChjYW52YXNDb250ZXh0ID8gY2FudmFzQ29udGV4dC5tZWFzdXJlVGV4dChzZWdtZW50KS53aWR0aCA6IDApXG5cbiAgICBjb25zdCBjYW52YXNNZWFzdXJlSW5kaWNhdGVzTXVsdGlsaW5lID0gY2FudmFzQ29udGV4dFxuICAgICAgPyBkZXRlY3RNdWx0aWxpbmVGcm9tQ2FudmFzKHRleHQsIHdyYXBDaGVja1dpZHRoLCBtZWFzdXJlU2VnbWVudFdpZHRoLCBzY3JvbGxIZWlnaHQsIHNpbmdsZUxpbmVIZWlnaHQpXG4gICAgICA6IHNjcm9sbEhlaWdodCA+IHNpbmdsZUxpbmVIZWlnaHQgKiAyLjA1XG5cbiAgICBjb25zdCBoYXNNdWx0aXBsZVZpc3VhbExpbmVzID0gY2FudmFzTWVhc3VyZUluZGljYXRlc011bHRpbGluZVxuXG4gICAgY29uc3QgbmV4dE11bHRpbGluZSA9ICFpc0VtcHR5ICYmIGhhc011bHRpcGxlVmlzdWFsTGluZXNcblxuICAgIGNvbnN0IHsgbGluZXNGb3JIZWlnaHQgfSA9IHJlc29sdmVWaXN1YWxMaW5lQ291bnRzKHtcbiAgICAgIGlzRW1wdHksXG4gICAgICBjYW52YXNDb250ZXh0LFxuICAgICAgdGV4dCxcbiAgICAgIHdyYXBDaGVja1dpZHRoLFxuICAgICAgdGV4dGFyZWFXaWR0aCxcbiAgICAgIG1lYXN1cmVTZWdtZW50V2lkdGgsXG4gICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICBzaW5nbGVMaW5lSGVpZ2h0LFxuICAgIH0pXG5cbiAgICBjb25zdCBuZXdIZWlnaHQgPSByZXNvbHZlVGV4dGFyZWFDb250ZW50SGVpZ2h0KHtcbiAgICAgIGlzRW1wdHksXG4gICAgICBoYXNNdWx0aXBsZVZpc3VhbExpbmVzLFxuICAgICAgbGluZXNGb3JIZWlnaHQsXG4gICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICBtaW5IZWlnaHQsXG4gICAgICBtYXhIZWlnaHQsXG4gICAgICBzaW5nbGVMaW5lT3V0ZXJIZWlnaHQ6IHNpbmdsZUxpbmVIZWlnaHQsXG4gICAgICBsaW5lSGVpZ2h0LFxuICAgICAgcGFkZGluZ1RvcCxcbiAgICAgIHBhZGRpbmdCb3R0b20sXG4gICAgICBib3JkZXJUb3AsXG4gICAgICBib3JkZXJCb3R0b20sXG4gICAgfSlcblxuICAgIHNldElzVGV4dE11bHRpbGluZShwcmV2ID0+IChwcmV2ID09PSBuZXh0TXVsdGlsaW5lID8gcHJldiA6IG5leHRNdWx0aWxpbmUpKVxuXG4gICAgdGV4dGFyZWEuc3R5bGUubWluSGVpZ2h0ID0gcHJldmlvdXNNaW5IZWlnaHQgfHwgYCR7bWluSGVpZ2h0fXB4YFxuICAgIHRleHRhcmVhLnN0eWxlLm1heEhlaWdodCA9IHByZXZpb3VzTWF4SGVpZ2h0IHx8ICcxNzBweCdcblxuICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGBcbiAgfSwgW2lucHV0UmVmLCBzZXRJc1RleHRNdWx0aWxpbmVdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaGFuZGxlUmVzaXplKClcbiAgfSwgW2hhbmRsZVJlc2l6ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudD8udmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgdGV4dGFyZWFNaW5Db250ZW50V2lkdGhTZWVuUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgfVxuICB9LCBbcmVzaXplRXBvY2hdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdGV4dGFyZWFNaW5Db250ZW50V2lkdGhTZWVuUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtjaGF0SWQsIG5ld0NoYXRLZXldKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQgJiYgIWRpc2FibGVkKSB7XG4gICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKClcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW2Rpc2FibGVkLCBoYW5kbGVSZXNpemVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNsZWFyU2VxID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGV4dGFyZWFNaW5Db250ZW50V2lkdGhTZWVuUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgcHJlc2VuY2VQcmV2UmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXNpemUoKVxuICAgIH0pXG4gIH0sIFtjbGVhclNlcSwgaGFuZGxlUmVzaXplXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgfSlcbiAgICByZXR1cm4gKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpXG4gIH0sIFtyZXNpemVFcG9jaCwgaGFuZGxlUmVzaXplXSlcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBoYXNUcmltID0gZS50YXJnZXQudmFsdWUudHJpbSgpLmxlbmd0aCA+IDBcbiAgICBpZiAoaGFzVHJpbSAhPT0gcHJlc2VuY2VQcmV2UmVmLmN1cnJlbnQpIHtcbiAgICAgIHByZXNlbmNlUHJldlJlZi5jdXJyZW50ID0gaGFzVHJpbVxuICAgICAgb25UeXBpbmdQcmVzZW5jZUNoYW5nZShoYXNUcmltKVxuICAgIH1cbiAgICBzZXRSZXNpemVFcG9jaCh4ID0+IHggKyAxKVxuICAgIG9uQ2hhbmdlUHJvcD8uKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUJsdXIgPSAoKSA9PiB7XG4gICAgY29uc3QgdiA9IGlucHV0UmVmLmN1cnJlbnQ/LnZhbHVlID8/ICcnXG4gICAgY29uc3QgaGFzVHJpbSA9IHYudHJpbSgpLmxlbmd0aCA+IDBcbiAgICBpZiAoaGFzVHJpbSAhPT0gcHJlc2VuY2VQcmV2UmVmLmN1cnJlbnQpIHtcbiAgICAgIHByZXNlbmNlUHJldlJlZi5jdXJyZW50ID0gaGFzVHJpbVxuICAgICAgb25UeXBpbmdQcmVzZW5jZUNoYW5nZShoYXNUcmltKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBpZiAoIXNlbmREaXNhYmxlZCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgb25FbnRlclNlbmQoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFN0eWxlZE1BSUFJbnB1dFxuICAgICAgcmVmPXtpbnB1dFJlZiBhcyBSZWZPYmplY3Q8SFRNTFRleHRBcmVhRWxlbWVudD59XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgYWxpZ25CdXR0b25zPXthbGlnbkJ1dHRvbnN9XG4gICAgICAkdG9vbGJhckxheW91dFZhcmlhbnQ9XCJzdGFja2VkUm93c1wiXG4gICAgICBvbkJsdXI9e2hhbmRsZUJsdXJ9XG4gICAgLz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFxQ0EsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUc3RyxTQUNFQyx5QkFBeUIsRUFDekJDLDRCQUE0QixFQUM1QkMsNEJBQTRCLEVBQzVCQyx1QkFBdUIsUUFDbEIsMkJBQTJCO0FBQ2xDLFNBQVNDLGVBQWUsUUFBUSxVQUFVO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBO0FBa0IxQyxPQUFPLElBQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBQUMsSUFBQSxFQWFBO0VBQUEsSUFaMUJDLFFBQVEsR0FBQUQsSUFBQSxDQUFSQyxRQUFRO0lBQ1JDLFFBQVEsR0FBQUYsSUFBQSxDQUFSRSxRQUFRO0lBQ1JDLFdBQVcsR0FBQUgsSUFBQSxDQUFYRyxXQUFXO0lBQ1hDLFlBQVksR0FBQUosSUFBQSxDQUFaSSxZQUFZO0lBQ1pDLGtCQUFrQixHQUFBTCxJQUFBLENBQWxCSyxrQkFBa0I7SUFDbEJDLE1BQU0sR0FBQU4sSUFBQSxDQUFOTSxNQUFNO0lBQ05DLFVBQVUsR0FBQVAsSUFBQSxDQUFWTyxVQUFVO0lBQ1ZDLFFBQVEsR0FBQVIsSUFBQSxDQUFSUSxRQUFRO0lBQ1JDLFlBQVksR0FBQVQsSUFBQSxDQUFaUyxZQUFZO0lBQ1pDLHNCQUFzQixHQUFB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
@@ -0,0 +1,17 @@
1
+ export var throttle = function throttle(fn, delay) {
2
+ var last = 0;
3
+ return function () {
4
+ var now = Date.now();
5
+ if (now - last >= delay) {
6
+ last = now;
7
+ fn.apply(void 0, arguments);
8
+ }
9
+ };
10
+ };
11
+ export var computeOnboardingPortalPosition = function computeOnboardingPortalPosition(rect, viewportHeight) {
12
+ return {
13
+ left: rect.left,
14
+ bottom: viewportHeight - rect.bottom
15
+ };
16
+ };
17
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0aHJvdHRsZSIsImZuIiwiZGVsYXkiLCJsYXN0Iiwibm93IiwiRGF0ZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiY29tcHV0ZU9uYm9hcmRpbmdQb3J0YWxQb3NpdGlvbiIsInJlY3QiLCJ2aWV3cG9ydEhlaWdodCIsImxlZnQiLCJib3R0b20iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9PbmJvYXJkaW5nTW9kYWxCdXR0b24vT25ib2FyZGluZ01vZGFsQnV0dG9uLmhlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRocm90dGxlID0gPFQgZXh0ZW5kcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkPihmbjogVCwgZGVsYXk6IG51bWJlcik6IFQgPT4ge1xuICBsZXQgbGFzdCA9IDBcbiAgcmV0dXJuICgoLi4uYXJnczogUGFyYW1ldGVyczxUPikgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICBpZiAobm93IC0gbGFzdCA+PSBkZWxheSkge1xuICAgICAgbGFzdCA9IG5vd1xuICAgICAgZm4oLi4uYXJncylcbiAgICB9XG4gIH0pIGFzIFRcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVPbmJvYXJkaW5nUG9ydGFsUG9zaXRpb24gPSAoXG4gIHJlY3Q6IFBpY2s8RE9NUmVjdCwgJ2xlZnQnIHwgJ2JvdHRvbSc+LFxuICB2aWV3cG9ydEhlaWdodDogbnVtYmVyXG4pOiB7IGxlZnQ6IG51bWJlcjsgYm90dG9tOiBudW1iZXIgfSA9PiAoe1xuICBsZWZ0OiByZWN0LmxlZnQsXG4gIGJvdHRvbTogdmlld3BvcnRIZWlnaHQgLSByZWN0LmJvdHRvbSxcbn0pXG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBTUEsUUFBUSxHQUFHLFNBQVhBLFFBQVFBLENBQTRDQyxFQUFLLEVBQUVDLEtBQWEsRUFBUTtFQUMzRixJQUFJQyxJQUFJLEdBQUcsQ0FBQztFQUNaLE9BQVEsWUFBNEI7SUFDbEMsSUFBTUMsR0FBRyxHQUFHQyxJQUFJLENBQUNELEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLElBQUlBLEdBQUcsR0FBR0QsSUFBSSxJQUFJRCxLQUFLLEVBQUU7TUFDdkJDLElBQUksR0FBR0MsR0FBRztNQUNWSCxFQUFFLENBQUFLLEtBQUEsU0FBQUMsU0FBUSxDQUFDO0lBQ2I7RUFDRixDQUFDO0FBQ0gsQ0FBQztBQUVELE9BQU8sSUFBTUMsK0JBQStCLEdBQUcsU0FBbENBLCtCQUErQkEsQ0FDMUNDLElBQXNDLEVBQ3RDQyxjQUFzQjtFQUFBLE9BQ2dCO0lBQ3RDQyxJQUFJLEVBQUVGLElBQUksQ0FBQ0UsSUFBSTtJQUNmQyxNQUFNLEVBQUVGLGNBQWMsR0FBR0QsSUFBSSxDQUFDRztFQUNoQyxDQUFDO0FBQUEsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -12,18 +12,9 @@ import { SCSWrapperOnboardingModalButton, SCSWrapperOnboardingModalPortal, Style
12
12
  import { useT } from '../../../hooks/useT';
13
13
  import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
14
14
  import { MAIA_TASK_PANEL_OVERLAY_ATTR } from '../../../constants/maiaTaskPanelOutsideClick';
15
+ import { computeOnboardingPortalPosition, throttle } from './OnboardingModalButton.helpers';
15
16
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
17
  var PORTAL_POSITION_THROTTLE_MS = 150;
17
- function throttle(fn, delay) {
18
- var last = 0;
19
- return function () {
20
- var now = Date.now();
21
- if (now - last >= delay) {
22
- last = now;
23
- fn.apply(void 0, arguments);
24
- }
25
- };
26
- }
27
18
  var mockData = {
28
19
  0: {
29
20
  elementId: 'modal-portal-video-onboarding',
@@ -121,10 +112,7 @@ export var OnboardingModalButton = function OnboardingModalButton() {
121
112
  var updatePosition = useCallback(function () {
122
113
  if (buttonRef.current) {
123
114
  var rect = buttonRef.current.getBoundingClientRect();
124
- setPortalPosition({
125
- left: rect.left,
126
- bottom: window.innerHeight - rect.bottom
127
- });
115
+ setPortalPosition(computeOnboardingPortalPosition(rect, window.innerHeight));
128
116
  }
129
117
  }, []);
130
118
  useEffect(function () {
@@ -177,4 +165,4 @@ export var OnboardingModalButton = function OnboardingModalButton() {
177
165
  }))]
178
166
  });
179
167
  };
180
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiUmVhY3RET00iLCJDVUJ1dHRvbiIsIlZpZGVvTGlnaHRib3hQb3J0YWwiLCJUb29sdGlwIiwiT25ib2FyZGluZ01vZGFsIiwiU0NTV3JhcHBlck9uYm9hcmRpbmdNb2RhbEJ1dHRvbiIsIlNDU1dyYXBwZXJPbmJvYXJkaW5nTW9kYWxQb3J0YWwiLCJTdHlsZWRIZWxwSWNvbiIsInVzZVQiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiTUFJQV9UQVNLX1BBTkVMX09WRVJMQVlfQVRUUiIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJQT1JUQUxfUE9TSVRJT05fVEhST1RUTEVfTVMiLCJ0aHJvdHRsZSIsImZuIiwiZGVsYXkiLCJsYXN0Iiwibm93IiwiRGF0ZSIsImFwcGx5IiwiYXJndW1lbnRzIiwibW9ja0RhdGEiLCJlbGVtZW50SWQiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwidGh1bWJuYWlsIiwiYWx0IiwidmlkZW9VcmwiLCJjb2xsYXBzZWREZXNjcmlwdGlvbiIsIk9uYm9hcmRpbmdNb2RhbEJ1dHRvbiIsIl91c2VUIiwidCIsIm9uYm9hcmRpbmdQb3J0YWxaSW5kZXgiLCJ0b29sdGlwWkluZGV4IiwiYnV0dG9uUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2hvd01vZGFsT25ib2FyZGluZyIsInNldFNob3dNb2RhbE9uYm9hcmRpbmciLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInBvcnRhbFBvc2l0aW9uIiwic2V0UG9ydGFsUG9zaXRpb24iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dWaWRlbyIsInNldFNob3dWaWRlbyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2VsZWN0ZWRWaWRlb0RhdGEiLCJzZXRTZWxlY3RlZFZpZGVvRGF0YSIsImhhbmRsZU9uYm9hcmRpbmdBY3Rpb24iLCJhY3Rpb25Qb3NpdGlvbiIsInNldFRpbWVvdXQiLCJoYW5kbGVWaWRlb0FjdGlvbiIsImUiLCJwcmV2Iiwic3RvcFByb3BhZ2F0aW9uIiwiZXZhbENsaWNrIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZUNsaWNrT3V0c2lkZU9uYm9hcmRpbmciLCJldmVudCIsInRhcmdldCIsImNsb3Nlc3QiLCJ1cGRhdGVQb3NpdGlvbiIsImN1cnJlbnQiLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwibGVmdCIsImJvdHRvbSIsIndpbmRvdyIsImlubmVySGVpZ2h0IiwidW5kZWZpbmVkIiwidGhyb3R0bGVkVXBkYXRlUG9zaXRpb24iLCJyZWYiLCJjaGlsZHJlbiIsInpJbmRleCIsInZhcmlhbnQiLCJzaXplIiwiaWNvbk9ubHkiLCJvbkNsaWNrIiwiY29sb3IiLCJjcmVhdGVQb3J0YWwiLCJfb2JqZWN0U3ByZWFkIiwiX2RlZmluZVByb3BlcnR5IiwiJGxlZnQiLCIkYm90dG9tIiwiJHpJbmRleCIsImhhbmRsZUNsaWNrQWN0aW9uIiwiYm9keSIsIm9uQ2xvc2VWaWRlbyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL09uYm9hcmRpbmdNb2RhbEJ1dHRvbi9PbmJvYXJkaW5nTW9kYWxCdXR0b24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBDVUJ1dHRvbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2J1dHRvbi9saWIvY29tcG9uZW50cy9DVUJ1dHRvbidcbmltcG9ydCB7IFZpZGVvTGlnaHRib3hQb3J0YWwgfSBmcm9tICdAcHJvamVjdGNvci9jb3ItY29tbW9ucy9saWIvY29tcG9uZW50cy92aWRlby1vbmJvYXJkaW5nL3ZpZGVvLWxpZ2h0Ym94J1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgT25ib2FyZGluZ01vZGFsIH0gZnJvbSAnLi9PbmJvYXJkaW5nTW9kYWwnXG5pbXBvcnQge1xuICBTQ1NXcmFwcGVyT25ib2FyZGluZ01vZGFsQnV0dG9uLFxuICBTQ1NXcmFwcGVyT25ib2FyZGluZ01vZGFsUG9ydGFsLFxuICBTdHlsZWRIZWxwSWNvbixcbn0gZnJvbSAnLi9PbmJvYXJkaW5nTW9kYWxCdXR0b24uc3R5bGVzJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbmltcG9ydCB7IE1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvbWFpYVRhc2tQYW5lbE91dHNpZGVDbGljaydcblxuY29uc3QgUE9SVEFMX1BPU0lUSU9OX1RIUk9UVExFX01TID0gMTUwXG5cbmZ1bmN0aW9uIHRocm90dGxlPFQgZXh0ZW5kcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkPihmbjogVCwgZGVsYXk6IG51bWJlcik6IFQge1xuICBsZXQgbGFzdCA9IDBcbiAgcmV0dXJuICgoLi4uYXJnczogUGFyYW1ldGVyczxUPikgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICBpZiAobm93IC0gbGFzdCA+PSBkZWxheSkge1xuICAgICAgbGFzdCA9IG5vd1xuICAgICAgZm4oLi4uYXJncylcbiAgICB9XG4gIH0pIGFzIFRcbn1cblxuY29uc3QgbW9ja0RhdGEgPSB7XG4gIDA6IHtcbiAgICBlbGVtZW50SWQ6ICdtb2RhbC1wb3J0YWwtdmlkZW8tb25ib2FyZGluZycsXG4gICAgdGl0bGU6ICdNYWlhJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdEZXNjdWJyZSBjw7NtbyBmdW5jaW9uYSBNYWlhLCBudWVzdHJvIGFzaXN0ZW50ZSBkZSBpbnRlbGlnZW5jaWEgYXJ0aWZpY2lhbCBxdWUgdGUgYXl1ZGEgYSBnZXN0aW9uYXIgcHJveWVjdG9zIGRlIG1hbmVyYSBtw6FzIGVmaWNpZW50ZS4nLFxuICAgIHRodW1ibmFpbDogJ2h0dHBzOi8vaS55dGltZy5jb20vdmkvOS1NcnRZdUlvaUUvbWF4cmVzZGVmYXVsdC5qcGcnLFxuICAgIGFsdDogJ3RodW1ibmFpbCBNYWlhJyxcbiAgICB2aWRlb1VybDogJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL1FFTHVfcFBTSVRnP3NpPTk2c0JQeTA5OThWc0dOQ2YnLFxuICAgIGNvbGxhcHNlZERlc2NyaXB0aW9uOiAnVmVyIHZpZGVvIGRlIE1haWEnLFxuICB9LFxuICAxOiB7XG4gICAgZWxlbWVudElkOiAnbW9kYWwtcG9ydGFsLXZpZGVvLW9uYm9hcmRpbmcnLFxuICAgIHRpdGxlOiAnQWdlbnRlcyBDdXN0b20nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0FwcmVuZGUgYSBjcmVhciB5IGNvbmZpZ3VyYXIgYWdlbnRlcyBwZXJzb25hbGl6YWRvcyBwYXJhIGF1dG9tYXRpemFyIHRhcmVhcyBlc3BlY8OtZmljYXMgZW4gdHUgZmx1am8gZGUgdHJhYmFqby4nLFxuICAgIHRodW1ibmFpbDogJ2h0dHBzOi8vaS55dGltZy5jb20vdmkvOS1NcnRZdUlvaUUvbWF4cmVzZGVmYXVsdC5qcGcnLFxuICAgIGFsdDogJ3RodW1ibmFpbCBBZ2VudGVzIEN1c3RvbScsXG4gICAgdmlkZW9Vcmw6ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9nMkJFSE9XTVpiND9zaT1LQjZyYkpGVmhVYS1lRUlTJyxcbiAgICBjb2xsYXBzZWREZXNjcmlwdGlvbjogJ1ZlciB2aWRlbyBkZSBBZ2VudGVzIEN1c3RvbScsXG4gIH0sXG4gIDI6IHtcbiAgICBlbGVtZW50SWQ6ICdtb2RhbC1wb3J0YWwtdmlkZW8tb25ib2FyZGluZycsXG4gICAgdGl0bGU6ICfCv0PDs21vIGNyZWFyIHVuIGFnZW50ZT8nLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0d1w61hIHBhc28gYSBwYXNvIHBhcmEgY3JlYXIgdHUgcHJpbWVyIGFnZW50ZSBwZXJzb25hbGl6YWRvIHkgY29uZmlndXJhcmxvIHNlZ8O6biB0dXMgbmVjZXNpZGFkZXMgZXNwZWPDrWZpY2FzLicsXG4gICAgdGh1bWJuYWlsOiAnaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS85LU1ydFl1SW9pRS9tYXhyZXNkZWZhdWx0LmpwZycsXG4gICAgYWx0OiAndGh1bWJuYWlsIENyZWFyIEFnZW50ZScsXG4gICAgdmlkZW9Vcmw6ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9kTlpwQjN2VEM4UT9zaT1GQno4VW84ZXlBeURvTmVpJyxcbiAgICBjb2xsYXBzZWREZXNjcmlwdGlvbjogJ1ZlciB2aWRlbyBkZSBDcmVhciBBZ2VudGUnLFxuICB9LFxufVxuXG5leHBvcnQgY29uc3QgT25ib2FyZGluZ01vZGFsQnV0dG9uID0gKCkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBvbmJvYXJkaW5nUG9ydGFsWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxMjAwLCAnb3ZlcmxheScpXG4gIGNvbnN0IHRvb2x0aXBaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDE1MDAsICdvdmVybGF5JylcbiAgY29uc3QgYnV0dG9uUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbc2hvd01vZGFsT25ib2FyZGluZywgc2V0U2hvd01vZGFsT25ib2FyZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3BvcnRhbFBvc2l0aW9uLCBzZXRQb3J0YWxQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IGxlZnQ6IG51bWJlcjsgYm90dG9tOiBudW1iZXIgfSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93VmlkZW8sIHNldFNob3dWaWRlb10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkVmlkZW9EYXRhLCBzZXRTZWxlY3RlZFZpZGVvRGF0YV0gPSB1c2VTdGF0ZShudWxsKVxuXG4gIGNvbnN0IGhhbmRsZU9uYm9hcmRpbmdBY3Rpb24gPSAoYWN0aW9uUG9zaXRpb246IG51bWJlcikgPT4ge1xuICAgIHNldFNob3dNb2RhbE9uYm9hcmRpbmcoZmFsc2UpXG4gICAgc2V0U2VsZWN0ZWRWaWRlb0RhdGEobW9ja0RhdGFbYWN0aW9uUG9zaXRpb25dKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0U2hvd1ZpZGVvKHRydWUpXG4gICAgfSwgMTAwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVmlkZW9BY3Rpb24gPSBlID0+IHtcbiAgICBzZXRTaG93VmlkZW8ocHJldiA9PiAhcHJldilcbiAgICBpZiAoc2hvd1ZpZGVvKSB7XG4gICAgICBzZXRTZWxlY3RlZFZpZGVvRGF0YShudWxsKVxuICAgIH1cbiAgICBpZiAoZSAmJiBlLnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZXZhbENsaWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHNob3dWaWRlbykge1xuICAgICAgICBzZXRTaG93VmlkZW8oZmFsc2UpXG4gICAgICAgIHNldFNlbGVjdGVkVmlkZW9EYXRhKG51bGwpXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZhbENsaWNrKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGV2YWxDbGljaylcbiAgICB9XG4gIH0sIFtzaG93VmlkZW9dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlT25ib2FyZGluZyA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHNob3dNb2RhbE9uYm9hcmRpbmcgJiYgIShldmVudC50YXJnZXQgYXMgRWxlbWVudCkuY2xvc2VzdCgnW2RhdGEtb25ib2FyZGluZy1tb2RhbF0nKSkge1xuICAgICAgICBzZXRTaG93TW9kYWxPbmJvYXJkaW5nKGZhbHNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG93TW9kYWxPbmJvYXJkaW5nKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGVPbmJvYXJkaW5nKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGVPbmJvYXJkaW5nKVxuICAgIH1cbiAgfSwgW3Nob3dNb2RhbE9uYm9hcmRpbmddKVxuXG4gIGNvbnN0IHVwZGF0ZVBvc2l0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChidXR0b25SZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgcmVjdCA9IGJ1dHRvblJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBzZXRQb3J0YWxQb3NpdGlvbih7XG4gICAgICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICAgICAgYm90dG9tOiB3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LmJvdHRvbSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvd01vZGFsT25ib2FyZGluZyB8fCAhYnV0dG9uUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNldFBvcnRhbFBvc2l0aW9uKG51bGwpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIGNvbnN0IHRocm90dGxlZFVwZGF0ZVBvc2l0aW9uID0gdGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIFBPUlRBTF9QT1NJVElPTl9USFJPVFRMRV9NUylcbiAgICB1cGRhdGVQb3NpdGlvbigpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRocm90dGxlZFVwZGF0ZVBvc2l0aW9uLCB0cnVlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aHJvdHRsZWRVcGRhdGVQb3NpdGlvbilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRocm90dGxlZFVwZGF0ZVBvc2l0aW9uLCB0cnVlKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRocm90dGxlZFVwZGF0ZVBvc2l0aW9uKVxuICAgIH1cbiAgfSwgW3Nob3dNb2RhbE9uYm9hcmRpbmcsIHVwZGF0ZVBvc2l0aW9uXSlcblxuICByZXR1cm4gKFxuICAgIDxTQ1NXcmFwcGVyT25ib2FyZGluZ01vZGFsQnV0dG9uIHJlZj17YnV0dG9uUmVmfSBkYXRhLW9uYm9hcmRpbmctbW9kYWw+XG4gICAgICA8VG9vbHRpcCB0aXRsZT17dCgnb25ib2FyZGluZy50b29sdGlwJyl9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPENVQnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgaWNvbk9ubHlcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgc2V0U2hvd01vZGFsT25ib2FyZGluZyhwcmV2ID0+ICFwcmV2KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3R5bGVkSGVscEljb24gY29sb3I9XCIjNjY2NjY2XCIgLz5cbiAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvVG9vbHRpcD5cbiAgICAgIHtzaG93TW9kYWxPbmJvYXJkaW5nICYmXG4gICAgICAgIHBvcnRhbFBvc2l0aW9uICYmXG4gICAgICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgICAgIDxTQ1NXcmFwcGVyT25ib2FyZGluZ01vZGFsUG9ydGFsXG4gICAgICAgICAgICBkYXRhLW9uYm9hcmRpbmctbW9kYWxcbiAgICAgICAgICAgIHsuLi57IFtNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSXTogJycgfX1cbiAgICAgICAgICAgICRsZWZ0PXtwb3J0YWxQb3NpdGlvbi5sZWZ0fVxuICAgICAgICAgICAgJGJvdHRvbT17cG9ydGFsUG9zaXRpb24uYm90dG9tfVxuICAgICAgICAgICAgJHpJbmRleD17b25ib2FyZGluZ1BvcnRhbFpJbmRleH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8T25ib2FyZGluZ01vZGFsIHQ9e3R9IGhhbmRsZUNsaWNrQWN0aW9uPXtoYW5kbGVPbmJvYXJkaW5nQWN0aW9ufSAvPlxuICAgICAgICAgIDwvU0NTV3JhcHBlck9uYm9hcmRpbmdNb2RhbFBvcnRhbD4sXG4gICAgICAgICAgZG9jdW1lbnQuYm9keVxuICAgICAgICApfVxuICAgICAge3Nob3dWaWRlbyAmJiBzZWxlY3RlZFZpZGVvRGF0YSAmJiAoXG4gICAgICAgIDxWaWRlb0xpZ2h0Ym94UG9ydGFsIHsuLi4oc2VsZWN0ZWRWaWRlb0RhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pfSBvbkNsb3NlVmlkZW89e2hhbmRsZVZpZGVvQWN0aW9ufSAvPlxuICAgICAgKX1cbiAgICA8L1NDU1dyYXBwZXJPbmJvYXJkaW5nTW9kYWxCdXR0b24+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFNBQVNBLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxN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
168
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiUmVhY3RET00iLCJDVUJ1dHRvbiIsIlZpZGVvTGlnaHRib3hQb3J0YWwiLCJUb29sdGlwIiwiT25ib2FyZGluZ01vZGFsIiwiU0NTV3JhcHBlck9uYm9hcmRpbmdNb2RhbEJ1dHRvbiIsIlNDU1dyYXBwZXJPbmJvYXJkaW5nTW9kYWxQb3J0YWwiLCJTdHlsZWRIZWxwSWNvbiIsInVzZVQiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiTUFJQV9UQVNLX1BBTkVMX09WRVJMQVlfQVRUUiIsImNvbXB1dGVPbmJvYXJkaW5nUG9ydGFsUG9zaXRpb24iLCJ0aHJvdHRsZSIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJQT1JUQUxfUE9TSVRJT05fVEhST1RUTEVfTVMiLCJtb2NrRGF0YSIsImVsZW1lbnRJZCIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJ0aHVtYm5haWwiLCJhbHQiLCJ2aWRlb1VybCIsImNvbGxhcHNlZERlc2NyaXB0aW9uIiwiT25ib2FyZGluZ01vZGFsQnV0dG9uIiwiX3VzZVQiLCJ0Iiwib25ib2FyZGluZ1BvcnRhbFpJbmRleCIsInRvb2x0aXBaSW5kZXgiLCJidXR0b25SZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzaG93TW9kYWxPbmJvYXJkaW5nIiwic2V0U2hvd01vZGFsT25ib2FyZGluZyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicG9ydGFsUG9zaXRpb24iLCJzZXRQb3J0YWxQb3NpdGlvbiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd1ZpZGVvIiwic2V0U2hvd1ZpZGVvIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzZWxlY3RlZFZpZGVvRGF0YSIsInNldFNlbGVjdGVkVmlkZW9EYXRhIiwiaGFuZGxlT25ib2FyZGluZ0FjdGlvbiIsImFjdGlvblBvc2l0aW9uIiwic2V0VGltZW91dCIsImhhbmRsZVZpZGVvQWN0aW9uIiwiZSIsInByZXYiLCJzdG9wUHJvcGFnYXRpb24iLCJldmFsQ2xpY2siLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlQ2xpY2tPdXRzaWRlT25ib2FyZGluZyIsImV2ZW50IiwidGFyZ2V0IiwiY2xvc2VzdCIsInVwZGF0ZVBvc2l0aW9uIiwiY3VycmVudCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aW5kb3ciLCJpbm5lckhlaWdodCIsInVuZGVmaW5lZCIsInRocm90dGxlZFVwZGF0ZVBvc2l0aW9uIiwicmVmIiwiY2hpbGRyZW4iLCJ6SW5kZXgiLCJ2YXJpYW50Iiwic2l6ZSIsImljb25Pbmx5Iiwib25DbGljayIsImNvbG9yIiwiY3JlYXRlUG9ydGFsIiwiX29iamVjdFNwcmVhZCIsIl9kZWZpbmVQcm9wZXJ0eSIsIiRsZWZ0IiwibGVmdCIsIiRib3R0b20iLCJib3R0b20iLCIkekluZGV4IiwiaGFuZGxlQ2xpY2tBY3Rpb24iLCJib2R5Iiwib25DbG9zZVZpZGVvIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvT25ib2FyZGluZ01vZGFsQnV0dG9uL09uYm9hcmRpbmdNb2RhbEJ1dHRvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IENVQnV0dG9uIH0gZnJvbSAnQHByb2plY3Rjb3IvYnV0dG9uL2xpYi9jb21wb25lbnRzL0NVQnV0dG9uJ1xuaW1wb3J0IHsgVmlkZW9MaWdodGJveFBvcnRhbCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2Nvci1jb21tb25zL2xpYi9jb21wb25lbnRzL3ZpZGVvLW9uYm9hcmRpbmcvdmlkZW8tbGlnaHRib3gnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyBPbmJvYXJkaW5nTW9kYWwgfSBmcm9tICcuL09uYm9hcmRpbmdNb2RhbCdcbmltcG9ydCB7XG4gIFNDU1dyYXBwZXJPbmJvYXJkaW5nTW9kYWxCdXR0b24sXG4gIFNDU1dyYXBwZXJPbmJvYXJkaW5nTW9kYWxQb3J0YWwsXG4gIFN0eWxlZEhlbHBJY29uLFxufSBmcm9tICcuL09uYm9hcmRpbmdNb2RhbEJ1dHRvbi5zdHlsZXMnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuaW1wb3J0IHsgTUFJQV9UQVNLX1BBTkVMX09WRVJMQVlfQVRUUiB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9tYWlhVGFza1BhbmVsT3V0c2lkZUNsaWNrJ1xuXG5pbXBvcnQgeyBjb21wdXRlT25ib2FyZGluZ1BvcnRhbFBvc2l0aW9uLCB0aHJvdHRsZSB9IGZyb20gJy4vT25ib2FyZGluZ01vZGFsQnV0dG9uLmhlbHBlcnMnXG5cbmNvbnN0IFBPUlRBTF9QT1NJVElPTl9USFJPVFRMRV9NUyA9IDE1MFxuXG5jb25zdCBtb2NrRGF0YSA9IHtcbiAgMDoge1xuICAgIGVsZW1lbnRJZDogJ21vZGFsLXBvcnRhbC12aWRlby1vbmJvYXJkaW5nJyxcbiAgICB0aXRsZTogJ01haWEnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0Rlc2N1YnJlIGPDs21vIGZ1bmNpb25hIE1haWEsIG51ZXN0cm8gYXNpc3RlbnRlIGRlIGludGVsaWdlbmNpYSBhcnRpZmljaWFsIHF1ZSB0ZSBheXVkYSBhIGdlc3Rpb25hciBwcm95ZWN0b3MgZGUgbWFuZXJhIG3DoXMgZWZpY2llbnRlLicsXG4gICAgdGh1bWJuYWlsOiAnaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS85LU1ydFl1SW9pRS9tYXhyZXNkZWZhdWx0LmpwZycsXG4gICAgYWx0OiAndGh1bWJuYWlsIE1haWEnLFxuICAgIHZpZGVvVXJsOiAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvUUVMdV9wUFNJVGc/c2k9OTZzQlB5MDk5OFZzR05DZicsXG4gICAgY29sbGFwc2VkRGVzY3JpcHRpb246ICdWZXIgdmlkZW8gZGUgTWFpYScsXG4gIH0sXG4gIDE6IHtcbiAgICBlbGVtZW50SWQ6ICdtb2RhbC1wb3J0YWwtdmlkZW8tb25ib2FyZGluZycsXG4gICAgdGl0bGU6ICdBZ2VudGVzIEN1c3RvbScsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnQXByZW5kZSBhIGNyZWFyIHkgY29uZmlndXJhciBhZ2VudGVzIHBlcnNvbmFsaXphZG9zIHBhcmEgYXV0b21hdGl6YXIgdGFyZWFzIGVzcGVjw61maWNhcyBlbiB0dSBmbHVqbyBkZSB0cmFiYWpvLicsXG4gICAgdGh1bWJuYWlsOiAnaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS85LU1ydFl1SW9pRS9tYXhyZXNkZWZhdWx0LmpwZycsXG4gICAgYWx0OiAndGh1bWJuYWlsIEFnZW50ZXMgQ3VzdG9tJyxcbiAgICB2aWRlb1VybDogJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL2cyQkVIT1dNWmI0P3NpPUtCNnJiSkZWaFVhLWVFSVMnLFxuICAgIGNvbGxhcHNlZERlc2NyaXB0aW9uOiAnVmVyIHZpZGVvIGRlIEFnZW50ZXMgQ3VzdG9tJyxcbiAgfSxcbiAgMjoge1xuICAgIGVsZW1lbnRJZDogJ21vZGFsLXBvcnRhbC12aWRlby1vbmJvYXJkaW5nJyxcbiAgICB0aXRsZTogJ8K/Q8OzbW8gY3JlYXIgdW4gYWdlbnRlPycsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnR3XDrWEgcGFzbyBhIHBhc28gcGFyYSBjcmVhciB0dSBwcmltZXIgYWdlbnRlIHBlcnNvbmFsaXphZG8geSBjb25maWd1cmFybG8gc2Vnw7puIHR1cyBuZWNlc2lkYWRlcyBlc3BlY8OtZmljYXMuJyxcbiAgICB0aHVtYm5haWw6ICdodHRwczovL2kueXRpbWcuY29tL3ZpLzktTXJ0WXVJb2lFL21heHJlc2RlZmF1bHQuanBnJyxcbiAgICBhbHQ6ICd0aHVtYm5haWwgQ3JlYXIgQWdlbnRlJyxcbiAgICB2aWRlb1VybDogJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL2ROWnBCM3ZUQzhRP3NpPUZCejhVbzhleUF5RG9OZWknLFxuICAgIGNvbGxhcHNlZERlc2NyaXB0aW9uOiAnVmVyIHZpZGVvIGRlIENyZWFyIEFnZW50ZScsXG4gIH0sXG59XG5cbmV4cG9ydCBjb25zdCBPbmJvYXJkaW5nTW9kYWxCdXR0b24gPSAoKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IG9uYm9hcmRpbmdQb3J0YWxaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDEyMDAsICdvdmVybGF5JylcbiAgY29uc3QgdG9vbHRpcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTUwMCwgJ292ZXJsYXknKVxuICBjb25zdCBidXR0b25SZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtzaG93TW9kYWxPbmJvYXJkaW5nLCBzZXRTaG93TW9kYWxPbmJvYXJkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcG9ydGFsUG9zaXRpb24sIHNldFBvcnRhbFBvc2l0aW9uXSA9IHVzZVN0YXRlPHsgbGVmdDogbnVtYmVyOyBib3R0b206IG51bWJlciB9IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dWaWRlbywgc2V0U2hvd1ZpZGVvXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRWaWRlb0RhdGEsIHNldFNlbGVjdGVkVmlkZW9EYXRhXSA9IHVzZVN0YXRlKG51bGwpXG5cbiAgY29uc3QgaGFuZGxlT25ib2FyZGluZ0FjdGlvbiA9IChhY3Rpb25Qb3NpdGlvbjogbnVtYmVyKSA9PiB7XG4gICAgc2V0U2hvd01vZGFsT25ib2FyZGluZyhmYWxzZSlcbiAgICBzZXRTZWxlY3RlZFZpZGVvRGF0YShtb2NrRGF0YVthY3Rpb25Qb3NpdGlvbl0pXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRTaG93VmlkZW8odHJ1ZSlcbiAgICB9LCAxMDApXG4gIH1cblxuICBjb25zdCBoYW5kbGVWaWRlb0FjdGlvbiA9IGUgPT4ge1xuICAgIHNldFNob3dWaWRlbyhwcmV2ID0+ICFwcmV2KVxuICAgIGlmIChzaG93VmlkZW8pIHtcbiAgICAgIHNldFNlbGVjdGVkVmlkZW9EYXRhKG51bGwpXG4gICAgfVxuICAgIGlmIChlICYmIGUuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBldmFsQ2xpY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoc2hvd1ZpZGVvKSB7XG4gICAgICAgIHNldFNob3dWaWRlbyhmYWxzZSlcbiAgICAgICAgc2V0U2VsZWN0ZWRWaWRlb0RhdGEobnVsbClcbiAgICAgIH1cbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmFsQ2xpY2spXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZhbENsaWNrKVxuICAgIH1cbiAgfSwgW3Nob3dWaWRlb10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGVPbmJvYXJkaW5nID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoc2hvd01vZGFsT25ib2FyZGluZyAmJiAhKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbG9zZXN0KCdbZGF0YS1vbmJvYXJkaW5nLW1vZGFsXScpKSB7XG4gICAgICAgIHNldFNob3dNb2RhbE9uYm9hcmRpbmcoZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3dNb2RhbE9uYm9hcmRpbmcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZU9uYm9hcmRpbmcpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZU9uYm9hcmRpbmcpXG4gICAgfVxuICB9LCBbc2hvd01vZGFsT25ib2FyZGluZ10pXG5cbiAgY29uc3QgdXBkYXRlUG9zaXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGJ1dHRvblJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCByZWN0ID0gYnV0dG9uUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIHNldFBvcnRhbFBvc2l0aW9uKGNvbXB1dGVPbmJvYXJkaW5nUG9ydGFsUG9zaXRpb24ocmVjdCwgd2luZG93LmlubmVySGVpZ2h0KSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFzaG93TW9kYWxPbmJvYXJkaW5nIHx8ICFidXR0b25SZWYuY3VycmVudCkge1xuICAgICAgc2V0UG9ydGFsUG9zaXRpb24obnVsbClcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gICAgY29uc3QgdGhyb3R0bGVkVXBkYXRlUG9zaXRpb24gPSB0aHJvdHRsZSh1cGRhdGVQb3NpdGlvbiwgUE9SVEFMX1BPU0lUSU9OX1RIUk9UVExFX01TKVxuICAgIHVwZGF0ZVBvc2l0aW9uKClcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhyb3R0bGVkVXBkYXRlUG9zaXRpb24sIHRydWUpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRocm90dGxlZFVwZGF0ZVBvc2l0aW9uKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhyb3R0bGVkVXBkYXRlUG9zaXRpb24sIHRydWUpXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhyb3R0bGVkVXBkYXRlUG9zaXRpb24pXG4gICAgfVxuICB9LCBbc2hvd01vZGFsT25ib2FyZGluZywgdXBkYXRlUG9zaXRpb25dKVxuXG4gIHJldHVybiAoXG4gICAgPFNDU1dyYXBwZXJPbmJvYXJkaW5nTW9kYWxCdXR0b24gcmVmPXtidXR0b25SZWZ9IGRhdGEtb25ib2FyZGluZy1tb2RhbD5cbiAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdvbmJvYXJkaW5nLnRvb2x0aXAnKX0gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8Q1VCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBpY29uT25seVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBzZXRTaG93TW9kYWxPbmJvYXJkaW5nKHByZXYgPT4gIXByZXYpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTdHlsZWRIZWxwSWNvbiBjb2xvcj1cIiM2NjY2NjZcIiAvPlxuICAgICAgICAgIDwvQ1VCdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Ub29sdGlwPlxuICAgICAge3Nob3dNb2RhbE9uYm9hcmRpbmcgJiZcbiAgICAgICAgcG9ydGFsUG9zaXRpb24gJiZcbiAgICAgICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICAgICAgPFNDU1dyYXBwZXJPbmJvYXJkaW5nTW9kYWxQb3J0YWxcbiAgICAgICAgICAgIGRhdGEtb25ib2FyZGluZy1tb2RhbFxuICAgICAgICAgICAgey4uLnsgW01BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFJdOiAnJyB9fVxuICAgICAgICAgICAgJGxlZnQ9e3BvcnRhbFBvc2l0aW9uLmxlZnR9XG4gICAgICAgICAgICAkYm90dG9tPXtwb3J0YWxQb3NpdGlvbi5ib3R0b219XG4gICAgICAgICAgICAkekluZGV4PXtvbmJvYXJkaW5nUG9ydGFsWkluZGV4fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxPbmJvYXJkaW5nTW9kYWwgdD17dH0gaGFuZGxlQ2xpY2tBY3Rpb249e2hhbmRsZU9uYm9hcmRpbmdBY3Rpb259IC8+XG4gICAgICAgICAgPC9TQ1NXcmFwcGVyT25ib2FyZGluZ01vZGFsUG9ydGFsPixcbiAgICAgICAgICBkb2N1bWVudC5ib2R5XG4gICAgICAgICl9XG4gICAgICB7c2hvd1ZpZGVvICYmIHNlbGVjdGVkVmlkZW9EYXRhICYmIChcbiAgICAgICAgPFZpZGVvTGlnaHRib3hQb3J0YWwgey4uLihzZWxlY3RlZFZpZGVvRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPil9IG9uQ2xvc2VWaWRlbz17aGFuZGxlVmlkZW9BY3Rpb259IC8+XG4gICAgICApfVxuICAgIDwvU0NTV3JhcHBlck9uYm9hcmRpbmdNb2RhbEJ1dHRvbj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUEsU0FBU0EsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDaEUsT0FBT0MsUUFBUSxNQUFNLFdBQVc7QUFDaEMsU0FBU0MsUUFBUSxRQUFRLDRDQUE0QztBQUNyRSxTQUFTQyxtQkFBbUIsUUFBUSx3RUFBd0U7QUFDNUcsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxlQUFlLFFBQVEsbUJBQW1CO0FBQ25ELFNBQ0VDLCtCQUErQixFQUMvQkMsK0JBQStCLEVBQy9CQyxjQUFjLFFBQ1QsZ0NBQWdDO0FBQ3ZDLFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0Msc0JBQXNCLFFBQVEsdUNBQXVDO0FBQzlFLFNBQVNDLDRCQUE0QixRQUFRLDhDQUE4QztBQUUzRixTQUFTQywrQkFBK0IsRUFBRUMsUUFBUSxRQUFRLGlDQUFpQztBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUE7QUFFM0YsSUFBTUMsMkJBQTJCLEdBQUcsR0FBRztBQUV2QyxJQUFNQyxRQUFRLEdBQUc7RUFDZixDQUFDLEVBQUU7SUFDREMsU0FBUyxFQUFFLCtCQUErQjtJQUMxQ0MsS0FBSyxFQUFFLE1BQU07SUFDYkMsV0FBVyxFQUNULHVJQUF1STtJQUN6SUMsU0FBUyxFQUFFLHNEQUFzRDtJQUNqRUMsR0FBRyxFQUFFLGdCQUFnQjtJQUNyQkMsUUFBUSxFQUFFLCtEQUErRDtJQUN6RUMsb0JBQW9CLEVBQUU7RUFDeEIsQ0FBQztFQUNELENBQUMsRUFBRTtJQUNETixTQUFTLEVBQUUsK0JBQStCO0lBQzFDQyxLQUFLLEVBQUUsZ0JBQWdCO0lBQ3ZCQyxXQUFXLEVBQ1QsaUhBQWlIO0lBQ25IQyxTQUFTLEVBQUUsc0RBQXNEO0lBQ2pFQyxHQUFHLEVBQUUsMEJBQTBCO0lBQy9CQyxRQUFRLEVBQUUsK0RBQStEO0lBQ3pFQyxvQkFBb0IsRUFBRTtFQUN4QixDQUFDO0VBQ0QsQ0FBQyxFQUFFO0lBQ0ROLFNBQVMsRUFBRSwrQkFBK0I7SUFDMUNDLEtBQUssRUFBRSx3QkFBd0I7SUFDL0JDLFdBQVcsRUFDVCw4R0FBOEc7SUFDaEhDLFNBQVMsRUFBRSxzREFBc0Q7SUFDakVDLEdBQUcsRUFBRSx3QkFBd0I7SUFDN0JDLFFBQVEsRUFBRSwrREFBK0Q7SUFDekVDLG9CQUFvQixFQUFFO0VBQ3hCO0FBQ0YsQ0FBQztBQUVELE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBQSxFQUFTO0VBQ3pDLElBQUFDLEtBQUEsR0FBY25CLElBQUksQ0FBQyxDQUFDO0lBQVpvQixDQUFDLEdBQUFELEtBQUEsQ0FBREMsQ0FBQztFQUNULElBQU1DLHNCQUFzQixHQUFHcEIsc0JBQXNCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztFQUN0RSxJQUFNcUIsYUFBYSxHQUFHckIsc0JBQXNCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztFQUM3RCxJQUFNc0IsU0FBUyxHQUFHakMsTUFBTSxDQUFpQixJQUFJLENBQUM7RUFDOUMsSUFBQWtDLFNBQUEsR0FBc0RqQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUFrQyxVQUFBLEdBQUFDLGNBQUEsQ0FBQUYsU0FBQTtJQUE5REcsbUJBQW1CLEdBQUFGLFVBQUE7SUFBRUcsc0JBQXNCLEdBQUFILFVBQUE7RUFDbEQsSUFBQUksVUFBQSxHQUE0Q3RDLFFBQVEsQ0FBMEMsSUFBSSxDQUFDO0lBQUF1QyxVQUFBLEdBQUFKLGNBQUEsQ0FBQUcsVUFBQTtJQUE1RkUsY0FBYyxHQUFBRCxVQUFBO0lBQUVFLGlCQUFpQixHQUFBRixVQUFBO0VBQ3hDLElBQUFHLFVBQUEsR0FBa0MxQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUEyQyxVQUFBLEdBQUFSLGNBQUEsQ0FBQU8sVUFBQTtJQUExQ0UsU0FBUyxHQUFBRCxVQUFBO0lBQUVFLFlBQVksR0FBQUYsVUFBQTtFQUM5QixJQUFBRyxVQUFBLEdBQWtEOUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUFBK0MsVUFBQSxHQUFBWixjQUFBLENBQUFXLFVBQUE7SUFBekRFLGlCQUFpQixHQUFBRCxVQUFBO0lBQUVFLG9CQUFvQixHQUFBRixVQUFBO0VBRTlDLElBQU1HLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUlDLGNBQXNCLEVBQUs7SUFDekRkLHNCQUFzQixDQUFDLEtBQUssQ0FBQztJQUM3Qlksb0JBQW9CLENBQUM5QixRQUFRLENBQUNnQyxjQUFjLENBQUMsQ0FBQztJQUM5Q0MsVUFBVSxDQUFDLFlBQU07TUFDZlAsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNwQixDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQ1QsQ0FBQztFQUVELElBQU1RLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUdDLENBQUMsRUFBSTtJQUM3QlQsWUFBWSxDQUFDLFVBQUFVLElBQUk7TUFBQSxPQUFJLENBQUNBLElBQUk7SUFBQSxFQUFDO0lBQzNCLElBQUlYLFNBQVMsRUFBRTtNQUNiSyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7SUFDNUI7SUFDQSxJQUFJSyxDQUFDLElBQUlBLENBQUMsQ0FBQ0UsZUFBZSxFQUFFO01BQzFCRixDQUFDLENBQUNFLGVBQWUsQ0FBQyxDQUFDO0lBQ3JCO0VBQ0YsQ0FBQztFQUVEMUQsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFNMkQsU0FBUyxHQUFHLFNBQVpBLFNBQVNBLENBQUEsRUFBUztNQUN0QixJQUFJYixTQUFTLEVBQUU7UUFDYkMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUNuQkksb0JBQW9CLENBQUMsSUFBSSxDQUFDO01BQzVCO0lBQ0YsQ0FBQztJQUNEUyxRQUFRLENBQUNDLGdCQUFnQixDQUFDLE9BQU8sRUFBRUYsU0FBUyxDQUFDO0lBQzdDLE9BQU8sWUFBTTtNQUNYQyxRQUFRLENBQUNFLG1CQUFtQixDQUFDLE9BQU8sRUFBRUgsU0FBUyxDQUFDO0lBQ2xELENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQ2IsU0FBUyxDQUFDLENBQUM7RUFFZjlDLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTStELDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBNEJBLENBQUlDLEtBQWlCLEVBQUs7TUFDMUQsSUFBSTFCLG1CQUFtQixJQUFJLENBQUUwQixLQUFLLENBQUNDLE1BQU0sQ0FBYUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLEVBQUU7UUFDeEYzQixzQkFBc0IsQ0FBQyxLQUFLLENBQUM7TUFDL0I7SUFDRixDQUFDO0lBRUQsSUFBSUQsbUJBQW1CLEVBQUU7TUFDdkJzQixRQUFRLENBQUNDLGdCQUFnQixDQUFDLFdBQVcsRUFBRUUsNEJBQTRCLENBQUM7SUFDdEU7SUFFQSxPQUFPLFlBQU07TUFDWEgsUUFBUSxDQUFDRSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUVDLDRCQUE0QixDQUFDO0lBQ3pFLENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQ3pCLG1CQUFtQixDQUFDLENBQUM7RUFFekIsSUFBTTZCLGNBQWMsR0FBR3BFLFdBQVcsQ0FBQyxZQUFNO0lBQ3ZDLElBQUltQyxTQUFTLENBQUNrQyxPQUFPLEVBQUU7TUFDckIsSUFBTUMsSUFBSSxHQUFHbkMsU0FBUyxDQUFDa0MsT0FBTyxDQUFDRSxxQkFBcUIsQ0FBQyxDQUFDO01BQ3REM0IsaUJBQWlCLENBQUM3QiwrQkFBK0IsQ0FBQ3VELElBQUksRUFBRUUsTUFBTSxDQUFDQyxXQUFXLENBQUMsQ0FBQztJQUM5RTtFQUNGLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTnhFLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSSxDQUFDc0MsbUJBQW1CLElBQUksQ0FBQ0osU0FBUyxDQUFDa0MsT0FBTyxFQUFFO01BQzlDekIsaUJBQWlCLENBQUMsSUFBSSxDQUFDO01BQ3ZCLE9BQU84QixTQUFTO0lBQ2xCO0lBQ0EsSUFBTUMsdUJBQXVCLEdBQUczRCxRQUFRLENBQUNvRCxjQUFjLEVBQUUvQywyQkFBMkIsQ0FBQztJQUNyRitDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hCSSxNQUFNLENBQUNWLGdCQUFnQixDQUFDLFFBQVEsRUFBRWEsdUJBQXVCLEVBQUUsSUFBSSxDQUFDO0lBQ2hFSCxNQUFNLENBQUNWLGdCQUFnQixDQUFDLFFBQVEsRUFBRWEsdUJBQXVCLENBQUM7SUFDMUQsT0FBTyxZQUFNO01BQ1hILE1BQU0sQ0FBQ1QsbUJBQW1CLENBQUMsUUFBUSxFQUFFWSx1QkFBdUIsRUFBRSxJQUFJLENBQUM7TUFDbkVILE1BQU0sQ0FBQ1QsbUJBQW1CLENBQUMsUUFBUSxFQUFFWSx1QkFBdUIsQ0FBQztJQUMvRCxDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUNwQyxtQkFBbUIsRUFBRTZCLGNBQWMsQ0FBQyxDQUFDO0VBRXpDLG9CQUNFaEQsS0FBQSxDQUFDWCwrQkFBK0I7SUFBQ21FLEdBQUcsRUFBRXpDLFNBQVU7SUFBQyw2QkFBcUI7SUFBQTBDLFFBQUEsZ0JBQ3BFM0QsSUFBQSxDQUFDWCxPQUFPO01BQUNpQixLQUFLLEVBQUVRLENBQUMsQ0FBQyxvQkFBb0IsQ0FBRTtNQUFDOEMsTUFBTSxFQUFFNUMsYUFBYztNQUFBMkMsUUFBQSxlQUM3RDNELElBQUE7UUFBQTJELFFBQUEsZUFDRTNELElBQUEsQ0FBQ2IsUUFBUTtVQUNQMEUsT0FBTyxFQUFDLE1BQU07VUFDZEMsSUFBSSxFQUFDLE9BQU87VUFDWkMsUUFBUTtVQUNSQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUFRO1lBQ2IxQyxzQkFBc0IsQ0FBQyxVQUFBa0IsSUFBSTtjQUFBLE9BQUksQ0FBQ0EsSUFBSTtZQUFBLEVBQUM7VUFDdkMsQ0FBRTtVQUFBbUIsUUFBQSxlQUVGM0QsSUFBQSxDQUFDUCxjQUFjO1lBQUN3RSxLQUFLLEVBQUM7VUFBUyxDQUFFO1FBQUMsQ0FDMUI7TUFBQyxDQUNSO0lBQUMsQ0FDQyxDQUFDLEVBQ1Q1QyxtQkFBbUIsSUFDbEJJLGNBQWMsSUFDZCxPQUFPa0IsUUFBUSxLQUFLLFdBQVcsaUJBQy9CekQsUUFBUSxDQUFDZ0YsWUFBWSxjQUNuQmxFLElBQUEsQ0FBQ1IsK0JBQStCLEVBQUEyRSxhQUFBLENBQUFBLGFBQUE7TUFDOUI7SUFBcUIsR0FBQUMsZUFBQSxLQUNkeEUsNEJBQTRCLEVBQUcsRUFBRTtNQUN4Q3lFLEtBQUssRUFBRTVDLGNBQWMsQ0FBQzZDLElBQUs7TUFDM0JDLE9BQU8sRUFBRTlDLGNBQWMsQ0FBQytDLE1BQU87TUFDL0JDLE9BQU8sRUFBRTFELHNCQUF1QjtNQUFBNEMsUUFBQSxlQUVoQzNELElBQUEsQ0FBQ1YsZUFBZTtRQUFDd0IsQ0FBQyxFQUFFQSxDQUFFO1FBQUM0RCxpQkFBaUIsRUFBRXZDO01BQXVCLENBQUU7SUFBQyxFQUNyQyxDQUFDLEVBQ2xDUSxRQUFRLENBQUNnQyxJQUNYLENBQUMsRUFDRjlDLFNBQVMsSUFBSUksaUJBQWlCLGlCQUM3QmpDLElBQUEsQ0FBQ1osbUJBQW1CLEVBQUErRSxhQUFBLENBQUFBLGFBQUEsS0FBTWxDLGlCQUFpQjtNQUE4QjJDLFlBQVksRUFBRXRDO0lBQWtCLEVBQUUsQ0FDNUc7RUFBQSxDQUM4QixDQUFDO0FBRXRDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=