@projectcor/maia-components 2.49.0-beta.1 → 2.49.1-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 (493) hide show
  1. package/lib/App.js +44 -19
  2. package/lib/components/atoms/ActionableButton.spec.js +111 -0
  3. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
  4. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
  5. package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
  6. package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.spec.js +63 -0
  7. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
  8. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +183 -0
  9. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
  10. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +117 -0
  11. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +139 -0
  12. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +31 -101
  13. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +385 -0
  14. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
  15. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +91 -0
  16. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +94 -0
  17. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +49 -140
  18. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +396 -0
  19. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
  20. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +257 -0
  21. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +526 -0
  22. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -205
  23. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +137 -0
  24. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
  25. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
  26. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
  27. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
  28. package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
  29. package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
  30. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
  31. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  32. package/lib/components/atoms/Chip/Chip.spec.js +82 -0
  33. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
  34. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
  35. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +45 -0
  36. package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
  37. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +133 -0
  38. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  39. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
  40. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
  41. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +109 -0
  42. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
  43. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
  44. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +59 -0
  45. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +92 -0
  46. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -57
  47. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +319 -0
  48. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
  49. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
  50. package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
  51. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
  52. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
  53. package/lib/components/atoms/Expand/Expand.spec.js +57 -0
  54. package/lib/components/atoms/Fade/Fade.spec.js +31 -0
  55. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
  56. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
  57. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
  58. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
  59. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
  60. package/lib/components/atoms/HelpButton.spec.js +87 -0
  61. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
  62. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
  63. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
  64. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
  65. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
  66. package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
  67. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  68. package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
  69. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
  70. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +113 -0
  71. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +184 -0
  72. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +381 -0
  73. package/lib/components/atoms/MAIAInput/MAIAInput.js +130 -177
  74. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +641 -0
  75. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +96 -0
  76. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +92 -0
  77. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -113
  78. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +193 -0
  79. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +32 -0
  80. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
  81. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
  82. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
  83. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
  84. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
  85. package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
  86. package/lib/components/atoms/NextPageLoader.spec.js +37 -0
  87. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
  88. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
  89. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
  90. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
  91. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
  92. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +146 -0
  93. package/lib/components/atoms/PrimaryButton.spec.js +42 -0
  94. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
  95. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
  96. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
  97. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
  98. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +27 -13
  99. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
  100. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +79 -52
  101. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
  102. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
  103. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
  104. package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
  105. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
  106. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +36 -15
  107. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
  108. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
  109. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
  110. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
  111. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
  112. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
  113. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
  114. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
  115. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
  116. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  117. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
  118. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
  119. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +71 -0
  120. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
  121. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +120 -0
  122. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  123. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
  124. package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
  125. package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +25 -0
  126. package/lib/components/atoms/TextArea/TextArea.js +11 -20
  127. package/lib/components/atoms/TextArea/TextArea.spec.js +126 -0
  128. package/lib/components/atoms/ThirdButton.spec.js +29 -0
  129. package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
  130. package/lib/components/atoms/WithAppCfg.spec.js +82 -0
  131. package/lib/components/index.js +2 -1
  132. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
  133. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
  134. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +6 -29
  135. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +742 -0
  136. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +68 -0
  137. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +107 -0
  138. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +17 -56
  139. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +256 -0
  140. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +133 -0
  141. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +175 -0
  142. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +31 -112
  143. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +318 -0
  144. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
  145. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
  146. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
  147. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
  148. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
  149. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
  150. package/lib/components/molecules/AgentInputBlock/index.js +5 -0
  151. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
  152. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
  153. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
  154. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
  155. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
  156. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
  157. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
  158. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
  159. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
  160. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
  161. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +622 -0
  162. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +285 -302
  163. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +264 -0
  164. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
  165. package/lib/components/molecules/ChatAIHome/styles.js +85 -78
  166. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  167. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +398 -0
  168. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +742 -0
  169. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +235 -245
  170. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +541 -0
  171. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  172. package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
  173. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +522 -4
  174. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +1394 -0
  175. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +250 -349
  176. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +1401 -0
  177. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  178. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
  179. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
  180. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
  181. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
  182. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
  183. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
  184. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
  185. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +49 -0
  186. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +142 -0
  187. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +100 -93
  188. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
  189. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
  190. package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
  191. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
  192. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
  193. package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
  194. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
  195. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +93 -0
  196. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
  197. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +297 -0
  198. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
  199. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +62 -0
  200. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
  201. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +221 -0
  202. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
  203. package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
  204. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +369 -0
  205. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
  206. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
  207. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +104 -0
  208. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
  209. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
  210. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  211. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  212. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
  213. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
  214. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
  215. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
  216. package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
  217. package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +119 -0
  218. package/lib/components/molecules/Sidebar/Sidebar.js +65 -44
  219. package/lib/components/molecules/Sidebar/Sidebar.spec.js +464 -0
  220. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +512 -0
  221. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +1067 -0
  222. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +310 -644
  223. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1236 -0
  224. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
  225. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
  226. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +77 -0
  227. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
  228. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +503 -0
  229. package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
  230. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
  231. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +246 -0
  232. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  233. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  234. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
  235. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  236. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +275 -0
  237. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +275 -0
  238. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +195 -0
  239. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
  240. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
  241. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
  242. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  243. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  244. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  245. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
  246. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  247. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  248. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  249. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
  250. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
  251. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
  252. package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
  253. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
  254. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
  255. package/lib/constants/formatExtensions.js +7 -8
  256. package/lib/constants/formatExtensions.spec.js +14 -0
  257. package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
  258. package/lib/constants/maiaFeatureAccess.spec.js +30 -0
  259. package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
  260. package/lib/constants/maiaTaskPanelAccess.spec.js +41 -0
  261. package/lib/constants/permissions/clientRoleAccess.spec.js +65 -0
  262. package/lib/constants/permissions/index.js +2 -2
  263. package/lib/constants/permissions/utils.js +4 -1
  264. package/lib/constants/permissions/utils.spec.js +128 -0
  265. package/lib/constants/plannerSyncEvents.spec.js +31 -0
  266. package/lib/constants/taskUrls.spec.js +9 -0
  267. package/lib/dev/DevMaiaPage.js +30 -0
  268. package/lib/dev/DevReasoningTimeline.js +75 -86
  269. package/lib/dev/Providers.js +5 -3
  270. package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
  271. package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
  272. package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
  273. package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
  274. package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
  275. package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +268 -0
  276. package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
  277. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +314 -0
  278. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
  279. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +374 -0
  280. package/lib/hooks/useAgentSuggestions.spec.js +89 -0
  281. package/lib/hooks/useCaretPosition.spec.js +58 -0
  282. package/lib/hooks/useChatManager/useChatManager.helpers.js +902 -0
  283. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +2027 -0
  284. package/lib/hooks/useChatManager/useChatManager.js +272 -745
  285. package/lib/hooks/useChatManager/useChatManager.spec.js +2409 -0
  286. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +365 -0
  287. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +491 -0
  288. package/lib/hooks/useChatMessages/useChatMessages.js +59 -285
  289. package/lib/hooks/useChatMessages/useChatMessages.spec.js +729 -0
  290. package/lib/hooks/useChats/useChats.spec.js +208 -0
  291. package/lib/hooks/useClientSearch.helpers.js +36 -0
  292. package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
  293. package/lib/hooks/useClientSearch.js +4 -32
  294. package/lib/hooks/useClientSearch.spec.js +86 -0
  295. package/lib/hooks/useContextMentions.helpers.js +212 -0
  296. package/lib/hooks/useContextMentions.helpers.spec.js +267 -0
  297. package/lib/hooks/useContextMentions.js +5 -223
  298. package/lib/hooks/useContextMentions.spec.js +338 -0
  299. package/lib/hooks/useContextMentions.types.js +2 -0
  300. package/lib/hooks/useContextPinPopover.helpers.js +95 -0
  301. package/lib/hooks/useContextPinPopover.helpers.spec.js +183 -0
  302. package/lib/hooks/useContextPinPopover.js +16 -75
  303. package/lib/hooks/useContextPinPopover.spec.js +159 -0
  304. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
  305. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
  306. package/lib/hooks/useDebounce.spec.js +42 -0
  307. package/lib/hooks/useEntitySearch.helpers.js +407 -0
  308. package/lib/hooks/useEntitySearch.helpers.spec.js +723 -0
  309. package/lib/hooks/useEntitySearch.js +52 -436
  310. package/lib/hooks/useEntitySearch.spec.js +718 -0
  311. package/lib/hooks/useEvent.spec.js +45 -0
  312. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
  313. package/lib/hooks/useFrequentlyUsedActions.js +60 -22
  314. package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
  315. package/lib/hooks/useIsMaiaPageRoute.js +26 -0
  316. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  317. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
  318. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
  319. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
  320. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
  321. package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
  322. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
  323. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  324. package/lib/hooks/useMentionPopover.helpers.js +41 -0
  325. package/lib/hooks/useMentionPopover.helpers.spec.js +100 -0
  326. package/lib/hooks/useMentionPopover.js +9 -35
  327. package/lib/hooks/useMentionPopover.spec.js +392 -0
  328. package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
  329. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +176 -0
  330. package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
  331. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
  332. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
  333. package/lib/hooks/useModal/useModal.spec.js +73 -0
  334. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
  335. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +138 -0
  336. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
  337. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +417 -0
  338. package/lib/hooks/useProjectSearch.helpers.js +61 -0
  339. package/lib/hooks/useProjectSearch.helpers.spec.js +89 -0
  340. package/lib/hooks/useProjectSearch.js +4 -58
  341. package/lib/hooks/useProjectSearch.spec.js +91 -0
  342. package/lib/hooks/useProjectSummary.spec.js +193 -0
  343. package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
  344. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +151 -0
  345. package/lib/hooks/useProjectSummaryConfig.js +14 -52
  346. package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
  347. package/lib/hooks/useReasoningTrace/reasoningStore.js +8 -39
  348. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
  349. package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
  350. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
  351. package/lib/hooks/useRecentClientsSearch.js +4 -32
  352. package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
  353. package/lib/hooks/useRecentContexts.spec.js +139 -0
  354. package/lib/hooks/useResize.spec.js +37 -0
  355. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  356. package/lib/hooks/useSlashCommands.spec.js +139 -0
  357. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
  358. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  359. package/lib/hooks/useStreamResponse.spec.js +199 -0
  360. package/lib/hooks/useT.spec.js +20 -0
  361. package/lib/hooks/useToggle.spec.js +33 -0
  362. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
  363. package/lib/index.js +5 -2
  364. package/lib/lang/br/index.js +26 -7
  365. package/lib/lang/en/index.js +26 -7
  366. package/lib/lang/es/index.js +26 -7
  367. package/lib/lang/fr/index.js +26 -7
  368. package/lib/services/appcues.spec.js +37 -0
  369. package/lib/services/maia/Access/updateAccess.spec.js +137 -0
  370. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  371. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
  372. package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
  373. package/lib/services/maia/Agents/connectors.spec.js +496 -0
  374. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  375. package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
  376. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  377. package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
  378. package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
  379. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
  380. package/lib/services/maia/Agents/getAgents.helpers.js +241 -0
  381. package/lib/services/maia/Agents/getAgents.helpers.spec.js +325 -0
  382. package/lib/services/maia/Agents/getAgents.js +90 -282
  383. package/lib/services/maia/Agents/getAgents.spec.js +1135 -0
  384. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  385. package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
  386. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  387. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  388. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  389. package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
  390. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  391. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  392. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  393. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  394. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  395. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  396. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  397. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
  398. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +225 -0
  399. package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
  400. package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
  401. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  402. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
  403. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  404. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  405. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  406. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  407. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  408. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  409. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  410. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  411. package/lib/services/maia/client.spec.js +56 -0
  412. package/lib/services/utils/fetchCOR.spec.js +211 -0
  413. package/lib/services/utils/getCookie.spec.js +20 -0
  414. package/lib/services/utils/mapChatMessages.helpers.js +223 -0
  415. package/lib/services/utils/mapChatMessages.helpers.spec.js +336 -0
  416. package/lib/services/utils/mapChatMessages.js +25 -254
  417. package/lib/services/utils/mapChatMessages.spec.js +254 -0
  418. package/lib/store/chatsSidebarOptimistic.spec.js +145 -0
  419. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  420. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  421. package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
  422. package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
  423. package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
  424. package/lib/store/sessions/sessionNotifications.js +35 -41
  425. package/lib/store/sessions/sessionNotifications.spec.js +106 -0
  426. package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
  427. package/lib/store/sessions/sessionStreamManager.helpers.spec.js +177 -0
  428. package/lib/store/sessions/sessionStreamManager.js +209 -277
  429. package/lib/store/sessions/sessionStreamManager.spec.js +939 -0
  430. package/lib/store/sessions/sessions.types.spec.js +16 -0
  431. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  432. package/lib/store/useChatsStore.spec.js +619 -0
  433. package/lib/store/useFaqsStore.spec.js +57 -0
  434. package/lib/styles/cascade.js +29 -3
  435. package/lib/styles/transitions.js +3 -1
  436. package/lib/test/mockSseStream.js +121 -0
  437. package/lib/test/streamdownCodeMock.js +6 -0
  438. package/lib/test/streamdownMock.js +12 -0
  439. package/lib/types/Chat.js +1 -1
  440. package/lib/types/agentModal.js +1 -1
  441. package/lib/types/global.d.js +1 -1
  442. package/lib/types/reasoning.js +1 -1
  443. package/lib/utils/actionCategoryMap.spec.js +18 -0
  444. package/lib/utils/agentDisplayName.spec.js +48 -0
  445. package/lib/utils/autoApproveStorage.spec.js +25 -0
  446. package/lib/utils/chatInputFiles.spec.js +39 -0
  447. package/lib/utils/contextMentionIcons.spec.js +41 -0
  448. package/lib/utils/contextMentionLabel.spec.js +13 -0
  449. package/lib/utils/contextMentionTriggers.spec.js +44 -0
  450. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  451. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  452. package/lib/utils/entityLinkRender.spec.js +72 -0
  453. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  454. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  455. package/lib/utils/formatUnreadCount.spec.js +12 -0
  456. package/lib/utils/getUnitFileSize.spec.js +18 -0
  457. package/lib/utils/hitlAnalytics.spec.js +136 -0
  458. package/lib/utils/hoursPlannerQuickActionType.js +74 -1
  459. package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
  460. package/lib/utils/imagePreprocessor.helpers.js +28 -0
  461. package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
  462. package/lib/utils/imagePreprocessor.js +12 -37
  463. package/lib/utils/imagePreprocessor.spec.js +112 -0
  464. package/lib/utils/maiaPageRoute.js +24 -0
  465. package/lib/utils/maiaPageRoute.spec.js +23 -0
  466. package/lib/utils/mapBackendLang.spec.js +19 -0
  467. package/lib/utils/navigateContextEntity.spec.js +50 -0
  468. package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
  469. package/lib/utils/openTaskInCorPanel.spec.js +43 -0
  470. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  471. package/lib/utils/reasoningMappers.spec.js +103 -0
  472. package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
  473. package/lib/utils/renderContextMentions.helpers.js +110 -0
  474. package/lib/utils/renderContextMentions.helpers.spec.js +87 -0
  475. package/lib/utils/renderContextMentions.js +4 -110
  476. package/lib/utils/renderContextMentions.spec.js +268 -0
  477. package/lib/utils/retryCompletion.spec.js +181 -0
  478. package/lib/utils/skillContentSize.spec.js +13 -0
  479. package/lib/utils/slashCommandMarker.spec.js +43 -0
  480. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  481. package/lib/utils/sseStreamContent.spec.js +31 -0
  482. package/lib/utils/streamActivityMessages.helpers.js +223 -0
  483. package/lib/utils/streamActivityMessages.helpers.spec.js +84 -0
  484. package/lib/utils/streamActivityMessages.js +33 -238
  485. package/lib/utils/streamActivityMessages.spec.js +336 -0
  486. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  487. package/package.json +2 -2
  488. package/README.md +0 -2
  489. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +0 -53
  490. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +0 -8
  491. package/lib/components/atoms/ContextCompactedNotice/index.js +0 -2
  492. package/lib/types/contextCompaction.js +0 -48
  493. package/lib/types/jest-dom.d.js +0 -2
@@ -0,0 +1,370 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ import { CORUserRole, isCollaboratorRole, isManagerRole } from '../../../context/cor-user';
5
+ export var parseHomeNumericId = function parseHomeNumericId(value) {
6
+ if (value === null || value === undefined || value === '') return null;
7
+ var parsed = Number(value);
8
+ return Number.isFinite(parsed) ? parsed : null;
9
+ };
10
+ export var getAllowedRecentContextTypes = function getAllowedRecentContextTypes(roleId) {
11
+ var normalizedRoleId = Number(roleId);
12
+ if (normalizedRoleId === CORUserRole.CLEVEL || normalizedRoleId === CORUserRole.DIRECTOR || normalizedRoleId === CORUserRole.PROJECT_MANAGER) {
13
+ return new Set(['client', 'project', 'task']);
14
+ }
15
+ if (isCollaboratorRole(roleId)) {
16
+ return new Set(['task']);
17
+ }
18
+ return new Set();
19
+ };
20
+ export var resolveHasPinnedContext = function resolveHasPinnedContext(params) {
21
+ return Boolean(params.taskId || params.chipsProjectId || params.clientId || params.projectId);
22
+ };
23
+ export var resolvePinnedEntityType = function resolvePinnedEntityType(params) {
24
+ if (params.taskId) return 'task';
25
+ if (params.chipsProjectId || params.projectId) return 'project';
26
+ if (params.clientId) return 'client';
27
+ return undefined;
28
+ };
29
+ export var resolveOrchestratorHomeLayout = function resolveOrchestratorHomeLayout(params) {
30
+ var isHeaderHome = params.isMaia && params.section === 'header' && params.agentType === 'orchestrator';
31
+ var isOrchestrator = params.isMaia && params.agentType === 'orchestrator';
32
+ var isPlannerHome = params.section === 'planner' && isOrchestrator;
33
+ var isSectionOrchestratorHome = isOrchestrator && !isHeaderHome && !isPlannerHome;
34
+ var isRecentContextsStep = isOrchestrator && !params.hasPinnedContext && !isPlannerHome;
35
+ var isHeaderTaskContextHome = params.section === 'header' && isRecentContextsStep && (isCollaboratorRole(params.roleId) || isManagerRole(params.roleId));
36
+ var isHeaderHoursAgentHome = isHeaderTaskContextHome && params.hasHoursSubagent;
37
+ var isHeaderManagerHoursHome = isHeaderHoursAgentHome && isManagerRole(params.roleId);
38
+ var isContextHomeStep = isHeaderHome && params.hasPinnedContext;
39
+ var isLeftAlignedOrchestratorHome = isSectionOrchestratorHome || isContextHomeStep;
40
+ return {
41
+ isHeaderHome: isHeaderHome,
42
+ isOrchestrator: isOrchestrator,
43
+ isPlannerHome: isPlannerHome,
44
+ isSectionOrchestratorHome: isSectionOrchestratorHome,
45
+ hasPinnedContext: params.hasPinnedContext,
46
+ isRecentContextsStep: isRecentContextsStep,
47
+ isHeaderTaskContextHome: isHeaderTaskContextHome,
48
+ isHeaderHoursAgentHome: isHeaderHoursAgentHome,
49
+ isHeaderManagerHoursHome: isHeaderManagerHoursHome,
50
+ isContextHomeStep: isContextHomeStep,
51
+ isLeftAlignedOrchestratorHome: isLeftAlignedOrchestratorHome
52
+ };
53
+ };
54
+ export var resolveHeaderTaskContextSubtitleKey = function resolveHeaderTaskContextSubtitleKey(params) {
55
+ if (params.isHeaderHoursAgentHome) {
56
+ if (params.isHeaderManagerHoursHome) return 'homeMenu.contextHome.subtitleManagerWithHours';
57
+ return 'homeMenu.contextHome.subtitleCollaboratorWithHours';
58
+ }
59
+ if (params.isManager) return 'homeMenu.contextHome.subtitle';
60
+ return 'homeMenu.contextHome.subtitleCollaborator';
61
+ };
62
+ export var resolveActiveContextFromGlobal = function resolveActiveContextFromGlobal(params) {
63
+ var _params$task, _params$chipsProject, _params$client;
64
+ if (params.selectedContext) return params.selectedContext;
65
+ if (!params.isContextHomeStep) return null;
66
+ if ((_params$task = params.task) !== null && _params$task !== void 0 && _params$task.id) {
67
+ return {
68
+ type: 'task',
69
+ id: params.task.id,
70
+ name: params.task.name
71
+ };
72
+ }
73
+ if ((_params$chipsProject = params.chipsProject) !== null && _params$chipsProject !== void 0 && _params$chipsProject.projectId) {
74
+ return {
75
+ type: 'project',
76
+ id: params.chipsProject.projectId,
77
+ name: params.chipsProject.projectName
78
+ };
79
+ }
80
+ if ((_params$client = params.client) !== null && _params$client !== void 0 && _params$client.id) {
81
+ return {
82
+ type: 'client',
83
+ id: params.client.id,
84
+ name: params.client.name
85
+ };
86
+ }
87
+ return null;
88
+ };
89
+ export var resolveFaqsContextEntityType = function resolveFaqsContextEntityType(params) {
90
+ if (params.isPlannerHome || params.isRecentContextsStep) return undefined;
91
+ if (params.isHeaderHome) {
92
+ var _params$activeContext;
93
+ return params.isContextHomeStep ? (_params$activeContext = params.activeContextType) !== null && _params$activeContext !== void 0 ? _params$activeContext : params.pinnedEntityType : undefined;
94
+ }
95
+ return params.pinnedEntityType;
96
+ };
97
+ export var resolveFuasSection = function resolveFuasSection(params) {
98
+ if (params.isPlannerHome) return 'planner';
99
+ if (!params.isHeaderHome && params.pinnedEntityType) return params.pinnedEntityType;
100
+ return params.section;
101
+ };
102
+ export var resolveRealListsAgentId = function resolveRealListsAgentId(params) {
103
+ if (!params.isMaia || params.isMaiaker) return undefined;
104
+ if (params.isRecentContextsStep) return undefined;
105
+ if (params.isHeaderHome) return params.isContextHomeStep ? params.agentId : undefined;
106
+ return params.agentId;
107
+ };
108
+ export var resolveRealListsEntityType = function resolveRealListsEntityType(params) {
109
+ var _params$activeContext2;
110
+ if (params.isPlannerHome) return 'planner';
111
+ if (!params.isHeaderHome) return params.pinnedEntityType;
112
+ return params.isContextHomeStep ? (_params$activeContext2 = params.activeContextType) !== null && _params$activeContext2 !== void 0 ? _params$activeContext2 : params.pinnedEntityType : undefined;
113
+ };
114
+ export var resolveAllowedRecentContextTypes = function resolveAllowedRecentContextTypes(params) {
115
+ if (params.isHeaderManagerHoursHome) return getAllowedRecentContextTypes(params.roleId);
116
+ if (params.isHeaderTaskContextHome && isManagerRole(params.roleId)) {
117
+ return getAllowedRecentContextTypes(params.roleId);
118
+ }
119
+ if (params.isHeaderTaskContextHome) return new Set(['task']);
120
+ return getAllowedRecentContextTypes(params.roleId);
121
+ };
122
+ export var resolveProjectSummaryFeatureAccess = function resolveProjectSummaryFeatureAccess(windowLike) {
123
+ return String(windowLike.MAIA_PROJECT_SUMMARY_FEATURE_ACCESS).toLowerCase() === 'true' || String(windowLike.maiaProjectSummaryAccess).toLowerCase() === 'true';
124
+ };
125
+ export var resolveMaiaHomeLang = function resolveMaiaHomeLang(language) {
126
+ return language === 'br' ? 'pt' : language;
127
+ };
128
+ export var pickAgentIntroduction = function pickAgentIntroduction(intro) {
129
+ var random = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Math.random;
130
+ if (!intro) return '';
131
+ if (Array.isArray(intro) && intro.length > 0) {
132
+ return intro[Math.floor(random() * intro.length)];
133
+ }
134
+ return typeof intro === 'string' ? intro : '';
135
+ };
136
+ export var resolveHomeGreeting = function resolveHomeGreeting(params) {
137
+ if (params.isMaiaker || params.isPlannerHome || params.isRecentContextsStep) return '';
138
+ if (params.isMaia && params.pinnedEntityType && params.contextGreeting) {
139
+ return params.contextGreeting;
140
+ }
141
+ return pickAgentIntroduction(params.agentIntroduction, params.random);
142
+ };
143
+ export var resolveShouldShowFaqs = function resolveShouldShowFaqs(params) {
144
+ return params.isMaia && params.isClientContextForFaqs && !params.isRecentContextsStep && (params.isContextHomeStep || !params.isHeaderHome && params.faqsAccess) && !params.isMaiaker && (params.faqsCount > 0 || params.faqsLoading);
145
+ };
146
+ export var resolveShouldShowFuas = function resolveShouldShowFuas(params) {
147
+ return !params.isRecentContextsStep && !params.isMaiaker && (params.isContextHomeStep || !params.isHeaderHome) && (params.fuasCount > 0 || params.fuasLoading);
148
+ };
149
+ export var resolveHomeScrollGradients = function resolveHomeScrollGradients(scrollTop, scrollHeight, clientHeight) {
150
+ var isScrollable = scrollHeight > clientHeight;
151
+ var isAtTop = scrollTop === 0;
152
+ var isAtBottom = scrollTop + clientHeight >= scrollHeight - 1;
153
+ return {
154
+ showTop: isScrollable && !isAtTop,
155
+ showBottom: isScrollable && !isAtBottom
156
+ };
157
+ };
158
+ export var resolveRecentContextPinOutcome = function resolveRecentContextPinOutcome(context, projectFallbackLabel) {
159
+ var _context$parents, _context$parents2, _context$parents3, _context$parents4;
160
+ var contextId = parseHomeNumericId(context.id);
161
+ var clientId = parseHomeNumericId((_context$parents = context.parents) === null || _context$parents === void 0 ? void 0 : _context$parents.client_id);
162
+ var projectId = parseHomeNumericId((_context$parents2 = context.parents) === null || _context$parents2 === void 0 ? void 0 : _context$parents2.project_id);
163
+ var clientName = ((_context$parents3 = context.parents) === null || _context$parents3 === void 0 ? void 0 : _context$parents3.client_name) || '';
164
+ var projectName = ((_context$parents4 = context.parents) === null || _context$parents4 === void 0 ? void 0 : _context$parents4.project_name) || '';
165
+ if (context.type === 'client') {
166
+ if (contextId == null) return {
167
+ kind: 'invalid'
168
+ };
169
+ return {
170
+ kind: 'client',
171
+ clientId: contextId,
172
+ name: context.name
173
+ };
174
+ }
175
+ if (context.type === 'project') {
176
+ if (contextId == null) return {
177
+ kind: 'invalid'
178
+ };
179
+ return _objectSpread(_objectSpread({
180
+ kind: 'project',
181
+ projectId: contextId,
182
+ name: context.name
183
+ }, clientId != null ? {
184
+ clientId: clientId
185
+ } : {}), {}, {
186
+ clientName: clientName
187
+ });
188
+ }
189
+ if (context.type === 'task') {
190
+ var label = projectName || (projectId != null ? "".concat(projectFallbackLabel, " ").concat(projectId) : '');
191
+ return _objectSpread(_objectSpread(_objectSpread({
192
+ kind: 'task',
193
+ taskId: context.id,
194
+ name: context.name
195
+ }, projectId != null ? {
196
+ projectId: projectId
197
+ } : {}), clientId != null ? {
198
+ clientId: clientId
199
+ } : {}), {}, {
200
+ clientName: clientName,
201
+ projectName: projectName,
202
+ projectLabel: label
203
+ });
204
+ }
205
+ return {
206
+ kind: 'invalid'
207
+ };
208
+ };
209
+ export var resolveFloatingCustomCenter = function resolveFloatingCustomCenter(floating, agentType) {
210
+ return Boolean(floating && agentType === 'custom');
211
+ };
212
+ export var filterRecentContextsByTypes = function filterRecentContextsByTypes(contexts, allowedTypes) {
213
+ return contexts.filter(function (context) {
214
+ return allowedTypes.has(context.type);
215
+ });
216
+ };
217
+ export var buildRecentContextSkeletonKeys = function buildRecentContextSkeletonKeys(limit) {
218
+ return Array.from({
219
+ length: limit
220
+ }, function (_, index) {
221
+ return "recent-context-skeleton-".concat(index + 1);
222
+ });
223
+ };
224
+ export var resolveShowRecentContextsBlock = function resolveShowRecentContextsBlock(isRecentContextsStep, recentContextsLoading, recentContextsCount) {
225
+ return isRecentContextsStep && (recentContextsLoading || recentContextsCount > 0);
226
+ };
227
+ export var resolvePlannerFuasVisibility = function resolvePlannerFuasVisibility(params) {
228
+ var shouldShowPlannerFuasLoading = params.isHeaderHoursAgentHome && params.headerHoursFuasLoading && params.headerHoursFuasCount === 0;
229
+ var shouldShowPlannerFuasContent = params.isHeaderHoursAgentHome && params.headerHoursFuasCount > 0;
230
+ return {
231
+ shouldShowPlannerFuasLoading: shouldShowPlannerFuasLoading,
232
+ shouldShowPlannerFuasContent: shouldShowPlannerFuasContent,
233
+ shouldShowPlannerFuas: shouldShowPlannerFuasLoading || shouldShowPlannerFuasContent
234
+ };
235
+ };
236
+ export var resolveHomeDynamicPanelVisibility = function resolveHomeDynamicPanelVisibility(params) {
237
+ var showFAQs = Boolean(params.showRecentContextsBlock || params.shouldShowFaqs || params.shouldShowFuas || params.shouldShowPlannerFuas || params.showProjectSummaryCard || params.isMaiaker);
238
+ var showDynamicSection = params.showRecentContextsBlock || params.shouldShowFaqs || params.shouldShowFuas || params.shouldShowPlannerFuas || params.isMaiaker;
239
+ return {
240
+ showFAQs: showFAQs,
241
+ showDynamicSection: showDynamicSection,
242
+ homeScrollableLayout: showFAQs
243
+ };
244
+ };
245
+ export var resolveMaiaHeaderStackLayout = function resolveMaiaHeaderStackLayout(params) {
246
+ var contentAlignStart = params.isPlannerHome || params.isHeaderTaskContextHome || params.isLeftAlignedOrchestratorHome;
247
+ var maiaHeaderStackNeedsGap = params.isRecentContextsStep && !params.isHeaderTaskContextHome && !params.isPlannerHome || !params.isRecentContextsStep && params.hasGreeting && !params.isPlannerHome && !params.isHeaderTaskContextHome && !params.isLeftAlignedOrchestratorHome;
248
+ return {
249
+ contentAlignStart: contentAlignStart,
250
+ maiaHeaderStackNeedsGap: maiaHeaderStackNeedsGap,
251
+ fixedHomeContentWidthCollaborator: params.isHeaderTaskContextHome || params.isLeftAlignedOrchestratorHome
252
+ };
253
+ };
254
+ export var resolveShowAgentIntroduction = function resolveShowAgentIntroduction(section, isMaia, hasIntroduction) {
255
+ return section !== 'project' && !isMaia && hasIntroduction;
256
+ };
257
+ export var buildFaqsFetchKey = function buildFaqsFetchKey(agentId, lang, entityType) {
258
+ return "".concat(agentId, "-").concat(lang, "-").concat(entityType !== null && entityType !== void 0 ? entityType : 'all');
259
+ };
260
+ export var shouldRefetchFaqs = function shouldRefetchFaqs(currentKey, lastKey) {
261
+ return currentKey !== lastKey;
262
+ };
263
+ export var shouldClearPinnedContextOnHomeStart = function shouldClearPinnedContextOnHomeStart(isHeaderManagerHoursHome, fuaId) {
264
+ return Boolean(isHeaderManagerHoursHome && fuaId);
265
+ };
266
+ export var resolveRecentContextsSectionCopyKeys = function resolveRecentContextsSectionCopyKeys(params) {
267
+ if (params.isHeaderManagerHoursHome) {
268
+ return {
269
+ titleKey: 'homeMenu.contextHome.recentContextsSectionManager.title',
270
+ subtitleKey: 'homeMenu.contextHome.recentContextsSectionManager.subtitle'
271
+ };
272
+ }
273
+ return {
274
+ titleKey: 'homeMenu.contextHome.recentTasksSection.title',
275
+ subtitleKey: 'homeMenu.contextHome.recentTasksSection.subtitle'
276
+ };
277
+ };
278
+ export var resolveOrchestratorRecentContextsSubtitleKey = function resolveOrchestratorRecentContextsSubtitleKey(isCollaborator) {
279
+ return isCollaborator ? 'homeMenu.contextHome.subtitleCollaborator' : 'homeMenu.contextHome.subtitle';
280
+ };
281
+ export var buildPinGlobalContextPatch = function buildPinGlobalContextPatch(pinOutcome) {
282
+ if (pinOutcome.kind === 'invalid') return null;
283
+ var cleared = {
284
+ client: null,
285
+ project: null,
286
+ task: null,
287
+ chipsProject: null
288
+ };
289
+ if (pinOutcome.kind === 'client') {
290
+ return _objectSpread(_objectSpread({}, cleared), {}, {
291
+ client: {
292
+ id: pinOutcome.clientId,
293
+ name: pinOutcome.name
294
+ }
295
+ });
296
+ }
297
+ if (pinOutcome.kind === 'project') {
298
+ return _objectSpread(_objectSpread({}, cleared), {}, {
299
+ project: _objectSpread({
300
+ id: pinOutcome.projectId,
301
+ name: pinOutcome.name
302
+ }, pinOutcome.clientId != null ? {
303
+ clientId: pinOutcome.clientId,
304
+ client: {
305
+ id: pinOutcome.clientId,
306
+ name: pinOutcome.clientName
307
+ }
308
+ } : {}),
309
+ chipsProject: {
310
+ projectId: String(pinOutcome.projectId),
311
+ projectName: pinOutcome.name,
312
+ clientName: pinOutcome.clientName
313
+ }
314
+ });
315
+ }
316
+ var patch = _objectSpread(_objectSpread({}, cleared), {}, {
317
+ task: _objectSpread(_objectSpread({
318
+ id: pinOutcome.taskId,
319
+ name: pinOutcome.name
320
+ }, pinOutcome.projectId != null ? {
321
+ projectId: pinOutcome.projectId
322
+ } : {}), pinOutcome.clientId != null ? {
323
+ clientId: pinOutcome.clientId
324
+ } : {})
325
+ });
326
+ if (pinOutcome.clientId != null) {
327
+ patch = _objectSpread(_objectSpread({}, patch), {}, {
328
+ client: {
329
+ id: pinOutcome.clientId,
330
+ name: pinOutcome.clientName
331
+ }
332
+ });
333
+ }
334
+ if (pinOutcome.projectId != null) {
335
+ patch = _objectSpread(_objectSpread({}, patch), {}, {
336
+ project: _objectSpread({
337
+ id: pinOutcome.projectId,
338
+ name: pinOutcome.projectLabel
339
+ }, pinOutcome.clientId != null ? {
340
+ clientId: pinOutcome.clientId,
341
+ client: {
342
+ id: pinOutcome.clientId,
343
+ name: pinOutcome.clientName
344
+ }
345
+ } : {}),
346
+ chipsProject: {
347
+ projectId: String(pinOutcome.projectId),
348
+ projectName: pinOutcome.projectLabel,
349
+ clientName: pinOutcome.clientName
350
+ }
351
+ });
352
+ }
353
+ return patch;
354
+ };
355
+ export var shouldCheckHomeScroll = function shouldCheckHomeScroll(container, homeScrollableLayout) {
356
+ return Boolean(container && homeScrollableLayout);
357
+ };
358
+ export var shouldResetHomeScrollGradients = function shouldResetHomeScrollGradients(homeScrollableLayout) {
359
+ return !homeScrollableLayout;
360
+ };
361
+ export var shouldObserveHomeScrollContent = function shouldObserveHomeScrollContent(scrollContent) {
362
+ return scrollContent instanceof Element;
363
+ };
364
+ export var resolveHomeContextGreetingKey = function resolveHomeContextGreetingKey(isMaia, pinnedEntityType) {
365
+ return isMaia && pinnedEntityType ? "homeMenu.contextHome.contextGreeting.".concat(pinnedEntityType) : undefined;
366
+ };
367
+ export var shouldRenderRecentContextsPanel = function shouldRenderRecentContextsPanel(isRecentContextsStep) {
368
+ return isRecentContextsStep;
369
+ };
370
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT1JVc2VyUm9sZSIsImlzQ29sbGFib3JhdG9yUm9sZSIsImlzTWFuYWdlclJvbGUiLCJwYXJzZUhvbWVOdW1lcmljSWQiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsInBhcnNlZCIsIk51bWJlciIsImlzRmluaXRlIiwiZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyIsInJvbGVJZCIsIm5vcm1hbGl6ZWRSb2xlSWQiLCJDTEVWRUwiLCJESVJFQ1RPUiIsIlBST0pFQ1RfTUFOQUdFUiIsIlNldCIsInJlc29sdmVIYXNQaW5uZWRDb250ZXh0IiwicGFyYW1zIiwiQm9vbGVhbiIsInRhc2tJZCIsImNoaXBzUHJvamVjdElkIiwiY2xpZW50SWQiLCJwcm9qZWN0SWQiLCJyZXNvbHZlUGlubmVkRW50aXR5VHlwZSIsInJlc29sdmVPcmNoZXN0cmF0b3JIb21lTGF5b3V0IiwiaXNIZWFkZXJIb21lIiwiaXNNYWlhIiwic2VjdGlvbiIsImFnZW50VHlwZSIsImlzT3JjaGVzdHJhdG9yIiwiaXNQbGFubmVySG9tZSIsImlzU2VjdGlvbk9yY2hlc3RyYXRvckhvbWUiLCJpc1JlY2VudENvbnRleHRzU3RlcCIsImhhc1Bpbm5lZENvbnRleHQiLCJpc0hlYWRlclRhc2tDb250ZXh0SG9tZSIsImlzSGVhZGVySG91cnNBZ2VudEhvbWUiLCJoYXNIb3Vyc1N1YmFnZW50IiwiaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lIiwiaXNDb250ZXh0SG9tZVN0ZXAiLCJpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSIsInJlc29sdmVIZWFkZXJUYXNrQ29udGV4dFN1YnRpdGxlS2V5IiwiaXNNYW5hZ2VyIiwicmVzb2x2ZUFjdGl2ZUNvbnRleHRGcm9tR2xvYmFsIiwiX3BhcmFtcyR0YXNrIiwiX3BhcmFtcyRjaGlwc1Byb2plY3QiLCJfcGFyYW1zJGNsaWVudCIsInNlbGVjdGVkQ29udGV4dCIsInRhc2siLCJpZCIsInR5cGUiLCJuYW1lIiwiY2hpcHNQcm9qZWN0IiwicHJvamVjdE5hbWUiLCJjbGllbnQiLCJyZXNvbHZlRmFxc0NvbnRleHRFbnRpdHlUeXBlIiwiX3BhcmFtcyRhY3RpdmVDb250ZXh0IiwiYWN0aXZlQ29udGV4dFR5cGUiLCJwaW5uZWRFbnRpdHlUeXBlIiwicmVzb2x2ZUZ1YXNTZWN0aW9uIiwicmVzb2x2ZVJlYWxMaXN0c0FnZW50SWQiLCJpc01haWFrZXIiLCJhZ2VudElkIiwicmVzb2x2ZVJlYWxMaXN0c0VudGl0eVR5cGUiLCJfcGFyYW1zJGFjdGl2ZUNvbnRleHQyIiwicmVzb2x2ZUFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMiLCJyZXNvbHZlUHJvamVjdFN1bW1hcnlGZWF0dXJlQWNjZXNzIiwid2luZG93TGlrZSIsIlN0cmluZyIsIk1BSUFfUFJPSkVDVF9TVU1NQVJZX0ZFQVRVUkVfQUNDRVNTIiwidG9Mb3dlckNhc2UiLCJtYWlhUHJvamVjdFN1bW1hcnlBY2Nlc3MiLCJyZXNvbHZlTWFpYUhvbWVMYW5nIiwibGFuZ3VhZ2UiLCJwaWNrQWdlbnRJbnRyb2R1Y3Rpb24iLCJpbnRybyIsInJhbmRvbSIsImFyZ3VtZW50cyIsImxlbmd0aCIsIk1hdGgiLCJBcnJheSIsImlzQXJyYXkiLCJmbG9vciIsInJlc29sdmVIb21lR3JlZXRpbmciLCJjb250ZXh0R3JlZXRpbmciLCJhZ2VudEludHJvZHVjdGlvbiIsInJlc29sdmVTaG91bGRTaG93RmFxcyIsImlzQ2xpZW50Q29udGV4dEZvckZhcXMiLCJmYXFzQWNjZXNzIiwiZmFxc0NvdW50IiwiZmFxc0xvYWRpbmciLCJyZXNvbHZlU2hvdWxkU2hvd0Z1YXMiLCJmdWFzQ291bnQiLCJmdWFzTG9hZGluZyIsInJlc29sdmVIb21lU2Nyb2xsR3JhZGllbnRzIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiaXNTY3JvbGxhYmxlIiwiaXNBdFRvcCIsImlzQXRCb3R0b20iLCJzaG93VG9wIiwic2hvd0JvdHRvbSIsInJlc29sdmVSZWNlbnRDb250ZXh0UGluT3V0Y29tZSIsImNvbnRleHQiLCJwcm9qZWN0RmFsbGJhY2tMYWJlbCIsIl9jb250ZXh0JHBhcmVudHMiLCJfY29udGV4dCRwYXJlbnRzMiIsIl9jb250ZXh0JHBhcmVudHMzIiwiX2NvbnRleHQkcGFyZW50czQiLCJjb250ZXh0SWQiLCJwYXJlbnRzIiwiY2xpZW50X2lkIiwicHJvamVjdF9pZCIsImNsaWVudE5hbWUiLCJjbGllbnRfbmFtZSIsInByb2plY3RfbmFtZSIsImtpbmQiLCJfb2JqZWN0U3ByZWFkIiwibGFiZWwiLCJjb25jYXQiLCJwcm9qZWN0TGFiZWwiLCJyZXNvbHZlRmxvYXRpbmdDdXN0b21DZW50ZXIiLCJmbG9hdGluZyIsImZpbHRlclJlY2VudENvbnRleHRzQnlUeXBlcyIsImNvbnRleHRzIiwiYWxsb3dlZFR5cGVzIiwiZmlsdGVyIiwiaGFzIiwiYnVpbGRSZWNlbnRDb250ZXh0U2tlbGV0b25LZXlzIiwibGltaXQiLCJmcm9tIiwiXyIsImluZGV4IiwicmVzb2x2ZVNob3dSZWNlbnRDb250ZXh0c0Jsb2NrIiwicmVjZW50Q29udGV4dHNMb2FkaW5nIiwicmVjZW50Q29udGV4dHNDb3VudCIsInJlc29sdmVQbGFubmVyRnVhc1Zpc2liaWxpdHkiLCJzaG91bGRTaG93UGxhbm5lckZ1YXNMb2FkaW5nIiwiaGVhZGVySG91cnNGdWFzTG9hZGluZyIsImhlYWRlckhvdXJzRnVhc0NvdW50Iiwic2hvdWxkU2hvd1BsYW5uZXJGdWFzQ29udGVudCIsInNob3VsZFNob3dQbGFubmVyRnVhcyIsInJlc29sdmVIb21lRHluYW1pY1BhbmVsVmlzaWJpbGl0eSIsInNob3dGQVFzIiwic2hvd1JlY2VudENvbnRleHRzQmxvY2siLCJzaG91bGRTaG93RmFxcyIsInNob3VsZFNob3dGdWFzIiwic2hvd1Byb2plY3RTdW1tYXJ5Q2FyZCIsInNob3dEeW5hbWljU2VjdGlvbiIsImhvbWVTY3JvbGxhYmxlTGF5b3V0IiwicmVzb2x2ZU1haWFIZWFkZXJTdGFja0xheW91dCIsImNvbnRlbnRBbGlnblN0YXJ0IiwibWFpYUhlYWRlclN0YWNrTmVlZHNHYXAiLCJoYXNHcmVldGluZyIsImZpeGVkSG9tZUNvbnRlbnRXaWR0aENvbGxhYm9yYXRvciIsInJlc29sdmVTaG93QWdlbnRJbnRyb2R1Y3Rpb24iLCJoYXNJbnRyb2R1Y3Rpb24iLCJidWlsZEZhcXNGZXRjaEtleSIsImxhbmciLCJlbnRpdHlUeXBlIiwic2hvdWxkUmVmZXRjaEZhcXMiLCJjdXJyZW50S2V5IiwibGFzdEtleSIsInNob3VsZENsZWFyUGlubmVkQ29udGV4dE9uSG9tZVN0YXJ0IiwiZnVhSWQiLCJyZXNvbHZlUmVjZW50Q29udGV4dHNTZWN0aW9uQ29weUtleXMiLCJ0aXRsZUtleSIsInN1YnRpdGxlS2V5IiwicmVzb2x2ZU9yY2hlc3RyYXRvclJlY2VudENvbnRleHRzU3VidGl0bGVLZXkiLCJpc0NvbGxhYm9yYXRvciIsImJ1aWxkUGluR2xvYmFsQ29udGV4dFBhdGNoIiwicGluT3V0Y29tZSIsImNsZWFyZWQiLCJwcm9qZWN0IiwicGF0Y2giLCJzaG91bGRDaGVja0hvbWVTY3JvbGwiLCJjb250YWluZXIiLCJzaG91bGRSZXNldEhvbWVTY3JvbGxHcmFkaWVudHMiLCJzaG91bGRPYnNlcnZlSG9tZVNjcm9sbENvbnRlbnQiLCJzY3JvbGxDb250ZW50IiwiRWxlbWVudCIsInJlc29sdmVIb21lQ29udGV4dEdyZWV0aW5nS2V5Iiwic2hvdWxkUmVuZGVyUmVjZW50Q29udGV4dHNQYW5lbCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlIb21lL0NoYXRBSUhvbWUuaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDT1JVc2VyUm9sZSwgaXNDb2xsYWJvcmF0b3JSb2xlLCBpc01hbmFnZXJSb2xlIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB0eXBlIHsgU2VjdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlY2VudENvbnRleHRJdGVtLCBSZWNlbnRDb250ZXh0VHlwZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvUmVjZW50Q29udGV4dHMnXG5cbmV4cG9ydCBjb25zdCBwYXJzZUhvbWVOdW1lcmljSWQgPSAodmFsdWU/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIG51bGxcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKVxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzID0gKHJvbGVJZD86IENPUlVzZXJSb2xlIHwgbnVtYmVyIHwgc3RyaW5nKTogU2V0PFJlY2VudENvbnRleHRUeXBlPiA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSb2xlSWQgPSBOdW1iZXIocm9sZUlkKVxuICBpZiAoXG4gICAgbm9ybWFsaXplZFJvbGVJZCA9PT0gQ09SVXNlclJvbGUuQ0xFVkVMIHx8XG4gICAgbm9ybWFsaXplZFJvbGVJZCA9PT0gQ09SVXNlclJvbGUuRElSRUNUT1IgfHxcbiAgICBub3JtYWxpemVkUm9sZUlkID09PSBDT1JVc2VyUm9sZS5QUk9KRUNUX01BTkFHRVJcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoWydjbGllbnQnLCAncHJvamVjdCcsICd0YXNrJ10pXG4gIH1cbiAgaWYgKGlzQ29sbGFib3JhdG9yUm9sZShyb2xlSWQpKSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoWyd0YXNrJ10pXG4gIH1cbiAgcmV0dXJuIG5ldyBTZXQoKVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhhc1Bpbm5lZENvbnRleHQgPSAocGFyYW1zOiB7XG4gIHRhc2tJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgY2hpcHNQcm9qZWN0SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIGNsaWVudElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBwcm9qZWN0SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG59KTogYm9vbGVhbiA9PiBCb29sZWFuKHBhcmFtcy50YXNrSWQgfHwgcGFyYW1zLmNoaXBzUHJvamVjdElkIHx8IHBhcmFtcy5jbGllbnRJZCB8fCBwYXJhbXMucHJvamVjdElkKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVBpbm5lZEVudGl0eVR5cGUgPSAocGFyYW1zOiB7XG4gIHRhc2tJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgY2hpcHNQcm9qZWN0SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIGNsaWVudElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBwcm9qZWN0SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG59KTogUmVjZW50Q29udGV4dFR5cGUgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAocGFyYW1zLnRhc2tJZCkgcmV0dXJuICd0YXNrJ1xuICBpZiAocGFyYW1zLmNoaXBzUHJvamVjdElkIHx8IHBhcmFtcy5wcm9qZWN0SWQpIHJldHVybiAncHJvamVjdCdcbiAgaWYgKHBhcmFtcy5jbGllbnRJZCkgcmV0dXJuICdjbGllbnQnXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IHR5cGUgT3JjaGVzdHJhdG9ySG9tZUxheW91dCA9IHtcbiAgaXNIZWFkZXJIb21lOiBib29sZWFuXG4gIGlzT3JjaGVzdHJhdG9yOiBib29sZWFuXG4gIGlzUGxhbm5lckhvbWU6IGJvb2xlYW5cbiAgaXNTZWN0aW9uT3JjaGVzdHJhdG9ySG9tZTogYm9vbGVhblxuICBoYXNQaW5uZWRDb250ZXh0OiBib29sZWFuXG4gIGlzUmVjZW50Q29udGV4dHNTdGVwOiBib29sZWFuXG4gIGlzSGVhZGVyVGFza0NvbnRleHRIb21lOiBib29sZWFuXG4gIGlzSGVhZGVySG91cnNBZ2VudEhvbWU6IGJvb2xlYW5cbiAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lOiBib29sZWFuXG4gIGlzQ29udGV4dEhvbWVTdGVwOiBib29sZWFuXG4gIGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lOiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlT3JjaGVzdHJhdG9ySG9tZUxheW91dCA9IChwYXJhbXM6IHtcbiAgc2VjdGlvbjogU2VjdGlvblxuICBhZ2VudFR5cGU/OiBzdHJpbmdcbiAgaXNNYWlhOiBib29sZWFuXG4gIGhhc0hvdXJzU3ViYWdlbnQ6IGJvb2xlYW5cbiAgcm9sZUlkPzogQ09SVXNlclJvbGUgfCBudW1iZXIgfCBzdHJpbmdcbiAgaGFzUGlubmVkQ29udGV4dDogYm9vbGVhblxufSk6IE9yY2hlc3RyYXRvckhvbWVMYXlvdXQgPT4ge1xuICBjb25zdCBpc0hlYWRlckhvbWUgPSBwYXJhbXMuaXNNYWlhICYmIHBhcmFtcy5zZWN0aW9uID09PSAnaGVhZGVyJyAmJiBwYXJhbXMuYWdlbnRUeXBlID09PSAnb3JjaGVzdHJhdG9yJ1xuICBjb25zdCBpc09yY2hlc3RyYXRvciA9IHBhcmFtcy5pc01haWEgJiYgcGFyYW1zLmFnZW50VHlwZSA9PT0gJ29yY2hlc3RyYXRvcidcbiAgY29uc3QgaXNQbGFubmVySG9tZSA9IHBhcmFtcy5zZWN0aW9uID09PSAncGxhbm5lcicgJiYgaXNPcmNoZXN0cmF0b3JcbiAgY29uc3QgaXNTZWN0aW9uT3JjaGVzdHJhdG9ySG9tZSA9IGlzT3JjaGVzdHJhdG9yICYmICFpc0hlYWRlckhvbWUgJiYgIWlzUGxhbm5lckhvbWVcbiAgY29uc3QgaXNSZWNlbnRDb250ZXh0c1N0ZXAgPSBpc09yY2hlc3RyYXRvciAmJiAhcGFyYW1zLmhhc1Bpbm5lZENvbnRleHQgJiYgIWlzUGxhbm5lckhvbWVcbiAgY29uc3QgaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgPVxuICAgIHBhcmFtcy5zZWN0aW9uID09PSAnaGVhZGVyJyAmJlxuICAgIGlzUmVjZW50Q29udGV4dHNTdGVwICYmXG4gICAgKGlzQ29sbGFib3JhdG9yUm9sZShwYXJhbXMucm9sZUlkKSB8fCBpc01hbmFnZXJSb2xlKHBhcmFtcy5yb2xlSWQpKVxuICBjb25zdCBpc0hlYWRlckhvdXJzQWdlbnRIb21lID0gaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgJiYgcGFyYW1zLmhhc0hvdXJzU3ViYWdlbnRcbiAgY29uc3QgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lID0gaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSAmJiBpc01hbmFnZXJSb2xlKHBhcmFtcy5yb2xlSWQpXG4gIGNvbnN0IGlzQ29udGV4dEhvbWVTdGVwID0gaXNIZWFkZXJIb21lICYmIHBhcmFtcy5oYXNQaW5uZWRDb250ZXh0XG4gIGNvbnN0IGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lID0gaXNTZWN0aW9uT3JjaGVzdHJhdG9ySG9tZSB8fCBpc0NvbnRleHRIb21lU3RlcFxuXG4gIHJldHVybiB7XG4gICAgaXNIZWFkZXJIb21lLFxuICAgIGlzT3JjaGVzdHJhdG9yLFxuICAgIGlzUGxhbm5lckhvbWUsXG4gICAgaXNTZWN0aW9uT3JjaGVzdHJhdG9ySG9tZSxcbiAgICBoYXNQaW5uZWRDb250ZXh0OiBwYXJhbXMuaGFzUGlubmVkQ29udGV4dCxcbiAgICBpc1JlY2VudENvbnRleHRzU3RlcCxcbiAgICBpc0hlYWRlclRhc2tDb250ZXh0SG9tZSxcbiAgICBpc0hlYWRlckhvdXJzQWdlbnRIb21lLFxuICAgIGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSxcbiAgICBpc0NvbnRleHRIb21lU3RlcCxcbiAgICBpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhlYWRlclRhc2tDb250ZXh0U3VidGl0bGVLZXkgPSAocGFyYW1zOiB7XG4gIGlzSGVhZGVySG91cnNBZ2VudEhvbWU6IGJvb2xlYW5cbiAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lOiBib29sZWFuXG4gIGlzTWFuYWdlcjogYm9vbGVhblxufSk6IHN0cmluZyA9PiB7XG4gIGlmIChwYXJhbXMuaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSkge1xuICAgIGlmIChwYXJhbXMuaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lKSByZXR1cm4gJ2hvbWVNZW51LmNvbnRleHRIb21lLnN1YnRpdGxlTWFuYWdlcldpdGhIb3VycydcbiAgICByZXR1cm4gJ2hvbWVNZW51LmNvbnRleHRIb21lLnN1YnRpdGxlQ29sbGFib3JhdG9yV2l0aEhvdXJzJ1xuICB9XG4gIGlmIChwYXJhbXMuaXNNYW5hZ2VyKSByZXR1cm4gJ2hvbWVNZW51LmNvbnRleHRIb21lLnN1YnRpdGxlJ1xuICByZXR1cm4gJ2hvbWVNZW51LmNvbnRleHRIb21lLnN1YnRpdGxlQ29sbGFib3JhdG9yJ1xufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFjdGl2ZUNvbnRleHRGcm9tR2xvYmFsID0gKHBhcmFtczoge1xuICBpc0NvbnRleHRIb21lU3RlcDogYm9vbGVhblxuICBzZWxlY3RlZENvbnRleHQ6IFJlY2VudENvbnRleHRJdGVtIHwgbnVsbFxuICB0YXNrPzogeyBpZDogc3RyaW5nIHwgbnVtYmVyOyBuYW1lOiBzdHJpbmcgfSB8IG51bGxcbiAgY2hpcHNQcm9qZWN0PzogeyBwcm9qZWN0SWQ6IHN0cmluZzsgcHJvamVjdE5hbWU6IHN0cmluZyB9IHwgbnVsbFxuICBjbGllbnQ/OiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9IHwgbnVsbFxufSk6IFJlY2VudENvbnRleHRJdGVtIHwgbnVsbCA9PiB7XG4gIGlmIChwYXJhbXMuc2VsZWN0ZWRDb250ZXh0KSByZXR1cm4gcGFyYW1zLnNlbGVjdGVkQ29udGV4dFxuICBpZiAoIXBhcmFtcy5pc0NvbnRleHRIb21lU3RlcCkgcmV0dXJuIG51bGxcbiAgaWYgKHBhcmFtcy50YXNrPy5pZCkge1xuICAgIHJldHVybiB7IHR5cGU6ICd0YXNrJywgaWQ6IHBhcmFtcy50YXNrLmlkLCBuYW1lOiBwYXJhbXMudGFzay5uYW1lIH1cbiAgfVxuICBpZiAocGFyYW1zLmNoaXBzUHJvamVjdD8ucHJvamVjdElkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdwcm9qZWN0JyxcbiAgICAgIGlkOiBwYXJhbXMuY2hpcHNQcm9qZWN0LnByb2plY3RJZCxcbiAgICAgIG5hbWU6IHBhcmFtcy5jaGlwc1Byb2plY3QucHJvamVjdE5hbWUsXG4gICAgfVxuICB9XG4gIGlmIChwYXJhbXMuY2xpZW50Py5pZCkge1xuICAgIHJldHVybiB7IHR5cGU6ICdjbGllbnQnLCBpZDogcGFyYW1zLmNsaWVudC5pZCwgbmFtZTogcGFyYW1zLmNsaWVudC5uYW1lIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUZhcXNDb250ZXh0RW50aXR5VHlwZSA9IChwYXJhbXM6IHtcbiAgaXNQbGFubmVySG9tZTogYm9vbGVhblxuICBpc1JlY2VudENvbnRleHRzU3RlcDogYm9vbGVhblxuICBpc0hlYWRlckhvbWU6IGJvb2xlYW5cbiAgaXNDb250ZXh0SG9tZVN0ZXA6IGJvb2xlYW5cbiAgYWN0aXZlQ29udGV4dFR5cGU/OiBSZWNlbnRDb250ZXh0VHlwZVxuICBwaW5uZWRFbnRpdHlUeXBlPzogUmVjZW50Q29udGV4dFR5cGVcbn0pOiBSZWNlbnRDb250ZXh0VHlwZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChwYXJhbXMuaXNQbGFubmVySG9tZSB8fCBwYXJhbXMuaXNSZWNlbnRDb250ZXh0c1N0ZXApIHJldHVybiB1bmRlZmluZWRcbiAgaWYgKHBhcmFtcy5pc0hlYWRlckhvbWUpIHtcbiAgICByZXR1cm4gcGFyYW1zLmlzQ29udGV4dEhvbWVTdGVwID8gKHBhcmFtcy5hY3RpdmVDb250ZXh0VHlwZSA/PyBwYXJhbXMucGlubmVkRW50aXR5VHlwZSkgOiB1bmRlZmluZWRcbiAgfVxuICByZXR1cm4gcGFyYW1zLnBpbm5lZEVudGl0eVR5cGVcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVGdWFzU2VjdGlvbiA9IChwYXJhbXM6IHtcbiAgaXNQbGFubmVySG9tZTogYm9vbGVhblxuICBpc0hlYWRlckhvbWU6IGJvb2xlYW5cbiAgcGlubmVkRW50aXR5VHlwZT86IFJlY2VudENvbnRleHRUeXBlXG4gIHNlY3Rpb246IFNlY3Rpb25cbn0pOiBTZWN0aW9uID0+IHtcbiAgaWYgKHBhcmFtcy5pc1BsYW5uZXJIb21lKSByZXR1cm4gJ3BsYW5uZXInXG4gIGlmICghcGFyYW1zLmlzSGVhZGVySG9tZSAmJiBwYXJhbXMucGlubmVkRW50aXR5VHlwZSkgcmV0dXJuIHBhcmFtcy5waW5uZWRFbnRpdHlUeXBlXG4gIHJldHVybiBwYXJhbXMuc2VjdGlvblxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVJlYWxMaXN0c0FnZW50SWQgPSAocGFyYW1zOiB7XG4gIGlzTWFpYTogYm9vbGVhblxuICBpc01haWFrZXI6IGJvb2xlYW5cbiAgaXNSZWNlbnRDb250ZXh0c1N0ZXA6IGJvb2xlYW5cbiAgaXNIZWFkZXJIb21lOiBib29sZWFuXG4gIGlzQ29udGV4dEhvbWVTdGVwOiBib29sZWFuXG4gIGFnZW50SWQ/OiBzdHJpbmdcbn0pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIXBhcmFtcy5pc01haWEgfHwgcGFyYW1zLmlzTWFpYWtlcikgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAocGFyYW1zLmlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gdW5kZWZpbmVkXG4gIGlmIChwYXJhbXMuaXNIZWFkZXJIb21lKSByZXR1cm4gcGFyYW1zLmlzQ29udGV4dEhvbWVTdGVwID8gcGFyYW1zLmFnZW50SWQgOiB1bmRlZmluZWRcbiAgcmV0dXJuIHBhcmFtcy5hZ2VudElkXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUmVhbExpc3RzRW50aXR5VHlwZSA9IChwYXJhbXM6IHtcbiAgaXNQbGFubmVySG9tZTogYm9vbGVhblxuICBpc0hlYWRlckhvbWU6IGJvb2xlYW5cbiAgaXNDb250ZXh0SG9tZVN0ZXA6IGJvb2xlYW5cbiAgYWN0aXZlQ29udGV4dFR5cGU/OiBSZWNlbnRDb250ZXh0VHlwZVxuICBwaW5uZWRFbnRpdHlUeXBlPzogUmVjZW50Q29udGV4dFR5cGVcbn0pOiBSZWNlbnRDb250ZXh0VHlwZSB8ICdwbGFubmVyJyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChwYXJhbXMuaXNQbGFubmVySG9tZSkgcmV0dXJuICdwbGFubmVyJ1xuICBpZiAoIXBhcmFtcy5pc0hlYWRlckhvbWUpIHJldHVybiBwYXJhbXMucGlubmVkRW50aXR5VHlwZVxuICByZXR1cm4gcGFyYW1zLmlzQ29udGV4dEhvbWVTdGVwID8gKHBhcmFtcy5hY3RpdmVDb250ZXh0VHlwZSA/PyBwYXJhbXMucGlubmVkRW50aXR5VHlwZSkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzID0gKHBhcmFtczoge1xuICBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWU6IGJvb2xlYW5cbiAgaXNIZWFkZXJUYXNrQ29udGV4dEhvbWU6IGJvb2xlYW5cbiAgcm9sZUlkPzogQ09SVXNlclJvbGUgfCBudW1iZXIgfCBzdHJpbmdcbn0pOiBTZXQ8UmVjZW50Q29udGV4dFR5cGU+ID0+IHtcbiAgaWYgKHBhcmFtcy5pc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUpIHJldHVybiBnZXRBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzKHBhcmFtcy5yb2xlSWQpXG4gIGlmIChwYXJhbXMuaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgJiYgaXNNYW5hZ2VyUm9sZShwYXJhbXMucm9sZUlkKSkge1xuICAgIHJldHVybiBnZXRBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzKHBhcmFtcy5yb2xlSWQpXG4gIH1cbiAgaWYgKHBhcmFtcy5pc0hlYWRlclRhc2tDb250ZXh0SG9tZSkgcmV0dXJuIG5ldyBTZXQ8UmVjZW50Q29udGV4dFR5cGU+KFsndGFzayddKVxuICByZXR1cm4gZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyhwYXJhbXMucm9sZUlkKVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVByb2plY3RTdW1tYXJ5RmVhdHVyZUFjY2VzcyA9ICh3aW5kb3dMaWtlOiB7XG4gIE1BSUFfUFJPSkVDVF9TVU1NQVJZX0ZFQVRVUkVfQUNDRVNTPzogdW5rbm93blxuICBtYWlhUHJvamVjdFN1bW1hcnlBY2Nlc3M/OiB1bmtub3duXG59KTogYm9vbGVhbiA9PlxuICBTdHJpbmcod2luZG93TGlrZS5NQUlBX1BST0pFQ1RfU1VNTUFSWV9GRUFUVVJFX0FDQ0VTUykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8XG4gIFN0cmluZyh3aW5kb3dMaWtlLm1haWFQcm9qZWN0U3VtbWFyeUFjY2VzcykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlTWFpYUhvbWVMYW5nID0gKGxhbmd1YWdlOiBzdHJpbmcpOiBzdHJpbmcgPT4gKGxhbmd1YWdlID09PSAnYnInID8gJ3B0JyA6IGxhbmd1YWdlKVxuXG5leHBvcnQgY29uc3QgcGlja0FnZW50SW50cm9kdWN0aW9uID0gKGludHJvOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCwgcmFuZG9tID0gTWF0aC5yYW5kb20pOiBzdHJpbmcgPT4ge1xuICBpZiAoIWludHJvKSByZXR1cm4gJydcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW50cm8pICYmIGludHJvLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gaW50cm9bTWF0aC5mbG9vcihyYW5kb20oKSAqIGludHJvLmxlbmd0aCldXG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBpbnRybyA9PT0gJ3N0cmluZycgPyBpbnRybyA6ICcnXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlSG9tZUdyZWV0aW5nID0gKHBhcmFtczoge1xuICBpc01haWFrZXI6IGJvb2xlYW5cbiAgaXNQbGFubmVySG9tZTogYm9vbGVhblxuICBpc1JlY2VudENvbnRleHRzU3RlcDogYm9vbGVhblxuICBpc01haWE6IGJvb2xlYW5cbiAgcGlubmVkRW50aXR5VHlwZT86IFJlY2VudENvbnRleHRUeXBlXG4gIGNvbnRleHRHcmVldGluZz86IHN0cmluZ1xuICBhZ2VudEludHJvZHVjdGlvbj86IHN0cmluZyB8IHN0cmluZ1tdXG4gIHJhbmRvbT86ICgpID0+IG51bWJlclxufSk6IHN0cmluZyA9PiB7XG4gIGlmIChwYXJhbXMuaXNNYWlha2VyIHx8IHBhcmFtcy5pc1BsYW5uZXJIb21lIHx8IHBhcmFtcy5pc1JlY2VudENvbnRleHRzU3RlcCkgcmV0dXJuICcnXG4gIGlmIChwYXJhbXMuaXNNYWlhICYmIHBhcmFtcy5waW5uZWRFbnRpdHlUeXBlICYmIHBhcmFtcy5jb250ZXh0R3JlZXRpbmcpIHtcbiAgICByZXR1cm4gcGFyYW1zLmNvbnRleHRHcmVldGluZ1xuICB9XG4gIHJldHVybiBwaWNrQWdlbnRJbnRyb2R1Y3Rpb24ocGFyYW1zLmFnZW50SW50cm9kdWN0aW9uLCBwYXJhbXMucmFuZG9tKVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVNob3VsZFNob3dGYXFzID0gKHBhcmFtczoge1xuICBpc01haWE6IGJvb2xlYW5cbiAgaXNDbGllbnRDb250ZXh0Rm9yRmFxczogYm9vbGVhblxuICBpc1JlY2VudENvbnRleHRzU3RlcDogYm9vbGVhblxuICBpc0NvbnRleHRIb21lU3RlcDogYm9vbGVhblxuICBpc0hlYWRlckhvbWU6IGJvb2xlYW5cbiAgZmFxc0FjY2VzczogYm9vbGVhblxuICBpc01haWFrZXI6IGJvb2xlYW5cbiAgZmFxc0NvdW50OiBudW1iZXJcbiAgZmFxc0xvYWRpbmc6IGJvb2xlYW5cbn0pOiBib29sZWFuID0+XG4gIHBhcmFtcy5pc01haWEgJiZcbiAgcGFyYW1zLmlzQ2xpZW50Q29udGV4dEZvckZhcXMgJiZcbiAgIXBhcmFtcy5pc1JlY2VudENvbnRleHRzU3RlcCAmJlxuICAocGFyYW1zLmlzQ29udGV4dEhvbWVTdGVwIHx8ICghcGFyYW1zLmlzSGVhZGVySG9tZSAmJiBwYXJhbXMuZmFxc0FjY2VzcykpICYmXG4gICFwYXJhbXMuaXNNYWlha2VyICYmXG4gIChwYXJhbXMuZmFxc0NvdW50ID4gMCB8fCBwYXJhbXMuZmFxc0xvYWRpbmcpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2hvdWxkU2hvd0Z1YXMgPSAocGFyYW1zOiB7XG4gIGlzUmVjZW50Q29udGV4dHNTdGVwOiBib29sZWFuXG4gIGlzTWFpYWtlcjogYm9vbGVhblxuICBpc0NvbnRleHRIb21lU3RlcDogYm9vbGVhblxuICBpc0hlYWRlckhvbWU6IGJvb2xlYW5cbiAgZnVhc0NvdW50OiBudW1iZXJcbiAgZnVhc0xvYWRpbmc6IGJvb2xlYW5cbn0pOiBib29sZWFuID0+XG4gICFwYXJhbXMuaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiZcbiAgIXBhcmFtcy5pc01haWFrZXIgJiZcbiAgKHBhcmFtcy5pc0NvbnRleHRIb21lU3RlcCB8fCAhcGFyYW1zLmlzSGVhZGVySG9tZSkgJiZcbiAgKHBhcmFtcy5mdWFzQ291bnQgPiAwIHx8IHBhcmFtcy5mdWFzTG9hZGluZylcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVIb21lU2Nyb2xsR3JhZGllbnRzID0gKFxuICBzY3JvbGxUb3A6IG51bWJlcixcbiAgc2Nyb2xsSGVpZ2h0OiBudW1iZXIsXG4gIGNsaWVudEhlaWdodDogbnVtYmVyXG4pOiB7IHNob3dUb3A6IGJvb2xlYW47IHNob3dCb3R0b206IGJvb2xlYW4gfSA9PiB7XG4gIGNvbnN0IGlzU2Nyb2xsYWJsZSA9IHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodFxuICBjb25zdCBpc0F0VG9wID0gc2Nyb2xsVG9wID09PSAwXG4gIGNvbnN0IGlzQXRCb3R0b20gPSBzY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0IC0gMVxuICByZXR1cm4ge1xuICAgIHNob3dUb3A6IGlzU2Nyb2xsYWJsZSAmJiAhaXNBdFRvcCxcbiAgICBzaG93Qm90dG9tOiBpc1Njcm9sbGFibGUgJiYgIWlzQXRCb3R0b20sXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUmVjZW50Q29udGV4dFBpblByb2plY3RPdXRjb21lID0ge1xuICBraW5kOiAncHJvamVjdCdcbiAgcHJvamVjdElkOiBudW1iZXJcbiAgbmFtZTogc3RyaW5nXG4gIGNsaWVudElkPzogbnVtYmVyXG4gIGNsaWVudE5hbWU6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBSZWNlbnRDb250ZXh0UGluVGFza091dGNvbWUgPSB7XG4gIGtpbmQ6ICd0YXNrJ1xuICB0YXNrSWQ6IHN0cmluZyB8IG51bWJlclxuICBuYW1lOiBzdHJpbmdcbiAgcHJvamVjdElkPzogbnVtYmVyXG4gIGNsaWVudElkPzogbnVtYmVyXG4gIGNsaWVudE5hbWU6IHN0cmluZ1xuICBwcm9qZWN0TmFtZTogc3RyaW5nXG4gIHByb2plY3RMYWJlbDogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIFJlY2VudENvbnRleHRQaW5PdXRjb21lID1cbiAgfCB7IGtpbmQ6ICdpbnZhbGlkJyB9XG4gIHwgeyBraW5kOiAnY2xpZW50JzsgY2xpZW50SWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH1cbiAgfCBSZWNlbnRDb250ZXh0UGluUHJvamVjdE91dGNvbWVcbiAgfCBSZWNlbnRDb250ZXh0UGluVGFza091dGNvbWVcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVSZWNlbnRDb250ZXh0UGluT3V0Y29tZSA9IChcbiAgY29udGV4dDogUmVjZW50Q29udGV4dEl0ZW0sXG4gIHByb2plY3RGYWxsYmFja0xhYmVsOiBzdHJpbmdcbik6IFJlY2VudENvbnRleHRQaW5PdXRjb21lID0+IHtcbiAgY29uc3QgY29udGV4dElkID0gcGFyc2VIb21lTnVtZXJpY0lkKGNvbnRleHQuaWQpXG4gIGNvbnN0IGNsaWVudElkID0gcGFyc2VIb21lTnVtZXJpY0lkKGNvbnRleHQucGFyZW50cz8uY2xpZW50X2lkKVxuICBjb25zdCBwcm9qZWN0SWQgPSBwYXJzZUhvbWVOdW1lcmljSWQoY29udGV4dC5wYXJlbnRzPy5wcm9qZWN0X2lkKVxuICBjb25zdCBjbGllbnROYW1lID0gY29udGV4dC5wYXJlbnRzPy5jbGllbnRfbmFtZSB8fCAnJ1xuICBjb25zdCBwcm9qZWN0TmFtZSA9IGNvbnRleHQucGFyZW50cz8ucHJvamVjdF9uYW1lIHx8ICcnXG5cbiAgaWYgKGNvbnRleHQudHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICBpZiAoY29udGV4dElkID09IG51bGwpIHJldHVybiB7IGtpbmQ6ICdpbnZhbGlkJyB9XG4gICAgcmV0dXJuIHsga2luZDogJ2NsaWVudCcsIGNsaWVudElkOiBjb250ZXh0SWQsIG5hbWU6IGNvbnRleHQubmFtZSB9XG4gIH1cblxuICBpZiAoY29udGV4dC50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICBpZiAoY29udGV4dElkID09IG51bGwpIHJldHVybiB7IGtpbmQ6ICdpbnZhbGlkJyB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGtpbmQ6ICdwcm9qZWN0JyxcbiAgICAgIHByb2plY3RJZDogY29udGV4dElkLFxuICAgICAgbmFtZTogY29udGV4dC5uYW1lLFxuICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkIH0gOiB7fSksXG4gICAgICBjbGllbnROYW1lLFxuICAgIH1cbiAgfVxuXG4gIGlmIChjb250ZXh0LnR5cGUgPT09ICd0YXNrJykge1xuICAgIGNvbnN0IGxhYmVsID0gcHJvamVjdE5hbWUgfHwgKHByb2plY3RJZCAhPSBudWxsID8gYCR7cHJvamVjdEZhbGxiYWNrTGFiZWx9ICR7cHJvamVjdElkfWAgOiAnJylcbiAgICByZXR1cm4ge1xuICAgICAga2luZDogJ3Rhc2snLFxuICAgICAgdGFza0lkOiBjb250ZXh0LmlkLFxuICAgICAgbmFtZTogY29udGV4dC5uYW1lLFxuICAgICAgLi4uKHByb2plY3RJZCAhPSBudWxsID8geyBwcm9qZWN0SWQgfSA6IHt9KSxcbiAgICAgIC4uLihjbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZCB9IDoge30pLFxuICAgICAgY2xpZW50TmFtZSxcbiAgICAgIHByb2plY3ROYW1lLFxuICAgICAgcHJvamVjdExhYmVsOiBsYWJlbCxcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBraW5kOiAnaW52YWxpZCcgfVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUZsb2F0aW5nQ3VzdG9tQ2VudGVyID0gKGZsb2F0aW5nPzogYm9vbGVhbiwgYWdlbnRUeXBlPzogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKGZsb2F0aW5nICYmIGFnZW50VHlwZSA9PT0gJ2N1c3RvbScpXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJSZWNlbnRDb250ZXh0c0J5VHlwZXMgPSAoXG4gIGNvbnRleHRzOiBSZWNlbnRDb250ZXh0SXRlbVtdLFxuICBhbGxvd2VkVHlwZXM6IFNldDxSZWNlbnRDb250ZXh0VHlwZT5cbik6IFJlY2VudENvbnRleHRJdGVtW10gPT4gY29udGV4dHMuZmlsdGVyKGNvbnRleHQgPT4gYWxsb3dlZFR5cGVzLmhhcyhjb250ZXh0LnR5cGUpKVxuXG5leHBvcnQgY29uc3QgYnVpbGRSZWNlbnRDb250ZXh0U2tlbGV0b25LZXlzID0gKGxpbWl0OiBudW1iZXIpOiBzdHJpbmdbXSA9PlxuICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBsaW1pdCB9LCAoXywgaW5kZXgpID0+IGByZWNlbnQtY29udGV4dC1za2VsZXRvbi0ke2luZGV4ICsgMX1gKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVNob3dSZWNlbnRDb250ZXh0c0Jsb2NrID0gKFxuICBpc1JlY2VudENvbnRleHRzU3RlcDogYm9vbGVhbixcbiAgcmVjZW50Q29udGV4dHNMb2FkaW5nOiBib29sZWFuLFxuICByZWNlbnRDb250ZXh0c0NvdW50OiBudW1iZXJcbik6IGJvb2xlYW4gPT4gaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgKHJlY2VudENvbnRleHRzTG9hZGluZyB8fCByZWNlbnRDb250ZXh0c0NvdW50ID4gMClcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVQbGFubmVyRnVhc1Zpc2liaWxpdHkgPSAocGFyYW1zOiB7XG4gIGlzSGVhZGVySG91cnNBZ2VudEhvbWU6IGJvb2xlYW5cbiAgaGVhZGVySG91cnNGdWFzTG9hZGluZzogYm9vbGVhblxuICBoZWFkZXJIb3Vyc0Z1YXNDb3VudDogbnVtYmVyXG59KToge1xuICBzaG91bGRTaG93UGxhbm5lckZ1YXNMb2FkaW5nOiBib29sZWFuXG4gIHNob3VsZFNob3dQbGFubmVyRnVhc0NvbnRlbnQ6IGJvb2xlYW5cbiAgc2hvdWxkU2hvd1BsYW5uZXJGdWFzOiBib29sZWFuXG59ID0+IHtcbiAgY29uc3Qgc2hvdWxkU2hvd1BsYW5uZXJGdWFzTG9hZGluZyA9XG4gICAgcGFyYW1zLmlzSGVhZGVySG91cnNBZ2VudEhvbWUgJiYgcGFyYW1zLmhlYWRlckhvdXJzRnVhc0xvYWRpbmcgJiYgcGFyYW1zLmhlYWRlckhvdXJzRnVhc0NvdW50ID09PSAwXG4gIGNvbnN0IHNob3VsZFNob3dQbGFubmVyRnVhc0NvbnRlbnQgPSBwYXJhbXMuaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSAmJiBwYXJhbXMuaGVhZGVySG91cnNGdWFzQ291bnQgPiAwXG4gIHJldHVybiB7XG4gICAgc2hvdWxkU2hvd1BsYW5uZXJGdWFzTG9hZGluZyxcbiAgICBzaG91bGRTaG93UGxhbm5lckZ1YXNDb250ZW50LFxuICAgIHNob3VsZFNob3dQbGFubmVyRnVhczogc2hvdWxkU2hvd1BsYW5uZXJGdWFzTG9hZGluZyB8fCBzaG91bGRTaG93UGxhbm5lckZ1YXNDb250ZW50LFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlSG9tZUR5bmFtaWNQYW5lbFZpc2liaWxpdHkgPSAocGFyYW1zOiB7XG4gIHNob3dSZWNlbnRDb250ZXh0c0Jsb2NrOiBib29sZWFuXG4gIHNob3VsZFNob3dGYXFzOiBib29sZWFuXG4gIHNob3VsZFNob3dGdWFzOiBib29sZWFuXG4gIHNob3VsZFNob3dQbGFubmVyRnVhczogYm9vbGVhblxuICBpc01haWFrZXI6IGJvb2xlYW5cbiAgc2hvd1Byb2plY3RTdW1tYXJ5Q2FyZDogYm9vbGVhblxufSk6IHsgc2hvd0ZBUXM6IGJvb2xlYW47IHNob3dEeW5hbWljU2VjdGlvbjogYm9vbGVhbjsgaG9tZVNjcm9sbGFibGVMYXlvdXQ6IGJvb2xlYW4gfSA9PiB7XG4gIGNvbnN0IHNob3dGQVFzID0gQm9vbGVhbihcbiAgICBwYXJhbXMuc2hvd1JlY2VudENvbnRleHRzQmxvY2sgfHxcbiAgICBwYXJhbXMuc2hvdWxkU2hvd0ZhcXMgfHxcbiAgICBwYXJhbXMuc2hvdWxkU2hvd0Z1YXMgfHxcbiAgICBwYXJhbXMuc2hvdWxkU2hvd1BsYW5uZXJGdWFzIHx8XG4gICAgcGFyYW1zLnNob3dQcm9qZWN0U3VtbWFyeUNhcmQgfHxcbiAgICBwYXJhbXMuaXNNYWlha2VyXG4gIClcbiAgY29uc3Qgc2hvd0R5bmFtaWNTZWN0aW9uID1cbiAgICBwYXJhbXMuc2hvd1JlY2VudENvbnRleHRzQmxvY2sgfHxcbiAgICBwYXJhbXMuc2hvdWxkU2hvd0ZhcXMgfHxcbiAgICBwYXJhbXMuc2hvdWxkU2hvd0Z1YXMgfHxcbiAgICBwYXJhbXMuc2hvdWxkU2hvd1BsYW5uZXJGdWFzIHx8XG4gICAgcGFyYW1zLmlzTWFpYWtlclxuICByZXR1cm4geyBzaG93RkFRcywgc2hvd0R5bmFtaWNTZWN0aW9uLCBob21lU2Nyb2xsYWJsZUxheW91dDogc2hvd0ZBUXMgfVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZU1haWFIZWFkZXJTdGFja0xheW91dCA9IChwYXJhbXM6IHtcbiAgaXNQbGFubmVySG9tZTogYm9vbGVhblxuICBpc0hlYWRlclRhc2tDb250ZXh0SG9tZTogYm9vbGVhblxuICBpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZTogYm9vbGVhblxuICBpc1JlY2VudENvbnRleHRzU3RlcDogYm9vbGVhblxuICBoYXNHcmVldGluZzogYm9vbGVhblxufSk6IHtcbiAgY29udGVudEFsaWduU3RhcnQ6IGJvb2xlYW5cbiAgbWFpYUhlYWRlclN0YWNrTmVlZHNHYXA6IGJvb2xlYW5cbiAgZml4ZWRIb21lQ29udGVudFdpZHRoQ29sbGFib3JhdG9yOiBib29sZWFuXG59ID0+IHtcbiAgY29uc3QgY29udGVudEFsaWduU3RhcnQgPVxuICAgIHBhcmFtcy5pc1BsYW5uZXJIb21lIHx8IHBhcmFtcy5pc0hlYWRlclRhc2tDb250ZXh0SG9tZSB8fCBwYXJhbXMuaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWVcbiAgY29uc3QgbWFpYUhlYWRlclN0YWNrTmVlZHNHYXAgPVxuICAgIChwYXJhbXMuaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgIXBhcmFtcy5pc0hlYWRlclRhc2tDb250ZXh0SG9tZSAmJiAhcGFyYW1zLmlzUGxhbm5lckhvbWUpIHx8XG4gICAgKCFwYXJhbXMuaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiZcbiAgICAgIHBhcmFtcy5oYXNHcmVldGluZyAmJlxuICAgICAgIXBhcmFtcy5pc1BsYW5uZXJIb21lICYmXG4gICAgICAhcGFyYW1zLmlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmXG4gICAgICAhcGFyYW1zLmlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lKVxuXG4gIHJldHVybiB7XG4gICAgY29udGVudEFsaWduU3RhcnQsXG4gICAgbWFpYUhlYWRlclN0YWNrTmVlZHNHYXAsXG4gICAgZml4ZWRIb21lQ29udGVudFdpZHRoQ29sbGFib3JhdG9yOiBwYXJhbXMuaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgfHwgcGFyYW1zLmlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2hvd0FnZW50SW50cm9kdWN0aW9uID0gKHNlY3Rpb246IFNlY3Rpb24sIGlzTWFpYTogYm9vbGVhbiwgaGFzSW50cm9kdWN0aW9uOiBib29sZWFuKTogYm9vbGVhbiA9PlxuICBzZWN0aW9uICE9PSAncHJvamVjdCcgJiYgIWlzTWFpYSAmJiBoYXNJbnRyb2R1Y3Rpb25cblxuZXhwb3J0IGNvbnN0IGJ1aWxkRmFxc0ZldGNoS2V5ID0gKGFnZW50SWQ6IHN0cmluZywgbGFuZzogc3RyaW5nLCBlbnRpdHlUeXBlPzogc3RyaW5nKTogc3RyaW5nID0+XG4gIGAke2FnZW50SWR9LSR7bGFuZ30tJHtlbnRpdHlUeXBlID8/ICdhbGwnfWBcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlZmV0Y2hGYXFzID0gKGN1cnJlbnRLZXk6IHN0cmluZywgbGFzdEtleTogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gPT4gY3VycmVudEtleSAhPT0gbGFzdEtleVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkQ2xlYXJQaW5uZWRDb250ZXh0T25Ib21lU3RhcnQgPSAoaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lOiBib29sZWFuLCBmdWFJZD86IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgJiYgZnVhSWQpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUmVjZW50Q29udGV4dHNTZWN0aW9uQ29weUtleXMgPSAocGFyYW1zOiB7XG4gIGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZTogYm9vbGVhblxufSk6IHsgdGl0bGVLZXk6IHN0cmluZzsgc3VidGl0bGVLZXk6IHN0cmluZyB9ID0+IHtcbiAgaWYgKHBhcmFtcy5pc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGVLZXk6ICdob21lTWVudS5jb250ZXh0SG9tZS5yZWNlbnRDb250ZXh0c1NlY3Rpb25NYW5hZ2VyLnRpdGxlJyxcbiAgICAgIHN1YnRpdGxlS2V5OiAnaG9tZU1lbnUuY29udGV4dEhvbWUucmVjZW50Q29udGV4dHNTZWN0aW9uTWFuYWdlci5zdWJ0aXRsZScsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgdGl0bGVLZXk6ICdob21lTWVudS5jb250ZXh0SG9tZS5yZWNlbnRUYXNrc1NlY3Rpb24udGl0bGUnLFxuICAgIHN1YnRpdGxlS2V5OiAnaG9tZU1lbnUuY29udGV4dEhvbWUucmVjZW50VGFza3NTZWN0aW9uLnN1YnRpdGxlJyxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZU9yY2hlc3RyYXRvclJlY2VudENvbnRleHRzU3VidGl0bGVLZXkgPSAoaXNDb2xsYWJvcmF0b3I6IGJvb2xlYW4pOiBzdHJpbmcgPT5cbiAgaXNDb2xsYWJvcmF0b3IgPyAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGVDb2xsYWJvcmF0b3InIDogJ2hvbWVNZW51LmNvbnRleHRIb21lLnN1YnRpdGxlJ1xuXG5leHBvcnQgdHlwZSBQaW5HbG9iYWxDb250ZXh0UGF0Y2ggPSB7XG4gIGNsaWVudDogeyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfSB8IG51bGxcbiAgcHJvamVjdDoge1xuICAgIGlkOiBudW1iZXJcbiAgICBuYW1lOiBzdHJpbmdcbiAgICBjbGllbnRJZD86IG51bWJlclxuICAgIGNsaWVudD86IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH1cbiAgfSB8IG51bGxcbiAgdGFzazoge1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgICBuYW1lOiBzdHJpbmdcbiAgICBwcm9qZWN0SWQ/OiBudW1iZXJcbiAgICBjbGllbnRJZD86IG51bWJlclxuICB9IHwgbnVsbFxuICBjaGlwc1Byb2plY3Q6IHsgcHJvamVjdElkOiBzdHJpbmc7IHByb2plY3ROYW1lOiBzdHJpbmc7IGNsaWVudE5hbWU6IHN0cmluZyB9IHwgbnVsbFxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRQaW5HbG9iYWxDb250ZXh0UGF0Y2ggPSAocGluT3V0Y29tZTogUmVjZW50Q29udGV4dFBpbk91dGNvbWUpOiBQaW5HbG9iYWxDb250ZXh0UGF0Y2ggfCBudWxsID0+IHtcbiAgaWYgKHBpbk91dGNvbWUua2luZCA9PT0gJ2ludmFsaWQnKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGNsZWFyZWQ6IFBpbkdsb2JhbENvbnRleHRQYXRjaCA9IHsgY2xpZW50OiBudWxsLCBwcm9qZWN0OiBudWxsLCB0YXNrOiBudWxsLCBjaGlwc1Byb2plY3Q6IG51bGwgfVxuXG4gIGlmIChwaW5PdXRjb21lLmtpbmQgPT09ICdjbGllbnQnKSB7XG4gICAgcmV0dXJuIHsgLi4uY2xlYXJlZCwgY2xpZW50OiB7IGlkOiBwaW5PdXRjb21lLmNsaWVudElkLCBuYW1lOiBwaW5PdXRjb21lLm5hbWUgfSB9XG4gIH1cblxuICBpZiAocGluT3V0Y29tZS5raW5kID09PSAncHJvamVjdCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY2xlYXJlZCxcbiAgICAgIHByb2plY3Q6IHtcbiAgICAgICAgaWQ6IHBpbk91dGNvbWUucHJvamVjdElkLFxuICAgICAgICBuYW1lOiBwaW5PdXRjb21lLm5hbWUsXG4gICAgICAgIC4uLihwaW5PdXRjb21lLmNsaWVudElkICE9IG51bGxcbiAgICAgICAgICA/IHsgY2xpZW50SWQ6IHBpbk91dGNvbWUuY2xpZW50SWQsIGNsaWVudDogeyBpZDogcGluT3V0Y29tZS5jbGllbnRJZCwgbmFtZTogcGluT3V0Y29tZS5jbGllbnROYW1lIH0gfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICAgIGNoaXBzUHJvamVjdDoge1xuICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwaW5PdXRjb21lLnByb2plY3RJZCksXG4gICAgICAgIHByb2plY3ROYW1lOiBwaW5PdXRjb21lLm5hbWUsXG4gICAgICAgIGNsaWVudE5hbWU6IHBpbk91dGNvbWUuY2xpZW50TmFtZSxcbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgbGV0IHBhdGNoOiBQaW5HbG9iYWxDb250ZXh0UGF0Y2ggPSB7XG4gICAgLi4uY2xlYXJlZCxcbiAgICB0YXNrOiB7XG4gICAgICBpZDogcGluT3V0Y29tZS50YXNrSWQsXG4gICAgICBuYW1lOiBwaW5PdXRjb21lLm5hbWUsXG4gICAgICAuLi4ocGluT3V0Y29tZS5wcm9qZWN0SWQgIT0gbnVsbCA/IHsgcHJvamVjdElkOiBwaW5PdXRjb21lLnByb2plY3RJZCB9IDoge30pLFxuICAgICAgLi4uKHBpbk91dGNvbWUuY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IHBpbk91dGNvbWUuY2xpZW50SWQgfSA6IHt9KSxcbiAgICB9LFxuICB9XG5cbiAgaWYgKHBpbk91dGNvbWUuY2xpZW50SWQgIT0gbnVsbCkge1xuICAgIHBhdGNoID0geyAuLi5wYXRjaCwgY2xpZW50OiB7IGlkOiBwaW5PdXRjb21lLmNsaWVudElkLCBuYW1lOiBwaW5PdXRjb21lLmNsaWVudE5hbWUgfSB9XG4gIH1cblxuICBpZiAocGluT3V0Y29tZS5wcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgIHBhdGNoID0ge1xuICAgICAgLi4ucGF0Y2gsXG4gICAgICBwcm9qZWN0OiB7XG4gICAgICAgIGlkOiBwaW5PdXRjb21lLnByb2plY3RJZCxcbiAgICAgICAgbmFtZTogcGluT3V0Y29tZS5wcm9qZWN0TGFiZWwsXG4gICAgICAgIC4uLihwaW5PdXRjb21lLmNsaWVudElkICE9IG51bGxcbiAgICAgICAgICA/IHsgY2xpZW50SWQ6IHBpbk91dGNvbWUuY2xpZW50SWQsIGNsaWVudDogeyBpZDogcGluT3V0Y29tZS5jbGllbnRJZCwgbmFtZTogcGluT3V0Y29tZS5jbGllbnROYW1lIH0gfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICAgIGNoaXBzUHJvamVjdDoge1xuICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwaW5PdXRjb21lLnByb2plY3RJZCksXG4gICAgICAgIHByb2plY3ROYW1lOiBwaW5PdXRjb21lLnByb2plY3RMYWJlbCxcbiAgICAgICAgY2xpZW50TmFtZTogcGluT3V0Y29tZS5jbGllbnROYW1lLFxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGF0Y2hcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZENoZWNrSG9tZVNjcm9sbCA9IChcbiAgY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGhvbWVTY3JvbGxhYmxlTGF5b3V0OiBib29sZWFuXG4pOiBib29sZWFuID0+IEJvb2xlYW4oY29udGFpbmVyICYmIGhvbWVTY3JvbGxhYmxlTGF5b3V0KVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVzZXRIb21lU2Nyb2xsR3JhZGllbnRzID0gKGhvbWVTY3JvbGxhYmxlTGF5b3V0OiBib29sZWFuKTogYm9vbGVhbiA9PiAhaG9tZVNjcm9sbGFibGVMYXlvdXRcblxuZXhwb3J0IGNvbnN0IHNob3VsZE9ic2VydmVIb21lU2Nyb2xsQ29udGVudCA9IChzY3JvbGxDb250ZW50OiBFbGVtZW50IHwgbnVsbCk6IHNjcm9sbENvbnRlbnQgaXMgRWxlbWVudCA9PlxuICBzY3JvbGxDb250ZW50IGluc3RhbmNlb2YgRWxlbWVudFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhvbWVDb250ZXh0R3JlZXRpbmdLZXkgPSAoXG4gIGlzTWFpYTogYm9vbGVhbixcbiAgcGlubmVkRW50aXR5VHlwZT86IFJlY2VudENvbnRleHRUeXBlXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT5cbiAgaXNNYWlhICYmIHBpbm5lZEVudGl0eVR5cGUgPyBgaG9tZU1lbnUuY29udGV4dEhvbWUuY29udGV4dEdyZWV0aW5nLiR7cGlubmVkRW50aXR5VHlwZX1gIDogdW5kZWZpbmVkXG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZW5kZXJSZWNlbnRDb250ZXh0c1BhbmVsID0gKGlzUmVjZW50Q29udGV4dHNTdGVwOiBib29sZWFuKTogYm9vbGVhbiA9PiBpc1JlY2VudENvbnRleHRzU3RlcFxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxXQUFXLEVBQUVDLGtCQUFrQixFQUFFQyxhQUFhLFFBQVEsMkJBQTJCO0FBSTFGLE9BQU8sSUFBTUMsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSUMsS0FBOEIsRUFBb0I7RUFDbkYsSUFBSUEsS0FBSyxLQUFLLElBQUksSUFBSUEsS0FBSyxLQUFLQyxTQUFTLElBQUlELEtBQUssS0FB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