@projectcor/maia-components 2.52.0 → 2.52.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.helpers.spec.js +63 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +183 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +3 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +139 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +385 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +3 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +94 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +24 -14
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +396 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +28 -10
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +526 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +19 -15
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +169 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +8 -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.helpers.spec.js +45 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +15 -13
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +133 -0
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.spec.js +107 -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.spec.js +109 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +319 -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.js +10 -6
- package/lib/components/atoms/Fade/Fade.spec.js +66 -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.attachments.helpers.js +3 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +113 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +3 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +381 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +123 -99
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +719 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +193 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +32 -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.js +9 -4
- 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.spec.js +35 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +4 -5
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +146 -0
- 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 +25 -10
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +78 -43
- 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.spec.js +70 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +37 -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.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.helpers.spec.js +71 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +120 -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.helpers.spec.js +25 -0
- package/lib/components/atoms/TextArea/TextArea.spec.js +126 -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 +82 -0
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +3 -2
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +780 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +107 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +256 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +6 -4
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +175 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +25 -16
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +318 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
- 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.helpers.spec.js +622 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +93 -72
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +264 -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.spec.js +967 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +30 -14
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +646 -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 +8 -1
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +1395 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +23 -8
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +1434 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
- 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.spec.js +142 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +63 -367
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js +69 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.spec.js +144 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentDropdown.js +95 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentSelector.js +174 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.js +99 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.spec.js +65 -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/ChatAIMultipleChoice/ChatAIMultipleChoice.spec.js +102 -0
- package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoiceAnswer.spec.js +49 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +93 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +297 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +62 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +221 -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 +548 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +104 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +5 -2
- 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.helpers.spec.js +119 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +526 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +1067 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1236 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +77 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +503 -0
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +217 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -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 +291 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +284 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +343 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +197 -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.js +11 -7
- 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.js +4 -1
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
- package/lib/constants/formatExtensions.spec.js +15 -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 +41 -0
- package/lib/constants/permissions/clientRoleAccess.spec.js +65 -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/constants/plannerSyncEvents.spec.js +31 -0
- package/lib/constants/taskUrls.spec.js +9 -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.helpers.spec.js +268 -0
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +314 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.js +7 -6
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +374 -0
- package/lib/hooks/useAgentSuggestions.spec.js +89 -0
- package/lib/hooks/useCaretPosition.spec.js +58 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.js +3 -3
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +2027 -0
- package/lib/hooks/useChatManager/useChatManager.js +8 -7
- package/lib/hooks/useChatManager/useChatManager.spec.js +2467 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +491 -0
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +729 -0
- package/lib/hooks/useChats/useChats.spec.js +208 -0
- package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
- package/lib/hooks/useClientSearch.spec.js +86 -0
- package/lib/hooks/useContextMentions.helpers.spec.js +267 -0
- package/lib/hooks/useContextMentions.spec.js +338 -0
- package/lib/hooks/useContextPinPopover.helpers.spec.js +183 -0
- 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/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.spec.js +257 -0
- package/lib/hooks/useDebounce.spec.js +42 -0
- package/lib/hooks/useEntitySearch.helpers.spec.js +723 -0
- package/lib/hooks/useEntitySearch.js +3 -1
- package/lib/hooks/useEntitySearch.spec.js +718 -0
- package/lib/hooks/useEvent.spec.js +45 -0
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
- package/lib/hooks/useFrequentlyUsedActions.js +61 -22
- package/lib/hooks/useFrequentlyUsedActions.spec.js +293 -0
- package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
- package/lib/hooks/useKnowledge/downloadKnowledge.js +4 -4
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
- package/lib/hooks/useKnowledge/useKnowledgeOperations.js +16 -15
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
- package/lib/hooks/useLatestRef.spec.js +50 -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.spec.js +100 -0
- package/lib/hooks/useMentionPopover.spec.js +392 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +176 -0
- 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.helpers.spec.js +138 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +485 -0
- package/lib/hooks/useProjectSearch.helpers.spec.js +89 -0
- package/lib/hooks/useProjectSearch.spec.js +91 -0
- package/lib/hooks/useProjectSummary.spec.js +193 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +151 -0
- package/lib/hooks/useProjectSummaryConfig.js +10 -5
- package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
- 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 +26 -1
- package/lib/lang/en/index.js +26 -1
- package/lib/lang/es/index.js +26 -1
- package/lib/lang/fr/index.js +26 -1
- package/lib/services/appcues.spec.js +37 -0
- 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 +121 -0
- package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
- package/lib/services/maia/Agents/connectors.js +3 -1
- package/lib/services/maia/Agents/connectors.spec.js +496 -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.spec.js +325 -0
- package/lib/services/maia/Agents/getAgents.spec.js +1135 -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 +181 -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.spec.js +261 -0
- 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.helpers.spec.js +336 -0
- package/lib/services/utils/mapChatMessages.multipleChoice.spec.js +87 -0
- package/lib/services/utils/mapChatMessages.spec.js +254 -0
- package/lib/store/chatsSidebarOptimistic.spec.js +145 -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.spec.js +63 -0
- package/lib/store/sessions/sessionNotifications.spec.js +106 -0
- package/lib/store/sessions/sessionStreamManager.helpers.spec.js +177 -0
- package/lib/store/sessions/sessionStreamManager.js +51 -55
- package/lib/store/sessions/sessionStreamManager.spec.js +939 -0
- package/lib/store/sessions/sessions.types.spec.js +16 -0
- package/lib/store/sessions/useSessionsStore.spec.js +135 -0
- package/lib/store/useChatsStore.js +4 -3
- package/lib/store/useChatsStore.spec.js +690 -0
- package/lib/store/useFaqsStore.spec.js +57 -0
- package/lib/store/useMultipleChoiceStore.spec.js +44 -0
- package/lib/styles/cascade.js +29 -3
- package/lib/styles/transitions.js +3 -1
- package/lib/types/global.d.js +1 -1
- package/lib/utils/actionCategoryMap.spec.js +18 -0
- package/lib/utils/agentDisplayName.spec.js +48 -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 +44 -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 +136 -0
- package/lib/utils/hoursPlannerQuickActionType.js +116 -1
- package/lib/utils/hoursPlannerQuickActionType.spec.js +124 -0
- package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
- package/lib/utils/imagePreprocessor.js +14 -3
- package/lib/utils/imagePreprocessor.spec.js +112 -0
- package/lib/utils/maiaPageRoute.spec.js +23 -0
- package/lib/utils/mapBackendLang.spec.js +19 -0
- package/lib/utils/navigateContextEntity.js +2 -2
- package/lib/utils/navigateContextEntity.spec.js +50 -0
- package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
- package/lib/utils/openTaskInCorPanel.js +2 -2
- package/lib/utils/openTaskInCorPanel.spec.js +43 -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.helpers.spec.js +87 -0
- package/lib/utils/renderContextMentions.spec.js +268 -0
- package/lib/utils/retryCompletion.spec.js +181 -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.helpers.js +5 -4
- package/lib/utils/streamActivityMessages.helpers.spec.js +84 -0
- package/lib/utils/streamActivityMessages.js +32 -20
- package/lib/utils/streamActivityMessages.spec.js +336 -0
- package/lib/utils/validateTrimmedFields.spec.js +26 -0
- package/package.json +1 -1
- package/README.md +0 -2
|
@@ -56,7 +56,7 @@ import { ChatAICreateAgentActions } from './ChatAICreateAgentActions';
|
|
|
56
56
|
import { ChatAIMultipleChoiceAnswer } from '../ChatAIMultipleChoice/ChatAIMultipleChoiceAnswer';
|
|
57
57
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
58
58
|
import { downloadFileFromUrl } from '../../../utils/fileDownloadHelper';
|
|
59
|
-
import { canOpenAttachmentPreview, canRetryAssistantMessage, computeDistanceFromBottom, computeRemovableTurnSpace, computeSyncedTurnSpacerHeight, computeTurnScrollDurationMs, computeTurnScrollTargetTop, countUserMessageAttachments, easeOutExpoScrollProgress, extractFeedbackSessionId, findLastQuestionId, hasInitialUserMessageInList, hasMessageLevelStreamIndicator, isActiveStreamingState, isAnswerOrQuestionChatMessageId, isApprovalChatMessage, isAssistantChatMessage, isAudioAttachment, isCurrentUserMessage, isNewChatMessageEvent, isRetrySuggestionSelection, resolveAttachmentDownloadBlobStrategy, resolveAttachmentDownloadFileName, resolveAttachmentDownloadUrl, resolveChatListItemStreamingFlags, resolveDisableFeedbackFromWasHelpful, resolveMessageAttachments, resolveRetryAttachmentsFromUserMessage, shouldAutoScrollOnMessagesChange, shouldHideAssistantSuggestions, shouldHideEmptyStreamingBody, shouldIgnoreSuggestionClick, shouldOpenMessageOption, shouldReleaseTurnSpace, shouldRenderAssistantFeedback, shouldRenderAssistantSuggestions, shouldRenderChangeProjectMessage, shouldRenderCreateAgentActions, shouldRenderMessageTextBody, shouldShowApprovalActions, shouldShowBottomScrollGradient, shouldShowGlobalStreamLoadingIndicator, shouldShowMessageAttachmentsRow, shouldShowScrollToBottom, shouldShowStreamActivityIndicator, shouldShowStreamingMessageBody, shouldShowTopScrollGradient, shouldSkipEmptyChatListMessage, isSamePendingMultipleChoice, resolveAnsweredMultipleChoices, resolvePendingMultipleChoice, resolveTurnAnchorId, shouldSkipTurnScrollAnimation, shouldRunStreamTurnSyncEffect, shouldUpdateSpacerHeight, buildSmoothStreamTextOptions, computeMeasureTurnLayout, detectJustFinishedLoadingMessages, processChatMessagesScrollFrame, readSmoothStreamWindowFlags, resolveReserveTurnSpacePlan, resolveScrollToBottomTargetTop, resolveContainerAtBottom, resolveCreateAgentActionsAgentId, resolveFeedbackPropsForCancelled, resolveLastUserMessageForAttachments, resolveMessageListItemKey, resolvePendingScrollTopFromSession, resolveReasoningTraceHookId,
|
|
59
|
+
import { canOpenAttachmentPreview, canRetryAssistantMessage, computeDistanceFromBottom, computeRemovableTurnSpace, computeSyncedTurnSpacerHeight, computeTurnScrollDurationMs, computeTurnScrollTargetTop, countUserMessageAttachments, easeOutExpoScrollProgress, extractFeedbackSessionId, findLastQuestionId, hasInitialUserMessageInList, hasMessageLevelStreamIndicator, isActiveStreamingState, isAnswerOrQuestionChatMessageId, isApprovalChatMessage, isAssistantChatMessage, isAudioAttachment, isCurrentUserMessage, isNewChatMessageEvent, isRetrySuggestionSelection, resolveAttachmentDownloadBlobStrategy, resolveAttachmentDownloadFileName, resolveAttachmentDownloadUrl, resolveChatListItemStreamingFlags, resolveDisableFeedbackFromWasHelpful, resolveMessageAttachments, resolveRetryAttachmentsFromUserMessage, shouldAutoScrollOnMessagesChange, shouldHideAssistantSuggestions, shouldHideEmptyStreamingBody, shouldIgnoreSuggestionClick, shouldOpenMessageOption, shouldReleaseTurnSpace, shouldRenderAssistantFeedback, shouldRenderAssistantSuggestions, shouldRenderChangeProjectMessage, shouldRenderCreateAgentActions, shouldRenderMessageTextBody, shouldShowApprovalActions, shouldShowBottomScrollGradient, shouldShowGlobalStreamLoadingIndicator, shouldShowMessageAttachmentsRow, shouldShowScrollToBottom, shouldShowStreamActivityIndicator, shouldShowStreamingMessageBody, shouldShowTopScrollGradient, shouldSkipEmptyChatListMessage, isSamePendingMultipleChoice, resolveAnsweredMultipleChoices, resolvePendingMultipleChoice, resolveTurnAnchorId, shouldSkipTurnScrollAnimation, shouldRunStreamTurnSyncEffect, shouldUpdateSpacerHeight, buildSmoothStreamTextOptions, computeMeasureTurnLayout, detectJustFinishedLoadingMessages, processChatMessagesScrollFrame, readSmoothStreamWindowFlags, resolveReserveTurnSpacePlan, resolveScrollToBottomTargetTop, resolveContainerAtBottom, resolveCreateAgentActionsAgentId, resolveFeedbackPropsForCancelled, resolveLastUserMessageForAttachments, resolveMessageListItemKey, resolvePendingScrollTopFromSession, resolveReasoningTraceHookId, resolveStreamingMessageHookId, resolveStreamingRawText, resolveStreamingTextHookId, resolveSuggestionAnalyticsAgentType, shouldApplyPendingScrollRestore, shouldClearLastReservedQuestion, shouldClearScrollRestoreWithoutChat, shouldInitializeChat, shouldRenderMentionInlineNodes, shouldRestoreScrollOnExpandedChange, shouldRunSessionCacheScrollToBottom, shouldScheduleTurnSpaceReservation, shouldScrollToBottomAfterLoad, shouldSkipMessagesScrollEffect, shouldUpdateScrollAffordancesOnLoadEnd } from './ChatAIMessages.helpers';
|
|
60
60
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
61
61
|
var MessageWrapper = function MessageWrapper(_ref) {
|
|
62
62
|
var isCurrentUser = _ref.isCurrentUser,
|
|
@@ -239,7 +239,9 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
239
239
|
var _useReasoningTrace = useReasoningTrace(isAssistant ? id : ''),
|
|
240
240
|
liveCompaction = _useReasoningTrace.compaction;
|
|
241
241
|
var compaction = (_ref4 = liveCompaction !== null && liveCompaction !== void 0 ? liveCompaction : props.compaction) !== null && _ref4 !== void 0 ? _ref4 : null;
|
|
242
|
-
var streamNarrationInTimeline = isAssistant && shouldStreamNarrationInTimeline(reasoningTrace.steps, streamActivity, streamingText,
|
|
242
|
+
var streamNarrationInTimeline = isAssistant && shouldStreamNarrationInTimeline(reasoningTrace.steps, streamActivity, streamingText, {
|
|
243
|
+
messageId: id
|
|
244
|
+
});
|
|
243
245
|
var showStreamingBody = shouldShowStreamingMessageBody(isActiveStreaming, hasStreamText, streamNarrationInTimeline);
|
|
244
246
|
var showActivityIndicator = shouldShowStreamActivityIndicator(isAssistant, isActiveStreaming, streamActivity);
|
|
245
247
|
var messageAttachments = resolveMessageAttachments(attachments, isAssistant, sources);
|
|
@@ -429,7 +431,9 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref6) {
|
|
|
429
431
|
onScrollToBottom = _ref6.onScrollToBottom,
|
|
430
432
|
attachments = _ref6.attachments,
|
|
431
433
|
agents = _ref6.agents,
|
|
432
|
-
expanded = _ref6.expanded
|
|
434
|
+
expanded = _ref6.expanded,
|
|
435
|
+
_ref6$skipEnterAnimat = _ref6.skipEnterAnimation,
|
|
436
|
+
skipEnterAnimation = _ref6$skipEnterAnimat === void 0 ? false : _ref6$skipEnterAnimat;
|
|
433
437
|
var _useT = useT(),
|
|
434
438
|
t = _useT.t;
|
|
435
439
|
var _useGlobalContext = useGlobalContext(),
|
|
@@ -631,6 +635,25 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref6) {
|
|
|
631
635
|
cancelTurnScroll();
|
|
632
636
|
releaseTurnSpace();
|
|
633
637
|
}, [cancelTurnScroll, releaseTurnSpace]);
|
|
638
|
+
|
|
639
|
+
/** En fullscreen el wheel en márgenes/overlay cae fuera de SCMessagesScroll; reenviamos al scroller del hilo. */
|
|
640
|
+
var handleMessagesOuterWheel = useCallback(function (event) {
|
|
641
|
+
handleUserScrollIntent();
|
|
642
|
+
var scroller = messagesRef.current;
|
|
643
|
+
if (!scroller) return;
|
|
644
|
+
var target = event.target;
|
|
645
|
+
if (target !== event.currentTarget && (target === scroller || scroller.contains(target))) {
|
|
646
|
+
return;
|
|
647
|
+
}
|
|
648
|
+
var deltaY = event.deltaY;
|
|
649
|
+
if (deltaY === 0) return;
|
|
650
|
+
var maxScroll = scroller.scrollHeight - scroller.clientHeight;
|
|
651
|
+
if (maxScroll <= 0) return;
|
|
652
|
+
var nextScrollTop = Math.min(maxScroll, Math.max(0, scroller.scrollTop + deltaY));
|
|
653
|
+
if (nextScrollTop === scroller.scrollTop) return;
|
|
654
|
+
scroller.scrollTop = nextScrollTop;
|
|
655
|
+
event.preventDefault();
|
|
656
|
+
}, [handleUserScrollIntent]);
|
|
634
657
|
var measureTurn = useCallback(function (questionId) {
|
|
635
658
|
var el = messagesRef.current;
|
|
636
659
|
var spacerEl = spacerElRef.current;
|
|
@@ -998,7 +1021,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref6) {
|
|
|
998
1021
|
attachmentsCount: attachmentsCount,
|
|
999
1022
|
t: t
|
|
1000
1023
|
});
|
|
1001
|
-
var isScrollOnParent = resolveScrollOnParentMode(expanded);
|
|
1002
1024
|
useEffect(function () {
|
|
1003
1025
|
var _session$scrollSessio, _session$scrollTop;
|
|
1004
1026
|
if (shouldClearScrollRestoreWithoutChat(initialChatId)) {
|
|
@@ -1120,24 +1142,18 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref6) {
|
|
|
1120
1142
|
// Si el usuario mueve el scroll abortamos la animación y soltamos el turno:
|
|
1121
1143
|
// no le peleamos el control del contenedor.
|
|
1122
1144
|
_jsxs(SCMessagesOuter, {
|
|
1123
|
-
|
|
1124
|
-
onWheel: handleUserScrollIntent,
|
|
1145
|
+
onWheel: handleMessagesOuterWheel,
|
|
1125
1146
|
onTouchStart: handleUserScrollIntent,
|
|
1126
1147
|
children: [/*#__PURE__*/_jsx(SCMessagesGradientTop, {
|
|
1127
1148
|
$show: showTopGradient,
|
|
1128
1149
|
"aria-hidden": "true"
|
|
1129
|
-
}),
|
|
1150
|
+
}), /*#__PURE__*/_jsx(SCMessagesScroll, {
|
|
1130
1151
|
ref: messagesRef,
|
|
1131
1152
|
onScroll: handleScrollToBottom,
|
|
1132
1153
|
children: /*#__PURE__*/_jsx(SCMessagesInner, {
|
|
1133
|
-
$
|
|
1154
|
+
$skipEnter: skipEnterAnimation,
|
|
1134
1155
|
children: messagesContent
|
|
1135
1156
|
})
|
|
1136
|
-
}) : /*#__PURE__*/_jsx(SCMessagesInner, {
|
|
1137
|
-
ref: messagesRef,
|
|
1138
|
-
onScroll: handleScrollToBottom,
|
|
1139
|
-
$scrollOnParent: false,
|
|
1140
|
-
children: messagesContent
|
|
1141
1157
|
}), /*#__PURE__*/_jsx(SCMessagesGradientBottom, {
|
|
1142
1158
|
$show: showBottomGradient,
|
|
1143
1159
|
"aria-hidden": "true"
|
|
@@ -1172,4 +1188,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref6) {
|
|
|
1172
1188
|
);
|
|
1173
1189
|
};
|
|
1174
1190
|
export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
|
|
1175
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZUVsZW1lbnQiLCJfY3JlYXRlRWxlbWVudCIsIkF0dGFjaG1lbnRDYXJkIiwiQXBwcm92YWxCb3giLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiQXR0YWNobWVudENhcmRBdWRpbyIsIk1haWFTdHJlYW1kb3duIiwiQ2hhdEhpc3RvcnlSb2xlIiwicmVuZGVyVGV4dFdpdGhNZW50aW9ucyIsImhhc0lubGluZU1hcmtlcnMiLCJpc01haWFrZXJBZ2VudCIsInVzZVVzZXIiLCJ1c2VUIiwidXNlQ2hhdE1hbmFnZXIiLCJ1c2VTbW9vdGhTdHJlYW1UZXh0IiwidXNlU3RyZWFtaW5nTWVzc2FnZSIsIkxvYWRpbmdUZXh0IiwiQWdlbnRBY3Rpdml0eUluZGljYXRvciIsIlJlYXNvbmluZ0Jsb2NrIiwic2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsIlJlYXNvbmluZ1RpbWVsaW5lIiwiU0NUaW1lbGluZUluZGljYXRvciIsIkNvbnRleHRDb21wYWN0ZWROb3RpY2UiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwicmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IiwicmVzb2x2ZVJldHJ5VHVybklkIiwiZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkiLCJ1c2VSZWFzb25pbmdUcmFjZSIsIkxvYWRlciIsIkZhZGUiLCJwYXRjaE1haWFQYW5lbFNlc3Npb24iLCJyZWFkTWFpYVBhbmVsU2Vzc2lvbiIsInVzZU11bHRpcGxlQ2hvaWNlU3RvcmUiLCJNZXNzYWdlRnJvbVVzZXIiLCJNZXNzYWdlRnJvbU90aGVyIiwiTWVzc2FnZUNvbnRlbnRGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbU90aGVyIiwiTWVzc2FnZUZlZWRiYWNrIiwiU0NDQUlNZXNzYWdlV3JhcHBlciIsIlNjcm9sbFRvQm90dG9tQnV0dG9uIiwiU0NTY3JvbGxJY29uU3dhcCIsIlNDV3JpdGluZ0RvdHMiLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NUdXJuU3BhY2VyIiwiU0NPcHRpb25zTGlzdCIsIlNDT3B0aW9uSXRlbSIsIlNDTWVzc2FnZUl0ZW1XcmFwcGVyIiwiU0NNZXNzYWdlSXRlbUlubmVyIiwiU0NBdHRhY2htZW50c1JvdyIsIlNDQXBwcm92YWxBY3Rpb25zQ29sdW1uIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ01lc3NhZ2VzR3JhZGllbnRUb3AiLCJTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20iLCJ1c2VHbG9iYWxDb250ZXh0IiwiRW50aXR5TGlua0N1c3RvbUxpbmsiLCJnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSIsIkNoYXRBSVN1Z2dlc3Rpb25zIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiQ2hhdEFJTXVsdGlwbGVDaG9pY2VBbnN3ZXIiLCJFVkVOVFMiLCJ1c2VFdmVudCIsImRvd25sb2FkRmlsZUZyb21VcmwiLCJjYW5PcGVuQXR0YWNobWVudFByZXZpZXciLCJjYW5SZXRyeUFzc2lzdGFudE1lc3NhZ2UiLCJjb21wdXRlRGlzdGFuY2VGcm9tQm90dG9tIiwiY29tcHV0ZVJlbW92YWJsZVR1cm5TcGFjZSIsImNvbXB1dGVTeW5jZWRUdXJuU3BhY2VySGVpZ2h0IiwiY29tcHV0ZVR1cm5TY3JvbGxEdXJhdGlvbk1zIiwiY29tcHV0ZVR1cm5TY3JvbGxUYXJnZXRUb3AiLCJjb3VudFVzZXJNZXNzYWdlQXR0YWNobWVudHMiLCJlYXNlT3V0RXhwb1Njcm9sbFByb2dyZXNzIiwiZXh0cmFjdEZlZWRiYWNrU2Vzc2lvbklkIiwiZmluZExhc3RRdWVzdGlvbklkIiwiaGFzSW5pdGlhbFVzZXJNZXNzYWdlSW5MaXN0IiwiaGFzTWVzc2FnZUxldmVsU3RyZWFtSW5kaWNhdG9yIiwiaXNBY3RpdmVTdHJlYW1pbmdTdGF0ZSIsImlzQW5zd2VyT3JRdWVzdGlvbkNoYXRNZXNzYWdlSWQiLCJpc0FwcHJvdmFsQ2hhdE1lc3NhZ2UiLCJpc0Fzc2lzdGFudENoYXRNZXNzYWdlIiwiaXNBdWRpb0F0dGFjaG1lbnQiLCJpc0N1cnJlbnRVc2VyTWVzc2FnZSIsImlzTmV3Q2hhdE1lc3NhZ2VFdmVudCIsImlzUmV0cnlTdWdnZXN0aW9uU2VsZWN0aW9uIiwicmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZEJsb2JTdHJhdGVneSIsInJlc29sdmVBdHRhY2htZW50RG93bmxvYWRGaWxlTmFtZSIsInJlc29sdmVBdHRhY2htZW50RG93bmxvYWRVcmwiLCJyZXNvbHZlQ2hhdExpc3RJdGVtU3RyZWFtaW5nRmxhZ3MiLCJyZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwiLCJyZXNvbHZlTWVzc2FnZUF0dGFjaG1lbnRzIiwicmVzb2x2ZVJldHJ5QXR0YWNobWVudHNGcm9tVXNlck1lc3NhZ2UiLCJzaG91bGRBdXRvU2Nyb2xsT25NZXNzYWdlc0NoYW5nZSIsInNob3VsZEhpZGVBc3Npc3RhbnRTdWdnZXN0aW9ucyIsInNob3VsZEhpZGVFbXB0eVN0cmVhbWluZ0JvZHkiLCJzaG91bGRJZ25vcmVTdWdnZXN0aW9uQ2xpY2siLCJzaG91bGRPcGVuTWVzc2FnZU9wdGlvbiIsInNob3VsZFJlbGVhc2VUdXJuU3BhY2UiLCJzaG91bGRSZW5kZXJBc3Npc3RhbnRGZWVkYmFjayIsInNob3VsZFJlbmRlckFzc2lzdGFudFN1Z2dlc3Rpb25zIiwic2hvdWxkUmVuZGVyQ2hhbmdlUHJvamVjdE1lc3NhZ2UiLCJzaG91bGRSZW5kZXJDcmVhdGVBZ2VudEFjdGlvbnMiLCJzaG91bGRSZW5kZXJNZXNzYWdlVGV4dEJvZHkiLCJzaG91bGRTaG93QXBwcm92YWxBY3Rpb25zIiwic2hvdWxkU2hvd0JvdHRvbVNjcm9sbEdyYWRpZW50Iiwic2hvdWxkU2hvd0dsb2JhbFN0cmVhbUxvYWRpbmdJbmRpY2F0b3IiLCJzaG91bGRTaG93TWVzc2FnZUF0dGFjaG1lbnRzUm93Iiwic2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tIiwic2hvdWxkU2hvd1N0cmVhbUFjdGl2aXR5SW5kaWNhdG9yIiwic2hvdWxkU2hvd1N0cmVhbWluZ01lc3NhZ2VCb2R5Iiwic2hvdWxkU2hvd1RvcFNjcm9sbEdyYWRpZW50Iiwic2hvdWxkU2tpcEVtcHR5Q2hhdExpc3RNZXNzYWdlIiwiaXNTYW1lUGVuZGluZ011bHRpcGxlQ2hvaWNlIiwicmVzb2x2ZUFuc3dlcmVkTXVsdGlwbGVDaG9pY2VzIiwicmVzb2x2ZVBlbmRpbmdNdWx0aXBsZUNob2ljZSIsInJlc29sdmVUdXJuQW5jaG9ySWQiLCJzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbiIsInNob3VsZFJ1blN0cmVhbVR1cm5TeW5jRWZmZWN0Iiwic2hvdWxkVXBkYXRlU3BhY2VySGVpZ2h0IiwiYnVpbGRTbW9vdGhTdHJlYW1UZXh0T3B0aW9ucyIsImNvbXB1dGVNZWFzdXJlVHVybkxheW91dCIsImRldGVjdEp1c3RGaW5pc2hlZExvYWRpbmdNZXNzYWdlcyIsInByb2Nlc3NDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZSIsInJlYWRTbW9vdGhTdHJlYW1XaW5kb3dGbGFncyIsInJlc29sdmVSZXNlcnZlVHVyblNwYWNlUGxhbiIsInJlc29sdmVTY3JvbGxUb0JvdHRvbVRhcmdldFRvcCIsInJlc29sdmVDb250YWluZXJBdEJvdHRvbSIsInJlc29sdmVDcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwicmVzb2x2ZUZlZWRiYWNrUHJvcHNGb3JDYW5jZWxsZWQiLCJyZXNvbHZlTGFzdFVzZXJNZXNzYWdlRm9yQXR0YWNobWVudHMiLCJyZXNvbHZlTWVzc2FnZUxpc3RJdGVtS2V5IiwicmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbiIsInJlc29sdmVSZWFzb25pbmdUcmFjZUhvb2tJZCIsInJlc29sdmVTY3JvbGxPblBhcmVudE1vZGUiLCJyZXNvbHZlU3RyZWFtaW5nTWVzc2FnZUhvb2tJZCIsInJlc29sdmVTdHJlYW1pbmdSYXdUZXh0IiwicmVzb2x2ZVN0cmVhbWluZ1RleHRIb29rSWQiLCJyZXNvbHZlU3VnZ2VzdGlvbkFuYWx5dGljc0FnZW50VHlwZSIsInNob3VsZEFwcGx5UGVuZGluZ1Njcm9sbFJlc3RvcmUiLCJzaG91bGRDbGVhckxhc3RSZXNlcnZlZFF1ZXN0aW9uIiwic2hvdWxkQ2xlYXJTY3JvbGxSZXN0b3JlV2l0aG91dENoYXQiLCJzaG91bGRJbml0aWFsaXplQ2hhdCIsInNob3VsZFJlbmRlck1lbnRpb25JbmxpbmVOb2RlcyIsInNob3VsZFJlc3RvcmVTY3JvbGxPbkV4cGFuZGVkQ2hhbmdlIiwic2hvdWxkUnVuU2Vzc2lvbkNhY2hlU2Nyb2xsVG9Cb3R0b20iLCJzaG91bGRTY2hlZHVsZVR1cm5TcGFjZVJlc2VydmF0aW9uIiwic2hvdWxkU2Nyb2xsVG9Cb3R0b21BZnRlckxvYWQiLCJzaG91bGRTa2lwTWVzc2FnZXNTY3JvbGxFZmZlY3QiLCJzaG91bGRVcGRhdGVTY3JvbGxBZmZvcmRhbmNlc09uTG9hZEVuZCIsImpzeCIsIl9qc3giLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImpzeHMiLCJfanN4cyIsIk1lc3NhZ2VXcmFwcGVyIiwiX3JlZiIsImlzQ3VycmVudFVzZXIiLCJjaGlsZHJlbiIsInByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiTWVzc2FnZUNvbXBvbmVudCIsIl9vYmplY3RTcHJlYWQiLCJNZXNzYWdlQ29udGVudFdyYXBwZXIiLCJfcmVmMiIsIl9leGNsdWRlZDIiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIk1lc3NhZ2VPcHRpb25zIiwiX3JlZjMiLCJvcHRpb25zIiwiaGFuZGxlU2VsZWN0T3B0aW9uIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VsZWN0ZWRPcHRpb24iLCJzZXRTZWxlY3RlZE9wdGlvbiIsImhhbmRsZVNlbGVjdCIsIm9wdGlvbiIsIm1hcCIsIiRoYXNTZWxlY3Rpb24iLCIkZGltbWVkIiwiaWQiLCJvbkNsaWNrIiwibmFtZSIsIlN0cmVhbWluZ01lc3NhZ2VCb2R5IiwiX3Byb3BzJHN1Z2dlc3Rpb25zJGxlIiwiX3Byb3BzJHN1Z2dlc3Rpb25zIiwic3RyZWFtaW5nVGV4dCIsImlzU3RyZWFtaW5nIiwibWVzc2FnZUlkIiwicmF3VGV4dCIsIm1lc3NhZ2UiLCJ3aW5GbGFncyIsImRpc3BsYXlUZXh0IiwiY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsIm1lc3NhZ2VCb2R5IiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImNsYXNzTmFtZSIsInN0eWxlIiwiZGlzcGxheSIsInZhcmlhbnQiLCJjb21wb25lbnRzIiwiYSIsImlzQW5pbWF0aW5nIiwicmVzb2x2ZWRNdWx0aXBsZUNob2ljZUFuc3dlciIsImFuc3dlciIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwibXVsdGlwbGVDaG9pY2UiLCJvblJldHJ5IiwiY29udGVudCIsInNvdXJjZXMiLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnNMZW5ndGgiLCJzdWdnZXN0aW9ucyIsImxlbmd0aCIsIm9uU2VsZWN0U3VnZ2VzdGlvbiIsInN1Z2dlc3Rpb24iLCJoYW5kbGVTdWdnZXN0aW9uQ2xpY2siLCJkaXNhYmxlZCIsInN1Z2dlc3Rpb25zRGlzYWJsZWQiLCJoaWRkZW4iLCJpc0xhc3RNZXNzYWdlIiwiYWdlbnRJZCIsIk1lc3NhZ2VJdGVtIiwiX3JlZjQiLCJfcHJvcHMkcmVhc29uaW5nIiwiX3Byb3BzJHByb2plY3RNZXRhZGF0IiwidXNlciIsImF1dGhVc2VyIiwiaXNDaGFuZ2VQcm9qZWN0IiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiaGFuZGxlUmV0cnkiLCJyb2xlIiwiYXR0YWNobWVudHMiLCJhcHByb3ZhbFN0YXR1cyIsImhhc1NlbGVjdGVkU3VnZ2VzdGlvbiIsInN0cmVhbUFjdGl2aXR5IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwidG9TdHJpbmciLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwiQm9vbGVhbiIsImlzQWN0aXZlU3RyZWFtaW5nIiwiaGFzU3RyZWFtVGV4dCIsInJlYXNvbmluZ1RyYWNlIiwiX3VzZVJlYXNvbmluZ1RyYWNlIiwibGl2ZUNvbXBhY3Rpb24iLCJjb21wYWN0aW9uIiwic3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInN0ZXBzIiwic2hvd1N0cmVhbWluZ0JvZHkiLCJzaG93QWN0aXZpdHlJbmRpY2F0b3IiLCJtZXNzYWdlQXR0YWNobWVudHMiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiaGFuZGxlQ2xvc2VQcmV2aWV3IiwiaGFuZGxlQXR0YWNobWVudERvd25sb2FkIiwiX3JlZjUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImZpbGVOYW1lIiwiZmlsZVVybCIsImJsb2JVcmwiLCJkb3dubG9hZFN0cmF0ZWd5IiwiZG93bmxvYWRlZEZpbGUiLCJsaW5rIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImZpbGUiLCJ0eXBlIiwic2VudCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIkZpbGUiLCJhYnJ1cHQiLCJkb2N1bWVudCIsImhyZWYiLCJkb3dubG9hZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwic2V0VGltZW91dCIsInJlbW92ZUNoaWxkIiwicmV2b2tlT2JqZWN0VVJMIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYXNGZWVkYmFjayIsIiRpc0Fzc2lzdGFudCIsIm1lc3NhZ2VFeHRyYUNvbnRlbnQiLCJmZWVkYmFjayIsInRyYWNlIiwicmVhc29uaW5nIiwiaW5kZXgiLCJjb25jYXQiLCJwb3NpdGlvbkluZGV4Iiwib25Eb3dubG9hZCIsIm1lc3NhZ2VUZXh0IiwiYXR0YWNobWVudENvdW50IiwiYWN0aXZpdHkiLCJjb21wYWN0IiwiYWN0aW9ucyIsInBlbmRpbmdfYWN0aW9ucyIsInN0YXR1cyIsIm9uQXBwcm92ZSIsInRocmVhZElkcyIsIm1ldGFkYXRhIiwidW5kZWZpbmVkIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmNiIsInVzZXJJbml0aWFsTWVzc2FnZSIsImluaXRpYWxDaGF0SWQiLCJvbkVycm9yIiwib25TZW5kTWVzc2FnZVJlYWR5Iiwib25TY3JvbGxUb0JvdHRvbSIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwic2Nyb2xsVGhyZXNob2xkUmVmIiwibGFzdFNjcm9sbFRvcFJlZiIsInNob3dTY3JvbGxUb0JvdHRvbVJlZiIsInNob3dUb3BHcmFkaWVudFJlZiIsInNob3dCb3R0b21HcmFkaWVudFJlZiIsInNjcm9sbFJhZlJlZiIsImFuY2hvcmVkVHVybklkUmVmIiwic3BhY2VyRWxSZWYiLCJzcGFjZXJIZWlnaHRSZWYiLCJ0dXJuU2Nyb2xsUmFmUmVmIiwid2FzTG9hZGluZ01lc3NhZ2VzUmVmIiwibGFzdFNjcm9sbGVkU2Vzc2lvblJlZiIsInBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmIiwic2Nyb2xsUGVyc2lzdFRpbWVyUmVmIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzaG93U2Nyb2xsVG9Cb3R0b20iLCJzZXRTaG93U2Nyb2xsVG9Cb3R0b20iLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNob3dUb3BHcmFkaWVudCIsInNldFNob3dUb3BHcmFkaWVudCIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2hvd0JvdHRvbUdyYWRpZW50Iiwic2V0U2hvd0JvdHRvbUdyYWRpZW50IiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsInNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJfdXNlQ2hhdE1hbmFnZXIiLCJjaGF0SWQiLCJtZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsIndhaXRpbmdSZXNwb25zZSIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwiYWN0aXZlTG9hZGluZ3MiLCJzZW5kTWVzc2FnZSIsInJldHJ5TWVzc2FnZSIsImNoYW5nZVByb2plY3QiLCJpbml0aWFsaXplQ2hhdCIsImhhbmRsZVNjcm9sbCIsInN0b3BHZW5lcmF0aW9uIiwidXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMiLCJlbCIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJzaG91bGRTaG93IiwibmV4dFRvcEdyYWRpZW50IiwibmV4dEJvdHRvbUdyYWRpZW50Iiwic2Nyb2xsVG9Cb3R0b21UaW1lb3V0UmVmIiwic2Nyb2xsVG9Cb3R0b21SYWYiLCJvcHRzIiwiX29wdHMkZGVsYXlNcyIsImRlbGF5TXMiLCJydW4iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjbGVhclRpbWVvdXQiLCJjYW5jZWxUdXJuU2Nyb2xsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJhbmltYXRlU2Nyb2xsVG8iLCJ0b3AiLCJmcm9tIiwiZGlzdGFuY2UiLCJkdXJhdGlvbiIsInN0YXJ0ZWRBdCIsInBlcmZvcm1hbmNlIiwibm93Iiwic3RlcCIsInByb2dyZXNzIiwiTWF0aCIsIm1pbiIsImVhc2VkIiwic2V0U3BhY2VySGVpZ2h0IiwiaGVpZ2h0IiwiY2xlYXJUdXJuU3BhY2UiLCJkcmFpblR1cm5TcGFjZSIsInJlbGVhc2VUdXJuU3BhY2UiLCJoYW5kbGVVc2VyU2Nyb2xsSW50ZW50IiwibWVhc3VyZVR1cm4iLCJxdWVzdGlvbklkIiwic3BhY2VyRWwiLCJxdWVzdGlvbkVsIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5lclRvcCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIl9jb21wdXRlTWVhc3VyZVR1cm5MYSIsInF1ZXN0aW9uVG9wIiwiY29udGVudEJvdHRvbSIsInR1cm5IZWlnaHQiLCJyZXNlcnZlVHVyblNwYWNlIiwibWVhc3VyZWQiLCJ0YXJnZXRTY3JvbGxUb3AiLCJwbGFuIiwiY3VycmVudFNjcm9sbFRvcCIsImtpbmQiLCJzcGFjZXJIZWlnaHQiLCJzeW5jVHVyblNwYWNlIiwiaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiZSIsImNvbnRhaW5lciIsImN1cnJlbnRUYXJnZXQiLCJzY3JvbGxGcmFtZSIsImxhc3RTY3JvbGxUb3AiLCJzY3JvbGxUaHJlc2hvbGQiLCJhbmNob3JlZFR1cm5JZCIsIm5leHRTY3JvbGxUaHJlc2hvbGQiLCJzaG91bGREcmFpblR1cm5TcGFjZSIsInNob3VsZFNjaGVkdWxlU2Nyb2xsUGVyc2lzdCIsIndpbmRvdyIsInNjcm9sbFNlc3Npb25JZCIsInNob3VsZE5vdGlmeVNjcm9sbFRvQm90dG9tIiwic2VuZE1lc3NhZ2VSZWYiLCJzdG9wR2VuZXJhdGlvblJlZiIsIm9uU2VuZE1lc3NhZ2VSZWFkeVJlZiIsInNlbmRNZXNzYWdlUHJveHlSZWYiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJzdG9wR2VuZXJhdGlvblByb3h5UmVmIiwibWVzc2FnZXNEYXRhUmVmIiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZiIsImN1cnJlbnRNZXNzYWdlcyIsImlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCIsImFpQ2hhdFN1Z2dlc3RlZEFuc3dlciIsImFnZW50X3R5cGUiLCJfZGVmaW5lUHJvcGVydHkiLCJ0YXJnZXRNZXNzYWdlIiwiZmluZCIsIm1zZyIsImxhc3RVc2VyTWVzc2FnZSIsImZpbHRlciIsIlVTRVIiLCJhdCIsImFuc3dlcmVkTXVsdGlwbGVDaG9pY2VzIiwiZGlzbWlzc2VkTXVsdGlwbGVDaG9pY2VJZHMiLCJzdGF0ZSIsImRpc21pc3NlZE1lc3NhZ2VJZHMiLCJfdXNlTXVsdGlwbGVDaG9pY2VTdG8iLCJnZXRTdGF0ZSIsInBlbmRpbmciLCJzZXRQZW5kaW5nIiwicmVuZGVyZWQiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGFzdCIsIm92ZXJmbG93IiwiYm90dG9tIiwicmFmSWQiLCJ0aWNrIiwibGFzdFJlc2VydmVkUXVlc3Rpb25SZWYiLCJoaWRkZW5NZXNzYWdlSWRzIiwibGFzdE1lc3NhZ2VJZFJlZiIsImxhc3RNZXNzYWdlc0xlbmd0aFJlZiIsIl9tZXNzYWdlcyRpZCIsIl9tZXNzYWdlcyIsIl9sYXN0TWVzc2FnZSRpZCIsImxhc3RNZXNzYWdlIiwibGFzdElkIiwicHJldklkIiwicHJldkxlbiIsImlzTmV3TWVzc2FnZSIsInNjcm9sbERlY2lzaW9uIiwiaXNBdEJvdHRvbSIsImlzQW5zd2VyT3JRdWVzdGlvbiIsImlzQXBwcm92YWwiLCJoYXNJbml0aWFsTWVzc2FnZSIsIm1lc3NhZ2VzTGVuZ3RoIiwicHJldk1lc3NhZ2VzTGVuZ3RoIiwiX21lc3NhZ2VzJGlkMiIsIl9tZXNzYWdlczIiLCJqdXN0RmluaXNoZWRMb2FkaW5nIiwiYXR0YWNobWVudHNDb3VudCIsInN0cmVhbUxvYWRpbmdEaXNwbGF5IiwiaGFzQXR0YWNobWVudHMiLCJpc1Njcm9sbE9uUGFyZW50IiwiX3Nlc3Npb24kc2Nyb2xsU2Vzc2lvIiwiX3Nlc3Npb24kc2Nyb2xsVG9wIiwic2Vzc2lvbiIsInBlbmRpbmdTY3JvbGxUb3AiLCJleHBhbmRlZFJlZiIsInNhdmVkU2Nyb2xsVG9wIiwiZmlsbCIsImhhc01lc3NhZ2VMZXZlbEluZGljYXRvciIsIm1lc3NhZ2VzQ29udGVudCIsInRleHQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyIsIl9tZXNzYWdlJHNvdXJjZXMkbGVuZyIsIl9tZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRtZXNzYWdlIiwiX21lc3NhZ2UkcHJvamVjdCIsIl9yZXNvbHZlQ2hhdExpc3RJdGVtUyIsInVzZXJJZCIsInNvdXJjZUNvdW50IiwicHJvamVjdE5hbWUiLCJwcm9qZWN0IiwiaGFzQXBwcm92YWwiLCJoYXNNdWx0aXBsZUNob2ljZSIsIm1lc3NhZ2VGZWVkYmFjayIsIndhc0hlbHBmdWwiLCJtZXNzYWdlS2V5IiwidHVybklkIiwidXNlck1lc3NhZ2VGb3JSZXRyeSIsImNhblJldHJ5IiwiaGFzVXNlck1lc3NhZ2VGb3JSZXRyeSIsImlzQ2FuY2VsbGVkIiwiaXNfY2FuY2VsbGVkIiwia2V5IiwiYW5zd2VycyIsInJlZiIsIiRzY3JvbGxPblBhcmVudCIsIm9uV2hlZWwiLCJvblRvdWNoU3RhcnQiLCIkc2hvdyIsIm9uU2Nyb2xsIiwiJHZpc2libGUiLCJ4bWxucyIsIndpZHRoIiwic3Ryb2tlIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgdHlwZSB7IE1haWFTdHJlYW1kb3duUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyByZW5kZXJUZXh0V2l0aE1lbnRpb25zLCBoYXNJbmxpbmVNYXJrZXJzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZSdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9BZ2VudEFjdGl2aXR5SW5kaWNhdG9yJ1xuaW1wb3J0IHsgUmVhc29uaW5nQmxvY2sgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdCbG9jaydcbmltcG9ydCB7IHNob3VsZFN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9yZWFzb25pbmdMaXZlTmFycmF0aW9uJ1xuaW1wb3J0IHsgUmVhc29uaW5nVGltZWxpbmUgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdUaW1lbGluZSdcbmltcG9ydCB7IFNDVGltZWxpbmVJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdCbG9jay5zdHlsZXMnXG5pbXBvcnQgeyBDb250ZXh0Q29tcGFjdGVkTm90aWNlIH0gZnJvbSAnLi4vLi4vYXRvbXMvQ29udGV4dENvbXBhY3RlZE5vdGljZS9Db250ZXh0Q29tcGFjdGVkTm90aWNlJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCwgcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHJlc29sdmVSZXRyeVR1cm5JZCwgZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZXRyeUNvbXBsZXRpb24nXG5pbXBvcnQgeyB1c2VSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRmFkZSB9IGZyb20gJy4uLy4uL2F0b21zL0ZhZGUnXG5pbXBvcnQgeyBwYXRjaE1haWFQYW5lbFNlc3Npb24sIHJlYWRNYWlhUGFuZWxTZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYVBhbmVsU2Vzc2lvblBlcnNpc3RlbmNlJ1xuaW1wb3J0IHsgdXNlTXVsdGlwbGVDaG9pY2VTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZU11bHRpcGxlQ2hvaWNlU3RvcmUnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VGcm9tT3RoZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbU90aGVyIH0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQge1xuICBTQ0NBSU1lc3NhZ2VXcmFwcGVyLFxuICBTY3JvbGxUb0JvdHRvbUJ1dHRvbixcbiAgU0NTY3JvbGxJY29uU3dhcCxcbiAgU0NXcml0aW5nRG90cyxcbiAgU0NNZXNzYWdlc091dGVyLFxuICBTQ01lc3NhZ2VzU2Nyb2xsLFxuICBTQ01lc3NhZ2VzSW5uZXIsXG4gIFNDVHVyblNwYWNlcixcbiAgU0NPcHRpb25zTGlzdCxcbiAgU0NPcHRpb25JdGVtLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDTWVzc2FnZXNHcmFkaWVudFRvcCxcbiAgU0NNZXNzYWdlc0dyYWRpZW50Qm90dG9tLFxufSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IEVudGl0eUxpbmtDdXN0b21MaW5rLCBnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2VudGl0eUxpbmtSZW5kZXInXG5pbXBvcnQgeyBDaGF0QUlTdWdnZXN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJU3VnZ2VzdGlvbnMnXG5pbXBvcnQgeyBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMgfSBmcm9tICcuL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucydcbmltcG9ydCB7IENoYXRBSU11bHRpcGxlQ2hvaWNlQW5zd2VyIH0gZnJvbSAnLi4vQ2hhdEFJTXVsdGlwbGVDaG9pY2UvQ2hhdEFJTXVsdGlwbGVDaG9pY2VBbnN3ZXInXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBkb3dubG9hZEZpbGVGcm9tVXJsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsZURvd25sb2FkSGVscGVyJ1xuaW1wb3J0IHtcbiAgY2FuT3BlbkF0dGFjaG1lbnRQcmV2aWV3LFxuICBjYW5SZXRyeUFzc2lzdGFudE1lc3NhZ2UsXG4gIGNvbXB1dGVEaXN0YW5jZUZyb21Cb3R0b20sXG4gIGNvbXB1dGVSZW1vdmFibGVUdXJuU3BhY2UsXG4gIGNvbXB1dGVTeW5jZWRUdXJuU3BhY2VySGVpZ2h0LFxuICBjb21wdXRlVHVyblNjcm9sbER1cmF0aW9uTXMsXG4gIGNvbXB1dGVUdXJuU2Nyb2xsVGFyZ2V0VG9wLFxuICBjb3VudFVzZXJNZXNzYWdlQXR0YWNobWVudHMsXG4gIGVhc2VPdXRFeHBvU2Nyb2xsUHJvZ3Jlc3MsXG4gIGV4dHJhY3RGZWVkYmFja1Nlc3Npb25JZCxcbiAgZmluZExhc3RRdWVzdGlvbklkLFxuICBoYXNJbml0aWFsVXNlck1lc3NhZ2VJbkxpc3QsXG4gIGhhc01lc3NhZ2VMZXZlbFN0cmVhbUluZGljYXRvcixcbiAgaXNBY3RpdmVTdHJlYW1pbmdTdGF0ZSxcbiAgaXNBbnN3ZXJPclF1ZXN0aW9uQ2hhdE1lc3NhZ2VJZCxcbiAgaXNBcHByb3ZhbENoYXRNZXNzYWdlLFxuICBpc0Fzc2lzdGFudENoYXRNZXNzYWdlLFxuICBpc0F1ZGlvQXR0YWNobWVudCxcbiAgaXNDdXJyZW50VXNlck1lc3NhZ2UsXG4gIGlzTmV3Q2hhdE1lc3NhZ2VFdmVudCxcbiAgaXNSZXRyeVN1Z2dlc3Rpb25TZWxlY3Rpb24sXG4gIHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRCbG9iU3RyYXRlZ3ksXG4gIHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRGaWxlTmFtZSxcbiAgcmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZFVybCxcbiAgcmVzb2x2ZUNoYXRMaXN0SXRlbVN0cmVhbWluZ0ZsYWdzLFxuICByZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwsXG4gIHJlc29sdmVNZXNzYWdlQXR0YWNobWVudHMsXG4gIHJlc29sdmVSZXRyeUF0dGFjaG1lbnRzRnJvbVVzZXJNZXNzYWdlLFxuICBzaG91bGRBdXRvU2Nyb2xsT25NZXNzYWdlc0NoYW5nZSxcbiAgc2hvdWxkSGlkZUFzc2lzdGFudFN1Z2dlc3Rpb25zLFxuICBzaG91bGRIaWRlRW1wdHlTdHJlYW1pbmdCb2R5LFxuICBzaG91bGRJZ25vcmVTdWdnZXN0aW9uQ2xpY2ssXG4gIHNob3VsZE9wZW5NZXNzYWdlT3B0aW9uLFxuICBzaG91bGRSZWxlYXNlVHVyblNwYWNlLFxuICBzaG91bGRSZW5kZXJBc3Npc3RhbnRGZWVkYmFjayxcbiAgc2hvdWxkUmVuZGVyQXNzaXN0YW50U3VnZ2VzdGlvbnMsXG4gIHNob3VsZFJlbmRlckNoYW5nZVByb2plY3RNZXNzYWdlLFxuICBzaG91bGRSZW5kZXJDcmVhdGVBZ2VudEFjdGlvbnMsXG4gIHNob3VsZFJlbmRlck1lc3NhZ2VUZXh0Qm9keSxcbiAgc2hvdWxkU2hvd0FwcHJvdmFsQWN0aW9ucyxcbiAgc2hvdWxkU2hvd0JvdHRvbVNjcm9sbEdyYWRpZW50LFxuICBzaG91bGRTaG93R2xvYmFsU3RyZWFtTG9hZGluZ0luZGljYXRvcixcbiAgc2hvdWxkU2hvd01lc3NhZ2VBdHRhY2htZW50c1JvdyxcbiAgc2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tLFxuICBzaG91bGRTaG93U3RyZWFtQWN0aXZpdHlJbmRpY2F0b3IsXG4gIHNob3VsZFNob3dTdHJlYW1pbmdNZXNzYWdlQm9keSxcbiAgc2hvdWxkU2hvd1RvcFNjcm9sbEdyYWRpZW50LFxuICBzaG91bGRTa2lwRW1wdHlDaGF0TGlzdE1lc3NhZ2UsXG4gIGlzU2FtZVBlbmRpbmdNdWx0aXBsZUNob2ljZSxcbiAgcmVzb2x2ZUFuc3dlcmVkTXVsdGlwbGVDaG9pY2VzLFxuICByZXNvbHZlUGVuZGluZ011bHRpcGxlQ2hvaWNlLFxuICByZXNvbHZlVHVybkFuY2hvcklkLFxuICBzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbixcbiAgc2hvdWxkUnVuU3RyZWFtVHVyblN5bmNFZmZlY3QsXG4gIHNob3VsZFVwZGF0ZVNwYWNlckhlaWdodCxcbiAgYnVpbGRTbW9vdGhTdHJlYW1UZXh0T3B0aW9ucyxcbiAgY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0LFxuICBkZXRlY3RKdXN0RmluaXNoZWRMb2FkaW5nTWVzc2FnZXMsXG4gIHByb2Nlc3NDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZSxcbiAgcmVhZFNtb290aFN0cmVhbVdpbmRvd0ZsYWdzLFxuICByZXNvbHZlUmVzZXJ2ZVR1cm5TcGFjZVBsYW4sXG4gIHJlc29sdmVTY3JvbGxUb0JvdHRvbVRhcmdldFRvcCxcbiAgcmVzb2x2ZUNvbnRhaW5lckF0Qm90dG9tLFxuICByZXNvbHZlQ3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCxcbiAgcmVzb2x2ZUZlZWRiYWNrUHJvcHNGb3JDYW5jZWxsZWQsXG4gIHJlc29sdmVMYXN0VXNlck1lc3NhZ2VGb3JBdHRhY2htZW50cyxcbiAgcmVzb2x2ZU1lc3NhZ2VMaXN0SXRlbUtleSxcbiAgcmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbixcbiAgcmVzb2x2ZVJlYXNvbmluZ1RyYWNlSG9va0lkLFxuICByZXNvbHZlU2Nyb2xsT25QYXJlbnRNb2RlLFxuICByZXNvbHZlU3RyZWFtaW5nTWVzc2FnZUhvb2tJZCxcbiAgcmVzb2x2ZVN0cmVhbWluZ1Jhd1RleHQsXG4gIHJlc29sdmVTdHJlYW1pbmdUZXh0SG9va0lkLFxuICByZXNvbHZlU3VnZ2VzdGlvbkFuYWx5dGljc0FnZW50VHlwZSxcbiAgc2hvdWxkQXBwbHlQZW5kaW5nU2Nyb2xsUmVzdG9yZSxcbiAgc2hvdWxkQ2xlYXJMYXN0UmVzZXJ2ZWRRdWVzdGlvbixcbiAgc2hvdWxkQ2xlYXJTY3JvbGxSZXN0b3JlV2l0aG91dENoYXQsXG4gIHNob3VsZEluaXRpYWxpemVDaGF0LFxuICBzaG91bGRSZW5kZXJNZW50aW9uSW5saW5lTm9kZXMsXG4gIHNob3VsZFJlc3RvcmVTY3JvbGxPbkV4cGFuZGVkQ2hhbmdlLFxuICBzaG91bGRSdW5TZXNzaW9uQ2FjaGVTY3JvbGxUb0JvdHRvbSxcbiAgc2hvdWxkU2NoZWR1bGVUdXJuU3BhY2VSZXNlcnZhdGlvbixcbiAgc2hvdWxkU2Nyb2xsVG9Cb3R0b21BZnRlckxvYWQsXG4gIHNob3VsZFNraXBNZXNzYWdlc1Njcm9sbEVmZmVjdCxcbiAgc2hvdWxkVXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNPbkxvYWRFbmQsXG59IGZyb20gJy4vQ2hhdEFJTWVzc2FnZXMuaGVscGVycydcbmltcG9ydCB0eXBlIHsgUmVzb2x2ZWRNdWx0aXBsZUNob2ljZUFuc3dlciB9IGZyb20gJy4vQ2hhdEFJTWVzc2FnZXMuaGVscGVycydcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB2b2lkLFxuICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICAgIGlzV3JpdGluZzogYm9vbGVhblxuICApID0+IHZvaWRcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TY3JvbGxUb0JvdHRvbT86ICgpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGFnZW50cz86IEFnZW50W11cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24/OiBib29sZWFuXG4gIHJlc29sdmVkTXVsdGlwbGVDaG9pY2VBbnN3ZXI/OiBSZXNvbHZlZE11bHRpcGxlQ2hvaWNlQW5zd2VyXG4gIGhhbmRsZUZlZWRiYWNrOiAoZmVlZGJhY2s6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbjogKFxuICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PixcbiAgICBtZXRhZGF0YT86IHsgdG9vbF9ncm91cF9zbHVnczogc3RyaW5nW10gfVxuICApID0+IHZvaWRcbiAgaGFuZGxlUmV0cnk/OiAoKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG4gIHN0cmVhbUFjdGl2aXR5PzogU3RyZWFtQWN0aXZpdHkgfCBudWxsXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKCFzaG91bGRPcGVuTWVzc2FnZU9wdGlvbihzZWxlY3RlZE9wdGlvbikpIHJldHVyblxuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbilcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NPcHRpb25zTGlzdD5cbiAgICAgIHsob3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgIDxTQ09wdGlvbkl0ZW1cbiAgICAgICAgICAkaGFzU2VsZWN0aW9uPXshIXNlbGVjdGVkT3B0aW9ufVxuICAgICAgICAgICRkaW1tZWQ9eyEhc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAga2V5PXtvcHRpb24uaWR9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgIDwvU0NPcHRpb25JdGVtPlxuICAgICAgKSl9XG4gICAgPC9TQ09wdGlvbnNMaXN0PlxuICApXG59XG5cbi8qKiBTb2xvIGVzdGUgY29tcG9uZW50ZSByZS1yZW5kZXJpemEgY3VhbmRvIGNhbWJpYSBlbCB0ZXh0byBlbiBzdHJlYW1pbmcgKGxlZSBkZWwgY29udGV4dCkuICovXG5jb25zdCBTdHJlYW1pbmdNZXNzYWdlQm9keSA9IG1lbW8oXG4gIChwcm9wczoge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuXG4gICAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICAgIGlzQXNzaXN0YW50OiBib29sZWFuXG4gICAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgICBhcHByb3ZhbD86IE1lc3NhZ2VJdGVtUHJvcHNbJ2FwcHJvdmFsJ11cbiAgICBpc0Vycm9yPzogYm9vbGVhblxuICAgIHNvdXJjZXM/OiBNZXNzYWdlSXRlbVByb3BzWydzb3VyY2VzJ11cbiAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbFxuICAgIG11bHRpcGxlQ2hvaWNlPzogTWVzc2FnZUl0ZW1Qcm9wc1snbXVsdGlwbGVDaG9pY2UnXVxuICAgIHJlc29sdmVkTXVsdGlwbGVDaG9pY2VBbnN3ZXI/OiBSZXNvbHZlZE11bHRpcGxlQ2hvaWNlQW5zd2VyXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcD86IHsgYWdlbnRJZDogc3RyaW5nIH0gfCBudWxsXG4gICAgaGFuZGxlRmVlZGJhY2tDbGljazogKGY6IEZlZWRiYWNrKSA9PiB2b2lkXG4gICAgZGlzYWJsZUZlZWRiYWNrOiBGZWVkYmFjayB8IG51bGxcbiAgICBvblJldHJ5PzogKCkgPT4gdm9pZFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIC8vIFRleHRvIGRlbCBzdHJlYW06IHNvbG8gc2UgbGVlIGRlbCBzdG9yZSBjdWFuZG8gZXN0ZSBtZW5zYWplIGVzIGVsXG4gICAgLy8gcXVlIGVzdMOhIGVuIHN0cmVhbWluZy4gdXNlU3luY0V4dGVybmFsU3RvcmUgYcOtc2xhIGVsIHJlLXJlbmRlciBhXG4gICAgLy8gZXN0ZSBjb21wb25lbnRlLCBzaW4gdG9jYXIgZWwgcmVzdG8gZGVsIMOhcmJvbC5cbiAgICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShyZXNvbHZlU3RyZWFtaW5nTWVzc2FnZUhvb2tJZChwcm9wcy5pc1N0cmVhbWluZywgcHJvcHMubWVzc2FnZUlkKSlcbiAgICBjb25zdCByYXdUZXh0ID0gcmVzb2x2ZVN0cmVhbWluZ1Jhd1RleHQocHJvcHMuaXNTdHJlYW1pbmcsIHN0cmVhbWluZ1RleHQsIHByb3BzLm1lc3NhZ2UpXG4gICAgLy8gU21vb3RoIHN0cmVhbWluZzogZGVzYWNvcGxhIGxhIGNhZGVuY2lhIGRlbCBiYWNrZW5kIGRlbCByZW5kZXIuXG4gICAgLy8gRHVyYW50ZSBlbCBzdHJlYW1pbmcgbGliZXJhIGNoYXJzIGEgcml0bW8gY29uc3RhbnRlIHbDrWEgckFGOyBjdWFuZG9cbiAgICAvLyB0ZXJtaW5hLCBtdWVzdHJhIGVsIHRleHRvIGZpbmFsIGFsIGluc3RhbnRlIChzaW4gYW5pbWFjacOzbiByZXNpZHVhbCkuXG4gICAgLy8gTG9zIGRlZmF1bHRzIGRlbCBob29rIHNlIGFqdXN0YXJvbiBlbXDDrXJpY2FtZW50ZSBlbiBzdGFnaW5nOyBhdW4gYXPDrVxuICAgIC8vIHNlIGV4cG9uZW4gZmxhZ3MgZGUgcnVudGltZSAod2luZG93LiopIHBhcmEgcG9kZXIgdHVuZWFyIHNpbiByZWNvbXBpbGFyXG4gICAgLy8gc2kgYWxnw7puIGJhY2tlbmQgcHJlc2VudGEgdW5hIGNhZGVuY2lhIG11eSBkaXN0aW50YSBlbiBwcm9kdWNjacOzbi5cbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1BZGFwdCA9IGZhbHNlICAgICAgLy8gZGVzYWN0aXZhIGFkYXB0YWNpw7NuIGFsIGJhY2tlbmRcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1CdWZmZXJNcyA9IDYwMCAgICAgLy8gY29sY2jDs24gb2JqZXRpdm8gKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbUxhZ01zID0gNDUwICAgICAgICAvLyBsYWcgbcOheGltbyBiYXNlIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1NaW5CdWZmZXIgPSA3MCAgICAgLy8gcGlzbyBkZWwgY29sY2jDs24gZW4gY2hhcnNcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1XYXJtdXBNcyA9IDQwMCAgICAgLy8gd2FybXVwIGluaWNpYWwgKG1zKVxuICAgIGNvbnN0IHdpbkZsYWdzID0gcmVhZFNtb290aFN0cmVhbVdpbmRvd0ZsYWdzKClcbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHVzZVNtb290aFN0cmVhbVRleHQocmF3VGV4dCwgYnVpbGRTbW9vdGhTdHJlYW1UZXh0T3B0aW9ucyh3aW5GbGFncywgcHJvcHMuaXNTdHJlYW1pbmcpKVxuICAgIGNvbnN0IGNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSByZXNvbHZlQ3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZChwcm9wcy5jcmVhdGVBZ2VudEZvbGxvd1VwKVxuXG4gICAgaWYgKHNob3VsZEhpZGVFbXB0eVN0cmVhbWluZ0JvZHkoZGlzcGxheVRleHQsIHByb3BzLmlzU3RyZWFtaW5nKSkgcmV0dXJuIG51bGxcbiAgICBjb25zdCBoYXNNZW50aW9ucyA9IGhhc0lubGluZU1hcmtlcnMoZGlzcGxheVRleHQpXG4gICAgY29uc3QgbWVudGlvbk5vZGVzID0gaGFzTWVudGlvbnMgPyByZW5kZXJUZXh0V2l0aE1lbnRpb25zKGRpc3BsYXlUZXh0KSA6IG51bGxcbiAgICBjb25zdCBtZXNzYWdlQm9keSA9IChcbiAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgIGNsYXNzTmFtZT17Z2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUoZGlzcGxheVRleHQpfVxuICAgICAgPlxuICAgICAgICB7c2hvdWxkUmVuZGVyTWVudGlvbklubGluZU5vZGVzKGhhc01lbnRpb25zLCBtZW50aW9uTm9kZXMpID8gKFxuICAgICAgICAgIC8vIFNpIGhheSBtZW50aW9ucywgcmVuZGVyaXphciBkaXJlY3RhbWVudGUgKHNpbiBtYXJrZG93biBlbiBlbCBtaXNtbyBww6FycmFmbylcbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnaW5saW5lJyB9fT57bWVudGlvbk5vZGVzfTwvc3Bhbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICAvLyBTaW4gbWVudGlvbnMsIHBhc2FyIGEgU3RyZWFtZG93biBwYXJhIG1hcmtkb3duIHN1cHBvcnRcbiAgICAgICAgICA8TWFpYVN0cmVhbWRvd25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJjaGF0XCJcbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgY29tcG9uZW50cz17eyBhOiBFbnRpdHlMaW5rQ3VzdG9tTGluayB9IGFzIE1haWFTdHJlYW1kb3duUHJvcHNbJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtkaXNwbGF5VGV4dH1cbiAgICAgICAgICA8L01haWFTdHJlYW1kb3duPlxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgIClcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge3Byb3BzLnJlc29sdmVkTXVsdGlwbGVDaG9pY2VBbnN3ZXIgPyAoXG4gICAgICAgICAgPENoYXRBSU11bHRpcGxlQ2hvaWNlQW5zd2VyIGFuc3dlcj17cHJvcHMucmVzb2x2ZWRNdWx0aXBsZUNob2ljZUFuc3dlcn0+XG4gICAgICAgICAgICB7bWVzc2FnZUJvZHl9XG4gICAgICAgICAgPC9DaGF0QUlNdWx0aXBsZUNob2ljZUFuc3dlcj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICBtZXNzYWdlQm9keVxuICAgICAgICApfVxuICAgICAgICB7c2hvdWxkUmVuZGVyQXNzaXN0YW50RmVlZGJhY2soe1xuICAgICAgICAgIGlzQXNzaXN0YW50OiBwcm9wcy5pc0Fzc2lzdGFudCxcbiAgICAgICAgICBpc0Vycm9yOiBwcm9wcy5pc0Vycm9yLFxuICAgICAgICAgIGFwcHJvdmFsOiBwcm9wcy5hcHByb3ZhbCxcbiAgICAgICAgICBtdWx0aXBsZUNob2ljZTogcHJvcHMubXVsdGlwbGVDaG9pY2UsXG4gICAgICAgICAgaXNTdHJlYW1pbmc6IHByb3BzLmlzU3RyZWFtaW5nLFxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQsXG4gICAgICAgICAgb25SZXRyeTogcHJvcHMub25SZXRyeSxcbiAgICAgICAgfSkgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgey4uLnJlc29sdmVGZWVkYmFja1Byb3BzRm9yQ2FuY2VsbGVkKHByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQsIHByb3BzLnNvdXJjZXMsIHByb3BzLmhhbmRsZUZlZWRiYWNrQ2xpY2spfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtwcm9wcy5kaXNhYmxlRmVlZGJhY2t9XG4gICAgICAgICAgICBvblJldHJ5PXtwcm9wcy5vblJldHJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG91bGRSZW5kZXJBc3Npc3RhbnRTdWdnZXN0aW9ucyh7XG4gICAgICAgICAgaXNBc3Npc3RhbnQ6IHByb3BzLmlzQXNzaXN0YW50LFxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQsXG4gICAgICAgICAgYXBwcm92YWw6IHByb3BzLmFwcHJvdmFsLFxuICAgICAgICAgIGlzRXJyb3I6IHByb3BzLmlzRXJyb3IsXG4gICAgICAgICAgc3VnZ2VzdGlvbnNMZW5ndGg6IHByb3BzLnN1Z2dlc3Rpb25zPy5sZW5ndGggPz8gMCxcbiAgICAgICAgICBtdWx0aXBsZUNob2ljZTogcHJvcHMubXVsdGlwbGVDaG9pY2UsXG4gICAgICAgIH0pICYmIChcbiAgICAgICAgICA8Q2hhdEFJU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtwcm9wcy5zdWdnZXN0aW9ucyB8fCBbXX1cbiAgICAgICAgICAgIG9uU2VsZWN0U3VnZ2VzdGlvbj17c3VnZ2VzdGlvbiA9PiBwcm9wcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2socHJvcHMubWVzc2FnZUlkLCBzdWdnZXN0aW9uKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgaGlkZGVuPXtzaG91bGRIaWRlQXNzaXN0YW50U3VnZ2VzdGlvbnMocHJvcHMuaXNTdHJlYW1pbmcsIHByb3BzLmlzTGFzdE1lc3NhZ2UsIHByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWQpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG91bGRSZW5kZXJDcmVhdGVBZ2VudEFjdGlvbnMoe1xuICAgICAgICAgIGlzQXNzaXN0YW50OiBwcm9wcy5pc0Fzc2lzdGFudCxcbiAgICAgICAgICBpc0Vycm9yOiBwcm9wcy5pc0Vycm9yLFxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQsXG4gICAgICAgICAgYXBwcm92YWw6IHByb3BzLmFwcHJvdmFsLFxuICAgICAgICAgIGFnZW50SWQ6IGNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQsXG4gICAgICAgIH0pICYmIChcbiAgICAgICAgICA8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zXG4gICAgICAgICAgICBhZ2VudElkPXtjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgaGlkZGVuPXtzaG91bGRIaWRlQXNzaXN0YW50U3VnZ2VzdGlvbnMocHJvcHMuaXNTdHJlYW1pbmcsIHByb3BzLmlzTGFzdE1lc3NhZ2UsIHByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWQpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cbilcblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzU3RyZWFtaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljayxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICBoYW5kbGVSZXRyeSxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgbXVsdGlwbGVDaG9pY2UsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24sXG4gICAgcmVzb2x2ZWRNdWx0aXBsZUNob2ljZUFuc3dlcixcbiAgICBpc0xhc3RNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBbcHJldmlld0F0dGFjaG1lbnQsIHNldFByZXZpZXdBdHRhY2htZW50XSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNDdXJyZW50VXNlciA9IGlzQ3VycmVudFVzZXJNZXNzYWdlKHJvbGUsIHVzZXIuaWQsIGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gaXNBc3Npc3RhbnRDaGF0TWVzc2FnZShyb2xlLCB1c2VyLmlkKVxuICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID0gaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChpZClcbiAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UoXG4gICAgcmVzb2x2ZVN0cmVhbWluZ1RleHRIb29rSWQoQm9vbGVhbihpc1N0cmVhbWluZyksIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIsIGlkKVxuICApXG4gIGNvbnN0IGlzQWN0aXZlU3RyZWFtaW5nID0gaXNBY3RpdmVTdHJlYW1pbmdTdGF0ZShpc1N0cmVhbWluZywgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcilcbiAgY29uc3QgaGFzU3RyZWFtVGV4dCA9IEJvb2xlYW4oc3RyZWFtaW5nVGV4dClcbiAgY29uc3QgcmVhc29uaW5nVHJhY2UgPSB1c2VSZWFzb25pbmdUcmFjZShyZXNvbHZlUmVhc29uaW5nVHJhY2VIb29rSWQoaXNBc3Npc3RhbnQsIGlzQWN0aXZlU3RyZWFtaW5nLCBpZCkpXG4gIC8vIFN1c2NyaXBjacOzbiBwcm9waWEsIHNpbiBsYSBjb25kaWNpw7NuIGRlIHN0cmVhbWluZyBkZSBhcnJpYmE6IGVsIGF2aXNvIGRlXG4gIC8vIGNvbXBhY3RhY2nDs24gdGllbmUgcXVlIHNlZ3VpciB2aXNpYmxlIHVuYSB2ZXogdGVybWluYWRvIGVsIHR1cm5vLiBTaSBubyBoYXlcbiAgLy8gc25hcHNob3QgZW4gdml2byAocmVhYnJpciBlbCBjaGF0KSwgY2FlIGFsIGBjb21wYWN0aW9uYCBwZXJzaXN0aWRvIGVuIGVsIG1lbnNhamUuXG4gIGNvbnN0IHsgY29tcGFjdGlvbjogbGl2ZUNvbXBhY3Rpb24gfSA9IHVzZVJlYXNvbmluZ1RyYWNlKGlzQXNzaXN0YW50ID8gaWQgOiAnJylcbiAgY29uc3QgY29tcGFjdGlvbiA9IGxpdmVDb21wYWN0aW9uID8/IHByb3BzLmNvbXBhY3Rpb24gPz8gbnVsbFxuICBjb25zdCBzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lID1cbiAgICBpc0Fzc2lzdGFudCAmJiBzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lKHJlYXNvbmluZ1RyYWNlLnN0ZXBzLCBzdHJlYW1BY3Rpdml0eSwgc3RyZWFtaW5nVGV4dCwgaWQpXG4gIGNvbnN0IHNob3dTdHJlYW1pbmdCb2R5ID0gc2hvdWxkU2hvd1N0cmVhbWluZ01lc3NhZ2VCb2R5KGlzQWN0aXZlU3RyZWFtaW5nLCBoYXNTdHJlYW1UZXh0LCBzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lKVxuICBjb25zdCBzaG93QWN0aXZpdHlJbmRpY2F0b3IgPSBzaG91bGRTaG93U3RyZWFtQWN0aXZpdHlJbmRpY2F0b3IoaXNBc3Npc3RhbnQsIGlzQWN0aXZlU3RyZWFtaW5nLCBzdHJlYW1BY3Rpdml0eSlcblxuICBjb25zdCBtZXNzYWdlQXR0YWNobWVudHMgPSByZXNvbHZlTWVzc2FnZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzLCBpc0Fzc2lzdGFudCwgc291cmNlcylcblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50Q2xpY2sgPSAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICAvLyBQZXJtaXRpciBwcmV2aXN1YWxpemFjacOzbiBzaSB0aWVuZSBhcmNoaXZvIGxvY2FsIG8gVVJMcyBkZWwgYmFja2VuZFxuICAgIGlmIChjYW5PcGVuQXR0YWNobWVudFByZXZpZXcoYXR0YWNobWVudCkpIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQgPSBhc3luYyAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRGaWxlTmFtZShhdHRhY2htZW50KVxuICAgIGNvbnN0IGZpbGVVcmwgPSByZXNvbHZlQXR0YWNobWVudERvd25sb2FkVXJsKGF0dGFjaG1lbnQpXG5cbiAgICB0cnkge1xuICAgICAgbGV0IGJsb2JVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsXG5cbiAgICAgIGNvbnN0IGRvd25sb2FkU3RyYXRlZ3kgPSByZXNvbHZlQXR0YWNobWVudERvd25sb2FkQmxvYlN0cmF0ZWd5KGZpbGVVcmwsIGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIGlmIChkb3dubG9hZFN0cmF0ZWd5ID09PSAncmVtb3RlLXVybCcgJiYgZmlsZVVybCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoZmlsZVVybCwgZmlsZU5hbWUsIGF0dGFjaG1lbnQudHlwZSlcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZG93bmxvYWRlZEZpbGUpXG4gICAgICB9IGVsc2UgaWYgKGRvd25sb2FkU3RyYXRlZ3kgPT09ICdsb2NhbC1maWxlJyAmJiBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKHNob3VsZFJlbmRlckNoYW5nZVByb2plY3RNZXNzYWdlKGlzQ2hhbmdlUHJvamVjdCwgb3B0aW9ucykpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VXcmFwcGVyIGtleT17aWR9IGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9IGRhdGEtbWVzc2FnZS1pZD17aWR9IGhhc0ZlZWRiYWNrPXtmYWxzZX0+XG4gICAgICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICA8TWVzc2FnZUNvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgICBpc0NoYW5nZVByb2plY3Q9e2lzQ2hhbmdlUHJvamVjdH1cbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIG1lc3NhZ2VFeHRyYUNvbnRlbnQ9ezxNZXNzYWdlT3B0aW9ucyBvcHRpb25zPXtvcHRpb25zIGFzIGFueX0gaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259IC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gICAgICA8L01lc3NhZ2VXcmFwcGVyPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrQ2xpY2sgPSAoZmVlZGJhY2s6IEZlZWRiYWNrKSA9PiB7XG4gICAgaGFuZGxlRmVlZGJhY2s/LihmZWVkYmFjaywgZXh0cmFjdEZlZWRiYWNrU2Vzc2lvbklkKGlkKSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9IGRhdGEtbWVzc2FnZS1pZD17aWR9PlxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgey8qIE1pc21vIHNsb3QgcGFyYSBsYSB0cmF6YSBlbiB2aXZvIHkgbGEgeWEgcGxlZ2FkYTogbWllbnRyYXMgZWwgdHVybm9cbiAgICAgICAgICAgIGNvcnJlLCBsb3MgcGFzb3Mgc2UgYXBpbGFuIGFjw6EgKHRpbWVsYXBzZSk7IGFsIGNvbXBsZXRhciwgZWxcbiAgICAgICAgICAgIFJlYXNvbmluZ0Jsb2NrIG9jdXBhIGVsIGx1Z2FyIHkgY29sYXBzYSBzb2xvLlxuICAgICAgICAgICAgVmEgQVJSSUJBIGRlbCBjdWVycG8gcG9ycXVlIGxhIG5hcnJhY2nDs24gZGUgY2FkYSB0dXJubyB0ZXJtaW5hIGNvbW9cbiAgICAgICAgICAgIGZpbGEgZGUgbGEgdHJhemE6IHNpIGVzdHV2aWVyYSBhYmFqbywgZWwgdGV4dG8gdmllam8gcXVlZGFyw61hIHBvclxuICAgICAgICAgICAgZGViYWpvIGRlbCB0ZXh0byBudWV2by4gKi99XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJlxuICAgICAgICAgIChpc0FjdGl2ZVN0cmVhbWluZyA/IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdUaW1lbGluZSBtZXNzYWdlSWQ9e2lkfSBzdHJlYW1BY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IHN0cmVhbWluZ1RleHQ9e3N0cmVhbWluZ1RleHR9IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdCbG9jayBtZXNzYWdlSWQ9e2lkfSB0cmFjZT17cHJvcHMucmVhc29uaW5nID8/IG51bGx9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIHsvKiBGdWVyYSBkZWwgUmVhc29uaW5nQmxvY2sgYSBwcm9ww7NzaXRvOiBlc2Ugc2UgcGxpZWdhIHNvbG8gYWwgdGVybWluYXJcbiAgICAgICAgICAgIGVsIHR1cm5vIHkgZXNjb25kZXLDrWEgZWwgYXZpc28ganVzdG8gY3VhbmRvIGVsIHVzdWFyaW8gcG9kcsOtYVxuICAgICAgICAgICAgcHJlZ3VudGFyc2UgcG9yIHF1w6kgTUFJQSB5YSBubyByZWN1ZXJkYSBhbGdvLiAqL31cbiAgICAgICAge2lzQXNzaXN0YW50ICYmIDxDb250ZXh0Q29tcGFjdGVkTm90aWNlIGNvbXBhY3Rpb249e2NvbXBhY3Rpb259IC8+fVxuICAgICAgICB7c2hvdWxkU2hvd01lc3NhZ2VBdHRhY2htZW50c1JvdyhtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3cgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgICB7bWVzc2FnZUF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGV0ZWN0YXIgc2kgZXMgdW4gYXJjaGl2byBkZSBhdWRpb1xuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0F0dGFjaG1lbnQoYXR0YWNobWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG91bGRSZW5kZXJNZXNzYWdlVGV4dEJvZHkoe1xuICAgICAgICAgIG1lc3NhZ2VUZXh0OiBtZXNzYWdlLFxuICAgICAgICAgIHNob3dTdHJlYW1pbmdCb2R5LFxuICAgICAgICAgIGlzQXNzaXN0YW50LFxuICAgICAgICAgIGF0dGFjaG1lbnRDb3VudDogbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCxcbiAgICAgICAgfSkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtzaG93U3RyZWFtaW5nQm9keX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBtdWx0aXBsZUNob2ljZT17bXVsdGlwbGVDaG9pY2V9XG4gICAgICAgICAgICByZXNvbHZlZE11bHRpcGxlQ2hvaWNlQW5zd2VyPXtyZXNvbHZlZE11bHRpcGxlQ2hvaWNlQW5zd2VyfVxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcD17Y3JlYXRlQWdlbnRGb2xsb3dVcH1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFjayA/PyBudWxsfVxuICAgICAgICAgICAgb25SZXRyeT17aGFuZGxlUmV0cnl9XG4gICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ9e2lzQWN0aXZlU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgey8qIFNwaW5uZXIgZGUgYWN0aXZpZGFkOiB2aXNpYmxlIHRhbWJpw6luIGVuIHdyaXRpbmcgKG5hcnJhY2nDs24gZW4gdHJhemEgbyByZXNwdWVzdGEgZmluYWwpLiAqL31cbiAgICAgICAge3Nob3dBY3Rpdml0eUluZGljYXRvciAmJiBzdHJlYW1BY3Rpdml0eSA/IChcbiAgICAgICAgICA8U0NUaW1lbGluZUluZGljYXRvcj5cbiAgICAgICAgICAgIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1BY3Rpdml0eX0gY29tcGFjdCAvPlxuICAgICAgICAgIDwvU0NUaW1lbGluZUluZGljYXRvcj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHtzaG91bGRTaG93QXBwcm92YWxBY3Rpb25zKGFwcHJvdmFsKSAmJiBhcHByb3ZhbCAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXsodGhyZWFkSWRzLCBtZXRhZGF0YSkgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJywgdW5kZWZpbmVkLCBtZXRhZGF0YSl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gIClcbn0pXG5cbmNvbnN0IENoYXRBSU1lc3NhZ2VzSW5uZXIgPSAoe1xuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGluaXRpYWxDaGF0SWQsXG4gIG9uRXJyb3IsXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeSxcbiAgb25TY3JvbGxUb0JvdHRvbSxcbiAgYXR0YWNobWVudHMsXG4gIGFnZW50cyxcbiAgZXhwYW5kZWQsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoYXRJbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkUmVmID0gdXNlUmVmKDM5KVxuICBjb25zdCBsYXN0U2Nyb2xsVG9wUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNob3dTY3JvbGxUb0JvdHRvbVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2hvd1RvcEdyYWRpZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaG93Qm90dG9tR3JhZGllbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogVHVybm8gY29uIGVsIHNjcm9sbCBiYWpvIGNvbnRyb2wgZGVsIHVzdWFyaW86IGRlc2RlIHF1ZSBlbnbDrWEgZWwgbWVuc2FqZSB5XG4gICAqIGhhc3RhIGVsIHByw7N4aW1vIGVudsOtbyBubyBtb3ZlbW9zIGVsIHNjcm9sbCBwb3IgbmluZ8O6biBtb3Rpdm8uIEVzXG4gICAqIGluZGVwZW5kaWVudGUgZGUgbGEgYWx0dXJhIGRlbCBzcGFjZXIsIHF1ZSBwdWVkZSBsbGVnYXIgYSAwIHNpbiBkZXNhbmNsYXIuXG4gICAqL1xuICBjb25zdCBhbmNob3JlZFR1cm5JZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBzcGFjZXJFbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNwYWNlckhlaWdodFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCB0dXJuU2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHdhc0xvYWRpbmdNZXNzYWdlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBzY3JvbGxQZXJzaXN0VGltZXJSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dTY3JvbGxUb0JvdHRvbSwgc2V0U2hvd1Njcm9sbFRvQm90dG9tXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgcmV0cnlNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgc3RvcEdlbmVyYXRpb24sXG4gIH0gPSB1c2VDaGF0TWFuYWdlcih7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhdHRhY2htZW50cyxcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0T3B0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgY2hhbmdlUHJvamVjdChvcHRpb24pXG4gICAgfSxcbiAgICBbY2hhbmdlUHJvamVjdF1cbiAgKVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGEgZWwgYm90w7NuIFwic2Nyb2xsIHRvIGJvdHRvbVwiIHkgbG9zIGdyYWRpZW50ZXMgZGUgYm9yZGUgYSBwYXJ0aXIgZGVcbiAgICogbGEgcG9zaWNpw7NuIGRlbCBzY3JvbGwuIExvcyByZWZzIGV2aXRhbiBgc2V0U3RhdGVgIGN1YW5kbyBlbCB2YWxvciBubyBjYW1iaWE6XG4gICAqIGVzdG8gY29ycmUgZW4gY2FkYSBmcmFtZSBkZWwgc3RyZWFtLlxuICAgKi9cbiAgY29uc3QgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBlbFxuICAgIC8vIEVsIHNwYWNlciBkZWwgdHVybm8gZXMgYWx0byByZXNlcnZhZG8sIG5vIGNvbnRlbmlkbzogc2kgbm8gbG8gZGVzY29udGFtb3NcbiAgICAvLyBsYSBmbGVjaGEgeSBlbCBncmFkaWVudGUgZGUgYWJham8gcXVlZGFuIGVuY2VuZGlkb3MgZHVyYW50ZSB0b2RvIGVsIHR1cm5vLlxuICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IGNvbXB1dGVEaXN0YW5jZUZyb21Cb3R0b20oc2Nyb2xsSGVpZ2h0LCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCwgc2Nyb2xsVG9wLCBjbGllbnRIZWlnaHQpXG5cbiAgICBjb25zdCBzaG91bGRTaG93ID0gc2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tKGRpc3RhbmNlRnJvbUJvdHRvbSlcbiAgICBpZiAoc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgIT09IHNob3VsZFNob3cpIHtcbiAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFRvcEdyYWRpZW50ID0gc2hvdWxkU2hvd1RvcFNjcm9sbEdyYWRpZW50KHNjcm9sbFRvcClcbiAgICBpZiAoc2hvd1RvcEdyYWRpZW50UmVmLmN1cnJlbnQgIT09IG5leHRUb3BHcmFkaWVudCkge1xuICAgICAgc2hvd1RvcEdyYWRpZW50UmVmLmN1cnJlbnQgPSBuZXh0VG9wR3JhZGllbnRcbiAgICAgIHNldFNob3dUb3BHcmFkaWVudChuZXh0VG9wR3JhZGllbnQpXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEJvdHRvbUdyYWRpZW50ID0gc2hvdWxkU2hvd0JvdHRvbVNjcm9sbEdyYWRpZW50KGRpc3RhbmNlRnJvbUJvdHRvbSlcbiAgICBpZiAoc2hvd0JvdHRvbUdyYWRpZW50UmVmLmN1cnJlbnQgIT09IG5leHRCb3R0b21HcmFkaWVudCkge1xuICAgICAgc2hvd0JvdHRvbUdyYWRpZW50UmVmLmN1cnJlbnQgPSBuZXh0Qm90dG9tR3JhZGllbnRcbiAgICAgIHNldFNob3dCb3R0b21HcmFkaWVudChuZXh0Qm90dG9tR3JhZGllbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGlubWVkaWF0byBhbCBmb25kbyAoZGVudHJvIGRlIHJBRiBwYXJhIGNvb3JkaW5hciBjb24gZWwgcGFpbnQpXG4gICAqIHkgYWN0dWFsaXphIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uIFNvbG8gc2UgdXNhIGFsIGFicmlyL2NhcmdhciB1biBjaGF0XG4gICAqIG8gY3VhbmRvIGVsIHVzdWFyaW8gcGlkZSBpciBhbCBmb25kbzogbnVuY2EgZHVyYW50ZSBlbCBzdHJlYW0uXG4gICAqL1xuICBjb25zdCBzY3JvbGxUb0JvdHRvbVRpbWVvdXRSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKVxuICBjb25zdCBzY3JvbGxUb0JvdHRvbVJhZiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRzOiB7IGRlbGF5TXM/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IGRlbGF5TXMgPSAwIH0gPSBvcHRzXG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNjcm9sbFRvQm90dG9tVGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChzY3JvbGxUb0JvdHRvbVRpbWVvdXRSZWYuY3VycmVudClcbiAgICAgICAgc2Nyb2xsVG9Cb3R0b21UaW1lb3V0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgICBpZiAoZGVsYXlNcyA+IDApIHNjcm9sbFRvQm90dG9tVGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dChydW4sIGRlbGF5TXMpXG4gICAgICBlbHNlIHJ1bigpXG4gICAgfSxcbiAgICBbdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICB1c2VFZmZlY3QoXG4gICAgKCkgPT4gKCkgPT4ge1xuICAgICAgaWYgKHNjcm9sbFRvQm90dG9tVGltZW91dFJlZi5jdXJyZW50KSBjbGVhclRpbWVvdXQoc2Nyb2xsVG9Cb3R0b21UaW1lb3V0UmVmLmN1cnJlbnQpXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3QgY2FuY2VsVHVyblNjcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID09PSBudWxsKSByZXR1cm5cbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGFuaW1hZG8gY29uIGVhc2luZyBwcm9waW86IGBiZWhhdmlvcjogJ3Ntb290aCdgIG5vIHBlcm1pdGUgcmVndWxhciBsYVxuICAgKiBkdXJhY2nDs24geSBlbCBzYWx0byBhbCBhbmNsYXIgZWwgdHVybm8gcXVlZGEgZGVtYXNpYWRvIHNlY28uXG4gICAqL1xuICBjb25zdCBhbmltYXRlU2Nyb2xsVG8gPSB1c2VDYWxsYmFjayhcbiAgICAodG9wOiBudW1iZXIpID0+IHtcbiAgICAgIGNhbmNlbFR1cm5TY3JvbGwoKVxuICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBpZiAoIWVsKSByZXR1cm5cbiAgICAgIGNvbnN0IGZyb20gPSBlbC5zY3JvbGxUb3BcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gdG9wIC0gZnJvbVxuICAgICAgaWYgKHNob3VsZFNraXBUdXJuU2Nyb2xsQW5pbWF0aW9uKGRpc3RhbmNlKSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gY29tcHV0ZVR1cm5TY3JvbGxEdXJhdGlvbk1zKGRpc3RhbmNlKVxuXG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgY29uc3Qgc3RlcCA9IChub3c6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWluKDEsIChub3cgLSBzdGFydGVkQXQpIC8gZHVyYXRpb24pXG4gICAgICAgIGNvbnN0IGVhc2VkID0gZWFzZU91dEV4cG9TY3JvbGxQcm9ncmVzcyhwcm9ncmVzcylcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gZnJvbSArIGRpc3RhbmNlICogZWFzZWRcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBwcm9ncmVzcyA8IDEgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCkgOiBudWxsXG4gICAgICB9XG4gICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcClcbiAgICB9LFxuICAgIFtjYW5jZWxUdXJuU2Nyb2xsLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiBjYW5jZWxUdXJuU2Nyb2xsLCBbY2FuY2VsVHVyblNjcm9sbF0pXG5cbiAgY29uc3Qgc2V0U3BhY2VySGVpZ2h0ID0gdXNlQ2FsbGJhY2soKG5leHQ6IG51bWJlcikgPT4ge1xuICAgIGlmICghc2hvdWxkVXBkYXRlU3BhY2VySGVpZ2h0KHNwYWNlckhlaWdodFJlZi5jdXJyZW50LCBuZXh0KSkgcmV0dXJuXG4gICAgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPSBuZXh0XG4gICAgaWYgKHNwYWNlckVsUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNwYWNlckVsUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gYCR7bmV4dH1weGBcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsZWFyVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0U3BhY2VySGVpZ2h0KDApXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIC8qKlxuICAgKiBEZXZ1ZWx2ZSBlbCBhbHRvIHJlc2VydmFkbyBxdWUgc2UgcHVlZGUgc2FjYXIgc2luIG1vdmVyIGxhIHZpc3RhOiB0b2RvIGxvXG4gICAqIHF1ZSBxdWVkZSBwb3IgZGViYWpvIGRlbCBzY3JvbGwgYWN0dWFsLiBTaSBlbCB1c3VhcmlvIGVzdMOhIGVuIGVsIGZvbmRvLCBzZVxuICAgKiBzYWNhIGVudGVybzsgc2kgZXN0w6EgYSBtaXRhZCBkZSBjYW1pbm8sIHNlIHZhIGRyZW5hbmRvIGEgbWVkaWRhIHF1ZSBiYWphLlxuICAgKi9cbiAgY29uc3QgZHJhaW5UdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCB8fCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA8PSAwKSByZXR1cm5cbiAgICBzZXRTcGFjZXJIZWlnaHQoY29tcHV0ZVJlbW92YWJsZVR1cm5TcGFjZShlbC5zY3JvbGxIZWlnaHQsIGVsLmNsaWVudEhlaWdodCwgZWwuc2Nyb2xsVG9wLCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCkpXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIC8qKlxuICAgKiBFbCB1c3VhcmlvIHRvbcOzIGVsIGNvbnRyb2wgZGVsIHNjcm9sbDogZWwgdHVybm8gZGVqYSBkZSBlc3RhciBhbmNsYWRvIHkgZWxcbiAgICogZXNwYWNpbyByZXNlcnZhZG8gZW1waWV6YSBhIGRldm9sdmVyc2UuIFNpbiBhbmNsYSB5IGNvbiBzcGFjZXIgPiAwLCBlbFxuICAgKiBoYW5kbGVyIGRlIHNjcm9sbCBzaWd1ZSBkcmVuYW5kbyBoYXN0YSBxdWUgbGxlZ2EgYWwgZm9uZG8geSBubyBxdWVkYSBodWVjby5cbiAgICovXG4gIGNvbnN0IHJlbGVhc2VUdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzaG91bGRSZWxlYXNlVHVyblNwYWNlKGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQsIHNwYWNlckhlaWdodFJlZi5jdXJyZW50KSkgcmV0dXJuXG4gICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBkcmFpblR1cm5TcGFjZSgpXG4gIH0sIFtkcmFpblR1cm5TcGFjZV0pXG5cbiAgY29uc3QgaGFuZGxlVXNlclNjcm9sbEludGVudCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjYW5jZWxUdXJuU2Nyb2xsKClcbiAgICByZWxlYXNlVHVyblNwYWNlKClcbiAgfSwgW2NhbmNlbFR1cm5TY3JvbGwsIHJlbGVhc2VUdXJuU3BhY2VdKVxuXG4gIGNvbnN0IG1lYXN1cmVUdXJuID0gdXNlQ2FsbGJhY2soKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IHNwYWNlckVsID0gc3BhY2VyRWxSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgIXNwYWNlckVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcXVlc3Rpb25FbCA9IGVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGBbZGF0YS1tZXNzYWdlLWlkPVwiJHtxdWVzdGlvbklkfVwiXWApXG4gICAgaWYgKCFxdWVzdGlvbkVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgY29udGFpbmVyVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgY29uc3QgeyBxdWVzdGlvblRvcCwgdHVybkhlaWdodCB9ID0gY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0KHtcbiAgICAgIGNvbnRhaW5lclRvcCxcbiAgICAgIHF1ZXN0aW9uVG9wOiBxdWVzdGlvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxcbiAgICAgIGNvbnRlbnRCb3R0b206IHNwYWNlckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxcbiAgICAgIHNjcm9sbFRvcDogZWwuc2Nyb2xsVG9wLFxuICAgIH0pXG4gICAgcmV0dXJuIHsgZWwsIHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0IH1cbiAgfSwgW10pXG5cbiAgY29uc3QgcmVzZXJ2ZVR1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKFxuICAgIChxdWVzdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZVR1cm4ocXVlc3Rpb25JZClcbiAgICAgIGlmICghbWVhc3VyZWQpIHJldHVyblxuICAgICAgY29uc3QgeyBlbCwgcXVlc3Rpb25Ub3AsIHR1cm5IZWlnaHQgfSA9IG1lYXN1cmVkXG5cbiAgICAgIC8vIEFuY2xhbW9zIHNpZW1wcmUsIGluY2x1c28gY3VhbmRvIG5vIGhhZ2EgZmFsdGEgcmVzZXJ2YXI6IGR1cmFudGUgZWxcbiAgICAgIC8vIHR1cm5vIGVsIHNjcm9sbCBubyBzZSBtdWV2ZSBzb2xvIGVuIG5pbmfDum4gY2Fzby5cbiAgICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBxdWVzdGlvbklkXG5cbiAgICAgIGNvbnN0IHRhcmdldFNjcm9sbFRvcCA9IGNvbXB1dGVUdXJuU2Nyb2xsVGFyZ2V0VG9wKHF1ZXN0aW9uVG9wLCBlbC5jbGllbnRIZWlnaHQpXG4gICAgICBjb25zdCBwbGFuID0gcmVzb2x2ZVJlc2VydmVUdXJuU3BhY2VQbGFuKHtcbiAgICAgICAgY3VycmVudFNjcm9sbFRvcDogZWwuc2Nyb2xsVG9wLFxuICAgICAgICB0YXJnZXRTY3JvbGxUb3AsXG4gICAgICAgIGNsaWVudEhlaWdodDogZWwuY2xpZW50SGVpZ2h0LFxuICAgICAgICB0dXJuSGVpZ2h0LFxuICAgICAgfSlcbiAgICAgIGlmIChwbGFuLmtpbmQgPT09ICdza2lwLXJlc2VydmF0aW9uJykge1xuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoMClcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2V0U3BhY2VySGVpZ2h0KHBsYW4uc3BhY2VySGVpZ2h0KVxuICAgICAgYW5pbWF0ZVNjcm9sbFRvKHBsYW4udGFyZ2V0U2Nyb2xsVG9wKVxuICAgIH0sXG4gICAgW21lYXN1cmVUdXJuLCBzZXRTcGFjZXJIZWlnaHQsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzLCBhbmltYXRlU2Nyb2xsVG9dXG4gIClcblxuICAvKipcbiAgICogRW5jb2dlIGVsIHNwYWNlciBhIG1lZGlkYSBxdWUgY3JlY2UgbGEgcmVzcHVlc3RhOiBlbCBhbHRvIHRvdGFsIGRlbCBzY3JvbGxcbiAgICogcXVlZGEgY29uc3RhbnRlIHkgbGEgdmlzdGEgbm8gc2UgbXVldmUgc29sYS4gU29sbyBhY2hpY2EsIG51bmNhIGFncmFuZGEsXG4gICAqIHBhcmEgbm8gaW55ZWN0YXIgZXNwYWNpbyBlbiB0dXJub3MgcXVlIGFycmFuY2Fyb24gc2luIHJlc2VydmEuXG4gICAqIERldnVlbHZlIHNpIGVsIHR1cm5vIHNpZ3VlIGFuY2xhZG8gKGF1bnF1ZSBlbCBzcGFjZXIgeWEgc2VhIDApLlxuICAgKi9cbiAgY29uc3Qgc3luY1R1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpOiBib29sZWFuID0+IHtcbiAgICBpZiAoIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHJldHVybiBmYWxzZVxuICAgIGlmIChzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA+IDApIHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZVR1cm4oYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudClcbiAgICAgIGlmIChtZWFzdXJlZCkge1xuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoXG4gICAgICAgICAgY29tcHV0ZVN5bmNlZFR1cm5TcGFjZXJIZWlnaHQobWVhc3VyZWQuZWwuY2xpZW50SGVpZ2h0LCBtZWFzdXJlZC50dXJuSGVpZ2h0LCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudClcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9LCBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjbGVhclR1cm5TcGFjZSgpXG4gICAgLy8gTWlzbWEgY3VydmEgeSBkdXJhY2nDs24gcXVlIGVsIGFuY2xhamUgZGVsIHR1cm5vOiBlbCBgc21vb3RoYCBuYXRpdm8gZnJlbmEgc2Vjby5cbiAgICBhbmltYXRlU2Nyb2xsVG8ocmVzb2x2ZVNjcm9sbFRvQm90dG9tVGFyZ2V0VG9wKGVsLnNjcm9sbEhlaWdodCwgZWwuY2xpZW50SGVpZ2h0KSlcbiAgfSwgW2NsZWFyVHVyblNwYWNlLCBhbmltYXRlU2Nyb2xsVG9dKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IHNjcm9sbEZyYW1lID0gcHJvY2Vzc0NoYXRNZXNzYWdlc1Njcm9sbEZyYW1lKHtcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgIGNsaWVudEhlaWdodCxcbiAgICAgICAgICBsYXN0U2Nyb2xsVG9wOiBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQsXG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkOiBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCxcbiAgICAgICAgICBhbmNob3JlZFR1cm5JZDogYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCxcbiAgICAgICAgICBpbml0aWFsQ2hhdElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gc2Nyb2xsRnJhbWUubmV4dFNjcm9sbFRocmVzaG9sZFxuICAgICAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBzY3JvbGxGcmFtZS5sYXN0U2Nyb2xsVG9wXG5cbiAgICAgICAgaWYgKHNjcm9sbEZyYW1lLnNob3VsZERyYWluVHVyblNwYWNlKSBkcmFpblR1cm5TcGFjZSgpXG5cbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuXG4gICAgICAgIGlmIChzY3JvbGxGcmFtZS5zaG91bGRTY2hlZHVsZVNjcm9sbFBlcnNpc3QpIHtcbiAgICAgICAgICBpZiAoc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24oYXV0aFVzZXIuaWQsIHtcbiAgICAgICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICBzY3JvbGxTZXNzaW9uSWQ6IGluaXRpYWxDaGF0SWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sIDE1MClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY3JvbGxGcmFtZS5zaG91bGROb3RpZnlTY3JvbGxUb0JvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFthdXRoVXNlci5pZCwgZHJhaW5UdXJuU3BhY2UsIGhhbmRsZVNjcm9sbCwgaW5pdGlhbENoYXRJZCwgb25TY3JvbGxUb0JvdHRvbSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuICBjb25zdCBzZW5kTWVzc2FnZVByb3h5UmVmID0gdXNlUmVmKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICApXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUHJveHlSZWYgPSB1c2VSZWYoKCkgPT4gc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCgpKVxuXG4gIC8qKlxuICAgKiBgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrYCBzZSBwYXNhIGEgVE9ET1MgbG9zIE1lc3NhZ2VJdGVtLCBhc8OtIHF1ZSBzdSBpZGVudGlkYWRcbiAgICogZGVjaWRlIHNpIGVsIGBtZW1vYCBkZSBsYSBsaXN0YSBzb3N0aWVuZS4gTGVlbW9zIHBvciByZWYgbG8gcXVlIGNhbWJpYSBlbiBjYWRhXG4gICAqIHVwZGF0ZSAoYG1lc3NhZ2VzYCwgYHNlbmRNZXNzYWdlYCwgbGFzIHN1Z2VyZW5jaWFzIHlhIGVsZWdpZGFzKSBwYXJhIHF1ZSBlbFxuICAgKiBjYWxsYmFjayBzZWEgZXN0YWJsZTogc2kgbm8sIGFsIHRlcm1pbmFyIGVsIHN0cmVhbSBzZSByZXBpbnRhIGVsIGNoYXQgZW50ZXJvXG4gICAqIHkgY2FkYSBNYWlhU3RyZWFtZG93biB2dWVsdmUgYSBwYXJzZWFyIHN1IG1hcmtkb3duLlxuICAgKi9cbiAgY29uc3QgbWVzc2FnZXNEYXRhUmVmID0gdXNlUmVmKG1lc3NhZ2VzKVxuICBjb25zdCBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmID0gdXNlUmVmKHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMpXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgICBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50ID0gc3RvcEdlbmVyYXRpb25cbiAgICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCA9IG9uU2VuZE1lc3NhZ2VSZWFkeVxuICAgIG1lc3NhZ2VzRGF0YVJlZi5jdXJyZW50ID0gbWVzc2FnZXNcbiAgICBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmLmN1cnJlbnQgPSBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChzaG91bGRJZ25vcmVTdWdnZXN0aW9uQ2xpY2soc3VnZ2VzdGlvbiwgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZi5jdXJyZW50W21lc3NhZ2VJZF0pKSByZXR1cm5cbiAgICAgIGNvbnN0IGN1cnJlbnRNZXNzYWdlcyA9IG1lc3NhZ2VzRGF0YVJlZi5jdXJyZW50XG4gICAgICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBpc01haWFrZXJBZ2VudChhZ2VudClcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRTdWdnZXN0ZWRBbnN3ZXIsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogcmVzb2x2ZVN1Z2dlc3Rpb25BbmFseXRpY3NBZ2VudFR5cGUoaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50LCBhZ2VudD8udHlwZSksXG4gICAgICB9KVxuICAgICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyhwcmV2ID0+ICh7IC4uLnByZXYsIFttZXNzYWdlSWRdOiB0cnVlIH0pKVxuXG4gICAgICBjb25zdCB0YXJnZXRNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzLmZpbmQobXNnID0+IG1zZy5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgaWYgKGlzUmV0cnlTdWdnZXN0aW9uU2VsZWN0aW9uKHRhcmdldE1lc3NhZ2U/LmlzRXJyb3IsIHN1Z2dlc3Rpb24sIHQoJ2NoYXQucmV0cnknKSkpIHtcbiAgICAgICAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgICAgICAgIC5hdCgtMSlcbiAgICAgICAgaWYgKGxhc3RVc2VyTWVzc2FnZT8ubWVzc2FnZSkge1xuICAgICAgICAgIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobGFzdFVzZXJNZXNzYWdlLm1lc3NhZ2UsIHJlc29sdmVSZXRyeUF0dGFjaG1lbnRzRnJvbVVzZXJNZXNzYWdlKGxhc3RVc2VyTWVzc2FnZSkpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudChzdWdnZXN0aW9uKVxuICAgIH0sXG4gICAgW2V2ZW50LCBhZ2VudCwgdCwgYXV0aFVzZXIuaWRdXG4gIClcblxuICAvLyBDYXJkcyB5YSByZXNwb25kaWRhczogbGEgcmVzcHVlc3RhIHNlIGRpYnVqYSBkZW50cm8gZGVsIG1lbnNhamUgZGVsIGFzaXN0ZW50ZSB5IGxhIGJ1cmJ1amEgZGVsIHVzdWFyaW8gc2Ugb2N1bHRhLlxuICBjb25zdCBhbnN3ZXJlZE11bHRpcGxlQ2hvaWNlcyA9IHVzZU1lbW8oKCkgPT4gcmVzb2x2ZUFuc3dlcmVkTXVsdGlwbGVDaG9pY2VzKG1lc3NhZ2VzKSwgW21lc3NhZ2VzXSlcblxuICAvLyBMYSBjYXJkIGRlIG11bHRpcGxlIGNob2ljZSBzZSBkaWJ1amEgc29icmUgZWwgaW5wdXQgKENoYXRGb290ZXIpLCBxdWUgZXMgaGVybWFubyBkZSBlc3RhIGxpc3RhLlxuICBjb25zdCBkaXNtaXNzZWRNdWx0aXBsZUNob2ljZUlkcyA9IHVzZU11bHRpcGxlQ2hvaWNlU3RvcmUoc3RhdGUgPT4gc3RhdGUuZGlzbWlzc2VkTWVzc2FnZUlkcylcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBuZXh0ID0gcmVzb2x2ZVBlbmRpbmdNdWx0aXBsZUNob2ljZSh7XG4gICAgICBtZXNzYWdlcyxcbiAgICAgIGlzU3RyZWFtaW5nOiB3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nLFxuICAgICAgZGlzbWlzc2VkTWVzc2FnZUlkczogZGlzbWlzc2VkTXVsdGlwbGVDaG9pY2VJZHMsXG4gICAgfSlcbiAgICBjb25zdCB7IHBlbmRpbmcsIHNldFBlbmRpbmcgfSA9IHVzZU11bHRpcGxlQ2hvaWNlU3RvcmUuZ2V0U3RhdGUoKVxuICAgIGlmIChpc1NhbWVQZW5kaW5nTXVsdGlwbGVDaG9pY2UocGVuZGluZywgbmV4dCkpIHJldHVyblxuICAgIHNldFBlbmRpbmcobmV4dClcbiAgICBpZiAoIW5leHQgfHwgcGVuZGluZz8ubWVzc2FnZUlkID09PSBuZXh0Lm1lc3NhZ2VJZCkgcmV0dXJuXG4gICAgLy8gTGEgY2FyZCBhY2hpY2EgZWwgw6FyZWEgZGUgbWVuc2FqZXM6IHNpbiBlc3RvIGxhIHByZWd1bnRhIGRlbCBhc2lzdGVudGUgcXVlZGEgdGFwYWRhIGRlYmFqby5cbiAgICAvLyBEb2JsZSByQUY6IGVsIGZvb3RlciBzZSBwaW50YSBjb24gbGEgY2FyZCBlbiBlbCBmcmFtZSBzaWd1aWVudGUgYWwgc2V0UGVuZGluZy4gTm8gc2UgY2FuY2VsYSBlbiBlbFxuICAgIC8vIGNsZWFudXAgcG9ycXVlIGBtZXNzYWdlc2AgcHVlZGUgY2FtYmlhciBkZSBpZGVudGlkYWQgZW5zZWd1aWRhIHkgbGEgY29ycmlkYSBzaWd1aWVudGUgeWEgbm8gcmVwcm9ncmFtYS5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICBjb25zdCByZW5kZXJlZCA9IGVsPy5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tZXNzYWdlLWlkXScpXG4gICAgICAgIGNvbnN0IGxhc3QgPSByZW5kZXJlZD8uW3JlbmRlcmVkLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZWwgfHwgIWxhc3QpIHJldHVyblxuICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGxhc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIC0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tXG4gICAgICAgIGlmIChvdmVyZmxvdyA+IDApIGVsLnNjcm9sbFRvcCArPSBvdmVyZmxvd1xuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICB9KVxuICAgIClcbiAgfSwgW21lc3NhZ2VzLCB3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgZGlzbWlzc2VkTXVsdGlwbGVDaG9pY2VJZHMsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4gKCkgPT4gdXNlTXVsdGlwbGVDaG9pY2VTdG9yZS5nZXRTdGF0ZSgpLnNldFBlbmRpbmcobnVsbCksIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KSB7XG4gICAgICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudChcbiAgICAgICAgc2VuZE1lc3NhZ2VQcm94eVJlZi5jdXJyZW50LFxuICAgICAgICBzdG9wR2VuZXJhdGlvblByb3h5UmVmLmN1cnJlbnQsXG4gICAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgICAgaXNXcml0aW5nXG4gICAgICApXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50ID0gaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXG4gIH0sIFtpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZEluaXRpYWxpemVDaGF0KGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50KSkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBNaWVudHJhcyBlbCBzdHJlYW0gY3JlY2U6IGVuY29nZXIgZWwgc3BhY2VyIGRlbCB0dXJubyBhbmNsYWRvIHlcbiAgLy8gYWN0dWFsaXphciBmbGVjaGEvZ3JhZGllbnRlcy4gRWwgc2Nyb2xsIG5vIHNlIG11ZXZlIHNvbG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFzaG91bGRSdW5TdHJlYW1UdXJuU3luY0VmZmVjdCh3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZykpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc3luY1R1cm5TcGFjZSgpXG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIH1cblxuICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZJZCAhPSBudWxsKSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgc3luY1R1cm5TcGFjZSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIGNvbnN0IGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgLy8gQ2FtYmlvIGRlIGNoYXQ6IGVsIGFuY2xhIHkgZWwgc3BhY2VyIGRlbCB0dXJubyBhbnRlcmlvciBkZWphbiBkZSBhcGxpY2FyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvdWxkQ2xlYXJMYXN0UmVzZXJ2ZWRRdWVzdGlvbihsb2FkaW5nTWVzc2FnZXMpKSByZXR1cm5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGNsZWFyVHVyblNwYWNlKClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgY2xlYXJUdXJuU3BhY2VdKVxuXG4gIC8vIEFsIGVudmlhciB1biBtZW5zYWplOiBhbmNsYW1vcyBlbCB0dXJubyB5IGhhY2Vtb3MgZWwgw7puaWNvIHNjcm9sbCBkZWwgY2ljbG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gVW5hIHJlc3B1ZXN0YSBkZSBjYXJkIG5vIHNlIHJlbmRlcml6YTogZWwgdHVybm8gc2UgYW5jbGEgZW4gbGEgY2FyZCByZXN1ZWx0YSBxdWUgcXVlZGEgYXJyaWJhLlxuICAgIGNvbnN0IHF1ZXN0aW9uSWQgPSByZXNvbHZlVHVybkFuY2hvcklkKFxuICAgICAgbWVzc2FnZXMsXG4gICAgICBmaW5kTGFzdFF1ZXN0aW9uSWQobWVzc2FnZXMpLFxuICAgICAgYW5zd2VyZWRNdWx0aXBsZUNob2ljZXMuaGlkZGVuTWVzc2FnZUlkc1xuICAgIClcbiAgICBpZiAoXG4gICAgICAhc2hvdWxkU2NoZWR1bGVUdXJuU3BhY2VSZXNlcnZhdGlvbihcbiAgICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgICAgIHF1ZXN0aW9uSWQsXG4gICAgICAgIGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnRcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghcXVlc3Rpb25JZCkgcmV0dXJuXG4gICAgbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudCA9IHF1ZXN0aW9uSWRcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcmVzZXJ2ZVR1cm5TcGFjZShxdWVzdGlvbklkKSlcbiAgfSwgW21lc3NhZ2VzLCBsb2FkaW5nTWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgcmVzZXJ2ZVR1cm5TcGFjZSwgYW5zd2VyZWRNdWx0aXBsZUNob2ljZXNdKVxuXG4gIC8vIFNjcm9sbCBjdWFuZG8gY2FtYmlhbiBsb3MgbWVuc2FqZXM6IGRpc3Rpbmd1ZSBcIm51ZXZvIG1lbnNhamVcIiAoYWdyZWdhZG8pXG4gIC8vIGRlIFwicmVlbXBsYXpvXCIgKG1pc21vIGlkL2xlbmd0aCwgZWouIGZlZWRiYWNrIG8gYXBwcm92YWxTdGF0dXMpLiBFblxuICAvLyByZWVtcGxhem9zIHNvbG8gc2UgcmVjYWxjdWxhIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24gc2luIGZvcnphciBzY3JvbGwuXG4gIGNvbnN0IGxhc3RNZXNzYWdlSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmID0gdXNlUmVmPG51bWJlcj4oMClcblxuICAvLyBBbCBjYW1iaWFyIGRlIHNlc2nDs24sIHJlc2V0ZWFyIGVzdGFkbyBkZSBzY3JvbGwgbWFudWFsIHBhcmEgbm8gaGVyZWRhciBlbCBjaGF0IGFudGVyaW9yLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IDBcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSAwXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBSZXN0YXVyYWNpw7NuIGRlc2RlIGNhY2hlIChzaW4gTG9hZGVyKTogYmFqYXIgYWwgZm9uZG8gYWwgcmVhYnJpciBzZXNpw7NuIHZpc2l0YWRhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChcbiAgICAgICFzaG91bGRSdW5TZXNzaW9uQ2FjaGVTY3JvbGxUb0JvdHRvbShcbiAgICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgICBpbml0aWFsQ2hhdElkLFxuICAgICAgICBtZXNzYWdlcy5sZW5ndGgsXG4gICAgICAgIGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcblxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXT8uaWQgPz8gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgfSwgW2luaXRpYWxDaGF0SWQsIGxvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCBtZXNzYWdlcywgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgc2hvdWxkU2tpcE1lc3NhZ2VzU2Nyb2xsRWZmZWN0KFxuICAgICAgICBCb29sZWFuKG1lc3NhZ2VzUmVmLmN1cnJlbnQpLFxuICAgICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICAgICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gICAgY29uc3QgbGFzdElkID0gbGFzdE1lc3NhZ2U/LmlkID8/IG51bGxcbiAgICBjb25zdCBwcmV2SWQgPSBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnRcbiAgICBjb25zdCBwcmV2TGVuID0gbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnRcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBsYXN0SWRcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgY29uc3QgaXNOZXdNZXNzYWdlID0gaXNOZXdDaGF0TWVzc2FnZUV2ZW50KGxhc3RJZCwgcHJldklkLCBtZXNzYWdlcy5sZW5ndGgsIHByZXZMZW4pXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IHNjcm9sbERlY2lzaW9uID0gc2hvdWxkQXV0b1Njcm9sbE9uTWVzc2FnZXNDaGFuZ2Uoe1xuICAgICAgaXNOZXdNZXNzYWdlLFxuICAgICAgYW5jaG9yZWRUdXJuSWQ6IGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBpc1dyaXRpbmcsXG4gICAgICBpc0F0Qm90dG9tOiByZXNvbHZlQ29udGFpbmVyQXRCb3R0b20oY29udGFpbmVyKSxcbiAgICAgIGlzQW5zd2VyT3JRdWVzdGlvbjogaXNBbnN3ZXJPclF1ZXN0aW9uQ2hhdE1lc3NhZ2VJZChsYXN0TWVzc2FnZT8uaWQpLFxuICAgICAgaXNBcHByb3ZhbDogaXNBcHByb3ZhbENoYXRNZXNzYWdlKGxhc3RNZXNzYWdlKSxcbiAgICAgIGhhc0luaXRpYWxNZXNzYWdlOiBoYXNJbml0aWFsVXNlck1lc3NhZ2VJbkxpc3QobWVzc2FnZXMpLFxuICAgICAgbWVzc2FnZXNMZW5ndGg6IG1lc3NhZ2VzLmxlbmd0aCxcbiAgICAgIHByZXZNZXNzYWdlc0xlbmd0aDogcHJldkxlbixcbiAgICB9KVxuXG4gICAgaWYgKHNjcm9sbERlY2lzaW9uID09PSAnYWZmb3JkYW5jZXMtb25seScpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChzY3JvbGxEZWNpc2lvbiA9PT0gJ3N5bmMtdHVybicpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzeW5jVHVyblNwYWNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICB9LCBbXG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIHNjcm9sbFRvQm90dG9tUmFmLFxuICAgIHN5bmNUdXJuU3BhY2UsXG4gICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsXG4gIF0pXG5cbiAgLy8gQWwgYWJyaXIvY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuIGVsIGNvbnRlbmVkb3Igc2UgcmVtb250YSAoTG9hZGVyIOKGkiBsaXN0YSkgY29uXG4gIC8vIHNjcm9sbFRvcD0wLiBGb3J6YW1vcyBpciBhbCBmb25kbyBhbCB0ZXJtaW5hciBsb2FkTWVzc2FnZXMsIHNpbiBhZmVjdGFyIHBhZ2luYWNpw7NuIGhhY2lhIGFycmliYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBqdXN0RmluaXNoZWRMb2FkaW5nID0gZGV0ZWN0SnVzdEZpbmlzaGVkTG9hZGluZ01lc3NhZ2VzKHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50LCBsb2FkaW5nTWVzc2FnZXMpXG4gICAgd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgPSBsb2FkaW5nTWVzc2FnZXNcblxuICAgIGlmICghc2hvdWxkU2Nyb2xsVG9Cb3R0b21BZnRlckxvYWQoanVzdEZpbmlzaGVkTG9hZGluZywgbWVzc2FnZXMubGVuZ3RoKSkgcmV0dXJuXG5cbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIC8vIEVzdGFkbyBpbmljaWFsIGRlbCBib3TDs24gc2Nyb2xsLXRvLWJvdHRvbSBhbCB0ZXJtaW5hciBsb2FkaW5nTWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZFVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzT25Mb2FkRW5kKGxvYWRpbmdNZXNzYWdlcykpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICB9XG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IHJlc29sdmVMYXN0VXNlck1lc3NhZ2VGb3JBdHRhY2htZW50cyhtZXNzYWdlcywgYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcblxuICBjb25zdCBhdHRhY2htZW50c0NvdW50ID0gY291bnRVc2VyTWVzc2FnZUF0dGFjaG1lbnRzKGxhc3RVc2VyTWVzc2FnZSlcblxuICBjb25zdCBzdHJlYW1Mb2FkaW5nRGlzcGxheSA9IHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSh7XG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgYWN0aXZlTG9hZGluZ3M6IGFjdGl2ZUxvYWRpbmdzIHx8IHt9LFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgaGFzQXR0YWNobWVudHM6IEJvb2xlYW4oYXR0YWNobWVudHNDb3VudCksXG4gICAgYXR0YWNobWVudHNDb3VudCxcbiAgICB0LFxuICB9KVxuXG4gIGNvbnN0IGlzU2Nyb2xsT25QYXJlbnQgPSByZXNvbHZlU2Nyb2xsT25QYXJlbnRNb2RlKGV4cGFuZGVkKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZENsZWFyU2Nyb2xsUmVzdG9yZVdpdGhvdXRDaGF0KGluaXRpYWxDaGF0SWQpKSB7XG4gICAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb24gPSByZWFkTWFpYVBhbmVsU2Vzc2lvbihhdXRoVXNlci5pZClcbiAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gcmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbihcbiAgICAgIHNlc3Npb25cbiAgICAgICAgPyB7IHNjcm9sbFNlc3Npb25JZDogc2Vzc2lvbi5zY3JvbGxTZXNzaW9uSWQgPz8gdW5kZWZpbmVkLCBzY3JvbGxUb3A6IHNlc3Npb24uc2Nyb2xsVG9wID8/IHVuZGVmaW5lZCB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIGluaXRpYWxDaGF0SWRcbiAgICApXG4gIH0sIFthdXRoVXNlci5pZCwgaW5pdGlhbENoYXRJZF0pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgcGVuZGluZ1Njcm9sbFRvcCA9IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnRcbiAgICBpZiAoXG4gICAgICAhY29udGFpbmVyIHx8XG4gICAgICAhc2hvdWxkQXBwbHlQZW5kaW5nU2Nyb2xsUmVzdG9yZShsb2FkaW5nTWVzc2FnZXMsIHBlbmRpbmdTY3JvbGxUb3AsIHRydWUpIHx8XG4gICAgICBwZW5kaW5nU2Nyb2xsVG9wID09IG51bGxcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gcGVuZGluZ1Njcm9sbFRvcFxuICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHBlbmRpbmdTY3JvbGxUb3BcbiAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gbnVsbFxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGhdKVxuXG4gIC8vIEFsIGV4cGFuZGlyL2NvbnRyYWVyIGVsIG1vZGFsIGVsIHJlZiBwYXNhIGEgb3RybyBjb250ZW5lZG9yIChzY3JvbGxUb3Agc2UgcmVzZXRlYSBhIDApLlxuICAvLyBSZXN0YXVyYXIgbGEgcG9zaWNpw7NuIGRlIHNjcm9sbCBhbnRlcyBkZWwgcGFpbnQgcGFyYSBldml0YXIgcXVlIGxhIGNvbnZlcnNhY2nDs24gc2FsdGUgYXJyaWJhLlxuICBjb25zdCBleHBhbmRlZFJlZiA9IHVzZVJlZihleHBhbmRlZClcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoXG4gICAgICBzaG91bGRSZXN0b3JlU2Nyb2xsT25FeHBhbmRlZENoYW5nZShCb29sZWFuKGV4cGFuZGVkUmVmLmN1cnJlbnQpLCBCb29sZWFuKGV4cGFuZGVkKSwgQm9vbGVhbihtZXNzYWdlc1JlZi5jdXJyZW50KSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHNhdmVkU2Nyb2xsVG9wID0gbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50IS5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgIH1cbiAgICBleHBhbmRlZFJlZi5jdXJyZW50ID0gZXhwYW5kZWRcbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGYWRlIGZpbGw+XG4gICAgICAgIDxMb2FkZXIgLz5cbiAgICAgIDwvRmFkZT5cbiAgICApXG4gIH1cblxuICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gIGNvbnN0IGhhc01lc3NhZ2VMZXZlbEluZGljYXRvciA9IGhhc01lc3NhZ2VMZXZlbFN0cmVhbUluZGljYXRvcihsYXN0TWVzc2FnZT8uaWQsIHdhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nKVxuXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGVudCA9IChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiA8TG9hZGluZ1RleHQgdGV4dD17dCgnY2hhdC5sb2FkaW5nTW9yZScpfSAvPn1cbiAgICAgIDw+XG4gICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNMYXN0TWVzc2FnZSA9IGluZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gICAgICAgICAgY29uc3QgeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyLCBpc1N0cmVhbWluZyB9ID0gcmVzb2x2ZUNoYXRMaXN0SXRlbVN0cmVhbWluZ0ZsYWdzKHtcbiAgICAgICAgICAgIHJvbGU6IG1lc3NhZ2Uucm9sZSxcbiAgICAgICAgICAgIHVzZXJJZDogbWVzc2FnZS51c2VyLmlkLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBtZXNzYWdlLmlkLFxuICAgICAgICAgICAgaXNMYXN0TWVzc2FnZSxcbiAgICAgICAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgICAgICAgIGlzV3JpdGluZyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHNob3VsZFNraXBFbXB0eUNoYXRMaXN0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nLFxuICAgICAgICAgICAgICBhdHRhY2htZW50Q291bnQ6IG1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgICBzb3VyY2VDb3VudDogbWVzc2FnZS5zb3VyY2VzPy5sZW5ndGggPz8gMCxcbiAgICAgICAgICAgICAgbWVzc2FnZVRleHQ6IG1lc3NhZ2UubWVzc2FnZSA/PyAnJyxcbiAgICAgICAgICAgICAgcHJvamVjdE5hbWU6IG1lc3NhZ2UucHJvamVjdD8ubmFtZSxcbiAgICAgICAgICAgICAgaGFzQXBwcm92YWw6IEJvb2xlYW4obWVzc2FnZS5hcHByb3ZhbCksXG4gICAgICAgICAgICAgIGhhc011bHRpcGxlQ2hvaWNlOiBCb29sZWFuKG1lc3NhZ2UubXVsdGlwbGVDaG9pY2UpLFxuICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgIGFuc3dlcmVkTXVsdGlwbGVDaG9pY2VzLmhpZGRlbk1lc3NhZ2VJZHNbbWVzc2FnZS5pZF1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUZlZWRiYWNrID0gcmVzb2x2ZURpc2FibGVGZWVkYmFja0Zyb21XYXNIZWxwZnVsKG1lc3NhZ2U/Lndhc0hlbHBmdWwpXG5cbiAgICAgICAgICAvLyBLZXkgZXN0YWJsZTogc29sbyBtZXNzYWdlLmlkIHBhcmEgZXZpdGFyIHJlbW91bnQgZHVyYW50ZSBzdHJlYW1pbmcgKG1lc3NhZ2UuZGF0ZSBwdWVkZSBjYW1iaWFyKVxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSByZXNvbHZlTWVzc2FnZUxpc3RJdGVtS2V5KG1lc3NhZ2UuaWQsIGluZGV4KVxuXG4gICAgICAgICAgY29uc3QgdHVybklkID0gcmVzb2x2ZVJldHJ5VHVybklkKG1lc3NhZ2UpXG4gICAgICAgICAgY29uc3QgdXNlck1lc3NhZ2VGb3JSZXRyeSA9IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5KG1lc3NhZ2VzLCBtZXNzYWdlKVxuICAgICAgICAgIGNvbnN0IGNhblJldHJ5ID0gY2FuUmV0cnlBc3Npc3RhbnRNZXNzYWdlKHtcbiAgICAgICAgICAgIGhhc1VzZXJNZXNzYWdlRm9yUmV0cnk6IEJvb2xlYW4odXNlck1lc3NhZ2VGb3JSZXRyeSksXG4gICAgICAgICAgICBpc1N0cmVhbWluZyxcbiAgICAgICAgICAgIGlzRXJyb3I6IEJvb2xlYW4obWVzc2FnZS5pc0Vycm9yKSxcbiAgICAgICAgICAgIGhhc0FwcHJvdmFsOiBCb29sZWFuKG1lc3NhZ2UuYXBwcm92YWwpLFxuICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogbWVzc2FnZS5pc0Zyb250ZW5kQ2FuY2VsbGVkLFxuICAgICAgICAgICAgaXNDYW5jZWxsZWQ6IG1lc3NhZ2UuaXNfY2FuY2VsbGVkLFxuICAgICAgICAgICAgdHVybklkLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE1lc3NhZ2VJdGVtXG4gICAgICAgICAgICAgIHsuLi5tZXNzYWdlfVxuICAgICAgICAgICAgICBrZXk9e21lc3NhZ2VLZXl9XG4gICAgICAgICAgICAgIGF1dGhVc2VyPXthdXRoVXNlcn1cbiAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259XG4gICAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtoYW5kbGVGZWVkYmFja31cbiAgICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbj17aGFuZGxlQXBwcm92YWxEZWNpc2lvbn1cbiAgICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICAgIGhhbmRsZVJldHJ5PXtjYW5SZXRyeSA/ICgpID0+IHJldHJ5TWVzc2FnZShtZXNzYWdlKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPXshIXNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZS5pZF19XG4gICAgICAgICAgICAgIHJlc29sdmVkTXVsdGlwbGVDaG9pY2VBbnN3ZXI9e2Fuc3dlcmVkTXVsdGlwbGVDaG9pY2VzLmFuc3dlcnNbbWVzc2FnZS5pZF19XG4gICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17bWVzc2FnZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgICAgc3RyZWFtQWN0aXZpdHk9e2lzU3RyZWFtaW5nID8gc3RyZWFtTG9hZGluZ0Rpc3BsYXkgOiBudWxsfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC8+XG4gICAgICB7c3RyZWFtTG9hZGluZ0Rpc3BsYXkgJiZcbiAgICAgICAgc2hvdWxkU2hvd0dsb2JhbFN0cmVhbUxvYWRpbmdJbmRpY2F0b3IoaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yLCBzdHJlYW1Mb2FkaW5nRGlzcGxheSkgJiYgKFxuICAgICAgICAgIDxTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICAgICAgIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1Mb2FkaW5nRGlzcGxheX0gLz5cbiAgICAgICAgICA8L1NDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgey8qIEVzcGFjaW8gcXVlIGxlIHBlcm1pdGUgYSBsYSBwcmVndW50YSBzdWJpciBhbCB0b3BlLiBBbHR1cmEgbWFuZWphZGFcbiAgICAgICAgICBpbXBlcmF0aXZhbWVudGUgZGVzZGUgYHNldFNwYWNlckhlaWdodGA7IGFycmFuY2EgZW4gMC4gKi99XG4gICAgICA8U0NUdXJuU3BhY2VyIHJlZj17c3BhY2VyRWxSZWZ9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgPC8+XG4gIClcblxuICByZXR1cm4gKFxuICAgIC8vIFNpIGVsIHVzdWFyaW8gbXVldmUgZWwgc2Nyb2xsIGFib3J0YW1vcyBsYSBhbmltYWNpw7NuIHkgc29sdGFtb3MgZWwgdHVybm86XG4gICAgLy8gbm8gbGUgcGVsZWFtb3MgZWwgY29udHJvbCBkZWwgY29udGVuZWRvci5cbiAgICA8U0NNZXNzYWdlc091dGVyXG4gICAgICAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9XG4gICAgICBvbldoZWVsPXtoYW5kbGVVc2VyU2Nyb2xsSW50ZW50fVxuICAgICAgb25Ub3VjaFN0YXJ0PXtoYW5kbGVVc2VyU2Nyb2xsSW50ZW50fVxuICAgID5cbiAgICAgIDxTQ01lc3NhZ2VzR3JhZGllbnRUb3AgJHNob3c9e3Nob3dUb3BHcmFkaWVudH0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgIHtpc1Njcm9sbE9uUGFyZW50ID8gKFxuICAgICAgICA8U0NNZXNzYWdlc1Njcm9sbCByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxTQ01lc3NhZ2VzSW5uZXIgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fT57bWVzc2FnZXNDb250ZW50fTwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgICA8L1NDTWVzc2FnZXNTY3JvbGw+XG4gICAgICApIDogKFxuICAgICAgICA8U0NNZXNzYWdlc0lubmVyIHJlZj17bWVzc2FnZXNSZWZ9IG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX0gJHNjcm9sbE9uUGFyZW50PXtmYWxzZX0+XG4gICAgICAgICAge21lc3NhZ2VzQ29udGVudH1cbiAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICApfVxuXG4gICAgICA8U0NNZXNzYWdlc0dyYWRpZW50Qm90dG9tICRzaG93PXtzaG93Qm90dG9tR3JhZGllbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG5cbiAgICAgIHtzaG93U2Nyb2xsVG9Cb3R0b20gJiYgKFxuICAgICAgICA8U2Nyb2xsVG9Cb3R0b21CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxTQ1Njcm9sbEljb25Td2FwICR2aXNpYmxlPXtpc1dyaXRpbmd9IGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgPFNDV3JpdGluZ0RvdHM+XG4gICAgICAgICAgICAgIDxzcGFuIC8+XG4gICAgICAgICAgICAgIDxzcGFuIC8+XG4gICAgICAgICAgICAgIDxzcGFuIC8+XG4gICAgICAgICAgICA8L1NDV3JpdGluZ0RvdHM+XG4gICAgICAgICAgPC9TQ1Njcm9sbEljb25Td2FwPlxuICAgICAgICAgIDxTQ1Njcm9sbEljb25Td2FwICR2aXNpYmxlPXshaXNXcml0aW5nfSBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPXsxMn0gaGVpZ2h0PXsxMn0gZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBzdHJva2U9XCIjMjAyMDIwXCJcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoPXsxLjV9XG4gICAgICAgICAgICAgICAgZD1cIk02IC43NXYxMC41TS43NSA2IDYgMTEuMjUgMTEuMjUgNlwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L1NDU2Nyb2xsSWNvblN3YXA+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuICAgIDwvU0NNZXNzYWdlc091dGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNZXNzYWdlcyA9IFJlYWN0Lm1lbW8oQ2hhdEFJTWVzc2FnZXNJbm5lcilcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLEtBQUssSUFBUUMsSUFBSSxFQUFhQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFBQyxhQUFBLElBQUFDLGNBQUEsUUFBUSxPQUFPO0FBRXRILFNBQVNDLGNBQWMs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
|
|
1191
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZUVsZW1lbnQiLCJfY3JlYXRlRWxlbWVudCIsIkF0dGFjaG1lbnRDYXJkIiwiQXBwcm92YWxCb3giLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiQXR0YWNobWVudENhcmRBdWRpbyIsIk1haWFTdHJlYW1kb3duIiwiQ2hhdEhpc3RvcnlSb2xlIiwicmVuZGVyVGV4dFdpdGhNZW50aW9ucyIsImhhc0lubGluZU1hcmtlcnMiLCJpc01haWFrZXJBZ2VudCIsInVzZVVzZXIiLCJ1c2VUIiwidXNlQ2hhdE1hbmFnZXIiLCJ1c2VTbW9vdGhTdHJlYW1UZXh0IiwidXNlU3RyZWFtaW5nTWVzc2FnZSIsIkxvYWRpbmdUZXh0IiwiQWdlbnRBY3Rpdml0eUluZGljYXRvciIsIlJlYXNvbmluZ0Jsb2NrIiwic2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsIlJlYXNvbmluZ1RpbWVsaW5lIiwiU0NUaW1lbGluZUluZGljYXRvciIsIkNvbnRleHRDb21wYWN0ZWROb3RpY2UiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwicmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IiwicmVzb2x2ZVJldHJ5VHVybklkIiwiZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkiLCJ1c2VSZWFzb25pbmdUcmFjZSIsIkxvYWRlciIsIkZhZGUiLCJwYXRjaE1haWFQYW5lbFNlc3Npb24iLCJyZWFkTWFpYVBhbmVsU2Vzc2lvbiIsInVzZU11bHRpcGxlQ2hvaWNlU3RvcmUiLCJNZXNzYWdlRnJvbVVzZXIiLCJNZXNzYWdlRnJvbU90aGVyIiwiTWVzc2FnZUNvbnRlbnRGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbU90aGVyIiwiTWVzc2FnZUZlZWRiYWNrIiwiU0NDQUlNZXNzYWdlV3JhcHBlciIsIlNjcm9sbFRvQm90dG9tQnV0dG9uIiwiU0NTY3JvbGxJY29uU3dhcCIsIlNDV3JpdGluZ0RvdHMiLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NUdXJuU3BhY2VyIiwiU0NPcHRpb25zTGlzdCIsIlNDT3B0aW9uSXRlbSIsIlNDTWVzc2FnZUl0ZW1XcmFwcGVyIiwiU0NNZXNzYWdlSXRlbUlubmVyIiwiU0NBdHRhY2htZW50c1JvdyIsIlNDQXBwcm92YWxBY3Rpb25zQ29sdW1uIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ01lc3NhZ2VzR3JhZGllbnRUb3AiLCJTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20iLCJ1c2VHbG9iYWxDb250ZXh0IiwiRW50aXR5TGlua0N1c3RvbUxpbmsiLCJnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSIsIkNoYXRBSVN1Z2dlc3Rpb25zIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiQ2hhdEFJTXVsdGlwbGVDaG9pY2VBbnN3ZXIiLCJFVkVOVFMiLCJ1c2VFdmVudCIsImRvd25sb2FkRmlsZUZyb21VcmwiLCJjYW5PcGVuQXR0YWNobWVudFByZXZpZXciLCJjYW5SZXRyeUFzc2lzdGFudE1lc3NhZ2UiLCJjb21wdXRlRGlzdGFuY2VGcm9tQm90dG9tIiwiY29tcHV0ZVJlbW92YWJsZVR1cm5TcGFjZSIsImNvbXB1dGVTeW5jZWRUdXJuU3BhY2VySGVpZ2h0IiwiY29tcHV0ZVR1cm5TY3JvbGxEdXJhdGlvbk1zIiwiY29tcHV0ZVR1cm5TY3JvbGxUYXJnZXRUb3AiLCJjb3VudFVzZXJNZXNzYWdlQXR0YWNobWVudHMiLCJlYXNlT3V0RXhwb1Njcm9sbFByb2dyZXNzIiwiZXh0cmFjdEZlZWRiYWNrU2Vzc2lvbklkIiwiZmluZExhc3RRdWVzdGlvbklkIiwiaGFzSW5pdGlhbFVzZXJNZXNzYWdlSW5MaXN0IiwiaGFzTWVzc2FnZUxldmVsU3RyZWFtSW5kaWNhdG9yIiwiaXNBY3RpdmVTdHJlYW1pbmdTdGF0ZSIsImlzQW5zd2VyT3JRdWVzdGlvbkNoYXRNZXNzYWdlSWQiLCJpc0FwcHJvdmFsQ2hhdE1lc3NhZ2UiLCJpc0Fzc2lzdGFudENoYXRNZXNzYWdlIiwiaXNBdWRpb0F0dGFjaG1lbnQiLCJpc0N1cnJlbnRVc2VyTWVzc2FnZSIsImlzTmV3Q2hhdE1lc3NhZ2VFdmVudCIsImlzUmV0cnlTdWdnZXN0aW9uU2VsZWN0aW9uIiwicmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZEJsb2JTdHJhdGVneSIsInJlc29sdmVBdHRhY2htZW50RG93bmxvYWRGaWxlTmFtZSIsInJlc29sdmVBdHRhY2htZW50RG93bmxvYWRVcmwiLCJyZXNvbHZlQ2hhdExpc3RJdGVtU3RyZWFtaW5nRmxhZ3MiLCJyZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwiLCJyZXNvbHZlTWVzc2FnZUF0dGFjaG1lbnRzIiwicmVzb2x2ZVJldHJ5QXR0YWNobWVudHNGcm9tVXNlck1lc3NhZ2UiLCJzaG91bGRBdXRvU2Nyb2xsT25NZXNzYWdlc0NoYW5nZSIsInNob3VsZEhpZGVBc3Npc3RhbnRTdWdnZXN0aW9ucyIsInNob3VsZEhpZGVFbXB0eVN0cmVhbWluZ0JvZHkiLCJzaG91bGRJZ25vcmVTdWdnZXN0aW9uQ2xpY2siLCJzaG91bGRPcGVuTWVzc2FnZU9wdGlvbiIsInNob3VsZFJlbGVhc2VUdXJuU3BhY2UiLCJzaG91bGRSZW5kZXJBc3Npc3RhbnRGZWVkYmFjayIsInNob3VsZFJlbmRlckFzc2lzdGFudFN1Z2dlc3Rpb25zIiwic2hvdWxkUmVuZGVyQ2hhbmdlUHJvamVjdE1lc3NhZ2UiLCJzaG91bGRSZW5kZXJDcmVhdGVBZ2VudEFjdGlvbnMiLCJzaG91bGRSZW5kZXJNZXNzYWdlVGV4dEJvZHkiLCJzaG91bGRTaG93QXBwcm92YWxBY3Rpb25zIiwic2hvdWxkU2hvd0JvdHRvbVNjcm9sbEdyYWRpZW50Iiwic2hvdWxkU2hvd0dsb2JhbFN0cmVhbUxvYWRpbmdJbmRpY2F0b3IiLCJzaG91bGRTaG93TWVzc2FnZUF0dGFjaG1lbnRzUm93Iiwic2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tIiwic2hvdWxkU2hvd1N0cmVhbUFjdGl2aXR5SW5kaWNhdG9yIiwic2hvdWxkU2hvd1N0cmVhbWluZ01lc3NhZ2VCb2R5Iiwic2hvdWxkU2hvd1RvcFNjcm9sbEdyYWRpZW50Iiwic2hvdWxkU2tpcEVtcHR5Q2hhdExpc3RNZXNzYWdlIiwiaXNTYW1lUGVuZGluZ011bHRpcGxlQ2hvaWNlIiwicmVzb2x2ZUFuc3dlcmVkTXVsdGlwbGVDaG9pY2VzIiwicmVzb2x2ZVBlbmRpbmdNdWx0aXBsZUNob2ljZSIsInJlc29sdmVUdXJuQW5jaG9ySWQiLCJzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbiIsInNob3VsZFJ1blN0cmVhbVR1cm5TeW5jRWZmZWN0Iiwic2hvdWxkVXBkYXRlU3BhY2VySGVpZ2h0IiwiYnVpbGRTbW9vdGhTdHJlYW1UZXh0T3B0aW9ucyIsImNvbXB1dGVNZWFzdXJlVHVybkxheW91dCIsImRldGVjdEp1c3RGaW5pc2hlZExvYWRpbmdNZXNzYWdlcyIsInByb2Nlc3NDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZSIsInJlYWRTbW9vdGhTdHJlYW1XaW5kb3dGbGFncyIsInJlc29sdmVSZXNlcnZlVHVyblNwYWNlUGxhbiIsInJlc29sdmVTY3JvbGxUb0JvdHRvbVRhcmdldFRvcCIsInJlc29sdmVDb250YWluZXJBdEJvdHRvbSIsInJlc29sdmVDcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwicmVzb2x2ZUZlZWRiYWNrUHJvcHNGb3JDYW5jZWxsZWQiLCJyZXNvbHZlTGFzdFVzZXJNZXNzYWdlRm9yQXR0YWNobWVudHMiLCJyZXNvbHZlTWVzc2FnZUxpc3RJdGVtS2V5IiwicmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbiIsInJlc29sdmVSZWFzb25pbmdUcmFjZUhvb2tJZCIsInJlc29sdmVTdHJlYW1pbmdNZXNzYWdlSG9va0lkIiwicmVzb2x2ZVN0cmVhbWluZ1Jhd1RleHQiLCJyZXNvbHZlU3RyZWFtaW5nVGV4dEhvb2tJZCIsInJlc29sdmVTdWdnZXN0aW9uQW5hbHl0aWNzQWdlbnRUeXBlIiwic2hvdWxkQXBwbHlQZW5kaW5nU2Nyb2xsUmVzdG9yZSIsInNob3VsZENsZWFyTGFzdFJlc2VydmVkUXVlc3Rpb24iLCJzaG91bGRDbGVhclNjcm9sbFJlc3RvcmVXaXRob3V0Q2hhdCIsInNob3VsZEluaXRpYWxpemVDaGF0Iiwic2hvdWxkUmVuZGVyTWVudGlvbklubGluZU5vZGVzIiwic2hvdWxkUmVzdG9yZVNjcm9sbE9uRXhwYW5kZWRDaGFuZ2UiLCJzaG91bGRSdW5TZXNzaW9uQ2FjaGVTY3JvbGxUb0JvdHRvbSIsInNob3VsZFNjaGVkdWxlVHVyblNwYWNlUmVzZXJ2YXRpb24iLCJzaG91bGRTY3JvbGxUb0JvdHRvbUFmdGVyTG9hZCIsInNob3VsZFNraXBNZXNzYWdlc1Njcm9sbEVmZmVjdCIsInNob3VsZFVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzT25Mb2FkRW5kIiwianN4IiwiX2pzeCIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwianN4cyIsIl9qc3hzIiwiTWVzc2FnZVdyYXBwZXIiLCJfcmVmIiwiaXNDdXJyZW50VXNlciIsImNoaWxkcmVuIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfcHJvcHMkc3VnZ2VzdGlvbnMkbGUiLCJfcHJvcHMkc3VnZ2VzdGlvbnMiLCJzdHJlYW1pbmdUZXh0IiwiaXNTdHJlYW1pbmciLCJtZXNzYWdlSWQiLCJyYXdUZXh0IiwibWVzc2FnZSIsIndpbkZsYWdzIiwiZGlzcGxheVRleHQiLCJjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImhhc01lbnRpb25zIiwibWVudGlvbk5vZGVzIiwibWVzc2FnZUJvZHkiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJkaXNwbGF5IiwidmFyaWFudCIsImNvbXBvbmVudHMiLCJhIiwiaXNBbmltYXRpbmciLCJyZXNvbHZlZE11bHRpcGxlQ2hvaWNlQW5zd2VyIiwiYW5zd2VyIiwiaXNBc3Npc3RhbnQiLCJpc0Vycm9yIiwiYXBwcm92YWwiLCJtdWx0aXBsZUNob2ljZSIsIm9uUmV0cnkiLCJjb250ZW50Iiwic291cmNlcyIsImhhbmRsZUZlZWRiYWNrQ2xpY2siLCJkaXNhYmxlRmVlZGJhY2siLCJzdWdnZXN0aW9uc0xlbmd0aCIsInN1Z2dlc3Rpb25zIiwibGVuZ3RoIiwib25TZWxlY3RTdWdnZXN0aW9uIiwic3VnZ2VzdGlvbiIsImhhbmRsZVN1Z2dlc3Rpb25DbGljayIsImRpc2FibGVkIiwic3VnZ2VzdGlvbnNEaXNhYmxlZCIsImhpZGRlbiIsImlzTGFzdE1lc3NhZ2UiLCJhZ2VudElkIiwiTWVzc2FnZUl0ZW0iLCJfcmVmNCIsIl9wcm9wcyRyZWFzb25pbmciLCJfcHJvcHMkcHJvamVjdE1ldGFkYXQiLCJ1c2VyIiwiYXV0aFVzZXIiLCJpc0NoYW5nZVByb2plY3QiLCJoYW5kbGVGZWVkYmFjayIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJoYW5kbGVSZXRyeSIsInJvbGUiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsU3RhdHVzIiwiaGFzU2VsZWN0ZWRTdWdnZXN0aW9uIiwic3RyZWFtQWN0aXZpdHkiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInByZXZpZXdBdHRhY2htZW50Iiwic2V0UHJldmlld0F0dGFjaG1lbnQiLCJ0b1N0cmluZyIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXIiLCJCb29sZWFuIiwiaXNBY3RpdmVTdHJlYW1pbmciLCJoYXNTdHJlYW1UZXh0IiwicmVhc29uaW5nVHJhY2UiLCJfdXNlUmVhc29uaW5nVHJhY2UiLCJsaXZlQ29tcGFjdGlvbiIsImNvbXBhY3Rpb24iLCJzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwic3RlcHMiLCJzaG93U3RyZWFtaW5nQm9keSIsInNob3dBY3Rpdml0eUluZGljYXRvciIsIm1lc3NhZ2VBdHRhY2htZW50cyIsImhhbmRsZUF0dGFjaG1lbnRDbGljayIsImF0dGFjaG1lbnQiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkU3RyYXRlZ3kiLCJkb3dubG9hZGVkRmlsZSIsImxpbmsiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiZmlsZSIsInR5cGUiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiRmlsZSIsImFicnVwdCIsImRvY3VtZW50IiwiaHJlZiIsImRvd25sb2FkIiwiYm9keSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJzZXRUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJjb25zb2xlIiwiZXJyb3IiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhc0ZlZWRiYWNrIiwiJGlzQXNzaXN0YW50IiwibWVzc2FnZUV4dHJhQ29udGVudCIsImZlZWRiYWNrIiwidHJhY2UiLCJyZWFzb25pbmciLCJpbmRleCIsImNvbmNhdCIsInBvc2l0aW9uSW5kZXgiLCJvbkRvd25sb2FkIiwibWVzc2FnZVRleHQiLCJhdHRhY2htZW50Q291bnQiLCJhY3Rpdml0eSIsImNvbXBhY3QiLCJhY3Rpb25zIiwicGVuZGluZ19hY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwibWV0YWRhdGEiLCJ1bmRlZmluZWQiLCJvblJlamVjdCIsImlzUHJvamVjdERlbGV0ZWQiLCJwcm9qZWN0TWV0YWRhdGEiLCJpc19kZWxldGVkIiwiaXNFeHBhbmRlZCIsImV4cGFuZGVkIiwiaGl0bEluc3RhbmNlSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdfbWVzc2FnZSIsIm1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJpc09wZW4iLCJvbkNsb3NlIiwiQ2hhdEFJTWVzc2FnZXNJbm5lciIsIl9yZWY2IiwidXNlckluaXRpYWxNZXNzYWdlIiwiaW5pdGlhbENoYXRJZCIsIm9uRXJyb3IiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvblNjcm9sbFRvQm90dG9tIiwiYWdlbnRzIiwiX3JlZjYkc2tpcEVudGVyQW5pbWF0Iiwic2tpcEVudGVyQW5pbWF0aW9uIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwiZXZlbnQiLCJtZXNzYWdlc1JlZiIsImNoYXRJbml0aWFsaXplZFJlZiIsImlzTG9hZGluZ01vcmVSZWYiLCJzY3JvbGxUaHJlc2hvbGRSZWYiLCJsYXN0U2Nyb2xsVG9wUmVmIiwic2hvd1Njcm9sbFRvQm90dG9tUmVmIiwic2hvd1RvcEdyYWRpZW50UmVmIiwic2hvd0JvdHRvbUdyYWRpZW50UmVmIiwic2Nyb2xsUmFmUmVmIiwiYW5jaG9yZWRUdXJuSWRSZWYiLCJzcGFjZXJFbFJlZiIsInNwYWNlckhlaWdodFJlZiIsInR1cm5TY3JvbGxSYWZSZWYiLCJ3YXNMb2FkaW5nTWVzc2FnZXNSZWYiLCJsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmIiwicGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYiLCJzY3JvbGxQZXJzaXN0VGltZXJSZWYiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dTY3JvbGxUb0JvdHRvbSIsInNldFNob3dTY3JvbGxUb0JvdHRvbSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2hvd1RvcEdyYWRpZW50Iiwic2V0U2hvd1RvcEdyYWRpZW50IiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzaG93Qm90dG9tR3JhZGllbnQiLCJzZXRTaG93Qm90dG9tR3JhZGllbnQiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwic2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsIl91c2VDaGF0TWFuYWdlciIsImNoYXRJZCIsIm1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJhY3RpdmVMb2FkaW5ncyIsInNlbmRNZXNzYWdlIiwicmV0cnlNZXNzYWdlIiwiY2hhbmdlUHJvamVjdCIsImluaXRpYWxpemVDaGF0IiwiaGFuZGxlU2Nyb2xsIiwic3RvcEdlbmVyYXRpb24iLCJ1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcyIsImVsIiwiY3VycmVudCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImRpc3RhbmNlRnJvbUJvdHRvbSIsInNob3VsZFNob3ciLCJuZXh0VG9wR3JhZGllbnQiLCJuZXh0Qm90dG9tR3JhZGllbnQiLCJzY3JvbGxUb0JvdHRvbVRpbWVvdXRSZWYiLCJzY3JvbGxUb0JvdHRvbVJhZiIsIm9wdHMiLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNsZWFyVGltZW91dCIsImNhbmNlbFR1cm5TY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGxUbyIsInRvcCIsImZyb20iLCJkaXN0YW5jZSIsImR1cmF0aW9uIiwic3RhcnRlZEF0IiwicGVyZm9ybWFuY2UiLCJub3ciLCJzdGVwIiwicHJvZ3Jlc3MiLCJNYXRoIiwibWluIiwiZWFzZWQiLCJzZXRTcGFjZXJIZWlnaHQiLCJoZWlnaHQiLCJjbGVhclR1cm5TcGFjZSIsImRyYWluVHVyblNwYWNlIiwicmVsZWFzZVR1cm5TcGFjZSIsImhhbmRsZVVzZXJTY3JvbGxJbnRlbnQiLCJoYW5kbGVNZXNzYWdlc091dGVyV2hlZWwiLCJzY3JvbGxlciIsInRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJjb250YWlucyIsImRlbHRhWSIsIm1heFNjcm9sbCIsIm5leHRTY3JvbGxUb3AiLCJtYXgiLCJwcmV2ZW50RGVmYXVsdCIsIm1lYXN1cmVUdXJuIiwicXVlc3Rpb25JZCIsInNwYWNlckVsIiwicXVlc3Rpb25FbCIsInF1ZXJ5U2VsZWN0b3IiLCJjb250YWluZXJUb3AiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJfY29tcHV0ZU1lYXN1cmVUdXJuTGEiLCJxdWVzdGlvblRvcCIsImNvbnRlbnRCb3R0b20iLCJ0dXJuSGVpZ2h0IiwicmVzZXJ2ZVR1cm5TcGFjZSIsIm1lYXN1cmVkIiwidGFyZ2V0U2Nyb2xsVG9wIiwicGxhbiIsImN1cnJlbnRTY3JvbGxUb3AiLCJraW5kIiwic3BhY2VySGVpZ2h0Iiwic3luY1R1cm5TcGFjZSIsImhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20iLCJoYW5kbGVTY3JvbGxUb0JvdHRvbSIsImUiLCJjb250YWluZXIiLCJzY3JvbGxGcmFtZSIsImxhc3RTY3JvbGxUb3AiLCJzY3JvbGxUaHJlc2hvbGQiLCJhbmNob3JlZFR1cm5JZCIsIm5leHRTY3JvbGxUaHJlc2hvbGQiLCJzaG91bGREcmFpblR1cm5TcGFjZSIsInNob3VsZFNjaGVkdWxlU2Nyb2xsUGVyc2lzdCIsIndpbmRvdyIsInNjcm9sbFNlc3Npb25JZCIsInNob3VsZE5vdGlmeVNjcm9sbFRvQm90dG9tIiwic2VuZE1lc3NhZ2VSZWYiLCJzdG9wR2VuZXJhdGlvblJlZiIsIm9uU2VuZE1lc3NhZ2VSZWFkeVJlZiIsInNlbmRNZXNzYWdlUHJveHlSZWYiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJzdG9wR2VuZXJhdGlvblByb3h5UmVmIiwibWVzc2FnZXNEYXRhUmVmIiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZiIsImN1cnJlbnRNZXNzYWdlcyIsImlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCIsImFpQ2hhdFN1Z2dlc3RlZEFuc3dlciIsImFnZW50X3R5cGUiLCJfZGVmaW5lUHJvcGVydHkiLCJ0YXJnZXRNZXNzYWdlIiwiZmluZCIsIm1zZyIsImxhc3RVc2VyTWVzc2FnZSIsImZpbHRlciIsIlVTRVIiLCJhdCIsImFuc3dlcmVkTXVsdGlwbGVDaG9pY2VzIiwiZGlzbWlzc2VkTXVsdGlwbGVDaG9pY2VJZHMiLCJzdGF0ZSIsImRpc21pc3NlZE1lc3NhZ2VJZHMiLCJfdXNlTXVsdGlwbGVDaG9pY2VTdG8iLCJnZXRTdGF0ZSIsInBlbmRpbmciLCJzZXRQZW5kaW5nIiwicmVuZGVyZWQiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGFzdCIsIm92ZXJmbG93IiwiYm90dG9tIiwicmFmSWQiLCJ0aWNrIiwibGFzdFJlc2VydmVkUXVlc3Rpb25SZWYiLCJoaWRkZW5NZXNzYWdlSWRzIiwibGFzdE1lc3NhZ2VJZFJlZiIsImxhc3RNZXNzYWdlc0xlbmd0aFJlZiIsIl9tZXNzYWdlcyRpZCIsIl9tZXNzYWdlcyIsIl9sYXN0TWVzc2FnZSRpZCIsImxhc3RNZXNzYWdlIiwibGFzdElkIiwicHJldklkIiwicHJldkxlbiIsImlzTmV3TWVzc2FnZSIsInNjcm9sbERlY2lzaW9uIiwiaXNBdEJvdHRvbSIsImlzQW5zd2VyT3JRdWVzdGlvbiIsImlzQXBwcm92YWwiLCJoYXNJbml0aWFsTWVzc2FnZSIsIm1lc3NhZ2VzTGVuZ3RoIiwicHJldk1lc3NhZ2VzTGVuZ3RoIiwiX21lc3NhZ2VzJGlkMiIsIl9tZXNzYWdlczIiLCJqdXN0RmluaXNoZWRMb2FkaW5nIiwiYXR0YWNobWVudHNDb3VudCIsInN0cmVhbUxvYWRpbmdEaXNwbGF5IiwiaGFzQXR0YWNobWVudHMiLCJfc2Vzc2lvbiRzY3JvbGxTZXNzaW8iLCJfc2Vzc2lvbiRzY3JvbGxUb3AiLCJzZXNzaW9uIiwicGVuZGluZ1Njcm9sbFRvcCIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJmaWxsIiwiaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yIiwibWVzc2FnZXNDb250ZW50IiwidGV4dCIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzJCIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyRsZW5nIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJG1lc3NhZ2UiLCJfbWVzc2FnZSRwcm9qZWN0IiwiX3Jlc29sdmVDaGF0TGlzdEl0ZW1TIiwidXNlcklkIiwic291cmNlQ291bnQiLCJwcm9qZWN0TmFtZSIsInByb2plY3QiLCJoYXNBcHByb3ZhbCIsImhhc011bHRpcGxlQ2hvaWNlIiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIm1lc3NhZ2VLZXkiLCJ0dXJuSWQiLCJ1c2VyTWVzc2FnZUZvclJldHJ5IiwiY2FuUmV0cnkiLCJoYXNVc2VyTWVzc2FnZUZvclJldHJ5IiwiaXNDYW5jZWxsZWQiLCJpc19jYW5jZWxsZWQiLCJrZXkiLCJhbnN3ZXJzIiwicmVmIiwib25XaGVlbCIsIm9uVG91Y2hTdGFydCIsIiRzaG93Iiwib25TY3JvbGwiLCIkc2tpcEVudGVyIiwiJHZpc2libGUiLCJ4bWxucyIsIndpZHRoIiwic3Ryb2tlIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgdHlwZSB7IE1haWFTdHJlYW1kb3duUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyByZW5kZXJUZXh0V2l0aE1lbnRpb25zLCBoYXNJbmxpbmVNYXJrZXJzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZSdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9BZ2VudEFjdGl2aXR5SW5kaWNhdG9yJ1xuaW1wb3J0IHsgUmVhc29uaW5nQmxvY2sgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdCbG9jaydcbmltcG9ydCB7IHNob3VsZFN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9yZWFzb25pbmdMaXZlTmFycmF0aW9uJ1xuaW1wb3J0IHsgUmVhc29uaW5nVGltZWxpbmUgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdUaW1lbGluZSdcbmltcG9ydCB7IFNDVGltZWxpbmVJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdCbG9jay5zdHlsZXMnXG5pbXBvcnQgeyBDb250ZXh0Q29tcGFjdGVkTm90aWNlIH0gZnJvbSAnLi4vLi4vYXRvbXMvQ29udGV4dENvbXBhY3RlZE5vdGljZS9Db250ZXh0Q29tcGFjdGVkTm90aWNlJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCwgcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHJlc29sdmVSZXRyeVR1cm5JZCwgZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZXRyeUNvbXBsZXRpb24nXG5pbXBvcnQgeyB1c2VSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRmFkZSB9IGZyb20gJy4uLy4uL2F0b21zL0ZhZGUnXG5pbXBvcnQgeyBwYXRjaE1haWFQYW5lbFNlc3Npb24sIHJlYWRNYWlhUGFuZWxTZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYVBhbmVsU2Vzc2lvblBlcnNpc3RlbmNlJ1xuaW1wb3J0IHsgdXNlTXVsdGlwbGVDaG9pY2VTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZU11bHRpcGxlQ2hvaWNlU3RvcmUnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VGcm9tT3RoZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbU90aGVyIH0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQge1xuICBTQ0NBSU1lc3NhZ2VXcmFwcGVyLFxuICBTY3JvbGxUb0JvdHRvbUJ1dHRvbixcbiAgU0NTY3JvbGxJY29uU3dhcCxcbiAgU0NXcml0aW5nRG90cyxcbiAgU0NNZXNzYWdlc091dGVyLFxuICBTQ01lc3NhZ2VzU2Nyb2xsLFxuICBTQ01lc3NhZ2VzSW5uZXIsXG4gIFNDVHVyblNwYWNlcixcbiAgU0NPcHRpb25zTGlzdCxcbiAgU0NPcHRpb25JdGVtLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDTWVzc2FnZXNHcmFkaWVudFRvcCxcbiAgU0NNZXNzYWdlc0dyYWRpZW50Qm90dG9tLFxufSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IEVudGl0eUxpbmtDdXN0b21MaW5rLCBnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2VudGl0eUxpbmtSZW5kZXInXG5pbXBvcnQgeyBDaGF0QUlTdWdnZXN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJU3VnZ2VzdGlvbnMnXG5pbXBvcnQgeyBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMgfSBmcm9tICcuL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucydcbmltcG9ydCB7IENoYXRBSU11bHRpcGxlQ2hvaWNlQW5zd2VyIH0gZnJvbSAnLi4vQ2hhdEFJTXVsdGlwbGVDaG9pY2UvQ2hhdEFJTXVsdGlwbGVDaG9pY2VBbnN3ZXInXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBkb3dubG9hZEZpbGVGcm9tVXJsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsZURvd25sb2FkSGVscGVyJ1xuaW1wb3J0IHtcbiAgY2FuT3BlbkF0dGFjaG1lbnRQcmV2aWV3LFxuICBjYW5SZXRyeUFzc2lzdGFudE1lc3NhZ2UsXG4gIGNvbXB1dGVEaXN0YW5jZUZyb21Cb3R0b20sXG4gIGNvbXB1dGVSZW1vdmFibGVUdXJuU3BhY2UsXG4gIGNvbXB1dGVTeW5jZWRUdXJuU3BhY2VySGVpZ2h0LFxuICBjb21wdXRlVHVyblNjcm9sbER1cmF0aW9uTXMsXG4gIGNvbXB1dGVUdXJuU2Nyb2xsVGFyZ2V0VG9wLFxuICBjb3VudFVzZXJNZXNzYWdlQXR0YWNobWVudHMsXG4gIGVhc2VPdXRFeHBvU2Nyb2xsUHJvZ3Jlc3MsXG4gIGV4dHJhY3RGZWVkYmFja1Nlc3Npb25JZCxcbiAgZmluZExhc3RRdWVzdGlvbklkLFxuICBoYXNJbml0aWFsVXNlck1lc3NhZ2VJbkxpc3QsXG4gIGhhc01lc3NhZ2VMZXZlbFN0cmVhbUluZGljYXRvcixcbiAgaXNBY3RpdmVTdHJlYW1pbmdTdGF0ZSxcbiAgaXNBbnN3ZXJPclF1ZXN0aW9uQ2hhdE1lc3NhZ2VJZCxcbiAgaXNBcHByb3ZhbENoYXRNZXNzYWdlLFxuICBpc0Fzc2lzdGFudENoYXRNZXNzYWdlLFxuICBpc0F1ZGlvQXR0YWNobWVudCxcbiAgaXNDdXJyZW50VXNlck1lc3NhZ2UsXG4gIGlzTmV3Q2hhdE1lc3NhZ2VFdmVudCxcbiAgaXNSZXRyeVN1Z2dlc3Rpb25TZWxlY3Rpb24sXG4gIHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRCbG9iU3RyYXRlZ3ksXG4gIHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRGaWxlTmFtZSxcbiAgcmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZFVybCxcbiAgcmVzb2x2ZUNoYXRMaXN0SXRlbVN0cmVhbWluZ0ZsYWdzLFxuICByZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwsXG4gIHJlc29sdmVNZXNzYWdlQXR0YWNobWVudHMsXG4gIHJlc29sdmVSZXRyeUF0dGFjaG1lbnRzRnJvbVVzZXJNZXNzYWdlLFxuICBzaG91bGRBdXRvU2Nyb2xsT25NZXNzYWdlc0NoYW5nZSxcbiAgc2hvdWxkSGlkZUFzc2lzdGFudFN1Z2dlc3Rpb25zLFxuICBzaG91bGRIaWRlRW1wdHlTdHJlYW1pbmdCb2R5LFxuICBzaG91bGRJZ25vcmVTdWdnZXN0aW9uQ2xpY2ssXG4gIHNob3VsZE9wZW5NZXNzYWdlT3B0aW9uLFxuICBzaG91bGRSZWxlYXNlVHVyblNwYWNlLFxuICBzaG91bGRSZW5kZXJBc3Npc3RhbnRGZWVkYmFjayxcbiAgc2hvdWxkUmVuZGVyQXNzaXN0YW50U3VnZ2VzdGlvbnMsXG4gIHNob3VsZFJlbmRlckNoYW5nZVByb2plY3RNZXNzYWdlLFxuICBzaG91bGRSZW5kZXJDcmVhdGVBZ2VudEFjdGlvbnMsXG4gIHNob3VsZFJlbmRlck1lc3NhZ2VUZXh0Qm9keSxcbiAgc2hvdWxkU2hvd0FwcHJvdmFsQWN0aW9ucyxcbiAgc2hvdWxkU2hvd0JvdHRvbVNjcm9sbEdyYWRpZW50LFxuICBzaG91bGRTaG93R2xvYmFsU3RyZWFtTG9hZGluZ0luZGljYXRvcixcbiAgc2hvdWxkU2hvd01lc3NhZ2VBdHRhY2htZW50c1JvdyxcbiAgc2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tLFxuICBzaG91bGRTaG93U3RyZWFtQWN0aXZpdHlJbmRpY2F0b3IsXG4gIHNob3VsZFNob3dTdHJlYW1pbmdNZXNzYWdlQm9keSxcbiAgc2hvdWxkU2hvd1RvcFNjcm9sbEdyYWRpZW50LFxuICBzaG91bGRTa2lwRW1wdHlDaGF0TGlzdE1lc3NhZ2UsXG4gIGlzU2FtZVBlbmRpbmdNdWx0aXBsZUNob2ljZSxcbiAgcmVzb2x2ZUFuc3dlcmVkTXVsdGlwbGVDaG9pY2VzLFxuICByZXNvbHZlUGVuZGluZ011bHRpcGxlQ2hvaWNlLFxuICByZXNvbHZlVHVybkFuY2hvcklkLFxuICBzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbixcbiAgc2hvdWxkUnVuU3RyZWFtVHVyblN5bmNFZmZlY3QsXG4gIHNob3VsZFVwZGF0ZVNwYWNlckhlaWdodCxcbiAgYnVpbGRTbW9vdGhTdHJlYW1UZXh0T3B0aW9ucyxcbiAgY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0LFxuICBkZXRlY3RKdXN0RmluaXNoZWRMb2FkaW5nTWVzc2FnZXMsXG4gIHByb2Nlc3NDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZSxcbiAgcmVhZFNtb290aFN0cmVhbVdpbmRvd0ZsYWdzLFxuICByZXNvbHZlUmVzZXJ2ZVR1cm5TcGFjZVBsYW4sXG4gIHJlc29sdmVTY3JvbGxUb0JvdHRvbVRhcmdldFRvcCxcbiAgcmVzb2x2ZUNvbnRhaW5lckF0Qm90dG9tLFxuICByZXNvbHZlQ3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCxcbiAgcmVzb2x2ZUZlZWRiYWNrUHJvcHNGb3JDYW5jZWxsZWQsXG4gIHJlc29sdmVMYXN0VXNlck1lc3NhZ2VGb3JBdHRhY2htZW50cyxcbiAgcmVzb2x2ZU1lc3NhZ2VMaXN0SXRlbUtleSxcbiAgcmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbixcbiAgcmVzb2x2ZVJlYXNvbmluZ1RyYWNlSG9va0lkLFxuICByZXNvbHZlU3RyZWFtaW5nTWVzc2FnZUhvb2tJZCxcbiAgcmVzb2x2ZVN0cmVhbWluZ1Jhd1RleHQsXG4gIHJlc29sdmVTdHJlYW1pbmdUZXh0SG9va0lkLFxuICByZXNvbHZlU3VnZ2VzdGlvbkFuYWx5dGljc0FnZW50VHlwZSxcbiAgc2hvdWxkQXBwbHlQZW5kaW5nU2Nyb2xsUmVzdG9yZSxcbiAgc2hvdWxkQ2xlYXJMYXN0UmVzZXJ2ZWRRdWVzdGlvbixcbiAgc2hvdWxkQ2xlYXJTY3JvbGxSZXN0b3JlV2l0aG91dENoYXQsXG4gIHNob3VsZEluaXRpYWxpemVDaGF0LFxuICBzaG91bGRSZW5kZXJNZW50aW9uSW5saW5lTm9kZXMsXG4gIHNob3VsZFJlc3RvcmVTY3JvbGxPbkV4cGFuZGVkQ2hhbmdlLFxuICBzaG91bGRSdW5TZXNzaW9uQ2FjaGVTY3JvbGxUb0JvdHRvbSxcbiAgc2hvdWxkU2NoZWR1bGVUdXJuU3BhY2VSZXNlcnZhdGlvbixcbiAgc2hvdWxkU2Nyb2xsVG9Cb3R0b21BZnRlckxvYWQsXG4gIHNob3VsZFNraXBNZXNzYWdlc1Njcm9sbEVmZmVjdCxcbiAgc2hvdWxkVXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNPbkxvYWRFbmQsXG59IGZyb20gJy4vQ2hhdEFJTWVzc2FnZXMuaGVscGVycydcbmltcG9ydCB0eXBlIHsgUmVzb2x2ZWRNdWx0aXBsZUNob2ljZUFuc3dlciB9IGZyb20gJy4vQ2hhdEFJTWVzc2FnZXMuaGVscGVycydcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgICBjb250ZXh0RGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIH1cbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeT86IChcbiAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZyxcbiAgICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApID0+IHZvaWQsXG4gICAgc3RvcEdlbmVyYXRpb246ICgpID0+IHZvaWQsXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW4sXG4gICAgaXNXcml0aW5nOiBib29sZWFuXG4gICkgPT4gdm9pZFxuICBpc0Rpc2FibGVkPzogYm9vbGVhblxuICBvblNjcm9sbFRvQm90dG9tPzogKCkgPT4gdm9pZFxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgYWdlbnRzPzogQWdlbnRbXVxuICBleHBhbmRlZD86IGJvb2xlYW5cbiAgc2tpcEVudGVyQW5pbWF0aW9uPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VJdGVtUHJvcHMgPSBDaGF0TWVzc2FnZSAmIHtcbiAgYXV0aFVzZXI6IENPUlVzZXJcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPzogYm9vbGVhblxuICByZXNvbHZlZE11bHRpcGxlQ2hvaWNlQW5zd2VyPzogUmVzb2x2ZWRNdWx0aXBsZUNob2ljZUFuc3dlclxuICBoYW5kbGVGZWVkYmFjazogKGZlZWRiYWNrOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGhhbmRsZUFwcHJvdmFsRGVjaXNpb246IChcbiAgICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4sXG4gICAgbWV0YWRhdGE/OiB7IHRvb2xfZ3JvdXBfc2x1Z3M6IHN0cmluZ1tdIH1cbiAgKSA9PiB2b2lkXG4gIGhhbmRsZVJldHJ5PzogKCkgPT4gdm9pZFxuICBkaXNhYmxlRmVlZGJhY2s/OiBGZWVkYmFjayB8IG51bGxcbiAgc291cmNlcz86IGFueVxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBzdHJlYW1BY3Rpdml0eT86IFN0cmVhbUFjdGl2aXR5IHwgbnVsbFxufVxuXG5pbnRlcmZhY2UgTWVzc2FnZVdyYXBwZXJQcm9wcyB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICAnZGF0YS1tZXNzYWdlLWlkJz86IHN0cmluZ1xuICBoYXNGZWVkYmFjaz86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcyA9IE1BSUFNZXNzYWdlUHJvcHMgJiB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgaXNDaGFuZ2VQcm9qZWN0PzogYm9vbGVhblxufVxuXG5jb25zdCBNZXNzYWdlV3JhcHBlcjogRkM8TWVzc2FnZVdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VGcm9tVXNlciA6IE1lc3NhZ2VGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29tcG9uZW50IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvTWVzc2FnZUNvbXBvbmVudD5cbn1cblxuY29uc3QgTWVzc2FnZUNvbnRlbnRXcmFwcGVyOiBGQzxNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VDb250ZW50RnJvbVVzZXIgOiBNZXNzYWdlQ29udGVudEZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb250ZW50Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gTWVzc2FnZU9wdGlvbnMoe1xuICBvcHRpb25zLFxuICBoYW5kbGVTZWxlY3RPcHRpb24sXG59OiB7XG4gIG9wdGlvbnM6IFByb2plY3RbXSB8IG51bGxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbiwgc2V0U2VsZWN0ZWRPcHRpb25dID0gdXNlU3RhdGU8UHJvamVjdCB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgIGlmICghc2hvdWxkT3Blbk1lc3NhZ2VPcHRpb24oc2VsZWN0ZWRPcHRpb24pKSByZXR1cm5cbiAgICBzZXRTZWxlY3RlZE9wdGlvbihvcHRpb24pXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uKG9wdGlvbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDT3B0aW9uc0xpc3Q+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4gKFxuICAgICAgICA8U0NPcHRpb25JdGVtXG4gICAgICAgICAgJGhhc1NlbGVjdGlvbj17ISFzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICAkZGltbWVkPXshIXNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uPy5pZCAhPT0gb3B0aW9uLmlkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdChvcHRpb24pfVxuICAgICAgICAgIGtleT17b3B0aW9uLmlkfVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbi5uYW1lfVxuICAgICAgICA8L1NDT3B0aW9uSXRlbT5cbiAgICAgICkpfVxuICAgIDwvU0NPcHRpb25zTGlzdD5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBtdWx0aXBsZUNob2ljZT86IE1lc3NhZ2VJdGVtUHJvcHNbJ211bHRpcGxlQ2hvaWNlJ11cbiAgICByZXNvbHZlZE11bHRpcGxlQ2hvaWNlQW5zd2VyPzogUmVzb2x2ZWRNdWx0aXBsZUNob2ljZUFuc3dlclxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA/OiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgbnVsbFxuICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s6IChmOiBGZWVkYmFjaykgPT4gdm9pZFxuICAgIGRpc2FibGVGZWVkYmFjazogRmVlZGJhY2sgfCBudWxsXG4gICAgb25SZXRyeT86ICgpID0+IHZvaWRcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD86IGJvb2xlYW5cbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICAvLyBUZXh0byBkZWwgc3RyZWFtOiBzb2xvIHNlIGxlZSBkZWwgc3RvcmUgY3VhbmRvIGVzdGUgbWVuc2FqZSBlcyBlbFxuICAgIC8vIHF1ZSBlc3TDoSBlbiBzdHJlYW1pbmcuIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGHDrXNsYSBlbCByZS1yZW5kZXIgYVxuICAgIC8vIGVzdGUgY29tcG9uZW50ZSwgc2luIHRvY2FyIGVsIHJlc3RvIGRlbCDDoXJib2wuXG4gICAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UocmVzb2x2ZVN0cmVhbWluZ01lc3NhZ2VIb29rSWQocHJvcHMuaXNTdHJlYW1pbmcsIHByb3BzLm1lc3NhZ2VJZCkpXG4gICAgY29uc3QgcmF3VGV4dCA9IHJlc29sdmVTdHJlYW1pbmdSYXdUZXh0KHByb3BzLmlzU3RyZWFtaW5nLCBzdHJlYW1pbmdUZXh0LCBwcm9wcy5tZXNzYWdlKVxuICAgIC8vIFNtb290aCBzdHJlYW1pbmc6IGRlc2Fjb3BsYSBsYSBjYWRlbmNpYSBkZWwgYmFja2VuZCBkZWwgcmVuZGVyLlxuICAgIC8vIER1cmFudGUgZWwgc3RyZWFtaW5nIGxpYmVyYSBjaGFycyBhIHJpdG1vIGNvbnN0YW50ZSB2w61hIHJBRjsgY3VhbmRvXG4gICAgLy8gdGVybWluYSwgbXVlc3RyYSBlbCB0ZXh0byBmaW5hbCBhbCBpbnN0YW50ZSAoc2luIGFuaW1hY2nDs24gcmVzaWR1YWwpLlxuICAgIC8vIExvcyBkZWZhdWx0cyBkZWwgaG9vayBzZSBhanVzdGFyb24gZW1ww61yaWNhbWVudGUgZW4gc3RhZ2luZzsgYXVuIGFzw61cbiAgICAvLyBzZSBleHBvbmVuIGZsYWdzIGRlIHJ1bnRpbWUgKHdpbmRvdy4qKSBwYXJhIHBvZGVyIHR1bmVhciBzaW4gcmVjb21waWxhclxuICAgIC8vIHNpIGFsZ8O6biBiYWNrZW5kIHByZXNlbnRhIHVuYSBjYWRlbmNpYSBtdXkgZGlzdGludGEgZW4gcHJvZHVjY2nDs24uXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQWRhcHQgPSBmYWxzZSAgICAgIC8vIGRlc2FjdGl2YSBhZGFwdGFjacOzbiBhbCBiYWNrZW5kXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQnVmZmVyTXMgPSA2MDAgICAgIC8vIGNvbGNow7NuIG9iamV0aXZvIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1MYWdNcyA9IDQ1MCAgICAgICAgLy8gbGFnIG3DoXhpbW8gYmFzZSAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTWluQnVmZmVyID0gNzAgICAgIC8vIHBpc28gZGVsIGNvbGNow7NuIGVuIGNoYXJzXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtV2FybXVwTXMgPSA0MDAgICAgIC8vIHdhcm11cCBpbmljaWFsIChtcylcbiAgICBjb25zdCB3aW5GbGFncyA9IHJlYWRTbW9vdGhTdHJlYW1XaW5kb3dGbGFncygpXG4gICAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VTbW9vdGhTdHJlYW1UZXh0KHJhd1RleHQsIGJ1aWxkU21vb3RoU3RyZWFtVGV4dE9wdGlvbnMod2luRmxhZ3MsIHByb3BzLmlzU3RyZWFtaW5nKSlcbiAgICBjb25zdCBjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkID0gcmVzb2x2ZUNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQocHJvcHMuY3JlYXRlQWdlbnRGb2xsb3dVcClcblxuICAgIGlmIChzaG91bGRIaWRlRW1wdHlTdHJlYW1pbmdCb2R5KGRpc3BsYXlUZXh0LCBwcm9wcy5pc1N0cmVhbWluZykpIHJldHVybiBudWxsXG4gICAgY29uc3QgaGFzTWVudGlvbnMgPSBoYXNJbmxpbmVNYXJrZXJzKGRpc3BsYXlUZXh0KVxuICAgIGNvbnN0IG1lbnRpb25Ob2RlcyA9IGhhc01lbnRpb25zID8gcmVuZGVyVGV4dFdpdGhNZW50aW9ucyhkaXNwbGF5VGV4dCkgOiBudWxsXG4gICAgY29uc3QgbWVzc2FnZUJvZHkgPSAoXG4gICAgICA8U0NDQUlNZXNzYWdlV3JhcHBlclxuICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICBjbGFzc05hbWU9e2dldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lKGRpc3BsYXlUZXh0KX1cbiAgICAgID5cbiAgICAgICAge3Nob3VsZFJlbmRlck1lbnRpb25JbmxpbmVOb2RlcyhoYXNNZW50aW9ucywgbWVudGlvbk5vZGVzKSA/IChcbiAgICAgICAgICAvLyBTaSBoYXkgbWVudGlvbnMsIHJlbmRlcml6YXIgZGlyZWN0YW1lbnRlIChzaW4gbWFya2Rvd24gZW4gZWwgbWlzbW8gcMOhcnJhZm8pXG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZScgfX0+e21lbnRpb25Ob2Rlc308L3NwYW4+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgLy8gU2luIG1lbnRpb25zLCBwYXNhciBhIFN0cmVhbWRvd24gcGFyYSBtYXJrZG93biBzdXBwb3J0XG4gICAgICAgICAgPE1haWFTdHJlYW1kb3duXG4gICAgICAgICAgICB2YXJpYW50PVwiY2hhdFwiXG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogRW50aXR5TGlua0N1c3RvbUxpbmsgfSBhcyBNYWlhU3RyZWFtZG93blByb3BzWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICBpc0FuaW1hdGluZz17ISFwcm9wcy5pc1N0cmVhbWluZ31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZGlzcGxheVRleHR9XG4gICAgICAgICAgPC9NYWlhU3RyZWFtZG93bj5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtwcm9wcy5yZXNvbHZlZE11bHRpcGxlQ2hvaWNlQW5zd2VyID8gKFxuICAgICAgICAgIDxDaGF0QUlNdWx0aXBsZUNob2ljZUFuc3dlciBhbnN3ZXI9e3Byb3BzLnJlc29sdmVkTXVsdGlwbGVDaG9pY2VBbnN3ZXJ9PlxuICAgICAgICAgICAge21lc3NhZ2VCb2R5fVxuICAgICAgICAgIDwvQ2hhdEFJTXVsdGlwbGVDaG9pY2VBbnN3ZXI+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgbWVzc2FnZUJvZHlcbiAgICAgICAgKX1cbiAgICAgICAge3Nob3VsZFJlbmRlckFzc2lzdGFudEZlZWRiYWNrKHtcbiAgICAgICAgICBpc0Fzc2lzdGFudDogcHJvcHMuaXNBc3Npc3RhbnQsXG4gICAgICAgICAgaXNFcnJvcjogcHJvcHMuaXNFcnJvcixcbiAgICAgICAgICBhcHByb3ZhbDogcHJvcHMuYXBwcm92YWwsXG4gICAgICAgICAgbXVsdGlwbGVDaG9pY2U6IHByb3BzLm11bHRpcGxlQ2hvaWNlLFxuICAgICAgICAgIGlzU3RyZWFtaW5nOiBwcm9wcy5pc1N0cmVhbWluZyxcbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiBwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkLFxuICAgICAgICAgIG9uUmV0cnk6IHByb3BzLm9uUmV0cnksXG4gICAgICAgIH0pICYmIChcbiAgICAgICAgICA8TWVzc2FnZUZlZWRiYWNrXG4gICAgICAgICAgICBjb250ZW50PXtkaXNwbGF5VGV4dH1cbiAgICAgICAgICAgIHsuLi5yZXNvbHZlRmVlZGJhY2tQcm9wc0ZvckNhbmNlbGxlZChwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkLCBwcm9wcy5zb3VyY2VzLCBwcm9wcy5oYW5kbGVGZWVkYmFja0NsaWNrKX1cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17cHJvcHMuZGlzYWJsZUZlZWRiYWNrfVxuICAgICAgICAgICAgb25SZXRyeT17cHJvcHMub25SZXRyeX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7c2hvdWxkUmVuZGVyQXNzaXN0YW50U3VnZ2VzdGlvbnMoe1xuICAgICAgICAgIGlzQXNzaXN0YW50OiBwcm9wcy5pc0Fzc2lzdGFudCxcbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiBwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkLFxuICAgICAgICAgIGFwcHJvdmFsOiBwcm9wcy5hcHByb3ZhbCxcbiAgICAgICAgICBpc0Vycm9yOiBwcm9wcy5pc0Vycm9yLFxuICAgICAgICAgIHN1Z2dlc3Rpb25zTGVuZ3RoOiBwcm9wcy5zdWdnZXN0aW9ucz8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgbXVsdGlwbGVDaG9pY2U6IHByb3BzLm11bHRpcGxlQ2hvaWNlLFxuICAgICAgICB9KSAmJiAoXG4gICAgICAgICAgPENoYXRBSVN1Z2dlc3Rpb25zXG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17cHJvcHMuc3VnZ2VzdGlvbnMgfHwgW119XG4gICAgICAgICAgICBvblNlbGVjdFN1Z2dlc3Rpb249e3N1Z2dlc3Rpb24gPT4gcHJvcHMuaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKHByb3BzLm1lc3NhZ2VJZCwgc3VnZ2VzdGlvbil9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIGhpZGRlbj17c2hvdWxkSGlkZUFzc2lzdGFudFN1Z2dlc3Rpb25zKHByb3BzLmlzU3RyZWFtaW5nLCBwcm9wcy5pc0xhc3RNZXNzYWdlLCBwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkKX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7c2hvdWxkUmVuZGVyQ3JlYXRlQWdlbnRBY3Rpb25zKHtcbiAgICAgICAgICBpc0Fzc2lzdGFudDogcHJvcHMuaXNBc3Npc3RhbnQsXG4gICAgICAgICAgaXNFcnJvcjogcHJvcHMuaXNFcnJvcixcbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiBwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkLFxuICAgICAgICAgIGFwcHJvdmFsOiBwcm9wcy5hcHByb3ZhbCxcbiAgICAgICAgICBhZ2VudElkOiBjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkLFxuICAgICAgICB9KSAmJiAoXG4gICAgICAgICAgPENoYXRBSUNyZWF0ZUFnZW50QWN0aW9uc1xuICAgICAgICAgICAgYWdlbnRJZD17Y3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCF9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIGhpZGRlbj17c2hvdWxkSGlkZUFzc2lzdGFudFN1Z2dlc3Rpb25zKHByb3BzLmlzU3RyZWFtaW5nLCBwcm9wcy5pc0xhc3RNZXNzYWdlLCBwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkKX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbmNvbnN0IE1lc3NhZ2VJdGVtID0gbWVtbygocHJvcHM6IE1lc3NhZ2VJdGVtUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHVzZXIsXG4gICAgbWVzc2FnZSxcbiAgICBpc1N0cmVhbWluZyxcbiAgICBpc0Vycm9yLFxuICAgIGF1dGhVc2VyLFxuICAgIG9wdGlvbnMsXG4gICAgaXNDaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbixcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBkaXNhYmxlRmVlZGJhY2ssXG4gICAgaGFuZGxlUmV0cnksXG4gICAgcm9sZSxcbiAgICBzb3VyY2VzLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFwcHJvdmFsLFxuICAgIGFwcHJvdmFsU3RhdHVzLFxuICAgIHN1Z2dlc3Rpb25zLFxuICAgIG11bHRpcGxlQ2hvaWNlLFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAsXG4gICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uLFxuICAgIHJlc29sdmVkTXVsdGlwbGVDaG9pY2VBbnN3ZXIsXG4gICAgaXNMYXN0TWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSBpc0N1cnJlbnRVc2VyTWVzc2FnZShyb2xlLCB1c2VyLmlkLCBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICBjb25zdCBpc0Fzc2lzdGFudCA9IGlzQXNzaXN0YW50Q2hhdE1lc3NhZ2Uocm9sZSwgdXNlci5pZClcbiAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoaWQpXG4gIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKFxuICAgIHJlc29sdmVTdHJlYW1pbmdUZXh0SG9va0lkKEJvb2xlYW4oaXNTdHJlYW1pbmcpLCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyLCBpZClcbiAgKVxuICBjb25zdCBpc0FjdGl2ZVN0cmVhbWluZyA9IGlzQWN0aXZlU3RyZWFtaW5nU3RhdGUoaXNTdHJlYW1pbmcsIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIpXG4gIGNvbnN0IGhhc1N0cmVhbVRleHQgPSBCb29sZWFuKHN0cmVhbWluZ1RleHQpXG4gIGNvbnN0IHJlYXNvbmluZ1RyYWNlID0gdXNlUmVhc29uaW5nVHJhY2UocmVzb2x2ZVJlYXNvbmluZ1RyYWNlSG9va0lkKGlzQXNzaXN0YW50LCBpc0FjdGl2ZVN0cmVhbWluZywgaWQpKVxuICAvLyBTdXNjcmlwY2nDs24gcHJvcGlhLCBzaW4gbGEgY29uZGljacOzbiBkZSBzdHJlYW1pbmcgZGUgYXJyaWJhOiBlbCBhdmlzbyBkZVxuICAvLyBjb21wYWN0YWNpw7NuIHRpZW5lIHF1ZSBzZWd1aXIgdmlzaWJsZSB1bmEgdmV6IHRlcm1pbmFkbyBlbCB0dXJuby4gU2kgbm8gaGF5XG4gIC8vIHNuYXBzaG90IGVuIHZpdm8gKHJlYWJyaXIgZWwgY2hhdCksIGNhZSBhbCBgY29tcGFjdGlvbmAgcGVyc2lzdGlkbyBlbiBlbCBtZW5zYWplLlxuICBjb25zdCB7IGNvbXBhY3Rpb246IGxpdmVDb21wYWN0aW9uIH0gPSB1c2VSZWFzb25pbmdUcmFjZShpc0Fzc2lzdGFudCA/IGlkIDogJycpXG4gIGNvbnN0IGNvbXBhY3Rpb24gPSBsaXZlQ29tcGFjdGlvbiA/PyBwcm9wcy5jb21wYWN0aW9uID8/IG51bGxcbiAgY29uc3Qgc3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSA9XG4gICAgaXNBc3Npc3RhbnQgJiZcbiAgICBzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lKHJlYXNvbmluZ1RyYWNlLnN0ZXBzLCBzdHJlYW1BY3Rpdml0eSwgc3RyZWFtaW5nVGV4dCwgeyBtZXNzYWdlSWQ6IGlkIH0pXG4gIGNvbnN0IHNob3dTdHJlYW1pbmdCb2R5ID0gc2hvdWxkU2hvd1N0cmVhbWluZ01lc3NhZ2VCb2R5KGlzQWN0aXZlU3RyZWFtaW5nLCBoYXNTdHJlYW1UZXh0LCBzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lKVxuICBjb25zdCBzaG93QWN0aXZpdHlJbmRpY2F0b3IgPSBzaG91bGRTaG93U3RyZWFtQWN0aXZpdHlJbmRpY2F0b3IoaXNBc3Npc3RhbnQsIGlzQWN0aXZlU3RyZWFtaW5nLCBzdHJlYW1BY3Rpdml0eSlcblxuICBjb25zdCBtZXNzYWdlQXR0YWNobWVudHMgPSByZXNvbHZlTWVzc2FnZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzLCBpc0Fzc2lzdGFudCwgc291cmNlcylcblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50Q2xpY2sgPSAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICAvLyBQZXJtaXRpciBwcmV2aXN1YWxpemFjacOzbiBzaSB0aWVuZSBhcmNoaXZvIGxvY2FsIG8gVVJMcyBkZWwgYmFja2VuZFxuICAgIGlmIChjYW5PcGVuQXR0YWNobWVudFByZXZpZXcoYXR0YWNobWVudCkpIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQgPSBhc3luYyAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRGaWxlTmFtZShhdHRhY2htZW50KVxuICAgIGNvbnN0IGZpbGVVcmwgPSByZXNvbHZlQXR0YWNobWVudERvd25sb2FkVXJsKGF0dGFjaG1lbnQpXG5cbiAgICB0cnkge1xuICAgICAgbGV0IGJsb2JVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsXG5cbiAgICAgIGNvbnN0IGRvd25sb2FkU3RyYXRlZ3kgPSByZXNvbHZlQXR0YWNobWVudERvd25sb2FkQmxvYlN0cmF0ZWd5KGZpbGVVcmwsIGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIGlmIChkb3dubG9hZFN0cmF0ZWd5ID09PSAncmVtb3RlLXVybCcgJiYgZmlsZVVybCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoZmlsZVVybCwgZmlsZU5hbWUsIGF0dGFjaG1lbnQudHlwZSlcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZG93bmxvYWRlZEZpbGUpXG4gICAgICB9IGVsc2UgaWYgKGRvd25sb2FkU3RyYXRlZ3kgPT09ICdsb2NhbC1maWxlJyAmJiBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKHNob3VsZFJlbmRlckNoYW5nZVByb2plY3RNZXNzYWdlKGlzQ2hhbmdlUHJvamVjdCwgb3B0aW9ucykpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VXcmFwcGVyIGtleT17aWR9IGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9IGRhdGEtbWVzc2FnZS1pZD17aWR9IGhhc0ZlZWRiYWNrPXtmYWxzZX0+XG4gICAgICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICA8TWVzc2FnZUNvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgICBpc0NoYW5nZVByb2plY3Q9e2lzQ2hhbmdlUHJvamVjdH1cbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIG1lc3NhZ2VFeHRyYUNvbnRlbnQ9ezxNZXNzYWdlT3B0aW9ucyBvcHRpb25zPXtvcHRpb25zIGFzIGFueX0gaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259IC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gICAgICA8L01lc3NhZ2VXcmFwcGVyPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrQ2xpY2sgPSAoZmVlZGJhY2s6IEZlZWRiYWNrKSA9PiB7XG4gICAgaGFuZGxlRmVlZGJhY2s/LihmZWVkYmFjaywgZXh0cmFjdEZlZWRiYWNrU2Vzc2lvbklkKGlkKSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9IGRhdGEtbWVzc2FnZS1pZD17aWR9PlxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgey8qIE1pc21vIHNsb3QgcGFyYSBsYSB0cmF6YSBlbiB2aXZvIHkgbGEgeWEgcGxlZ2FkYTogbWllbnRyYXMgZWwgdHVybm9cbiAgICAgICAgICAgIGNvcnJlLCBsb3MgcGFzb3Mgc2UgYXBpbGFuIGFjw6EgKHRpbWVsYXBzZSk7IGFsIGNvbXBsZXRhciwgZWxcbiAgICAgICAgICAgIFJlYXNvbmluZ0Jsb2NrIG9jdXBhIGVsIGx1Z2FyIHkgY29sYXBzYSBzb2xvLlxuICAgICAgICAgICAgVmEgQVJSSUJBIGRlbCBjdWVycG8gcG9ycXVlIGxhIG5hcnJhY2nDs24gZGUgY2FkYSB0dXJubyB0ZXJtaW5hIGNvbW9cbiAgICAgICAgICAgIGZpbGEgZGUgbGEgdHJhemE6IHNpIGVzdHV2aWVyYSBhYmFqbywgZWwgdGV4dG8gdmllam8gcXVlZGFyw61hIHBvclxuICAgICAgICAgICAgZGViYWpvIGRlbCB0ZXh0byBudWV2by4gKi99XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJlxuICAgICAgICAgIChpc0FjdGl2ZVN0cmVhbWluZyA/IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdUaW1lbGluZSBtZXNzYWdlSWQ9e2lkfSBzdHJlYW1BY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IHN0cmVhbWluZ1RleHQ9e3N0cmVhbWluZ1RleHR9IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdCbG9jayBtZXNzYWdlSWQ9e2lkfSB0cmFjZT17cHJvcHMucmVhc29uaW5nID8/IG51bGx9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIHsvKiBGdWVyYSBkZWwgUmVhc29uaW5nQmxvY2sgYSBwcm9ww7NzaXRvOiBlc2Ugc2UgcGxpZWdhIHNvbG8gYWwgdGVybWluYXJcbiAgICAgICAgICAgIGVsIHR1cm5vIHkgZXNjb25kZXLDrWEgZWwgYXZpc28ganVzdG8gY3VhbmRvIGVsIHVzdWFyaW8gcG9kcsOtYVxuICAgICAgICAgICAgcHJlZ3VudGFyc2UgcG9yIHF1w6kgTUFJQSB5YSBubyByZWN1ZXJkYSBhbGdvLiAqL31cbiAgICAgICAge2lzQXNzaXN0YW50ICYmIDxDb250ZXh0Q29tcGFjdGVkTm90aWNlIGNvbXBhY3Rpb249e2NvbXBhY3Rpb259IC8+fVxuICAgICAgICB7c2hvdWxkU2hvd01lc3NhZ2VBdHRhY2htZW50c1JvdyhtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3cgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgICB7bWVzc2FnZUF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGV0ZWN0YXIgc2kgZXMgdW4gYXJjaGl2byBkZSBhdWRpb1xuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0F0dGFjaG1lbnQoYXR0YWNobWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG91bGRSZW5kZXJNZXNzYWdlVGV4dEJvZHkoe1xuICAgICAgICAgIG1lc3NhZ2VUZXh0OiBtZXNzYWdlLFxuICAgICAgICAgIHNob3dTdHJlYW1pbmdCb2R5LFxuICAgICAgICAgIGlzQXNzaXN0YW50LFxuICAgICAgICAgIGF0dGFjaG1lbnRDb3VudDogbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCxcbiAgICAgICAgfSkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtzaG93U3RyZWFtaW5nQm9keX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBtdWx0aXBsZUNob2ljZT17bXVsdGlwbGVDaG9pY2V9XG4gICAgICAgICAgICByZXNvbHZlZE11bHRpcGxlQ2hvaWNlQW5zd2VyPXtyZXNvbHZlZE11bHRpcGxlQ2hvaWNlQW5zd2VyfVxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcD17Y3JlYXRlQWdlbnRGb2xsb3dVcH1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFjayA/PyBudWxsfVxuICAgICAgICAgICAgb25SZXRyeT17aGFuZGxlUmV0cnl9XG4gICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ9e2lzQWN0aXZlU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgey8qIFNwaW5uZXIgZGUgYWN0aXZpZGFkOiB2aXNpYmxlIHRhbWJpw6luIGVuIHdyaXRpbmcgKG5hcnJhY2nDs24gZW4gdHJhemEgbyByZXNwdWVzdGEgZmluYWwpLiAqL31cbiAgICAgICAge3Nob3dBY3Rpdml0eUluZGljYXRvciAmJiBzdHJlYW1BY3Rpdml0eSA/IChcbiAgICAgICAgICA8U0NUaW1lbGluZUluZGljYXRvcj5cbiAgICAgICAgICAgIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1BY3Rpdml0eX0gY29tcGFjdCAvPlxuICAgICAgICAgIDwvU0NUaW1lbGluZUluZGljYXRvcj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHtzaG91bGRTaG93QXBwcm92YWxBY3Rpb25zKGFwcHJvdmFsKSAmJiBhcHByb3ZhbCAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXsodGhyZWFkSWRzLCBtZXRhZGF0YSkgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJywgdW5kZWZpbmVkLCBtZXRhZGF0YSl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gIClcbn0pXG5cbmNvbnN0IENoYXRBSU1lc3NhZ2VzSW5uZXIgPSAoe1xuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGluaXRpYWxDaGF0SWQsXG4gIG9uRXJyb3IsXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeSxcbiAgb25TY3JvbGxUb0JvdHRvbSxcbiAgYXR0YWNobWVudHMsXG4gIGFnZW50cyxcbiAgZXhwYW5kZWQsXG4gIHNraXBFbnRlckFuaW1hdGlvbiA9IGZhbHNlLFxufTogQ2hhdEFJTWVzc2FnZXNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IGlzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGF0SW5pdGlhbGl6ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGlzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRocmVzaG9sZFJlZiA9IHVzZVJlZigzOSlcbiAgY29uc3QgbGFzdFNjcm9sbFRvcFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzaG93U2Nyb2xsVG9Cb3R0b21SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNob3dUb3BHcmFkaWVudFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2hvd0JvdHRvbUdyYWRpZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxSYWZSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgLyoqXG4gICAqIFR1cm5vIGNvbiBlbCBzY3JvbGwgYmFqbyBjb250cm9sIGRlbCB1c3VhcmlvOiBkZXNkZSBxdWUgZW52w61hIGVsIG1lbnNhamUgeVxuICAgKiBoYXN0YSBlbCBwcsOzeGltbyBlbnbDrW8gbm8gbW92ZW1vcyBlbCBzY3JvbGwgcG9yIG5pbmfDum4gbW90aXZvLiBFc1xuICAgKiBpbmRlcGVuZGllbnRlIGRlIGxhIGFsdHVyYSBkZWwgc3BhY2VyLCBxdWUgcHVlZGUgbGxlZ2FyIGEgMCBzaW4gZGVzYW5jbGFyLlxuICAgKi9cbiAgY29uc3QgYW5jaG9yZWRUdXJuSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc3BhY2VyRWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBzcGFjZXJIZWlnaHRSZWYgPSB1c2VSZWYoMClcbiAgY29uc3QgdHVyblNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCB3YXNMb2FkaW5nTWVzc2FnZXNSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGxhc3RTY3JvbGxlZFNlc3Npb25SZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc2Nyb2xsUGVyc2lzdFRpbWVyUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93U2Nyb2xsVG9Cb3R0b20sIHNldFNob3dTY3JvbGxUb0JvdHRvbV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dUb3BHcmFkaWVudCwgc2V0U2hvd1RvcEdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd0JvdHRvbUdyYWRpZW50LCBzZXRTaG93Qm90dG9tR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzLCBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSlcblxuICBjb25zdCB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHJldHJ5TWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGNoYW5nZVByb2plY3Qob3B0aW9uKVxuICAgIH0sXG4gICAgW2NoYW5nZVByb2plY3RdXG4gIClcblxuICAvKipcbiAgICogUmVjYWxjdWxhIGVsIGJvdMOzbiBcInNjcm9sbCB0byBib3R0b21cIiB5IGxvcyBncmFkaWVudGVzIGRlIGJvcmRlIGEgcGFydGlyIGRlXG4gICAqIGxhIHBvc2ljacOzbiBkZWwgc2Nyb2xsLiBMb3MgcmVmcyBldml0YW4gYHNldFN0YXRlYCBjdWFuZG8gZWwgdmFsb3Igbm8gY2FtYmlhOlxuICAgKiBlc3RvIGNvcnJlIGVuIGNhZGEgZnJhbWUgZGVsIHN0cmVhbS5cbiAgICovXG4gIGNvbnN0IHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwpIHJldHVyblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gZWxcbiAgICAvLyBFbCBzcGFjZXIgZGVsIHR1cm5vIGVzIGFsdG8gcmVzZXJ2YWRvLCBubyBjb250ZW5pZG86IHNpIG5vIGxvIGRlc2NvbnRhbW9zXG4gICAgLy8gbGEgZmxlY2hhIHkgZWwgZ3JhZGllbnRlIGRlIGFiYWpvIHF1ZWRhbiBlbmNlbmRpZG9zIGR1cmFudGUgdG9kbyBlbCB0dXJuby5cbiAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBjb21wdXRlRGlzdGFuY2VGcm9tQm90dG9tKHNjcm9sbEhlaWdodCwgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQsIHNjcm9sbFRvcCwgY2xpZW50SGVpZ2h0KVxuXG4gICAgY29uc3Qgc2hvdWxkU2hvdyA9IHNob3VsZFNob3dTY3JvbGxUb0JvdHRvbShkaXN0YW5jZUZyb21Cb3R0b20pXG4gICAgaWYgKHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ICE9PSBzaG91bGRTaG93KSB7XG4gICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgIH1cblxuICAgIGNvbnN0IG5leHRUb3BHcmFkaWVudCA9IHNob3VsZFNob3dUb3BTY3JvbGxHcmFkaWVudChzY3JvbGxUb3ApXG4gICAgaWYgKHNob3dUb3BHcmFkaWVudFJlZi5jdXJyZW50ICE9PSBuZXh0VG9wR3JhZGllbnQpIHtcbiAgICAgIHNob3dUb3BHcmFkaWVudFJlZi5jdXJyZW50ID0gbmV4dFRvcEdyYWRpZW50XG4gICAgICBzZXRTaG93VG9wR3JhZGllbnQobmV4dFRvcEdyYWRpZW50KVxuICAgIH1cblxuICAgIGNvbnN0IG5leHRCb3R0b21HcmFkaWVudCA9IHNob3VsZFNob3dCb3R0b21TY3JvbGxHcmFkaWVudChkaXN0YW5jZUZyb21Cb3R0b20pXG4gICAgaWYgKHNob3dCb3R0b21HcmFkaWVudFJlZi5jdXJyZW50ICE9PSBuZXh0Qm90dG9tR3JhZGllbnQpIHtcbiAgICAgIHNob3dCb3R0b21HcmFkaWVudFJlZi5jdXJyZW50ID0gbmV4dEJvdHRvbUdyYWRpZW50XG4gICAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQobmV4dEJvdHRvbUdyYWRpZW50KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBpbm1lZGlhdG8gYWwgZm9uZG8gKGRlbnRybyBkZSByQUYgcGFyYSBjb29yZGluYXIgY29uIGVsIHBhaW50KVxuICAgKiB5IGFjdHVhbGl6YSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLiBTb2xvIHNlIHVzYSBhbCBhYnJpci9jYXJnYXIgdW4gY2hhdFxuICAgKiBvIGN1YW5kbyBlbCB1c3VhcmlvIHBpZGUgaXIgYWwgZm9uZG86IG51bmNhIGR1cmFudGUgZWwgc3RyZWFtLlxuICAgKi9cbiAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21UaW1lb3V0UmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21SYWYgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0czogeyBkZWxheU1zPzogbnVtYmVyIH0gPSB7fSkgPT4ge1xuICAgICAgY29uc3QgeyBkZWxheU1zID0gMCB9ID0gb3B0c1xuICAgICAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzY3JvbGxUb0JvdHRvbVRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc2Nyb2xsVG9Cb3R0b21UaW1lb3V0UmVmLmN1cnJlbnQpXG4gICAgICAgIHNjcm9sbFRvQm90dG9tVGltZW91dFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgICAgaWYgKGRlbGF5TXMgPiAwKSBzY3JvbGxUb0JvdHRvbVRpbWVvdXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQocnVuLCBkZWxheU1zKVxuICAgICAgZWxzZSBydW4oKVxuICAgIH0sXG4gICAgW3VwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXVxuICApXG5cbiAgdXNlRWZmZWN0KFxuICAgICgpID0+ICgpID0+IHtcbiAgICAgIGlmIChzY3JvbGxUb0JvdHRvbVRpbWVvdXRSZWYuY3VycmVudCkgY2xlYXJUaW1lb3V0KHNjcm9sbFRvQm90dG9tVGltZW91dFJlZi5jdXJyZW50KVxuICAgIH0sXG4gICAgW11cbiAgKVxuXG4gIGNvbnN0IGNhbmNlbFR1cm5TY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudCA9PT0gbnVsbCkgcmV0dXJuXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodHVyblNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgIHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudCA9IG51bGxcbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBhbmltYWRvIGNvbiBlYXNpbmcgcHJvcGlvOiBgYmVoYXZpb3I6ICdzbW9vdGgnYCBubyBwZXJtaXRlIHJlZ3VsYXIgbGFcbiAgICogZHVyYWNpw7NuIHkgZWwgc2FsdG8gYWwgYW5jbGFyIGVsIHR1cm5vIHF1ZWRhIGRlbWFzaWFkbyBzZWNvLlxuICAgKi9cbiAgY29uc3QgYW5pbWF0ZVNjcm9sbFRvID0gdXNlQ2FsbGJhY2soXG4gICAgKHRvcDogbnVtYmVyKSA9PiB7XG4gICAgICBjYW5jZWxUdXJuU2Nyb2xsKClcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICBjb25zdCBmcm9tID0gZWwuc2Nyb2xsVG9wXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IHRvcCAtIGZyb21cbiAgICAgIGlmIChzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbihkaXN0YW5jZSkpIHJldHVyblxuXG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGNvbXB1dGVUdXJuU2Nyb2xsRHVyYXRpb25NcyhkaXN0YW5jZSlcblxuICAgICAgY29uc3Qgc3RhcnRlZEF0ID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICAgIGNvbnN0IHN0ZXAgPSAobm93OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1pbigxLCAobm93IC0gc3RhcnRlZEF0KSAvIGR1cmF0aW9uKVxuICAgICAgICBjb25zdCBlYXNlZCA9IGVhc2VPdXRFeHBvU2Nyb2xsUHJvZ3Jlc3MocHJvZ3Jlc3MpXG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IGZyb20gKyBkaXN0YW5jZSAqIGVhc2VkXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcHJvZ3Jlc3MgPCAxID8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApIDogbnVsbFxuICAgICAgfVxuICAgICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApXG4gICAgfSxcbiAgICBbY2FuY2VsVHVyblNjcm9sbCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4gY2FuY2VsVHVyblNjcm9sbCwgW2NhbmNlbFR1cm5TY3JvbGxdKVxuXG4gIGNvbnN0IHNldFNwYWNlckhlaWdodCA9IHVzZUNhbGxiYWNrKChuZXh0OiBudW1iZXIpID0+IHtcbiAgICBpZiAoIXNob3VsZFVwZGF0ZVNwYWNlckhlaWdodChzcGFjZXJIZWlnaHRSZWYuY3VycmVudCwgbmV4dCkpIHJldHVyblxuICAgIHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID0gbmV4dFxuICAgIGlmIChzcGFjZXJFbFJlZi5jdXJyZW50KSB7XG4gICAgICBzcGFjZXJFbFJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IGAke25leHR9cHhgXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBjbGVhclR1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNldFNwYWNlckhlaWdodCgwKVxuICB9LCBbc2V0U3BhY2VySGVpZ2h0XSlcblxuICAvKipcbiAgICogRGV2dWVsdmUgZWwgYWx0byByZXNlcnZhZG8gcXVlIHNlIHB1ZWRlIHNhY2FyIHNpbiBtb3ZlciBsYSB2aXN0YTogdG9kbyBsb1xuICAgKiBxdWUgcXVlZGUgcG9yIGRlYmFqbyBkZWwgc2Nyb2xsIGFjdHVhbC4gU2kgZWwgdXN1YXJpbyBlc3TDoSBlbiBlbCBmb25kbywgc2VcbiAgICogc2FjYSBlbnRlcm87IHNpIGVzdMOhIGEgbWl0YWQgZGUgY2FtaW5vLCBzZSB2YSBkcmVuYW5kbyBhIG1lZGlkYSBxdWUgYmFqYS5cbiAgICovXG4gIGNvbnN0IGRyYWluVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPD0gMCkgcmV0dXJuXG4gICAgc2V0U3BhY2VySGVpZ2h0KGNvbXB1dGVSZW1vdmFibGVUdXJuU3BhY2UoZWwuc2Nyb2xsSGVpZ2h0LCBlbC5jbGllbnRIZWlnaHQsIGVsLnNjcm9sbFRvcCwgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQpKVxuICB9LCBbc2V0U3BhY2VySGVpZ2h0XSlcblxuICAvKipcbiAgICogRWwgdXN1YXJpbyB0b23DsyBlbCBjb250cm9sIGRlbCBzY3JvbGw6IGVsIHR1cm5vIGRlamEgZGUgZXN0YXIgYW5jbGFkbyB5IGVsXG4gICAqIGVzcGFjaW8gcmVzZXJ2YWRvIGVtcGllemEgYSBkZXZvbHZlcnNlLiBTaW4gYW5jbGEgeSBjb24gc3BhY2VyID4gMCwgZWxcbiAgICogaGFuZGxlciBkZSBzY3JvbGwgc2lndWUgZHJlbmFuZG8gaGFzdGEgcXVlIGxsZWdhIGFsIGZvbmRvIHkgbm8gcXVlZGEgaHVlY28uXG4gICAqL1xuICBjb25zdCByZWxlYXNlVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghc2hvdWxkUmVsZWFzZVR1cm5TcGFjZShhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50LCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCkpIHJldHVyblxuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgZHJhaW5UdXJuU3BhY2UoKVxuICB9LCBbZHJhaW5UdXJuU3BhY2VdKVxuXG4gIGNvbnN0IGhhbmRsZVVzZXJTY3JvbGxJbnRlbnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsVHVyblNjcm9sbCgpXG4gICAgcmVsZWFzZVR1cm5TcGFjZSgpXG4gIH0sIFtjYW5jZWxUdXJuU2Nyb2xsLCByZWxlYXNlVHVyblNwYWNlXSlcblxuICAvKiogRW4gZnVsbHNjcmVlbiBlbCB3aGVlbCBlbiBtw6FyZ2VuZXMvb3ZlcmxheSBjYWUgZnVlcmEgZGUgU0NNZXNzYWdlc1Njcm9sbDsgcmVlbnZpYW1vcyBhbCBzY3JvbGxlciBkZWwgaGlsby4gKi9cbiAgY29uc3QgaGFuZGxlTWVzc2FnZXNPdXRlcldoZWVsID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5XaGVlbEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaGFuZGxlVXNlclNjcm9sbEludGVudCgpXG4gICAgICBjb25zdCBzY3JvbGxlciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghc2Nyb2xsZXIpIHJldHVyblxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgTm9kZVxuICAgICAgaWYgKHRhcmdldCAhPT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiAodGFyZ2V0ID09PSBzY3JvbGxlciB8fCBzY3JvbGxlci5jb250YWlucyh0YXJnZXQpKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkZWx0YVkgfSA9IGV2ZW50XG4gICAgICBpZiAoZGVsdGFZID09PSAwKSByZXR1cm5cblxuICAgICAgY29uc3QgbWF4U2Nyb2xsID0gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0XG4gICAgICBpZiAobWF4U2Nyb2xsIDw9IDApIHJldHVyblxuXG4gICAgICBjb25zdCBuZXh0U2Nyb2xsVG9wID0gTWF0aC5taW4obWF4U2Nyb2xsLCBNYXRoLm1heCgwLCBzY3JvbGxlci5zY3JvbGxUb3AgKyBkZWx0YVkpKVxuICAgICAgaWYgKG5leHRTY3JvbGxUb3AgPT09IHNjcm9sbGVyLnNjcm9sbFRvcCkgcmV0dXJuXG5cbiAgICAgIHNjcm9sbGVyLnNjcm9sbFRvcCA9IG5leHRTY3JvbGxUb3BcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB9LFxuICAgIFtoYW5kbGVVc2VyU2Nyb2xsSW50ZW50XVxuICApXG5cbiAgY29uc3QgbWVhc3VyZVR1cm4gPSB1c2VDYWxsYmFjaygocXVlc3Rpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3Qgc3BhY2VyRWwgPSBzcGFjZXJFbFJlZi5jdXJyZW50XG4gICAgaWYgKCFlbCB8fCAhc3BhY2VyRWwpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBxdWVzdGlvbkVsID0gZWwucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYFtkYXRhLW1lc3NhZ2UtaWQ9XCIke3F1ZXN0aW9uSWR9XCJdYClcbiAgICBpZiAoIXF1ZXN0aW9uRWwpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBjb250YWluZXJUb3AgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3BcbiAgICBjb25zdCB7IHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0IH0gPSBjb21wdXRlTWVhc3VyZVR1cm5MYXlvdXQoe1xuICAgICAgY29udGFpbmVyVG9wLFxuICAgICAgcXVlc3Rpb25Ub3A6IHF1ZXN0aW9uRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLFxuICAgICAgY29udGVudEJvdHRvbTogc3BhY2VyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLFxuICAgICAgc2Nyb2xsVG9wOiBlbC5zY3JvbGxUb3AsXG4gICAgfSlcbiAgICByZXR1cm4geyBlbCwgcXVlc3Rpb25Ub3AsIHR1cm5IZWlnaHQgfVxuICB9LCBbXSlcblxuICBjb25zdCByZXNlcnZlVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soXG4gICAgKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihxdWVzdGlvbklkKVxuICAgICAgaWYgKCFtZWFzdXJlZCkgcmV0dXJuXG4gICAgICBjb25zdCB7IGVsLCBxdWVzdGlvblRvcCwgdHVybkhlaWdodCB9ID0gbWVhc3VyZWRcblxuICAgICAgLy8gQW5jbGFtb3Mgc2llbXByZSwgaW5jbHVzbyBjdWFuZG8gbm8gaGFnYSBmYWx0YSByZXNlcnZhcjogZHVyYW50ZSBlbFxuICAgICAgLy8gdHVybm8gZWwgc2Nyb2xsIG5vIHNlIG11ZXZlIHNvbG8gZW4gbmluZ8O6biBjYXNvLlxuICAgICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IHF1ZXN0aW9uSWRcblxuICAgICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gY29tcHV0ZVR1cm5TY3JvbGxUYXJnZXRUb3AocXVlc3Rpb25Ub3AsIGVsLmNsaWVudEhlaWdodClcbiAgICAgIGNvbnN0IHBsYW4gPSByZXNvbHZlUmVzZXJ2ZVR1cm5TcGFjZVBsYW4oe1xuICAgICAgICBjdXJyZW50U2Nyb2xsVG9wOiBlbC5zY3JvbGxUb3AsXG4gICAgICAgIHRhcmdldFNjcm9sbFRvcCxcbiAgICAgICAgY2xpZW50SGVpZ2h0OiBlbC5jbGllbnRIZWlnaHQsXG4gICAgICAgIHR1cm5IZWlnaHQsXG4gICAgICB9KVxuICAgICAgaWYgKHBsYW4ua2luZCA9PT0gJ3NraXAtcmVzZXJ2YXRpb24nKSB7XG4gICAgICAgIHNldFNwYWNlckhlaWdodCgwKVxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzZXRTcGFjZXJIZWlnaHQocGxhbi5zcGFjZXJIZWlnaHQpXG4gICAgICBhbmltYXRlU2Nyb2xsVG8ocGxhbi50YXJnZXRTY3JvbGxUb3ApXG4gICAgfSxcbiAgICBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsIGFuaW1hdGVTY3JvbGxUb11cbiAgKVxuXG4gIC8qKlxuICAgKiBFbmNvZ2UgZWwgc3BhY2VyIGEgbWVkaWRhIHF1ZSBjcmVjZSBsYSByZXNwdWVzdGE6IGVsIGFsdG8gdG90YWwgZGVsIHNjcm9sbFxuICAgKiBxdWVkYSBjb25zdGFudGUgeSBsYSB2aXN0YSBubyBzZSBtdWV2ZSBzb2xhLiBTb2xvIGFjaGljYSwgbnVuY2EgYWdyYW5kYSxcbiAgICogcGFyYSBubyBpbnllY3RhciBlc3BhY2lvIGVuIHR1cm5vcyBxdWUgYXJyYW5jYXJvbiBzaW4gcmVzZXJ2YS5cbiAgICogRGV2dWVsdmUgc2kgZWwgdHVybm8gc2lndWUgYW5jbGFkbyAoYXVucXVlIGVsIHNwYWNlciB5YSBzZWEgMCkuXG4gICAqL1xuICBjb25zdCBzeW5jVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID4gMCkge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KVxuICAgICAgaWYgKG1lYXN1cmVkKSB7XG4gICAgICAgIHNldFNwYWNlckhlaWdodChcbiAgICAgICAgICBjb21wdXRlU3luY2VkVHVyblNwYWNlckhlaWdodChtZWFzdXJlZC5lbC5jbGllbnRIZWlnaHQsIG1lYXN1cmVkLnR1cm5IZWlnaHQsIHNwYWNlckhlaWdodFJlZi5jdXJyZW50KVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH0sIFttZWFzdXJlVHVybiwgc2V0U3BhY2VySGVpZ2h0XSlcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwpIHJldHVyblxuICAgIGNsZWFyVHVyblNwYWNlKClcbiAgICAvLyBNaXNtYSBjdXJ2YSB5IGR1cmFjacOzbiBxdWUgZWwgYW5jbGFqZSBkZWwgdHVybm86IGVsIGBzbW9vdGhgIG5hdGl2byBmcmVuYSBzZWNvLlxuICAgIGFuaW1hdGVTY3JvbGxUbyhyZXNvbHZlU2Nyb2xsVG9Cb3R0b21UYXJnZXRUb3AoZWwuc2Nyb2xsSGVpZ2h0LCBlbC5jbGllbnRIZWlnaHQpKVxuICB9LCBbY2xlYXJUdXJuU3BhY2UsIGFuaW1hdGVTY3JvbGxUb10pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsRnJhbWUgPSBwcm9jZXNzQ2hhdE1lc3NhZ2VzU2Nyb2xsRnJhbWUoe1xuICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIGxhc3RTY3JvbGxUb3A6IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCxcbiAgICAgICAgICBzY3JvbGxUaHJlc2hvbGQ6IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50LFxuICAgICAgICAgIGFuY2hvcmVkVHVybklkOiBhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50LFxuICAgICAgICAgIGluaXRpYWxDaGF0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSBzY3JvbGxGcmFtZS5uZXh0U2Nyb2xsVGhyZXNob2xkXG4gICAgICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHNjcm9sbEZyYW1lLmxhc3RTY3JvbGxUb3BcblxuICAgICAgICBpZiAoc2Nyb2xsRnJhbWUuc2hvdWxkRHJhaW5UdXJuU3BhY2UpIGRyYWluVHVyblNwYWNlKClcblxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG5cbiAgICAgICAgaWYgKHNjcm9sbEZyYW1lLnNob3VsZFNjaGVkdWxlU2Nyb2xsUGVyc2lzdCkge1xuICAgICAgICAgIGlmIChzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHNjcm9sbFBlcnNpc3RUaW1lclJlZi5jdXJyZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgICBzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbihhdXRoVXNlci5pZCwge1xuICAgICAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgICAgIHNjcm9sbFNlc3Npb25JZDogaW5pdGlhbENoYXRJZCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSwgMTUwKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjcm9sbEZyYW1lLnNob3VsZE5vdGlmeVNjcm9sbFRvQm90dG9tICYmIG9uU2Nyb2xsVG9Cb3R0b20pIHtcbiAgICAgICAgICBvblNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVNjcm9sbChjb250YWluZXIpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2F1dGhVc2VyLmlkLCBkcmFpblR1cm5TcGFjZSwgaGFuZGxlU2Nyb2xsLCBpbml0aWFsQ2hhdElkLCBvblNjcm9sbFRvQm90dG9tLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIC8vIHJlZnMgdG8gc3RhYmlsaXplIGZ1bmN0aW9ucyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICBjb25zdCBzZW5kTWVzc2FnZVJlZiA9IHVzZVJlZihzZW5kTWVzc2FnZSlcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25SZWYgPSB1c2VSZWYoc3RvcEdlbmVyYXRpb24pXG4gIGNvbnN0IG9uU2VuZE1lc3NhZ2VSZWFkeVJlZiA9IHVzZVJlZihvblNlbmRNZXNzYWdlUmVhZHkpXG4gIGNvbnN0IHNlbmRNZXNzYWdlUHJveHlSZWYgPSB1c2VSZWYoXG4gICAgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gc2VuZE1lc3NhZ2VSZWYuY3VycmVudChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gIClcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25Qcm94eVJlZiA9IHVzZVJlZigoKSA9PiBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50KCkpXG5cbiAgLyoqXG4gICAqIGBoYW5kbGVTdWdnZXN0aW9uQ2xpY2tgIHNlIHBhc2EgYSBUT0RPUyBsb3MgTWVzc2FnZUl0ZW0sIGFzw60gcXVlIHN1IGlkZW50aWRhZFxuICAgKiBkZWNpZGUgc2kgZWwgYG1lbW9gIGRlIGxhIGxpc3RhIHNvc3RpZW5lLiBMZWVtb3MgcG9yIHJlZiBsbyBxdWUgY2FtYmlhIGVuIGNhZGFcbiAgICogdXBkYXRlIChgbWVzc2FnZXNgLCBgc2VuZE1lc3NhZ2VgLCBsYXMgc3VnZXJlbmNpYXMgeWEgZWxlZ2lkYXMpIHBhcmEgcXVlIGVsXG4gICAqIGNhbGxiYWNrIHNlYSBlc3RhYmxlOiBzaSBubywgYWwgdGVybWluYXIgZWwgc3RyZWFtIHNlIHJlcGludGEgZWwgY2hhdCBlbnRlcm9cbiAgICogeSBjYWRhIE1haWFTdHJlYW1kb3duIHZ1ZWx2ZSBhIHBhcnNlYXIgc3UgbWFya2Rvd24uXG4gICAqL1xuICBjb25zdCBtZXNzYWdlc0RhdGFSZWYgPSB1c2VSZWYobWVzc2FnZXMpXG4gIGNvbnN0IHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNSZWYgPSB1c2VSZWYoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcylcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQgPSBzZW5kTWVzc2FnZVxuICAgIHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQgPSBzdG9wR2VuZXJhdGlvblxuICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG4gICAgbWVzc2FnZXNEYXRhUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuICAgIHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNSZWYuY3VycmVudCA9IHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNcbiAgfSlcblxuICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHNob3VsZElnbm9yZVN1Z2dlc3Rpb25DbGljayhzdWdnZXN0aW9uLCBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmLmN1cnJlbnRbbWVzc2FnZUlkXSkpIHJldHVyblxuICAgICAgY29uc3QgY3VycmVudE1lc3NhZ2VzID0gbWVzc2FnZXNEYXRhUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdFN1Z2dlc3RlZEFuc3dlciwge1xuICAgICAgICBhZ2VudF90eXBlOiByZXNvbHZlU3VnZ2VzdGlvbkFuYWx5dGljc0FnZW50VHlwZShpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQsIGFnZW50Py50eXBlKSxcbiAgICAgIH0pXG4gICAgICBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKHByZXYgPT4gKHsgLi4ucHJldiwgW21lc3NhZ2VJZF06IHRydWUgfSkpXG5cbiAgICAgIGNvbnN0IHRhcmdldE1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZXMuZmluZChtc2cgPT4gbXNnLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBpZiAoaXNSZXRyeVN1Z2dlc3Rpb25TZWxlY3Rpb24odGFyZ2V0TWVzc2FnZT8uaXNFcnJvciwgc3VnZ2VzdGlvbiwgdCgnY2hhdC5yZXRyeScpKSkge1xuICAgICAgICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZXNcbiAgICAgICAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLmF0KC0xKVxuICAgICAgICBpZiAobGFzdFVzZXJNZXNzYWdlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudChsYXN0VXNlck1lc3NhZ2UubWVzc2FnZSwgcmVzb2x2ZVJldHJ5QXR0YWNobWVudHNGcm9tVXNlck1lc3NhZ2UobGFzdFVzZXJNZXNzYWdlKSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50KHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbZXZlbnQsIGFnZW50LCB0LCBhdXRoVXNlci5pZF1cbiAgKVxuXG4gIC8vIENhcmRzIHlhIHJlc3BvbmRpZGFzOiBsYSByZXNwdWVzdGEgc2UgZGlidWphIGRlbnRybyBkZWwgbWVuc2FqZSBkZWwgYXNpc3RlbnRlIHkgbGEgYnVyYnVqYSBkZWwgdXN1YXJpbyBzZSBvY3VsdGEuXG4gIGNvbnN0IGFuc3dlcmVkTXVsdGlwbGVDaG9pY2VzID0gdXNlTWVtbygoKSA9PiByZXNvbHZlQW5zd2VyZWRNdWx0aXBsZUNob2ljZXMobWVzc2FnZXMpLCBbbWVzc2FnZXNdKVxuXG4gIC8vIExhIGNhcmQgZGUgbXVsdGlwbGUgY2hvaWNlIHNlIGRpYnVqYSBzb2JyZSBlbCBpbnB1dCAoQ2hhdEZvb3RlciksIHF1ZSBlcyBoZXJtYW5vIGRlIGVzdGEgbGlzdGEuXG4gIGNvbnN0IGRpc21pc3NlZE11bHRpcGxlQ2hvaWNlSWRzID0gdXNlTXVsdGlwbGVDaG9pY2VTdG9yZShzdGF0ZSA9PiBzdGF0ZS5kaXNtaXNzZWRNZXNzYWdlSWRzKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG5leHQgPSByZXNvbHZlUGVuZGluZ011bHRpcGxlQ2hvaWNlKHtcbiAgICAgIG1lc3NhZ2VzLFxuICAgICAgaXNTdHJlYW1pbmc6IHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcsXG4gICAgICBkaXNtaXNzZWRNZXNzYWdlSWRzOiBkaXNtaXNzZWRNdWx0aXBsZUNob2ljZUlkcyxcbiAgICB9KVxuICAgIGNvbnN0IHsgcGVuZGluZywgc2V0UGVuZGluZyB9ID0gdXNlTXVsdGlwbGVDaG9pY2VTdG9yZS5nZXRTdGF0ZSgpXG4gICAgaWYgKGlzU2FtZVBlbmRpbmdNdWx0aXBsZUNob2ljZShwZW5kaW5nLCBuZXh0KSkgcmV0dXJuXG4gICAgc2V0UGVuZGluZyhuZXh0KVxuICAgIGlmICghbmV4dCB8fCBwZW5kaW5nPy5tZXNzYWdlSWQgPT09IG5leHQubWVzc2FnZUlkKSByZXR1cm5cbiAgICAvLyBMYSBjYXJkIGFjaGljYSBlbCDDoXJlYSBkZSBtZW5zYWplczogc2luIGVzdG8gbGEgcHJlZ3VudGEgZGVsIGFzaXN0ZW50ZSBxdWVkYSB0YXBhZGEgZGViYWpvLlxuICAgIC8vIERvYmxlIHJBRjogZWwgZm9vdGVyIHNlIHBpbnRhIGNvbiBsYSBjYXJkIGVuIGVsIGZyYW1lIHNpZ3VpZW50ZSBhbCBzZXRQZW5kaW5nLiBObyBzZSBjYW5jZWxhIGVuIGVsXG4gICAgLy8gY2xlYW51cCBwb3JxdWUgYG1lc3NhZ2VzYCBwdWVkZSBjYW1iaWFyIGRlIGlkZW50aWRhZCBlbnNlZ3VpZGEgeSBsYSBjb3JyaWRhIHNpZ3VpZW50ZSB5YSBubyByZXByb2dyYW1hLlxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PlxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gZWw/LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1lc3NhZ2UtaWRdJylcbiAgICAgICAgY29uc3QgbGFzdCA9IHJlbmRlcmVkPy5bcmVuZGVyZWQubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFlbCB8fCAhbGFzdCkgcmV0dXJuXG4gICAgICAgIGNvbnN0IG92ZXJmbG93ID0gbGFzdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gLSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b21cbiAgICAgICAgaWYgKG92ZXJmbG93ID4gMCkgZWwuc2Nyb2xsVG9wICs9IG92ZXJmbG93XG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgIH0pXG4gICAgKVxuICB9LCBbbWVzc2FnZXMsIHdhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nLCBkaXNtaXNzZWRNdWx0aXBsZUNob2ljZUlkcywgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiAoKSA9PiB1c2VNdWx0aXBsZUNob2ljZVN0b3JlLmdldFN0YXRlKCkuc2V0UGVuZGluZyhudWxsKSwgW10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KFxuICAgICAgICBzZW5kTWVzc2FnZVByb3h5UmVmLmN1cnJlbnQsXG4gICAgICAgIHN0b3BHZW5lcmF0aW9uUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgICBpc1dyaXRpbmdcbiAgICAgIClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZ10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlTWVzc2FnZXNcbiAgfSwgW2lzTG9hZGluZ01vcmVNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2hvdWxkSW5pdGlhbGl6ZUNoYXQoY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQpKSB7XG4gICAgICBjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGluaXRpYWxpemVDaGF0KClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIE1pZW50cmFzIGVsIHN0cmVhbSBjcmVjZTogZW5jb2dlciBlbCBzcGFjZXIgZGVsIHR1cm5vIGFuY2xhZG8geVxuICAvLyBhY3R1YWxpemFyIGZsZWNoYS9ncmFkaWVudGVzLiBFbCBzY3JvbGwgbm8gc2UgbXVldmUgc29sby5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXNob3VsZFJ1blN0cmVhbVR1cm5TeW5jRWZmZWN0KHdhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IHJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByYWZJZCA9IG51bGxcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzeW5jVHVyblNwYWNlKClcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgfVxuXG4gICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJhZklkICE9IG51bGwpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nLCBzeW5jVHVyblNwYWNlLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgY29uc3QgbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICAvLyBDYW1iaW8gZGUgY2hhdDogZWwgYW5jbGEgeSBlbCBzcGFjZXIgZGVsIHR1cm5vIGFudGVyaW9yIGRlamFuIGRlIGFwbGljYXIuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFzaG91bGRDbGVhckxhc3RSZXNlcnZlZFF1ZXN0aW9uKGxvYWRpbmdNZXNzYWdlcykpIHJldHVyblxuICAgIGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgY2xlYXJUdXJuU3BhY2UoKVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBjbGVhclR1cm5TcGFjZV0pXG5cbiAgLy8gQWwgZW52aWFyIHVuIG1lbnNhamU6IGFuY2xhbW9zIGVsIHR1cm5vIHkgaGFjZW1vcyBlbCDDum5pY28gc2Nyb2xsIGRlbCBjaWNsby5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBVbmEgcmVzcHVlc3RhIGRlIGNhcmQgbm8gc2UgcmVuZGVyaXphOiBlbCB0dXJubyBzZSBhbmNsYSBlbiBsYSBjYXJkIHJlc3VlbHRhIHF1ZSBxdWVkYSBhcnJpYmEuXG4gICAgY29uc3QgcXVlc3Rpb25JZCA9IHJlc29sdmVUdXJuQW5jaG9ySWQoXG4gICAgICBtZXNzYWdlcyxcbiAgICAgIGZpbmRMYXN0UXVlc3Rpb25JZChtZXNzYWdlcyksXG4gICAgICBhbnN3ZXJlZE11bHRpcGxlQ2hvaWNlcy5oaWRkZW5NZXNzYWdlSWRzXG4gICAgKVxuICAgIGlmIChcbiAgICAgICFzaG91bGRTY2hlZHVsZVR1cm5TcGFjZVJlc2VydmF0aW9uKFxuICAgICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICAgICAgcXVlc3Rpb25JZCxcbiAgICAgICAgbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFxdWVzdGlvbklkKSByZXR1cm5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gcXVlc3Rpb25JZFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNlcnZlVHVyblNwYWNlKHF1ZXN0aW9uSWQpKVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCByZXNlcnZlVHVyblNwYWNlLCBhbnN3ZXJlZE11bHRpcGxlQ2hvaWNlc10pXG5cbiAgLy8gU2Nyb2xsIGN1YW5kbyBjYW1iaWFuIGxvcyBtZW5zYWplczogZGlzdGluZ3VlIFwibnVldm8gbWVuc2FqZVwiIChhZ3JlZ2FkbylcbiAgLy8gZGUgXCJyZWVtcGxhem9cIiAobWlzbW8gaWQvbGVuZ3RoLCBlai4gZmVlZGJhY2sgbyBhcHByb3ZhbFN0YXR1cykuIEVuXG4gIC8vIHJlZW1wbGF6b3Mgc29sbyBzZSByZWNhbGN1bGEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbiBzaW4gZm9yemFyIHNjcm9sbC5cbiAgY29uc3QgbGFzdE1lc3NhZ2VJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBsYXN0TWVzc2FnZXNMZW5ndGhSZWYgPSB1c2VSZWY8bnVtYmVyPigwKVxuXG4gIC8vIEFsIGNhbWJpYXIgZGUgc2VzacOzbiwgcmVzZXRlYXIgZXN0YWRvIGRlIHNjcm9sbCBtYW51YWwgcGFyYSBubyBoZXJlZGFyIGVsIGNoYXQgYW50ZXJpb3IuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9IG51bGxcbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gMFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IDBcbiAgfSwgW2luaXRpYWxDaGF0SWRdKVxuXG4gIC8vIFJlc3RhdXJhY2nDs24gZGVzZGUgY2FjaGUgKHNpbiBMb2FkZXIpOiBiYWphciBhbCBmb25kbyBhbCByZWFicmlyIHNlc2nDs24gdmlzaXRhZGEuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgIXNob3VsZFJ1blNlc3Npb25DYWNoZVNjcm9sbFRvQm90dG9tKFxuICAgICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICAgIGluaXRpYWxDaGF0SWQsXG4gICAgICAgIG1lc3NhZ2VzLmxlbmd0aCxcbiAgICAgICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdPy5pZCA/PyBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICB9LCBbaW5pdGlhbENoYXRJZCwgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIG1lc3NhZ2VzLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoXG4gICAgICBzaG91bGRTa2lwTWVzc2FnZXNTY3JvbGxFZmZlY3QoXG4gICAgICAgIEJvb2xlYW4obWVzc2FnZXNSZWYuY3VycmVudCksXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgICAgICBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnRcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBsYXN0SWQgPSBsYXN0TWVzc2FnZT8uaWQgPz8gbnVsbFxuICAgIGNvbnN0IHByZXZJZCA9IGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudFxuICAgIGNvbnN0IHByZXZMZW4gPSBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IGxhc3RJZFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBjb25zdCBpc05ld01lc3NhZ2UgPSBpc05ld0NoYXRNZXNzYWdlRXZlbnQobGFzdElkLCBwcmV2SWQsIG1lc3NhZ2VzLmxlbmd0aCwgcHJldkxlbilcbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3Qgc2Nyb2xsRGVjaXNpb24gPSBzaG91bGRBdXRvU2Nyb2xsT25NZXNzYWdlc0NoYW5nZSh7XG4gICAgICBpc05ld01lc3NhZ2UsXG4gICAgICBhbmNob3JlZFR1cm5JZDogYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGlzV3JpdGluZyxcbiAgICAgIGlzQXRCb3R0b206IHJlc29sdmVDb250YWluZXJBdEJvdHRvbShjb250YWluZXIpLFxuICAgICAgaXNBbnN3ZXJPclF1ZXN0aW9uOiBpc0Fuc3dlck9yUXVlc3Rpb25DaGF0TWVzc2FnZUlkKGxhc3RNZXNzYWdlPy5pZCksXG4gICAgICBpc0FwcHJvdmFsOiBpc0FwcHJvdmFsQ2hhdE1lc3NhZ2UobGFzdE1lc3NhZ2UpLFxuICAgICAgaGFzSW5pdGlhbE1lc3NhZ2U6IGhhc0luaXRpYWxVc2VyTWVzc2FnZUluTGlzdChtZXNzYWdlcyksXG4gICAgICBtZXNzYWdlc0xlbmd0aDogbWVzc2FnZXMubGVuZ3RoLFxuICAgICAgcHJldk1lc3NhZ2VzTGVuZ3RoOiBwcmV2TGVuLFxuICAgIH0pXG5cbiAgICBpZiAoc2Nyb2xsRGVjaXNpb24gPT09ICdhZmZvcmRhbmNlcy1vbmx5Jykge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHNjcm9sbERlY2lzaW9uID09PSAnc3luYy10dXJuJykge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN5bmNUdXJuU3BhY2UpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gIH0sIFtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYsXG4gICAgc3luY1R1cm5TcGFjZSxcbiAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcyxcbiAgXSlcblxuICAvLyBBbCBhYnJpci9jYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24gZWwgY29udGVuZWRvciBzZSByZW1vbnRhIChMb2FkZXIg4oaSIGxpc3RhKSBjb25cbiAgLy8gc2Nyb2xsVG9wPTAuIEZvcnphbW9zIGlyIGFsIGZvbmRvIGFsIHRlcm1pbmFyIGxvYWRNZXNzYWdlcywgc2luIGFmZWN0YXIgcGFnaW5hY2nDs24gaGFjaWEgYXJyaWJhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGp1c3RGaW5pc2hlZExvYWRpbmcgPSBkZXRlY3RKdXN0RmluaXNoZWRMb2FkaW5nTWVzc2FnZXMod2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQsIGxvYWRpbmdNZXNzYWdlcylcbiAgICB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCA9IGxvYWRpbmdNZXNzYWdlc1xuXG4gICAgaWYgKCFzaG91bGRTY3JvbGxUb0JvdHRvbUFmdGVyTG9hZChqdXN0RmluaXNoZWRMb2FkaW5nLCBtZXNzYWdlcy5sZW5ndGgpKSByZXR1cm5cblxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXT8uaWQgPz8gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgLy8gRXN0YWRvIGluaWNpYWwgZGVsIGJvdMOzbiBzY3JvbGwtdG8tYm90dG9tIGFsIHRlcm1pbmFyIGxvYWRpbmdNZXNzYWdlcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNPbkxvYWRFbmQobG9hZGluZ01lc3NhZ2VzKSkge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgIH1cbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgLy8gT2J0ZW5lciBlbCDDumx0aW1vIG1lbnNhamUgZGVsIHVzdWFyaW8gcGFyYSB2ZXJpZmljYXIgc2kgdGllbmUgYXR0YWNobWVudHNcbiAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gcmVzb2x2ZUxhc3RVc2VyTWVzc2FnZUZvckF0dGFjaG1lbnRzKG1lc3NhZ2VzLCBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRzQ291bnQgPSBjb3VudFVzZXJNZXNzYWdlQXR0YWNobWVudHMobGFzdFVzZXJNZXNzYWdlKVxuXG4gIGNvbnN0IHN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5KHtcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5nczogYWN0aXZlTG9hZGluZ3MgfHwge30sXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50c0NvdW50KSxcbiAgICBhdHRhY2htZW50c0NvdW50LFxuICAgIHQsXG4gIH0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2hvdWxkQ2xlYXJTY3JvbGxSZXN0b3JlV2l0aG91dENoYXQoaW5pdGlhbENoYXRJZCkpIHtcbiAgICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHJlYWRNYWlhUGFuZWxTZXNzaW9uKGF1dGhVc2VyLmlkKVxuICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSByZXNvbHZlUGVuZGluZ1Njcm9sbFRvcEZyb21TZXNzaW9uKFxuICAgICAgc2Vzc2lvblxuICAgICAgICA/IHsgc2Nyb2xsU2Vzc2lvbklkOiBzZXNzaW9uLnNjcm9sbFNlc3Npb25JZCA/PyB1bmRlZmluZWQsIHNjcm9sbFRvcDogc2Vzc2lvbi5zY3JvbGxUb3AgPz8gdW5kZWZpbmVkIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgaW5pdGlhbENoYXRJZFxuICAgIClcbiAgfSwgW2F1dGhVc2VyLmlkLCBpbml0aWFsQ2hhdElkXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBwZW5kaW5nU2Nyb2xsVG9wID0gcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudFxuICAgIGlmIChcbiAgICAgICFjb250YWluZXIgfHxcbiAgICAgICFzaG91bGRBcHBseVBlbmRpbmdTY3JvbGxSZXN0b3JlKGxvYWRpbmdNZXNzYWdlcywgcGVuZGluZ1Njcm9sbFRvcCwgdHJ1ZSkgfHxcbiAgICAgIHBlbmRpbmdTY3JvbGxUb3AgPT0gbnVsbFxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBwZW5kaW5nU2Nyb2xsVG9wXG4gICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gcGVuZGluZ1Njcm9sbFRvcFxuICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aF0pXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChcbiAgICAgIHNob3VsZFJlc3RvcmVTY3JvbGxPbkV4cGFuZGVkQ2hhbmdlKEJvb2xlYW4oZXhwYW5kZWRSZWYuY3VycmVudCksIEJvb2xlYW4oZXhwYW5kZWQpLCBCb29sZWFuKG1lc3NhZ2VzUmVmLmN1cnJlbnQpKVxuICAgICkge1xuICAgICAgY29uc3Qgc2F2ZWRTY3JvbGxUb3AgPSBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQhLnNjcm9sbFRvcCA9IHNhdmVkU2Nyb2xsVG9wXG4gICAgfVxuICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICB9LCBbZXhwYW5kZWRdKVxuXG4gIGlmIChsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZhZGUgZmlsbD5cbiAgICAgICAgPExvYWRlciAvPlxuICAgICAgPC9GYWRlPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgY29uc3QgaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yID0gaGFzTWVzc2FnZUxldmVsU3RyZWFtSW5kaWNhdG9yKGxhc3RNZXNzYWdlPy5pZCwgd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcpXG5cbiAgY29uc3QgbWVzc2FnZXNDb250ZW50ID0gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nTW9yZU1lc3NhZ2VzICYmIDxMb2FkaW5nVGV4dCB0ZXh0PXt0KCdjaGF0LmxvYWRpbmdNb3JlJyl9IC8+fVxuICAgICAgPD5cbiAgICAgICAge21lc3NhZ2VzLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIsIGlzU3RyZWFtaW5nIH0gPSByZXNvbHZlQ2hhdExpc3RJdGVtU3RyZWFtaW5nRmxhZ3Moe1xuICAgICAgICAgICAgcm9sZTogbWVzc2FnZS5yb2xlLFxuICAgICAgICAgICAgdXNlcklkOiBtZXNzYWdlLnVzZXIuaWQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IG1lc3NhZ2UuaWQsXG4gICAgICAgICAgICBpc0xhc3RNZXNzYWdlLFxuICAgICAgICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgICAgICAgaXNXcml0aW5nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICAvLyBObyBmaWx0cmFyIGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZzogc3UgdGV4dG8gdml2ZVxuICAgICAgICAgIC8vIGVuIGVsIHN0cmVhbWluZ1N0b3JlIHkgYG1lc3NhZ2UubWVzc2FnZWAgZXMgJycgaGFzdGEgZWwgY29tcGxldGUuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc2hvdWxkU2tpcEVtcHR5Q2hhdExpc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmcsXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRDb3VudDogbWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgICAgIHNvdXJjZUNvdW50OiBtZXNzYWdlLnNvdXJjZXM/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgICBtZXNzYWdlVGV4dDogbWVzc2FnZS5tZXNzYWdlID8/ICcnLFxuICAgICAgICAgICAgICBwcm9qZWN0TmFtZTogbWVzc2FnZS5wcm9qZWN0Py5uYW1lLFxuICAgICAgICAgICAgICBoYXNBcHByb3ZhbDogQm9vbGVhbihtZXNzYWdlLmFwcHJvdmFsKSxcbiAgICAgICAgICAgICAgaGFzTXVsdGlwbGVDaG9pY2U6IEJvb2xlYW4obWVzc2FnZS5tdWx0aXBsZUNob2ljZSksXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgYW5zd2VyZWRNdWx0aXBsZUNob2ljZXMuaGlkZGVuTWVzc2FnZUlkc1ttZXNzYWdlLmlkXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtZXNzYWdlRmVlZGJhY2sgPSByZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwobWVzc2FnZT8ud2FzSGVscGZ1bClcblxuICAgICAgICAgIC8vIEtleSBlc3RhYmxlOiBzb2xvIG1lc3NhZ2UuaWQgcGFyYSBldml0YXIgcmVtb3VudCBkdXJhbnRlIHN0cmVhbWluZyAobWVzc2FnZS5kYXRlIHB1ZWRlIGNhbWJpYXIpXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUtleSA9IHJlc29sdmVNZXNzYWdlTGlzdEl0ZW1LZXkobWVzc2FnZS5pZCwgaW5kZXgpXG5cbiAgICAgICAgICBjb25zdCB0dXJuSWQgPSByZXNvbHZlUmV0cnlUdXJuSWQobWVzc2FnZSlcbiAgICAgICAgICBjb25zdCB1c2VyTWVzc2FnZUZvclJldHJ5ID0gZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkobWVzc2FnZXMsIG1lc3NhZ2UpXG4gICAgICAgICAgY29uc3QgY2FuUmV0cnkgPSBjYW5SZXRyeUFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgICAgaGFzVXNlck1lc3NhZ2VGb3JSZXRyeTogQm9vbGVhbih1c2VyTWVzc2FnZUZvclJldHJ5KSxcbiAgICAgICAgICAgIGlzU3RyZWFtaW5nLFxuICAgICAgICAgICAgaXNFcnJvcjogQm9vbGVhbihtZXNzYWdlLmlzRXJyb3IpLFxuICAgICAgICAgICAgaGFzQXBwcm92YWw6IEJvb2xlYW4obWVzc2FnZS5hcHByb3ZhbCksXG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiBtZXNzYWdlLmlzRnJvbnRlbmRDYW5jZWxsZWQsXG4gICAgICAgICAgICBpc0NhbmNlbGxlZDogbWVzc2FnZS5pc19jYW5jZWxsZWQsXG4gICAgICAgICAgICB0dXJuSWQsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgICAgey4uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgIGtleT17bWVzc2FnZUtleX1cbiAgICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9ufVxuICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgICAgaGFuZGxlUmV0cnk9e2NhblJldHJ5ID8gKCkgPT4gcmV0cnlNZXNzYWdlKG1lc3NhZ2UpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb249eyEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXX1cbiAgICAgICAgICAgICAgcmVzb2x2ZWRNdWx0aXBsZUNob2ljZUFuc3dlcj17YW5zd2VyZWRNdWx0aXBsZUNob2ljZXMuYW5zd2Vyc1ttZXNzYWdlLmlkXX1cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgICBzdHJlYW1BY3Rpdml0eT17aXNTdHJlYW1pbmcgPyBzdHJlYW1Mb2FkaW5nRGlzcGxheSA6IG51bGx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8Lz5cbiAgICAgIHtzdHJlYW1Mb2FkaW5nRGlzcGxheSAmJlxuICAgICAgICBzaG91bGRTaG93R2xvYmFsU3RyZWFtTG9hZGluZ0luZGljYXRvcihoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IsIHN0cmVhbUxvYWRpbmdEaXNwbGF5KSAmJiAoXG4gICAgICAgICAgPFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgICAgICAgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUxvYWRpbmdEaXNwbGF5fSAvPlxuICAgICAgICAgIDwvU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICAgICl9XG4gICAgICB7LyogRXNwYWNpbyBxdWUgbGUgcGVybWl0ZSBhIGxhIHByZWd1bnRhIHN1YmlyIGFsIHRvcGUuIEFsdHVyYSBtYW5lamFkYVxuICAgICAgICAgIGltcGVyYXRpdmFtZW50ZSBkZXNkZSBgc2V0U3BhY2VySGVpZ2h0YDsgYXJyYW5jYSBlbiAwLiAqL31cbiAgICAgIDxTQ1R1cm5TcGFjZXIgcmVmPXtzcGFjZXJFbFJlZn0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICA8Lz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgLy8gU2kgZWwgdXN1YXJpbyBtdWV2ZSBlbCBzY3JvbGwgYWJvcnRhbW9zIGxhIGFuaW1hY2nDs24geSBzb2x0YW1vcyBlbCB0dXJubzpcbiAgICAvLyBubyBsZSBwZWxlYW1vcyBlbCBjb250cm9sIGRlbCBjb250ZW5lZG9yLlxuICAgIDxTQ01lc3NhZ2VzT3V0ZXIgb25XaGVlbD17aGFuZGxlTWVzc2FnZXNPdXRlcldoZWVsfSBvblRvdWNoU3RhcnQ9e2hhbmRsZVVzZXJTY3JvbGxJbnRlbnR9PlxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudFRvcCAkc2hvdz17c2hvd1RvcEdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgPFNDTWVzc2FnZXNJbm5lciAkc2tpcEVudGVyPXtza2lwRW50ZXJBbmltYXRpb259PnttZXNzYWdlc0NvbnRlbnR9PC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICA8L1NDTWVzc2FnZXNTY3JvbGw+XG5cbiAgICAgIDxTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20gJHNob3c9e3Nob3dCb3R0b21HcmFkaWVudH0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cblxuICAgICAge3Nob3dTY3JvbGxUb0JvdHRvbSAmJiAoXG4gICAgICAgIDxTY3JvbGxUb0JvdHRvbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDU2Nyb2xsSWNvblN3YXAgJHZpc2libGU9e2lzV3JpdGluZ30gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICA8U0NXcml0aW5nRG90cz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgIDwvU0NXcml0aW5nRG90cz5cbiAgICAgICAgICA8L1NDU2Nyb2xsSWNvblN3YXA+XG4gICAgICAgICAgPFNDU2Nyb2xsSWNvblN3YXAgJHZpc2libGU9eyFpc1dyaXRpbmd9IGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMyMDIwMjBcIlxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezEuNX1cbiAgICAgICAgICAgICAgICBkPVwiTTYgLjc1djEwLjVNLjc1IDYgNiAxMS4yNSAxMS4yNSA2XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvU0NTY3JvbGxJY29uU3dhcD5cbiAgICAgICAgPC9TY3JvbGxUb0JvdHRvbUJ1dHRvbj5cbiAgICAgICl9XG4gICAgPC9TQ01lc3NhZ2VzT3V0ZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1lc3NhZ2VzID0gUmVhY3QubWVtbyhDaGF0QUlNZXNzYWdlc0lubmVyKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsS0FBSyxJQUFRQyxJQUFJLEVBQWFDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxlQUFlLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUFDLGFBQUEsSUFBQUMsY0FBQSxRQUFRLE9BQU87QUFFdEgsU0FBU0MsY0FBYyxRQUFRLDJDQUEyQztBQUMxRSxTQUFTQyxXQUFXLFFBQVEscUNBQXFDO0FBQ2pFLFNBQVNDLHNCQUFz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
|