@projectcor/maia-components 2.47.0 → 2.48.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.
- package/lib/App.js +44 -19
- package/lib/components/atoms/ActionableButton.spec.js +111 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +65 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +66 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +5 -51
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +211 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +55 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +41 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +18 -76
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +253 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +31 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +33 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +3 -31
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +25 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
- package/lib/components/atoms/Chip/Chip.spec.js +82 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +88 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +77 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +31 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +48 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -34
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +231 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
- package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
- package/lib/components/atoms/Expand/Expand.spec.js +57 -0
- package/lib/components/atoms/Fade/Fade.spec.js +31 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
- package/lib/components/atoms/HelpButton.spec.js +87 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +12 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +26 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +8 -12
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +444 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +50 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +20 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -60
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +53 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +22 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
- package/lib/components/atoms/NextPageLoader.spec.js +37 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +86 -0
- package/lib/components/atoms/OptionCorPermission/OptionCorPermission.js +36 -8
- package/lib/components/atoms/OptionCorPermission/OptionCorPermission.styles.js +23 -5
- package/lib/components/atoms/PrimaryButton.spec.js +42 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +27 -13
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +79 -52
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +36 -15
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
- package/lib/components/atoms/Switch/Switch.spec.js +41 -0
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
- package/lib/components/atoms/TextArea/TextArea.spec.js +68 -0
- package/lib/components/atoms/ThirdButton.spec.js +29 -0
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
- package/lib/components/atoms/WithAppCfg.spec.js +60 -0
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +129 -39
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +495 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +39 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +57 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +6 -40
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +227 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +86 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +108 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +18 -90
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +254 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
- package/lib/components/molecules/AgentInputBlock/index.js +5 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +92 -73
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +246 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
- package/lib/components/molecules/ChatAIHome/styles.js +85 -78
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +54 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +77 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +39 -57
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +445 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +147 -4
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +471 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +64 -108
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +659 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +30 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +95 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +76 -86
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
- package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
- package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +172 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +369 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +82 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +453 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +199 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +391 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +133 -215
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1204 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +405 -0
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +526 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +246 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +275 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +275 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +195 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
- package/lib/components/organisms/ChatAIPage/index.js +3 -0
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
- package/lib/constants/maiaFeatureAccess.spec.js +30 -0
- package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
- package/lib/constants/maiaTaskPanelAccess.spec.js +30 -0
- package/lib/constants/permissions/clientRoleAccess.spec.js +31 -0
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +4 -1
- package/lib/constants/permissions/utils.spec.js +128 -0
- package/lib/dev/DevMaiaPage.js +30 -0
- package/lib/dev/DevReasoningTimeline.js +68 -37
- package/lib/dev/Providers.js +5 -3
- package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +231 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +313 -0
- package/lib/hooks/useAgentSuggestions.spec.js +89 -0
- package/lib/hooks/useCaretPosition.spec.js +58 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.js +353 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +506 -0
- package/lib/hooks/useChatManager/useChatManager.js +76 -351
- package/lib/hooks/useChatManager/useChatManager.spec.js +1261 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +109 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +176 -0
- package/lib/hooks/useChatMessages/useChatMessages.js +12 -82
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +379 -0
- package/lib/hooks/useChats/useChats.spec.js +208 -0
- package/lib/hooks/useClientSearch.helpers.js +36 -0
- package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
- package/lib/hooks/useClientSearch.js +4 -32
- package/lib/hooks/useClientSearch.spec.js +86 -0
- package/lib/hooks/useContextMentions.helpers.js +152 -0
- package/lib/hooks/useContextMentions.helpers.spec.js +143 -0
- package/lib/hooks/useContextMentions.js +2 -163
- package/lib/hooks/useContextMentions.spec.js +239 -0
- package/lib/hooks/useContextMentions.types.js +2 -0
- package/lib/hooks/useContextPinPopover.helpers.js +95 -0
- package/lib/hooks/useContextPinPopover.helpers.spec.js +115 -0
- package/lib/hooks/useContextPinPopover.js +16 -75
- package/lib/hooks/useContextPinPopover.spec.js +159 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
- package/lib/hooks/useDebounce.spec.js +42 -0
- package/lib/hooks/useEntitySearch.helpers.js +359 -0
- package/lib/hooks/useEntitySearch.helpers.spec.js +321 -0
- package/lib/hooks/useEntitySearch.js +38 -391
- package/lib/hooks/useEntitySearch.spec.js +443 -0
- package/lib/hooks/useEvent.spec.js +45 -0
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
- package/lib/hooks/useFrequentlyUsedActions.js +60 -22
- package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
- package/lib/hooks/useIsMaiaPageRoute.js +26 -0
- package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
- package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
- package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
- package/lib/hooks/useMentionPopover.helpers.js +41 -0
- package/lib/hooks/useMentionPopover.helpers.spec.js +71 -0
- package/lib/hooks/useMentionPopover.js +9 -35
- package/lib/hooks/useMentionPopover.spec.js +215 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +132 -0
- package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
- package/lib/hooks/useModal/useModal.spec.js +73 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +192 -0
- package/lib/hooks/useProjectSearch.helpers.js +61 -0
- package/lib/hooks/useProjectSearch.helpers.spec.js +70 -0
- package/lib/hooks/useProjectSearch.js +4 -58
- package/lib/hooks/useProjectSearch.spec.js +91 -0
- package/lib/hooks/useProjectSummary.spec.js +193 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +92 -0
- package/lib/hooks/useProjectSummaryConfig.js +14 -52
- package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
- package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
- package/lib/hooks/useRecentClientsSearch.js +4 -32
- package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
- package/lib/hooks/useRecentContexts.spec.js +139 -0
- package/lib/hooks/useResize.spec.js +37 -0
- package/lib/hooks/useSkillsCatalog.spec.js +88 -0
- package/lib/hooks/useSlashCommands.spec.js +139 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
- package/lib/hooks/useStreamResponse.spec.js +199 -0
- package/lib/hooks/useT.spec.js +20 -0
- package/lib/hooks/useToggle.spec.js +33 -0
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
- package/lib/index.js +5 -2
- package/lib/lang/br/index.js +29 -1
- package/lib/lang/en/index.js +29 -1
- package/lib/lang/es/index.js +29 -1
- package/lib/lang/fr/index.js +29 -1
- package/lib/services/maia/Access/updateAccess.spec.js +137 -0
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
- package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
- package/lib/services/maia/Agents/connectors.js +88 -46
- package/lib/services/maia/Agents/connectors.spec.js +359 -0
- package/lib/services/maia/Agents/createAgent.spec.js +55 -0
- package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
- package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
- package/lib/services/maia/Agents/getAgents.helpers.js +181 -0
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +211 -0
- package/lib/services/maia/Agents/getAgents.js +78 -242
- package/lib/services/maia/Agents/getAgents.spec.js +697 -0
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
- package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
- package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
- package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
- package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
- package/lib/services/maia/Chats/patchChat.spec.js +41 -0
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
- package/lib/services/maia/Knowledge/delete.spec.js +45 -0
- package/lib/services/maia/Knowledge/download.spec.js +78 -0
- package/lib/services/maia/Knowledge/save.spec.js +58 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +153 -0
- package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
- package/lib/services/maia/Skills/createSkill.spec.js +68 -0
- package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
- package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
- package/lib/services/maia/Skills/getSkills.spec.js +152 -0
- package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
- package/lib/services/maia/client.spec.js +56 -0
- package/lib/services/utils/fetchCOR.spec.js +211 -0
- package/lib/services/utils/getCookie.spec.js +20 -0
- package/lib/services/utils/mapChatMessages.spec.js +254 -0
- package/lib/store/chatsSidebarOptimistic.spec.js +112 -0
- package/lib/store/maiaLastChatPersistence.spec.js +22 -0
- package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
- package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
- package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
- package/lib/store/sessions/sessionNotifications.js +35 -41
- package/lib/store/sessions/sessionNotifications.spec.js +106 -0
- package/lib/store/sessions/sessionStreamManager.js +50 -51
- package/lib/store/sessions/sessionStreamManager.spec.js +503 -0
- package/lib/store/sessions/sessions.types.spec.js +16 -0
- package/lib/store/sessions/useSessionsStore.spec.js +135 -0
- package/lib/store/useChatsStore.spec.js +619 -0
- package/lib/store/useFaqsStore.spec.js +57 -0
- package/lib/styles/cascade.js +29 -3
- package/lib/styles/transitions.js +3 -1
- package/lib/test/mockSseStream.js +121 -0
- package/lib/test/streamdownCodeMock.js +6 -0
- package/lib/test/streamdownMock.js +12 -0
- package/lib/types/agentModal.js +1 -1
- package/lib/types/global.d.js +1 -1
- package/lib/utils/actionCategoryMap.spec.js +18 -0
- package/lib/utils/agentDisplayName.spec.js +44 -0
- package/lib/utils/autoApproveStorage.spec.js +25 -0
- package/lib/utils/chatInputFiles.spec.js +39 -0
- package/lib/utils/contextMentionIcons.spec.js +41 -0
- package/lib/utils/contextMentionLabel.spec.js +13 -0
- package/lib/utils/contextMentionTriggers.spec.js +38 -0
- package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
- package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
- package/lib/utils/entityLinkRender.spec.js +72 -0
- package/lib/utils/fileDownloadHelper.spec.js +67 -0
- package/lib/utils/formatQuickActionMessage.spec.js +27 -0
- package/lib/utils/formatUnreadCount.spec.js +12 -0
- package/lib/utils/getUnitFileSize.spec.js +18 -0
- package/lib/utils/hitlAnalytics.spec.js +100 -0
- package/lib/utils/hoursPlannerQuickActionType.js +74 -1
- package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
- package/lib/utils/imagePreprocessor.helpers.js +28 -0
- package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
- package/lib/utils/imagePreprocessor.js +12 -37
- package/lib/utils/imagePreprocessor.spec.js +112 -0
- package/lib/utils/maiaPageRoute.js +24 -0
- package/lib/utils/maiaPageRoute.spec.js +23 -0
- package/lib/utils/mapBackendLang.spec.js +19 -0
- package/lib/utils/navigateContextEntity.spec.js +50 -0
- package/lib/utils/normalizeAgentConnectors.js +4 -4
- package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
- package/lib/utils/orchestratorSubagents.spec.js +32 -0
- package/lib/utils/reasoningMappers.spec.js +103 -0
- package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
- package/lib/utils/renderContextMentions.spec.js +158 -0
- package/lib/utils/retryCompletion.spec.js +99 -0
- package/lib/utils/skillContentSize.spec.js +13 -0
- package/lib/utils/slashCommandMarker.spec.js +43 -0
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
- package/lib/utils/sseStreamContent.spec.js +31 -0
- package/lib/utils/streamActivityMessages.js +32 -19
- package/lib/utils/streamActivityMessages.spec.js +253 -0
- package/lib/utils/validateTrimmedFields.spec.js +26 -0
- package/package.json +1 -1
- package/README.md +0 -2
|
@@ -11,7 +11,7 @@ import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
|
11
11
|
import { ListChecklist } from '@projectcor/icons/lib/components/ListChecklist';
|
|
12
12
|
import { useT } from '../../../hooks/useT';
|
|
13
13
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
14
|
-
import { SCCAIHomeContainer, SCCAIHomeContent, SCCAIHomeContentInner, SCCAIHomeGradientTop, SCCAIHomeGradientBottom, SCCAIHomeHeader, SCCAIHomeGreeting, SCCAIHomeAgentInfoContainer, SCCAIHomeAgentInfo, SCCAIHomeProjectSummary, SCCAIHomeProjectSummaryContent, SCCAIHomeProjectSummaryTitle, SCCAIHomeProjectSummaryDescription, SCCAHWrapperSummaryProject, SCCAIHomeIntroduction, SCCAIHomeCreatedByContainer, SCCAIHomeCreatedByText, SCCAIHomeCreatedByTextName, SCCAIHomeIconContainer, SCCAIHomeLogoWrapper, SCCAIHomeMaiaHeaderStack, SCCAIHomeTitle, SCCAIHomeTitleBlock, SCCAIHomeSubtitle, SCCAIHomeDynamicSection, SCCAIHomeRecentContexts, SCCAIHomeRecentContextsList, SCCAIHomeRecentContextsSectionHeader, SCCAIHomeRecentContextsSectionTitle, SCCAIHomeRecentContextsSectionSubtitle, SCCAIHomeRecentContextPill, SCCAIHomeRecentContextPillIcon, SCCAIHomeRecentContextPillText, SCCAIHomeRecentContextPillSkeleton, MAIA_HEADER_COLLABORATOR_HOME_CONTENT_WIDTH_PX } from './styles';
|
|
14
|
+
import { SCCAIHomeContainer, SCCAIHomeScroll, SCCAIHomeContent, SCCAIHomeContentInner, SCCAIHomeGradientTop, SCCAIHomeGradientBottom, SCCAIHomeHeader, SCCAIHomeGreeting, SCCAIHomeAgentInfoContainer, SCCAIHomeAgentInfo, SCCAIHomeProjectSummary, SCCAIHomeProjectSummaryContent, SCCAIHomeProjectSummaryTitle, SCCAIHomeProjectSummaryDescription, SCCAHWrapperSummaryProject, SCCAIHomeIntroduction, SCCAIHomeCreatedByContainer, SCCAIHomeCreatedByText, SCCAIHomeCreatedByTextName, SCCAIHomeIconContainer, SCCAIHomeLogoWrapper, SCCAIHomeMaiaHeaderStack, SCCAIHomeTitle, SCCAIHomeTitleBlock, SCCAIHomeSubtitle, SCCAIHomeDynamicSection, SCCAIHomeRecentContexts, SCCAIHomeRecentContextsList, SCCAIHomeRecentContextsSectionHeader, SCCAIHomeRecentContextsSectionTitle, SCCAIHomeRecentContextsSectionSubtitle, SCCAIHomeRecentContextPill, SCCAIHomeRecentContextPillIcon, SCCAIHomeRecentContextPillText, SCCAIHomeRecentContextPillSkeleton, MAIA_HEADER_COLLABORATOR_HOME_CONTENT_WIDTH_PX } from './styles';
|
|
15
15
|
import { useGlobalContext } from '../../../context/global-context';
|
|
16
16
|
import { useUser, CORUserRole, isCollaboratorRole, isManagerRole } from '../../../context/cor-user';
|
|
17
17
|
import { useResizeListener } from '../../../hooks/useResize';
|
|
@@ -235,6 +235,12 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
235
235
|
var _useFrequentlyUsedAct3 = useFrequentlyUsedActions(isHeaderManagerHoursHome ? agent === null || agent === void 0 ? void 0 : agent.id : undefined, 'home_with_hours'),
|
|
236
236
|
managerHomeFuas = _useFrequentlyUsedAct3.actions,
|
|
237
237
|
managerHomeFuasLoading = _useFrequentlyUsedAct3.loading;
|
|
238
|
+
// A11: my-day + should-review CTAs only for collaborator (role_id=4) + fullscreen header home.
|
|
239
|
+
// Both FUAs share section=home_collaborator (order 1 my-day / order 2 should-review).
|
|
240
|
+
var shouldFetchCollaboratorFullscreenFuas = Boolean(expanded && isCollaboratorRole(user.role_id) && isHeaderHome);
|
|
241
|
+
var _useFrequentlyUsedAct4 = useFrequentlyUsedActions(shouldFetchCollaboratorFullscreenFuas ? agent === null || agent === void 0 ? void 0 : agent.id : undefined, 'home_collaborator'),
|
|
242
|
+
collaboratorFullscreenFuas = _useFrequentlyUsedAct4.actions,
|
|
243
|
+
collaboratorFullscreenFuasLoading = _useFrequentlyUsedAct4.loading;
|
|
238
244
|
var headerHoursFuas = useMemo(function () {
|
|
239
245
|
if (isHeaderManagerHoursHome) return sortManagerHoursHomeFuas(managerHomeFuas);
|
|
240
246
|
return collaboratorPlannerFuas;
|
|
@@ -301,10 +307,13 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
301
307
|
var shouldShowPlannerFuasLoading = isHeaderHoursAgentHome && headerHoursFuasLoading && headerHoursFuas.length === 0;
|
|
302
308
|
var shouldShowPlannerFuasContent = isHeaderHoursAgentHome && headerHoursFuas.length > 0;
|
|
303
309
|
var shouldShowPlannerFuas = shouldShowPlannerFuasLoading || shouldShowPlannerFuasContent;
|
|
310
|
+
var shouldShowCollaboratorFullscreenFuasLoading = shouldFetchCollaboratorFullscreenFuas && collaboratorFullscreenFuasLoading && collaboratorFullscreenFuas.length === 0;
|
|
311
|
+
var shouldShowCollaboratorFullscreenFuasContent = shouldFetchCollaboratorFullscreenFuas && collaboratorFullscreenFuas.length > 0;
|
|
312
|
+
var shouldShowCollaboratorFullscreenFuas = shouldShowCollaboratorFullscreenFuasLoading || shouldShowCollaboratorFullscreenFuasContent;
|
|
304
313
|
var showProjectSummaryCard = showProjectSummary && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'project';
|
|
305
|
-
var showFAQs = !!(showRecentContextsBlock || shouldShowFaqs || shouldShowFuas || shouldShowPlannerFuas || showProjectSummaryCard || isMaiaker);
|
|
314
|
+
var showFAQs = !!(showRecentContextsBlock || shouldShowFaqs || shouldShowFuas || shouldShowPlannerFuas || shouldShowCollaboratorFullscreenFuas || showProjectSummaryCard || isMaiaker);
|
|
306
315
|
var homeScrollableLayout = showFAQs;
|
|
307
|
-
var showDynamicSection = showRecentContextsBlock || shouldShowFaqs || shouldShowFuas || shouldShowPlannerFuas || isMaiaker;
|
|
316
|
+
var showDynamicSection = showRecentContextsBlock || shouldShowFaqs || shouldShowFuas || shouldShowPlannerFuas || shouldShowCollaboratorFullscreenFuas || isMaiaker;
|
|
308
317
|
|
|
309
318
|
// Lógica del scroll con gradientes
|
|
310
319
|
var contentContainerRef = useRef(null);
|
|
@@ -414,7 +423,7 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
414
423
|
document.dispatchEvent(new CustomEvent('maia-input-refocus'));
|
|
415
424
|
});
|
|
416
425
|
}, [event, setChipsProject, setClient, setProject, setTask, t]);
|
|
417
|
-
var handleHomeStartChat = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId) {
|
|
426
|
+
var handleHomeStartChat = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId, contextData) {
|
|
418
427
|
if (isHeaderManagerHoursHome && fuaId) {
|
|
419
428
|
flushSync(function () {
|
|
420
429
|
setSelectedContext(null);
|
|
@@ -424,7 +433,7 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
424
433
|
setChipsProject(null);
|
|
425
434
|
});
|
|
426
435
|
}
|
|
427
|
-
onStartChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId);
|
|
436
|
+
onStartChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId, contextData);
|
|
428
437
|
}, [isHeaderManagerHoursHome, onStartChat, setChipsProject, setClient, setProject, setTask]);
|
|
429
438
|
var renderRecentContexts = function renderRecentContexts() {
|
|
430
439
|
if (!isRecentContextsStep) return null;
|
|
@@ -586,83 +595,93 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
586
595
|
var fixedHomeContentWidth = isHeaderTaskContextHome || isLeftAlignedOrchestratorHome ? MAIA_HEADER_COLLABORATOR_HOME_CONTENT_WIDTH_PX : undefined;
|
|
587
596
|
var contentAlignStart = isPlannerHome || isHeaderTaskContextHome || isLeftAlignedOrchestratorHome;
|
|
588
597
|
var showAgentIntroduction = section !== 'project' && !isMAIA && !!(agent !== null && agent !== void 0 && agent.introduction);
|
|
589
|
-
|
|
590
|
-
showFAQs:
|
|
598
|
+
var homeMain = /*#__PURE__*/_jsx(SCCAIHomeContent, {
|
|
599
|
+
showFAQs: homeScrollableLayout,
|
|
600
|
+
$isAgentView: !isMAIA,
|
|
601
|
+
$floatingCustomCenter: floatingCustomCenter,
|
|
602
|
+
$centerVertically: isPlannerHome,
|
|
591
603
|
$alignStart: isLeftAlignedOrchestratorHome,
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
}), /*#__PURE__*/_jsx(SCCAIHomeContent, {
|
|
595
|
-
ref: contentContainerRef,
|
|
604
|
+
$fixedContentWidth: fixedHomeContentWidth,
|
|
605
|
+
children: /*#__PURE__*/_jsxs(SCCAIHomeContentInner, {
|
|
596
606
|
showFAQs: homeScrollableLayout,
|
|
597
607
|
$isAgentView: !isMAIA,
|
|
598
608
|
$floatingCustomCenter: floatingCustomCenter,
|
|
599
609
|
$centerVertically: isPlannerHome,
|
|
600
|
-
$alignStart: isLeftAlignedOrchestratorHome,
|
|
601
|
-
$
|
|
602
|
-
|
|
603
|
-
|
|
610
|
+
$alignStart: isHeaderTaskContextHome || isLeftAlignedOrchestratorHome,
|
|
611
|
+
$headerCollaboratorHome: isHeaderTaskContextHome,
|
|
612
|
+
$sectionOrchestratorHome: isLeftAlignedOrchestratorHome,
|
|
613
|
+
children: [/*#__PURE__*/_jsxs(SCCAIHomeHeader, {
|
|
614
|
+
$gap: showAgentIntroduction ? '20px' : '0',
|
|
615
|
+
$maxWidth: isMAIA ? '100%' : '380px',
|
|
604
616
|
$isAgentView: !isMAIA,
|
|
605
|
-
$
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
children: /*#__PURE__*/_jsx(TemplateGradientIcon, {
|
|
623
|
-
height: 24,
|
|
624
|
-
width: 24
|
|
625
|
-
})
|
|
626
|
-
}), /*#__PURE__*/_jsxs(SCCAIHomeProjectSummaryContent, {
|
|
627
|
-
children: [/*#__PURE__*/_jsx(SCCAIHomeProjectSummaryTitle, {
|
|
628
|
-
children: t('homeMenu.projectSummary.title')
|
|
629
|
-
}), /*#__PURE__*/_jsx(SCCAIHomeProjectSummaryDescription, {
|
|
630
|
-
children: t('homeMenu.projectSummary.description')
|
|
631
|
-
})]
|
|
617
|
+
$align: contentAlignStart ? 'start' : 'center',
|
|
618
|
+
children: [renderHeaderContent(), showAgentIntroduction ? /*#__PURE__*/_jsx(SCCAIHomeIntroduction, {
|
|
619
|
+
expanded: expanded,
|
|
620
|
+
children: agent.introduction
|
|
621
|
+
}) : null]
|
|
622
|
+
}), showProjectSummaryCard && /*#__PURE__*/_jsxs(SCCAHWrapperSummaryProject, {
|
|
623
|
+
onClick: handlers.projectSummary,
|
|
624
|
+
children: [/*#__PURE__*/_jsx(SCCAIHomeProjectSummary, {
|
|
625
|
+
children: /*#__PURE__*/_jsx(TemplateGradientIcon, {
|
|
626
|
+
height: 24,
|
|
627
|
+
width: 24
|
|
628
|
+
})
|
|
629
|
+
}), /*#__PURE__*/_jsxs(SCCAIHomeProjectSummaryContent, {
|
|
630
|
+
children: [/*#__PURE__*/_jsx(SCCAIHomeProjectSummaryTitle, {
|
|
631
|
+
children: t('homeMenu.projectSummary.title')
|
|
632
|
+
}), /*#__PURE__*/_jsx(SCCAIHomeProjectSummaryDescription, {
|
|
633
|
+
children: t('homeMenu.projectSummary.description')
|
|
632
634
|
})]
|
|
633
|
-
}), showDynamicSection && /*#__PURE__*/_jsxs(SCCAIHomeDynamicSection, {
|
|
634
|
-
$grow: isMaiaker,
|
|
635
|
-
$alignStart: isHeaderTaskContextHome || isLeftAlignedOrchestratorHome,
|
|
636
|
-
children: [shouldShowPlannerFuas ? /*#__PURE__*/_jsx(FrequentlyUsedActions, {
|
|
637
|
-
variant: "planner",
|
|
638
|
-
onStartChat: handleHomeStartChat,
|
|
639
|
-
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
640
|
-
isScrolling: isScrolling,
|
|
641
|
-
actions: headerHoursFuas,
|
|
642
|
-
loading: headerHoursFuasLoading
|
|
643
|
-
}) : null, renderRecentContexts(), shouldShowFaqs && /*#__PURE__*/_jsx(FrequentlyAskedQuestions, {
|
|
644
|
-
onStartChat: onStartChat,
|
|
645
|
-
showFAQs: showFAQs,
|
|
646
|
-
showProjectSummary: showProjectSummary,
|
|
647
|
-
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
648
|
-
lang: lang,
|
|
649
|
-
isScrolling: isScrolling,
|
|
650
|
-
faqs: faqs,
|
|
651
|
-
loading: faqsAreLoading
|
|
652
|
-
}), shouldShowFuas && /*#__PURE__*/_jsx(FrequentlyUsedActions, {
|
|
653
|
-
onStartChat: onStartChat,
|
|
654
|
-
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
655
|
-
isScrolling: isScrolling,
|
|
656
|
-
actions: fuas,
|
|
657
|
-
loading: fuasAreLoading
|
|
658
|
-
}), isMaiaker ? /*#__PURE__*/_jsx(ChatAIHomeMaiaker, {
|
|
659
|
-
onStartChat: onStartChat
|
|
660
|
-
}) : null]
|
|
661
635
|
})]
|
|
662
|
-
})
|
|
663
|
-
|
|
636
|
+
}), showDynamicSection && /*#__PURE__*/_jsxs(SCCAIHomeDynamicSection, {
|
|
637
|
+
$grow: isMaiaker,
|
|
638
|
+
$alignStart: isHeaderTaskContextHome || isLeftAlignedOrchestratorHome,
|
|
639
|
+
children: [shouldShowCollaboratorFullscreenFuas ? /*#__PURE__*/_jsx(FrequentlyUsedActions, {
|
|
640
|
+
onStartChat: handleHomeStartChat,
|
|
641
|
+
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
642
|
+
isScrolling: isScrolling,
|
|
643
|
+
actions: collaboratorFullscreenFuas,
|
|
644
|
+
loading: collaboratorFullscreenFuasLoading
|
|
645
|
+
}) : null, shouldShowPlannerFuas ? /*#__PURE__*/_jsx(FrequentlyUsedActions, {
|
|
646
|
+
variant: "planner",
|
|
647
|
+
onStartChat: handleHomeStartChat,
|
|
648
|
+
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
649
|
+
isScrolling: isScrolling,
|
|
650
|
+
actions: headerHoursFuas,
|
|
651
|
+
loading: headerHoursFuasLoading
|
|
652
|
+
}) : null, renderRecentContexts(), shouldShowFaqs && /*#__PURE__*/_jsx(FrequentlyAskedQuestions, {
|
|
653
|
+
onStartChat: onStartChat,
|
|
654
|
+
showFAQs: showFAQs,
|
|
655
|
+
showProjectSummary: showProjectSummary,
|
|
656
|
+
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
657
|
+
lang: lang,
|
|
658
|
+
isScrolling: isScrolling,
|
|
659
|
+
faqs: faqs,
|
|
660
|
+
loading: faqsAreLoading
|
|
661
|
+
}), shouldShowFuas && /*#__PURE__*/_jsx(FrequentlyUsedActions, {
|
|
662
|
+
onStartChat: onStartChat,
|
|
663
|
+
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
664
|
+
isScrolling: isScrolling,
|
|
665
|
+
actions: fuas,
|
|
666
|
+
loading: fuasAreLoading
|
|
667
|
+
}), isMaiaker ? /*#__PURE__*/_jsx(ChatAIHomeMaiaker, {
|
|
668
|
+
onStartChat: onStartChat
|
|
669
|
+
}) : null]
|
|
670
|
+
})]
|
|
671
|
+
})
|
|
672
|
+
});
|
|
673
|
+
return /*#__PURE__*/_jsxs(SCCAIHomeContainer, {
|
|
674
|
+
showFAQs: showFAQs,
|
|
675
|
+
$alignStart: isLeftAlignedOrchestratorHome,
|
|
676
|
+
children: [homeScrollableLayout && /*#__PURE__*/_jsx(SCCAIHomeGradientTop, {
|
|
677
|
+
$show: showTopGradient
|
|
678
|
+
}), homeScrollableLayout ? /*#__PURE__*/_jsx(SCCAIHomeScroll, {
|
|
679
|
+
ref: contentContainerRef,
|
|
680
|
+
$scrollable: true,
|
|
681
|
+
children: homeMain
|
|
682
|
+
}) : homeMain, homeScrollableLayout && /*#__PURE__*/_jsx(SCCAIHomeGradientBottom, {
|
|
664
683
|
$show: showBottomGradient
|
|
665
684
|
})]
|
|
666
685
|
});
|
|
667
686
|
};
|
|
668
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsImZsdXNoU3luYyIsIlRvb2x0aXAiLCJMaXN0Q2hlY2tsaXN0IiwidXNlVCIsIkVWRU5UUyIsInVzZUV2ZW50IiwiU0NDQUlIb21lQ29udGFpbmVyIiwiU0NDQUlIb21lQ29udGVudCIsIlNDQ0FJSG9tZUNvbnRlbnRJbm5lciIsIlNDQ0FJSG9tZUdyYWRpZW50VG9wIiwiU0NDQUlIb21lR3JhZGllbnRCb3R0b20iLCJTQ0NBSUhvbWVIZWFkZXIiLCJTQ0NBSUhvbWVHcmVldGluZyIsIlNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lciIsIlNDQ0FJSG9tZUFnZW50SW5mbyIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24iLCJTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCIsIlNDQ0FJSG9tZUludHJvZHVjdGlvbiIsIlNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lciIsIlNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQiLCJTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQ0FJSG9tZUljb25Db250YWluZXIiLCJTQ0NBSUhvbWVMb2dvV3JhcHBlciIsIlNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayIsIlNDQ0FJSG9tZVRpdGxlIiwiU0NDQUlIb21lVGl0bGVCbG9jayIsIlNDQ0FJSG9tZVN1YnRpdGxlIiwiU0NDQUlIb21lRHluYW1pY1NlY3Rpb24iLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0cyIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlciIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblRpdGxlIiwiU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uU3VidGl0bGUiLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbiIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsVGV4dCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24iLCJNQUlBX0hFQURFUl9DT0xMQUJPUkFUT1JfSE9NRV9DT05URU5UX1dJRFRIX1BYIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVzZXIiLCJDT1JVc2VyUm9sZSIsImlzQ29sbGFib3JhdG9yUm9sZSIsImlzTWFuYWdlclJvbGUiLCJ1c2VSZXNpemVMaXN0ZW5lciIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm9yY2hlc3RyYXRvckhhc0hvdXJzU3ViYWdlbnQiLCJ2YWxpZGF0ZUlzTWFpYSIsImlzTWFpYWtlckFnZW50IiwiRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwiRnJlcXVlbnRseVVzZWRBY3Rpb25zIiwidXNlRnJlcXVlbnRseVVzZWRBY3Rpb25zIiwic29ydE1hbmFnZXJIb3Vyc0hvbWVGdWFzIiwicmVzb2x2ZVJlY2VudENvbnRleHRzSG9tZUxpbWl0IiwidXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwidXNlUmVjZW50Q29udGV4dHMiLCJNQUlBSXNvbG9nbyIsIlRlbXBsYXRlR3JhZGllbnRJY29uIiwiQ2hhdEFJSG9tZU1haWFrZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJGcmVxdWVudFF1ZXN0aW9ucyIsIlJFQ0VOVF9DT05URVhUX0lDT05fQ09MT1IiLCJSRUNFTlRfQ09OVEVYVF9JQ09OX1NJWkVfUFgiLCJSZWNlbnRDb250ZXh0UGlsbCIsIl9yZWYiLCJjb250ZXh0IiwibGFiZWwiLCJvbkNsaWNrIiwiX3JlZiRmdWxsV2lkdGgiLCJmdWxsV2lkdGgiLCJ0ZXh0UmVmIiwiX3VzZVJlc2l6ZUxpc3RlbmVyIiwic2hvd1Rvb2x0aXAiLCJ0eXBlIiwiJGZ1bGxXaWR0aCIsImNoaWxkcmVuIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsInVuZGVmaW5lZCIsInJlZiIsInRpdGxlIiwicGFyc2VOdW1lcmljSWQiLCJ2YWx1ZSIsInBhcnNlZCIsIk51bWJlciIsImlzRmluaXRlIiwiZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyIsInJvbGVJZCIsIm5vcm1hbGl6ZWRSb2xlSWQiLCJDTEVWRUwiLCJESVJFQ1RPUiIsIlBST0pFQ1RfTUFOQUdFUiIsIlNldCIsIkNoYXRBSUhvbWUiLCJfcmVmMiIsImhhbmRsZXJzIiwib25TdGFydENoYXQiLCJleHBhbmRlZCIsImZsb2F0aW5nIiwiX3VzZVQiLCJ0IiwiaTE4biIsImV2ZW50IiwidXNlciIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJzZWN0aW9uIiwiY2xpZW50IiwicHJvamVjdCIsInRhc2siLCJjaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0Iiwic2V0VGFzayIsInNldENoaXBzUHJvamVjdCIsImlzTUFJQSIsImZsb2F0aW5nQ3VzdG9tQ2VudGVyIiwibGFuZyIsImxhbmd1YWdlIiwic3VtbWFyeVByb2plY3RBY2Nlc3MiLCJ3aW5kb3ciLCJTdHJpbmciLCJNQUlBX1BST0pFQ1RfU1VNTUFSWV9GRUFUVVJFX0FDQ0VTUyIsInRvTG93ZXJDYXNlIiwibWFpYVByb2plY3RTdW1tYXJ5QWNjZXNzIiwiZmFxc0FjY2VzcyIsInNob3dQcm9qZWN0U3VtbWFyeSIsImlzTWFpYWtlciIsImlzSGVhZGVySG9tZSIsImlzT3JjaGVzdHJhdG9yIiwiaXNQbGFubmVySG9tZSIsImlzU2VjdGlvbk9yY2hlc3RyYXRvckhvbWUiLCJoYXNIb3Vyc1N1YmFnZW50IiwiaGFzUGlubmVkQ29udGV4dCIsImlkIiwicHJvamVjdElkIiwiaXNSZWNlbnRDb250ZXh0c1N0ZXAiLCJpc0hlYWRlclRhc2tDb250ZXh0SG9tZSIsInJvbGVfaWQiLCJpc0hlYWRlckhvdXJzQWdlbnRIb21lIiwiaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lIiwiaGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSIsImlzQ29udGV4dEhvbWVTdGVwIiwiaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUiLCJhbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VsZWN0ZWRDb250ZXh0Iiwic2V0U2VsZWN0ZWRDb250ZXh0IiwiYWN0aXZlQ29udGV4dCIsIm5hbWUiLCJwcm9qZWN0TmFtZSIsInBpbm5lZEVudGl0eVR5cGUiLCJmYXFzQ29udGV4dEVudGl0eVR5cGUiLCJfYWN0aXZlQ29udGV4dCR0eXBlIiwiaXNDbGllbnRDb250ZXh0Rm9yRmFxcyIsImZ1YXNTZWN0aW9uIiwicmVhbExpc3RzQWdlbnRJZCIsInJlYWxMaXN0c0VudGl0eVR5cGUiLCJfYWN0aXZlQ29udGV4dCR0eXBlMiIsIl91c2VGcmVxdWVudGx5VXNlZEFjdCIsImFnZW50RnVhcyIsImFjdGlvbnMiLCJmdWFzTG9hZGluZyIsImxvYWRpbmciLCJfdXNlRnJlcXVlbnRseVVzZWRBY3QyIiwiY29sbGFib3JhdG9yUGxhbm5lckZ1YXMiLCJjb2xsYWJvcmF0b3JQbGFubmVyRnVhc0xvYWRpbmciLCJfdXNlRnJlcXVlbnRseVVzZWRBY3QzIiwibWFuYWdlckhvbWVGdWFzIiwibWFuYWdlckhvbWVGdWFzTG9hZGluZyIsImhlYWRlckhvdXJzRnVhcyIsImhlYWRlckhvdXJzRnVhc0xvYWRpbmciLCJyZWNlbnRDb250ZXh0c0xpbWl0IiwiZnVhc0NvdW50IiwibGVuZ3RoIiwiX3VzZVJlY2VudENvbnRleHRzIiwiZW5hYmxlZCIsImxpbWl0IiwiZmV0Y2hlZFJlY2VudENvbnRleHRzIiwiY29udGV4dHMiLCJyZWNlbnRDb250ZXh0c0xvYWRpbmciLCJyZWNlbnRDb250ZXh0cyIsImZpbHRlciIsImhhcyIsInJlY2VudENvbnRleHRTa2VsZXRvbktleXMiLCJBcnJheSIsImZyb20iLCJfIiwiaW5kZXgiLCJjb25jYXQiLCJmYXFzTGlzdEFnZW50SWQiLCJmYXFzTGlzdEVudGl0eVR5cGUiLCJfdXNlRnJlcXVlbnRseUFza2VkUXUiLCJhZ2VudEZhcXMiLCJmYXFzIiwiZmFxc0xvYWRpbmciLCJoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJmYXFzRmV0Y2hSZWYiLCJfZmFxc0ZldGNoUmVmJGN1cnJlbnQiLCJjdXJyZW50S2V5IiwibGFzdEtleSIsImN1cnJlbnQiLCJhZ2VudElkIiwiZW50aXR5VHlwZSIsImZ1YXMiLCJmYXFzQXJlTG9hZGluZyIsImZ1YXNBcmVMb2FkaW5nIiwic2hvd1JlY2VudENvbnRleHRzQmxvY2siLCJzaG91bGRTaG93RmFxcyIsInNob3VsZFNob3dGdWFzIiwic2hvdWxkU2hvd1BsYW5uZXJGdWFzTG9hZGluZyIsInNob3VsZFNob3dQbGFubmVyRnVhc0NvbnRlbnQiLCJzaG91bGRTaG93UGxhbm5lckZ1YXMiLCJzaG93UHJvamVjdFN1bW1hcnlDYXJkIiwiZW50aXR5Iiwic2hvd0ZBUXMiLCJob21lU2Nyb2xsYWJsZUxheW91dCIsInNob3dEeW5hbWljU2VjdGlvbiIsImNvbnRlbnRDb250YWluZXJSZWYiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNob3dUb3BHcmFkaWVudCIsInNldFNob3dUb3BHcmFkaWVudCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd0JvdHRvbUdyYWRpZW50Iiwic2V0U2hvd0JvdHRvbUdyYWRpZW50IiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJpc1Njcm9sbGluZyIsInNldElzU2Nyb2xsaW5nIiwic2Nyb2xsVGltZW91dFJlZiIsImdyZWV0aW5nIiwiaW50cm8iLCJpbnRyb2R1Y3Rpb24iLCJpc0FycmF5IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiaGFuZGxlU2VsZWN0UmVjZW50Q29udGV4dCIsIm9yZGVyIiwiX2NvbnRleHQkcGFyZW50cyIsIl9jb250ZXh0JHBhcmVudHMyIiwiX2NvbnRleHQkcGFyZW50czMiLCJfY29udGV4dCRwYXJlbnRzNCIsImFpQ2hhdENvbnRleHRTZWxlY3RlZCIsImNvbnRleHRJZCIsImNsaWVudElkIiwicGFyZW50cyIsImNsaWVudF9pZCIsInByb2plY3RfaWQiLCJjbGllbnROYW1lIiwiY2xpZW50X25hbWUiLCJwcm9qZWN0X25hbWUiLCJfb2JqZWN0U3ByZWFkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJoYW5kbGVIb21lU3RhcnRDaGF0IiwibWVzc2FnZSIsImF0dGFjaG1lbnRzIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJyZW5kZXJSZWNlbnRDb250ZXh0cyIsIiRmaXhlZENvbnRlbnRXaWR0aCIsIiRmbHVzaFBpbGxzIiwibWFwIiwia2V5IiwidHJpbSIsImNoZWNrU2Nyb2xsIiwiY29udGFpbmVyIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiaXNTY3JvbGxhYmxlIiwiaXNBdFRvcCIsImlzQXRCb3R0b20iLCJoYW5kbGVTY3JvbGwiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwic2NoZWR1bGVDaGVja1Njcm9sbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZXNpemVPYnNlcnZlciIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsInNjcm9sbENvbnRlbnQiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIkVsZW1lbnQiLCJ0aW1lb3V0SWQiLCJsYXRlVGltZW91dElkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRpc2Nvbm5lY3QiLCJyZW5kZXJIZWFkZXJDb250ZW50IiwiX2FnZW50JGNyZWF0ZWRfYnkiLCJfYWdlbnQkY3JlYXRlZF9ieTIiLCJlbW9qaSIsImNyZWF0ZWRfYnkiLCJpc19kZWxldGVkIiwiY29udGVudEFsaWduU3RhcnQiLCJtYWlhSGVhZGVyU3RhY2tOZWVkc0dhcCIsIiRub0dhcCIsIiRhbGlnbiIsIiRzaXplIiwiZmlyc3ROYW1lIiwiJGNvbGxhYm9yYXRvckhvbWUiLCJmaXhlZEhvbWVDb250ZW50V2lkdGgiLCJzaG93QWdlbnRJbnRyb2R1Y3Rpb24iLCIkYWxpZ25TdGFydCIsIiRzaG93IiwiJGlzQWdlbnRWaWV3IiwiJGZsb2F0aW5nQ3VzdG9tQ2VudGVyIiwiJGNlbnRlclZlcnRpY2FsbHkiLCIkaGVhZGVyQ29sbGFib3JhdG9ySG9tZSIsIiRzZWN0aW9uT3JjaGVzdHJhdG9ySG9tZSIsIiRnYXAiLCIkbWF4V2lkdGgiLCJwcm9qZWN0U3VtbWFyeSIsIiRncm93IiwidmFyaWFudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlIb21lL0NoYXRBSUhvbWUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJ1xuXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyBMaXN0Q2hlY2tsaXN0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvTGlzdENoZWNrbGlzdCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuXG5pbXBvcnQgeyBvcHRpb25zIH0gZnJvbSAnLi4vQ2hhdEFJTW9kYWwvY29uc3RhbnRzJ1xuXG5pbXBvcnQge1xuICBTQ0NBSUhvbWVDb250YWluZXIsXG4gIFNDQ0FJSG9tZUNvbnRlbnQsXG4gIFNDQ0FJSG9tZUNvbnRlbnRJbm5lcixcbiAgU0NDQUlIb21lR3JhZGllbnRUb3AsXG4gIFNDQ0FJSG9tZUdyYWRpZW50Qm90dG9tLFxuICBTQ0NBSUhvbWVIZWFkZXIsXG4gIFNDQ0FJSG9tZUdyZWV0aW5nLFxuICBTQ0NBSUhvbWVBZ2VudEluZm9Db250YWluZXIsXG4gIFNDQ0FJSG9tZUFnZW50SW5mbyxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnksXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudCxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnlEZXNjcmlwdGlvbixcbiAgU0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3QsXG4gIFNDQ0FJSG9tZUludHJvZHVjdGlvbixcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyLFxuICBTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0LFxuICBTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSxcbiAgU0NDQUlIb21lSWNvbkNvbnRhaW5lcixcbiAgU0NDQUlIb21lTG9nb1dyYXBwZXIsXG4gIFNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayxcbiAgU0NDQUlIb21lVGl0bGUsXG4gIFNDQ0FJSG9tZVRpdGxlQmxvY2ssXG4gIFNDQ0FJSG9tZVN1YnRpdGxlLFxuICBTQ0NBSUhvbWVEeW5hbWljU2VjdGlvbixcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dHMsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdCxcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uSGVhZGVyLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25UaXRsZSxcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uU3VidGl0bGUsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbEljb24sXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsVGV4dCxcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxTa2VsZXRvbixcbiAgTUFJQV9IRUFERVJfQ09MTEFCT1JBVE9SX0hPTUVfQ09OVEVOVF9XSURUSF9QWCxcbn0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0LCB0eXBlIFNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlclJvbGUsIGlzQ29sbGFib3JhdG9yUm9sZSwgaXNNYW5hZ2VyUm9sZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VSZXNpemVMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlc2l6ZSdcbmltcG9ydCB7IGdldENvbnRleHRNZW50aW9uSWNvbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uSWNvbnMnXG5pbXBvcnQgeyBvcmNoZXN0cmF0b3JIYXNIb3Vyc1N1YmFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvb3JjaGVzdHJhdG9yU3ViYWdlbnRzJ1xuaW1wb3J0IHsgdmFsaWRhdGVJc01haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy92YWxpZGF0ZUlzTWFpYSdcbmltcG9ydCB7IGlzTWFpYWtlckFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IEZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHNvcnRNYW5hZ2VySG91cnNIb21lRnVhcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3NvcnRNYW5hZ2VySG91cnNIb21lRnVhcydcbmltcG9ydCB7IHJlc29sdmVSZWNlbnRDb250ZXh0c0hvbWVMaW1pdCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JlY2VudENvbnRleHRzSG9tZUxpbWl0J1xuaW1wb3J0IHsgdXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zJ1xuaW1wb3J0IHsgdXNlUmVjZW50Q29udGV4dHMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZWNlbnRDb250ZXh0cydcbmltcG9ydCB0eXBlIHsgUmVjZW50Q29udGV4dEl0ZW0sIFJlY2VudENvbnRleHRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9SZWNlbnRDb250ZXh0cydcbmltcG9ydCB7IE1BSUFJc29sb2dvIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvTUFJQUlzb2xvZ28nXG5pbXBvcnQgeyBUZW1wbGF0ZUdyYWRpZW50SWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL1RlbXBsYXRlR3JhZGllbnRJY29uJ1xuaW1wb3J0IHsgQ2hhdEFJSG9tZU1haWFrZXIgfSBmcm9tICcuL0NoYXRBSUhvbWVNYWlha2VyJ1xuXG50eXBlIENoYXRBSUhvbWVQcm9wcyA9IHtcbiAgb25TdGFydENoYXQ6IChcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdIHwgbnVsbCxcbiAgICBmYXFJZD86IHN0cmluZyxcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICBtZW50aW9ucz86IG51bGwsXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgKSA9PiB2b2lkXG4gIGhhbmRsZXJzOiBSZWNvcmQ8b3B0aW9ucywgKCkgPT4gdm9pZD5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG4gIGZsb2F0aW5nPzogYm9vbGVhblxufVxuXG5leHBvcnQgZW51bSBGcmVxdWVudFF1ZXN0aW9ucyB7XG4gIHJlbnRhYmlsaWRhZF9wcm95ZWN0byA9ICdyZW50YWJpbGlkYWRfcHJveWVjdG8nLFxuICBhdmFuY2VfcHJveWVjdG8gPSAnYXZhbmNlX3Byb3llY3RvJyxcbn1cblxuY29uc3QgUkVDRU5UX0NPTlRFWFRfSUNPTl9DT0xPUiA9ICcjNEQ0RDREJ1xuY29uc3QgUkVDRU5UX0NPTlRFWFRfSUNPTl9TSVpFX1BYID0gMTVcblxuY29uc3QgUmVjZW50Q29udGV4dFBpbGwgPSAoe1xuICBjb250ZXh0LFxuICBsYWJlbCxcbiAgb25DbGljayxcbiAgZnVsbFdpZHRoID0gZmFsc2UsXG59OiB7XG4gIGNvbnRleHQ6IFJlY2VudENvbnRleHRJdGVtXG4gIGxhYmVsOiBzdHJpbmdcbiAgb25DbGljazogKCkgPT4gdm9pZFxuICBmdWxsV2lkdGg/OiBib29sZWFuXG59KSA9PiB7XG4gIGNvbnN0IHRleHRSZWYgPSB1c2VSZWY8SFRNTFNwYW5FbGVtZW50PihudWxsKVxuICBjb25zdCB7IHNob3dUb29sdGlwIH0gPSB1c2VSZXNpemVMaXN0ZW5lcih0ZXh0UmVmLCBbbGFiZWxdKVxuXG4gIHJldHVybiAoXG4gICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtvbkNsaWNrfSAkZnVsbFdpZHRoPXtmdWxsV2lkdGh9PlxuICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbj5cbiAgICAgICAge2NvbnRleHQudHlwZSA9PT0gJ3Rhc2snID8gKFxuICAgICAgICAgIDxMaXN0Q2hlY2tsaXN0IGNvbG9yPXtSRUNFTlRfQ09OVEVYVF9JQ09OX0NPTE9SfSB3aWR0aD1cIjE1cHhcIiBoZWlnaHQ9XCIxNXB4XCIgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICBnZXRDb250ZXh0TWVudGlvbkljb24oY29udGV4dC50eXBlLCBSRUNFTlRfQ09OVEVYVF9JQ09OX0NPTE9SLCB1bmRlZmluZWQsIFJFQ0VOVF9DT05URVhUX0lDT05fU0laRV9QWClcbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxJY29uPlxuICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsVGV4dCByZWY9e3RleHRSZWZ9PlxuICAgICAgICB7c2hvd1Rvb2x0aXAgPyAoXG4gICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2xhYmVsfT5cbiAgICAgICAgICAgIDxzcGFuPntsYWJlbH08L3NwYW4+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICApIDogKFxuICAgICAgICAgIGxhYmVsXG4gICAgICAgICl9XG4gICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsVGV4dD5cbiAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsPlxuICApXG59XG5cbmNvbnN0IHBhcnNlTnVtZXJpY0lkID0gKHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCk6IG51bWJlciB8IG51bGwgPT4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiBudWxsXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSlcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxufVxuXG5jb25zdCBnZXRBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzID0gKHJvbGVJZD86IENPUlVzZXJSb2xlIHwgbnVtYmVyIHwgc3RyaW5nKTogU2V0PFJlY2VudENvbnRleHRUeXBlPiA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSb2xlSWQgPSBOdW1iZXIocm9sZUlkKVxuICBpZiAoXG4gICAgbm9ybWFsaXplZFJvbGVJZCA9PT0gQ09SVXNlclJvbGUuQ0xFVkVMIHx8XG4gICAgbm9ybWFsaXplZFJvbGVJZCA9PT0gQ09SVXNlclJvbGUuRElSRUNUT1IgfHxcbiAgICBub3JtYWxpemVkUm9sZUlkID09PSBDT1JVc2VyUm9sZS5QUk9KRUNUX01BTkFHRVJcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoWydjbGllbnQnLCAncHJvamVjdCcsICd0YXNrJ10pXG4gIH1cbiAgaWYgKGlzQ29sbGFib3JhdG9yUm9sZShyb2xlSWQpKSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoWyd0YXNrJ10pXG4gIH1cbiAgcmV0dXJuIG5ldyBTZXQoKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJSG9tZSA9ICh7IGhhbmRsZXJzLCBvblN0YXJ0Q2hhdCwgZXhwYW5kZWQsIGZsb2F0aW5nIH06IENoYXRBSUhvbWVQcm9wcykgPT4ge1xuICBjb25zdCB7IHQsIGkxOG4gfSA9IHVzZVQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGFnZW50LCBzZWN0aW9uLCBjbGllbnQsIHByb2plY3QsIHRhc2ssIGNoaXBzUHJvamVjdCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCBzZXRDaGlwc1Byb2plY3QgfSA9XG4gICAgdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG4gIGNvbnN0IGZsb2F0aW5nQ3VzdG9tQ2VudGVyID0gISEoZmxvYXRpbmcgJiYgYWdlbnQ/LnR5cGUgPT09ICdjdXN0b20nKVxuICBjb25zdCBsYW5nID0gaTE4bi5sYW5ndWFnZSA9PT0gJ2JyJyA/ICdwdCcgOiBpMThuLmxhbmd1YWdlXG5cbiAgY29uc3Qgc3VtbWFyeVByb2plY3RBY2Nlc3MgPVxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgKFN0cmluZyh3aW5kb3cuTUFJQV9QUk9KRUNUX1NVTU1BUllfRkVBVFVSRV9BQ0NFU1MpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgU3RyaW5nKHdpbmRvdy5tYWlhUHJvamVjdFN1bW1hcnlBY2Nlc3MpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJylcbiAgY29uc3QgZmFxc0FjY2VzcyA9IHRydWVcbiAgY29uc3Qgc2hvd1Byb2plY3RTdW1tYXJ5ID0gISEoaXNNQUlBICYmIHN1bW1hcnlQcm9qZWN0QWNjZXNzKVxuICAvLyBFbCBvcmNoZXN0cmF0b3IgKHR5cGUgPT09ICdvcmNoZXN0cmF0b3InKSBtdWVzdHJhIEZBUXMvRlVBcyBhZ3JlZ2FkYXMgZGUgc3VzIHN1YmFnZW50ZXMsXG4gIC8vIGFzw60gcXVlIE5PIHNlIHRyYXRhIGNvbW8gbWFpYWtlciBhY8OhLlxuICBjb25zdCBpc01haWFrZXIgPSBpc01haWFrZXJBZ2VudChhZ2VudClcbiAgY29uc3QgaXNIZWFkZXJIb21lID0gaXNNQUlBICYmIHNlY3Rpb24gPT09ICdoZWFkZXInICYmIGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJ1xuICAvLyBFbCBvcmNoZXN0cmF0b3IgdXNhIGVsIGhvbWUgZW4gMiBwYXNvcyAoY29udGV4dG9zIHJlY2llbnRlcyDihpQgRkFRcy9GVUFzKSBlbiBoZWFkZXIvcHJvamVjdC9jbGllbnQvdGFzay5cbiAgLy8gRW4gcHJvamVjdC9jbGllbnQvdGFzaywgYWwgbGltcGlhciBlbCBjb250ZXh0byAocC4gZWouIGFsIHJlc2VsZWNjaW9uYXIgTUFJQVxuICAvLyBkZXNkZSBlbCBsaXN0YWRvIGRlIGFnZW50ZXMpIHNlIG11ZXN0cmEgZWwgc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcyBlbiBsdWdhciBkZSB1biBob21lIHZhY8Otby5cbiAgY29uc3QgaXNPcmNoZXN0cmF0b3IgPSBpc01BSUEgJiYgYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InXG4gIC8vIFBsYW5uZXI6IGhvbWUgZGUgRlVBcyBkZWwgb3JjaGVzdHJhdG9yIChzaW4gc2VsZWN0b3IgZGUgY29udGV4dG9zKS5cbiAgLy8gU2kgZWwgdXN1YXJpbyBuYXZlZ2EgYSBNYWlha2VyIHUgb3RybyBhZ2VudGUsIHNlY3Rpb24gc2lndWUgc2llbmRvIGBwbGFubmVyYCBwZXJvIHlhIG5vIGVzIGVzdGUgaG9tZS5cbiAgY29uc3QgaXNQbGFubmVySG9tZSA9IHNlY3Rpb24gPT09ICdwbGFubmVyJyAmJiBpc09yY2hlc3RyYXRvclxuICAvLyBIb21lcyBkZSBzZWNjacOzbiAocHJvamVjdC9jbGllbnQvdGFzayk6IHNpbiBpc29sb2dvLCBjb250ZW5pZG8gdG9wLWxlZnQsIGNvbHVtbmEgNDQ4cHggY2VudHJhZGEuXG4gIGNvbnN0IGlzU2VjdGlvbk9yY2hlc3RyYXRvckhvbWUgPSBpc09yY2hlc3RyYXRvciAmJiAhaXNIZWFkZXJIb21lICYmICFpc1BsYW5uZXJIb21lXG4gIGNvbnN0IGhhc0hvdXJzU3ViYWdlbnQgPSBvcmNoZXN0cmF0b3JIYXNIb3Vyc1N1YmFnZW50KGFnZW50KVxuXG4gIC8vIEhvbWUgZGVsIG9yY2hlc3RyYXRvciBlbiAyIHBhc29zOlxuICAvLyAgLSBQYXNvIDEgKHNpbiBjb250ZXh0byBwaW5lYWRvKTogc2UgbXVlc3RyYW4gc29sbyBsb3MgY29udGV4dG9zIHJlY2llbnRlcy5cbiAgLy8gIC0gUGFzbyAyIChjb250ZXh0byBwaW5lYWRvKTogc2UgbXVlc3RyYW4gbGFzIEZBUXMvYWNjaW9uZXMgcXVlIHJlZmVyZW5jaWFuIGVzZSBjb250ZXh0by5cbiAgY29uc3QgaGFzUGlubmVkQ29udGV4dCA9ICEhKHRhc2s/LmlkIHx8IGNoaXBzUHJvamVjdD8ucHJvamVjdElkIHx8IGNsaWVudD8uaWQgfHwgcHJvamVjdD8uaWQpXG4gIGNvbnN0IGlzUmVjZW50Q29udGV4dHNTdGVwID0gaXNPcmNoZXN0cmF0b3IgJiYgIWhhc1Bpbm5lZENvbnRleHQgJiYgIWlzUGxhbm5lckhvbWVcbiAgLy8gSGVhZGVyIHBhc28gMSBjb21wYWN0byAoc2luIGlzb2xvZ28sIHBpbGxzIGZ1bGwtd2lkdGgpOiBjb2xhYm9yYWRvciB5IG1hbmFnZXJzIChDLUxldmVsL0RpcmVjdG9yL1BNKS5cbiAgY29uc3QgaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgPVxuICAgIHNlY3Rpb24gPT09ICdoZWFkZXInICYmIGlzUmVjZW50Q29udGV4dHNTdGVwICYmIChpc0NvbGxhYm9yYXRvclJvbGUodXNlci5yb2xlX2lkKSB8fCBpc01hbmFnZXJSb2xlKHVzZXIucm9sZV9pZCkpXG4gIC8vIEJsb3F1ZSBGVUFzIHBsYW5uZXIgKyBzZWNjacOzbiBkZSBjb250ZXh0b3MgcmVjaWVudGVzIGNvbiB0w610dWxvcyAoY29sYWJvcmFkb3IgbyBtYW5hZ2VyIGNvbiBob3VyKS5cbiAgY29uc3QgaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSA9IGlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIGhhc0hvdXJzU3ViYWdlbnRcbiAgY29uc3QgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lID0gaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSAmJiBpc01hbmFnZXJSb2xlKHVzZXIucm9sZV9pZClcbiAgY29uc3QgaGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc0hlYWRlckhvdXJzQWdlbnRIb21lKSB7XG4gICAgICBpZiAoaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lKSByZXR1cm4gJ2hvbWVNZW51LmNvbnRleHRIb21lLnN1YnRpdGxlTWFuYWdlcldpdGhIb3VycydcbiAgICAgIHJldHVybiAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGVDb2xsYWJvcmF0b3JXaXRoSG91cnMnXG4gICAgfVxuICAgIGlmIChpc01hbmFnZXJSb2xlKHVzZXIucm9sZV9pZCkpIHJldHVybiAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGUnXG4gICAgcmV0dXJuICdob21lTWVudS5jb250ZXh0SG9tZS5zdWJ0aXRsZUNvbGxhYm9yYXRvcidcbiAgfSwgW2lzSGVhZGVySG91cnNBZ2VudEhvbWUsIGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSwgdXNlci5yb2xlX2lkXSlcbiAgY29uc3QgaXNDb250ZXh0SG9tZVN0ZXAgPSBpc0hlYWRlckhvbWUgJiYgaGFzUGlubmVkQ29udGV4dFxuICAvLyBIZWFkZXIgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvKSB5IGhvbWVzIGRlIHNlY2Npw7NuIGNvbXBhcnRlbiBsYXlvdXQ6IHNpbiBpc29sb2dvLCB0ZXh0byBhIGxhIGl6cXVpZXJkYS5cbiAgY29uc3QgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUgPSBpc1NlY3Rpb25PcmNoZXN0cmF0b3JIb21lIHx8IGlzQ29udGV4dEhvbWVTdGVwXG5cbiAgY29uc3QgYWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUpIHJldHVybiBnZXRBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzKHVzZXIucm9sZV9pZClcbiAgICBpZiAoaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgJiYgaXNNYW5hZ2VyUm9sZSh1c2VyLnJvbGVfaWQpKSByZXR1cm4gZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyh1c2VyLnJvbGVfaWQpXG4gICAgaWYgKGlzSGVhZGVyVGFza0NvbnRleHRIb21lKSByZXR1cm4gbmV3IFNldDxSZWNlbnRDb250ZXh0VHlwZT4oWyd0YXNrJ10pXG4gICAgcmV0dXJuIGdldEFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXModXNlci5yb2xlX2lkKVxuICB9LCBbdXNlci5yb2xlX2lkLCBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUsIGlzSGVhZGVyVGFza0NvbnRleHRIb21lXSlcblxuICAvLyBDb250ZXh0byBhY3Rpdm8gcGFyYSBkZXJpdmFyIEZBUXMvYWNjaW9uZXMgKHBhc28gMikuIFByZWZlcmltb3MgZWwgcGlsbCBjbGlja2VhZG87XG4gIC8vIHNpIG5vLCBsbyByZWNvbnN0cnVpbW9zIGRlc2RlIGVsIGNvbnRleHRvIGdsb2JhbC5cbiAgY29uc3QgW3NlbGVjdGVkQ29udGV4dCwgc2V0U2VsZWN0ZWRDb250ZXh0XSA9IHVzZVN0YXRlPFJlY2VudENvbnRleHRJdGVtIHwgbnVsbD4obnVsbClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWhhc1Bpbm5lZENvbnRleHQpIHNldFNlbGVjdGVkQ29udGV4dChudWxsKVxuICB9LCBbaGFzUGlubmVkQ29udGV4dF0pXG5cbiAgY29uc3QgYWN0aXZlQ29udGV4dCA9IHVzZU1lbW88UmVjZW50Q29udGV4dEl0ZW0gfCBudWxsPigoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkQ29udGV4dCkgcmV0dXJuIHNlbGVjdGVkQ29udGV4dFxuICAgIGlmICghaXNDb250ZXh0SG9tZVN0ZXApIHJldHVybiBudWxsXG4gICAgaWYgKHRhc2s/LmlkKSByZXR1cm4geyB0eXBlOiAndGFzaycsIGlkOiB0YXNrLmlkLCBuYW1lOiB0YXNrLm5hbWUgfVxuICAgIGlmIChjaGlwc1Byb2plY3Q/LnByb2plY3RJZCkgcmV0dXJuIHsgdHlwZTogJ3Byb2plY3QnLCBpZDogY2hpcHNQcm9qZWN0LnByb2plY3RJZCwgbmFtZTogY2hpcHNQcm9qZWN0LnByb2plY3ROYW1lIH1cbiAgICBpZiAoY2xpZW50Py5pZCkgcmV0dXJuIHsgdHlwZTogJ2NsaWVudCcsIGlkOiBjbGllbnQuaWQsIG5hbWU6IGNsaWVudC5uYW1lIH1cbiAgICByZXR1cm4gbnVsbFxuICB9LCBbXG4gICAgc2VsZWN0ZWRDb250ZXh0LFxuICAgIGlzQ29udGV4dEhvbWVTdGVwLFxuICAgIHRhc2s/LmlkLFxuICAgIHRhc2s/Lm5hbWUsXG4gICAgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQsXG4gICAgY2hpcHNQcm9qZWN0Py5wcm9qZWN0TmFtZSxcbiAgICBjbGllbnQ/LmlkLFxuICAgIGNsaWVudD8ubmFtZSxcbiAgXSlcblxuICAvLyBlbnRpdHlfdHlwZSBkZWwgY29udGV4dG8gcGluZWFkbyAocHJvamVjdC9jbGllbnQvdGFzayksIHRvbWFkbyBkZWwgY29udGV4dG8gZ2xvYmFsLlxuICAvLyBBcGxpY2EgdGFudG8gYWwgYWJyaXIgTUFJQSBkZXNkZSB1bmEgc2VjY2nDs24gZXNwZWPDrWZpY2EgY29tbyBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs24uXG4gIGNvbnN0IHBpbm5lZEVudGl0eVR5cGUgPSB1c2VNZW1vPFJlY2VudENvbnRleHRUeXBlIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgaWYgKHRhc2s/LmlkKSByZXR1cm4gJ3Rhc2snXG4gICAgaWYgKGNoaXBzUHJvamVjdD8ucHJvamVjdElkIHx8IHByb2plY3Q/LmlkKSByZXR1cm4gJ3Byb2plY3QnXG4gICAgaWYgKGNsaWVudD8uaWQpIHJldHVybiAnY2xpZW50J1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfSwgW3Rhc2s/LmlkLCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCwgcHJvamVjdD8uaWQsIGNsaWVudD8uaWRdKVxuXG4gIC8vIEZBUXMgc29sbyBjb24gY29udGV4dG8gY2xpZW50ZSBwaW5lYWRvIChoZWFkZXIgcGFzbyAyIG8gc2VjY2nDs24gY2xpZW50KS5cbiAgLy8gUHJveWVjdG8sIHRhcmVhIHkgcGxhbm5lciBtdWVzdHJhbiBzb2xvIEZVQXMuXG4gIGNvbnN0IGZhcXNDb250ZXh0RW50aXR5VHlwZSA9IHVzZU1lbW88UmVjZW50Q29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICBpZiAoaXNQbGFubmVySG9tZSB8fCBpc1JlY2VudENvbnRleHRzU3RlcCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChpc0hlYWRlckhvbWUpIHtcbiAgICAgIHJldHVybiBpc0NvbnRleHRIb21lU3RlcCA/IChhY3RpdmVDb250ZXh0Py50eXBlID8/IHBpbm5lZEVudGl0eVR5cGUpIDogdW5kZWZpbmVkXG4gICAgfVxuICAgIHJldHVybiBwaW5uZWRFbnRpdHlUeXBlXG4gIH0sIFtpc1BsYW5uZXJIb21lLCBpc1JlY2VudENvbnRleHRzU3RlcCwgaXNIZWFkZXJIb21lLCBpc0NvbnRleHRIb21lU3RlcCwgYWN0aXZlQ29udGV4dD8udHlwZSwgcGlubmVkRW50aXR5VHlwZV0pXG4gIGNvbnN0IGlzQ2xpZW50Q29udGV4dEZvckZhcXMgPSBmYXFzQ29udGV4dEVudGl0eVR5cGUgPT09ICdjbGllbnQnXG4gIC8vIGBzZWN0aW9uYCBxdWUgc2UgY29uc3VsdGEgcGFyYSBsYXMgRlVBczogZW4gbm8taGVhZGVyIHNpZ3VlIGVsIHRpcG8gZGUgY29udGV4dG8gcGluZWFkby5cbiAgLy8gRW4gcGxhbm5lciBzZSBmdWVyemEgbGEgc2VjdGlvbiBBUEkgYHBsYW5uZXJgLlxuICBjb25zdCBmdWFzU2VjdGlvbjogU2VjdGlvbiA9ICgoKSA9PiB7XG4gICAgaWYgKGlzUGxhbm5lckhvbWUpIHJldHVybiAncGxhbm5lcidcbiAgICBpZiAoIWlzSGVhZGVySG9tZSAmJiBwaW5uZWRFbnRpdHlUeXBlKSByZXR1cm4gcGlubmVkRW50aXR5VHlwZVxuICAgIHJldHVybiBzZWN0aW9uXG4gIH0pKClcblxuICAvLyBGQVFzL2FjY2lvbmVzOlxuICAvLyAgLSBoZWFkZXItaG9tZSAob3JjaGVzdHJhdG9yKSwgcGFzbyAyOiBmaWx0cmFkYXMgcG9yIGBlbnRpdHlfdHlwZWAgZGVsIGNvbnRleHRvIHNlbGVjY2lvbmFkby5cbiAgLy8gIC0gaG9tZXMgZGUgcHJveWVjdG8vY2xpZW50ZS90YXJlYSAoc2VjY2nDs24pOiBmaWx0cmFkYXMgcG9yIGVsIGBlbnRpdHlfdHlwZWAgZGVsIGNvbnRleHRvIHNldGVhZG8uXG4gIC8vICAtIHBsYW5uZXI6IEZVQXMgY29uIHNlY3Rpb249cGxhbm5lciwgc2luIGVudGl0eV90eXBlIG5pIEZBUXMuXG4gIGNvbnN0IHJlYWxMaXN0c0FnZW50SWQgPSAoKCkgPT4ge1xuICAgIGlmICghaXNNQUlBIHx8IGlzTWFpYWtlcikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIC8vIFBhc28gMSAoY29udGV4dG9zIHJlY2llbnRlcywgc2luIGNvbnRleHRvKTogbm8gc2UgcGlkZW4gRkFRcy9GVUFzLlxuICAgIGlmIChpc1JlY2VudENvbnRleHRzU3RlcCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChpc0hlYWRlckhvbWUpIHJldHVybiBpc0NvbnRleHRIb21lU3RlcCA/IGFnZW50Py5pZCA6IHVuZGVmaW5lZFxuICAgIHJldHVybiBhZ2VudD8uaWRcbiAgfSkoKVxuICBjb25zdCByZWFsTGlzdHNFbnRpdHlUeXBlID0gKCgpID0+IHtcbiAgICBpZiAoaXNQbGFubmVySG9tZSkgcmV0dXJuICdwbGFubmVyJ1xuICAgIGlmICghaXNIZWFkZXJIb21lKSByZXR1cm4gcGlubmVkRW50aXR5VHlwZVxuICAgIHJldHVybiBpc0NvbnRleHRIb21lU3RlcCA/IChhY3RpdmVDb250ZXh0Py50eXBlID8/IHBpbm5lZEVudGl0eVR5cGUpIDogdW5kZWZpbmVkXG4gIH0pKClcbiAgY29uc3QgeyBhY3Rpb25zOiBhZ2VudEZ1YXMsIGxvYWRpbmc6IGZ1YXNMb2FkaW5nIH0gPSB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMoXG4gICAgcmVhbExpc3RzQWdlbnRJZCxcbiAgICBmdWFzU2VjdGlvbixcbiAgICByZWFsTGlzdHNFbnRpdHlUeXBlXG4gIClcbiAgY29uc3QgeyBhY3Rpb25zOiBjb2xsYWJvcmF0b3JQbGFubmVyRnVhcywgbG9hZGluZzogY29sbGFib3JhdG9yUGxhbm5lckZ1YXNMb2FkaW5nIH0gPSB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMoXG4gICAgaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSAmJiAhaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lID8gYWdlbnQ/LmlkIDogdW5kZWZpbmVkLFxuICAgICdwbGFubmVyJ1xuICApXG4gIGNvbnN0IHsgYWN0aW9uczogbWFuYWdlckhvbWVGdWFzLCBsb2FkaW5nOiBtYW5hZ2VySG9tZUZ1YXNMb2FkaW5nIH0gPSB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMoXG4gICAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lID8gYWdlbnQ/LmlkIDogdW5kZWZpbmVkLFxuICAgICdob21lX3dpdGhfaG91cnMnXG4gIClcbiAgY29uc3QgaGVhZGVySG91cnNGdWFzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSkgcmV0dXJuIHNvcnRNYW5hZ2VySG91cnNIb21lRnVhcyhtYW5hZ2VySG9tZUZ1YXMpXG4gICAgcmV0dXJuIGNvbGxhYm9yYXRvclBsYW5uZXJGdWFzXG4gIH0sIFtpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUsIG1hbmFnZXJIb21lRnVhcywgY29sbGFib3JhdG9yUGxhbm5lckZ1YXNdKVxuICBjb25zdCBoZWFkZXJIb3Vyc0Z1YXNMb2FkaW5nID0gaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lID8gbWFuYWdlckhvbWVGdWFzTG9hZGluZyA6IGNvbGxhYm9yYXRvclBsYW5uZXJGdWFzTG9hZGluZ1xuICBjb25zdCByZWNlbnRDb250ZXh0c0xpbWl0ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZVJlY2VudENvbnRleHRzSG9tZUxpbWl0KHtcbiAgICAgICAgaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSxcbiAgICAgICAgZnVhc0xvYWRpbmc6IGhlYWRlckhvdXJzRnVhc0xvYWRpbmcsXG4gICAgICAgIGZ1YXNDb3VudDogaGVhZGVySG91cnNGdWFzLmxlbmd0aCxcbiAgICAgIH0pLFxuICAgIFtpc0hlYWRlckhvdXJzQWdlbnRIb21lLCBoZWFkZXJIb3Vyc0Z1YXNMb2FkaW5nLCBoZWFkZXJIb3Vyc0Z1YXMubGVuZ3RoXVxuICApXG4gIGNvbnN0IHsgY29udGV4dHM6IGZldGNoZWRSZWNlbnRDb250ZXh0cywgbG9hZGluZzogcmVjZW50Q29udGV4dHNMb2FkaW5nIH0gPSB1c2VSZWNlbnRDb250ZXh0cyh7XG4gICAgZW5hYmxlZDogaXNPcmNoZXN0cmF0b3IgJiYgIWlzUGxhbm5lckhvbWUsXG4gICAgbGltaXQ6IHJlY2VudENvbnRleHRzTGltaXQsXG4gIH0pXG4gIGNvbnN0IHJlY2VudENvbnRleHRzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBmZXRjaGVkUmVjZW50Q29udGV4dHMuZmlsdGVyKGNvbnRleHQgPT4gYWxsb3dlZFJlY2VudENvbnRleHRUeXBlcy5oYXMoY29udGV4dC50eXBlKSksXG4gICAgW2ZldGNoZWRSZWNlbnRDb250ZXh0cywgYWxsb3dlZFJlY2VudENvbnRleHRUeXBlc11cbiAgKVxuICBjb25zdCByZWNlbnRDb250ZXh0U2tlbGV0b25LZXlzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBBcnJheS5mcm9tKHsgbGVuZ3RoOiByZWNlbnRDb250ZXh0c0xpbWl0IH0sIChfLCBpbmRleCkgPT4gYHJlY2VudC1jb250ZXh0LXNrZWxldG9uLSR7aW5kZXggKyAxfWApLFxuICAgIFtyZWNlbnRDb250ZXh0c0xpbWl0XVxuICApXG4gIGNvbnN0IGZhcXNMaXN0QWdlbnRJZCA9IGlzQ2xpZW50Q29udGV4dEZvckZhcXMgPyByZWFsTGlzdHNBZ2VudElkIDogdW5kZWZpbmVkXG4gIGNvbnN0IGZhcXNMaXN0RW50aXR5VHlwZSA9IGlzQ2xpZW50Q29udGV4dEZvckZhcXMgPyByZWFsTGlzdHNFbnRpdHlUeXBlIDogdW5kZWZpbmVkXG4gIGNvbnN0IHtcbiAgICBmYXFzOiBhZ2VudEZhcXMsXG4gICAgbG9hZGluZzogZmFxc0xvYWRpbmcsXG4gICAgaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zLFxuICB9ID0gdXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zKGZhcXNMaXN0QWdlbnRJZCwgbGFuZywgZmFxc0xpc3RFbnRpdHlUeXBlKVxuICBjb25zdCBmYXFzRmV0Y2hSZWYgPSB1c2VSZWY8eyBhZ2VudElkOiBzdHJpbmc7IGxhbmc6IHN0cmluZzsgZW50aXR5VHlwZT86IHN0cmluZyB9IHwgbnVsbD4obnVsbClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBGQVFzIHNvbG8gcGFyYSBjb250ZXh0byBjbGllbnRlOyBlbCByZXN0byBtdWVzdHJhIHNvbG8gRlVBcy5cbiAgICBpZiAoIXJlYWxMaXN0c0FnZW50SWQgfHwgIWlzQ2xpZW50Q29udGV4dEZvckZhcXMpIHJldHVyblxuICAgIGNvbnN0IGN1cnJlbnRLZXkgPSBgJHtyZWFsTGlzdHNBZ2VudElkfS0ke2xhbmd9LSR7cmVhbExpc3RzRW50aXR5VHlwZSA/PyAnYWxsJ31gXG4gICAgY29uc3QgbGFzdEtleSA9IGZhcXNGZXRjaFJlZi5jdXJyZW50XG4gICAgICA/IGAke2ZhcXNGZXRjaFJlZi5jdXJyZW50LmFnZW50SWR9LSR7ZmFxc0ZldGNoUmVmLmN1cnJlbnQubGFuZ30tJHtmYXFzRmV0Y2hSZWYuY3VycmVudC5lbnRpdHlUeXBlID8/ICdhbGwnfWBcbiAgICAgIDogbnVsbFxuICAgIGlmIChjdXJyZW50S2V5ICE9PSBsYXN0S2V5KSB7XG4gICAgICBmYXFzRmV0Y2hSZWYuY3VycmVudCA9IHsgYWdlbnRJZDogcmVhbExpc3RzQWdlbnRJZCwgbGFuZywgZW50aXR5VHlwZTogcmVhbExpc3RzRW50aXR5VHlwZSB9XG4gICAgICBoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMoeyBhZ2VudElkOiByZWFsTGlzdHNBZ2VudElkLCBsYW5nLCBlbnRpdHlUeXBlOiByZWFsTGlzdHNFbnRpdHlUeXBlIH0pXG4gICAgfVxuICB9LCBbcmVhbExpc3RzQWdlbnRJZCwgcmVhbExpc3RzRW50aXR5VHlwZSwgaXNDbGllbnRDb250ZXh0Rm9yRmFxcywgbGFuZywgaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXSlcblxuICBjb25zdCBmYXFzID0gYWdlbnRGYXFzXG4gIGNvbnN0IGZ1YXMgPSBhZ2VudEZ1YXNcbiAgY29uc3QgZmFxc0FyZUxvYWRpbmcgPSBmYXFzTG9hZGluZ1xuICBjb25zdCBmdWFzQXJlTG9hZGluZyA9IGZ1YXNMb2FkaW5nXG5cbiAgY29uc3Qgc2hvd1JlY2VudENvbnRleHRzQmxvY2sgPSBpc1JlY2VudENvbnRleHRzU3RlcCAmJiAocmVjZW50Q29udGV4dHNMb2FkaW5nIHx8IHJlY2VudENvbnRleHRzLmxlbmd0aCA+IDApXG4gIGNvbnN0IHNob3VsZFNob3dGYXFzID1cbiAgICBpc01BSUEgJiZcbiAgICBpc0NsaWVudENvbnRleHRGb3JGYXFzICYmXG4gICAgIWlzUmVjZW50Q29udGV4dHNTdGVwICYmXG4gICAgKGlzQ29udGV4dEhvbWVTdGVwIHx8ICghaXNIZWFkZXJIb21lICYmIGZhcXNBY2Nlc3MpKSAmJlxuICAgICFpc01haWFrZXIgJiZcbiAgICAoZmFxcy5sZW5ndGggPiAwIHx8IGZhcXNBcmVMb2FkaW5nKVxuICBjb25zdCBzaG91bGRTaG93RnVhcyA9XG4gICAgIWlzUmVjZW50Q29udGV4dHNTdGVwICYmICFpc01haWFrZXIgJiYgKGlzQ29udGV4dEhvbWVTdGVwIHx8ICFpc0hlYWRlckhvbWUpICYmIChmdWFzLmxlbmd0aCA+IDAgfHwgZnVhc0FyZUxvYWRpbmcpXG4gIGNvbnN0IHNob3VsZFNob3dQbGFubmVyRnVhc0xvYWRpbmcgPSBpc0hlYWRlckhvdXJzQWdlbnRIb21lICYmIGhlYWRlckhvdXJzRnVhc0xvYWRpbmcgJiYgaGVhZGVySG91cnNGdWFzLmxlbmd0aCA9PT0gMFxuICBjb25zdCBzaG91bGRTaG93UGxhbm5lckZ1YXNDb250ZW50ID0gaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSAmJiBoZWFkZXJIb3Vyc0Z1YXMubGVuZ3RoID4gMFxuICBjb25zdCBzaG91bGRTaG93UGxhbm5lckZ1YXMgPSBzaG91bGRTaG93UGxhbm5lckZ1YXNMb2FkaW5nIHx8IHNob3VsZFNob3dQbGFubmVyRnVhc0NvbnRlbnRcblxuICBjb25zdCBzaG93UHJvamVjdFN1bW1hcnlDYXJkID0gc2hvd1Byb2plY3RTdW1tYXJ5ICYmIGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0J1xuICBjb25zdCBzaG93RkFRcyA9ICEhKFxuICAgIHNob3dSZWNlbnRDb250ZXh0c0Jsb2NrIHx8XG4gICAgc2hvdWxkU2hvd0ZhcXMgfHxcbiAgICBzaG91bGRTaG93RnVhcyB8fFxuICAgIHNob3VsZFNob3dQbGFubmVyRnVhcyB8fFxuICAgIHNob3dQcm9qZWN0U3VtbWFyeUNhcmQgfHxcbiAgICBpc01haWFrZXJcbiAgKVxuICBjb25zdCBob21lU2Nyb2xsYWJsZUxheW91dCA9IHNob3dGQVFzXG4gIGNvbnN0IHNob3dEeW5hbWljU2VjdGlvbiA9XG4gICAgc2hvd1JlY2VudENvbnRleHRzQmxvY2sgfHwgc2hvdWxkU2hvd0ZhcXMgfHwgc2hvdWxkU2hvd0Z1YXMgfHwgc2hvdWxkU2hvd1BsYW5uZXJGdWFzIHx8IGlzTWFpYWtlclxuXG4gIC8vIEzDs2dpY2EgZGVsIHNjcm9sbCBjb24gZ3JhZGllbnRlc1xuICBjb25zdCBjb250ZW50Q29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzU2Nyb2xsaW5nLCBzZXRJc1Njcm9sbGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGltZW91dFJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpXG5cbiAgLy8gU2FsdWRvIGZpam8gcG9yIHRpcG8gZGUgY29udGV4dG8gKGkxOG4pLiBDdXN0b20gYWdlbnRzIHNpZ3VlbiB1c2FuZG8gYWdlbnQuaW50cm9kdWN0aW9uLlxuICAvLyBQbGFubmVyIHVzYSB0w610dWxvICsgYmFqYWRhIHByb3Bpb3MgKGBwbGFubmVySG9tZWApLCBubyBlc3RlIGdyZWV0aW5nLlxuICBjb25zdCBncmVldGluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc01haWFrZXIgfHwgaXNQbGFubmVySG9tZSB8fCBpc1JlY2VudENvbnRleHRzU3RlcCkgcmV0dXJuICcnXG5cbiAgICBpZiAoaXNNQUlBICYmIHBpbm5lZEVudGl0eVR5cGUpIHtcbiAgICAgIHJldHVybiB0KGBob21lTWVudS5jb250ZXh0SG9tZS5jb250ZXh0R3JlZXRpbmcuJHtwaW5uZWRFbnRpdHlUeXBlfWApXG4gICAgfVxuXG4gICAgY29uc3QgaW50cm8gPSBhZ2VudD8uaW50cm9kdWN0aW9uXG4gICAgaWYgKCFpbnRybykgcmV0dXJuICcnXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW50cm8pICYmIGludHJvLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBpbnRyb1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBpbnRyby5sZW5ndGgpXVxuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGludHJvID09PSAnc3RyaW5nJyA/IGludHJvIDogJydcbiAgfSwgW2FnZW50Py5pZCwgYWdlbnQ/LmludHJvZHVjdGlvbiwgaXNNYWlha2VyLCBpc1BsYW5uZXJIb21lLCBpc01BSUEsIHBpbm5lZEVudGl0eVR5cGUsIGlzUmVjZW50Q29udGV4dHNTdGVwLCB0XSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRleHQ6IFJlY2VudENvbnRleHRJdGVtLCBvcmRlcjogbnVtYmVyKSA9PiB7XG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0Q29udGV4dFNlbGVjdGVkLCB7IG9yZGVyLCB0eXBlOiBjb250ZXh0LnR5cGUgfSlcblxuICAgICAgY29uc3QgY29udGV4dElkID0gcGFyc2VOdW1lcmljSWQoY29udGV4dC5pZClcbiAgICAgIGNvbnN0IGNsaWVudElkID0gcGFyc2VOdW1lcmljSWQoY29udGV4dC5wYXJlbnRzPy5jbGllbnRfaWQpXG4gICAgICBjb25zdCBwcm9qZWN0SWQgPSBwYXJzZU51bWVyaWNJZChjb250ZXh0LnBhcmVudHM/LnByb2plY3RfaWQpXG4gICAgICBjb25zdCBjbGllbnROYW1lID0gY29udGV4dC5wYXJlbnRzPy5jbGllbnRfbmFtZSB8fCAnJ1xuICAgICAgY29uc3QgcHJvamVjdE5hbWUgPSBjb250ZXh0LnBhcmVudHM/LnByb2plY3RfbmFtZSB8fCAnJ1xuXG4gICAgICBzZXRTZWxlY3RlZENvbnRleHQoY29udGV4dClcbiAgICAgIHNldFRhc2sobnVsbClcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgICAgaWYgKGNvbnRleHQudHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgc2V0Q2xpZW50Py4oeyBpZDogY29udGV4dElkLCBuYW1lOiBjb250ZXh0Lm5hbWUgfSlcbiAgICAgIH0gZWxzZSBpZiAoY29udGV4dC50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgICAgaWQ6IGNvbnRleHRJZCxcbiAgICAgICAgICBuYW1lOiBjb250ZXh0Lm5hbWUsXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudDogeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgfSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGNvbnRleHRJZCksXG4gICAgICAgICAgcHJvamVjdE5hbWU6IGNvbnRleHQubmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT09ICd0YXNrJykge1xuICAgICAgICBzZXRUYXNrKHtcbiAgICAgICAgICBpZDogY29udGV4dC5pZCxcbiAgICAgICAgICBuYW1lOiBjb250ZXh0Lm5hbWUsXG4gICAgICAgICAgLi4uKHByb2plY3RJZCAhPSBudWxsID8geyBwcm9qZWN0SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGNsaWVudElkICE9IG51bGwpIHtcbiAgICAgICAgICBzZXRDbGllbnQ/Lih7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSB9KVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICAgIHNldFByb2plY3Qoe1xuICAgICAgICAgICAgaWQ6IHByb2plY3RJZCxcbiAgICAgICAgICAgIG5hbWU6IHByb2plY3ROYW1lIHx8IGAke3QoJ2hvbWVNZW51LnJlY2VudENvbnRleHRzLnR5cGVzLnByb2plY3QnKX0gJHtwcm9qZWN0SWR9YCxcbiAgICAgICAgICAgIC4uLihjbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZCB9IDoge30pLFxuICAgICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudDogeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgfSB9IDoge30pLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZCksXG4gICAgICAgICAgICBwcm9qZWN0TmFtZTogcHJvamVjdE5hbWUgfHwgYCR7dCgnaG9tZU1lbnUucmVjZW50Q29udGV4dHMudHlwZXMucHJvamVjdCcpfSAke3Byb2plY3RJZH1gLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdtYWlhLWlucHV0LXJlZm9jdXMnKSlcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZXZlbnQsIHNldENoaXBzUHJvamVjdCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlSG9tZVN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBudWxsLFxuICAgICAgZnVhSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgJiYgZnVhSWQpIHtcbiAgICAgICAgZmx1c2hTeW5jKCgpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RlZENvbnRleHQobnVsbClcbiAgICAgICAgICBzZXRUYXNrKG51bGwpXG4gICAgICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBvblN0YXJ0Q2hhdChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQpXG4gICAgfSxcbiAgICBbaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lLCBvblN0YXJ0Q2hhdCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdXG4gIClcblxuICBjb25zdCByZW5kZXJSZWNlbnRDb250ZXh0cyA9ICgpID0+IHtcbiAgICBpZiAoIWlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1xuICAgICAgICAkZml4ZWRDb250ZW50V2lkdGg9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lID8gTUFJQV9IRUFERVJfQ09MTEFCT1JBVE9SX0hPTUVfQ09OVEVOVF9XSURUSF9QWCA6IHVuZGVmaW5lZH1cbiAgICAgID5cbiAgICAgICAge2lzSGVhZGVySG91cnNBZ2VudEhvbWUgPyAoXG4gICAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlcj5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25UaXRsZT5cbiAgICAgICAgICAgICAge3QoXG4gICAgICAgICAgICAgICAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lXG4gICAgICAgICAgICAgICAgICA/ICdob21lTWVudS5jb250ZXh0SG9tZS5yZWNlbnRDb250ZXh0c1NlY3Rpb25NYW5hZ2VyLnRpdGxlJ1xuICAgICAgICAgICAgICAgICAgOiAnaG9tZU1lbnUuY29udGV4dEhvbWUucmVjZW50VGFza3NTZWN0aW9uLnRpdGxlJ1xuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25UaXRsZT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25TdWJ0aXRsZT5cbiAgICAgICAgICAgICAge3QoXG4gICAgICAgICAgICAgICAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lXG4gICAgICAgICAgICAgICAgICA/ICdob21lTWVudS5jb250ZXh0SG9tZS5yZWNlbnRDb250ZXh0c1NlY3Rpb25NYW5hZ2VyLnN1YnRpdGxlJ1xuICAgICAgICAgICAgICAgICAgOiAnaG9tZU1lbnUuY29udGV4dEhvbWUucmVjZW50VGFza3NTZWN0aW9uLnN1YnRpdGxlJ1xuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25TdWJ0aXRsZT5cbiAgICAgICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlcj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3QgJGZsdXNoUGlsbHM9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lfT5cbiAgICAgICAgICB7cmVjZW50Q29udGV4dHNMb2FkaW5nICYmXG4gICAgICAgICAgICByZWNlbnRDb250ZXh0U2tlbGV0b25LZXlzLm1hcChrZXkgPT4gPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24ga2V5PXtrZXl9IC8+KX1cbiAgICAgICAgICB7IXJlY2VudENvbnRleHRzTG9hZGluZyAmJlxuICAgICAgICAgICAgcmVjZW50Q29udGV4dHMubWFwKChjb250ZXh0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8UmVjZW50Q29udGV4dFBpbGxcbiAgICAgICAgICAgICAgICBrZXk9e2Ake2NvbnRleHQudHlwZX0tJHtjb250ZXh0LmlkfWB9XG4gICAgICAgICAgICAgICAgY29udGV4dD17Y29udGV4dH1cbiAgICAgICAgICAgICAgICBsYWJlbD17Y29udGV4dC5uYW1lLnRyaW0oKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0KGNvbnRleHQsIGluZGV4ICsgMSl9XG4gICAgICAgICAgICAgICAgZnVsbFdpZHRoPXtpc0hlYWRlclRhc2tDb250ZXh0SG9tZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdD5cbiAgICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dHM+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgY2hlY2tTY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGVudENvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWhvbWVTY3JvbGxhYmxlTGF5b3V0KSByZXR1cm5cblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG4gICAgY29uc3QgaXNTY3JvbGxhYmxlID0gc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0XG4gICAgY29uc3QgaXNBdFRvcCA9IHNjcm9sbFRvcCA9PT0gMFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBzY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0IC0gMVxuXG4gICAgc2V0U2hvd1RvcEdyYWRpZW50KGlzU2Nyb2xsYWJsZSAmJiAhaXNBdFRvcClcbiAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQoaXNTY3JvbGxhYmxlICYmICFpc0F0Qm90dG9tKVxuICB9LCBbaG9tZVNjcm9sbGFibGVMYXlvdXRdKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjaGVja1Njcm9sbCgpXG4gICAgc2V0SXNTY3JvbGxpbmcodHJ1ZSlcblxuICAgIGlmIChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpXG4gICAgfVxuXG4gICAgc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJc1Njcm9sbGluZyhmYWxzZSlcbiAgICB9LCAxNTApXG4gIH0sIFtjaGVja1Njcm9sbF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWhvbWVTY3JvbGxhYmxlTGF5b3V0KSB7XG4gICAgICBzZXRTaG93VG9wR3JhZGllbnQoZmFsc2UpXG4gICAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQoZmFsc2UpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGVudENvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlZHVsZUNoZWNrU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgY2hlY2tTY3JvbGwoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBzY2hlZHVsZUNoZWNrU2Nyb2xsKClcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuXG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoc2NoZWR1bGVDaGVja1Njcm9sbClcbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcilcbiAgICBjb25zdCBzY3JvbGxDb250ZW50ID0gY29udGFpbmVyLmZpcnN0RWxlbWVudENoaWxkXG4gICAgaWYgKHNjcm9sbENvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHNjcm9sbENvbnRlbnQpXG4gICAgfVxuXG4gICAgY29uc3QgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoc2NoZWR1bGVDaGVja1Njcm9sbCwgMTAwKVxuICAgIGNvbnN0IGxhdGVUaW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dChzY2hlZHVsZUNoZWNrU2Nyb2xsLCA0MDApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgIGNsZWFyVGltZW91dChsYXRlVGltZW91dElkKVxuICAgICAgaWYgKHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2hvbWVTY3JvbGxhYmxlTGF5b3V0LCBjaGVja1Njcm9sbCwgaGFuZGxlU2Nyb2xsXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaG9tZVNjcm9sbGFibGVMYXlvdXQpIHJldHVyblxuICAgIGNoZWNrU2Nyb2xsKClcbiAgfSwgW1xuICAgIGhvbWVTY3JvbGxhYmxlTGF5b3V0LFxuICAgIGNoZWNrU2Nyb2xsLFxuICAgIHJlY2VudENvbnRleHRzTG9hZGluZyxcbiAgICByZWNlbnRDb250ZXh0cy5sZW5ndGgsXG4gICAgaGVhZGVySG91cnNGdWFzTG9hZGluZyxcbiAgICBoZWFkZXJIb3Vyc0Z1YXMubGVuZ3RoLFxuICAgIGZ1YXNMb2FkaW5nLFxuICAgIGZ1YXMubGVuZ3RoLFxuICAgIGZhcXNBcmVMb2FkaW5nLFxuICAgIGZhcXMubGVuZ3RoLFxuICAgIHNob3VsZFNob3dQbGFubmVyRnVhcyxcbiAgICBpc01haWFrZXIsXG4gIF0pXG5cbiAgY29uc3QgcmVuZGVySGVhZGVyQ29udGVudCA9ICgpID0+IHtcbiAgICBpZiAoIWlzTUFJQSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lcj5cbiAgICAgICAgICA8U0NDQUlIb21lQWdlbnRJbmZvPlxuICAgICAgICAgICAge2FnZW50Py5lbW9qaX0ge2FnZW50Py5uYW1lfVxuICAgICAgICAgIDwvU0NDQUlIb21lQWdlbnRJbmZvPlxuICAgICAgICAgIHthZ2VudD8uY3JlYXRlZF9ieSAmJiAhaXNNQUlBICYmIChcbiAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlDb250YWluZXI+XG4gICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgYWdlbnQ/LmNyZWF0ZWRfYnk/LmlzX2RlbGV0ZWQgPyB0KCdob21lTWVudS5jcmVhdGVkQnlUb29sdGlwRGVsZXRlZCcpIDogdCgnaG9tZU1lbnUuY3JlYXRlZEJ5VG9vbHRpcCcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQ+XG4gICAgICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUuY3JlYXRlZEJ5Jyl9eycgJ31cbiAgICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZT57YWdlbnQ/LmNyZWF0ZWRfYnk/Lm5hbWV9PC9TQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZT5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJSG9tZUNyZWF0ZWRCeVRleHQ+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgIDwvU0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlIb21lQWdlbnRJbmZvQ29udGFpbmVyPlxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnRBbGlnblN0YXJ0ID0gaXNQbGFubmVySG9tZSB8fCBpc0hlYWRlclRhc2tDb250ZXh0SG9tZSB8fCBpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZVxuXG4gICAgY29uc3QgbWFpYUhlYWRlclN0YWNrTmVlZHNHYXAgPVxuICAgICAgKGlzUmVjZW50Q29udGV4dHNTdGVwICYmICFpc0hlYWRlclRhc2tDb250ZXh0SG9tZSAmJiAhaXNQbGFubmVySG9tZSkgfHxcbiAgICAgICghaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiZcbiAgICAgICAgISFncmVldGluZyAmJlxuICAgICAgICAhaXNQbGFubmVySG9tZSAmJlxuICAgICAgICAhaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgJiZcbiAgICAgICAgIWlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2sgJG5vR2FwPXshbWFpYUhlYWRlclN0YWNrTmVlZHNHYXB9ICRhbGlnbj17Y29udGVudEFsaWduU3RhcnQgPyAnc3RhcnQnIDogJ2NlbnRlcid9PlxuICAgICAgICB7IWlzUGxhbm5lckhvbWUgJiYgIWlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmICFpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSAmJiAoXG4gICAgICAgICAgPFNDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICAgICA8U0NDQUlIb21lTG9nb1dyYXBwZXI+XG4gICAgICAgICAgICAgIDxNQUlBSXNvbG9nbyAvPlxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVMb2dvV3JhcHBlcj5cbiAgICAgICAgICA8L1NDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICl9XG4gICAgICAgIHtpc1BsYW5uZXJIb21lICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lVGl0bGVCbG9jayAkYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlICRzaXplPVwibWRcIiAkYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUucGxhbm5lckhvbWUudGl0bGUnKX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGU+XG4gICAgICAgICAgICA8U0NDQUlIb21lU3VidGl0bGUgJGFsaWduPVwic3RhcnRcIj57dCgnaG9tZU1lbnUucGxhbm5lckhvbWUuc3VidGl0bGUnKX08L1NDQ0FJSG9tZVN1YnRpdGxlPlxuICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGVCbG9jaz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFpc1BsYW5uZXJIb21lICYmIGlzUmVjZW50Q29udGV4dHNTdGVwICYmIGlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lVGl0bGVCbG9jayAkYWxpZ249XCJzdGFydFwiICRmdWxsV2lkdGg+XG4gICAgICAgICAgICA8U0NDQUlIb21lVGl0bGUgJHNpemU9XCJjb250ZXh0XCIgJGFsaWduPVwic3RhcnRcIiAkZnVsbFdpZHRoPlxuICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUuY29udGV4dEhvbWUuZ3JlZXRpbmcnLCB7IG5hbWU6IHVzZXIuZmlyc3ROYW1lIH0pfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVUaXRsZT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVTdWJ0aXRsZSAkYWxpZ249XCJzdGFydFwiICRjb2xsYWJvcmF0b3JIb21lPlxuICAgICAgICAgICAgICB7dChoZWFkZXJUYXNrQ29udGV4dFN1YnRpdGxlS2V5KX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lU3VidGl0bGU+XG4gICAgICAgICAgPC9TQ0NBSUhvbWVUaXRsZUJsb2NrPlxuICAgICAgICApfVxuICAgICAgICB7IWlzUGxhbm5lckhvbWUgJiYgaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgIWlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlICRhbGlnbj17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUgPyAnc3RhcnQnIDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LmNvbnRleHRIb21lLmdyZWV0aW5nJywgeyBuYW1lOiB1c2VyLmZpcnN0TmFtZSB9KX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGU+XG4gICAgICAgICAgICA8U0NDQUlIb21lU3VidGl0bGUgJGFsaWduPXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA/ICdzdGFydCcgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICB7dChcbiAgICAgICAgICAgICAgICBpc0NvbGxhYm9yYXRvclJvbGUodXNlci5yb2xlX2lkKVxuICAgICAgICAgICAgICAgICAgPyAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGVDb2xsYWJvcmF0b3InXG4gICAgICAgICAgICAgICAgICA6ICdob21lTWVudS5jb250ZXh0SG9tZS5zdWJ0aXRsZSdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lU3VidGl0bGU+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICAgIHshaXNQbGFubmVySG9tZSAmJiAhaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgZ3JlZXRpbmcgJiYgKFxuICAgICAgICAgIDxTQ0NBSUhvbWVHcmVldGluZ1xuICAgICAgICAgICAgJGFsaWduPXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA/ICdzdGFydCcgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAkc2l6ZT17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUgPyAnbWQnIDogJ2xnJ31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Z3JlZXRpbmd9XG4gICAgICAgICAgPC9TQ0NBSUhvbWVHcmVldGluZz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlIb21lTWFpYUhlYWRlclN0YWNrPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGZpeGVkSG9tZUNvbnRlbnRXaWR0aCA9XG4gICAgaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgfHwgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWVcbiAgICAgID8gTUFJQV9IRUFERVJfQ09MTEFCT1JBVE9SX0hPTUVfQ09OVEVOVF9XSURUSF9QWFxuICAgICAgOiB1bmRlZmluZWRcbiAgY29uc3QgY29udGVudEFsaWduU3RhcnQgPSBpc1BsYW5uZXJIb21lIHx8IGlzSGVhZGVyVGFza0NvbnRleHRIb21lIHx8IGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lXG4gIGNvbnN0IHNob3dBZ2VudEludHJvZHVjdGlvbiA9IHNlY3Rpb24gIT09ICdwcm9qZWN0JyAmJiAhaXNNQUlBICYmICEhYWdlbnQ/LmludHJvZHVjdGlvblxuXG4gIHJldHVybiAoXG4gICAgPFNDQ0FJSG9tZUNvbnRhaW5lciBzaG93RkFRcz17c2hvd0ZBUXN9ICRhbGlnblN0YXJ0PXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZX0+XG4gICAgICB7aG9tZVNjcm9sbGFibGVMYXlvdXQgJiYgPFNDQ0FJSG9tZUdyYWRpZW50VG9wICRzaG93PXtzaG93VG9wR3JhZGllbnR9IC8+fVxuICAgICAgPFNDQ0FJSG9tZUNvbnRlbnRcbiAgICAgICAgcmVmPXtjb250ZW50Q29udGFpbmVyUmVmfVxuICAgICAgICBzaG93RkFRcz17aG9tZVNjcm9sbGFibGVMYXlvdXR9XG4gICAgICAgICRpc0FnZW50Vmlldz17IWlzTUFJQX1cbiAgICAgICAgJGZsb2F0aW5nQ3VzdG9tQ2VudGVyPXtmbG9hdGluZ0N1c3RvbUNlbnRlcn1cbiAgICAgICAgJGNlbnRlclZlcnRpY2FsbHk9e2lzUGxhbm5lckhvbWV9XG4gICAgICAgICRhbGlnblN0YXJ0PXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZX1cbiAgICAgICAgJGZpeGVkQ29udGVudFdpZHRoPXtmaXhlZEhvbWVDb250ZW50V2lkdGh9XG4gICAgICA+XG4gICAgICAgIDxTQ0NBSUhvbWVDb250ZW50SW5uZXJcbiAgICAgICAgICBzaG93RkFRcz17aG9tZVNjcm9sbGFibGVMYXlvdXR9XG4gICAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAgICRmbG9hdGluZ0N1c3RvbUNlbnRlcj17ZmxvYXRpbmdDdXN0b21DZW50ZXJ9XG4gICAgICAgICAgJGNlbnRlclZlcnRpY2FsbHk9e2lzUGxhbm5lckhvbWV9XG4gICAgICAgICAgJGFsaWduU3RhcnQ9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lIHx8IGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lfVxuICAgICAgICAgICRoZWFkZXJDb2xsYWJvcmF0b3JIb21lPXtpc0hlYWRlclRhc2tDb250ZXh0SG9tZX1cbiAgICAgICAgICAkc2VjdGlvbk9yY2hlc3RyYXRvckhvbWU9e2lzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lfVxuICAgICAgICA+XG4gICAgICAgICAgPFNDQ0FJSG9tZUhlYWRlclxuICAgICAgICAgICAgJGdhcD17c2hvd0FnZW50SW50cm9kdWN0aW9uID8gJzIwcHgnIDogJzAnfVxuICAgICAgICAgICAgJG1heFdpZHRoPXtpc01BSUEgPyAnMTAwJScgOiAnMzgwcHgnfVxuICAgICAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAgICAgJGFsaWduPXtjb250ZW50QWxpZ25TdGFydCA/ICdzdGFydCcgOiAnY2VudGVyJ31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7cmVuZGVySGVhZGVyQ29udGVudCgpfVxuXG4gICAgICAgICAgICB7c2hvd0FnZW50SW50cm9kdWN0aW9uID8gKFxuICAgICAgICAgICAgICA8U0NDQUlIb21lSW50cm9kdWN0aW9uIGV4cGFuZGVkPXtleHBhbmRlZH0+e2FnZW50LmludHJvZHVjdGlvbn08L1NDQ0FJSG9tZUludHJvZHVjdGlvbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU0NDQUlIb21lSGVhZGVyPlxuICAgICAgICAgIHtzaG93UHJvamVjdFN1bW1hcnlDYXJkICYmIChcbiAgICAgICAgICAgIDxTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCBvbkNsaWNrPXtoYW5kbGVycy5wcm9qZWN0U3VtbWFyeX0+XG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeT5cbiAgICAgICAgICAgICAgICA8VGVtcGxhdGVHcmFkaWVudEljb24gaGVpZ2h0PXsyNH0gd2lkdGg9ezI0fSAvPlxuICAgICAgICAgICAgICA8L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5PlxuICAgICAgICAgICAgICA8U0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50PlxuICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeVRpdGxlPnt0KCdob21lTWVudS5wcm9qZWN0U3VtbWFyeS50aXRsZScpfTwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZT5cbiAgICAgICAgICAgICAgICA8U0NDQUlIb21lUHJvamVjdFN1bW1hcnlEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICAgIHt0KCdob21lTWVudS5wcm9qZWN0U3VtbWFyeS5kZXNjcmlwdGlvbicpfVxuICAgICAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQ+XG4gICAgICAgICAgICA8L1NDQ0FIV3JhcHBlclN1bW1hcnlQcm9qZWN0PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3Nob3dEeW5hbWljU2VjdGlvbiAmJiAoXG4gICAgICAgICAgICA8U0NDQUlIb21lRHluYW1pY1NlY3Rpb25cbiAgICAgICAgICAgICAgJGdyb3c9e2lzTWFpYWtlcn1cbiAgICAgICAgICAgICAgJGFsaWduU3RhcnQ9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lIHx8IGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7c2hvdWxkU2hvd1BsYW5uZXJGdWFzID8gKFxuICAgICAgICAgICAgICAgIDxGcmVxdWVudGx5VXNlZEFjdGlvbnNcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwbGFubmVyXCJcbiAgICAgICAgICAgICAgICAgIG9uU3RhcnRDaGF0PXtoYW5kbGVIb21lU3RhcnRDaGF0fVxuICAgICAgICAgICAgICAgICAgYWdlbnRJZD17YWdlbnQ/LmlkfVxuICAgICAgICAgICAgICAgICAgaXNTY3JvbGxpbmc9e2lzU2Nyb2xsaW5nfVxuICAgICAgICAgICAgICAgICAgYWN0aW9ucz17aGVhZGVySG91cnNGdWFzfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17aGVhZGVySG91cnNGdWFzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAge3JlbmRlclJlY2VudENvbnRleHRzKCl9XG4gICAgICAgICAgICAgIHtzaG91bGRTaG93RmFxcyAmJiAoXG4gICAgICAgICAgICAgICAgPEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc1xuICAgICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fVxuICAgICAgICAgICAgICAgICAgc2hvd0ZBUXM9e3Nob3dGQVFzfVxuICAgICAgICAgICAgICAgICAgc2hvd1Byb2plY3RTdW1tYXJ5PXtzaG93UHJvamVjdFN1bW1hcnl9XG4gICAgICAgICAgICAgICAgICBhZ2VudElkPXthZ2VudD8uaWR9XG4gICAgICAgICAgICAgICAgICBsYW5nPXtsYW5nfVxuICAgICAgICAgICAgICAgICAgaXNTY3JvbGxpbmc9e2lzU2Nyb2xsaW5nfVxuICAgICAgICAgICAgICAgICAgZmFxcz17ZmFxc31cbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2ZhcXNBcmVMb2FkaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtzaG91bGRTaG93RnVhcyAmJiAoXG4gICAgICAgICAgICAgICAgPEZyZXF1ZW50bHlVc2VkQWN0aW9uc1xuICAgICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fVxuICAgICAgICAgICAgICAgICAgYWdlbnRJZD17YWdlbnQ/LmlkfVxuICAgICAgICAgICAgICAgICAgaXNTY3JvbGxpbmc9e2lzU2Nyb2xsaW5nfVxuICAgICAgICAgICAgICAgICAgYWN0aW9ucz17ZnVhc31cbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2Z1YXNBcmVMb2FkaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtpc01haWFrZXIgPyA8Q2hhdEFJSG9tZU1haWFrZXIgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fSAvPiA6IG51bGx9XG4gICAgICAgICAgICA8L1NDQ0FJSG9tZUR5bmFtaWNTZWN0aW9uPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlIb21lQ29udGVudElubmVyPlxuICAgICAgPC9TQ0NBSUhvbWVDb250ZW50PlxuICAgICAge2hvbWVTY3JvbGxhYmxlTGF5b3V0ICYmIDxTQ0NBSUhvbWVHcmFkaWVudEJvdHRvbSAkc2hvdz17c2hvd0JvdHRvbUdyYWRpZW50fSAvPn1cbiAgICA8L1NDQ0FJSG9tZUNvbnRhaW5lcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsU0FBUyxFQUFFQyxlQUFlLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sUUFBUSxPQUFPO0FBQzFGLFNBQVNDLFNBQVMsUUFBUSxXQUFXO0FBRXJDLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsYUFBYSxRQUFRLGdEQUFnRDtBQUM5RSxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLHlCQUF5QjtB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
|
|
687
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsImZsdXNoU3luYyIsIlRvb2x0aXAiLCJMaXN0Q2hlY2tsaXN0IiwidXNlVCIsIkVWRU5UUyIsInVzZUV2ZW50IiwiU0NDQUlIb21lQ29udGFpbmVyIiwiU0NDQUlIb21lU2Nyb2xsIiwiU0NDQUlIb21lQ29udGVudCIsIlNDQ0FJSG9tZUNvbnRlbnRJbm5lciIsIlNDQ0FJSG9tZUdyYWRpZW50VG9wIiwiU0NDQUlIb21lR3JhZGllbnRCb3R0b20iLCJTQ0NBSUhvbWVIZWFkZXIiLCJTQ0NBSUhvbWVHcmVldGluZyIsIlNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lciIsIlNDQ0FJSG9tZUFnZW50SW5mbyIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24iLCJTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCIsIlNDQ0FJSG9tZUludHJvZHVjdGlvbiIsIlNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lciIsIlNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQiLCJTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQ0FJSG9tZUljb25Db250YWluZXIiLCJTQ0NBSUhvbWVMb2dvV3JhcHBlciIsIlNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayIsIlNDQ0FJSG9tZVRpdGxlIiwiU0NDQUlIb21lVGl0bGVCbG9jayIsIlNDQ0FJSG9tZVN1YnRpdGxlIiwiU0NDQUlIb21lRHluYW1pY1NlY3Rpb24iLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0cyIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlciIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblRpdGxlIiwiU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uU3VidGl0bGUiLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbiIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsVGV4dCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24iLCJNQUlBX0hFQURFUl9DT0xMQUJPUkFUT1JfSE9NRV9DT05URU5UX1dJRFRIX1BYIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVzZXIiLCJDT1JVc2VyUm9sZSIsImlzQ29sbGFib3JhdG9yUm9sZSIsImlzTWFuYWdlclJvbGUiLCJ1c2VSZXNpemVMaXN0ZW5lciIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm9yY2hlc3RyYXRvckhhc0hvdXJzU3ViYWdlbnQiLCJ2YWxpZGF0ZUlzTWFpYSIsImlzTWFpYWtlckFnZW50IiwiRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwiRnJlcXVlbnRseVVzZWRBY3Rpb25zIiwidXNlRnJlcXVlbnRseVVzZWRBY3Rpb25zIiwic29ydE1hbmFnZXJIb3Vyc0hvbWVGdWFzIiwicmVzb2x2ZVJlY2VudENvbnRleHRzSG9tZUxpbWl0IiwidXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwidXNlUmVjZW50Q29udGV4dHMiLCJNQUlBSXNvbG9nbyIsIlRlbXBsYXRlR3JhZGllbnRJY29uIiwiQ2hhdEFJSG9tZU1haWFrZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJGcmVxdWVudFF1ZXN0aW9ucyIsIlJFQ0VOVF9DT05URVhUX0lDT05fQ09MT1IiLCJSRUNFTlRfQ09OVEVYVF9JQ09OX1NJWkVfUFgiLCJSZWNlbnRDb250ZXh0UGlsbCIsIl9yZWYiLCJjb250ZXh0IiwibGFiZWwiLCJvbkNsaWNrIiwiX3JlZiRmdWxsV2lkdGgiLCJmdWxsV2lkdGgiLCJ0ZXh0UmVmIiwiX3VzZVJlc2l6ZUxpc3RlbmVyIiwic2hvd1Rvb2x0aXAiLCJ0eXBlIiwiJGZ1bGxXaWR0aCIsImNoaWxkcmVuIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsInVuZGVmaW5lZCIsInJlZiIsInRpdGxlIiwicGFyc2VOdW1lcmljSWQiLCJ2YWx1ZSIsInBhcnNlZCIsIk51bWJlciIsImlzRmluaXRlIiwiZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyIsInJvbGVJZCIsIm5vcm1hbGl6ZWRSb2xlSWQiLCJDTEVWRUwiLCJESVJFQ1RPUiIsIlBST0pFQ1RfTUFOQUdFUiIsIlNldCIsIkNoYXRBSUhvbWUiLCJfcmVmMiIsImhhbmRsZXJzIiwib25TdGFydENoYXQiLCJleHBhbmRlZCIsImZsb2F0aW5nIiwiX3VzZVQiLCJ0IiwiaTE4biIsImV2ZW50IiwidXNlciIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJzZWN0aW9uIiwiY2xpZW50IiwicHJvamVjdCIsInRhc2siLCJjaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0Iiwic2V0VGFzayIsInNldENoaXBzUHJvamVjdCIsImlzTUFJQSIsImZsb2F0aW5nQ3VzdG9tQ2VudGVyIiwibGFuZyIsImxhbmd1YWdlIiwic3VtbWFyeVByb2plY3RBY2Nlc3MiLCJ3aW5kb3ciLCJTdHJpbmciLCJNQUlBX1BST0pFQ1RfU1VNTUFSWV9GRUFUVVJFX0FDQ0VTUyIsInRvTG93ZXJDYXNlIiwibWFpYVByb2plY3RTdW1tYXJ5QWNjZXNzIiwiZmFxc0FjY2VzcyIsInNob3dQcm9qZWN0U3VtbWFyeSIsImlzTWFpYWtlciIsImlzSGVhZGVySG9tZSIsImlzT3JjaGVzdHJhdG9yIiwiaXNQbGFubmVySG9tZSIsImlzU2VjdGlvbk9yY2hlc3RyYXRvckhvbWUiLCJoYXNIb3Vyc1N1YmFnZW50IiwiaGFzUGlubmVkQ29udGV4dCIsImlkIiwicHJvamVjdElkIiwiaXNSZWNlbnRDb250ZXh0c1N0ZXAiLCJpc0hlYWRlclRhc2tDb250ZXh0SG9tZSIsInJvbGVfaWQiLCJpc0hlYWRlckhvdXJzQWdlbnRIb21lIiwiaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lIiwiaGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSIsImlzQ29udGV4dEhvbWVTdGVwIiwiaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUiLCJhbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VsZWN0ZWRDb250ZXh0Iiwic2V0U2VsZWN0ZWRDb250ZXh0IiwiYWN0aXZlQ29udGV4dCIsIm5hbWUiLCJwcm9qZWN0TmFtZSIsInBpbm5lZEVudGl0eVR5cGUiLCJmYXFzQ29udGV4dEVudGl0eVR5cGUiLCJfYWN0aXZlQ29udGV4dCR0eXBlIiwiaXNDbGllbnRDb250ZXh0Rm9yRmFxcyIsImZ1YXNTZWN0aW9uIiwicmVhbExpc3RzQWdlbnRJZCIsInJlYWxMaXN0c0VudGl0eVR5cGUiLCJfYWN0aXZlQ29udGV4dCR0eXBlMiIsIl91c2VGcmVxdWVudGx5VXNlZEFjdCIsImFnZW50RnVhcyIsImFjdGlvbnMiLCJmdWFzTG9hZGluZyIsImxvYWRpbmciLCJfdXNlRnJlcXVlbnRseVVzZWRBY3QyIiwiY29sbGFib3JhdG9yUGxhbm5lckZ1YXMiLCJjb2xsYWJvcmF0b3JQbGFubmVyRnVhc0xvYWRpbmciLCJfdXNlRnJlcXVlbnRseVVzZWRBY3QzIiwibWFuYWdlckhvbWVGdWFzIiwibWFuYWdlckhvbWVGdWFzTG9hZGluZyIsInNob3VsZEZldGNoQ29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXMiLCJCb29sZWFuIiwiX3VzZUZyZXF1ZW50bHlVc2VkQWN0NCIsImNvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzIiwiY29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXNMb2FkaW5nIiwiaGVhZGVySG91cnNGdWFzIiwiaGVhZGVySG91cnNGdWFzTG9hZGluZyIsInJlY2VudENvbnRleHRzTGltaXQiLCJmdWFzQ291bnQiLCJsZW5ndGgiLCJfdXNlUmVjZW50Q29udGV4dHMiLCJlbmFibGVkIiwibGltaXQiLCJmZXRjaGVkUmVjZW50Q29udGV4dHMiLCJjb250ZXh0cyIsInJlY2VudENvbnRleHRzTG9hZGluZyIsInJlY2VudENvbnRleHRzIiwiZmlsdGVyIiwiaGFzIiwicmVjZW50Q29udGV4dFNrZWxldG9uS2V5cyIsIkFycmF5IiwiZnJvbSIsIl8iLCJpbmRleCIsImNvbmNhdCIsImZhcXNMaXN0QWdlbnRJZCIsImZhcXNMaXN0RW50aXR5VHlwZSIsIl91c2VGcmVxdWVudGx5QXNrZWRRdSIsImFnZW50RmFxcyIsImZhcXMiLCJmYXFzTG9hZGluZyIsImhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyIsImZhcXNGZXRjaFJlZiIsIl9mYXFzRmV0Y2hSZWYkY3VycmVudCIsImN1cnJlbnRLZXkiLCJsYXN0S2V5IiwiY3VycmVudCIsImFnZW50SWQiLCJlbnRpdHlUeXBlIiwiZnVhcyIsImZhcXNBcmVMb2FkaW5nIiwiZnVhc0FyZUxvYWRpbmciLCJzaG93UmVjZW50Q29udGV4dHNCbG9jayIsInNob3VsZFNob3dGYXFzIiwic2hvdWxkU2hvd0Z1YXMiLCJzaG91bGRTaG93UGxhbm5lckZ1YXNMb2FkaW5nIiwic2hvdWxkU2hvd1BsYW5uZXJGdWFzQ29udGVudCIsInNob3VsZFNob3dQbGFubmVyRnVhcyIsInNob3VsZFNob3dDb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhc0xvYWRpbmciLCJzaG91bGRTaG93Q29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXNDb250ZW50Iiwic2hvdWxkU2hvd0NvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzIiwic2hvd1Byb2plY3RTdW1tYXJ5Q2FyZCIsImVudGl0eSIsInNob3dGQVFzIiwiaG9tZVNjcm9sbGFibGVMYXlvdXQiLCJzaG93RHluYW1pY1NlY3Rpb24iLCJjb250ZW50Q29udGFpbmVyUmVmIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJzaG93VG9wR3JhZGllbnQiLCJzZXRTaG93VG9wR3JhZGllbnQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dCb3R0b21HcmFkaWVudCIsInNldFNob3dCb3R0b21HcmFkaWVudCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiaXNTY3JvbGxpbmciLCJzZXRJc1Njcm9sbGluZyIsInNjcm9sbFRpbWVvdXRSZWYiLCJncmVldGluZyIsImludHJvIiwiaW50cm9kdWN0aW9uIiwiaXNBcnJheSIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImhhbmRsZVNlbGVjdFJlY2VudENvbnRleHQiLCJvcmRlciIsIl9jb250ZXh0JHBhcmVudHMiLCJfY29udGV4dCRwYXJlbnRzMiIsIl9jb250ZXh0JHBhcmVudHMzIiwiX2NvbnRleHQkcGFyZW50czQiLCJhaUNoYXRDb250ZXh0U2VsZWN0ZWQiLCJjb250ZXh0SWQiLCJjbGllbnRJZCIsInBhcmVudHMiLCJjbGllbnRfaWQiLCJwcm9qZWN0X2lkIiwiY2xpZW50TmFtZSIsImNsaWVudF9uYW1lIiwicHJvamVjdF9uYW1lIiwiX29iamVjdFNwcmVhZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiaGFuZGxlSG9tZVN0YXJ0Q2hhdCIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsImNvbnRleHREYXRhIiwicmVuZGVyUmVjZW50Q29udGV4dHMiLCIkZml4ZWRDb250ZW50V2lkdGgiLCIkZmx1c2hQaWxscyIsIm1hcCIsImtleSIsInRyaW0iLCJjaGVja1Njcm9sbCIsImNvbnRhaW5lciIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImlzU2Nyb2xsYWJsZSIsImlzQXRUb3AiLCJpc0F0Qm90dG9tIiwiaGFuZGxlU2Nyb2xsIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInNjaGVkdWxlQ2hlY2tTY3JvbGwiLCJhZGRFdmVudExpc3RlbmVyIiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJzY3JvbGxDb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJFbGVtZW50IiwidGltZW91dElkIiwibGF0ZVRpbWVvdXRJZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkaXNjb25uZWN0IiwicmVuZGVySGVhZGVyQ29udGVudCIsIl9hZ2VudCRjcmVhdGVkX2J5IiwiX2FnZW50JGNyZWF0ZWRfYnkyIiwiZW1vamkiLCJjcmVhdGVkX2J5IiwiaXNfZGVsZXRlZCIsImNvbnRlbnRBbGlnblN0YXJ0IiwibWFpYUhlYWRlclN0YWNrTmVlZHNHYXAiLCIkbm9HYXAiLCIkYWxpZ24iLCIkc2l6ZSIsImZpcnN0TmFtZSIsIiRjb2xsYWJvcmF0b3JIb21lIiwiZml4ZWRIb21lQ29udGVudFdpZHRoIiwic2hvd0FnZW50SW50cm9kdWN0aW9uIiwiaG9tZU1haW4iLCIkaXNBZ2VudFZpZXciLCIkZmxvYXRpbmdDdXN0b21DZW50ZXIiLCIkY2VudGVyVmVydGljYWxseSIsIiRhbGlnblN0YXJ0IiwiJGhlYWRlckNvbGxhYm9yYXRvckhvbWUiLCIkc2VjdGlvbk9yY2hlc3RyYXRvckhvbWUiLCIkZ2FwIiwiJG1heFdpZHRoIiwicHJvamVjdFN1bW1hcnkiLCIkZ3JvdyIsInZhcmlhbnQiLCIkc2hvdyIsIiRzY3JvbGxhYmxlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSUhvbWUvQ2hhdEFJSG9tZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nXG5cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IExpc3RDaGVja2xpc3QgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9MaXN0Q2hlY2tsaXN0J1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5cbmltcG9ydCB7IG9wdGlvbnMgfSBmcm9tICcuLi9DaGF0QUlNb2RhbC9jb25zdGFudHMnXG5cbmltcG9ydCB7XG4gIFNDQ0FJSG9tZUNvbnRhaW5lcixcbiAgU0NDQUlIb21lU2Nyb2xsLFxuICBTQ0NBSUhvbWVDb250ZW50LFxuICBTQ0NBSUhvbWVDb250ZW50SW5uZXIsXG4gIFNDQ0FJSG9tZUdyYWRpZW50VG9wLFxuICBTQ0NBSUhvbWVHcmFkaWVudEJvdHRvbSxcbiAgU0NDQUlIb21lSGVhZGVyLFxuICBTQ0NBSUhvbWVHcmVldGluZyxcbiAgU0NDQUlIb21lQWdlbnRJbmZvQ29udGFpbmVyLFxuICBTQ0NBSUhvbWVBZ2VudEluZm8sXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5LFxuICBTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQsXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGUsXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24sXG4gIFNDQ0FIV3JhcHBlclN1bW1hcnlQcm9qZWN0LFxuICBTQ0NBSUhvbWVJbnRyb2R1Y3Rpb24sXG4gIFNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lcixcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dCxcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWUsXG4gIFNDQ0FJSG9tZUljb25Db250YWluZXIsXG4gIFNDQ0FJSG9tZUxvZ29XcmFwcGVyLFxuICBTQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2ssXG4gIFNDQ0FJSG9tZVRpdGxlLFxuICBTQ0NBSUhvbWVUaXRsZUJsb2NrLFxuICBTQ0NBSUhvbWVTdWJ0aXRsZSxcbiAgU0NDQUlIb21lRHluYW1pY1NlY3Rpb24sXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3QsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlcixcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uVGl0bGUsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblN1YnRpdGxlLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCxcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxJY29uLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24sXG4gIE1BSUFfSEVBREVSX0NPTExBQk9SQVRPUl9IT01FX0NPTlRFTlRfV0lEVEhfUFgsXG59IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCwgdHlwZSBTZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVVzZXIsIENPUlVzZXJSb2xlLCBpc0NvbGxhYm9yYXRvclJvbGUsIGlzTWFuYWdlclJvbGUgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlUmVzaXplTGlzdGVuZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZXNpemUnXG5pbXBvcnQgeyBnZXRDb250ZXh0TWVudGlvbkljb24gfSBmcm9tICcuLi8uLi8uLi91dGlscy9jb250ZXh0TWVudGlvbkljb25zJ1xuaW1wb3J0IHsgb3JjaGVzdHJhdG9ySGFzSG91cnNTdWJhZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL29yY2hlc3RyYXRvclN1YmFnZW50cydcbmltcG9ydCB7IHZhbGlkYXRlSXNNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMvdmFsaWRhdGVJc01haWEnXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMgfSBmcm9tICcuLi8uLi9hdG9tcy9GcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMnXG5pbXBvcnQgeyBGcmVxdWVudGx5VXNlZEFjdGlvbnMgfSBmcm9tICcuLi8uLi9hdG9tcy9GcmVxdWVudGx5VXNlZEFjdGlvbnMnXG5pbXBvcnQgeyB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMnXG5pbXBvcnQgeyBzb3J0TWFuYWdlckhvdXJzSG9tZUZ1YXMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zb3J0TWFuYWdlckhvdXJzSG9tZUZ1YXMnXG5pbXBvcnQgeyByZXNvbHZlUmVjZW50Q29udGV4dHNIb21lTGltaXQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZWNlbnRDb250ZXh0c0hvbWVMaW1pdCdcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IHVzZVJlY2VudENvbnRleHRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVjZW50Q29udGV4dHMnXG5pbXBvcnQgdHlwZSB7IFJlY2VudENvbnRleHRJdGVtLCBSZWNlbnRDb250ZXh0VHlwZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvUmVjZW50Q29udGV4dHMnXG5pbXBvcnQgeyBNQUlBSXNvbG9nbyB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL01BSUFJc29sb2dvJ1xuaW1wb3J0IHsgVGVtcGxhdGVHcmFkaWVudEljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9UZW1wbGF0ZUdyYWRpZW50SWNvbidcbmltcG9ydCB7IENoYXRBSUhvbWVNYWlha2VyIH0gZnJvbSAnLi9DaGF0QUlIb21lTWFpYWtlcidcblxudHlwZSBDaGF0QUlIb21lUHJvcHMgPSB7XG4gIG9uU3RhcnRDaGF0OiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgbWVudGlvbnM/OiBudWxsLFxuICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgIHNjSWQ/OiBzdHJpbmcsXG4gICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApID0+IHZvaWRcbiAgaGFuZGxlcnM6IFJlY29yZDxvcHRpb25zLCAoKSA9PiB2b2lkPlxuICBleHBhbmRlZD86IGJvb2xlYW5cbiAgZmxvYXRpbmc/OiBib29sZWFuXG59XG5cbmV4cG9ydCBlbnVtIEZyZXF1ZW50UXVlc3Rpb25zIHtcbiAgcmVudGFiaWxpZGFkX3Byb3llY3RvID0gJ3JlbnRhYmlsaWRhZF9wcm95ZWN0bycsXG4gIGF2YW5jZV9wcm95ZWN0byA9ICdhdmFuY2VfcHJveWVjdG8nLFxufVxuXG5jb25zdCBSRUNFTlRfQ09OVEVYVF9JQ09OX0NPTE9SID0gJyM0RDRENEQnXG5jb25zdCBSRUNFTlRfQ09OVEVYVF9JQ09OX1NJWkVfUFggPSAxNVxuXG5jb25zdCBSZWNlbnRDb250ZXh0UGlsbCA9ICh7XG4gIGNvbnRleHQsXG4gIGxhYmVsLFxuICBvbkNsaWNrLFxuICBmdWxsV2lkdGggPSBmYWxzZSxcbn06IHtcbiAgY29udGV4dDogUmVjZW50Q29udGV4dEl0ZW1cbiAgbGFiZWw6IHN0cmluZ1xuICBvbkNsaWNrOiAoKSA9PiB2b2lkXG4gIGZ1bGxXaWR0aD86IGJvb2xlYW5cbn0pID0+IHtcbiAgY29uc3QgdGV4dFJlZiA9IHVzZVJlZjxIVE1MU3BhbkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHsgc2hvd1Rvb2x0aXAgfSA9IHVzZVJlc2l6ZUxpc3RlbmVyKHRleHRSZWYsIFtsYWJlbF0pXG5cbiAgcmV0dXJuIChcbiAgICA8U0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGwgdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e29uQ2xpY2t9ICRmdWxsV2lkdGg9e2Z1bGxXaWR0aH0+XG4gICAgICA8U0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxJY29uPlxuICAgICAgICB7Y29udGV4dC50eXBlID09PSAndGFzaycgPyAoXG4gICAgICAgICAgPExpc3RDaGVja2xpc3QgY29sb3I9e1JFQ0VOVF9DT05URVhUX0lDT05fQ09MT1J9IHdpZHRoPVwiMTVweFwiIGhlaWdodD1cIjE1cHhcIiAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIGdldENvbnRleHRNZW50aW9uSWNvbihjb250ZXh0LnR5cGUsIFJFQ0VOVF9DT05URVhUX0lDT05fQ09MT1IsIHVuZGVmaW5lZCwgUkVDRU5UX0NPTlRFWFRfSUNPTl9TSVpFX1BYKVxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbEljb24+XG4gICAgICA8U0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxUZXh0IHJlZj17dGV4dFJlZn0+XG4gICAgICAgIHtzaG93VG9vbHRpcCA/IChcbiAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17bGFiZWx9PlxuICAgICAgICAgICAgPHNwYW4+e2xhYmVsfTwvc3Bhbj5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgbGFiZWxcbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxUZXh0PlxuICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGw+XG4gIClcbn1cblxuY29uc3QgcGFyc2VOdW1lcmljSWQgPSAodmFsdWU/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykgcmV0dXJuIG51bGxcbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKVxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG59XG5cbmNvbnN0IGdldEFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMgPSAocm9sZUlkPzogQ09SVXNlclJvbGUgfCBudW1iZXIgfCBzdHJpbmcpOiBTZXQ8UmVjZW50Q29udGV4dFR5cGU+ID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZFJvbGVJZCA9IE51bWJlcihyb2xlSWQpXG4gIGlmIChcbiAgICBub3JtYWxpemVkUm9sZUlkID09PSBDT1JVc2VyUm9sZS5DTEVWRUwgfHxcbiAgICBub3JtYWxpemVkUm9sZUlkID09PSBDT1JVc2VyUm9sZS5ESVJFQ1RPUiB8fFxuICAgIG5vcm1hbGl6ZWRSb2xlSWQgPT09IENPUlVzZXJSb2xlLlBST0pFQ1RfTUFOQUdFUlxuICApIHtcbiAgICByZXR1cm4gbmV3IFNldChbJ2NsaWVudCcsICdwcm9qZWN0JywgJ3Rhc2snXSlcbiAgfVxuICBpZiAoaXNDb2xsYWJvcmF0b3JSb2xlKHJvbGVJZCkpIHtcbiAgICByZXR1cm4gbmV3IFNldChbJ3Rhc2snXSlcbiAgfVxuICByZXR1cm4gbmV3IFNldCgpXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlIb21lID0gKHsgaGFuZGxlcnMsIG9uU3RhcnRDaGF0LCBleHBhbmRlZCwgZmxvYXRpbmcgfTogQ2hhdEFJSG9tZVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgYWdlbnQsIHNlY3Rpb24sIGNsaWVudCwgcHJvamVjdCwgdGFzaywgY2hpcHNQcm9qZWN0LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2ssIHNldENoaXBzUHJvamVjdCB9ID1cbiAgICB1c2VHbG9iYWxDb250ZXh0KClcblxuICBjb25zdCBpc01BSUEgPSB2YWxpZGF0ZUlzTWFpYShhZ2VudCBhcyBBZ2VudClcbiAgY29uc3QgZmxvYXRpbmdDdXN0b21DZW50ZXIgPSAhIShmbG9hdGluZyAmJiBhZ2VudD8udHlwZSA9PT0gJ2N1c3RvbScpXG4gIGNvbnN0IGxhbmcgPSBpMThuLmxhbmd1YWdlID09PSAnYnInID8gJ3B0JyA6IGkxOG4ubGFuZ3VhZ2VcblxuICBjb25zdCBzdW1tYXJ5UHJvamVjdEFjY2VzcyA9XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAoU3RyaW5nKHdpbmRvdy5NQUlBX1BST0pFQ1RfU1VNTUFSWV9GRUFUVVJFX0FDQ0VTUykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8XG4gICAgICBTdHJpbmcod2luZG93Lm1haWFQcm9qZWN0U3VtbWFyeUFjY2VzcykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKVxuICBjb25zdCBmYXFzQWNjZXNzID0gdHJ1ZVxuICBjb25zdCBzaG93UHJvamVjdFN1bW1hcnkgPSAhIShpc01BSUEgJiYgc3VtbWFyeVByb2plY3RBY2Nlc3MpXG4gIC8vIEVsIG9yY2hlc3RyYXRvciAodHlwZSA9PT0gJ29yY2hlc3RyYXRvcicpIG11ZXN0cmEgRkFRcy9GVUFzIGFncmVnYWRhcyBkZSBzdXMgc3ViYWdlbnRlcyxcbiAgLy8gYXPDrSBxdWUgTk8gc2UgdHJhdGEgY29tbyBtYWlha2VyIGFjw6EuXG4gIGNvbnN0IGlzTWFpYWtlciA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICBjb25zdCBpc0hlYWRlckhvbWUgPSBpc01BSUEgJiYgc2VjdGlvbiA9PT0gJ2hlYWRlcicgJiYgYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InXG4gIC8vIEVsIG9yY2hlc3RyYXRvciB1c2EgZWwgaG9tZSBlbiAyIHBhc29zIChjb250ZXh0b3MgcmVjaWVudGVzIOKGlCBGQVFzL0ZVQXMpIGVuIGhlYWRlci9wcm9qZWN0L2NsaWVudC90YXNrLlxuICAvLyBFbiBwcm9qZWN0L2NsaWVudC90YXNrLCBhbCBsaW1waWFyIGVsIGNvbnRleHRvIChwLiBlai4gYWwgcmVzZWxlY2Npb25hciBNQUlBXG4gIC8vIGRlc2RlIGVsIGxpc3RhZG8gZGUgYWdlbnRlcykgc2UgbXVlc3RyYSBlbCBzZWxlY3RvciBkZSBjb250ZXh0b3MgcmVjaWVudGVzIGVuIGx1Z2FyIGRlIHVuIGhvbWUgdmFjw61vLlxuICBjb25zdCBpc09yY2hlc3RyYXRvciA9IGlzTUFJQSAmJiBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcidcbiAgLy8gUGxhbm5lcjogaG9tZSBkZSBGVUFzIGRlbCBvcmNoZXN0cmF0b3IgKHNpbiBzZWxlY3RvciBkZSBjb250ZXh0b3MpLlxuICAvLyBTaSBlbCB1c3VhcmlvIG5hdmVnYSBhIE1haWFrZXIgdSBvdHJvIGFnZW50ZSwgc2VjdGlvbiBzaWd1ZSBzaWVuZG8gYHBsYW5uZXJgIHBlcm8geWEgbm8gZXMgZXN0ZSBob21lLlxuICBjb25zdCBpc1BsYW5uZXJIb21lID0gc2VjdGlvbiA9PT0gJ3BsYW5uZXInICYmIGlzT3JjaGVzdHJhdG9yXG4gIC8vIEhvbWVzIGRlIHNlY2Npw7NuIChwcm9qZWN0L2NsaWVudC90YXNrKTogc2luIGlzb2xvZ28sIGNvbnRlbmlkbyB0b3AtbGVmdCwgY29sdW1uYSA0NDhweCBjZW50cmFkYS5cbiAgY29uc3QgaXNTZWN0aW9uT3JjaGVzdHJhdG9ySG9tZSA9IGlzT3JjaGVzdHJhdG9yICYmICFpc0hlYWRlckhvbWUgJiYgIWlzUGxhbm5lckhvbWVcbiAgY29uc3QgaGFzSG91cnNTdWJhZ2VudCA9IG9yY2hlc3RyYXRvckhhc0hvdXJzU3ViYWdlbnQoYWdlbnQpXG5cbiAgLy8gSG9tZSBkZWwgb3JjaGVzdHJhdG9yIGVuIDIgcGFzb3M6XG4gIC8vICAtIFBhc28gMSAoc2luIGNvbnRleHRvIHBpbmVhZG8pOiBzZSBtdWVzdHJhbiBzb2xvIGxvcyBjb250ZXh0b3MgcmVjaWVudGVzLlxuICAvLyAgLSBQYXNvIDIgKGNvbnRleHRvIHBpbmVhZG8pOiBzZSBtdWVzdHJhbiBsYXMgRkFRcy9hY2Npb25lcyBxdWUgcmVmZXJlbmNpYW4gZXNlIGNvbnRleHRvLlxuICBjb25zdCBoYXNQaW5uZWRDb250ZXh0ID0gISEodGFzaz8uaWQgfHwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgfHwgY2xpZW50Py5pZCB8fCBwcm9qZWN0Py5pZClcbiAgY29uc3QgaXNSZWNlbnRDb250ZXh0c1N0ZXAgPSBpc09yY2hlc3RyYXRvciAmJiAhaGFzUGlubmVkQ29udGV4dCAmJiAhaXNQbGFubmVySG9tZVxuICAvLyBIZWFkZXIgcGFzbyAxIGNvbXBhY3RvIChzaW4gaXNvbG9nbywgcGlsbHMgZnVsbC13aWR0aCk6IGNvbGFib3JhZG9yIHkgbWFuYWdlcnMgKEMtTGV2ZWwvRGlyZWN0b3IvUE0pLlxuICBjb25zdCBpc0hlYWRlclRhc2tDb250ZXh0SG9tZSA9XG4gICAgc2VjdGlvbiA9PT0gJ2hlYWRlcicgJiYgaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgKGlzQ29sbGFib3JhdG9yUm9sZSh1c2VyLnJvbGVfaWQpIHx8IGlzTWFuYWdlclJvbGUodXNlci5yb2xlX2lkKSlcbiAgLy8gQmxvcXVlIEZVQXMgcGxhbm5lciArIHNlY2Npw7NuIGRlIGNvbnRleHRvcyByZWNpZW50ZXMgY29uIHTDrXR1bG9zIChjb2xhYm9yYWRvciBvIG1hbmFnZXIgY29uIGhvdXIpLlxuICBjb25zdCBpc0hlYWRlckhvdXJzQWdlbnRIb21lID0gaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgJiYgaGFzSG91cnNTdWJhZ2VudFxuICBjb25zdCBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgPSBpc0hlYWRlckhvdXJzQWdlbnRIb21lICYmIGlzTWFuYWdlclJvbGUodXNlci5yb2xlX2lkKVxuICBjb25zdCBoZWFkZXJUYXNrQ29udGV4dFN1YnRpdGxlS2V5ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzSGVhZGVySG91cnNBZ2VudEhvbWUpIHtcbiAgICAgIGlmIChpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUpIHJldHVybiAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGVNYW5hZ2VyV2l0aEhvdXJzJ1xuICAgICAgcmV0dXJuICdob21lTWVudS5jb250ZXh0SG9tZS5zdWJ0aXRsZUNvbGxhYm9yYXRvcldpdGhIb3VycydcbiAgICB9XG4gICAgaWYgKGlzTWFuYWdlclJvbGUodXNlci5yb2xlX2lkKSkgcmV0dXJuICdob21lTWVudS5jb250ZXh0SG9tZS5zdWJ0aXRsZSdcbiAgICByZXR1cm4gJ2hvbWVNZW51LmNvbnRleHRIb21lLnN1YnRpdGxlQ29sbGFib3JhdG9yJ1xuICB9LCBbaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSwgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lLCB1c2VyLnJvbGVfaWRdKVxuICBjb25zdCBpc0NvbnRleHRIb21lU3RlcCA9IGlzSGVhZGVySG9tZSAmJiBoYXNQaW5uZWRDb250ZXh0XG4gIC8vIEhlYWRlciBwYXNvIDIgKEZBUXMvRlVBcyBjb24gY29udGV4dG8pIHkgaG9tZXMgZGUgc2VjY2nDs24gY29tcGFydGVuIGxheW91dDogc2luIGlzb2xvZ28sIHRleHRvIGEgbGEgaXpxdWllcmRhLlxuICBjb25zdCBpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA9IGlzU2VjdGlvbk9yY2hlc3RyYXRvckhvbWUgfHwgaXNDb250ZXh0SG9tZVN0ZXBcblxuICBjb25zdCBhbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSkgcmV0dXJuIGdldEFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXModXNlci5yb2xlX2lkKVxuICAgIGlmIChpc0hlYWRlclRhc2tDb250ZXh0SG9tZSAmJiBpc01hbmFnZXJSb2xlKHVzZXIucm9sZV9pZCkpIHJldHVybiBnZXRBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzKHVzZXIucm9sZV9pZClcbiAgICBpZiAoaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUpIHJldHVybiBuZXcgU2V0PFJlY2VudENvbnRleHRUeXBlPihbJ3Rhc2snXSlcbiAgICByZXR1cm4gZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyh1c2VyLnJvbGVfaWQpXG4gIH0sIFt1c2VyLnJvbGVfaWQsIGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSwgaXNIZWFkZXJUYXNrQ29udGV4dEhvbWVdKVxuXG4gIC8vIENvbnRleHRvIGFjdGl2byBwYXJhIGRlcml2YXIgRkFRcy9hY2Npb25lcyAocGFzbyAyKS4gUHJlZmVyaW1vcyBlbCBwaWxsIGNsaWNrZWFkbztcbiAgLy8gc2kgbm8sIGxvIHJlY29uc3RydWltb3MgZGVzZGUgZWwgY29udGV4dG8gZ2xvYmFsLlxuICBjb25zdCBbc2VsZWN0ZWRDb250ZXh0LCBzZXRTZWxlY3RlZENvbnRleHRdID0gdXNlU3RhdGU8UmVjZW50Q29udGV4dEl0ZW0gfCBudWxsPihudWxsKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaGFzUGlubmVkQ29udGV4dCkgc2V0U2VsZWN0ZWRDb250ZXh0KG51bGwpXG4gIH0sIFtoYXNQaW5uZWRDb250ZXh0XSlcblxuICBjb25zdCBhY3RpdmVDb250ZXh0ID0gdXNlTWVtbzxSZWNlbnRDb250ZXh0SXRlbSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRDb250ZXh0KSByZXR1cm4gc2VsZWN0ZWRDb250ZXh0XG4gICAgaWYgKCFpc0NvbnRleHRIb21lU3RlcCkgcmV0dXJuIG51bGxcbiAgICBpZiAodGFzaz8uaWQpIHJldHVybiB7IHR5cGU6ICd0YXNrJywgaWQ6IHRhc2suaWQsIG5hbWU6IHRhc2submFtZSB9XG4gICAgaWYgKGNoaXBzUHJvamVjdD8ucHJvamVjdElkKSByZXR1cm4geyB0eXBlOiAncHJvamVjdCcsIGlkOiBjaGlwc1Byb2plY3QucHJvamVjdElkLCBuYW1lOiBjaGlwc1Byb2plY3QucHJvamVjdE5hbWUgfVxuICAgIGlmIChjbGllbnQ/LmlkKSByZXR1cm4geyB0eXBlOiAnY2xpZW50JywgaWQ6IGNsaWVudC5pZCwgbmFtZTogY2xpZW50Lm5hbWUgfVxuICAgIHJldHVybiBudWxsXG4gIH0sIFtcbiAgICBzZWxlY3RlZENvbnRleHQsXG4gICAgaXNDb250ZXh0SG9tZVN0ZXAsXG4gICAgdGFzaz8uaWQsXG4gICAgdGFzaz8ubmFtZSxcbiAgICBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICBjaGlwc1Byb2plY3Q/LnByb2plY3ROYW1lLFxuICAgIGNsaWVudD8uaWQsXG4gICAgY2xpZW50Py5uYW1lLFxuICBdKVxuXG4gIC8vIGVudGl0eV90eXBlIGRlbCBjb250ZXh0byBwaW5lYWRvIChwcm9qZWN0L2NsaWVudC90YXNrKSwgdG9tYWRvIGRlbCBjb250ZXh0byBnbG9iYWwuXG4gIC8vIEFwbGljYSB0YW50byBhbCBhYnJpciBNQUlBIGRlc2RlIHVuYSBzZWNjacOzbiBlc3BlY8OtZmljYSBjb21vIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzbi5cbiAgY29uc3QgcGlubmVkRW50aXR5VHlwZSA9IHVzZU1lbW88UmVjZW50Q29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICBpZiAodGFzaz8uaWQpIHJldHVybiAndGFzaydcbiAgICBpZiAoY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgfHwgcHJvamVjdD8uaWQpIHJldHVybiAncHJvamVjdCdcbiAgICBpZiAoY2xpZW50Py5pZCkgcmV0dXJuICdjbGllbnQnXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9LCBbdGFzaz8uaWQsIGNoaXBzUHJvamVjdD8ucHJvamVjdElkLCBwcm9qZWN0Py5pZCwgY2xpZW50Py5pZF0pXG5cbiAgLy8gRkFRcyBzb2xvIGNvbiBjb250ZXh0byBjbGllbnRlIHBpbmVhZG8gKGhlYWRlciBwYXNvIDIgbyBzZWNjacOzbiBjbGllbnQpLlxuICAvLyBQcm95ZWN0bywgdGFyZWEgeSBwbGFubmVyIG11ZXN0cmFuIHNvbG8gRlVBcy5cbiAgY29uc3QgZmFxc0NvbnRleHRFbnRpdHlUeXBlID0gdXNlTWVtbzxSZWNlbnRDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgIGlmIChpc1BsYW5uZXJIb21lIHx8IGlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKGlzSGVhZGVySG9tZSkge1xuICAgICAgcmV0dXJuIGlzQ29udGV4dEhvbWVTdGVwID8gKGFjdGl2ZUNvbnRleHQ/LnR5cGUgPz8gcGlubmVkRW50aXR5VHlwZSkgOiB1bmRlZmluZWRcbiAgICB9XG4gICAgcmV0dXJuIHBpbm5lZEVudGl0eVR5cGVcbiAgfSwgW2lzUGxhbm5lckhvbWUsIGlzUmVjZW50Q29udGV4dHNTdGVwLCBpc0hlYWRlckhvbWUsIGlzQ29udGV4dEhvbWVTdGVwLCBhY3RpdmVDb250ZXh0Py50eXBlLCBwaW5uZWRFbnRpdHlUeXBlXSlcbiAgY29uc3QgaXNDbGllbnRDb250ZXh0Rm9yRmFxcyA9IGZhcXNDb250ZXh0RW50aXR5VHlwZSA9PT0gJ2NsaWVudCdcbiAgLy8gYHNlY3Rpb25gIHF1ZSBzZSBjb25zdWx0YSBwYXJhIGxhcyBGVUFzOiBlbiBuby1oZWFkZXIgc2lndWUgZWwgdGlwbyBkZSBjb250ZXh0byBwaW5lYWRvLlxuICAvLyBFbiBwbGFubmVyIHNlIGZ1ZXJ6YSBsYSBzZWN0aW9uIEFQSSBgcGxhbm5lcmAuXG4gIGNvbnN0IGZ1YXNTZWN0aW9uOiBTZWN0aW9uID0gKCgpID0+IHtcbiAgICBpZiAoaXNQbGFubmVySG9tZSkgcmV0dXJuICdwbGFubmVyJ1xuICAgIGlmICghaXNIZWFkZXJIb21lICYmIHBpbm5lZEVudGl0eVR5cGUpIHJldHVybiBwaW5uZWRFbnRpdHlUeXBlXG4gICAgcmV0dXJuIHNlY3Rpb25cbiAgfSkoKVxuXG4gIC8vIEZBUXMvYWNjaW9uZXM6XG4gIC8vICAtIGhlYWRlci1ob21lIChvcmNoZXN0cmF0b3IpLCBwYXNvIDI6IGZpbHRyYWRhcyBwb3IgYGVudGl0eV90eXBlYCBkZWwgY29udGV4dG8gc2VsZWNjaW9uYWRvLlxuICAvLyAgLSBob21lcyBkZSBwcm95ZWN0by9jbGllbnRlL3RhcmVhIChzZWNjacOzbik6IGZpbHRyYWRhcyBwb3IgZWwgYGVudGl0eV90eXBlYCBkZWwgY29udGV4dG8gc2V0ZWFkby5cbiAgLy8gIC0gcGxhbm5lcjogRlVBcyBjb24gc2VjdGlvbj1wbGFubmVyLCBzaW4gZW50aXR5X3R5cGUgbmkgRkFRcy5cbiAgY29uc3QgcmVhbExpc3RzQWdlbnRJZCA9ICgoKSA9PiB7XG4gICAgaWYgKCFpc01BSUEgfHwgaXNNYWlha2VyKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgLy8gUGFzbyAxIChjb250ZXh0b3MgcmVjaWVudGVzLCBzaW4gY29udGV4dG8pOiBubyBzZSBwaWRlbiBGQVFzL0ZVQXMuXG4gICAgaWYgKGlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKGlzSGVhZGVySG9tZSkgcmV0dXJuIGlzQ29udGV4dEhvbWVTdGVwID8gYWdlbnQ/LmlkIDogdW5kZWZpbmVkXG4gICAgcmV0dXJuIGFnZW50Py5pZFxuICB9KSgpXG4gIGNvbnN0IHJlYWxMaXN0c0VudGl0eVR5cGUgPSAoKCkgPT4ge1xuICAgIGlmIChpc1BsYW5uZXJIb21lKSByZXR1cm4gJ3BsYW5uZXInXG4gICAgaWYgKCFpc0hlYWRlckhvbWUpIHJldHVybiBwaW5uZWRFbnRpdHlUeXBlXG4gICAgcmV0dXJuIGlzQ29udGV4dEhvbWVTdGVwID8gKGFjdGl2ZUNvbnRleHQ/LnR5cGUgPz8gcGlubmVkRW50aXR5VHlwZSkgOiB1bmRlZmluZWRcbiAgfSkoKVxuICBjb25zdCB7IGFjdGlvbnM6IGFnZW50RnVhcywgbG9hZGluZzogZnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhcbiAgICByZWFsTGlzdHNBZ2VudElkLFxuICAgIGZ1YXNTZWN0aW9uLFxuICAgIHJlYWxMaXN0c0VudGl0eVR5cGVcbiAgKVxuICBjb25zdCB7IGFjdGlvbnM6IGNvbGxhYm9yYXRvclBsYW5uZXJGdWFzLCBsb2FkaW5nOiBjb2xsYWJvcmF0b3JQbGFubmVyRnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhcbiAgICBpc0hlYWRlckhvdXJzQWdlbnRIb21lICYmICFpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWQsXG4gICAgJ3BsYW5uZXInXG4gIClcbiAgY29uc3QgeyBhY3Rpb25zOiBtYW5hZ2VySG9tZUZ1YXMsIGxvYWRpbmc6IG1hbmFnZXJIb21lRnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhcbiAgICBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWQsXG4gICAgJ2hvbWVfd2l0aF9ob3VycydcbiAgKVxuICAvLyBBMTE6IG15LWRheSArIHNob3VsZC1yZXZpZXcgQ1RBcyBvbmx5IGZvciBjb2xsYWJvcmF0b3IgKHJvbGVfaWQ9NCkgKyBmdWxsc2NyZWVuIGhlYWRlciBob21lLlxuICAvLyBCb3RoIEZVQXMgc2hhcmUgc2VjdGlvbj1ob21lX2NvbGxhYm9yYXRvciAob3JkZXIgMSBteS1kYXkgLyBvcmRlciAyIHNob3VsZC1yZXZpZXcpLlxuICBjb25zdCBzaG91bGRGZXRjaENvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzID0gQm9vbGVhbihleHBhbmRlZCAmJiBpc0NvbGxhYm9yYXRvclJvbGUodXNlci5yb2xlX2lkKSAmJiBpc0hlYWRlckhvbWUpXG4gIGNvbnN0IHsgYWN0aW9uczogY29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXMsIGxvYWRpbmc6IGNvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzTG9hZGluZyB9ID0gdXNlRnJlcXVlbnRseVVzZWRBY3Rpb25zKFxuICAgIHNob3VsZEZldGNoQ29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXMgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWQsXG4gICAgJ2hvbWVfY29sbGFib3JhdG9yJ1xuICApXG4gIGNvbnN0IGhlYWRlckhvdXJzRnVhcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUpIHJldHVybiBzb3J0TWFuYWdlckhvdXJzSG9tZUZ1YXMobWFuYWdlckhvbWVGdWFzKVxuICAgIHJldHVybiBjb2xsYWJvcmF0b3JQbGFubmVyRnVhc1xuICB9LCBbaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lLCBtYW5hZ2VySG9tZUZ1YXMsIGNvbGxhYm9yYXRvclBsYW5uZXJGdWFzXSlcbiAgY29uc3QgaGVhZGVySG91cnNGdWFzTG9hZGluZyA9IGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSA/IG1hbmFnZXJIb21lRnVhc0xvYWRpbmcgOiBjb2xsYWJvcmF0b3JQbGFubmVyRnVhc0xvYWRpbmdcbiAgY29uc3QgcmVjZW50Q29udGV4dHNMaW1pdCA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHJlc29sdmVSZWNlbnRDb250ZXh0c0hvbWVMaW1pdCh7XG4gICAgICAgIGlzSGVhZGVySG91cnNBZ2VudEhvbWUsXG4gICAgICAgIGZ1YXNMb2FkaW5nOiBoZWFkZXJIb3Vyc0Z1YXNMb2FkaW5nLFxuICAgICAgICBmdWFzQ291bnQ6IGhlYWRlckhvdXJzRnVhcy5sZW5ndGgsXG4gICAgICB9KSxcbiAgICBbaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSwgaGVhZGVySG91cnNGdWFzTG9hZGluZywgaGVhZGVySG91cnNGdWFzLmxlbmd0aF1cbiAgKVxuICBjb25zdCB7IGNvbnRleHRzOiBmZXRjaGVkUmVjZW50Q29udGV4dHMsIGxvYWRpbmc6IHJlY2VudENvbnRleHRzTG9hZGluZyB9ID0gdXNlUmVjZW50Q29udGV4dHMoe1xuICAgIGVuYWJsZWQ6IGlzT3JjaGVzdHJhdG9yICYmICFpc1BsYW5uZXJIb21lLFxuICAgIGxpbWl0OiByZWNlbnRDb250ZXh0c0xpbWl0LFxuICB9KVxuICBjb25zdCByZWNlbnRDb250ZXh0cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZmV0Y2hlZFJlY2VudENvbnRleHRzLmZpbHRlcihjb250ZXh0ID0+IGFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMuaGFzKGNvbnRleHQudHlwZSkpLFxuICAgIFtmZXRjaGVkUmVjZW50Q29udGV4dHMsIGFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXNdXG4gIClcbiAgY29uc3QgcmVjZW50Q29udGV4dFNrZWxldG9uS2V5cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gQXJyYXkuZnJvbSh7IGxlbmd0aDogcmVjZW50Q29udGV4dHNMaW1pdCB9LCAoXywgaW5kZXgpID0+IGByZWNlbnQtY29udGV4dC1za2VsZXRvbi0ke2luZGV4ICsgMX1gKSxcbiAgICBbcmVjZW50Q29udGV4dHNMaW1pdF1cbiAgKVxuICBjb25zdCBmYXFzTGlzdEFnZW50SWQgPSBpc0NsaWVudENvbnRleHRGb3JGYXFzID8gcmVhbExpc3RzQWdlbnRJZCA6IHVuZGVmaW5lZFxuICBjb25zdCBmYXFzTGlzdEVudGl0eVR5cGUgPSBpc0NsaWVudENvbnRleHRGb3JGYXFzID8gcmVhbExpc3RzRW50aXR5VHlwZSA6IHVuZGVmaW5lZFxuICBjb25zdCB7XG4gICAgZmFxczogYWdlbnRGYXFzLFxuICAgIGxvYWRpbmc6IGZhcXNMb2FkaW5nLFxuICAgIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyxcbiAgfSA9IHVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyhmYXFzTGlzdEFnZW50SWQsIGxhbmcsIGZhcXNMaXN0RW50aXR5VHlwZSlcbiAgY29uc3QgZmFxc0ZldGNoUmVmID0gdXNlUmVmPHsgYWdlbnRJZDogc3RyaW5nOyBsYW5nOiBzdHJpbmc7IGVudGl0eVR5cGU/OiBzdHJpbmcgfSB8IG51bGw+KG51bGwpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRkFRcyBzb2xvIHBhcmEgY29udGV4dG8gY2xpZW50ZTsgZWwgcmVzdG8gbXVlc3RyYSBzb2xvIEZVQXMuXG4gICAgaWYgKCFyZWFsTGlzdHNBZ2VudElkIHx8ICFpc0NsaWVudENvbnRleHRGb3JGYXFzKSByZXR1cm5cbiAgICBjb25zdCBjdXJyZW50S2V5ID0gYCR7cmVhbExpc3RzQWdlbnRJZH0tJHtsYW5nfS0ke3JlYWxMaXN0c0VudGl0eVR5cGUgPz8gJ2FsbCd9YFxuICAgIGNvbnN0IGxhc3RLZXkgPSBmYXFzRmV0Y2hSZWYuY3VycmVudFxuICAgICAgPyBgJHtmYXFzRmV0Y2hSZWYuY3VycmVudC5hZ2VudElkfS0ke2ZhcXNGZXRjaFJlZi5jdXJyZW50Lmxhbmd9LSR7ZmFxc0ZldGNoUmVmLmN1cnJlbnQuZW50aXR5VHlwZSA/PyAnYWxsJ31gXG4gICAgICA6IG51bGxcbiAgICBpZiAoY3VycmVudEtleSAhPT0gbGFzdEtleSkge1xuICAgICAgZmFxc0ZldGNoUmVmLmN1cnJlbnQgPSB7IGFnZW50SWQ6IHJlYWxMaXN0c0FnZW50SWQsIGxhbmcsIGVudGl0eVR5cGU6IHJlYWxMaXN0c0VudGl0eVR5cGUgfVxuICAgICAgaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zKHsgYWdlbnRJZDogcmVhbExpc3RzQWdlbnRJZCwgbGFuZywgZW50aXR5VHlwZTogcmVhbExpc3RzRW50aXR5VHlwZSB9KVxuICAgIH1cbiAgfSwgW3JlYWxMaXN0c0FnZW50SWQsIHJlYWxMaXN0c0VudGl0eVR5cGUsIGlzQ2xpZW50Q29udGV4dEZvckZhcXMsIGxhbmcsIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc10pXG5cbiAgY29uc3QgZmFxcyA9IGFnZW50RmFxc1xuICBjb25zdCBmdWFzID0gYWdlbnRGdWFzXG4gIGNvbnN0IGZhcXNBcmVMb2FkaW5nID0gZmFxc0xvYWRpbmdcbiAgY29uc3QgZnVhc0FyZUxvYWRpbmcgPSBmdWFzTG9hZGluZ1xuXG4gIGNvbnN0IHNob3dSZWNlbnRDb250ZXh0c0Jsb2NrID0gaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgKHJlY2VudENvbnRleHRzTG9hZGluZyB8fCByZWNlbnRDb250ZXh0cy5sZW5ndGggPiAwKVxuICBjb25zdCBzaG91bGRTaG93RmFxcyA9XG4gICAgaXNNQUlBICYmXG4gICAgaXNDbGllbnRDb250ZXh0Rm9yRmFxcyAmJlxuICAgICFpc1JlY2VudENvbnRleHRzU3RlcCAmJlxuICAgIChpc0NvbnRleHRIb21lU3RlcCB8fCAoIWlzSGVhZGVySG9tZSAmJiBmYXFzQWNjZXNzKSkgJiZcbiAgICAhaXNNYWlha2VyICYmXG4gICAgKGZhcXMubGVuZ3RoID4gMCB8fCBmYXFzQXJlTG9hZGluZylcbiAgY29uc3Qgc2hvdWxkU2hvd0Z1YXMgPVxuICAgICFpc1JlY2VudENvbnRleHRzU3RlcCAmJiAhaXNNYWlha2VyICYmIChpc0NvbnRleHRIb21lU3RlcCB8fCAhaXNIZWFkZXJIb21lKSAmJiAoZnVhcy5sZW5ndGggPiAwIHx8IGZ1YXNBcmVMb2FkaW5nKVxuICBjb25zdCBzaG91bGRTaG93UGxhbm5lckZ1YXNMb2FkaW5nID0gaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSAmJiBoZWFkZXJIb3Vyc0Z1YXNMb2FkaW5nICYmIGhlYWRlckhvdXJzRnVhcy5sZW5ndGggPT09IDBcbiAgY29uc3Qgc2hvdWxkU2hvd1BsYW5uZXJGdWFzQ29udGVudCA9IGlzSGVhZGVySG91cnNBZ2VudEhvbWUgJiYgaGVhZGVySG91cnNGdWFzLmxlbmd0aCA+IDBcbiAgY29uc3Qgc2hvdWxkU2hvd1BsYW5uZXJGdWFzID0gc2hvdWxkU2hvd1BsYW5uZXJGdWFzTG9hZGluZyB8fCBzaG91bGRTaG93UGxhbm5lckZ1YXNDb250ZW50XG4gIGNvbnN0IHNob3VsZFNob3dDb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhc0xvYWRpbmcgPVxuICAgIHNob3VsZEZldGNoQ29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXMgJiZcbiAgICBjb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhc0xvYWRpbmcgJiZcbiAgICBjb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhcy5sZW5ndGggPT09IDBcbiAgY29uc3Qgc2hvdWxkU2hvd0NvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzQ29udGVudCA9XG4gICAgc2hvdWxkRmV0Y2hDb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhcyAmJiBjb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhcy5sZW5ndGggPiAwXG4gIGNvbnN0IHNob3VsZFNob3dDb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhcyA9XG4gICAgc2hvdWxkU2hvd0NvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzTG9hZGluZyB8fCBzaG91bGRTaG93Q29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXNDb250ZW50XG5cbiAgY29uc3Qgc2hvd1Byb2plY3RTdW1tYXJ5Q2FyZCA9IHNob3dQcm9qZWN0U3VtbWFyeSAmJiBhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCdcbiAgY29uc3Qgc2hvd0ZBUXMgPSAhIShcbiAgICBzaG93UmVjZW50Q29udGV4dHNCbG9jayB8fFxuICAgIHNob3VsZFNob3dGYXFzIHx8XG4gICAgc2hvdWxkU2hvd0Z1YXMgfHxcbiAgICBzaG91bGRTaG93UGxhbm5lckZ1YXMgfHxcbiAgICBzaG91bGRTaG93Q29sbGFib3JhdG9yRnVsbHNjcmVlbkZ1YXMgfHxcbiAgICBzaG93UHJvamVjdFN1bW1hcnlDYXJkIHx8XG4gICAgaXNNYWlha2VyXG4gIClcbiAgY29uc3QgaG9tZVNjcm9sbGFibGVMYXlvdXQgPSBzaG93RkFRc1xuICBjb25zdCBzaG93RHluYW1pY1NlY3Rpb24gPVxuICAgIHNob3dSZWNlbnRDb250ZXh0c0Jsb2NrIHx8XG4gICAgc2hvdWxkU2hvd0ZhcXMgfHxcbiAgICBzaG91bGRTaG93RnVhcyB8fFxuICAgIHNob3VsZFNob3dQbGFubmVyRnVhcyB8fFxuICAgIHNob3VsZFNob3dDb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhcyB8fFxuICAgIGlzTWFpYWtlclxuXG4gIC8vIEzDs2dpY2EgZGVsIHNjcm9sbCBjb24gZ3JhZGllbnRlc1xuICBjb25zdCBjb250ZW50Q29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzU2Nyb2xsaW5nLCBzZXRJc1Njcm9sbGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGltZW91dFJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpXG5cbiAgLy8gU2FsdWRvIGZpam8gcG9yIHRpcG8gZGUgY29udGV4dG8gKGkxOG4pLiBDdXN0b20gYWdlbnRzIHNpZ3VlbiB1c2FuZG8gYWdlbnQuaW50cm9kdWN0aW9uLlxuICAvLyBQbGFubmVyIHVzYSB0w610dWxvICsgYmFqYWRhIHByb3Bpb3MgKGBwbGFubmVySG9tZWApLCBubyBlc3RlIGdyZWV0aW5nLlxuICBjb25zdCBncmVldGluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc01haWFrZXIgfHwgaXNQbGFubmVySG9tZSB8fCBpc1JlY2VudENvbnRleHRzU3RlcCkgcmV0dXJuICcnXG5cbiAgICBpZiAoaXNNQUlBICYmIHBpbm5lZEVudGl0eVR5cGUpIHtcbiAgICAgIHJldHVybiB0KGBob21lTWVudS5jb250ZXh0SG9tZS5jb250ZXh0R3JlZXRpbmcuJHtwaW5uZWRFbnRpdHlUeXBlfWApXG4gICAgfVxuXG4gICAgY29uc3QgaW50cm8gPSBhZ2VudD8uaW50cm9kdWN0aW9uXG4gICAgaWYgKCFpbnRybykgcmV0dXJuICcnXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW50cm8pICYmIGludHJvLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBpbnRyb1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBpbnRyby5sZW5ndGgpXVxuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGludHJvID09PSAnc3RyaW5nJyA/IGludHJvIDogJydcbiAgfSwgW2FnZW50Py5pZCwgYWdlbnQ/LmludHJvZHVjdGlvbiwgaXNNYWlha2VyLCBpc1BsYW5uZXJIb21lLCBpc01BSUEsIHBpbm5lZEVudGl0eVR5cGUsIGlzUmVjZW50Q29udGV4dHNTdGVwLCB0XSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRleHQ6IFJlY2VudENvbnRleHRJdGVtLCBvcmRlcjogbnVtYmVyKSA9PiB7XG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0Q29udGV4dFNlbGVjdGVkLCB7IG9yZGVyLCB0eXBlOiBjb250ZXh0LnR5cGUgfSlcblxuICAgICAgY29uc3QgY29udGV4dElkID0gcGFyc2VOdW1lcmljSWQoY29udGV4dC5pZClcbiAgICAgIGNvbnN0IGNsaWVudElkID0gcGFyc2VOdW1lcmljSWQoY29udGV4dC5wYXJlbnRzPy5jbGllbnRfaWQpXG4gICAgICBjb25zdCBwcm9qZWN0SWQgPSBwYXJzZU51bWVyaWNJZChjb250ZXh0LnBhcmVudHM/LnByb2plY3RfaWQpXG4gICAgICBjb25zdCBjbGllbnROYW1lID0gY29udGV4dC5wYXJlbnRzPy5jbGllbnRfbmFtZSB8fCAnJ1xuICAgICAgY29uc3QgcHJvamVjdE5hbWUgPSBjb250ZXh0LnBhcmVudHM/LnByb2plY3RfbmFtZSB8fCAnJ1xuXG4gICAgICBzZXRTZWxlY3RlZENvbnRleHQoY29udGV4dClcbiAgICAgIHNldFRhc2sobnVsbClcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgICAgaWYgKGNvbnRleHQudHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgc2V0Q2xpZW50Py4oeyBpZDogY29udGV4dElkLCBuYW1lOiBjb250ZXh0Lm5hbWUgfSlcbiAgICAgIH0gZWxzZSBpZiAoY29udGV4dC50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgICAgaWQ6IGNvbnRleHRJZCxcbiAgICAgICAgICBuYW1lOiBjb250ZXh0Lm5hbWUsXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudDogeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgfSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGNvbnRleHRJZCksXG4gICAgICAgICAgcHJvamVjdE5hbWU6IGNvbnRleHQubmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT09ICd0YXNrJykge1xuICAgICAgICBzZXRUYXNrKHtcbiAgICAgICAgICBpZDogY29udGV4dC5pZCxcbiAgICAgICAgICBuYW1lOiBjb250ZXh0Lm5hbWUsXG4gICAgICAgICAgLi4uKHByb2plY3RJZCAhPSBudWxsID8geyBwcm9qZWN0SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGNsaWVudElkICE9IG51bGwpIHtcbiAgICAgICAgICBzZXRDbGllbnQ/Lih7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSB9KVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICAgIHNldFByb2plY3Qoe1xuICAgICAgICAgICAgaWQ6IHByb2plY3RJZCxcbiAgICAgICAgICAgIG5hbWU6IHByb2plY3ROYW1lIHx8IGAke3QoJ2hvbWVNZW51LnJlY2VudENvbnRleHRzLnR5cGVzLnByb2plY3QnKX0gJHtwcm9qZWN0SWR9YCxcbiAgICAgICAgICAgIC4uLihjbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZCB9IDoge30pLFxuICAgICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudDogeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgfSB9IDoge30pLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZCksXG4gICAgICAgICAgICBwcm9qZWN0TmFtZTogcHJvamVjdE5hbWUgfHwgYCR7dCgnaG9tZU1lbnUucmVjZW50Q29udGV4dHMudHlwZXMucHJvamVjdCcpfSAke3Byb2plY3RJZH1gLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdtYWlhLWlucHV0LXJlZm9jdXMnKSlcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZXZlbnQsIHNldENoaXBzUHJvamVjdCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlSG9tZVN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBudWxsLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSAmJiBmdWFJZCkge1xuICAgICAgICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGVkQ29udGV4dChudWxsKVxuICAgICAgICAgIHNldFRhc2sobnVsbClcbiAgICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIG9uU3RhcnRDaGF0KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZCwgY29udGV4dERhdGEpXG4gICAgfSxcbiAgICBbaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lLCBvblN0YXJ0Q2hhdCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdXG4gIClcblxuICBjb25zdCByZW5kZXJSZWNlbnRDb250ZXh0cyA9ICgpID0+IHtcbiAgICBpZiAoIWlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1xuICAgICAgICAkZml4ZWRDb250ZW50V2lkdGg9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lID8gTUFJQV9IRUFERVJfQ09MTEFCT1JBVE9SX0hPTUVfQ09OVEVOVF9XSURUSF9QWCA6IHVuZGVmaW5lZH1cbiAgICAgID5cbiAgICAgICAge2lzSGVhZGVySG91cnNBZ2VudEhvbWUgPyAoXG4gICAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlcj5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25UaXRsZT5cbiAgICAgICAgICAgICAge3QoXG4gICAgICAgICAgICAgICAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lXG4gICAgICAgICAgICAgICAgICA/ICdob21lTWVudS5jb250ZXh0SG9tZS5yZWNlbnRDb250ZXh0c1NlY3Rpb25NYW5hZ2VyLnRpdGxlJ1xuICAgICAgICAgICAgICAgICAgOiAnaG9tZU1lbnUuY29udGV4dEhvbWUucmVjZW50VGFza3NTZWN0aW9uLnRpdGxlJ1xuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25UaXRsZT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25TdWJ0aXRsZT5cbiAgICAgICAgICAgICAge3QoXG4gICAgICAgICAgICAgICAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lXG4gICAgICAgICAgICAgICAgICA/ICdob21lTWVudS5jb250ZXh0SG9tZS5yZWNlbnRDb250ZXh0c1NlY3Rpb25NYW5hZ2VyLnN1YnRpdGxlJ1xuICAgICAgICAgICAgICAgICAgOiAnaG9tZU1lbnUuY29udGV4dEhvbWUucmVjZW50VGFza3NTZWN0aW9uLnN1YnRpdGxlJ1xuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25TdWJ0aXRsZT5cbiAgICAgICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlcj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3QgJGZsdXNoUGlsbHM9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lfT5cbiAgICAgICAgICB7cmVjZW50Q29udGV4dHNMb2FkaW5nICYmXG4gICAgICAgICAgICByZWNlbnRDb250ZXh0U2tlbGV0b25LZXlzLm1hcChrZXkgPT4gPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24ga2V5PXtrZXl9IC8+KX1cbiAgICAgICAgICB7IXJlY2VudENvbnRleHRzTG9hZGluZyAmJlxuICAgICAgICAgICAgcmVjZW50Q29udGV4dHMubWFwKChjb250ZXh0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8UmVjZW50Q29udGV4dFBpbGxcbiAgICAgICAgICAgICAgICBrZXk9e2Ake2NvbnRleHQudHlwZX0tJHtjb250ZXh0LmlkfWB9XG4gICAgICAgICAgICAgICAgY29udGV4dD17Y29udGV4dH1cbiAgICAgICAgICAgICAgICBsYWJlbD17Y29udGV4dC5uYW1lLnRyaW0oKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0KGNvbnRleHQsIGluZGV4ICsgMSl9XG4gICAgICAgICAgICAgICAgZnVsbFdpZHRoPXtpc0hlYWRlclRhc2tDb250ZXh0SG9tZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdD5cbiAgICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dHM+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgY2hlY2tTY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGVudENvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWhvbWVTY3JvbGxhYmxlTGF5b3V0KSByZXR1cm5cblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG4gICAgY29uc3QgaXNTY3JvbGxhYmxlID0gc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0XG4gICAgY29uc3QgaXNBdFRvcCA9IHNjcm9sbFRvcCA9PT0gMFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBzY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0IC0gMVxuXG4gICAgc2V0U2hvd1RvcEdyYWRpZW50KGlzU2Nyb2xsYWJsZSAmJiAhaXNBdFRvcClcbiAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQoaXNTY3JvbGxhYmxlICYmICFpc0F0Qm90dG9tKVxuICB9LCBbaG9tZVNjcm9sbGFibGVMYXlvdXRdKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjaGVja1Njcm9sbCgpXG4gICAgc2V0SXNTY3JvbGxpbmcodHJ1ZSlcblxuICAgIGlmIChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpXG4gICAgfVxuXG4gICAgc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJc1Njcm9sbGluZyhmYWxzZSlcbiAgICB9LCAxNTApXG4gIH0sIFtjaGVja1Njcm9sbF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWhvbWVTY3JvbGxhYmxlTGF5b3V0KSB7XG4gICAgICBzZXRTaG93VG9wR3JhZGllbnQoZmFsc2UpXG4gICAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQoZmFsc2UpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGVudENvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlZHVsZUNoZWNrU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgY2hlY2tTY3JvbGwoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBzY2hlZHVsZUNoZWNrU2Nyb2xsKClcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuXG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoc2NoZWR1bGVDaGVja1Njcm9sbClcbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcilcbiAgICBjb25zdCBzY3JvbGxDb250ZW50ID0gY29udGFpbmVyLmZpcnN0RWxlbWVudENoaWxkXG4gICAgaWYgKHNjcm9sbENvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHNjcm9sbENvbnRlbnQpXG4gICAgfVxuXG4gICAgY29uc3QgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoc2NoZWR1bGVDaGVja1Njcm9sbCwgMTAwKVxuICAgIGNvbnN0IGxhdGVUaW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dChzY2hlZHVsZUNoZWNrU2Nyb2xsLCA0MDApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgIGNsZWFyVGltZW91dChsYXRlVGltZW91dElkKVxuICAgICAgaWYgKHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2hvbWVTY3JvbGxhYmxlTGF5b3V0LCBjaGVja1Njcm9sbCwgaGFuZGxlU2Nyb2xsXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaG9tZVNjcm9sbGFibGVMYXlvdXQpIHJldHVyblxuICAgIGNoZWNrU2Nyb2xsKClcbiAgfSwgW1xuICAgIGhvbWVTY3JvbGxhYmxlTGF5b3V0LFxuICAgIGNoZWNrU2Nyb2xsLFxuICAgIHJlY2VudENvbnRleHRzTG9hZGluZyxcbiAgICByZWNlbnRDb250ZXh0cy5sZW5ndGgsXG4gICAgaGVhZGVySG91cnNGdWFzTG9hZGluZyxcbiAgICBoZWFkZXJIb3Vyc0Z1YXMubGVuZ3RoLFxuICAgIGZ1YXNMb2FkaW5nLFxuICAgIGZ1YXMubGVuZ3RoLFxuICAgIGZhcXNBcmVMb2FkaW5nLFxuICAgIGZhcXMubGVuZ3RoLFxuICAgIHNob3VsZFNob3dQbGFubmVyRnVhcyxcbiAgICBpc01haWFrZXIsXG4gIF0pXG5cbiAgY29uc3QgcmVuZGVySGVhZGVyQ29udGVudCA9ICgpID0+IHtcbiAgICBpZiAoIWlzTUFJQSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lcj5cbiAgICAgICAgICA8U0NDQUlIb21lQWdlbnRJbmZvPlxuICAgICAgICAgICAge2FnZW50Py5lbW9qaX0ge2FnZW50Py5uYW1lfVxuICAgICAgICAgIDwvU0NDQUlIb21lQWdlbnRJbmZvPlxuICAgICAgICAgIHthZ2VudD8uY3JlYXRlZF9ieSAmJiAhaXNNQUlBICYmIChcbiAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlDb250YWluZXI+XG4gICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgYWdlbnQ/LmNyZWF0ZWRfYnk/LmlzX2RlbGV0ZWQgPyB0KCdob21lTWVudS5jcmVhdGVkQnlUb29sdGlwRGVsZXRlZCcpIDogdCgnaG9tZU1lbnUuY3JlYXRlZEJ5VG9vbHRpcCcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQ+XG4gICAgICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUuY3JlYXRlZEJ5Jyl9eycgJ31cbiAgICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZT57YWdlbnQ/LmNyZWF0ZWRfYnk/Lm5hbWV9PC9TQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZT5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJSG9tZUNyZWF0ZWRCeVRleHQ+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgIDwvU0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlIb21lQWdlbnRJbmZvQ29udGFpbmVyPlxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnRBbGlnblN0YXJ0ID0gaXNQbGFubmVySG9tZSB8fCBpc0hlYWRlclRhc2tDb250ZXh0SG9tZSB8fCBpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZVxuXG4gICAgY29uc3QgbWFpYUhlYWRlclN0YWNrTmVlZHNHYXAgPVxuICAgICAgKGlzUmVjZW50Q29udGV4dHNTdGVwICYmICFpc0hlYWRlclRhc2tDb250ZXh0SG9tZSAmJiAhaXNQbGFubmVySG9tZSkgfHxcbiAgICAgICghaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiZcbiAgICAgICAgISFncmVldGluZyAmJlxuICAgICAgICAhaXNQbGFubmVySG9tZSAmJlxuICAgICAgICAhaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgJiZcbiAgICAgICAgIWlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2sgJG5vR2FwPXshbWFpYUhlYWRlclN0YWNrTmVlZHNHYXB9ICRhbGlnbj17Y29udGVudEFsaWduU3RhcnQgPyAnc3RhcnQnIDogJ2NlbnRlcid9PlxuICAgICAgICB7IWlzUGxhbm5lckhvbWUgJiYgIWlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmICFpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSAmJiAoXG4gICAgICAgICAgPFNDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICAgICA8U0NDQUlIb21lTG9nb1dyYXBwZXI+XG4gICAgICAgICAgICAgIDxNQUlBSXNvbG9nbyAvPlxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVMb2dvV3JhcHBlcj5cbiAgICAgICAgICA8L1NDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICl9XG4gICAgICAgIHtpc1BsYW5uZXJIb21lICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lVGl0bGVCbG9jayAkYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlICRzaXplPVwibWRcIiAkYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUucGxhbm5lckhvbWUudGl0bGUnKX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGU+XG4gICAgICAgICAgICA8U0NDQUlIb21lU3VidGl0bGUgJGFsaWduPVwic3RhcnRcIj57dCgnaG9tZU1lbnUucGxhbm5lckhvbWUuc3VidGl0bGUnKX08L1NDQ0FJSG9tZVN1YnRpdGxlPlxuICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGVCbG9jaz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFpc1BsYW5uZXJIb21lICYmIGlzUmVjZW50Q29udGV4dHNTdGVwICYmIGlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lVGl0bGVCbG9jayAkYWxpZ249XCJzdGFydFwiICRmdWxsV2lkdGg+XG4gICAgICAgICAgICA8U0NDQUlIb21lVGl0bGUgJHNpemU9XCJjb250ZXh0XCIgJGFsaWduPVwic3RhcnRcIiAkZnVsbFdpZHRoPlxuICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUuY29udGV4dEhvbWUuZ3JlZXRpbmcnLCB7IG5hbWU6IHVzZXIuZmlyc3ROYW1lIH0pfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVUaXRsZT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVTdWJ0aXRsZSAkYWxpZ249XCJzdGFydFwiICRjb2xsYWJvcmF0b3JIb21lPlxuICAgICAgICAgICAgICB7dChoZWFkZXJUYXNrQ29udGV4dFN1YnRpdGxlS2V5KX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lU3VidGl0bGU+XG4gICAgICAgICAgPC9TQ0NBSUhvbWVUaXRsZUJsb2NrPlxuICAgICAgICApfVxuICAgICAgICB7IWlzUGxhbm5lckhvbWUgJiYgaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgIWlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlICRhbGlnbj17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUgPyAnc3RhcnQnIDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LmNvbnRleHRIb21lLmdyZWV0aW5nJywgeyBuYW1lOiB1c2VyLmZpcnN0TmFtZSB9KX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGU+XG4gICAgICAgICAgICA8U0NDQUlIb21lU3VidGl0bGUgJGFsaWduPXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA/ICdzdGFydCcgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICB7dChcbiAgICAgICAgICAgICAgICBpc0NvbGxhYm9yYXRvclJvbGUodXNlci5yb2xlX2lkKVxuICAgICAgICAgICAgICAgICAgPyAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGVDb2xsYWJvcmF0b3InXG4gICAgICAgICAgICAgICAgICA6ICdob21lTWVudS5jb250ZXh0SG9tZS5zdWJ0aXRsZSdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lU3VidGl0bGU+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICAgIHshaXNQbGFubmVySG9tZSAmJiAhaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgZ3JlZXRpbmcgJiYgKFxuICAgICAgICAgIDxTQ0NBSUhvbWVHcmVldGluZ1xuICAgICAgICAgICAgJGFsaWduPXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA/ICdzdGFydCcgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAkc2l6ZT17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUgPyAnbWQnIDogJ2xnJ31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Z3JlZXRpbmd9XG4gICAgICAgICAgPC9TQ0NBSUhvbWVHcmVldGluZz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlIb21lTWFpYUhlYWRlclN0YWNrPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGZpeGVkSG9tZUNvbnRlbnRXaWR0aCA9XG4gICAgaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgfHwgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWVcbiAgICAgID8gTUFJQV9IRUFERVJfQ09MTEFCT1JBVE9SX0hPTUVfQ09OVEVOVF9XSURUSF9QWFxuICAgICAgOiB1bmRlZmluZWRcbiAgY29uc3QgY29udGVudEFsaWduU3RhcnQgPSBpc1BsYW5uZXJIb21lIHx8IGlzSGVhZGVyVGFza0NvbnRleHRIb21lIHx8IGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lXG4gIGNvbnN0IHNob3dBZ2VudEludHJvZHVjdGlvbiA9IHNlY3Rpb24gIT09ICdwcm9qZWN0JyAmJiAhaXNNQUlBICYmICEhYWdlbnQ/LmludHJvZHVjdGlvblxuXG4gIGNvbnN0IGhvbWVNYWluID0gKFxuICAgIDxTQ0NBSUhvbWVDb250ZW50XG4gICAgICBzaG93RkFRcz17aG9tZVNjcm9sbGFibGVMYXlvdXR9XG4gICAgICAkaXNBZ2VudFZpZXc9eyFpc01BSUF9XG4gICAgICAkZmxvYXRpbmdDdXN0b21DZW50ZXI9e2Zsb2F0aW5nQ3VzdG9tQ2VudGVyfVxuICAgICAgJGNlbnRlclZlcnRpY2FsbHk9e2lzUGxhbm5lckhvbWV9XG4gICAgICAkYWxpZ25TdGFydD17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWV9XG4gICAgICAkZml4ZWRDb250ZW50V2lkdGg9e2ZpeGVkSG9tZUNvbnRlbnRXaWR0aH1cbiAgICA+XG4gICAgICA8U0NDQUlIb21lQ29udGVudElubmVyXG4gICAgICAgIHNob3dGQVFzPXtob21lU2Nyb2xsYWJsZUxheW91dH1cbiAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAkZmxvYXRpbmdDdXN0b21DZW50ZXI9e2Zsb2F0aW5nQ3VzdG9tQ2VudGVyfVxuICAgICAgICAkY2VudGVyVmVydGljYWxseT17aXNQbGFubmVySG9tZX1cbiAgICAgICAgJGFsaWduU3RhcnQ9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lIHx8IGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lfVxuICAgICAgICAkaGVhZGVyQ29sbGFib3JhdG9ySG9tZT17aXNIZWFkZXJUYXNrQ29udGV4dEhvbWV9XG4gICAgICAgICRzZWN0aW9uT3JjaGVzdHJhdG9ySG9tZT17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWV9XG4gICAgICA+XG4gICAgICAgIDxTQ0NBSUhvbWVIZWFkZXJcbiAgICAgICAgICAkZ2FwPXtzaG93QWdlbnRJbnRyb2R1Y3Rpb24gPyAnMjBweCcgOiAnMCd9XG4gICAgICAgICAgJG1heFdpZHRoPXtpc01BSUEgPyAnMTAwJScgOiAnMzgwcHgnfVxuICAgICAgICAgICRpc0FnZW50Vmlldz17IWlzTUFJQX1cbiAgICAgICAgICAkYWxpZ249e2NvbnRlbnRBbGlnblN0YXJ0ID8gJ3N0YXJ0JyA6ICdjZW50ZXInfVxuICAgICAgICA+XG4gICAgICAgICAge3JlbmRlckhlYWRlckNvbnRlbnQoKX1cblxuICAgICAgICAgIHtzaG93QWdlbnRJbnRyb2R1Y3Rpb24gPyAoXG4gICAgICAgICAgICA8U0NDQUlIb21lSW50cm9kdWN0aW9uIGV4cGFuZGVkPXtleHBhbmRlZH0+e2FnZW50LmludHJvZHVjdGlvbn08L1NDQ0FJSG9tZUludHJvZHVjdGlvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TQ0NBSUhvbWVIZWFkZXI+XG4gICAgICAgIHtzaG93UHJvamVjdFN1bW1hcnlDYXJkICYmIChcbiAgICAgICAgICA8U0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3Qgb25DbGljaz17aGFuZGxlcnMucHJvamVjdFN1bW1hcnl9PlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5PlxuICAgICAgICAgICAgICA8VGVtcGxhdGVHcmFkaWVudEljb24gaGVpZ2h0PXsyNH0gd2lkdGg9ezI0fSAvPlxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeVRpdGxlPnt0KCdob21lTWVudS5wcm9qZWN0U3VtbWFyeS50aXRsZScpfTwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZT5cbiAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LnByb2plY3RTdW1tYXJ5LmRlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50PlxuICAgICAgICAgIDwvU0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3Q+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG93RHluYW1pY1NlY3Rpb24gJiYgKFxuICAgICAgICAgIDxTQ0NBSUhvbWVEeW5hbWljU2VjdGlvblxuICAgICAgICAgICAgJGdyb3c9e2lzTWFpYWtlcn1cbiAgICAgICAgICAgICRhbGlnblN0YXJ0PXtpc0hlYWRlclRhc2tDb250ZXh0SG9tZSB8fCBpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7c2hvdWxkU2hvd0NvbGxhYm9yYXRvckZ1bGxzY3JlZW5GdWFzID8gKFxuICAgICAgICAgICAgICA8RnJlcXVlbnRseVVzZWRBY3Rpb25zXG4gICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e2hhbmRsZUhvbWVTdGFydENoYXR9XG4gICAgICAgICAgICAgICAgYWdlbnRJZD17YWdlbnQ/LmlkfVxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nPXtpc1Njcm9sbGluZ31cbiAgICAgICAgICAgICAgICBhY3Rpb25zPXtjb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhc31cbiAgICAgICAgICAgICAgICBsb2FkaW5nPXtjb2xsYWJvcmF0b3JGdWxsc2NyZWVuRnVhc0xvYWRpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzaG91bGRTaG93UGxhbm5lckZ1YXMgPyAoXG4gICAgICAgICAgICAgIDxGcmVxdWVudGx5VXNlZEFjdGlvbnNcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwicGxhbm5lclwiXG4gICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e2hhbmRsZUhvbWVTdGFydENoYXR9XG4gICAgICAgICAgICAgICAgYWdlbnRJZD17YWdlbnQ/LmlkfVxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nPXtpc1Njcm9sbGluZ31cbiAgICAgICAgICAgICAgICBhY3Rpb25zPXtoZWFkZXJIb3Vyc0Z1YXN9XG4gICAgICAgICAgICAgICAgbG9hZGluZz17aGVhZGVySG91cnNGdWFzTG9hZGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3JlbmRlclJlY2VudENvbnRleHRzKCl9XG4gICAgICAgICAgICB7c2hvdWxkU2hvd0ZhcXMgJiYgKFxuICAgICAgICAgICAgICA8RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fVxuICAgICAgICAgICAgICAgIHNob3dGQVFzPXtzaG93RkFRc31cbiAgICAgICAgICAgICAgICBzaG93UHJvamVjdFN1bW1hcnk9e3Nob3dQcm9qZWN0U3VtbWFyeX1cbiAgICAgICAgICAgICAgICBhZ2VudElkPXthZ2VudD8uaWR9XG4gICAgICAgICAgICAgICAgbGFuZz17bGFuZ31cbiAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgZmFxcz17ZmFxc31cbiAgICAgICAgICAgICAgICBsb2FkaW5nPXtmYXFzQXJlTG9hZGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7c2hvdWxkU2hvd0Z1YXMgJiYgKFxuICAgICAgICAgICAgICA8RnJlcXVlbnRseVVzZWRBY3Rpb25zXG4gICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fVxuICAgICAgICAgICAgICAgIGFnZW50SWQ9e2FnZW50Py5pZH1cbiAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgYWN0aW9ucz17ZnVhc31cbiAgICAgICAgICAgICAgICBsb2FkaW5nPXtmdWFzQXJlTG9hZGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7aXNNYWlha2VyID8gPENoYXRBSUhvbWVNYWlha2VyIG9uU3RhcnRDaGF0PXtvblN0YXJ0Q2hhdH0gLz4gOiBudWxsfVxuICAgICAgICAgIDwvU0NDQUlIb21lRHluYW1pY1NlY3Rpb24+XG4gICAgICAgICl9XG4gICAgICA8L1NDQ0FJSG9tZUNvbnRlbnRJbm5lcj5cbiAgICA8L1NDQ0FJSG9tZUNvbnRlbnQ+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSUhvbWVDb250YWluZXIgc2hvd0ZBUXM9e3Nob3dGQVFzfSAkYWxpZ25TdGFydD17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWV9PlxuICAgICAge2hvbWVTY3JvbGxhYmxlTGF5b3V0ICYmIDxTQ0NBSUhvbWVHcmFkaWVudFRvcCAkc2hvdz17c2hvd1RvcEdyYWRpZW50fSAvPn1cbiAgICAgIHtob21lU2Nyb2xsYWJsZUxheW91dCA/IChcbiAgICAgICAgPFNDQ0FJSG9tZVNjcm9sbCByZWY9e2NvbnRlbnRDb250YWluZXJSZWZ9ICRzY3JvbGxhYmxlPlxuICAgICAgICAgIHtob21lTWFpbn1cbiAgICAgICAgPC9TQ0NBSUhvbWVTY3JvbGw+XG4gICAgICApIDogKFxuICAgICAgICBob21lTWFpblxuICAgICAgKX1cbiAgICAgIHtob21lU2Nyb2xsYWJsZUxheW91dCAmJiA8U0NDQUlIb21lR3JhZGllbnRCb3R0b20gJHNob3c9e3Nob3dCb3R0b21HcmFkaWVudH0gLz59XG4gICAgPC9TQ0NBSUhvbWVDb250YWluZXI+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFNBQVMsRUFBRUMsZUFB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
|