@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
@@ -15,7 +15,8 @@ import { useGlobalContext } from '../../../context/global-context';
15
15
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
16
16
  import { OptionCorPermission } from '../OptionCorPermission';
17
17
  import { buildAgentToolGroupsRequest, DEFAULT_COR_ACCESS } from '../../../utils/normalizeAgentConnectors';
18
- import { buildHitlAnalyticsPayload, getHitlAnalyticsAgentType, hitlBatchIncludesCreateAgent, normalizeHitlToolName } from '../../../utils/hitlAnalytics';
18
+ import { buildHitlAnalyticsPayload, getHitlAnalyticsAgentType, hitlBatchIncludesCreateAgent } from '../../../utils/hitlAnalytics';
19
+ import { getActionLabel, getSpecialActionCopy } from './ApprovalBox.helpers';
19
20
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
20
21
  var CREATE_AGENT_CONNECTOR_ROWS = [{
21
22
  slug: 'clientes',
@@ -30,41 +31,6 @@ var CREATE_AGENT_CONNECTOR_ROWS = [{
30
31
  titleKey: 'taskAccessTitle',
31
32
  descriptionKey: 'taskAccessDescription'
32
33
  }];
33
- function formatToolNameFallback(toolName) {
34
- var normalized = normalizeHitlToolName(toolName || 'unknown');
35
- var withSpaces = normalized.replace(/_/g, ' ').trim();
36
- if (!withSpaces) return 'Unknown';
37
- return withSpaces.charAt(0).toUpperCase() + withSpaces.slice(1);
38
- }
39
- function getActionLabel(t, toolName, displayName) {
40
- var normalizedToolName = normalizeHitlToolName(toolName || 'unknown');
41
- var translationKey = "approvalBox.actions.".concat(normalizedToolName);
42
- var translatedLabel = t(translationKey);
43
- if (translatedLabel !== translationKey) return translatedLabel;
44
- if (displayName !== null && displayName !== void 0 && displayName.trim()) return displayName;
45
- return formatToolNameFallback(normalizedToolName);
46
- }
47
- function getDeliverableMode(toolArgs) {
48
- if (!toolArgs || Array.isArray(toolArgs)) return '';
49
- return String(toolArgs.deliverableType || toolArgs.deliverable_type || '').toLowerCase();
50
- }
51
- function getSpecialActionCopy(t, action) {
52
- var normalizedToolName = normalizeHitlToolName(action.tool_name);
53
- var deliverableMode = getDeliverableMode(action.tool_args);
54
- if (normalizedToolName === 'create_rework') {
55
- return {
56
- title: t('approvalBox.special.createRework.title'),
57
- description: t('approvalBox.special.createRework.description')
58
- };
59
- }
60
- if (normalizedToolName === 'update_deliverable' && ['children', 'checkbox'].includes(deliverableMode)) {
61
- return {
62
- title: t('approvalBox.special.updateDeliverableChildren.title'),
63
- description: t('approvalBox.special.updateDeliverableChildren.description')
64
- };
65
- }
66
- return {};
67
- }
68
34
  export var ApprovalBox = function ApprovalBox(_ref) {
69
35
  var actions = _ref.actions,
70
36
  onApprove = _ref.onApprove,
@@ -265,4 +231,4 @@ export var ApprovalBox = function ApprovalBox(_ref) {
265
231
  })]
266
232
  });
267
233
  };
268
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIkFsZXJ0IiwiQ2hlY2tDaXJjbGUiLCJDcm9zc0NpcmNsZSIsIlRvb2x0aXAiLCJ1c2VUcmFuc2xhdGlvbiIsIlNDQXBwcm92YWxCb3giLCJTQ0FCSGVhZGVyIiwiU0NBQlRpdGxlIiwiU0NBQkRlc2NyaXB0aW9uIiwiU0NBQkFjdGlvbnNMaXN0IiwiU0NBQkFjdGlvbkl0ZW0iLCJTQ0FCQWN0aW9uTmFtZSIsIlNDQUJBY3Rpb25EZXNjcmlwdGlvbiIsIlNDQUJCdXR0b25zQ29udGFpbmVyIiwiU0NBQkJ1dHRvbiIsIlNDQUJTdGF0dXNCYWRnZSIsIlNDQUJTdGF0dXNXYXJuaW5nSWNvbiIsIlNDQUJDb25uZWN0b3JzIiwiU0NBQkNvbm5lY3RvcnNUaXRsZSIsIlNDQUJDb25uZWN0b3JzU3VidGl0bGUiLCJTRUNUSU9OUyIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIk9wdGlvbkNvclBlcm1pc3Npb24iLCJidWlsZEFnZW50VG9vbEdyb3Vwc1JlcXVlc3QiLCJERUZBVUxUX0NPUl9BQ0NFU1MiLCJidWlsZEhpdGxBbmFseXRpY3NQYXlsb2FkIiwiZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSIsImhpdGxCYXRjaEluY2x1ZGVzQ3JlYXRlQWdlbnQiLCJub3JtYWxpemVIaXRsVG9vbE5hbWUiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJDUkVBVEVfQUdFTlRfQ09OTkVDVE9SX1JPV1MiLCJzbHVnIiwidGl0bGVLZXkiLCJkZXNjcmlwdGlvbktleSIsImZvcm1hdFRvb2xOYW1lRmFsbGJhY2siLCJ0b29sTmFtZSIsIm5vcm1hbGl6ZWQiLCJ3aXRoU3BhY2VzIiwicmVwbGFjZSIsInRyaW0iLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiZ2V0QWN0aW9uTGFiZWwiLCJ0IiwiZGlzcGxheU5hbWUiLCJub3JtYWxpemVkVG9vbE5hbWUiLCJ0cmFuc2xhdGlvbktleSIsImNvbmNhdCIsInRyYW5zbGF0ZWRMYWJlbCIsImdldERlbGl2ZXJhYmxlTW9kZSIsInRvb2xBcmdzIiwiQXJyYXkiLCJpc0FycmF5IiwiU3RyaW5nIiwiZGVsaXZlcmFibGVUeXBlIiwiZGVsaXZlcmFibGVfdHlwZSIsInRvTG93ZXJDYXNlIiwiZ2V0U3BlY2lhbEFjdGlvbkNvcHkiLCJhY3Rpb24iLCJ0b29sX25hbWUiLCJkZWxpdmVyYWJsZU1vZGUiLCJ0b29sX2FyZ3MiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwiaW5jbHVkZXMiLCJBcHByb3ZhbEJveCIsIl9yZWYiLCJhY3Rpb25zIiwib25BcHByb3ZlIiwib25SZWplY3QiLCJfcmVmJHN0YXR1cyIsInN0YXR1cyIsIl9yZWYkaXNMb2FkaW5nIiwiaXNMb2FkaW5nIiwiX3JlZiRpc1Byb2plY3REZWxldGVkIiwiaXNQcm9qZWN0RGVsZXRlZCIsIl9yZWYkaXNFeHBhbmRlZCIsImlzRXhwYW5kZWQiLCJoaXRsSW5zdGFuY2VJZCIsIndhcm5pbmdNZXNzYWdlIiwiX3JlZiRtYW51YWxBcHByb3ZhbERlIiwibWFudWFsQXBwcm92YWxEZXRlY3RlZCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsImFibUFnZW50IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwibG9jYWxTdGF0dXMiLCJzZXRMb2NhbFN0YXR1cyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiY29yQWNjZXNzIiwic2V0Q29yQWNjZXNzIiwiaXNDcmVhdGVBZ2VudEJhdGNoIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsImV2ZW50QW1wbGl0dWRlIiwibGFzdEhpdGxJbXByZXNzaW9uS2V5UmVmIiwidXNlckluaXRpYXRlZEhpdGxEZWNpc2lvblJlZiIsImF1dG9SZXNvbHV0aW9uVHJhY2tlZEtleVJlZiIsImhpdGxCYXRjaEtleSIsIm1hcCIsImEiLCJ0aHJlYWRfaWQiLCJ0b29sX2NhbGxfaWQiLCJzb3J0Iiwiam9pbiIsInByZXYiLCJoaXRsQW5hbHl0aWNzQWdlbnRUeXBlIiwibGVuZ3RoIiwiaW1wcmVzc2lvbktleSIsImN1cnJlbnQiLCJhaUNoYXRIaXRsIiwidHJhY2tIaXRsRGVjaXNpb24iLCJkZWNpc2lvbiIsInJlc29sdXRpb25Tb3VyY2UiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJhaUNoYXRIaXRsT3B0aW9uIiwiX29iamVjdFNwcmVhZCIsInJlc29sdXRpb25fc291cmNlIiwiaXNBY2NlcHQiLCJoYW5kbGVBcHByb3ZlIiwibWV0YWRhdGEiLCJ0b29sX2dyb3VwX3NsdWdzIiwiaGFuZGxlUmVqZWN0IiwiY2hpbGRyZW4iLCIkZXhwYW5kZWQiLCJzcGVjaWFsQ29weSIsImxhYmVsIiwiZGlzcGxheV9uYW1lIiwibnMiLCJfcmVmMiIsImNoZWNrZWQiLCJvbkNoYW5nZSIsImNvbm5lY3RvckNvciIsIm9wdGlvbiIsIl9kZWZpbmVQcm9wZXJ0eSIsImRpc2FibGVkIiwiJHZhcmlhbnQiLCJvbkNsaWNrIiwiJGRpc2FibGVkIiwiJHN0YXR1cyIsIndpZHRoIiwiaGVpZ2h0IiwiY29sb3IiLCJwbGFjZW1lbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9BcHByb3ZhbEJveC9BcHByb3ZhbEJveC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQWxlcnQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BbGVydCdcbmltcG9ydCB7IENoZWNrQ2lyY2xlIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hlY2tDaXJjbGUnXG5pbXBvcnQgeyBDcm9zc0NpcmNsZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzQ2lyY2xlJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQge1xuICBTQ0FwcHJvdmFsQm94LFxuICBTQ0FCSGVhZGVyLFxuICBTQ0FCVGl0bGUsXG4gIFNDQUJEZXNjcmlwdGlvbixcbiAgU0NBQkFjdGlvbnNMaXN0LFxuICBTQ0FCQWN0aW9uSXRlbSxcbiAgU0NBQkFjdGlvbk5hbWUsXG4gIFNDQUJBY3Rpb25EZXNjcmlwdGlvbixcbiAgU0NBQkJ1dHRvbnNDb250YWluZXIsXG4gIFNDQUJCdXR0b24sXG4gIFNDQUJTdGF0dXNCYWRnZSxcbiAgU0NBQlN0YXR1c1dhcm5pbmdJY29uLFxuICBTQ0FCQ29ubmVjdG9ycyxcbiAgU0NBQkNvbm5lY3RvcnNUaXRsZSxcbiAgU0NBQkNvbm5lY3RvcnNTdWJ0aXRsZSxcbn0gZnJvbSAnLi9BcHByb3ZhbEJveC5zdHlsZXMnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IE9wdGlvbkNvclBlcm1pc3Npb24gfSBmcm9tICcuLi9PcHRpb25Db3JQZXJtaXNzaW9uJ1xuaW1wb3J0IHtcbiAgYnVpbGRBZ2VudFRvb2xHcm91cHNSZXF1ZXN0LFxuICBDb3JBY2Nlc3MsXG4gIENvclRvb2xHcm91cFNsdWcsXG4gIERFRkFVTFRfQ09SX0FDQ0VTUyxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbm9ybWFsaXplQWdlbnRDb25uZWN0b3JzJ1xuaW1wb3J0IHtcbiAgYnVpbGRIaXRsQW5hbHl0aWNzUGF5bG9hZCxcbiAgZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSxcbiAgaGl0bEJhdGNoSW5jbHVkZXNDcmVhdGVBZ2VudCxcbiAgbm9ybWFsaXplSGl0bFRvb2xOYW1lLFxufSBmcm9tICcuLi8uLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuXG5jb25zdCBDUkVBVEVfQUdFTlRfQ09OTkVDVE9SX1JPV1M6IHsgc2x1ZzogQ29yVG9vbEdyb3VwU2x1ZzsgdGl0bGVLZXk6IHN0cmluZzsgZGVzY3JpcHRpb25LZXk6IHN0cmluZyB9W10gPSBbXG4gIHsgc2x1ZzogJ2NsaWVudGVzJywgdGl0bGVLZXk6ICdjbGllbnRBY2Nlc3NUaXRsZScsIGRlc2NyaXB0aW9uS2V5OiAnY2xpZW50QWNjZXNzRGVzY3JpcHRpb24nIH0sXG4gIHsgc2x1ZzogJ3Byb3llY3RvcycsIHRpdGxlS2V5OiAncHJvamVjdEFjY2Vzc1RpdGxlJywgZGVzY3JpcHRpb25LZXk6ICdwcm9qZWN0QWNjZXNzRGVzY3JpcHRpb24nIH0sXG4gIHsgc2x1ZzogJ3RhcmVhcycsIHRpdGxlS2V5OiAndGFza0FjY2Vzc1RpdGxlJywgZGVzY3JpcHRpb25LZXk6ICd0YXNrQWNjZXNzRGVzY3JpcHRpb24nIH0sXG5dXG5cbmZ1bmN0aW9uIGZvcm1hdFRvb2xOYW1lRmFsbGJhY2sodG9vbE5hbWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplSGl0bFRvb2xOYW1lKHRvb2xOYW1lIHx8ICd1bmtub3duJylcbiAgY29uc3Qgd2l0aFNwYWNlcyA9IG5vcm1hbGl6ZWQucmVwbGFjZSgvXy9nLCAnICcpLnRyaW0oKVxuICBpZiAoIXdpdGhTcGFjZXMpIHJldHVybiAnVW5rbm93bidcbiAgcmV0dXJuIHdpdGhTcGFjZXMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3aXRoU3BhY2VzLnNsaWNlKDEpXG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvbkxhYmVsKHQ6IChrZXk6IHN0cmluZykgPT4gc3RyaW5nLCB0b29sTmFtZT86IHN0cmluZywgZGlzcGxheU5hbWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkVG9vbE5hbWUgPSBub3JtYWxpemVIaXRsVG9vbE5hbWUodG9vbE5hbWUgfHwgJ3Vua25vd24nKVxuICBjb25zdCB0cmFuc2xhdGlvbktleSA9IGBhcHByb3ZhbEJveC5hY3Rpb25zLiR7bm9ybWFsaXplZFRvb2xOYW1lfWBcbiAgY29uc3QgdHJhbnNsYXRlZExhYmVsID0gdCh0cmFuc2xhdGlvbktleSlcblxuICBpZiAodHJhbnNsYXRlZExhYmVsICE9PSB0cmFuc2xhdGlvbktleSkgcmV0dXJuIHRyYW5zbGF0ZWRMYWJlbFxuICBpZiAoZGlzcGxheU5hbWU/LnRyaW0oKSkgcmV0dXJuIGRpc3BsYXlOYW1lXG4gIHJldHVybiBmb3JtYXRUb29sTmFtZUZhbGxiYWNrKG5vcm1hbGl6ZWRUb29sTmFtZSlcbn1cblxuZnVuY3Rpb24gZ2V0RGVsaXZlcmFibGVNb2RlKHRvb2xBcmdzOiBQZW5kaW5nQWN0aW9uWyd0b29sX2FyZ3MnXSk6IHN0cmluZyB7XG4gIGlmICghdG9vbEFyZ3MgfHwgQXJyYXkuaXNBcnJheSh0b29sQXJncykpIHJldHVybiAnJ1xuICByZXR1cm4gU3RyaW5nKHRvb2xBcmdzLmRlbGl2ZXJhYmxlVHlwZSB8fCB0b29sQXJncy5kZWxpdmVyYWJsZV90eXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIGdldFNwZWNpYWxBY3Rpb25Db3B5KFxuICB0OiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZyxcbiAgYWN0aW9uOiBQZW5kaW5nQWN0aW9uXG4pOiB7IHRpdGxlPzogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9IHtcbiAgY29uc3Qgbm9ybWFsaXplZFRvb2xOYW1lID0gbm9ybWFsaXplSGl0bFRvb2xOYW1lKGFjdGlvbi50b29sX25hbWUpXG4gIGNvbnN0IGRlbGl2ZXJhYmxlTW9kZSA9IGdldERlbGl2ZXJhYmxlTW9kZShhY3Rpb24udG9vbF9hcmdzKVxuXG4gIGlmIChub3JtYWxpemVkVG9vbE5hbWUgPT09ICdjcmVhdGVfcmV3b3JrJykge1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogdCgnYXBwcm92YWxCb3guc3BlY2lhbC5jcmVhdGVSZXdvcmsudGl0bGUnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0KCdhcHByb3ZhbEJveC5zcGVjaWFsLmNyZWF0ZVJld29yay5kZXNjcmlwdGlvbicpLFxuICAgIH1cbiAgfVxuXG4gIGlmIChub3JtYWxpemVkVG9vbE5hbWUgPT09ICd1cGRhdGVfZGVsaXZlcmFibGUnICYmIFsnY2hpbGRyZW4nLCAnY2hlY2tib3gnXS5pbmNsdWRlcyhkZWxpdmVyYWJsZU1vZGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiB0KCdhcHByb3ZhbEJveC5zcGVjaWFsLnVwZGF0ZURlbGl2ZXJhYmxlQ2hpbGRyZW4udGl0bGUnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0KCdhcHByb3ZhbEJveC5zcGVjaWFsLnVwZGF0ZURlbGl2ZXJhYmxlQ2hpbGRyZW4uZGVzY3JpcHRpb24nKSxcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge31cbn1cblxuZXhwb3J0IHR5cGUgQXBwcm92YWxNZXRhZGF0YSA9IHtcbiAgdG9vbF9ncm91cF9zbHVnczogc3RyaW5nW11cbn1cblxuaW50ZXJmYWNlIEFwcHJvdmFsQm94UHJvcHMge1xuICBhY3Rpb25zOiBQZW5kaW5nQWN0aW9uW11cbiAgb25BcHByb3ZlOiAodGhyZWFkSWRzOiBzdHJpbmdbXSwgbWV0YWRhdGE/OiBBcHByb3ZhbE1ldGFkYXRhKSA9PiB2b2lkXG4gIG9uUmVqZWN0OiAodGhyZWFkSWRzOiBzdHJpbmdbXSkgPT4gdm9pZFxuICBzdGF0dXM/OiAncGVuZGluZycgfCAnYXBwcm92ZWQnIHwgJ3JlamVjdGVkJ1xuICBpc0xvYWRpbmc/OiBib29sZWFuXG4gIC8qKiBTaSBlbCBjaGF0L3Byb3llY3RvIGVzdMOhIGVsaW1pbmFkbywgc2Ugb2N1bHRhbiBsb3MgYm90b25lcyBkZSBhcHJvYmFyL3JlY2hhemFyICovXG4gIGlzUHJvamVjdERlbGV0ZWQ/OiBib29sZWFuXG4gIC8qKiBTaSBlbCBjaGF0IGVzdMOhIGV4cGFuZGlkbyAodHJ1ZSkgbyBjb2xhcHNhZG8gKGZhbHNlKS4gQWZlY3RhIGVsIGFuY2hvIGRlbCBjb250ZW5lZG9yLiAqL1xuICBpc0V4cGFuZGVkPzogYm9vbGVhblxuICAvKiogSWQgZXN0YWJsZSBwb3IgbG90ZSBISVRMIChwLiBlai4gb3JpZ2luYWxfdGhyZWFkX2lkKSBwYXJhIGVsIGV2ZW50byBkZSBpbXByZXNpw7NuICovXG4gIGhpdGxJbnN0YW5jZUlkPzogc3RyaW5nXG4gIHdhcm5pbmdNZXNzYWdlPzogc3RyaW5nXG4gIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQ/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBBcHByb3ZhbEJveCA9ICh7XG4gIGFjdGlvbnMsXG4gIG9uQXBwcm92ZSxcbiAgb25SZWplY3QsXG4gIHN0YXR1cyA9ICdwZW5kaW5nJyxcbiAgaXNMb2FkaW5nID0gZmFsc2UsXG4gIGlzUHJvamVjdERlbGV0ZWQgPSBmYWxzZSxcbiAgaXNFeHBhbmRlZCA9IGZhbHNlLFxuICBoaXRsSW5zdGFuY2VJZCxcbiAgd2FybmluZ01lc3NhZ2UsXG4gIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQgPSBmYWxzZSxcbn06IEFwcHJvdmFsQm94UHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJLCBTRUNUSU9OUy5hYm1BZ2VudF0pXG4gIGNvbnN0IFtsb2NhbFN0YXR1cywgc2V0TG9jYWxTdGF0dXNdID0gdXNlU3RhdGU8J3BlbmRpbmcnIHwgJ2FwcHJvdmVkJyB8ICdyZWplY3RlZCc+KHN0YXR1cylcbiAgY29uc3QgW2NvckFjY2Vzcywgc2V0Q29yQWNjZXNzXSA9IHVzZVN0YXRlPENvckFjY2Vzcz4oREVGQVVMVF9DT1JfQUNDRVNTKVxuICBjb25zdCBpc0NyZWF0ZUFnZW50QmF0Y2ggPSB1c2VNZW1vKCgpID0+IGhpdGxCYXRjaEluY2x1ZGVzQ3JlYXRlQWdlbnQoYWN0aW9ucyksIFthY3Rpb25zXSlcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCBsYXN0SGl0bEltcHJlc3Npb25LZXlSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgdXNlckluaXRpYXRlZEhpdGxEZWNpc2lvblJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgYXV0b1Jlc29sdXRpb25UcmFja2VkS2V5UmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaGl0bEJhdGNoS2V5ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgaGl0bEluc3RhbmNlSWQgPz9cbiAgICAgIGFjdGlvbnNcbiAgICAgICAgLm1hcChhID0+IGAke2EudGhyZWFkX2lkfToke2EudG9vbF9jYWxsX2lkfWApXG4gICAgICAgIC5zb3J0KClcbiAgICAgICAgLmpvaW4oJ3wnKSxcbiAgICBbaGl0bEluc3RhbmNlSWQsIGFjdGlvbnNdXG4gIClcblxuICAvLyBTaW5jcm9uaXphciBsb2NhbFN0YXR1cyBjb24gZWwgcHJvcCBzdGF0dXMgY3VhbmRvIGNhbWJpYSBkZXNkZSBlbCBwYWRyZSAoc29sbyBwb3IgdmFsdWUsIGV2aXRhIGJ1Y2xlcylcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRMb2NhbFN0YXR1cyhwcmV2ID0+IChwcmV2ICE9PSBzdGF0dXMgPyBzdGF0dXMgOiBwcmV2KSlcbiAgfSwgW3N0YXR1c10pXG5cbiAgY29uc3QgaGl0bEFuYWx5dGljc0FnZW50VHlwZSA9IGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUoYWdlbnQpXG5cbiAgLy8gQ0ExOiBjYXJkIGRlIGNvbmZpcm1hY2nDs24gSElUTCB2aXNpYmxlIChzb2xvIHBlbmRpZW50ZSwgbm8gaGlzdMOzcmljbyB5YSByZXN1ZWx0bylcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9jYWxTdGF0dXMgIT09ICdwZW5kaW5nJyB8fCAhYWN0aW9ucy5sZW5ndGgpIHJldHVyblxuICAgIGNvbnN0IGltcHJlc3Npb25LZXkgPSBoaXRsQmF0Y2hLZXlcbiAgICBpZiAobGFzdEhpdGxJbXByZXNzaW9uS2V5UmVmLmN1cnJlbnQgPT09IGltcHJlc3Npb25LZXkpIHJldHVyblxuICAgIGxhc3RIaXRsSW1wcmVzc2lvbktleVJlZi5jdXJyZW50ID0gaW1wcmVzc2lvbktleVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRIaXRsLCBidWlsZEhpdGxBbmFseXRpY3NQYXlsb2FkKGhpdGxBbmFseXRpY3NBZ2VudFR5cGUsIGFjdGlvbnMpKVxuICB9LCBbZXZlbnRBbXBsaXR1ZGUsIGhpdGxBbmFseXRpY3NBZ2VudFR5cGUsIGhpdGxCYXRjaEtleSwgbG9jYWxTdGF0dXMsIGFjdGlvbnMubGVuZ3RoXSlcblxuICBjb25zdCB0cmFja0hpdGxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChkZWNpc2lvbjogJ2FjY2VwdCcgfCAnZGVueScsIHJlc29sdXRpb25Tb3VyY2U6ICd1c2VyJyB8ICdhdXRvJyA9ICd1c2VyJykgPT4ge1xuICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEhpdGxPcHRpb24sIHtcbiAgICAgICAgLi4uYnVpbGRIaXRsQW5hbHl0aWNzUGF5bG9hZChoaXRsQW5hbHl0aWNzQWdlbnRUeXBlLCBhY3Rpb25zKSxcbiAgICAgICAgZGVjaXNpb24sXG4gICAgICAgIHJlc29sdXRpb25fc291cmNlOiByZXNvbHV0aW9uU291cmNlLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFthY3Rpb25zLCBoaXRsQW5hbHl0aWNzQWdlbnRUeXBlLCBldmVudEFtcGxpdHVkZV1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdXNlckluaXRpYXRlZEhpdGxEZWNpc2lvblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBhdXRvUmVzb2x1dGlvblRyYWNrZWRLZXlSZWYuY3VycmVudCA9IG51bGxcbiAgICBzZXRDb3JBY2Nlc3MoREVGQVVMVF9DT1JfQUNDRVNTKVxuICB9LCBbaGl0bEJhdGNoS2V5XSlcblxuICAvKipcbiAgICogUmVzb2x1Y2nDs24gc2luIGNsaWMgKHAuIGVqLiBiYWNrZW5kIGVqZWN1dGEgbGEgaGVycmFtaWVudGEgc29sYSk6IGh1Ym8gaW1wcmVzacOzbiBISVRMXG4gICAqIHBhcmEgZXN0ZSBsb3RlIHkgZWwgcGFkcmUgcGFzw7MgYSBhcHByb3ZlZC9yZWplY3RlZCBzaW4gcXVlIGVsIHVzdWFyaW8gcHVsc2FyYSBhcHJvYmFyL2RlbmVnYXIuXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdGF0dXMgPT09ICdwZW5kaW5nJyB8fCAhYWN0aW9ucy5sZW5ndGgpIHJldHVyblxuICAgIGlmIChsYXN0SGl0bEltcHJlc3Npb25LZXlSZWYuY3VycmVudCAhPT0gaGl0bEJhdGNoS2V5KSByZXR1cm5cbiAgICBpZiAodXNlckluaXRpYXRlZEhpdGxEZWNpc2lvblJlZi5jdXJyZW50KSByZXR1cm5cbiAgICBpZiAoYXV0b1Jlc29sdXRpb25UcmFja2VkS2V5UmVmLmN1cnJlbnQgPT09IGhpdGxCYXRjaEtleSkgcmV0dXJuXG4gICAgYXV0b1Jlc29sdXRpb25UcmFja2VkS2V5UmVmLmN1cnJlbnQgPSBoaXRsQmF0Y2hLZXlcbiAgICBjb25zdCBpc0FjY2VwdCA9IHN0YXR1cyA9PT0gJ2FwcHJvdmVkJ1xuICAgIGlmIChpc0FjY2VwdCAmJiBoaXRsQmF0Y2hJbmNsdWRlc0NyZWF0ZUFnZW50KGFjdGlvbnMpKSByZXR1cm5cbiAgICB0cmFja0hpdGxEZWNpc2lvbihpc0FjY2VwdCA/ICdhY2NlcHQnIDogJ2RlbnknLCAnYXV0bycpXG4gIH0sIFthY3Rpb25zLCBoaXRsQmF0Y2hLZXksIHN0YXR1cywgdHJhY2tIaXRsRGVjaXNpb25dKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmUgPSAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZyB8fCBsb2NhbFN0YXR1cyAhPT0gJ3BlbmRpbmcnKSByZXR1cm5cbiAgICB1c2VySW5pdGlhdGVkSGl0bERlY2lzaW9uUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgaWYgKCFoaXRsQmF0Y2hJbmNsdWRlc0NyZWF0ZUFnZW50KGFjdGlvbnMpKSB7XG4gICAgICB0cmFja0hpdGxEZWNpc2lvbignYWNjZXB0JywgJ3VzZXInKVxuICAgIH1cbiAgICBzZXRMb2NhbFN0YXR1cygnYXBwcm92ZWQnKVxuICAgIGNvbnN0IG1ldGFkYXRhID0gaXNDcmVhdGVBZ2VudEJhdGNoID8geyB0b29sX2dyb3VwX3NsdWdzOiBidWlsZEFnZW50VG9vbEdyb3Vwc1JlcXVlc3QoY29yQWNjZXNzKSB9IDogdW5kZWZpbmVkXG4gICAgb25BcHByb3ZlKFxuICAgICAgYWN0aW9ucy5tYXAoYSA9PiBhLnRocmVhZF9pZCksXG4gICAgICBtZXRhZGF0YVxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVJlamVjdCA9ICgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nIHx8IGxvY2FsU3RhdHVzICE9PSAncGVuZGluZycpIHJldHVyblxuICAgIHVzZXJJbml0aWF0ZWRIaXRsRGVjaXNpb25SZWYuY3VycmVudCA9IHRydWVcbiAgICB0cmFja0hpdGxEZWNpc2lvbignZGVueScsICd1c2VyJylcbiAgICBzZXRMb2NhbFN0YXR1cygncmVqZWN0ZWQnKVxuICAgIG9uUmVqZWN0KGFjdGlvbnMubWFwKGEgPT4gYS50aHJlYWRfaWQpKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NBcHByb3ZhbEJveD5cbiAgICAgIDxTQ0FCSGVhZGVyPlxuICAgICAgICA8U0NBQlRpdGxlPnt0KCdhcHByb3ZhbEJveC50aXRsZScpfTwvU0NBQlRpdGxlPlxuICAgICAgPC9TQ0FCSGVhZGVyPlxuXG4gICAgICA8U0NBQkRlc2NyaXB0aW9uPnt0KCdhcHByb3ZhbEJveC5kZXNjcmlwdGlvbicpfTwvU0NBQkRlc2NyaXB0aW9uPlxuXG4gICAgICA8U0NBQkFjdGlvbnNMaXN0ICRleHBhbmRlZD17aXNFeHBhbmRlZH0+XG4gICAgICAgIHthY3Rpb25zLm1hcChhY3Rpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IHNwZWNpYWxDb3B5ID0gZ2V0U3BlY2lhbEFjdGlvbkNvcHkodCwgYWN0aW9uKVxuICAgICAgICAgIGNvbnN0IGxhYmVsID0gc3BlY2lhbENvcHkudGl0bGUgfHwgZ2V0QWN0aW9uTGFiZWwodCwgYWN0aW9uLnRvb2xfbmFtZSwgKGFjdGlvbiBhcyBhbnkpLmRpc3BsYXlfbmFtZSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNDQUJBY3Rpb25JdGVtIGtleT17YWN0aW9uLnRocmVhZF9pZH0+XG4gICAgICAgICAgICAgIDxTQ0FCQWN0aW9uTmFtZT57bGFiZWx9PC9TQ0FCQWN0aW9uTmFtZT5cbiAgICAgICAgICAgICAge3NwZWNpYWxDb3B5LmRlc2NyaXB0aW9uID8gKFxuICAgICAgICAgICAgICAgIDxTQ0FCQWN0aW9uRGVzY3JpcHRpb24+e3NwZWNpYWxDb3B5LmRlc2NyaXB0aW9ufTwvU0NBQkFjdGlvbkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NBQkFjdGlvbkl0ZW0+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvU0NBQkFjdGlvbnNMaXN0PlxuXG4gICAgICB7aXNDcmVhdGVBZ2VudEJhdGNoICYmIGxvY2FsU3RhdHVzID09PSAncGVuZGluZycgJiYgIWlzUHJvamVjdERlbGV0ZWQgJiYgKFxuICAgICAgICA8U0NBQkNvbm5lY3RvcnM+XG4gICAgICAgICAgPFNDQUJDb25uZWN0b3JzVGl0bGU+XG4gICAgICAgICAgICB7dCgnYWNjZXNzaWJpbGl0eVNlY3Rpb24uY29yUGVybWlzc2lvbnNUaXRsZScsIHsgbnM6IFNFQ1RJT05TLmFibUFnZW50IH0pfVxuICAgICAgICAgIDwvU0NBQkNvbm5lY3RvcnNUaXRsZT5cbiAgICAgICAgICA8U0NBQkNvbm5lY3RvcnNTdWJ0aXRsZT5cbiAgICAgICAgICAgIHt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi5jb3JQZXJtaXNzaW9uc1N1YnRpdGxlJywgeyBuczogU0VDVElPTlMuYWJtQWdlbnQgfSl9XG4gICAgICAgICAgPC9TQ0FCQ29ubmVjdG9yc1N1YnRpdGxlPlxuICAgICAgICAgIHtDUkVBVEVfQUdFTlRfQ09OTkVDVE9SX1JPV1MubWFwKCh7IHNsdWcsIHRpdGxlS2V5LCBkZXNjcmlwdGlvbktleSB9KSA9PiAoXG4gICAgICAgICAgICA8T3B0aW9uQ29yUGVybWlzc2lvblxuICAgICAgICAgICAgICBrZXk9e3NsdWd9XG4gICAgICAgICAgICAgIHRpdGxlPXt0KGBhY2Nlc3NpYmlsaXR5U2VjdGlvbi4ke3RpdGxlS2V5fWAsIHsgbnM6IFNFQ1RJT05TLmFibUFnZW50IH0pfVxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17dChgYWNjZXNzaWJpbGl0eVNlY3Rpb24uJHtkZXNjcmlwdGlvbktleX1gLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KX1cbiAgICAgICAgICAgICAgY2hlY2tlZD17Y29yQWNjZXNzW3NsdWddfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17Y2hlY2tlZCA9PiB7XG4gICAgICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmNvbm5lY3RvckNvciwgeyBvcHRpb246IGNoZWNrZWQgPyAnb24nIDogJ29mZicsIHNsdWcgfSlcbiAgICAgICAgICAgICAgICBzZXRDb3JBY2Nlc3MocHJldiA9PiAoeyAuLi5wcmV2LCBbc2x1Z106IGNoZWNrZWQgfSkpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NDQUJDb25uZWN0b3JzPlxuICAgICAgKX1cblxuICAgICAge2xvY2FsU3RhdHVzID09PSAncGVuZGluZycgJiYgIWlzUHJvamVjdERlbGV0ZWQgJiYgKFxuICAgICAgICA8U0NBQkJ1dHRvbnNDb250YWluZXI+XG4gICAgICAgICAgPFNDQUJCdXR0b24gJHZhcmlhbnQ9XCJyZWplY3RcIiBvbkNsaWNrPXtoYW5kbGVSZWplY3R9ICRkaXNhYmxlZD17aXNMb2FkaW5nfT5cbiAgICAgICAgICAgIHt0KCdhcHByb3ZhbEJveC5kZW55Jyl9XG4gICAgICAgICAgPC9TQ0FCQnV0dG9uPlxuICAgICAgICAgIDxTQ0FCQnV0dG9uICR2YXJpYW50PVwiYXBwcm92ZVwiIG9uQ2xpY2s9e2hhbmRsZUFwcHJvdmV9ICRkaXNhYmxlZD17aXNMb2FkaW5nfT5cbiAgICAgICAgICAgIHt0KCdhcHByb3ZhbEJveC5hcHByb3ZlJyl9XG4gICAgICAgICAgPC9TQ0FCQnV0dG9uPlxuICAgICAgICA8L1NDQUJCdXR0b25zQ29udGFpbmVyPlxuICAgICAgKX1cbiAgICAgIHtsb2NhbFN0YXR1cyAhPT0gJ3BlbmRpbmcnICYmIChcbiAgICAgICAgPFNDQUJTdGF0dXNCYWRnZSAkc3RhdHVzPXtsb2NhbFN0YXR1c30+XG4gICAgICAgICAge2xvY2FsU3RhdHVzID09PSAnYXBwcm92ZWQnID8gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPENoZWNrQ2lyY2xlIHdpZHRoPXsyMn0gaGVpZ2h0PXsyMn0gY29sb3I9XCIjMDA4NDAwXCIgLz5cbiAgICAgICAgICAgICAge3QoJ2FwcHJvdmFsQm94LnN0YXR1cy5hcHByb3ZlZCcpfVxuICAgICAgICAgICAgICB7bWFudWFsQXBwcm92YWxEZXRlY3RlZCAmJiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3dhcm5pbmdNZXNzYWdlIHx8IHQoJ2FwcHJvdmFsQm94Lm1hbnVhbEFwcHJvdmFsV2FybmluZycpfSBwbGFjZW1lbnQ9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgICAgPFNDQUJTdGF0dXNXYXJuaW5nSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPEFsZXJ0IGNvbG9yPVwiI0VBQTExQVwiIHdpZHRoPVwiMTNweFwiIGhlaWdodD1cIjEzcHhcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9TQ0FCU3RhdHVzV2FybmluZ0ljb24+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxDcm9zc0NpcmNsZSB3aWR0aD17MjJ9IGhlaWdodD17MjJ9IGNvbG9yPVwiI0M3MDUwNVwiIC8+XG4gICAgICAgICAgICAgIHt0KCdhcHByb3ZhbEJveC5zdGF0dXMuZGVuaWVkJyl9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NDQUJTdGF0dXNCYWRnZT5cbiAgICAgICl9XG4gICAgPC9TQ0FwcHJvdmFsQm94PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsU0FBUyxFQUFFQyxNQUFNLEVBQUVDLFdBQVcsRUFBRUMsT0FBTyxRQUFRLE9BQU87QUFDekUsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxXQUFXLFFBQVEsOENBQThDO0FBQzFFLFNBQVNDLFdBQVcsUUFBUSw4Q0FBOEM7QUFDMUUsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUU5QyxTQUNFQyxhQUFhLEVBQ2JDLFVBQVUsRUFDVkMsU0FBUyxFQUNUQyxlQUFlLEVBQ2ZDLGVBQWUsRUFDZkMsY0FBYyxFQUNkQyxjQUFjLEVBQ2RDLHFCQUFxQixFQUNyQkMsb0JBQW9CLEVBQ3BCQyxVQUFVLEVBQ1ZDLGVBQWUsRUFDZkMscUJBQXFCLEVBQ3JCQyxjQUFjLEVBQ2RDLG1CQUFtQixFQUNuQkMsc0JBQXNCLFFBQ2pCLHNCQUFzQjtBQUM3QixTQUFTQyxRQUFRLFFBQVEsMkJBQTJCO0FBQ3BELFNBQVNDLGdCQUFnQixRQUFRLGlDQUFpQztBQUNsRSxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSx5QkFBeUI7QUFDMUQsU0FBU0MsbUJBQW1CLFFBQVEsd0JBQXdCO0FBQzVELFNBQ0VDLDJCQUEyQixFQUczQkMsa0JBQWtCLFFBQ2IseUNBQXlDO0FBQ2hELFNBQ0VDLHlCQUF5QixFQUN6QkMseUJBQXlCLEVBQ3pCQyw0QkFBNEIsRUFDNUJDLHFCQUFxQixRQUNoQiw4QkFBOEI7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBLEVBQUFDLFFBQUEsSUFBQUMsU0FBQTtBQUVyQyxJQUFNQywyQkFBbUcsR0FBRyxDQUMxRztFQUFFQyxJQUFJLEVBQUUsVUFBVTtFQUFFQyxRQUFRLEVBQUUsbUJBQW1CO0VBQUVDLGNBQWMsRUFBRTtBQUEwQixDQUFDLEVBQzlGO0VBQUVGLElBQUksRUFBRSxXQUFXO0VBQUVDLFFBQVEsRUFBRSxvQkFBb0I7RUFBRUMsY0FBYyxFQUFFO0FBQTJCLENBQUMsRUFDakc7RUFBRUYsSUFBSSxFQUFFLFFBQVE7RUFBRUMsUUFBUSxFQUFFLGlCQUFpQjtFQUFFQyxjQUFjLEVBQUU7QUFBd0IsQ0FBQyxDQUN6RjtBQUVELFNBQVNDLHNCQUFzQkEsQ0FBQ0MsUUFBaUIsRUFBVTtFQUN6RCxJQUFNQyxVQUFVLEdBQUdiLHFCQUFxQixDQUFDWSxRQUFRLElBQUksU0FBUyxDQUFDO0VBQy9ELElBQU1FLFVBQVUsR0FBR0QsVUFBVSxDQUFDRSxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUMsQ0FBQztFQUN2RCxJQUFJLENBQUNGLFVBQVUsRUFBRSxPQUFPLFNBQVM7RUFDakMsT0FBT0EsVUFBVSxDQUFDRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEdBQUdKLFVBQVUsQ0FBQ0ssS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNqRTtBQUVBLFNBQVNDLGNBQWNBLENBQUNDLENBQTBCLEVBQUVULFFBQWlCLEVBQUVVLFdBQW9CLEVBQVU7RUFDbkcsSUFBTUMsa0JBQWtCLEdBQUd2QixxQkFBcUIsQ0FBQ1ksUUFBUSxJQUFJLFNBQVMsQ0FBQztFQUN2RSxJQUFNWSxjQUFjLDBCQUFBQyxNQUFBLENBQTBCRixrQkFBa0IsQ0FBRTtFQUNsRSxJQUFNRyxlQUFlLEdBQUdMLENBQUMsQ0FBQ0csY0FBYyxDQUFDO0VBRXpDLElBQUlFLGVBQWUsS0FBS0YsY0FBYyxFQUFFLE9BQU9FLGVBQWU7RUFDOUQsSUFBSUosV0FBVyxhQUFYQSxXQUFXLGVBQVhBLFdBQVcsQ0FBRU4sSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPTSxXQUFXO0VBQzNDLE9BQU9YLHNCQUFzQixDQUFDWSxrQkFBa0IsQ0FBQztBQUNuRDtBQUVBLFNBQVNJLGtCQUFrQkEsQ0FBQ0MsUUFBb0MsRUFBVTtFQUN4RSxJQUFJLENBQUNBLFFBQVEsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNGLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRTtFQUNuRCxPQUFPRyxNQUFNLENBQUNILFFBQVEsQ0FBQ0ksZUFBZSxJQUFJSixRQUFRLENBQUNLLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQztBQUMxRjtBQUVBLFNBQVNDLG9CQUFvQkEsQ0FDM0JkLENBQTBCLEVBQzFCZSxNQUFxQixFQUNxQjtFQUMxQyxJQUFNYixrQkFBa0IsR0FBR3ZCLHFCQUFxQixDQUFDb0MsTUFBTSxDQUFDQyxTQUFTLENBQUM7RUFDbEUsSUFBTUMsZUFBZSxHQUFHWCxrQkFBa0IsQ0FBQ1MsTUFBTSxDQUFDRyxTQUFTLENBQUM7RUFFNUQsSUFBSWhCLGtCQUFrQixLQUFLLGVBQWUsRUFBRTtJQUMxQyxPQUFPO01BQ0xpQixLQUFLLEVBQUVuQixDQUFDLENBQUMsd0NBQXdDLENBQUM7TUFDbERvQixXQUFXLEVBQUVwQixDQUFDLENBQUMsOENBQThDO0lBQy9ELENBQUM7RUFDSDtFQUVBLElBQUlFLGtCQUFrQixLQUFLLG9CQUFvQixJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDbUIsUUFBUSxDQUFDSixlQUFlLENBQUMsRUFBRTtJQUNyRyxPQUFPO01BQ0xFLEtBQUssRUFBRW5CLENBQUMsQ0FBQyxxREFBcUQsQ0FBQztNQUMvRG9CLFdBQVcsRUFBRXBCLENBQUMsQ0FBQywyREFBMkQ7SUFDNUUsQ0FBQztFQUNIO0VBRUEsT0FBTyxDQUFDLENBQUM7QUFDWDtBQXNCQSxPQUFPLElBQU1zQixXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBQUMsSUFBQSxFQVdBO0VBQUEsSUFWdEJDLE9BQU8sR0FBQUQsSUFBQSxDQUFQQyxPQUFPO0lBQ1BDLFNBQVMsR0FBQUYsSUFBQSxDQUFURSxTQUFTO0lBQ1RDLFFBQVEsR0FBQUgsSUFBQSxDQUFSRyxRQUFRO0lBQUFDLFdBQUEsR0FBQUosSUFBQSxDQUNSSyxNQUFNO0lBQU5BLE1BQU0sR0FBQUQsV0FBQSxjQUFHLFNBQVMsR0FBQUEsV0FBQTtJQUFBRSxjQUFBLEdBQUFOLElBQUEsQ0FDbEJPLFNBQVM7SUFBVEEsU0FBUyxHQUFBRCxjQUFBLGNBQUcsS0FBSyxHQUFBQSxjQUFBO0lBQUFFLHFCQUFBLEdBQUFSLElBQUEsQ0FDakJTLGdCQUFnQjtJQUFoQkEsZ0JBQWdCLEdBQUFELHFCQUFBLGNBQUcsS0FBSyxHQUFBQSxxQkFBQTtJQUFBRSxlQUFBLEdBQUFWLElBQUEsQ0FDeEJXLFVBQVU7SUFBVkEsVUFBVSxHQUFBRCxlQUFBLGNBQUcsS0FBSyxHQUFBQSxlQUFBO0lBQ2xCRSxjQUFjLEdBQUFaLElBQUEsQ0FBZFksY0FBYztJQUNkQyxjQUFjLEdBQUFiLElBQUEsQ0FBZGEsY0FBYztJQUFBQyxxQkFBQSxHQUFBZCxJQUFBLENBQ2RlLHNCQUFzQjtJQUF0QkEsc0JBQXNCLEdBQUFELHFCQUFBLGNBQUcsS0FBSyxHQUFBQSxxQkFBQTtFQUU5QixJQUFBRSxlQUFBLEdBQWN0RixjQUFjLENBQUMsQ0FBQ2dCLFFBQVEsQ0FBQ3VFLE1BQU0sRUFBRXZFLFFBQVEsQ0FBQ3dFLFFBQVEsQ0FBQyxDQUFDO0lBQTFEekMsQ0FBQyxHQUFBdUMsZUFBQSxDQUFEdkMsQ0FBQztFQUNULElBQUEwQyxTQUFBLEdBQXNDbEcsUUFBUSxDQUFzQ29GLE1BQU0sQ0FBQztJQUFBZSxVQUFBLEdBQUFDLGNBQUEsQ0FBQUYsU0FBQTtJQUFwRkcsV0FBVyxHQUFBRixVQUFBO0lBQUVHLGNBQWMsR0FBQUgsVUFBQTtFQUNsQyxJQUFBSSxVQUFBLEdBQWtDdkcsUUFBUSxDQUFZK0Isa0JBQWtCLENBQUM7SUFBQXlFLFVBQUEsR0FBQUosY0FBQSxDQUFBRyxVQUFBO0lBQWxFRSxTQUFTLEdBQUFELFVBQUE7SUFBRUUsWUFBWSxHQUFBRixVQUFBO0VBQzlCLElBQU1HLGtCQUFrQixHQUFHdkcsT0FBTyxDQUFDO0lBQUEsT0FBTThCLDRCQUE0QixDQUFDOEMsT0FBTyxDQUFDO0VBQUEsR0FBRSxDQUFDQSxPQUFPLENBQUMsQ0FBQztFQUMxRixJQUFBNEIsaUJBQUEsR0FBa0JsRixnQkFBZ0IsQ0FBQyxDQUFDO0lBQTVCbUYsS0FBSyxHQUFBRCxpQkFBQSxDQUFMQyxLQUFLO0VBQ2IsSUFBTUMsY0FBYyxHQUFHbEYsUUFBUSxDQUFDLENBQUM7RUFDakMsSUFBTW1GLHdCQUF3QixHQUFHN0csTUFBTSxDQUFnQixJQUFJLENBQUM7RUFDNUQsSUFBTThHLDRCQUE0QixHQUFHOUcsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNsRCxJQUFNK0csMkJBQTJCLEdBQUcvRyxNQUFNLENBQWdCLElBQUksQ0FBQztFQUUvRCxJQUFNZ0gsWUFBWSxHQUFHOUcsT0FBTyxDQUMxQjtJQUFBLE9BQ0V1RixjQUFjLGFBQWRBLGNBQWMsY0FBZEEsY0FBYyxHQUNkWCxPQUFPLENBQ0ptQyxHQUFHLENBQUMsVUFBQUMsQ0FBQztNQUFBLFVBQUF4RCxNQUFBLENBQU93RCxDQUFDLENBQUNDLFNBQVMsT0FBQXpELE1BQUEsQ0FBSXdELENBQUMsQ0FBQ0UsWUFBWTtJQUFBLENBQUUsQ0FBQyxDQUM1Q0MsSUFBSSxDQUFDLENBQUMsQ0FDTkMsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUFBLEdBQ2QsQ0FBQzdCLGNBQWMsRUFBRVgsT0FBTyxDQUMxQixDQUFDOztFQUVEO0VBQ0EvRSxTQUFTLENBQUMsWUFBTTtJQUNkcUcsY0FBYyxDQUFDLFVBQUFtQixJQUFJO01BQUEsT0FBS0EsSUFBSSxLQUFLckMsTUFBTSxHQUFHQSxNQUFNLEdBQUdxQyxJQUFJO0lBQUEsQ0FBQyxDQUFDO0VBQzNELENBQUMsRUFBRSxDQUFDckMsTUFBTSxDQUFDLENBQUM7RUFFWixJQUFNc0Msc0JBQXNCLEdBQUd6Rix5QkFBeUIsQ0FBQzRFLEtBQUssQ0FBQzs7RUFFL0Q7RUFDQTVHLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSW9HLFdBQVcsS0FBSyxTQUFTLElBQUksQ0FBQ3JCLE9BQU8sQ0FBQzJDLE1BQU0sRUFBRTtJQUNsRCxJQUFNQyxhQUFhLEdBQUdWLFlBQVk7SUFDbEMsSUFBSUgsd0JBQXdCLENBQUNjLE9BQU8sS0FBS0QsYUFBYSxFQUFFO0lBQ3hEYix3QkFBd0IsQ0FBQ2MsT0FBTyxHQUFHRCxhQUFhO0lBQ2hEZCxjQUFjLENBQUNuRixNQUFNLENBQUNtRyxVQUFVLEVBQUU5Rix5QkFBeUIsQ0FBQzBGLHNCQUFzQixFQUFFMUMsT0FBTyxDQUFDLENBQUM7RUFDL0YsQ0FBQyxFQUFFLENBQUM4QixjQUFjLEVBQUVZLHNCQUFzQixFQUFFUixZQUFZLEVBQUViLFdBQVcsRUFBRXJCLE9BQU8sQ0FBQzJDLE1BQU0sQ0FBQyxDQUFDO0VBRXZGLElBQU1JLGlCQUFpQixHQUFHNUgsV0FBVyxDQUNuQyxVQUFDNkgsUUFBMkIsRUFBaUQ7SUFBQSxJQUEvQ0MsZ0JBQWlDLEdBQUFDLFNBQUEsQ0FBQVAsTUFBQSxRQUFBTyxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLE1BQU07SUFDdEVwQixjQUFjLENBQUNuRixNQUFNLENBQUN5RyxnQkFBZ0IsRUFBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQ2pDckcseUJBQXlCLENBQUMwRixzQkFBc0IsRUFBRTFDLE9BQU8sQ0FBQztNQUM3RGdELFFBQVEsRUFBUkEsUUFBUTtNQUNSTSxpQkFBaUIsRUFBRUw7SUFBZ0IsRUFDcEMsQ0FBQztFQUNKLENBQUMsRUFDRCxDQUFDakQsT0FBTyxFQUFFMEMsc0JBQXNCLEVBQUVaLGNBQWMsQ0FDbEQsQ0FBQztFQUVEN0csU0FBUyxDQUFDLFlBQU07SUFDZCtHLDRCQUE0QixDQUFDYSxPQUFPLEdBQUcsS0FBSztJQUM1Q1osMkJBQTJCLENBQUNZLE9BQU8sR0FBRyxJQUFJO0lBQzFDbkIsWUFBWSxDQUFDM0Usa0JBQWtCLENBQUM7RUFDbEMsQ0FBQyxFQUFFLENBQUNtRixZQUFZLENBQUMsQ0FBQzs7RUFFbEI7QUFDRjtBQUNBO0FBQ0E7RUFDRWpILFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSW1GLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQ0osT0FBTyxDQUFDMkMsTUFBTSxFQUFFO0lBQzdDLElBQUlaLHdCQUF3QixDQUFDYyxPQUFPLEtBQUtYLFlBQVksRUFBRTtJQUN2RCxJQUFJRiw0QkFBNEIsQ0FBQ2EsT0FBTyxFQUFFO0lBQzFDLElBQUlaLDJCQUEyQixDQUFDWSxPQUFPLEtBQUtYLFlBQVksRUFBRTtJQUMxREQsMkJBQTJCLENBQUNZLE9BQU8sR0FBR1gsWUFBWTtJQUNsRCxJQUFNcUIsUUFBUSxHQUFHbkQsTUFBTSxLQUFLLFVBQVU7SUFDdEMsSUFBSW1ELFFBQVEsSUFBSXJHLDRCQUE0QixDQUFDOEMsT0FBTyxDQUFDLEVBQUU7SUFDdkQrQyxpQkFBaUIsQ0FBQ1EsUUFBUSxHQUFHLFFBQVEsR0FBRyxNQUFNLEVBQUUsTUFBTSxDQUFDO0VBQ3pELENBQUMsRUFBRSxDQUFDdkQsT0FBTyxFQUFFa0MsWUFBWSxFQUFFOUIsTUFBTSxFQUFFMkMsaUJBQWlCLENBQUMsQ0FBQztFQUV0RCxJQUFNUyxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUEsRUFBUztJQUMxQixJQUFJbEQsU0FBUyxJQUFJZSxXQUFXLEtBQUssU0FBUyxFQUFFO0lBQzVDVyw0QkFBNEIsQ0FBQ2EsT0FBTyxHQUFHLElBQUk7SUFDM0MsSUFBSSxDQUFDM0YsNEJBQTRCLENBQUM4QyxPQUFPLENBQUMsRUFBRTtNQUMxQytDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDckM7SUFDQXpCLGNBQWMsQ0FBQyxVQUFVLENBQUM7SUFDMUIsSUFBTW1DLFFBQVEsR0FBRzlCLGtCQUFrQixHQUFHO01BQUUrQixnQkFBZ0IsRUFBRTVHLDJCQUEyQixDQUFDMkUsU0FBUztJQUFFLENBQUMsR0FBRzBCLFNBQVM7SUFDOUdsRCxTQUFTLENBQ1BELE9BQU8sQ0FBQ21DLEdBQUcsQ0FBQyxVQUFBQyxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDQyxTQUFTO0lBQUEsRUFBQyxFQUM3Qm9CLFFBQ0YsQ0FBQztFQUNILENBQUM7RUFFRCxJQUFNRSxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBQSxFQUFTO0lBQ3pCLElBQUlyRCxTQUFTLElBQUllLFdBQVcsS0FBSyxTQUFTLEVBQUU7SUFDNUNXLDRCQUE0QixDQUFDYSxPQUFPLEdBQUcsSUFBSTtJQUMzQ0UsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNqQ3pCLGNBQWMsQ0FBQyxVQUFVLENBQUM7SUFDMUJwQixRQUFRLENBQUNGLE9BQU8sQ0FBQ21DLEdBQUcsQ0FBQyxVQUFBQyxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDQyxTQUFTO0lBQUEsRUFBQyxDQUFDO0VBQ3pDLENBQUM7RUFFRCxvQkFDRTlFLEtBQUEsQ0FBQzdCLGFBQWE7SUFBQWtJLFFBQUEsZ0JBQ1p2RyxJQUFBLENBQUMxQixVQUFVO01BQUFpSSxRQUFBLGVBQ1R2RyxJQUFBLENBQUN6QixTQUFTO1FBQUFnSSxRQUFBLEVBQUVwRixDQUFDLENBQUMsbUJBQW1CO01BQUMsQ0FBWTtJQUFDLENBQ3JDLENBQUMsZUFFYm5CLElBQUEsQ0FBQ3hCLGVBQWU7TUFBQStILFFBQUEsRUFBRXBGLENBQUMsQ0FBQyx5QkFBeUI7SUFBQyxDQUFrQixDQUFDLGVBRWpFbkIsSUFBQSxDQUFDdkIsZUFBZTtNQUFDK0gsU0FBUyxFQUFFbkQsVUFBVztNQUFBa0QsUUFBQSxFQUNwQzVELE9BQU8sQ0FBQ21DLEdBQUcsQ0FBQyxVQUFBNUMsTUFBTSxFQUFJO1FBQ3JCLElBQU11RSxXQUFXLEdBQUd4RSxvQkFBb0IsQ0FBQ2QsQ0FBQyxFQUFFZSxNQUFNLENBQUM7UUFDbkQsSUFBTXdFLEtBQUssR0FBR0QsV0FBVyxDQUFDbkUsS0FBSyxJQUFJcEIsY0FBYyxDQUFDQyxDQUFDLEVBQUVlLE1BQU0sQ0FBQ0MsU0FBUyxFQUFHRCxNQUFNLENBQVN5RSxZQUFZLENBQUM7UUFDcEcsb0JBQ0V6RyxLQUFBLENBQUN4QixjQUFjO1VBQUE2SCxRQUFBLGdCQUNidkcsSUFBQSxDQUFDckIsY0FBYztZQUFBNEgsUUFBQSxFQUFFRztVQUFLLENBQWlCLENBQUMsRUFDdkNELFdBQVcsQ0FBQ2xFLFdBQVcsZ0JBQ3RCdkMsSUFBQSxDQUFDcEIscUJBQXFCO1lBQUEySCxRQUFBLEVBQUVFLFdBQVcsQ0FBQ2xFO1VBQVcsQ0FBd0IsQ0FBQyxHQUN0RSxJQUFJO1FBQUEsR0FKV0wsTUFBTSxDQUFDOEMsU0FLWixDQUFDO01BRXJCLENBQUM7SUFBQyxDQUNhLENBQUMsRUFFakJWLGtCQUFrQixJQUFJTixXQUFXLEtBQUssU0FBUyxJQUFJLENBQUNiLGdCQUFnQixpQkFDbkVqRCxLQUFBLENBQUNqQixjQUFjO01BQUFzSCxRQUFBLGdCQUNidkcsSUFBQSxDQUFDZCxtQkFBbUI7UUFBQXFILFFBQUEsRUFDakJwRixDQUFDLENBQUMsMENBQTBDLEVBQUU7VUFBRXlGLEVBQUUsRUFBRXhILFFBQVEsQ0FBQ3dFO1FBQVMsQ0FBQztNQUFDLENBQ3RELENBQUMsZUFDdEI1RCxJQUFBLENBQUNiLHNCQUFzQjtRQUFBb0gsUUFBQSxFQUNwQnBGLENBQUMsQ0FBQyw2Q0FBNkMsRUFBRTtVQUFFeUYsRUFBRSxFQUFFeEgsUUFBUSxDQUFDd0U7UUFBUyxDQUFDO01BQUMsQ0FDdEQsQ0FBQyxFQUN4QnZELDJCQUEyQixDQUFDeUUsR0FBRyxDQUFDLFVBQUErQixLQUFBO1FBQUEsSUFBR3ZHLElBQUksR0FBQXVHLEtBQUEsQ0FBSnZHLElBQUk7VUFBRUMsUUFBUSxHQUFBc0csS0FBQSxDQUFSdEcsUUFBUTtVQUFFQyxjQUFjLEdBQUFxRyxLQUFBLENBQWRyRyxjQUFjO1FBQUEsb0JBQ2hFUixJQUFBLENBQUNSLG1CQUFtQjtVQUVsQjhDLEtBQUssRUFBRW5CLENBQUMseUJBQUFJLE1BQUEsQ0FBeUJoQixRQUFRLEdBQUk7WUFBRXFHLEVBQUUsRUFBRXhILFFBQVEsQ0FBQ3dFO1VBQVMsQ0FBQyxDQUFFO1VBQ3hFckIsV0FBVyxFQUFFcEIsQ0FBQyx5QkFBQUksTUFBQSxDQUF5QmYsY0FBYyxHQUFJO1lBQUVvRyxFQUFFLEVBQUV4SCxRQUFRLENBQUN3RTtVQUFTLENBQUMsQ0FBRTtVQUNwRmtELE9BQU8sRUFBRTFDLFNBQVMsQ0FBQzlELElBQUksQ0FBRTtVQUN6QnlHLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFFRCxPQUFPLEVBQUk7WUFDbkJyQyxjQUFjLENBQUNuRixNQUFNLENBQUMwSCxZQUFZLEVBQUU7Y0FBRUMsTUFBTSxFQUFFSCxPQUFPLEdBQUcsSUFBSSxHQUFHLEtBQUs7Y0FBRXhHLElBQUksRUFBSkE7WUFBSyxDQUFDLENBQUM7WUFDN0UrRCxZQUFZLENBQUMsVUFBQWUsSUFBSTtjQUFBLE9BQUFZLGFBQUEsQ0FBQUEsYUFBQSxLQUFVWixJQUFJLE9BQUE4QixlQUFBLEtBQUc1RyxJQUFJLEVBQUd3RyxPQUFPO1lBQUEsQ0FBRyxDQUFDO1VBQ3RELENBQUU7VUFDRkssUUFBUSxFQUFFbEU7UUFBVSxHQVJmM0MsSUFTTixDQUFDO01BQUEsQ0FDSCxDQUFDO0lBQUEsQ0FDWSxDQUNqQixFQUVBMEQsV0FBVyxLQUFLLFNBQVMsSUFBSSxDQUFDYixnQkFBZ0IsaUJBQzdDakQsS0FBQSxDQUFDckIsb0JBQW9CO01BQUEwSCxRQUFBLGdCQUNuQnZHLElBQUEsQ0FBQ2xCLFVBQVU7UUFBQ3NJLFFBQVEsRUFBQyxRQUFRO1FBQUNDLE9BQU8sRUFBRWYsWUFBYTtRQUFDZ0IsU0FBUyxFQUFFckUsU0FBVTtRQUFBc0QsUUFBQSxFQUN2RXBGLENBQUMsQ0FBQyxrQkFBa0I7TUFBQyxDQUNaLENBQUMsZUFDYm5CLElBQUEsQ0FBQ2xCLFVBQVU7UUFBQ3NJLFFBQVEsRUFBQyxTQUFTO1FBQUNDLE9BQU8sRUFBRWxCLGFBQWM7UUFBQ21CLFNBQVMsRUFBRXJFLFNBQVU7UUFBQXNELFFBQUEsRUFDekVwRixDQUFDLENBQUMscUJBQXFCO01BQUMsQ0FDZixDQUFDO0lBQUEsQ0FDTyxDQUN2QixFQUNBNkMsV0FBVyxLQUFLLFNBQVMsaUJBQ3hCaEUsSUFBQSxDQUFDakIsZUFBZTtNQUFDd0ksT0FBTyxFQUFFdkQsV0FBWTtNQUFBdUMsUUFBQSxFQUNuQ3ZDLFdBQVcsS0FBSyxVQUFVLGdCQUN6QjlELEtBQUEsQ0FBQUUsU0FBQTtRQUFBbUcsUUFBQSxnQkFDRXZHLElBQUEsQ0FBQy9CLFdBQVc7VUFBQ3VKLEtBQUssRUFBRSxFQUFHO1VBQUNDLE1BQU0sRUFBRSxFQUFHO1VBQUNDLEtBQUssRUFBQztRQUFTLENBQUUsQ0FBQyxFQUNyRHZHLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUNoQ3NDLHNCQUFzQixpQkFDckJ6RCxJQUFBLENBQUM3QixPQUFPO1VBQUNtRSxLQUFLLEVBQUVpQixjQUFjLElBQUlwQyxDQUFDLENBQUMsbUNBQW1DLENBQUU7VUFBQ3dHLFNBQVMsRUFBQyxPQUFPO1VBQUFwQixRQUFBLGVBQ3pGdkcsSUFBQSxDQUFDaEIscUJBQXFCO1lBQUF1SCxRQUFBLGVBQ3BCdkcsSUFBQSxDQUFDaEMsS0FBSztjQUFDMEosS0FBSyxFQUFDLFNBQVM7Y0FBQ0YsS0FBSyxFQUFDLE1BQU07Y0FBQ0MsTUFBTSxFQUFDO1lBQU0sQ0FBRTtVQUFDLENBQy9CO1FBQUMsQ0FDakIsQ0FDVjtNQUFBLENBQ0QsQ0FBQyxnQkFFSHZILEtBQUEsQ0FBQUUsU0FBQTtRQUFBbUcsUUFBQSxnQkFDRXZHLElBQUEsQ0FBQzlCLFdBQVc7VUFBQ3NKLEtBQUssRUFBRSxFQUFHO1VBQUNDLE1BQU0sRUFBRSxFQUFHO1VBQUNDLEtBQUssRUFBQztRQUFTLENBQUUsQ0FBQyxFQUNyRHZHLENBQUMsQ0FBQywyQkFBMkIsQ0FBQztNQUFBLENBQy9CO0lBQ0gsQ0FDYyxDQUNsQjtFQUFBLENBQ1ksQ0FBQztBQUVwQixDQUFDIiwiaWdub3JlTGlzdCI6W119
234
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIkFsZXJ0IiwiQ2hlY2tDaXJjbGUiLCJDcm9zc0NpcmNsZSIsIlRvb2x0aXAiLCJ1c2VUcmFuc2xhdGlvbiIsIlNDQXBwcm92YWxCb3giLCJTQ0FCSGVhZGVyIiwiU0NBQlRpdGxlIiwiU0NBQkRlc2NyaXB0aW9uIiwiU0NBQkFjdGlvbnNMaXN0IiwiU0NBQkFjdGlvbkl0ZW0iLCJTQ0FCQWN0aW9uTmFtZSIsIlNDQUJBY3Rpb25EZXNjcmlwdGlvbiIsIlNDQUJCdXR0b25zQ29udGFpbmVyIiwiU0NBQkJ1dHRvbiIsIlNDQUJTdGF0dXNCYWRnZSIsIlNDQUJTdGF0dXNXYXJuaW5nSWNvbiIsIlNDQUJDb25uZWN0b3JzIiwiU0NBQkNvbm5lY3RvcnNUaXRsZSIsIlNDQUJDb25uZWN0b3JzU3VidGl0bGUiLCJTRUNUSU9OUyIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIk9wdGlvbkNvclBlcm1pc3Npb24iLCJidWlsZEFnZW50VG9vbEdyb3Vwc1JlcXVlc3QiLCJERUZBVUxUX0NPUl9BQ0NFU1MiLCJidWlsZEhpdGxBbmFseXRpY3NQYXlsb2FkIiwiZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSIsImhpdGxCYXRjaEluY2x1ZGVzQ3JlYXRlQWdlbnQiLCJnZXRBY3Rpb25MYWJlbCIsImdldFNwZWNpYWxBY3Rpb25Db3B5IiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiQ1JFQVRFX0FHRU5UX0NPTk5FQ1RPUl9ST1dTIiwic2x1ZyIsInRpdGxlS2V5IiwiZGVzY3JpcHRpb25LZXkiLCJBcHByb3ZhbEJveCIsIl9yZWYiLCJhY3Rpb25zIiwib25BcHByb3ZlIiwib25SZWplY3QiLCJfcmVmJHN0YXR1cyIsInN0YXR1cyIsIl9yZWYkaXNMb2FkaW5nIiwiaXNMb2FkaW5nIiwiX3JlZiRpc1Byb2plY3REZWxldGVkIiwiaXNQcm9qZWN0RGVsZXRlZCIsIl9yZWYkaXNFeHBhbmRlZCIsImlzRXhwYW5kZWQiLCJoaXRsSW5zdGFuY2VJZCIsIndhcm5pbmdNZXNzYWdlIiwiX3JlZiRtYW51YWxBcHByb3ZhbERlIiwibWFudWFsQXBwcm92YWxEZXRlY3RlZCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsImFibUFnZW50IiwidCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImxvY2FsU3RhdHVzIiwic2V0TG9jYWxTdGF0dXMiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImNvckFjY2VzcyIsInNldENvckFjY2VzcyIsImlzQ3JlYXRlQWdlbnRCYXRjaCIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJldmVudEFtcGxpdHVkZSIsImxhc3RIaXRsSW1wcmVzc2lvbktleVJlZiIsInVzZXJJbml0aWF0ZWRIaXRsRGVjaXNpb25SZWYiLCJhdXRvUmVzb2x1dGlvblRyYWNrZWRLZXlSZWYiLCJoaXRsQmF0Y2hLZXkiLCJtYXAiLCJhIiwiY29uY2F0IiwidGhyZWFkX2lkIiwidG9vbF9jYWxsX2lkIiwic29ydCIsImpvaW4iLCJwcmV2IiwiaGl0bEFuYWx5dGljc0FnZW50VHlwZSIsImxlbmd0aCIsImltcHJlc3Npb25LZXkiLCJjdXJyZW50IiwiYWlDaGF0SGl0bCIsInRyYWNrSGl0bERlY2lzaW9uIiwiZGVjaXNpb24iLCJyZXNvbHV0aW9uU291cmNlIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiYWlDaGF0SGl0bE9wdGlvbiIsIl9vYmplY3RTcHJlYWQiLCJyZXNvbHV0aW9uX3NvdXJjZSIsImlzQWNjZXB0IiwiaGFuZGxlQXBwcm92ZSIsIm1ldGFkYXRhIiwidG9vbF9ncm91cF9zbHVncyIsImhhbmRsZVJlamVjdCIsImNoaWxkcmVuIiwiJGV4cGFuZGVkIiwiYWN0aW9uIiwic3BlY2lhbENvcHkiLCJsYWJlbCIsInRpdGxlIiwidG9vbF9uYW1lIiwiZGlzcGxheV9uYW1lIiwiZGVzY3JpcHRpb24iLCJucyIsIl9yZWYyIiwiY2hlY2tlZCIsIm9uQ2hhbmdlIiwiY29ubmVjdG9yQ29yIiwib3B0aW9uIiwiX2RlZmluZVByb3BlcnR5IiwiZGlzYWJsZWQiLCIkdmFyaWFudCIsIm9uQ2xpY2siLCIkZGlzYWJsZWQiLCIkc3RhdHVzIiwid2lkdGgiLCJoZWlnaHQiLCJjb2xvciIsInBsYWNlbWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGVydCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0FsZXJ0J1xuaW1wb3J0IHsgQ2hlY2tDaXJjbGUgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGVja0NpcmNsZSdcbmltcG9ydCB7IENyb3NzQ2lyY2xlIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3NDaXJjbGUnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBQZW5kaW5nQWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7XG4gIFNDQXBwcm92YWxCb3gsXG4gIFNDQUJIZWFkZXIsXG4gIFNDQUJUaXRsZSxcbiAgU0NBQkRlc2NyaXB0aW9uLFxuICBTQ0FCQWN0aW9uc0xpc3QsXG4gIFNDQUJBY3Rpb25JdGVtLFxuICBTQ0FCQWN0aW9uTmFtZSxcbiAgU0NBQkFjdGlvbkRlc2NyaXB0aW9uLFxuICBTQ0FCQnV0dG9uc0NvbnRhaW5lcixcbiAgU0NBQkJ1dHRvbixcbiAgU0NBQlN0YXR1c0JhZGdlLFxuICBTQ0FCU3RhdHVzV2FybmluZ0ljb24sXG4gIFNDQUJDb25uZWN0b3JzLFxuICBTQ0FCQ29ubmVjdG9yc1RpdGxlLFxuICBTQ0FCQ29ubmVjdG9yc1N1YnRpdGxlLFxufSBmcm9tICcuL0FwcHJvdmFsQm94LnN0eWxlcydcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgT3B0aW9uQ29yUGVybWlzc2lvbiB9IGZyb20gJy4uL09wdGlvbkNvclBlcm1pc3Npb24nXG5pbXBvcnQge1xuICBidWlsZEFnZW50VG9vbEdyb3Vwc1JlcXVlc3QsXG4gIENvckFjY2VzcyxcbiAgQ29yVG9vbEdyb3VwU2x1ZyxcbiAgREVGQVVMVF9DT1JfQUNDRVNTLFxufSBmcm9tICcuLi8uLi8uLi91dGlscy9ub3JtYWxpemVBZ2VudENvbm5lY3RvcnMnXG5pbXBvcnQge1xuICBidWlsZEhpdGxBbmFseXRpY3NQYXlsb2FkLFxuICBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlLFxuICBoaXRsQmF0Y2hJbmNsdWRlc0NyZWF0ZUFnZW50LFxufSBmcm9tICcuLi8uLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHsgZ2V0QWN0aW9uTGFiZWwsIGdldFNwZWNpYWxBY3Rpb25Db3B5IH0gZnJvbSAnLi9BcHByb3ZhbEJveC5oZWxwZXJzJ1xuXG5jb25zdCBDUkVBVEVfQUdFTlRfQ09OTkVDVE9SX1JPV1M6IHsgc2x1ZzogQ29yVG9vbEdyb3VwU2x1ZzsgdGl0bGVLZXk6IHN0cmluZzsgZGVzY3JpcHRpb25LZXk6IHN0cmluZyB9W10gPSBbXG4gIHsgc2x1ZzogJ2NsaWVudGVzJywgdGl0bGVLZXk6ICdjbGllbnRBY2Nlc3NUaXRsZScsIGRlc2NyaXB0aW9uS2V5OiAnY2xpZW50QWNjZXNzRGVzY3JpcHRpb24nIH0sXG4gIHsgc2x1ZzogJ3Byb3llY3RvcycsIHRpdGxlS2V5OiAncHJvamVjdEFjY2Vzc1RpdGxlJywgZGVzY3JpcHRpb25LZXk6ICdwcm9qZWN0QWNjZXNzRGVzY3JpcHRpb24nIH0sXG4gIHsgc2x1ZzogJ3RhcmVhcycsIHRpdGxlS2V5OiAndGFza0FjY2Vzc1RpdGxlJywgZGVzY3JpcHRpb25LZXk6ICd0YXNrQWNjZXNzRGVzY3JpcHRpb24nIH0sXG5dXG5cbmV4cG9ydCB0eXBlIEFwcHJvdmFsTWV0YWRhdGEgPSB7XG4gIHRvb2xfZ3JvdXBfc2x1Z3M6IHN0cmluZ1tdXG59XG5cbmludGVyZmFjZSBBcHByb3ZhbEJveFByb3BzIHtcbiAgYWN0aW9uczogUGVuZGluZ0FjdGlvbltdXG4gIG9uQXBwcm92ZTogKHRocmVhZElkczogc3RyaW5nW10sIG1ldGFkYXRhPzogQXBwcm92YWxNZXRhZGF0YSkgPT4gdm9pZFxuICBvblJlamVjdDogKHRocmVhZElkczogc3RyaW5nW10pID0+IHZvaWRcbiAgc3RhdHVzPzogJ3BlbmRpbmcnIHwgJ2FwcHJvdmVkJyB8ICdyZWplY3RlZCdcbiAgaXNMb2FkaW5nPzogYm9vbGVhblxuICAvKiogU2kgZWwgY2hhdC9wcm95ZWN0byBlc3TDoSBlbGltaW5hZG8sIHNlIG9jdWx0YW4gbG9zIGJvdG9uZXMgZGUgYXByb2Jhci9yZWNoYXphciAqL1xuICBpc1Byb2plY3REZWxldGVkPzogYm9vbGVhblxuICAvKiogU2kgZWwgY2hhdCBlc3TDoSBleHBhbmRpZG8gKHRydWUpIG8gY29sYXBzYWRvIChmYWxzZSkuIEFmZWN0YSBlbCBhbmNobyBkZWwgY29udGVuZWRvci4gKi9cbiAgaXNFeHBhbmRlZD86IGJvb2xlYW5cbiAgLyoqIElkIGVzdGFibGUgcG9yIGxvdGUgSElUTCAocC4gZWouIG9yaWdpbmFsX3RocmVhZF9pZCkgcGFyYSBlbCBldmVudG8gZGUgaW1wcmVzacOzbiAqL1xuICBoaXRsSW5zdGFuY2VJZD86IHN0cmluZ1xuICB3YXJuaW5nTWVzc2FnZT86IHN0cmluZ1xuICBtYW51YWxBcHByb3ZhbERldGVjdGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgQXBwcm92YWxCb3ggPSAoe1xuICBhY3Rpb25zLFxuICBvbkFwcHJvdmUsXG4gIG9uUmVqZWN0LFxuICBzdGF0dXMgPSAncGVuZGluZycsXG4gIGlzTG9hZGluZyA9IGZhbHNlLFxuICBpc1Byb2plY3REZWxldGVkID0gZmFsc2UsXG4gIGlzRXhwYW5kZWQgPSBmYWxzZSxcbiAgaGl0bEluc3RhbmNlSWQsXG4gIHdhcm5pbmdNZXNzYWdlLFxuICBtYW51YWxBcHByb3ZhbERldGVjdGVkID0gZmFsc2UsXG59OiBBcHByb3ZhbEJveFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmNoYXRBSSwgU0VDVElPTlMuYWJtQWdlbnRdKVxuICBjb25zdCBbbG9jYWxTdGF0dXMsIHNldExvY2FsU3RhdHVzXSA9IHVzZVN0YXRlPCdwZW5kaW5nJyB8ICdhcHByb3ZlZCcgfCAncmVqZWN0ZWQnPihzdGF0dXMpXG4gIGNvbnN0IFtjb3JBY2Nlc3MsIHNldENvckFjY2Vzc10gPSB1c2VTdGF0ZTxDb3JBY2Nlc3M+KERFRkFVTFRfQ09SX0FDQ0VTUylcbiAgY29uc3QgaXNDcmVhdGVBZ2VudEJhdGNoID0gdXNlTWVtbygoKSA9PiBoaXRsQmF0Y2hJbmNsdWRlc0NyZWF0ZUFnZW50KGFjdGlvbnMpLCBbYWN0aW9uc10pXG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgbGFzdEhpdGxJbXByZXNzaW9uS2V5UmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHVzZXJJbml0aWF0ZWRIaXRsRGVjaXNpb25SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGF1dG9SZXNvbHV0aW9uVHJhY2tlZEtleVJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGhpdGxCYXRjaEtleSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGhpdGxJbnN0YW5jZUlkID8/XG4gICAgICBhY3Rpb25zXG4gICAgICAgIC5tYXAoYSA9PiBgJHthLnRocmVhZF9pZH06JHthLnRvb2xfY2FsbF9pZH1gKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5qb2luKCd8JyksXG4gICAgW2hpdGxJbnN0YW5jZUlkLCBhY3Rpb25zXVxuICApXG5cbiAgLy8gU2luY3Jvbml6YXIgbG9jYWxTdGF0dXMgY29uIGVsIHByb3Agc3RhdHVzIGN1YW5kbyBjYW1iaWEgZGVzZGUgZWwgcGFkcmUgKHNvbG8gcG9yIHZhbHVlLCBldml0YSBidWNsZXMpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TG9jYWxTdGF0dXMocHJldiA9PiAocHJldiAhPT0gc3RhdHVzID8gc3RhdHVzIDogcHJldikpXG4gIH0sIFtzdGF0dXNdKVxuXG4gIGNvbnN0IGhpdGxBbmFseXRpY3NBZ2VudFR5cGUgPSBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlKGFnZW50KVxuXG4gIC8vIENBMTogY2FyZCBkZSBjb25maXJtYWNpw7NuIEhJVEwgdmlzaWJsZSAoc29sbyBwZW5kaWVudGUsIG5vIGhpc3TDs3JpY28geWEgcmVzdWVsdG8pXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvY2FsU3RhdHVzICE9PSAncGVuZGluZycgfHwgIWFjdGlvbnMubGVuZ3RoKSByZXR1cm5cbiAgICBjb25zdCBpbXByZXNzaW9uS2V5ID0gaGl0bEJhdGNoS2V5XG4gICAgaWYgKGxhc3RIaXRsSW1wcmVzc2lvbktleVJlZi5jdXJyZW50ID09PSBpbXByZXNzaW9uS2V5KSByZXR1cm5cbiAgICBsYXN0SGl0bEltcHJlc3Npb25LZXlSZWYuY3VycmVudCA9IGltcHJlc3Npb25LZXlcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0SGl0bCwgYnVpbGRIaXRsQW5hbHl0aWNzUGF5bG9hZChoaXRsQW5hbHl0aWNzQWdlbnRUeXBlLCBhY3Rpb25zKSlcbiAgfSwgW2V2ZW50QW1wbGl0dWRlLCBoaXRsQW5hbHl0aWNzQWdlbnRUeXBlLCBoaXRsQmF0Y2hLZXksIGxvY2FsU3RhdHVzLCBhY3Rpb25zLmxlbmd0aF0pXG5cbiAgY29uc3QgdHJhY2tIaXRsRGVjaXNpb24gPSB1c2VDYWxsYmFjayhcbiAgICAoZGVjaXNpb246ICdhY2NlcHQnIHwgJ2RlbnknLCByZXNvbHV0aW9uU291cmNlOiAndXNlcicgfCAnYXV0bycgPSAndXNlcicpID0+IHtcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgIC4uLmJ1aWxkSGl0bEFuYWx5dGljc1BheWxvYWQoaGl0bEFuYWx5dGljc0FnZW50VHlwZSwgYWN0aW9ucyksXG4gICAgICAgIGRlY2lzaW9uLFxuICAgICAgICByZXNvbHV0aW9uX3NvdXJjZTogcmVzb2x1dGlvblNvdXJjZSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbYWN0aW9ucywgaGl0bEFuYWx5dGljc0FnZW50VHlwZSwgZXZlbnRBbXBsaXR1ZGVdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHVzZXJJbml0aWF0ZWRIaXRsRGVjaXNpb25SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgYXV0b1Jlc29sdXRpb25UcmFja2VkS2V5UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0Q29yQWNjZXNzKERFRkFVTFRfQ09SX0FDQ0VTUylcbiAgfSwgW2hpdGxCYXRjaEtleV0pXG5cbiAgLyoqXG4gICAqIFJlc29sdWNpw7NuIHNpbiBjbGljIChwLiBlai4gYmFja2VuZCBlamVjdXRhIGxhIGhlcnJhbWllbnRhIHNvbGEpOiBodWJvIGltcHJlc2nDs24gSElUTFxuICAgKiBwYXJhIGVzdGUgbG90ZSB5IGVsIHBhZHJlIHBhc8OzIGEgYXBwcm92ZWQvcmVqZWN0ZWQgc2luIHF1ZSBlbCB1c3VhcmlvIHB1bHNhcmEgYXByb2Jhci9kZW5lZ2FyLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3RhdHVzID09PSAncGVuZGluZycgfHwgIWFjdGlvbnMubGVuZ3RoKSByZXR1cm5cbiAgICBpZiAobGFzdEhpdGxJbXByZXNzaW9uS2V5UmVmLmN1cnJlbnQgIT09IGhpdGxCYXRjaEtleSkgcmV0dXJuXG4gICAgaWYgKHVzZXJJbml0aWF0ZWRIaXRsRGVjaXNpb25SZWYuY3VycmVudCkgcmV0dXJuXG4gICAgaWYgKGF1dG9SZXNvbHV0aW9uVHJhY2tlZEtleVJlZi5jdXJyZW50ID09PSBoaXRsQmF0Y2hLZXkpIHJldHVyblxuICAgIGF1dG9SZXNvbHV0aW9uVHJhY2tlZEtleVJlZi5jdXJyZW50ID0gaGl0bEJhdGNoS2V5XG4gICAgY29uc3QgaXNBY2NlcHQgPSBzdGF0dXMgPT09ICdhcHByb3ZlZCdcbiAgICBpZiAoaXNBY2NlcHQgJiYgaGl0bEJhdGNoSW5jbHVkZXNDcmVhdGVBZ2VudChhY3Rpb25zKSkgcmV0dXJuXG4gICAgdHJhY2tIaXRsRGVjaXNpb24oaXNBY2NlcHQgPyAnYWNjZXB0JyA6ICdkZW55JywgJ2F1dG8nKVxuICB9LCBbYWN0aW9ucywgaGl0bEJhdGNoS2V5LCBzdGF0dXMsIHRyYWNrSGl0bERlY2lzaW9uXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZlID0gKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcgfHwgbG9jYWxTdGF0dXMgIT09ICdwZW5kaW5nJykgcmV0dXJuXG4gICAgdXNlckluaXRpYXRlZEhpdGxEZWNpc2lvblJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIGlmICghaGl0bEJhdGNoSW5jbHVkZXNDcmVhdGVBZ2VudChhY3Rpb25zKSkge1xuICAgICAgdHJhY2tIaXRsRGVjaXNpb24oJ2FjY2VwdCcsICd1c2VyJylcbiAgICB9XG4gICAgc2V0TG9jYWxTdGF0dXMoJ2FwcHJvdmVkJylcbiAgICBjb25zdCBtZXRhZGF0YSA9IGlzQ3JlYXRlQWdlbnRCYXRjaCA/IHsgdG9vbF9ncm91cF9zbHVnczogYnVpbGRBZ2VudFRvb2xHcm91cHNSZXF1ZXN0KGNvckFjY2VzcykgfSA6IHVuZGVmaW5lZFxuICAgIG9uQXBwcm92ZShcbiAgICAgIGFjdGlvbnMubWFwKGEgPT4gYS50aHJlYWRfaWQpLFxuICAgICAgbWV0YWRhdGFcbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVSZWplY3QgPSAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZyB8fCBsb2NhbFN0YXR1cyAhPT0gJ3BlbmRpbmcnKSByZXR1cm5cbiAgICB1c2VySW5pdGlhdGVkSGl0bERlY2lzaW9uUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgdHJhY2tIaXRsRGVjaXNpb24oJ2RlbnknLCAndXNlcicpXG4gICAgc2V0TG9jYWxTdGF0dXMoJ3JlamVjdGVkJylcbiAgICBvblJlamVjdChhY3Rpb25zLm1hcChhID0+IGEudGhyZWFkX2lkKSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDQXBwcm92YWxCb3g+XG4gICAgICA8U0NBQkhlYWRlcj5cbiAgICAgICAgPFNDQUJUaXRsZT57dCgnYXBwcm92YWxCb3gudGl0bGUnKX08L1NDQUJUaXRsZT5cbiAgICAgIDwvU0NBQkhlYWRlcj5cblxuICAgICAgPFNDQUJEZXNjcmlwdGlvbj57dCgnYXBwcm92YWxCb3guZGVzY3JpcHRpb24nKX08L1NDQUJEZXNjcmlwdGlvbj5cblxuICAgICAgPFNDQUJBY3Rpb25zTGlzdCAkZXhwYW5kZWQ9e2lzRXhwYW5kZWR9PlxuICAgICAgICB7YWN0aW9ucy5tYXAoYWN0aW9uID0+IHtcbiAgICAgICAgICBjb25zdCBzcGVjaWFsQ29weSA9IGdldFNwZWNpYWxBY3Rpb25Db3B5KHQsIGFjdGlvbilcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IHNwZWNpYWxDb3B5LnRpdGxlIHx8IGdldEFjdGlvbkxhYmVsKHQsIGFjdGlvbi50b29sX25hbWUsIChhY3Rpb24gYXMgYW55KS5kaXNwbGF5X25hbWUpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxTQ0FCQWN0aW9uSXRlbSBrZXk9e2FjdGlvbi50aHJlYWRfaWR9PlxuICAgICAgICAgICAgICA8U0NBQkFjdGlvbk5hbWU+e2xhYmVsfTwvU0NBQkFjdGlvbk5hbWU+XG4gICAgICAgICAgICAgIHtzcGVjaWFsQ29weS5kZXNjcmlwdGlvbiA/IChcbiAgICAgICAgICAgICAgICA8U0NBQkFjdGlvbkRlc2NyaXB0aW9uPntzcGVjaWFsQ29weS5kZXNjcmlwdGlvbn08L1NDQUJBY3Rpb25EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L1NDQUJBY3Rpb25JdGVtPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8L1NDQUJBY3Rpb25zTGlzdD5cblxuICAgICAge2lzQ3JlYXRlQWdlbnRCYXRjaCAmJiBsb2NhbFN0YXR1cyA9PT0gJ3BlbmRpbmcnICYmICFpc1Byb2plY3REZWxldGVkICYmIChcbiAgICAgICAgPFNDQUJDb25uZWN0b3JzPlxuICAgICAgICAgIDxTQ0FCQ29ubmVjdG9yc1RpdGxlPlxuICAgICAgICAgICAge3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNvclBlcm1pc3Npb25zVGl0bGUnLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KX1cbiAgICAgICAgICA8L1NDQUJDb25uZWN0b3JzVGl0bGU+XG4gICAgICAgICAgPFNDQUJDb25uZWN0b3JzU3VidGl0bGU+XG4gICAgICAgICAgICB7dCgnYWNjZXNzaWJpbGl0eVNlY3Rpb24uY29yUGVybWlzc2lvbnNTdWJ0aXRsZScsIHsgbnM6IFNFQ1RJT05TLmFibUFnZW50IH0pfVxuICAgICAgICAgIDwvU0NBQkNvbm5lY3RvcnNTdWJ0aXRsZT5cbiAgICAgICAgICB7Q1JFQVRFX0FHRU5UX0NPTk5FQ1RPUl9ST1dTLm1hcCgoeyBzbHVnLCB0aXRsZUtleSwgZGVzY3JpcHRpb25LZXkgfSkgPT4gKFxuICAgICAgICAgICAgPE9wdGlvbkNvclBlcm1pc3Npb25cbiAgICAgICAgICAgICAga2V5PXtzbHVnfVxuICAgICAgICAgICAgICB0aXRsZT17dChgYWNjZXNzaWJpbGl0eVNlY3Rpb24uJHt0aXRsZUtleX1gLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KX1cbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249e3QoYGFjY2Vzc2liaWxpdHlTZWN0aW9uLiR7ZGVzY3JpcHRpb25LZXl9YCwgeyBuczogU0VDVElPTlMuYWJtQWdlbnQgfSl9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e2NvckFjY2Vzc1tzbHVnXX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2NoZWNrZWQgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5jb25uZWN0b3JDb3IsIHsgb3B0aW9uOiBjaGVja2VkID8gJ29uJyA6ICdvZmYnLCBzbHVnIH0pXG4gICAgICAgICAgICAgICAgc2V0Q29yQWNjZXNzKHByZXYgPT4gKHsgLi4ucHJldiwgW3NsdWddOiBjaGVja2VkIH0pKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TQ0FCQ29ubmVjdG9ycz5cbiAgICAgICl9XG5cbiAgICAgIHtsb2NhbFN0YXR1cyA9PT0gJ3BlbmRpbmcnICYmICFpc1Byb2plY3REZWxldGVkICYmIChcbiAgICAgICAgPFNDQUJCdXR0b25zQ29udGFpbmVyPlxuICAgICAgICAgIDxTQ0FCQnV0dG9uICR2YXJpYW50PVwicmVqZWN0XCIgb25DbGljaz17aGFuZGxlUmVqZWN0fSAkZGlzYWJsZWQ9e2lzTG9hZGluZ30+XG4gICAgICAgICAgICB7dCgnYXBwcm92YWxCb3guZGVueScpfVxuICAgICAgICAgIDwvU0NBQkJ1dHRvbj5cbiAgICAgICAgICA8U0NBQkJ1dHRvbiAkdmFyaWFudD1cImFwcHJvdmVcIiBvbkNsaWNrPXtoYW5kbGVBcHByb3ZlfSAkZGlzYWJsZWQ9e2lzTG9hZGluZ30+XG4gICAgICAgICAgICB7dCgnYXBwcm92YWxCb3guYXBwcm92ZScpfVxuICAgICAgICAgIDwvU0NBQkJ1dHRvbj5cbiAgICAgICAgPC9TQ0FCQnV0dG9uc0NvbnRhaW5lcj5cbiAgICAgICl9XG4gICAgICB7bG9jYWxTdGF0dXMgIT09ICdwZW5kaW5nJyAmJiAoXG4gICAgICAgIDxTQ0FCU3RhdHVzQmFkZ2UgJHN0YXR1cz17bG9jYWxTdGF0dXN9PlxuICAgICAgICAgIHtsb2NhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyA/IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxDaGVja0NpcmNsZSB3aWR0aD17MjJ9IGhlaWdodD17MjJ9IGNvbG9yPVwiIzAwODQwMFwiIC8+XG4gICAgICAgICAgICAgIHt0KCdhcHByb3ZhbEJveC5zdGF0dXMuYXBwcm92ZWQnKX1cbiAgICAgICAgICAgICAge21hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQgJiYgKFxuICAgICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt3YXJuaW5nTWVzc2FnZSB8fCB0KCdhcHByb3ZhbEJveC5tYW51YWxBcHByb3ZhbFdhcm5pbmcnKX0gcGxhY2VtZW50PVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgIDxTQ0FCU3RhdHVzV2FybmluZ0ljb24+XG4gICAgICAgICAgICAgICAgICAgIDxBbGVydCBjb2xvcj1cIiNFQUExMUFcIiB3aWR0aD1cIjEzcHhcIiBoZWlnaHQ9XCIxM3B4XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NBQlN0YXR1c1dhcm5pbmdJY29uPlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8Q3Jvc3NDaXJjbGUgd2lkdGg9ezIyfSBoZWlnaHQ9ezIyfSBjb2xvcj1cIiNDNzA1MDVcIiAvPlxuICAgICAgICAgICAgICB7dCgnYXBwcm92YWxCb3guc3RhdHVzLmRlbmllZCcpfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0FCU3RhdHVzQmFkZ2U+XG4gICAgICApfVxuICAgIDwvU0NBcHByb3ZhbEJveD5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQSxTQUFTQSxRQUFRLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sUUFBUSxPQUFPO0FBQ3pFLFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsV0FBVyxRQUFRLDhDQUE4QztBQUMxRSxTQUFTQyxXQUFXLFFBQVEsOENBQThDO0FBQzFFLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFFOUMsU0FDRUMsYUFBYSxFQUNiQyxVQUFVLEVBQ1ZDLFNBQVMsRUFDVEMsZUFBZSxFQUNmQyxlQUFlLEVBQ2ZDLGNBQWMsRUFDZEMsY0FBYyxFQUNkQyxxQkFBcUIsRUFDckJDLG9CQUFvQixFQUNwQkMsVUFBVSxFQUNWQyxlQUFlLEVBQ2ZDLHFCQUFxQixFQUNyQkMsY0FBYyxFQUNkQyxtQkFBbUIsRUFDbkJDLHNCQUFzQixRQUNqQixzQkFBc0I7QUFDN0IsU0FBU0MsUUFBUSxRQUFRLDJCQUEyQjtBQUNwRCxTQUFTQyxnQkFBZ0IsUUFBUSxpQ0FBaUM7QUFDbEUsU0FBU0MsTUFBTSxFQUFFQyxRQUFRLFFBQVEseUJBQXlCO0FBQzFELFNBQVNDLG1CQUFtQixRQUFRLHdCQUF3QjtBQUM1RCxTQUNFQywyQkFBMkIsRUFHM0JDLGtCQUFr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
@@ -0,0 +1,183 @@
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 { fireEvent, renderWithProviders, screen } from '../../../test/test-utils';
5
+ import { ApprovalBox } from './ApprovalBox';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ var triggerEvent = jest.fn();
8
+ jest.mock('../../../context/global-context', function () {
9
+ return {
10
+ useGlobalContext: function useGlobalContext() {
11
+ return {
12
+ agent: {
13
+ type: 'custom',
14
+ name: 'Legal',
15
+ entity: 'custom'
16
+ }
17
+ };
18
+ }
19
+ };
20
+ });
21
+ jest.mock('../../../hooks/useEvent', function () {
22
+ return {
23
+ EVENTS: {
24
+ aiChatHitl: 'AI_CHAT_HITL',
25
+ aiChatHitlOption: 'AI_CHAT_HITL_OPTION',
26
+ connectorCor: 'AI_CHAT_ABM_CONNECTOR_COR'
27
+ },
28
+ useEvent: function useEvent() {
29
+ return triggerEvent;
30
+ }
31
+ };
32
+ });
33
+ var action = function action() {
34
+ var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
35
+ return _objectSpread({
36
+ tool_name: 'edit_task',
37
+ tool_call_id: 'c1',
38
+ tool_args: {},
39
+ thread_id: 't1'
40
+ }, overrides);
41
+ };
42
+ describe('ApprovalBox', function () {
43
+ var onApprove = jest.fn();
44
+ var onReject = jest.fn();
45
+ beforeEach(function () {
46
+ onApprove.mockClear();
47
+ onReject.mockClear();
48
+ triggerEvent.mockClear();
49
+ });
50
+ it('approves the pending actions', function () {
51
+ var props = {
52
+ actions: [action()],
53
+ onApprove: onApprove,
54
+ onReject: onReject
55
+ };
56
+ var _renderWithProviders = renderWithProviders(/*#__PURE__*/_jsx(ApprovalBox, _objectSpread({}, props))),
57
+ rerender = _renderWithProviders.rerender;
58
+ fireEvent.click(screen.getByRole('button', {
59
+ name: 'approvalBox.approve'
60
+ }));
61
+ expect(onApprove).toHaveBeenCalledWith(['t1'], undefined);
62
+ rerender(/*#__PURE__*/_jsx(ApprovalBox, _objectSpread(_objectSpread({}, props), {}, {
63
+ status: "approved"
64
+ })));
65
+ expect(screen.getByText('approvalBox.status.approved')).toBeInTheDocument();
66
+ });
67
+ it('rejects the pending actions', function () {
68
+ var props = {
69
+ actions: [action()],
70
+ onApprove: onApprove,
71
+ onReject: onReject
72
+ };
73
+ var _renderWithProviders2 = renderWithProviders(/*#__PURE__*/_jsx(ApprovalBox, _objectSpread({}, props))),
74
+ rerender = _renderWithProviders2.rerender;
75
+ fireEvent.click(screen.getByRole('button', {
76
+ name: 'approvalBox.deny'
77
+ }));
78
+ expect(onReject).toHaveBeenCalledWith(['t1']);
79
+ rerender(/*#__PURE__*/_jsx(ApprovalBox, _objectSpread(_objectSpread({}, props), {}, {
80
+ status: "rejected"
81
+ })));
82
+ expect(screen.getByText('approvalBox.status.denied')).toBeInTheDocument();
83
+ });
84
+ it('hides the buttons when the project is deleted', function () {
85
+ renderWithProviders(/*#__PURE__*/_jsx(ApprovalBox, {
86
+ actions: [action()],
87
+ onApprove: onApprove,
88
+ onReject: onReject,
89
+ isProjectDeleted: true
90
+ }));
91
+ expect(screen.queryByRole('button', {
92
+ name: 'approvalBox.approve'
93
+ })).not.toBeInTheDocument();
94
+ });
95
+ it('does not approve again while loading', function () {
96
+ renderWithProviders(/*#__PURE__*/_jsx(ApprovalBox, {
97
+ actions: [action()],
98
+ onApprove: onApprove,
99
+ onReject: onReject,
100
+ isLoading: true
101
+ }));
102
+ fireEvent.click(screen.getByRole('button', {
103
+ name: 'approvalBox.approve'
104
+ }));
105
+ expect(onApprove).not.toHaveBeenCalled();
106
+ });
107
+ it('does not show COR toggles for a regular tool batch', function () {
108
+ renderWithProviders(/*#__PURE__*/_jsx(ApprovalBox, {
109
+ actions: [action()],
110
+ onApprove: onApprove,
111
+ onReject: onReject
112
+ }));
113
+ expect(screen.queryByText('accessibilitySection.corPermissionsTitle')).not.toBeInTheDocument();
114
+ });
115
+ it('renders special action copy for rework and deliverable children', function () {
116
+ renderWithProviders(/*#__PURE__*/_jsx(ApprovalBox, {
117
+ actions: [action({
118
+ tool_name: 'create_rework'
119
+ })],
120
+ onApprove: onApprove,
121
+ onReject: onReject
122
+ }));
123
+ expect(screen.getByText('approvalBox.special.createRework.title')).toBeInTheDocument();
124
+ renderWithProviders(/*#__PURE__*/_jsx(ApprovalBox, {
125
+ actions: [action({
126
+ tool_name: 'update_deliverable',
127
+ tool_args: {
128
+ deliverable_type: 'children'
129
+ }
130
+ })],
131
+ onApprove: onApprove,
132
+ onReject: onReject
133
+ }));
134
+ expect(screen.getByText('approvalBox.special.updateDeliverableChildren.title')).toBeInTheDocument();
135
+ });
136
+ it('tracks auto resolution when status changes without user action', function () {
137
+ var props = {
138
+ actions: [action()],
139
+ onApprove: onApprove,
140
+ onReject: onReject
141
+ };
142
+ var _renderWithProviders3 = renderWithProviders(/*#__PURE__*/_jsx(ApprovalBox, _objectSpread({}, props))),
143
+ rerender = _renderWithProviders3.rerender;
144
+ rerender(/*#__PURE__*/_jsx(ApprovalBox, _objectSpread(_objectSpread({}, props), {}, {
145
+ status: "approved"
146
+ })));
147
+ expect(triggerEvent).toHaveBeenCalledWith('AI_CHAT_HITL_OPTION', expect.objectContaining({
148
+ decision: 'accept',
149
+ resolution_source: 'auto'
150
+ }));
151
+ });
152
+ it('shows manual approval warning on approved status', function () {
153
+ renderWithProviders(/*#__PURE__*/_jsx(ApprovalBox, {
154
+ actions: [action()],
155
+ onApprove: onApprove,
156
+ onReject: onReject,
157
+ status: "approved",
158
+ manualApprovalDetected: true,
159
+ warningMessage: "warning custom"
160
+ }));
161
+ expect(screen.getByText('approvalBox.status.approved')).toBeInTheDocument();
162
+ });
163
+ it('sends selected COR slugs when approving create_agent', function () {
164
+ renderWithProviders(/*#__PURE__*/_jsx(ApprovalBox, {
165
+ actions: [action({
166
+ tool_name: 'create_agent'
167
+ })],
168
+ onApprove: onApprove,
169
+ onReject: onReject
170
+ }));
171
+ expect(screen.getByText('accessibilitySection.corPermissionsTitle')).toBeInTheDocument();
172
+ fireEvent.click(screen.getByRole('switch', {
173
+ name: 'accessibilitySection.clientAccessTitle'
174
+ }));
175
+ fireEvent.click(screen.getByRole('button', {
176
+ name: 'approvalBox.approve'
177
+ }));
178
+ expect(onApprove).toHaveBeenCalledWith(['t1'], {
179
+ tool_group_slugs: ['proyectos', 'tareas']
180
+ });
181
+ });
182
+ });
183
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaXJlRXZlbnQiLCJyZW5kZXJXaXRoUHJvdmlkZXJzIiwic2NyZWVuIiwiQXBwcm92YWxCb3giLCJqc3giLCJfanN4IiwidHJpZ2dlckV2ZW50IiwiamVzdCIsImZuIiwibW9jayIsInVzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsInR5cGUiLCJuYW1lIiwiZW50aXR5IiwiRVZFTlRTIiwiYWlDaGF0SGl0bCIsImFpQ2hhdEhpdGxPcHRpb24iLCJjb25uZWN0b3JDb3IiLCJ1c2VFdmVudCIsImFjdGlvbiIsIm92ZXJyaWRlcyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIl9vYmplY3RTcHJlYWQiLCJ0b29sX25hbWUiLCJ0b29sX2NhbGxfaWQiLCJ0b29sX2FyZ3MiLCJ0aHJlYWRfaWQiLCJkZXNjcmliZSIsIm9uQXBwcm92ZSIsIm9uUmVqZWN0IiwiYmVmb3JlRWFjaCIsIm1vY2tDbGVhciIsIml0IiwicHJvcHMiLCJhY3Rpb25zIiwiX3JlbmRlcldpdGhQcm92aWRlcnMiLCJyZXJlbmRlciIsImNsaWNrIiwiZ2V0QnlSb2xlIiwiZXhwZWN0IiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJzdGF0dXMiLCJnZXRCeVRleHQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsIl9yZW5kZXJXaXRoUHJvdmlkZXJzMiIsImlzUHJvamVjdERlbGV0ZWQiLCJxdWVyeUJ5Um9sZSIsIm5vdCIsImlzTG9hZGluZyIsInRvSGF2ZUJlZW5DYWxsZWQiLCJxdWVyeUJ5VGV4dCIsImRlbGl2ZXJhYmxlX3R5cGUiLCJfcmVuZGVyV2l0aFByb3ZpZGVyczMiLCJvYmplY3RDb250YWluaW5nIiwiZGVjaXNpb24iLCJyZXNvbHV0aW9uX3NvdXJjZSIsIm1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQiLCJ3YXJuaW5nTWVzc2FnZSIsInRvb2xfZ3JvdXBfc2x1Z3MiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9BcHByb3ZhbEJveC9BcHByb3ZhbEJveC5zcGVjLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJlRXZlbnQsIHJlbmRlcldpdGhQcm92aWRlcnMsIHNjcmVlbiB9IGZyb20gJy4uLy4uLy4uL3Rlc3QvdGVzdC11dGlscydcbmltcG9ydCB0eXBlIHsgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4vQXBwcm92YWxCb3gnXG5cbmNvbnN0IHRyaWdnZXJFdmVudCA9IGplc3QuZm4oKVxuXG5qZXN0Lm1vY2soJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnLCAoKSA9PiAoe1xuICB1c2VHbG9iYWxDb250ZXh0OiAoKSA9PiAoeyBhZ2VudDogeyB0eXBlOiAnY3VzdG9tJywgbmFtZTogJ0xlZ2FsJywgZW50aXR5OiAnY3VzdG9tJyB9IH0pLFxufSkpXG5cbmplc3QubW9jaygnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnLCAoKSA9PiAoe1xuICBFVkVOVFM6IHtcbiAgICBhaUNoYXRIaXRsOiAnQUlfQ0hBVF9ISVRMJyxcbiAgICBhaUNoYXRIaXRsT3B0aW9uOiAnQUlfQ0hBVF9ISVRMX09QVElPTicsXG4gICAgY29ubmVjdG9yQ29yOiAnQUlfQ0hBVF9BQk1fQ09OTkVDVE9SX0NPUicsXG4gIH0sXG4gIHVzZUV2ZW50OiAoKSA9PiB0cmlnZ2VyRXZlbnQsXG59KSlcblxuY29uc3QgYWN0aW9uID0gKG92ZXJyaWRlczogUGFydGlhbDxQZW5kaW5nQWN0aW9uPiA9IHt9KTogUGVuZGluZ0FjdGlvbiA9PiAoe1xuICB0b29sX25hbWU6ICdlZGl0X3Rhc2snLFxuICB0b29sX2NhbGxfaWQ6ICdjMScsXG4gIHRvb2xfYXJnczoge30sXG4gIHRocmVhZF9pZDogJ3QxJyxcbiAgLi4ub3ZlcnJpZGVzLFxufSlcblxuZGVzY3JpYmUoJ0FwcHJvdmFsQm94JywgKCkgPT4ge1xuICBjb25zdCBvbkFwcHJvdmUgPSBqZXN0LmZuKClcbiAgY29uc3Qgb25SZWplY3QgPSBqZXN0LmZuKClcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkFwcHJvdmUubW9ja0NsZWFyKClcbiAgICBvblJlamVjdC5tb2NrQ2xlYXIoKVxuICAgIHRyaWdnZXJFdmVudC5tb2NrQ2xlYXIoKVxuICB9KVxuXG4gIGl0KCdhcHByb3ZlcyB0aGUgcGVuZGluZyBhY3Rpb25zJywgKCkgPT4ge1xuICAgIGNvbnN0IHByb3BzID0geyBhY3Rpb25zOiBbYWN0aW9uKCldLCBvbkFwcHJvdmUsIG9uUmVqZWN0IH1cbiAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXJXaXRoUHJvdmlkZXJzKDxBcHByb3ZhbEJveCB7Li4ucHJvcHN9IC8+KVxuXG4gICAgZmlyZUV2ZW50LmNsaWNrKHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogJ2FwcHJvdmFsQm94LmFwcHJvdmUnIH0pKVxuICAgIGV4cGVjdChvbkFwcHJvdmUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFsndDEnXSwgdW5kZWZpbmVkKVxuXG4gICAgcmVyZW5kZXIoPEFwcHJvdmFsQm94IHsuLi5wcm9wc30gc3RhdHVzPVwiYXBwcm92ZWRcIiAvPilcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnYXBwcm92YWxCb3guc3RhdHVzLmFwcHJvdmVkJykpLnRvQmVJblRoZURvY3VtZW50KClcbiAgfSlcblxuICBpdCgncmVqZWN0cyB0aGUgcGVuZGluZyBhY3Rpb25zJywgKCkgPT4ge1xuICAgIGNvbnN0IHByb3BzID0geyBhY3Rpb25zOiBbYWN0aW9uKCldLCBvbkFwcHJvdmUsIG9uUmVqZWN0IH1cbiAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXJXaXRoUHJvdmlkZXJzKDxBcHByb3ZhbEJveCB7Li4ucHJvcHN9IC8+KVxuXG4gICAgZmlyZUV2ZW50LmNsaWNrKHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogJ2FwcHJvdmFsQm94LmRlbnknIH0pKVxuICAgIGV4cGVjdChvblJlamVjdCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoWyd0MSddKVxuXG4gICAgcmVyZW5kZXIoPEFwcHJvdmFsQm94IHsuLi5wcm9wc30gc3RhdHVzPVwicmVqZWN0ZWRcIiAvPilcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnYXBwcm92YWxCb3guc3RhdHVzLmRlbmllZCcpKS50b0JlSW5UaGVEb2N1bWVudCgpXG4gIH0pXG5cbiAgaXQoJ2hpZGVzIHRoZSBidXR0b25zIHdoZW4gdGhlIHByb2plY3QgaXMgZGVsZXRlZCcsICgpID0+IHtcbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKDxBcHByb3ZhbEJveCBhY3Rpb25zPXtbYWN0aW9uKCldfSBvbkFwcHJvdmU9e29uQXBwcm92ZX0gb25SZWplY3Q9e29uUmVqZWN0fSBpc1Byb2plY3REZWxldGVkIC8+KVxuXG4gICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAnYXBwcm92YWxCb3guYXBwcm92ZScgfSkpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpXG4gIH0pXG5cbiAgaXQoJ2RvZXMgbm90IGFwcHJvdmUgYWdhaW4gd2hpbGUgbG9hZGluZycsICgpID0+IHtcbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKDxBcHByb3ZhbEJveCBhY3Rpb25zPXtbYWN0aW9uKCldfSBvbkFwcHJvdmU9e29uQXBwcm92ZX0gb25SZWplY3Q9e29uUmVqZWN0fSBpc0xvYWRpbmcgLz4pXG5cbiAgICBmaXJlRXZlbnQuY2xpY2soc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAnYXBwcm92YWxCb3guYXBwcm92ZScgfSkpXG5cbiAgICBleHBlY3Qob25BcHByb3ZlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpXG4gIH0pXG5cbiAgaXQoJ2RvZXMgbm90IHNob3cgQ09SIHRvZ2dsZXMgZm9yIGEgcmVndWxhciB0b29sIGJhdGNoJywgKCkgPT4ge1xuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoPEFwcHJvdmFsQm94IGFjdGlvbnM9e1thY3Rpb24oKV19IG9uQXBwcm92ZT17b25BcHByb3ZlfSBvblJlamVjdD17b25SZWplY3R9IC8+KVxuXG4gICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5VGV4dCgnYWNjZXNzaWJpbGl0eVNlY3Rpb24uY29yUGVybWlzc2lvbnNUaXRsZScpKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKVxuICB9KVxuXG4gIGl0KCdyZW5kZXJzIHNwZWNpYWwgYWN0aW9uIGNvcHkgZm9yIHJld29yayBhbmQgZGVsaXZlcmFibGUgY2hpbGRyZW4nLCAoKSA9PiB7XG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyhcbiAgICAgIDxBcHByb3ZhbEJveCBhY3Rpb25zPXtbYWN0aW9uKHsgdG9vbF9uYW1lOiAnY3JlYXRlX3Jld29yaycgfSldfSBvbkFwcHJvdmU9e29uQXBwcm92ZX0gb25SZWplY3Q9e29uUmVqZWN0fSAvPlxuICAgIClcblxuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdhcHByb3ZhbEJveC5zcGVjaWFsLmNyZWF0ZVJld29yay50aXRsZScpKS50b0JlSW5UaGVEb2N1bWVudCgpXG5cbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKFxuICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgIGFjdGlvbnM9e1thY3Rpb24oeyB0b29sX25hbWU6ICd1cGRhdGVfZGVsaXZlcmFibGUnLCB0b29sX2FyZ3M6IHsgZGVsaXZlcmFibGVfdHlwZTogJ2NoaWxkcmVuJyB9IH0pXX1cbiAgICAgICAgb25BcHByb3ZlPXtvbkFwcHJvdmV9XG4gICAgICAgIG9uUmVqZWN0PXtvblJlamVjdH1cbiAgICAgIC8+XG4gICAgKVxuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ2FwcHJvdmFsQm94LnNwZWNpYWwudXBkYXRlRGVsaXZlcmFibGVDaGlsZHJlbi50aXRsZScpKS50b0JlSW5UaGVEb2N1bWVudCgpXG4gIH0pXG5cbiAgaXQoJ3RyYWNrcyBhdXRvIHJlc29sdXRpb24gd2hlbiBzdGF0dXMgY2hhbmdlcyB3aXRob3V0IHVzZXIgYWN0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IHByb3BzID0geyBhY3Rpb25zOiBbYWN0aW9uKCldLCBvbkFwcHJvdmUsIG9uUmVqZWN0IH1cbiAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXJXaXRoUHJvdmlkZXJzKDxBcHByb3ZhbEJveCB7Li4ucHJvcHN9IC8+KVxuXG4gICAgcmVyZW5kZXIoPEFwcHJvdmFsQm94IHsuLi5wcm9wc30gc3RhdHVzPVwiYXBwcm92ZWRcIiAvPilcblxuICAgIGV4cGVjdCh0cmlnZ2VyRXZlbnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgJ0FJX0NIQVRfSElUTF9PUFRJT04nLFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBkZWNpc2lvbjogJ2FjY2VwdCcsIHJlc29sdXRpb25fc291cmNlOiAnYXV0bycgfSlcbiAgICApXG4gIH0pXG5cbiAgaXQoJ3Nob3dzIG1hbnVhbCBhcHByb3ZhbCB3YXJuaW5nIG9uIGFwcHJvdmVkIHN0YXR1cycsICgpID0+IHtcbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKFxuICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgIGFjdGlvbnM9e1thY3Rpb24oKV19XG4gICAgICAgIG9uQXBwcm92ZT17b25BcHByb3ZlfVxuICAgICAgICBvblJlamVjdD17b25SZWplY3R9XG4gICAgICAgIHN0YXR1cz1cImFwcHJvdmVkXCJcbiAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZFxuICAgICAgICB3YXJuaW5nTWVzc2FnZT1cIndhcm5pbmcgY3VzdG9tXCJcbiAgICAgIC8+XG4gICAgKVxuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ2FwcHJvdmFsQm94LnN0YXR1cy5hcHByb3ZlZCcpKS50b0JlSW5UaGVEb2N1bWVudCgpXG4gIH0pXG5cbiAgaXQoJ3NlbmRzIHNlbGVjdGVkIENPUiBzbHVncyB3aGVuIGFwcHJvdmluZyBjcmVhdGVfYWdlbnQnLCAoKSA9PiB7XG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyhcbiAgICAgIDxBcHByb3ZhbEJveCBhY3Rpb25zPXtbYWN0aW9uKHsgdG9vbF9uYW1lOiAnY3JlYXRlX2FnZW50JyB9KV19IG9uQXBwcm92ZT17b25BcHByb3ZlfSBvblJlamVjdD17b25SZWplY3R9IC8+XG4gICAgKVxuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNvclBlcm1pc3Npb25zVGl0bGUnKSkudG9CZUluVGhlRG9jdW1lbnQoKVxuICAgIGZpcmVFdmVudC5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCdzd2l0Y2gnLCB7IG5hbWU6ICdhY2Nlc3NpYmlsaXR5U2VjdGlvbi5jbGllbnRBY2Nlc3NUaXRsZScgfSkpXG4gICAgZmlyZUV2ZW50LmNsaWNrKHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogJ2FwcHJvdmFsQm94LmFwcHJvdmUnIH0pKVxuXG4gICAgZXhwZWN0KG9uQXBwcm92ZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoWyd0MSddLCB7IHRvb2xfZ3JvdXBfc2x1Z3M6IFsncHJveWVjdG9zJywgJ3RhcmVhcyddIH0pXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxTQUFTLEVBQUVDLG1CQUFtQixFQUFFQyxNQUFNLFFBQVEsMEJBQTBCO0FBRWpGLFNBQVNDLFdBQVcsUUFBUSxlQUFlO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBO0FBRTNDLElBQU1DLFlBQVksR0FBR0MsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztBQUU5QkQsSUFBSSxDQUFDRSxJQUFJLENBQUMsaUNBQWlDLEVBQUU7RUFBQSxPQUFPO0lBQ2xEQyxnQkFBZ0IsRUFBRSxTQUFsQkEsZ0JBQWdCQSxDQUFBO01BQUEsT0FBUztRQUFFQyxLQUFLLEVBQUU7VUFBRUMsSUFBSSxFQUFFLFFBQVE7VUFBRUMsSUFBSSxFQUFFLE9BQU87VUFBRUMsTUFBTSxFQUFFO1FBQVM7TUFBRSxDQUFDO0lBQUE7RUFDekYsQ0FBQztBQUFBLENBQUMsQ0FBQztBQUVIUCxJQUFJLENBQUNFLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtFQUFBLE9BQU87SUFDMUNNLE1BQU0sRUFBRTtNQUNOQyxVQUFVLEVBQUUsY0FBYztNQUMxQkMsZ0JBQWdCLEVBQUUscUJBQXFCO01BQ3ZDQyxZQUFZLEVBQUU7SUFDaEIsQ0FBQztJQUNEQyxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBQTtNQUFBLE9BQVFiLFlBQVk7SUFBQTtFQUM5QixDQUFDO0FBQUEsQ0FBQyxDQUFDO0FBRUgsSUFBTWMsTUFBTSxHQUFHLFNBQVRBLE1BQU1BLENBQUE7RUFBQSxJQUFJQyxTQUFpQyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFBQSxPQUFBRyxhQUFBO0lBQ3BEQyxTQUFTLEVBQUUsV0FBVztJQUN0QkMsWUFBWSxFQUFFLElBQUk7SUFDbEJDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDYkMsU0FBUyxFQUFFO0VBQUksR0FDWlIsU0FBUztBQUFBLENBQ1o7QUFFRlMsUUFBUSxDQUFDLGFBQWEsRUFBRSxZQUFNO0VBQzVCLElBQU1DLFNBQVMsR0FBR3hCLElBQUksQ0FBQ0MsRUFBRSxDQUFDLENBQUM7RUFDM0IsSUFBTXdCLFFBQVEsR0FBR3pCLElBQUksQ0FBQ0MsRUFBRSxDQUFDLENBQUM7RUFFMUJ5QixVQUFVLENBQUMsWUFBTTtJQUNmRixTQUFTLENBQUNHLFNBQVMsQ0FBQyxDQUFDO0lBQ3JCRixRQUFRLENBQUNFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BCNUIsWUFBWSxDQUFDNEIsU0FBUyxDQUFDLENBQUM7RUFDMUIsQ0FBQyxDQUFDO0VBRUZDLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxZQUFNO0lBQ3ZDLElBQU1DLEtBQUssR0FBRztNQUFFQyxPQUFPLEVBQUUsQ0FBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFBRVcsU0FBUyxFQUFUQSxTQUFTO01BQUVDLFFBQVEsRUFBUkE7SUFBUyxDQUFDO0lBQzFELElBQUFNLG9CQUFBLEdBQXFCckMsbUJBQW1CLGNBQUNJLElBQUEsQ0FBQ0YsV0FBVyxFQUFBc0IsYUFBQSxLQUFLVyxLQUFLLENBQUcsQ0FBQyxDQUFDO01BQTVERyxRQUFRLEdBQUFELG9CQUFBLENBQVJDLFFBQVE7SUFFaEJ2QyxTQUFTLENBQUN3QyxLQUFLLENBQUN0QyxNQUFNLENBQUN1QyxTQUFTLENBQUMsUUFBUSxFQUFFO01BQUU1QixJQUFJLEVBQUU7SUFBc0IsQ0FBQyxDQUFDLENBQUM7SUFDNUU2QixNQUFNLENBQUNYLFNBQVMsQ0FBQyxDQUFDWSxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFbkIsU0FBUyxDQUFDO0lBRXpEZSxRQUFRLGNBQUNsQyxJQUFBLENBQUNGLFdBQVcsRUFBQXNCLGFBQUEsQ0FBQUEsYUFBQSxLQUFLVyxLQUFLO01BQUVRLE1BQU0sRUFBQztJQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3RERixNQUFNLENBQUN4QyxNQUFNLENBQUMyQyxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO0VBQzdFLENBQUMsQ0FBQztFQUVGWCxFQUFFLENBQUMsNkJBQTZCLEVBQUUsWUFBTTtJQUN0QyxJQUFNQyxLQUFLLEdBQUc7TUFBRUMsT0FBTyxFQUFFLENBQUNqQixNQUFNLENBQUMsQ0FBQyxDQUFDO01BQUVXLFNBQVMsRUFBVEEsU0FBUztNQUFFQyxRQUFRLEVBQVJBO0lBQVMsQ0FBQztJQUMxRCxJQUFBZSxxQkFBQSxHQUFxQjlDLG1CQUFtQixjQUFDSSxJQUFBLENBQUNGLFdBQVcsRUFBQXNCLGFBQUEsS0FBS1csS0FBSyxDQUFHLENBQUMsQ0FBQztNQUE1REcsUUFBUSxHQUFBUSxxQkFBQSxDQUFSUixRQUFRO0lBRWhCdkMsU0FBUyxDQUFDd0MsS0FBSyxDQUFDdEMsTUFBTSxDQUFDdUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtNQUFFNUIsSUFBSSxFQUFFO0lBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQ3pFNkIsTUFBTSxDQUFDVixRQUFRLENBQUMsQ0FBQ1csb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU3Q0osUUFBUSxjQUFDbEMsSUFBQSxDQUFDRixXQUFXLEVBQUFzQixhQUFBLENBQUFBLGFBQUEsS0FBS1csS0FBSztNQUFFUSxNQUFNLEVBQUM7SUFBVSxFQUFFLENBQUMsQ0FBQztJQUN0REYsTUFBTSxDQUFDeEMsTUFBTSxDQUFDMkMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztFQUMzRSxDQUFDLENBQUM7RUFFRlgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLFlBQU07SUFDeERsQyxtQkFBbUIsY0FBQ0ksSUFBQSxDQUFDRixXQUFXO01BQUNrQyxPQUFPLEVBQUUsQ0FBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUU7TUFBQ1csU0FBUyxFQUFFQSxTQUFVO01BQUNDLFFBQVEsRUFBRUEsUUFBUztNQUFDZ0IsZ0JBQWdCO0lBQUEsQ0FBRSxDQUFDLENBQUM7SUFFcEhOLE1BQU0sQ0FBQ3hDLE1BQU0sQ0FBQytDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7TUFBRXBDLElBQUksRUFBRTtJQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDcUMsR0FBRyxDQUFDSixpQkFBaUIsQ0FBQyxDQUFDO0VBQy9GLENBQUMsQ0FBQztFQUVGWCxFQUFFLENBQUMsc0NBQXNDLEVBQUUsWUFBTTtJQUMvQ2xDLG1CQUFtQixjQUFDSSxJQUFBLENBQUNGLFdBQVc7TUFBQ2tDLE9BQU8sRUFBRSxDQUFDakIsTUFBTSxDQUFDLENBQUMsQ0FBRTtNQUFDVyxTQUFTLEVBQUVBLFNBQVU7TUFBQ0MsUUFBUSxFQUFFQSxRQUFTO01BQUNtQixTQUFTO0lBQUEsQ0FBRSxDQUFDLENBQUM7SUFFN0duRCxTQUFTLENBQUN3QyxLQUFLLENBQUN0QyxNQUFNLENBQUN1QyxTQUFTLENBQUMsUUFBUSxFQUFFO01BQUU1QixJQUFJLEVBQUU7SUFBc0IsQ0FBQyxDQUFDLENBQUM7SUFFNUU2QixNQUFNLENBQUNYLFNBQVMsQ0FBQyxDQUFDbUIsR0FBRyxDQUFDRSxnQkFBZ0IsQ0FBQyxDQUFDO0VBQzFDLENBQUMsQ0FBQztFQUVGakIsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLFlBQU07SUFDN0RsQyxtQkFBbUIsY0FBQ0ksSUFBQSxDQUFDRixXQUFXO01BQUNrQyxPQUFPLEVBQUUsQ0FBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUU7TUFBQ1csU0FBUyxFQUFFQSxTQUFVO01BQUNDLFFBQVEsRUFBRUE7SUFBUyxDQUFFLENBQUMsQ0FBQztJQUVuR1UsTUFBTSxDQUFDeEMsTUFBTSxDQUFDbUQsV0FBVyxDQUFDLDBDQUEwQyxDQUFDLENBQUMsQ0FBQ0gsR0FBRyxDQUFDSixpQkFBaUIsQ0FBQyxDQUFDO0VBQ2hHLENBQUMsQ0FBQztFQUVGWCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsWUFBTTtJQUMxRWxDLG1CQUFtQixjQUNqQkksSUFBQSxDQUFDRixXQUFXO01BQUNrQyxPQUFPLEVBQUUsQ0FBQ2pCLE1BQU0sQ0FBQztRQUFFTSxTQUFTLEVBQUU7TUFBZ0IsQ0FBQyxDQUFDLENBQUU7TUFBQ0ssU0FBUyxFQUFFQSxTQUFVO01BQUNDLFFBQVEsRUFBRUE7SUFBUyxDQUFFLENBQzdHLENBQUM7SUFFRFUsTUFBTSxDQUFDeEMsTUFBTSxDQUFDMkMsU0FBUyxDQUFDLHdDQUF3QyxDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztJQUV0RjdDLG1CQUFtQixjQUNqQkksSUFBQSxDQUFDRixXQUFXO01BQ1ZrQyxPQUFPLEVBQUUsQ0FBQ2pCLE1BQU0sQ0FBQztRQUFFTSxTQUFTLEVBQUUsb0JBQW9CO1FBQUVFLFNBQVMsRUFBRTtVQUFFMEIsZ0JBQWdCLEVBQUU7UUFBVztNQUFFLENBQUMsQ0FBQyxDQUFFO01BQ3BHdkIsU0FBUyxFQUFFQSxTQUFVO01BQ3JCQyxRQUFRLEVBQUVBO0lBQVMsQ0FDcEIsQ0FDSCxDQUFDO0lBRURVLE1BQU0sQ0FBQ3hDLE1BQU0sQ0FBQzJDLFNBQVMsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7RUFDckcsQ0FBQyxDQUFDO0VBRUZYLEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRSxZQUFNO0lBQ3pFLElBQU1DLEtBQUssR0FBRztNQUFFQyxPQUFPLEVBQUUsQ0FBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFBRVcsU0FBUyxFQUFUQSxTQUFTO01BQUVDLFFBQVEsRUFBUkE7SUFBUyxDQUFDO0lBQzFELElBQUF1QixxQkFBQSxHQUFxQnRELG1CQUFtQixjQUFDSSxJQUFBLENBQUNGLFdBQVcsRUFBQXNCLGFBQUEsS0FBS1csS0FBSyxDQUFHLENBQUMsQ0FBQztNQUE1REcsUUFBUSxHQUFBZ0IscUJBQUEsQ0FBUmhCLFFBQVE7SUFFaEJBLFFBQVEsY0FBQ2xDLElBQUEsQ0FBQ0YsV0FBVyxFQUFBc0IsYUFBQSxDQUFBQSxhQUFBLEtBQUtXLEtBQUs7TUFBRVEsTUFBTSxFQUFDO0lBQVUsRUFBRSxDQUFDLENBQUM7SUFFdERGLE1BQU0sQ0FBQ3BDLFlBQVksQ0FBQyxDQUFDcUMsb0JBQW9CLENBQ3ZDLHFCQUFxQixFQUNyQkQsTUFBTSxDQUFDYyxnQkFBZ0IsQ0FBQztNQUFFQyxRQUFRLEVBQUUsUUFBUTtNQUFFQyxpQkFBaUIsRUFBRTtJQUFPLENBQUMsQ0FDM0UsQ0FBQztFQUNILENBQUMsQ0FBQztFQUVGdkIsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLFlBQU07SUFDM0RsQyxtQkFBbUIsY0FDakJJLElBQUEsQ0FBQ0YsV0FBVztNQUNWa0MsT0FBTyxFQUFFLENBQUNqQixNQUFNLENBQUMsQ0FBQyxDQUFFO01BQ3BCVyxTQUFTLEVBQUVBLFNBQVU7TUFDckJDLFFBQVEsRUFBRUEsUUFBUztNQUNuQlksTUFBTSxFQUFDLFVBQVU7TUFDakJlLHNCQUFzQjtNQUN0QkMsY0FBYyxFQUFDO0lBQWdCLENBQ2hDLENBQ0gsQ0FBQztJQUVEbEIsTUFBTSxDQUFDeEMsTUFBTSxDQUFDMkMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztFQUM3RSxDQUFDLENBQUM7RUFFRlgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLFlBQU07SUFDL0RsQyxtQkFBbUIsY0FDakJJLElBQUEsQ0FBQ0YsV0FBVztNQUFDa0MsT0FBTyxFQUFFLENBQUNqQixNQUFNLENBQUM7UUFBRU0sU0FBUyxFQUFFO01BQWUsQ0FBQyxDQUFDLENBQUU7TUFBQ0ssU0FBUyxFQUFFQSxTQUFVO01BQUNDLFFBQVEsRUFBRUE7SUFBUyxDQUFFLENBQzVHLENBQUM7SUFFRFUsTUFBTSxDQUFDeEMsTUFBTSxDQUFDMkMsU0FBUyxDQUFDLDBDQUEwQyxDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztJQUN4RjlDLFNBQVMsQ0FBQ3dDLEtBQUssQ0FBQ3RDLE1BQU0sQ0FBQ3VDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7TUFBRTVCLElBQUksRUFBRTtJQUF5QyxDQUFDLENBQUMsQ0FBQztJQUMvRmIsU0FBUyxDQUFDd0MsS0FBSyxDQUFDdEMsTUFBTSxDQUFDdUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtNQUFFNUIsSUFBSSxFQUFFO0lBQXNCLENBQUMsQ0FBQyxDQUFDO0lBRTVFNkIsTUFBTSxDQUFDWCxTQUFTLENBQUMsQ0FBQ1ksb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtNQUFFa0IsZ0JBQWdCLEVBQUUsQ0FBQyxXQUFXLEVBQUUsUUFBUTtJQUFFLENBQUMsQ0FBQztFQUMvRixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,123 @@
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 { fireEvent, renderWithProviders, screen } from '../../../test/test-utils';
5
+ import { AttachmentCard } from './AttachmentCard';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ jest.mock('../../molecules/ChatFooter/ChatFooter', function () {
8
+ var React = jest.requireActual('react');
9
+ return {
10
+ IconByFileType: {
11
+ 'application/pdf': React.createElement('span', {
12
+ 'data-testid': 'pdf-icon'
13
+ })
14
+ }
15
+ };
16
+ });
17
+ jest.mock('./AttachmentCardImage', function () {
18
+ return {
19
+ AttachmentCardImage: function AttachmentCardImage(_ref) {
20
+ var attachment = _ref.attachment;
21
+ return /*#__PURE__*/_jsx("div", {
22
+ "data-testid": "attachment-image",
23
+ children: attachment.name
24
+ });
25
+ }
26
+ };
27
+ });
28
+ jest.mock('./AttachmentCardAudio', function () {
29
+ return {
30
+ AttachmentCardAudio: function AttachmentCardAudio() {
31
+ return /*#__PURE__*/_jsx("div", {
32
+ "data-testid": "attachment-audio"
33
+ });
34
+ }
35
+ };
36
+ });
37
+ jest.mock('../../../hooks/useResize', function () {
38
+ return {
39
+ useResizeListener: function useResizeListener() {
40
+ return {
41
+ showTooltip: false
42
+ };
43
+ }
44
+ };
45
+ });
46
+ var buildAttachment = function buildAttachment() {
47
+ var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
48
+ return _objectSpread({
49
+ id: 'file-1',
50
+ name: 'report',
51
+ type: 'pdf',
52
+ size: 2048,
53
+ file: new File([], 'report.pdf', {
54
+ type: 'application/pdf'
55
+ })
56
+ }, overrides);
57
+ };
58
+ describe('AttachmentCard', function () {
59
+ it('renders a generic file card with name and actions', function () {
60
+ var handleAction = jest.fn();
61
+ renderWithProviders(/*#__PURE__*/_jsx(AttachmentCard, {
62
+ positionIndex: 0,
63
+ attachment: buildAttachment(),
64
+ handleAction: handleAction
65
+ }));
66
+ expect(screen.getByText('report.pdf')).toBeInTheDocument();
67
+ var actionButtons = document.querySelectorAll('button[data-icon-only="true"]');
68
+ expect(actionButtons.length).toBeGreaterThanOrEqual(2);
69
+ fireEvent.click(actionButtons[1]);
70
+ expect(handleAction).toHaveBeenCalledWith({
71
+ id: 0,
72
+ action: 'delete'
73
+ });
74
+ });
75
+ it('delegates image attachments to AttachmentCardImage', function () {
76
+ renderWithProviders(/*#__PURE__*/_jsx(AttachmentCard, {
77
+ positionIndex: 0,
78
+ attachment: buildAttachment({
79
+ name: 'photo',
80
+ type: 'png'
81
+ })
82
+ }));
83
+ expect(screen.getByTestId('attachment-image')).toHaveTextContent('photo');
84
+ });
85
+ it('delegates audio attachments to AttachmentCardAudio', function () {
86
+ renderWithProviders(/*#__PURE__*/_jsx(AttachmentCard, {
87
+ positionIndex: 0,
88
+ attachment: buildAttachment({
89
+ name: 'voice',
90
+ type: 'mp3'
91
+ })
92
+ }));
93
+ expect(screen.getByTestId('attachment-audio')).toBeInTheDocument();
94
+ });
95
+ it('calls onDownload when provided without handleAction', function () {
96
+ var onDownload = jest.fn();
97
+ renderWithProviders(/*#__PURE__*/_jsx(AttachmentCard, {
98
+ positionIndex: 2,
99
+ attachment: buildAttachment(),
100
+ onDownload: onDownload
101
+ }));
102
+ var downloadButton = document.querySelector('button[data-icon-only="true"]');
103
+ expect(downloadButton).toBeTruthy();
104
+ fireEvent.click(downloadButton);
105
+ expect(onDownload).toHaveBeenCalled();
106
+ });
107
+ it('shows the preview action in knowledge section when upload is done', function () {
108
+ var onClick = jest.fn();
109
+ renderWithProviders(/*#__PURE__*/_jsx(AttachmentCard, {
110
+ positionIndex: 0,
111
+ attachment: buildAttachment({
112
+ status: 'done'
113
+ }),
114
+ handleAction: jest.fn(),
115
+ abmKnowledgeSection: true,
116
+ onClick: onClick
117
+ }));
118
+ var actionButtons = document.querySelectorAll('button[data-icon-only="true"]');
119
+ fireEvent.click(actionButtons[actionButtons.length - 1]);
120
+ expect(onClick).toHaveBeenCalled();
121
+ });
122
+ });
123
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaXJlRXZlbnQiLCJyZW5kZXJXaXRoUHJvdmlkZXJzIiwic2NyZWVuIiwiQXR0YWNobWVudENhcmQiLCJqc3giLCJfanN4IiwiamVzdCIsIm1vY2siLCJSZWFjdCIsInJlcXVpcmVBY3R1YWwiLCJJY29uQnlGaWxlVHlwZSIsImNyZWF0ZUVsZW1lbnQiLCJBdHRhY2htZW50Q2FyZEltYWdlIiwiX3JlZiIsImF0dGFjaG1lbnQiLCJjaGlsZHJlbiIsIm5hbWUiLCJBdHRhY2htZW50Q2FyZEF1ZGlvIiwidXNlUmVzaXplTGlzdGVuZXIiLCJzaG93VG9vbHRpcCIsImJ1aWxkQXR0YWNobWVudCIsIm92ZXJyaWRlcyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIl9vYmplY3RTcHJlYWQiLCJpZCIsInR5cGUiLCJzaXplIiwiZmlsZSIsIkZpbGUiLCJkZXNjcmliZSIsIml0IiwiaGFuZGxlQWN0aW9uIiwiZm4iLCJwb3NpdGlvbkluZGV4IiwiZXhwZWN0IiwiZ2V0QnlUZXh0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJhY3Rpb25CdXR0b25zIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwidG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCIsImNsaWNrIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJhY3Rpb24iLCJnZXRCeVRlc3RJZCIsInRvSGF2ZVRleHRDb250ZW50Iiwib25Eb3dubG9hZCIsImRvd25sb2FkQnV0dG9uIiwicXVlcnlTZWxlY3RvciIsInRvQmVUcnV0aHkiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwib25DbGljayIsInN0YXR1cyIsImFibUtub3dsZWRnZVNlY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZC5zcGVjLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJlRXZlbnQsIHJlbmRlcldpdGhQcm92aWRlcnMsIHNjcmVlbiB9IGZyb20gJy4uLy4uLy4uL3Rlc3QvdGVzdC11dGlscydcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi9BdHRhY2htZW50Q2FyZCdcblxuamVzdC5tb2NrKCcuLi8uLi9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJywgKCkgPT4ge1xuICBjb25zdCBSZWFjdCA9IGplc3QucmVxdWlyZUFjdHVhbCgncmVhY3QnKSBhcyB0eXBlb2YgaW1wb3J0KCdyZWFjdCcpXG4gIHJldHVybiB7XG4gICAgSWNvbkJ5RmlsZVR5cGU6IHtcbiAgICAgICdhcHBsaWNhdGlvbi9wZGYnOiBSZWFjdC5jcmVhdGVFbGVtZW50KCdzcGFuJywgeyAnZGF0YS10ZXN0aWQnOiAncGRmLWljb24nIH0pLFxuICAgIH0sXG4gIH1cbn0pXG5cbmplc3QubW9jaygnLi9BdHRhY2htZW50Q2FyZEltYWdlJywgKCkgPT4gKHtcbiAgQXR0YWNobWVudENhcmRJbWFnZTogKHsgYXR0YWNobWVudCB9OiB7IGF0dGFjaG1lbnQ6IHsgbmFtZTogc3RyaW5nIH0gfSkgPT4gKFxuICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJhdHRhY2htZW50LWltYWdlXCI+e2F0dGFjaG1lbnQubmFtZX08L2Rpdj5cbiAgKSxcbn0pKVxuXG5qZXN0Lm1vY2soJy4vQXR0YWNobWVudENhcmRBdWRpbycsICgpID0+ICh7XG4gIEF0dGFjaG1lbnRDYXJkQXVkaW86ICgpID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJhdHRhY2htZW50LWF1ZGlvXCIgLz4sXG59KSlcblxuamVzdC5tb2NrKCcuLi8uLi8uLi9ob29rcy91c2VSZXNpemUnLCAoKSA9PiAoe1xuICB1c2VSZXNpemVMaXN0ZW5lcjogKCkgPT4gKHsgc2hvd1Rvb2x0aXA6IGZhbHNlIH0pLFxufSkpXG5cbnR5cGUgVGVzdEF0dGFjaG1lbnQgPSB7XG4gIGlkOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHR5cGU6IHN0cmluZ1xuICBzaXplOiBudW1iZXJcbiAgZmlsZTogRmlsZVxuICBzdGF0dXM/OiBzdHJpbmdcbn1cblxuY29uc3QgYnVpbGRBdHRhY2htZW50ID0gKG92ZXJyaWRlczogUGFydGlhbDxUZXN0QXR0YWNobWVudD4gPSB7fSk6IFRlc3RBdHRhY2htZW50ID0+ICh7XG4gIGlkOiAnZmlsZS0xJyxcbiAgbmFtZTogJ3JlcG9ydCcsXG4gIHR5cGU6ICdwZGYnLFxuICBzaXplOiAyMDQ4LFxuICBmaWxlOiBuZXcgRmlsZShbXSwgJ3JlcG9ydC5wZGYnLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pLFxuICAuLi5vdmVycmlkZXMsXG59KVxuXG5kZXNjcmliZSgnQXR0YWNobWVudENhcmQnLCAoKSA9PiB7XG4gIGl0KCdyZW5kZXJzIGEgZ2VuZXJpYyBmaWxlIGNhcmQgd2l0aCBuYW1lIGFuZCBhY3Rpb25zJywgKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUFjdGlvbiA9IGplc3QuZm4oKVxuXG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyhcbiAgICAgIDxBdHRhY2htZW50Q2FyZCBwb3NpdGlvbkluZGV4PXswfSBhdHRhY2htZW50PXtidWlsZEF0dGFjaG1lbnQoKSBhcyBuZXZlcn0gaGFuZGxlQWN0aW9uPXtoYW5kbGVBY3Rpb259IC8+XG4gICAgKVxuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ3JlcG9ydC5wZGYnKSkudG9CZUluVGhlRG9jdW1lbnQoKVxuXG4gICAgY29uc3QgYWN0aW9uQnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbltkYXRhLWljb24tb25seT1cInRydWVcIl0nKVxuICAgIGV4cGVjdChhY3Rpb25CdXR0b25zLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCgyKVxuICAgIGZpcmVFdmVudC5jbGljayhhY3Rpb25CdXR0b25zWzFdKVxuICAgIGV4cGVjdChoYW5kbGVBY3Rpb24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHsgaWQ6IDAsIGFjdGlvbjogJ2RlbGV0ZScgfSlcbiAgfSlcblxuICBpdCgnZGVsZWdhdGVzIGltYWdlIGF0dGFjaG1lbnRzIHRvIEF0dGFjaG1lbnRDYXJkSW1hZ2UnLCAoKSA9PiB7XG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyhcbiAgICAgIDxBdHRhY2htZW50Q2FyZCBwb3NpdGlvbkluZGV4PXswfSBhdHRhY2htZW50PXtidWlsZEF0dGFjaG1lbnQoeyBuYW1lOiAncGhvdG8nLCB0eXBlOiAncG5nJyB9KSBhcyBuZXZlcn0gLz5cbiAgICApXG5cbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGVzdElkKCdhdHRhY2htZW50LWltYWdlJykpLnRvSGF2ZVRleHRDb250ZW50KCdwaG90bycpXG4gIH0pXG5cbiAgaXQoJ2RlbGVnYXRlcyBhdWRpbyBhdHRhY2htZW50cyB0byBBdHRhY2htZW50Q2FyZEF1ZGlvJywgKCkgPT4ge1xuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoXG4gICAgICA8QXR0YWNobWVudENhcmQgcG9zaXRpb25JbmRleD17MH0gYXR0YWNobWVudD17YnVpbGRBdHRhY2htZW50KHsgbmFtZTogJ3ZvaWNlJywgdHlwZTogJ21wMycgfSkgYXMgbmV2ZXJ9IC8+XG4gICAgKVxuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRlc3RJZCgnYXR0YWNobWVudC1hdWRpbycpKS50b0JlSW5UaGVEb2N1bWVudCgpXG4gIH0pXG5cbiAgaXQoJ2NhbGxzIG9uRG93bmxvYWQgd2hlbiBwcm92aWRlZCB3aXRob3V0IGhhbmRsZUFjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBvbkRvd25sb2FkID0gamVzdC5mbigpXG5cbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKFxuICAgICAgPEF0dGFjaG1lbnRDYXJkIHBvc2l0aW9uSW5kZXg9ezJ9IGF0dGFjaG1lbnQ9e2J1aWxkQXR0YWNobWVudCgpIGFzIG5ldmVyfSBvbkRvd25sb2FkPXtvbkRvd25sb2FkfSAvPlxuICAgIClcblxuICAgIGNvbnN0IGRvd25sb2FkQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYnV0dG9uW2RhdGEtaWNvbi1vbmx5PVwidHJ1ZVwiXScpXG4gICAgZXhwZWN0KGRvd25sb2FkQnV0dG9uKS50b0JlVHJ1dGh5KClcbiAgICBmaXJlRXZlbnQuY2xpY2soZG93bmxvYWRCdXR0b24gYXMgSFRNTEJ1dHRvbkVsZW1lbnQpXG4gICAgZXhwZWN0KG9uRG93bmxvYWQpLnRvSGF2ZUJlZW5DYWxsZWQoKVxuICB9KVxuXG4gIGl0KCdzaG93cyB0aGUgcHJldmlldyBhY3Rpb24gaW4ga25vd2xlZGdlIHNlY3Rpb24gd2hlbiB1cGxvYWQgaXMgZG9uZScsICgpID0+IHtcbiAgICBjb25zdCBvbkNsaWNrID0gamVzdC5mbigpXG5cbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKFxuICAgICAgPEF0dGFjaG1lbnRDYXJkXG4gICAgICAgIHBvc2l0aW9uSW5kZXg9ezB9XG4gICAgICAgIGF0dGFjaG1lbnQ9e2J1aWxkQXR0YWNobWVudCh7IHN0YXR1czogJ2RvbmUnIH0pIGFzIG5ldmVyfVxuICAgICAgICBoYW5kbGVBY3Rpb249e2plc3QuZm4oKX1cbiAgICAgICAgYWJtS25vd2xlZGdlU2VjdGlvblxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgLz5cbiAgICApXG5cbiAgICBjb25zdCBhY3Rpb25CdXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uW2RhdGEtaWNvbi1vbmx5PVwidHJ1ZVwiXScpXG4gICAgZmlyZUV2ZW50LmNsaWNrKGFjdGlvbkJ1dHRvbnNbYWN0aW9uQnV0dG9ucy5sZW5ndGggLSAxXSlcbiAgICBleHBlY3Qob25DbGljaykudG9IYXZlQmVlbkNhbGxlZCgpXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxTQUFTQSxTQUFTLEVBQUVDLG1CQUFtQixFQUFFQyxNQUFNLFFBQVEsMEJBQTBCO0FBQ2pGLFNBQVNDLGNBQWMsUUFBUSxrQkFBa0I7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUE7QUFFakRDLElBQUksQ0FBQ0MsSUFBSSxD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