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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
  3. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +117 -0
  4. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +31 -101
  5. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +91 -0
  6. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +49 -140
  7. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +257 -0
  8. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -205
  9. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
  10. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
  11. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
  12. package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
  13. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
  14. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
  15. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +59 -0
  16. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -57
  17. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
  18. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +184 -0
  19. package/lib/components/atoms/MAIAInput/MAIAInput.js +127 -176
  20. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +96 -0
  21. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -113
  22. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
  23. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
  24. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +3 -4
  25. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +3 -11
  26. package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
  27. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +2 -3
  28. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
  29. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
  30. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
  31. package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
  32. package/lib/components/atoms/TextArea/TextArea.js +11 -20
  33. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
  34. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +6 -29
  35. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +68 -0
  36. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +17 -56
  37. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +133 -0
  38. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +31 -112
  39. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
  40. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
  41. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
  42. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +197 -233
  43. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +398 -0
  44. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +209 -235
  45. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +515 -4
  46. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +228 -344
  47. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
  48. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
  49. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +49 -0
  50. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +36 -33
  51. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
  52. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
  53. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
  54. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
  55. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
  56. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
  57. package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
  58. package/lib/components/molecules/Sidebar/Sidebar.js +25 -22
  59. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +512 -0
  60. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +309 -643
  61. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
  62. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
  63. package/lib/constants/formatExtensions.js +7 -8
  64. package/lib/dev/DevReasoningTimeline.js +8 -50
  65. package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
  66. package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
  67. package/lib/hooks/useChatManager/useChatManager.helpers.js +902 -0
  68. package/lib/hooks/useChatManager/useChatManager.js +267 -741
  69. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +365 -0
  70. package/lib/hooks/useChatMessages/useChatMessages.js +59 -285
  71. package/lib/hooks/useClientSearch.helpers.js +36 -0
  72. package/lib/hooks/useClientSearch.js +4 -32
  73. package/lib/hooks/useContextMentions.helpers.js +212 -0
  74. package/lib/hooks/useContextMentions.js +5 -223
  75. package/lib/hooks/useContextMentions.types.js +2 -0
  76. package/lib/hooks/useContextPinPopover.helpers.js +95 -0
  77. package/lib/hooks/useContextPinPopover.js +16 -75
  78. package/lib/hooks/useEntitySearch.helpers.js +407 -0
  79. package/lib/hooks/useEntitySearch.js +52 -436
  80. package/lib/hooks/useMentionPopover.helpers.js +41 -0
  81. package/lib/hooks/useMentionPopover.js +9 -35
  82. package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
  83. package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
  84. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
  85. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
  86. package/lib/hooks/useProjectSearch.helpers.js +61 -0
  87. package/lib/hooks/useProjectSearch.js +4 -58
  88. package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
  89. package/lib/hooks/useProjectSummaryConfig.js +14 -52
  90. package/lib/hooks/useReasoningTrace/reasoningStore.js +8 -39
  91. package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
  92. package/lib/hooks/useRecentClientsSearch.js +4 -32
  93. package/lib/lang/br/index.js +1 -7
  94. package/lib/lang/en/index.js +1 -7
  95. package/lib/lang/es/index.js +1 -7
  96. package/lib/lang/fr/index.js +1 -7
  97. package/lib/services/maia/Agents/getAgents.helpers.js +241 -0
  98. package/lib/services/maia/Agents/getAgents.js +90 -282
  99. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
  100. package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
  101. package/lib/services/utils/mapChatMessages.helpers.js +223 -0
  102. package/lib/services/utils/mapChatMessages.js +25 -254
  103. package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
  104. package/lib/store/sessions/sessionNotifications.js +35 -41
  105. package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
  106. package/lib/store/sessions/sessionStreamManager.js +172 -236
  107. package/lib/test/mockSseStream.js +121 -0
  108. package/lib/test/streamdownCodeMock.js +6 -0
  109. package/lib/test/streamdownMock.js +12 -0
  110. package/lib/types/Chat.js +1 -1
  111. package/lib/types/agentModal.js +1 -1
  112. package/lib/types/reasoning.js +1 -1
  113. package/lib/utils/imagePreprocessor.helpers.js +28 -0
  114. package/lib/utils/imagePreprocessor.js +12 -37
  115. package/lib/utils/renderContextMentions.helpers.js +110 -0
  116. package/lib/utils/renderContextMentions.js +4 -110
  117. package/lib/utils/streamActivityMessages.helpers.js +222 -0
  118. package/lib/utils/streamActivityMessages.js +4 -221
  119. package/package.json +2 -2
  120. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +0 -53
  121. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +0 -8
  122. package/lib/components/atoms/ContextCompactedNotice/index.js +0 -2
  123. package/lib/types/contextCompaction.js +0 -48
  124. package/lib/types/jest-dom.d.js +0 -2
@@ -0,0 +1,39 @@
1
+ export var normalizeAgentIntroText = function normalizeAgentIntroText(value) {
2
+ if (Array.isArray(value)) return value[0] || '';
3
+ return value || '';
4
+ };
5
+ export var getAgentCreatedAtLabel = function getAgentCreatedAtLabel(agent, labels, nowMs) {
6
+ var createdAt = agent.created_at;
7
+ if (!createdAt) return '';
8
+ var createdAtDate = new Date(createdAt);
9
+ if (Number.isNaN(createdAtDate.getTime())) return '';
10
+ var diffMs = nowMs - createdAtDate.getTime();
11
+ var dayMs = 1000 * 60 * 60 * 24;
12
+ var days = Math.max(0, Math.floor(diffMs / dayMs));
13
+ if (days === 0) return labels.today;
14
+ if (days === 1) return labels.oneDayAgo;
15
+ return labels.daysAgo(days);
16
+ };
17
+ export var shouldLoadMoreAgentsOnScroll = function shouldLoadMoreAgentsOnScroll(params) {
18
+ var _params$thresholdPx;
19
+ if (!params.hasMoreAgents || params.loadingMoreAgents) return false;
20
+ var threshold = (_params$thresholdPx = params.thresholdPx) !== null && _params$thresholdPx !== void 0 ? _params$thresholdPx : 40;
21
+ return params.scrollTop + params.clientHeight >= params.scrollHeight - threshold;
22
+ };
23
+ export var shouldAutoLoadMoreAgents = function shouldAutoLoadMoreAgents(params) {
24
+ if (!params.hasMoreAgents || params.loadingMoreAgents) return false;
25
+ return params.scrollHeight <= params.clientHeight + 1;
26
+ };
27
+ export var buildAgentDeleteModalChat = function buildAgentDeleteModalChat(agent) {
28
+ return agent ? {
29
+ title: agent.name,
30
+ id: agent.id
31
+ } : null;
32
+ };
33
+ export var shouldUseMaiakerEmptyStateAction = function shouldUseMaiakerEmptyStateAction(multiAgentsEnabled, onGoToMaiaker) {
34
+ return multiAgentsEnabled && typeof onGoToMaiaker === 'function';
35
+ };
36
+ export var shouldDebounceAgentSearch = function shouldDebounceAgentSearch(query) {
37
+ return query === '' || query.length >= 3;
38
+ };
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVBZ2VudEludHJvVGV4dCIsInZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0QWdlbnRDcmVhdGVkQXRMYWJlbCIsImFnZW50IiwibGFiZWxzIiwibm93TXMiLCJjcmVhdGVkQXQiLCJjcmVhdGVkX2F0IiwiY3JlYXRlZEF0RGF0ZSIsIkRhdGUiLCJOdW1iZXIiLCJpc05hTiIsImdldFRpbWUiLCJkaWZmTXMiLCJkYXlNcyIsImRheXMiLCJNYXRoIiwibWF4IiwiZmxvb3IiLCJ0b2RheSIsIm9uZURheUFnbyIsImRheXNBZ28iLCJzaG91bGRMb2FkTW9yZUFnZW50c09uU2Nyb2xsIiwicGFyYW1zIiwiX3BhcmFtcyR0aHJlc2hvbGRQeCIsImhhc01vcmVBZ2VudHMiLCJsb2FkaW5nTW9yZUFnZW50cyIsInRocmVzaG9sZCIsInRocmVzaG9sZFB4Iiwic2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0Iiwic2hvdWxkQXV0b0xvYWRNb3JlQWdlbnRzIiwiYnVpbGRBZ2VudERlbGV0ZU1vZGFsQ2hhdCIsInRpdGxlIiwibmFtZSIsImlkIiwic2hvdWxkVXNlTWFpYWtlckVtcHR5U3RhdGVBY3Rpb24iLCJtdWx0aUFnZW50c0VuYWJsZWQiLCJvbkdvVG9NYWlha2VyIiwic2hvdWxkRGVib3VuY2VBZ2VudFNlYXJjaCIsInF1ZXJ5IiwibGVuZ3RoIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU15QWdlbnRzL0NoYXRBSU15QWdlbnRzLmhlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplQWdlbnRJbnRyb1RleHQgPSAodmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwpOiBzdHJpbmcgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZVswXSB8fCAnJ1xuICByZXR1cm4gdmFsdWUgfHwgJydcbn1cblxuZXhwb3J0IHR5cGUgQWdlbnRDcmVhdGVkQXRMYWJlbHMgPSB7XG4gIHRvZGF5OiBzdHJpbmdcbiAgb25lRGF5QWdvOiBzdHJpbmdcbiAgZGF5c0FnbzogKGRheXM6IG51bWJlcikgPT4gc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBnZXRBZ2VudENyZWF0ZWRBdExhYmVsID0gKGFnZW50OiBBZ2VudCwgbGFiZWxzOiBBZ2VudENyZWF0ZWRBdExhYmVscywgbm93TXM6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNyZWF0ZWRBdCA9IChhZ2VudCBhcyBBZ2VudCAmIHsgY3JlYXRlZF9hdD86IHN0cmluZyB9KS5jcmVhdGVkX2F0XG4gIGlmICghY3JlYXRlZEF0KSByZXR1cm4gJydcblxuICBjb25zdCBjcmVhdGVkQXREYXRlID0gbmV3IERhdGUoY3JlYXRlZEF0KVxuICBpZiAoTnVtYmVyLmlzTmFOKGNyZWF0ZWRBdERhdGUuZ2V0VGltZSgpKSkgcmV0dXJuICcnXG5cbiAgY29uc3QgZGlmZk1zID0gbm93TXMgLSBjcmVhdGVkQXREYXRlLmdldFRpbWUoKVxuICBjb25zdCBkYXlNcyA9IDEwMDAgKiA2MCAqIDYwICogMjRcbiAgY29uc3QgZGF5cyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoZGlmZk1zIC8gZGF5TXMpKVxuXG4gIGlmIChkYXlzID09PSAwKSByZXR1cm4gbGFiZWxzLnRvZGF5XG4gIGlmIChkYXlzID09PSAxKSByZXR1cm4gbGFiZWxzLm9uZURheUFnb1xuICByZXR1cm4gbGFiZWxzLmRheXNBZ28oZGF5cylcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZExvYWRNb3JlQWdlbnRzT25TY3JvbGwgPSAocGFyYW1zOiB7XG4gIHNjcm9sbFRvcDogbnVtYmVyXG4gIGNsaWVudEhlaWdodDogbnVtYmVyXG4gIHNjcm9sbEhlaWdodDogbnVtYmVyXG4gIGhhc01vcmVBZ2VudHM6IGJvb2xlYW5cbiAgbG9hZGluZ01vcmVBZ2VudHM6IGJvb2xlYW5cbiAgdGhyZXNob2xkUHg/OiBudW1iZXJcbn0pOiBib29sZWFuID0+IHtcbiAgaWYgKCFwYXJhbXMuaGFzTW9yZUFnZW50cyB8fCBwYXJhbXMubG9hZGluZ01vcmVBZ2VudHMpIHJldHVybiBmYWxzZVxuICBjb25zdCB0aHJlc2hvbGQgPSBwYXJhbXMudGhyZXNob2xkUHggPz8gNDBcbiAgcmV0dXJuIHBhcmFtcy5zY3JvbGxUb3AgKyBwYXJhbXMuY2xpZW50SGVpZ2h0ID49IHBhcmFtcy5zY3JvbGxIZWlnaHQgLSB0aHJlc2hvbGRcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZEF1dG9Mb2FkTW9yZUFnZW50cyA9IChwYXJhbXM6IHtcbiAgc2Nyb2xsSGVpZ2h0OiBudW1iZXJcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXJcbiAgaGFzTW9yZUFnZW50czogYm9vbGVhblxuICBsb2FkaW5nTW9yZUFnZW50czogYm9vbGVhblxufSk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXBhcmFtcy5oYXNNb3JlQWdlbnRzIHx8IHBhcmFtcy5sb2FkaW5nTW9yZUFnZW50cykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBwYXJhbXMuc2Nyb2xsSGVpZ2h0IDw9IHBhcmFtcy5jbGllbnRIZWlnaHQgKyAxXG59XG5cbmV4cG9ydCBjb25zdCBidWlsZEFnZW50RGVsZXRlTW9kYWxDaGF0ID0gKGFnZW50OiBBZ2VudCB8IG51bGwpOiB7IHRpdGxlOiBzdHJpbmc7IGlkOiBzdHJpbmcgfSB8IG51bGwgPT5cbiAgYWdlbnQgPyB7IHRpdGxlOiBhZ2VudC5uYW1lLCBpZDogYWdlbnQuaWQgfSA6IG51bGxcblxuZXhwb3J0IGNvbnN0IHNob3VsZFVzZU1haWFrZXJFbXB0eVN0YXRlQWN0aW9uID0gKFxuICBtdWx0aUFnZW50c0VuYWJsZWQ6IGJvb2xlYW4sXG4gIG9uR29Ub01haWFrZXI6ICgoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gPT4gbXVsdGlBZ2VudHNFbmFibGVkICYmIHR5cGVvZiBvbkdvVG9NYWlha2VyID09PSAnZnVuY3Rpb24nXG5cbmV4cG9ydCBjb25zdCBzaG91bGREZWJvdW5jZUFnZW50U2VhcmNoID0gKHF1ZXJ5OiBzdHJpbmcpOiBib29sZWFuID0+IHF1ZXJ5ID09PSAnJyB8fCBxdWVyeS5sZW5ndGggPj0gM1xuIl0sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLElBQU1BLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQUlDLEtBQWdDLEVBQWE7RUFDbkYsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNGLEtBQUssQ0FBQyxFQUFFLE9BQU9BLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO0VBQy9DLE9BQU9BLEtBQUssSUFBSSxFQUFFO0FBQ3BCLENBQUM7QUFRRCxPQUFPLElBQU1HLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUlDLEtBQVksRUFBRUMsTUFBNEIsRUFBRUMsS0FBYSxFQUFhO0VBQzNHLElBQU1DLFNBQVMsR0FBSUgsS0FBSyxDQUFxQ0ksVUFBVTtFQUN2RSxJQUFJLENBQUNELFNBQVMsRUFBRSxPQUFPLEVBQUU7RUFFekIsSUFBTUUsYUFBYSxHQUFHLElBQUlDLElBQUksQ0FBQ0gsU0FBUyxDQUFDO0VBQ3pDLElBQUlJLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDSCxhQUFhLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUU7RUFFcEQsSUFBTUMsTUFBTSxHQUFHUixLQUFLLEdBQUdHLGFBQWEsQ0FBQ0ksT0FBTyxDQUFDLENBQUM7RUFDOUMsSUFBTUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDakMsSUFBTUMsSUFBSSxHQUFHQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEVBQUVELElBQUksQ0FBQ0UsS0FBSyxDQUFDTCxNQUFNLEdBQUdDLEtBQUssQ0FBQyxDQUFDO0VBRXBELElBQUlDLElBQUksS0FBSyxDQUFDLEVBQUUsT0FBT1gsTUFBTSxDQUFDZSxLQUFLO0VBQ25DLElBQUlKLElBQUksS0FBSyxDQUFDLEVBQUUsT0FBT1gsTUFBTSxDQUFDZ0IsU0FBUztFQUN2QyxPQUFPaEIsTUFBTSxDQUFDaUIsT0FBTyxDQUFDTixJQUFJLENBQUM7QUFDN0IsQ0FBQztBQUVELE9BQU8sSUFBTU8sNEJBQTRCLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FBSUMsTUFPNUMsRUFBYztFQUFBLElBQUFDLG1CQUFBO0VBQ2IsSUFBSSxDQUFDRCxNQUFNLENBQUNFLGFBQWEsSUFBSUYsTUFBTSxDQUFDRyxpQkFBaUIsRUFBRSxPQUFPLEtBQUs7RUFDbkUsSUFBTUMsU0FBUyxJQUFBSCxtQkFBQSxHQUFHRCxNQUFNLENBQUNLLFdBQVcsY0FBQUosbUJBQUEsY0FBQUEsbUJBQUEsR0FBSSxFQUFFO0VBQzFDLE9BQU9ELE1BQU0sQ0FBQ00sU0FBUyxHQUFHTixNQUFNLENBQUNPLFlBQVksSUFBSVAsTUFBTSxDQUFDUSxZQUFZLEdBQUdKLFNBQVM7QUFDbEYsQ0FBQztBQUVELE9BQU8sSUFBTUssd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBSVQsTUFLeEMsRUFBYztFQUNiLElBQUksQ0FBQ0EsTUFBTSxDQUFDRSxhQUFhLElBQUlGLE1BQU0sQ0FBQ0csaUJBQWlCLEVBQUUsT0FBTyxLQUFLO0VBQ25FLE9BQU9ILE1BQU0sQ0FBQ1EsWUFBWSxJQUFJUixNQUFNLENBQUNPLFlBQVksR0FBRyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxPQUFPLElBQU1HLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBeUJBLENBQUk5QixLQUFtQjtFQUFBLE9BQzNEQSxLQUFLLEdBQUc7SUFBRStCLEtBQUssRUFBRS9CLEtBQUssQ0FBQ2dDLElBQUk7SUFBRUMsRUFBRSxFQUFFakMsS0FBSyxDQUFDaUM7RUFBRyxDQUFDLEdBQUcsSUFBSTtBQUFBO0FBRXBELE9BQU8sSUFBTUMsZ0NBQWdDLEdBQUcsU0FBbkNBLGdDQUFnQ0EsQ0FDM0NDLGtCQUEyQixFQUMzQkMsYUFBdUQ7RUFBQSxPQUMzQ0Qsa0JBQWtCLElBQUksT0FBT0MsYUFBYSxLQUFLLFVBQVU7QUFBQTtBQUV2RSxPQUFPLElBQU1DLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBeUJBLENBQUlDLEtBQWE7RUFBQSxPQUFjQSxLQUFLLEtBQUssRUFBRSxJQUFJQSxLQUFLLENBQUNDLE1BQU0sSUFBSSxDQUFDO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -20,6 +20,7 @@ import { useToggleFavorite } from '../../../hooks';
20
20
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
21
21
  import { SCMABody, SCMACardBody, SCMACardButton, SCMACardFooter, SCMACardHeader, SCMACardTopRow, SCMACardIntroText, SCMACardMenu, SCMACardMenuItem, SCMACardMenuItems, SCMAFavoriteButton, SCMAFavoriteStarWrap, SCMACardFooterDate, SCMACardTitleEmoji, SCMACardTitleName, SCMACardsOuter, SCMACardsRow, SCMAEmptyStateRoot, SCMAEmptyStateColumn, SCMAEmptyStateTitleBlock, SCMAEmptyStateTitle, SCMAEmptyStateSubtitle, SCMAEmptyStateButton, SCMAKebabButton, SCMALoadMoreWrapper, SCMALogoContainer, SCMAMyAgentsContainer, SCMATitle, SCMATitleInner, SCMATitleWrap, SCMACardSkeletonItem, SCMASearchWrapper, SCMASearchInput, SCMASearchHint, SCMASearchNoResults, SCMASearchNoResultsTitle, SCMASearchNoResultsSubtitle } from './ChatAIMyAgents.styles';
22
22
  import { MAIAIsologo } from '../../atoms/icons';
23
+ import { buildAgentDeleteModalChat, getAgentCreatedAtLabel, normalizeAgentIntroText, shouldAutoLoadMoreAgents, shouldDebounceAgentSearch, shouldLoadMoreAgentsOnScroll, shouldUseMaiakerEmptyStateAction } from './ChatAIMyAgents.helpers';
23
24
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
24
25
  var AgentSearchInput = /*#__PURE__*/React.memo(function (_ref) {
25
26
  var onSearch = _ref.onSearch,
@@ -36,7 +37,7 @@ var AgentSearchInput = /*#__PURE__*/React.memo(function (_ref) {
36
37
  setValue(val);
37
38
  if (debounceRef.current) clearTimeout(debounceRef.current);
38
39
  debounceRef.current = setTimeout(function () {
39
- if (val === '' || val.length >= 3) onSearch(val);
40
+ if (shouldDebounceAgentSearch(val)) onSearch(val);
40
41
  }, 350);
41
42
  }, [onSearch]);
42
43
  useEffect(function () {
@@ -128,24 +129,18 @@ export var ChatAIMyAgents = function ChatAIMyAgents(_ref2) {
128
129
  }));
129
130
  }, [eventAmplitude]);
130
131
  var handleEmptyStatePrimaryAction = useCallback(function () {
131
- var useMarketplace = !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS && typeof onGoToMaiaker === 'function';
132
- if (useMarketplace) {
133
- onGoToMaiaker();
132
+ if (shouldUseMaiakerEmptyStateAction(!!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS, onGoToMaiaker)) {
133
+ onGoToMaiaker === null || onGoToMaiaker === void 0 || onGoToMaiaker();
134
134
  return;
135
135
  }
136
136
  openCreateAgentModal();
137
137
  }, [onGoToMaiaker, openCreateAgentModal]);
138
138
  var handleLoadMore = function handleLoadMore() {
139
- if (!onLoadMoreAgents || !hasMoreAgents || loadingMoreAgents) {
140
- return;
141
- }
139
+ if (!onLoadMoreAgents) return;
142
140
  onLoadMoreAgents();
143
141
  };
144
142
  var deleteModalChat = useMemo(function () {
145
- return agentToDelete ? {
146
- title: agentToDelete.name,
147
- id: agentToDelete.id
148
- } : null;
143
+ return buildAgentDeleteModalChat(agentToDelete);
149
144
  }, [agentToDelete]);
150
145
  var handleUseAgent = function handleUseAgent(agent) {
151
146
  setProject(null);
@@ -154,23 +149,16 @@ export var ChatAIMyAgents = function ChatAIMyAgents(_ref2) {
154
149
  selectAgent(agent);
155
150
  onBack();
156
151
  };
157
- var normalizeText = function normalizeText(value) {
158
- if (Array.isArray(value)) return value[0] || '';
159
- return value || '';
160
- };
161
152
  var getCreatedAtLabel = function getCreatedAtLabel(agent) {
162
- var createdAt = agent.created_at;
163
- if (!createdAt) return '';
164
- var createdAtDate = new Date(createdAt);
165
- if (Number.isNaN(createdAtDate.getTime())) return '';
166
- var diffMs = Date.now() - createdAtDate.getTime();
167
- var dayMs = 1000 * 60 * 60 * 24;
168
- var days = Math.max(0, Math.floor(diffMs / dayMs));
169
- if (days === 0) return t('marketplace.myAgentsToday');
170
- if (days === 1) return t('marketplace.myAgentsOneDayAgo');
171
- return t('marketplace.myAgentsDaysAgo', {
172
- days: days
173
- });
153
+ return getAgentCreatedAtLabel(agent, {
154
+ today: t('marketplace.myAgentsToday'),
155
+ oneDayAgo: t('marketplace.myAgentsOneDayAgo'),
156
+ daysAgo: function daysAgo(days) {
157
+ return t('marketplace.myAgentsDaysAgo', {
158
+ days: days
159
+ });
160
+ }
161
+ }, Date.now());
174
162
  };
175
163
  var handleOpenEditAgent = function handleOpenEditAgent(agent) {
176
164
  document.dispatchEvent(new CustomEvent('abm-agent-modal-set-values', {
@@ -248,12 +236,16 @@ export var ChatAIMyAgents = function ChatAIMyAgents(_ref2) {
248
236
  return undefined;
249
237
  }
250
238
  var onScroll = function onScroll() {
251
- if (!hasMoreAgents || loadingMoreAgents) return;
252
239
  var scrollTop = container.scrollTop,
253
240
  clientHeight = container.clientHeight,
254
241
  scrollHeight = container.scrollHeight;
255
- var nearBottom = scrollTop + clientHeight >= scrollHeight - 40;
256
- if (nearBottom) {
242
+ if (shouldLoadMoreAgentsOnScroll({
243
+ scrollTop: scrollTop,
244
+ clientHeight: clientHeight,
245
+ scrollHeight: scrollHeight,
246
+ hasMoreAgents: hasMoreAgents,
247
+ loadingMoreAgents: loadingMoreAgents
248
+ })) {
257
249
  handleLoadMore();
258
250
  }
259
251
  };
@@ -267,7 +259,12 @@ export var ChatAIMyAgents = function ChatAIMyAgents(_ref2) {
267
259
  if (!container || !hasMoreAgents || loadingMoreAgents) {
268
260
  return undefined;
269
261
  }
270
- if (container.scrollHeight <= container.clientHeight + 1) {
262
+ if (shouldAutoLoadMoreAgents({
263
+ scrollHeight: container.scrollHeight,
264
+ clientHeight: container.clientHeight,
265
+ hasMoreAgents: hasMoreAgents,
266
+ loadingMoreAgents: loadingMoreAgents
267
+ })) {
271
268
  handleLoadMore();
272
269
  }
273
270
  return undefined;
@@ -361,7 +358,7 @@ export var ChatAIMyAgents = function ChatAIMyAgents(_ref2) {
361
358
  })]
362
359
  }), /*#__PURE__*/_jsxs(SCMACardBody, {
363
360
  children: [/*#__PURE__*/_jsx(SCMACardIntroText, {
364
- children: normalizeText(agent.introduction)
361
+ children: normalizeAgentIntroText(agent.introduction)
365
362
  }), /*#__PURE__*/_jsxs(SCMACardFooter, {
366
363
  children: [/*#__PURE__*/_jsx(SCMACardFooterDate, {
367
364
  children: getCreatedAtLabel(agent) || t('marketplace.myAgentsFallbackDate')
@@ -454,4 +451,4 @@ export var ChatAIMyAgents = function ChatAIMyAgents(_ref2) {
454
451
  }) : null]
455
452
  });
456
453
  };
457
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZiIsInVzZVN0YXRlIiwiTWVudURvdHMiLCJTZWFyY2giLCJTdGFyIiwiVG9vbHRpcCIsInVzZVRyYW5zbGF0aW9uIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVzZXIiLCJkZWxldGVBZ2VudCIsInVzZVNuYWNrQmFyTWFuYWdlciIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJTRUNUSU9OUyIsIkxvYWRlciIsIkZhZGUiLCJTa2VsZXRvbiIsInVzZVRvZ2dsZUZhdm9yaXRlIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJTQ01BQm9keSIsIlNDTUFDYXJkQm9keSIsIlNDTUFDYXJkQnV0dG9uIiwiU0NNQUNhcmRGb290ZXIiLCJTQ01BQ2FyZEhlYWRlciIsIlNDTUFDYXJkVG9wUm93IiwiU0NNQUNhcmRJbnRyb1RleHQiLCJTQ01BQ2FyZE1lbnUiLCJTQ01BQ2FyZE1lbnVJdGVtIiwiU0NNQUNhcmRNZW51SXRlbXMiLCJTQ01BRmF2b3JpdGVCdXR0b24iLCJTQ01BRmF2b3JpdGVTdGFyV3JhcCIsIlNDTUFDYXJkRm9vdGVyRGF0ZSIsIlNDTUFDYXJkVGl0bGVFbW9qaSIsIlNDTUFDYXJkVGl0bGVOYW1lIiwiU0NNQUNhcmRzT3V0ZXIiLCJTQ01BQ2FyZHNSb3ciLCJTQ01BRW1wdHlTdGF0ZVJvb3QiLCJTQ01BRW1wdHlTdGF0ZUNvbHVtbiIsIlNDTUFFbXB0eVN0YXRlVGl0bGVCbG9jayIsIlNDTUFFbXB0eVN0YXRlVGl0bGUiLCJTQ01BRW1wdHlTdGF0ZVN1YnRpdGxlIiwiU0NNQUVtcHR5U3RhdGVCdXR0b24iLCJTQ01BS2ViYWJCdXR0b24iLCJTQ01BTG9hZE1vcmVXcmFwcGVyIiwiU0NNQUxvZ29Db250YWluZXIiLCJTQ01BTXlBZ2VudHNDb250YWluZXIiLCJTQ01BVGl0bGUiLCJTQ01BVGl0bGVJbm5lciIsIlNDTUFUaXRsZVdyYXAiLCJTQ01BQ2FyZFNrZWxldG9uSXRlbSIsIlNDTUFTZWFyY2hXcmFwcGVyIiwiU0NNQVNlYXJjaElucHV0IiwiU0NNQVNlYXJjaEhpbnQiLCJTQ01BU2VhcmNoTm9SZXN1bHRzIiwiU0NNQVNlYXJjaE5vUmVzdWx0c1RpdGxlIiwiU0NNQVNlYXJjaE5vUmVzdWx0c1N1YnRpdGxlIiwiTUFJQUlzb2xvZ28iLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiQWdlbnRTZWFyY2hJbnB1dCIsIm1lbW8iLCJfcmVmIiwib25TZWFyY2giLCJwbGFjZWhvbGRlciIsImhpbnQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWx1ZSIsInNldFZhbHVlIiwiZGVib3VuY2VSZWYiLCJzaG93SGludCIsImxlbmd0aCIsImhhbmRsZUNoYW5nZSIsImUiLCJ2YWwiLCJ0YXJnZXQiLCJjdXJyZW50IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImNoaWxkcmVuIiwid2lkdGgiLCJoZWlnaHQiLCJjb2xvciIsInR5cGUiLCJvbkNoYW5nZSIsIkNoYXRBSU15QWdlbnRzIiwiX3JlZjIiLCJfdXNlciRwZXJtaXNzaW9ucyIsIm9uQmFjayIsImFnZW50cyIsIm9uRGVsZXRlQWdlbnQiLCJvbkZhdm9yaXRlQWdlbnRVcGRhdGUiLCJfcmVmMiRoYXNNb3JlQWdlbnRzIiwiaGFzTW9yZUFnZW50cyIsIl9yZWYyJGxvYWRpbmdNb3JlQWdlbiIsImxvYWRpbmdNb3JlQWdlbnRzIiwib25Mb2FkTW9yZUFnZW50cyIsIm9uR29Ub01haWFrZXIiLCJvblNlYXJjaEFnZW50cyIsIl9yZWYyJHNlYXJjaExvYWRpbmdBZyIsInNlYXJjaExvYWRpbmdBZ2VudHMiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJhYm1BZ2VudCIsInQiLCJ1c2VyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RBZ2VudCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJzZXRUYXNrIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJjdXN0b21BZ2VudHMiLCJmaWx0ZXIiLCJhZ2VudCIsImlzX2RlbGV0ZWQiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsIm1lbnVPcGVuRm9yQWdlbnRJZCIsInNldE1lbnVPcGVuRm9yQWdlbnRJZCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiYWdlbnRUb0RlbGV0ZSIsInNldEFnZW50VG9EZWxldGUiLCJ1c2VyUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNhbkNyZWF0ZUFnZW50IiwiY3JlYXRlIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImNhbkVkaXQiLCJlZGl0IiwiY2FuRGVsZXRlIiwiY2FuU2hvd01lbnUiLCJfdXNlVG9nZ2xlRmF2b3JpdGUiLCJ0b2dnbGVGYXZvcml0ZSIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJpc1NlYXJjaEFjdGl2ZSIsInNldElzU2VhcmNoQWN0aXZlIiwiaGFuZGxlU2VhcmNoQWdlbnRzIiwicXVlcnkiLCJvcGVuQ3JlYXRlQWdlbnRNb2RhbCIsIm9wZW5Nb2RhbCIsIm9wdGlvbiIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiYWdlbnRWYWx1ZXMiLCJ2YWx1ZXMiLCJpc0VkaXRpbmciLCJpc09wZW4iLCJoYW5kbGVFbXB0eVN0YXRlUHJpbWFyeUFjdGlvbiIsInVzZU1hcmtldHBsYWNlIiwiaGFuZGxlTG9hZE1vcmUiLCJkZWxldGVNb2RhbENoYXQiLCJ0aXRsZSIsIm5hbWUiLCJpZCIsImhhbmRsZVVzZUFnZW50Iiwibm9ybWFsaXplVGV4dCIsIkFycmF5IiwiaXNBcnJheSIsImdldENyZWF0ZWRBdExhYmVsIiwiY3JlYXRlZEF0IiwiY3JlYXRlZF9hdCIsImNyZWF0ZWRBdERhdGUiLCJEYXRlIiwiTnVtYmVyIiwiaXNOYU4iLCJnZXRUaW1lIiwiZGlmZk1zIiwibm93IiwiZGF5TXMiLCJkYXlzIiwiTWF0aCIsIm1heCIsImZsb29yIiwiaGFuZGxlT3BlbkVkaXRBZ2VudCIsImtub3dsZWRnZSIsImdlbmVyYWwiLCJoYW5kbGVUb2dnbGVGYXZvcml0ZSIsImV2ZW50IiwiaXNGYXZvcml0ZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwidXBkYXRlZEFnZW50IiwidW5kZWZpbmVkIiwiaGFuZGxlQ29uZmlybURlbGV0ZSIsIl9yZWYzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJjaGF0IiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIm5zIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVDbGlja091dHNpZGUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNvbnRhaW5lciIsImdldEVsZW1lbnRCeUlkIiwib25TY3JvbGwiLCJzY3JvbGxUb3AiLCJjbGllbnRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJuZWFyQm90dG9tIiwiJGhhc0FnZW50cyIsIiRjYW5DcmVhdGVBZ2VudCIsImZyb20iLCJtYXAiLCJfIiwiaSIsInZhcmlhbnQiLCJpbmRleCIsIl9hZ2VudCRlbW9qaSIsIiRpbmRleCIsIm9uQ2xpY2siLCJlbW9qaSIsInRyaW0iLCJpbnRyb2R1Y3Rpb24iLCJpc19mYXZvcml0ZSIsIiRhbHdheXNWaXNpYmxlIiwiZmlsbCIsImNsYXNzTmFtZSIsInNpemUiLCJvbkNsb3NlIiwiaGFuZGxlcnMiLCJoYW5kbGVDb25maXJtQWN0aW9uIiwiYWN0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU15QWdlbnRzL0NoYXRBSU15QWdlbnRzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgTWVudURvdHMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9NZW51RG90cydcbmltcG9ydCB7IFNlYXJjaCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1NlYXJjaCdcbmltcG9ydCB7IFN0YXIgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9TdGFyJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBkZWxldGVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2RlbGV0ZUFnZW50J1xuaW1wb3J0IHsgdXNlU25hY2tCYXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU25hY2tCYXJNYW5hZ2VyL3VzZVNuYWNrQmFyTWFuYWdlcidcbmltcG9ydCB7IERlbGV0ZVF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvRGVsZXRlUXVlc3Rpb25Nb2RhbC9EZWxldGVRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRmFkZSB9IGZyb20gJy4uLy4uL2F0b21zL0ZhZGUnXG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJy4uLy4uL2F0b21zL1NrZWxldG9uL1NrZWxldG9uJ1xuaW1wb3J0IHsgdXNlVG9nZ2xlRmF2b3JpdGUgfSBmcm9tICcuLi8uLi8uLi9ob29rcydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7XG4gIFNDTUFCb2R5LFxuICBTQ01BQ2FyZEJvZHksXG4gIFNDTUFDYXJkQnV0dG9uLFxuICBTQ01BQ2FyZEZvb3RlcixcbiAgU0NNQUNhcmRIZWFkZXIsXG4gIFNDTUFDYXJkVG9wUm93LFxuICBTQ01BQ2FyZEludHJvVGV4dCxcbiAgU0NNQUNhcmRNZW51LFxuICBTQ01BQ2FyZE1lbnVJdGVtLFxuICBTQ01BQ2FyZE1lbnVJdGVtcyxcbiAgU0NNQUZhdm9yaXRlQnV0dG9uLFxuICBTQ01BRmF2b3JpdGVTdGFyV3JhcCxcbiAgU0NNQUNhcmRGb290ZXJEYXRlLFxuICBTQ01BQ2FyZFRpdGxlRW1vamksXG4gIFNDTUFDYXJkVGl0bGVOYW1lLFxuICBTQ01BQ2FyZHNPdXRlcixcbiAgU0NNQUNhcmRzUm93LFxuICBTQ01BRW1wdHlTdGF0ZVJvb3QsXG4gIFNDTUFFbXB0eVN0YXRlQ29sdW1uLFxuICBTQ01BRW1wdHlTdGF0ZVRpdGxlQmxvY2ssXG4gIFNDTUFFbXB0eVN0YXRlVGl0bGUsXG4gIFNDTUFFbXB0eVN0YXRlU3VidGl0bGUsXG4gIFNDTUFFbXB0eVN0YXRlQnV0dG9uLFxuICBTQ01BS2ViYWJCdXR0b24sXG4gIFNDTUFMb2FkTW9yZVdyYXBwZXIsXG4gIFNDTUFMb2dvQ29udGFpbmVyLFxuICBTQ01BTXlBZ2VudHNDb250YWluZXIsXG4gIFNDTUFUaXRsZSxcbiAgU0NNQVRpdGxlSW5uZXIsXG4gIFNDTUFUaXRsZVdyYXAsXG4gIFNDTUFDYXJkU2tlbGV0b25JdGVtLFxuICBTQ01BU2VhcmNoV3JhcHBlcixcbiAgU0NNQVNlYXJjaElucHV0LFxuICBTQ01BU2VhcmNoSGludCxcbiAgU0NNQVNlYXJjaE5vUmVzdWx0cyxcbiAgU0NNQVNlYXJjaE5vUmVzdWx0c1RpdGxlLFxuICBTQ01BU2VhcmNoTm9SZXN1bHRzU3VidGl0bGUsXG59IGZyb20gJy4vQ2hhdEFJTXlBZ2VudHMuc3R5bGVzJ1xuaW1wb3J0IHsgTUFJQUlzb2xvZ28gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcblxuY29uc3QgQWdlbnRTZWFyY2hJbnB1dCA9IFJlYWN0Lm1lbW8oXG4gICh7IG9uU2VhcmNoLCBwbGFjZWhvbGRlciwgaGludCB9OiB7IG9uU2VhcmNoOiAocTogc3RyaW5nKSA9PiB2b2lkOyBwbGFjZWhvbGRlcjogc3RyaW5nOyBoaW50OiBzdHJpbmcgfSkgPT4ge1xuICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoJycpXG4gICAgY29uc3QgZGVib3VuY2VSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKVxuICAgIGNvbnN0IHNob3dIaW50ID0gdmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPCAzXG5cbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICBjb25zdCB7IHZhbHVlOiB2YWwgfSA9IGUudGFyZ2V0XG4gICAgICAgIHNldFZhbHVlKHZhbClcbiAgICAgICAgaWYgKGRlYm91bmNlUmVmLmN1cnJlbnQpIGNsZWFyVGltZW91dChkZWJvdW5jZVJlZi5jdXJyZW50KVxuICAgICAgICBkZWJvdW5jZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbCA9PT0gJycgfHwgdmFsLmxlbmd0aCA+PSAzKSBvblNlYXJjaCh2YWwpXG4gICAgICAgIH0sIDM1MClcbiAgICAgIH0sXG4gICAgICBbb25TZWFyY2hdXG4gICAgKVxuXG4gICAgdXNlRWZmZWN0KFxuICAgICAgKCkgPT4gKCkgPT4ge1xuICAgICAgICBpZiAoZGVib3VuY2VSZWYuY3VycmVudCkgY2xlYXJUaW1lb3V0KGRlYm91bmNlUmVmLmN1cnJlbnQpXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDTUFTZWFyY2hXcmFwcGVyPlxuICAgICAgICA8U2VhcmNoIHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gY29sb3I9XCIjOTk5XCIgLz5cbiAgICAgICAgPFNDTUFTZWFyY2hJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPXt2YWx1ZX0gb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX0gcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfSAvPlxuICAgICAgICB7c2hvd0hpbnQgPyA8U0NNQVNlYXJjaEhpbnQ+e2hpbnR9PC9TQ01BU2VhcmNoSGludD4gOiBudWxsfVxuICAgICAgPC9TQ01BU2VhcmNoV3JhcHBlcj5cbiAgICApXG4gIH1cbilcblxudHlwZSBDaGF0QUlNeUFnZW50c1Byb3BzID0ge1xuICBvbkJhY2s6ICgpID0+IHZvaWRcbiAgYWdlbnRzOiBBZ2VudFtdXG4gIG9uRGVsZXRlQWdlbnQ/OiAoYWdlbnRJZDogc3RyaW5nKSA9PiB2b2lkXG4gIG9uRmF2b3JpdGVBZ2VudFVwZGF0ZT86IChhZ2VudDogQWdlbnQpID0+IHZvaWRcbiAgaGFzTW9yZUFnZW50cz86IGJvb2xlYW5cbiAgbG9hZGluZ01vcmVBZ2VudHM/OiBib29sZWFuXG4gIG9uTG9hZE1vcmVBZ2VudHM/OiAoKSA9PiB2b2lkXG4gIG9uR29Ub01haWFrZXI/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuICBvblNlYXJjaEFnZW50cz86IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkXG4gIHNlYXJjaExvYWRpbmdBZ2VudHM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNeUFnZW50cyA9ICh7XG4gIG9uQmFjayxcbiAgYWdlbnRzLFxuICBvbkRlbGV0ZUFnZW50LFxuICBvbkZhdm9yaXRlQWdlbnRVcGRhdGUsXG4gIGhhc01vcmVBZ2VudHMgPSBmYWxzZSxcbiAgbG9hZGluZ01vcmVBZ2VudHMgPSBmYWxzZSxcbiAgb25Mb2FkTW9yZUFnZW50cyxcbiAgb25Hb1RvTWFpYWtlcixcbiAgb25TZWFyY2hBZ2VudHMsXG4gIHNlYXJjaExvYWRpbmdBZ2VudHMgPSBmYWxzZSxcbn06IENoYXRBSU15QWdlbnRzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJLCBTRUNUSU9OUy5hYm1BZ2VudF0pXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBzZWxlY3RBZ2VudCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRUYXNrIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhclN1Y2Nlc3MsIGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG4gIGNvbnN0IGN1c3RvbUFnZW50cyA9IGFnZW50cy5maWx0ZXIoYWdlbnQgPT4gYWdlbnQudHlwZSA9PT0gJ2N1c3RvbScgJiYgIWFnZW50LmlzX2RlbGV0ZWQpXG4gIGNvbnN0IFttZW51T3BlbkZvckFnZW50SWQsIHNldE1lbnVPcGVuRm9yQWdlbnRJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbYWdlbnRUb0RlbGV0ZSwgc2V0QWdlbnRUb0RlbGV0ZV0gPSB1c2VTdGF0ZTxBZ2VudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcbiAgY29uc3QgY2FuQ3JlYXRlQWdlbnQgPSAhIXVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgY29uc3QgY2FuRWRpdCA9ICEhdXNlclBlcm1pc3Npb25zPy5lZGl0ICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgY29uc3QgY2FuRGVsZXRlID0gISF1c2VyUGVybWlzc2lvbnM/LmRlbGV0ZSAmJiAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG4gIGNvbnN0IGNhblNob3dNZW51ID0gY2FuRWRpdCB8fCBjYW5EZWxldGVcbiAgY29uc3QgeyB0b2dnbGVGYXZvcml0ZSB9ID0gdXNlVG9nZ2xlRmF2b3JpdGUoKVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgW2lzU2VhcmNoQWN0aXZlLCBzZXRJc1NlYXJjaEFjdGl2ZV0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBoYW5kbGVTZWFyY2hBZ2VudHMgPSB1c2VDYWxsYmFjayhcbiAgICAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgc2V0SXNTZWFyY2hBY3RpdmUocXVlcnkgIT09ICcnKVxuICAgICAgb25TZWFyY2hBZ2VudHM/LihxdWVyeSlcbiAgICB9LFxuICAgIFtvblNlYXJjaEFnZW50c11cbiAgKVxuXG4gIGNvbnN0IG9wZW5DcmVhdGVBZ2VudE1vZGFsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5vcGVuTW9kYWwsIHsgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyB9KVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBhZ2VudFZhbHVlczoge1xuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGlzRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIClcbiAgfSwgW2V2ZW50QW1wbGl0dWRlXSlcblxuICBjb25zdCBoYW5kbGVFbXB0eVN0YXRlUHJpbWFyeUFjdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB1c2VNYXJrZXRwbGFjZSA9ICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgdHlwZW9mIG9uR29Ub01haWFrZXIgPT09ICdmdW5jdGlvbidcbiAgICBpZiAodXNlTWFya2V0cGxhY2UpIHtcbiAgICAgIG9uR29Ub01haWFrZXIoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG9wZW5DcmVhdGVBZ2VudE1vZGFsKClcbiAgfSwgW29uR29Ub01haWFrZXIsIG9wZW5DcmVhdGVBZ2VudE1vZGFsXSlcblxuICBjb25zdCBoYW5kbGVMb2FkTW9yZSA9ICgpID0+IHtcbiAgICBpZiAoIW9uTG9hZE1vcmVBZ2VudHMgfHwgIWhhc01vcmVBZ2VudHMgfHwgbG9hZGluZ01vcmVBZ2VudHMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBvbkxvYWRNb3JlQWdlbnRzKClcbiAgfVxuXG4gIGNvbnN0IGRlbGV0ZU1vZGFsQ2hhdCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKGFnZW50VG9EZWxldGUgPyB7IHRpdGxlOiBhZ2VudFRvRGVsZXRlLm5hbWUsIGlkOiBhZ2VudFRvRGVsZXRlLmlkIH0gOiBudWxsKSxcbiAgICBbYWdlbnRUb0RlbGV0ZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVVzZUFnZW50ID0gKGFnZW50OiBBZ2VudCkgPT4ge1xuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldFRhc2sobnVsbClcbiAgICBzZWxlY3RBZ2VudChhZ2VudClcbiAgICBvbkJhY2soKVxuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplVGV4dCA9ICh2YWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlWzBdIHx8ICcnXG4gICAgcmV0dXJuIHZhbHVlIHx8ICcnXG4gIH1cblxuICBjb25zdCBnZXRDcmVhdGVkQXRMYWJlbCA9IChhZ2VudDogQWdlbnQpID0+IHtcbiAgICBjb25zdCBjcmVhdGVkQXQgPSAoYWdlbnQgYXMgQWdlbnQgJiB7IGNyZWF0ZWRfYXQ/OiBzdHJpbmcgfSkuY3JlYXRlZF9hdFxuICAgIGlmICghY3JlYXRlZEF0KSByZXR1cm4gJydcblxuICAgIGNvbnN0IGNyZWF0ZWRBdERhdGUgPSBuZXcgRGF0ZShjcmVhdGVkQXQpXG4gICAgaWYgKE51bWJlci5pc05hTihjcmVhdGVkQXREYXRlLmdldFRpbWUoKSkpIHJldHVybiAnJ1xuXG4gICAgY29uc3QgZGlmZk1zID0gRGF0ZS5ub3coKSAtIGNyZWF0ZWRBdERhdGUuZ2V0VGltZSgpXG4gICAgY29uc3QgZGF5TXMgPSAxMDAwICogNjAgKiA2MCAqIDI0XG4gICAgY29uc3QgZGF5cyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoZGlmZk1zIC8gZGF5TXMpKVxuXG4gICAgaWYgKGRheXMgPT09IDApIHJldHVybiB0KCdtYXJrZXRwbGFjZS5teUFnZW50c1RvZGF5JylcbiAgICBpZiAoZGF5cyA9PT0gMSkgcmV0dXJuIHQoJ21hcmtldHBsYWNlLm15QWdlbnRzT25lRGF5QWdvJylcbiAgICByZXR1cm4gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNEYXlzQWdvJywgeyBkYXlzIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVPcGVuRWRpdEFnZW50ID0gKGFnZW50OiBBZ2VudCkgPT4ge1xuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBhZ2VudFZhbHVlczoge1xuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGlzRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAga25vd2xlZGdlOiBhZ2VudD8ua25vd2xlZGdlIHx8IFtdLFxuICAgICAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYWdlbnQubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogYWdlbnQuaWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIClcbiAgICBzZXRNZW51T3BlbkZvckFnZW50SWQobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZUZhdm9yaXRlID0gKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PiwgYWdlbnQ6IEFnZW50LCBpc0Zhdm9yaXRlOiBib29sZWFuKSA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICB0b2dnbGVGYXZvcml0ZShcbiAgICAgIGFnZW50LmlkLFxuICAgICAgdXBkYXRlZEFnZW50ID0+IHtcbiAgICAgICAgb25GYXZvcml0ZUFnZW50VXBkYXRlPy4odXBkYXRlZEFnZW50KVxuICAgICAgfSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGlzRmF2b3JpdGVcbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVDb25maXJtRGVsZXRlID0gYXN5bmMgKGNoYXQ6IHsgaWQ6IHN0cmluZyB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZUFnZW50KGNoYXQuaWQpXG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50RGVsZXRlZCcsIHsgbnM6IFNFQ1RJT05TLmFibUFnZW50IH0pKVxuICAgICAgb25EZWxldGVBZ2VudD8uKGNoYXQuaWQpXG4gICAgICBzZXRBZ2VudFRvRGVsZXRlKG51bGwpXG4gICAgICBzZXRNZW51T3BlbkZvckFnZW50SWQobnVsbClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFnZW50Q3JlYXRlZCcsIHsgbnM6IFNFQ1RJT05TLmFibUFnZW50IH0pKVxuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKCkgPT4ge1xuICAgICAgaWYgKG1lbnVPcGVuRm9yQWdlbnRJZCkge1xuICAgICAgICBzZXRNZW51T3BlbkZvckFnZW50SWQobnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgfVxuICB9LCBbbWVudU9wZW5Gb3JBZ2VudElkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteS1hZ2VudHMtc2Nyb2xsLWNvbnRhaW5lcicpXG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBvblNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGlmICghaGFzTW9yZUFnZW50cyB8fCBsb2FkaW5nTW9yZUFnZW50cykgcmV0dXJuXG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgY2xpZW50SGVpZ2h0LCBzY3JvbGxIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgICAgY29uc3QgbmVhckJvdHRvbSA9IHNjcm9sbFRvcCArIGNsaWVudEhlaWdodCA+PSBzY3JvbGxIZWlnaHQgLSA0MFxuICAgICAgaWYgKG5lYXJCb3R0b20pIHtcbiAgICAgICAgaGFuZGxlTG9hZE1vcmUoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsKVxuICAgIH1cbiAgfSwgW2hhc01vcmVBZ2VudHMsIGxvYWRpbmdNb3JlQWdlbnRzLCBvbkxvYWRNb3JlQWdlbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteS1hZ2VudHMtc2Nyb2xsLWNvbnRhaW5lcicpXG4gICAgaWYgKCFjb250YWluZXIgfHwgIWhhc01vcmVBZ2VudHMgfHwgbG9hZGluZ01vcmVBZ2VudHMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbmVyLnNjcm9sbEhlaWdodCA8PSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMSkge1xuICAgICAgaGFuZGxlTG9hZE1vcmUoKVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0sIFtjdXN0b21BZ2VudHMubGVuZ3RoLCBoYXNNb3JlQWdlbnRzLCBsb2FkaW5nTW9yZUFnZW50cywgb25Mb2FkTW9yZUFnZW50c10pXG5cbiAgcmV0dXJuIChcbiAgICA8U0NNQU15QWdlbnRzQ29udGFpbmVyIGlkPVwibXktYWdlbnRzLXNjcm9sbC1jb250YWluZXJcIiAkaGFzQWdlbnRzPXshIWN1c3RvbUFnZW50cy5sZW5ndGggfHwgaXNTZWFyY2hBY3RpdmV9PlxuICAgICAgPFNDTUFMb2dvQ29udGFpbmVyPlxuICAgICAgICA8TUFJQUlzb2xvZ28gLz5cbiAgICAgIDwvU0NNQUxvZ29Db250YWluZXI+XG5cbiAgICAgIDxTQ01BQm9keSAkY2FuQ3JlYXRlQWdlbnQ9e2NhbkNyZWF0ZUFnZW50fT5cbiAgICAgICAge2N1c3RvbUFnZW50cy5sZW5ndGggfHwgaXNTZWFyY2hBY3RpdmUgPyAoXG4gICAgICAgICAgPFNDTUFUaXRsZVdyYXA+XG4gICAgICAgICAgICA8U0NNQVRpdGxlSW5uZXI+XG4gICAgICAgICAgICAgIDxTQ01BVGl0bGU+e3QoJ21hcmtldHBsYWNlLm15QWdlbnRzUmVhZHlUaXRsZScpfTwvU0NNQVRpdGxlPlxuICAgICAgICAgICAgPC9TQ01BVGl0bGVJbm5lcj5cbiAgICAgICAgICAgIHtvblNlYXJjaEFnZW50cyA/IChcbiAgICAgICAgICAgICAgPEFnZW50U2VhcmNoSW5wdXRcbiAgICAgICAgICAgICAgICBvblNlYXJjaD17aGFuZGxlU2VhcmNoQWdlbnRzfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdtYXJrZXRwbGFjZS5zZWFyY2hBZ2VudFBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgaGludD17dCgnbWFya2V0cGxhY2Uuc2VhcmNoTWluTGVuZ3RoJyl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1NDTUFUaXRsZVdyYXA+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIHtzZWFyY2hMb2FkaW5nQWdlbnRzID8gKFxuICAgICAgICAgIDxTQ01BQ2FyZHNPdXRlcj5cbiAgICAgICAgICAgIDxTQ01BQ2FyZHNSb3c+XG4gICAgICAgICAgICAgIHtBcnJheS5mcm9tKHsgbGVuZ3RoOiA2IH0pLm1hcCgoXywgaSkgPT4gKFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcbiAgICAgICAgICAgICAgICA8U0NNQUNhcmRTa2VsZXRvbkl0ZW0ga2V5PXtpfT5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwiY2lyY3VsYXJcIiB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+XG4gICAgICAgICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cInRleHRcIiBoZWlnaHQ9ezE0fSAvPlxuICAgICAgICAgICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJ0ZXh0XCIgaGVpZ2h0PXsxNH0gd2lkdGg9XCI3NSVcIiAvPlxuICAgICAgICAgICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJ0ZXh0XCIgaGVpZ2h0PXsxMn0gLz5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwidGV4dFwiIGhlaWdodD17MTJ9IHdpZHRoPVwiODUlXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwidGV4dFwiIGhlaWdodD17MTF9IHdpZHRoPVwiNDAlXCIgLz5cbiAgICAgICAgICAgICAgICA8L1NDTUFDYXJkU2tlbGV0b25JdGVtPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvU0NNQUNhcmRzUm93PlxuICAgICAgICAgIDwvU0NNQUNhcmRzT3V0ZXI+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7IXNlYXJjaExvYWRpbmdBZ2VudHMgJiYgY3VzdG9tQWdlbnRzLmxlbmd0aCA/IChcbiAgICAgICAgICA8U0NNQUNhcmRzT3V0ZXI+XG4gICAgICAgICAgICA8U0NNQUNhcmRzUm93PlxuICAgICAgICAgICAgICB7Y3VzdG9tQWdlbnRzLm1hcCgoYWdlbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgPFNDTUFDYXJkQnV0dG9uIGtleT17YWdlbnQuaWR9ICRpbmRleD17aW5kZXh9IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVVc2VBZ2VudChhZ2VudCl9PlxuICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRUb3BSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkVGl0bGVFbW9qaSBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthZ2VudC5lbW9qaT8udHJpbSgpID8gYWdlbnQuZW1vamkgOiAnXFx1MDBhMCd9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZFRpdGxlRW1vamk+XG4gICAgICAgICAgICAgICAgICAgICAge2NhblNob3dNZW51ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFNDTUFLZWJhYkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnbWFya2V0cGxhY2UuY2FyZE1lbnVBcmlhTGFiZWwnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1lbnVPcGVuRm9yQWdlbnRJZChwcmV2ID0+IChwcmV2ID09PSBhZ2VudC5pZCA/IG51bGwgOiBhZ2VudC5pZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxNZW51RG90cyBjb2xvcj1cIiM5OTlcIiB3aWR0aD17MTV9IGhlaWdodD17MTV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NDTUFLZWJhYkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZFRvcFJvdz5cbiAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkVGl0bGVOYW1lPnthZ2VudC5uYW1lfTwvU0NNQUNhcmRUaXRsZU5hbWU+XG4gICAgICAgICAgICAgICAgICA8L1NDTUFDYXJkSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkQm9keT5cbiAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkSW50cm9UZXh0Pntub3JtYWxpemVUZXh0KGFnZW50LmludHJvZHVjdGlvbil9PC9TQ01BQ2FyZEludHJvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkRm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEZvb3RlckRhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q3JlYXRlZEF0TGFiZWwoYWdlbnQpIHx8IHQoJ21hcmtldHBsYWNlLm15QWdlbnRzRmFsbGJhY2tEYXRlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZEZvb3RlckRhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2FnZW50LmlzX2Zhdm9yaXRlID8gdCgnYWdlbnRzLnJlbW92ZUZhdm9yaXRlJykgOiB0KCdhZ2VudHMuYWRkRmF2b3JpdGUnKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U0NNQUZhdm9yaXRlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXthZ2VudC5pc19mYXZvcml0ZSA/IHQoJ2FnZW50cy5yZW1vdmVGYXZvcml0ZScpIDogdCgnYWdlbnRzLmFkZEZhdm9yaXRlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRhbHdheXNWaXNpYmxlPXshIWFnZW50LmlzX2Zhdm9yaXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtldmVudCA9PiBoYW5kbGVUb2dnbGVGYXZvcml0ZShldmVudCwgYWdlbnQsICEhYWdlbnQuaXNfZmF2b3JpdGUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NNQUZhdm9yaXRlU3RhcldyYXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsxNn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YWdlbnQuaXNfZmF2b3JpdGUgPyAnI0ZGQzYyNCcgOiAnIzk5OSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPXthZ2VudC5pc19mYXZvcml0ZSA/ICcjRkZDNjI0JyA6ICdub25lJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2FnZW50LmlzX2Zhdm9yaXRlID8gJycgOiAnc3Rhci1mYXZvcml0ZS1pY29uJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NDTUFGYXZvcml0ZVN0YXJXcmFwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01BRmF2b3JpdGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTUFDYXJkRm9vdGVyPlxuICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZEJvZHk+XG4gICAgICAgICAgICAgICAgICB7bWVudU9wZW5Gb3JBZ2VudElkID09PSBhZ2VudC5pZCAmJiBjYW5TaG93TWVudSA/IChcbiAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkTWVudVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZE1lbnVJdGVtcz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYW5FZGl0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRNZW51SXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9wZW5FZGl0QWdlbnQoYWdlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdlZGl0JywgeyBuczogU0VDVElPTlMuYWJtQWdlbnQgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRNZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAge2NhbkRlbGV0ZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkTWVudUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZ2VudFRvRGVsZXRlKGFnZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnZGVsZXRlJywgeyBuczogU0VDVElPTlMuYWJtQWdlbnQgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRNZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRNZW51SXRlbXM+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRNZW51PlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9TQ01BQ2FyZEJ1dHRvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1NDTUFDYXJkc1Jvdz5cbiAgICAgICAgICA8L1NDTUFDYXJkc091dGVyPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgeyFzZWFyY2hMb2FkaW5nQWdlbnRzICYmICFjdXN0b21BZ2VudHMubGVuZ3RoICYmIGlzU2VhcmNoQWN0aXZlID8gKFxuICAgICAgICAgIDxTQ01BU2VhcmNoTm9SZXN1bHRzPlxuICAgICAgICAgICAgPFNDTUFTZWFyY2hOb1Jlc3VsdHNUaXRsZT57dCgnbWFya2V0cGxhY2Uuc2VhcmNoTm9SZXN1bHRzJyl9PC9TQ01BU2VhcmNoTm9SZXN1bHRzVGl0bGU+XG4gICAgICAgICAgICB7Y2FuQ3JlYXRlQWdlbnQgPyAoXG4gICAgICAgICAgICAgIDxTQ01BU2VhcmNoTm9SZXN1bHRzU3VidGl0bGU+e3QoJ21hcmtldHBsYWNlLnNlYXJjaE5vUmVzdWx0c1N1YnRpdGxlJyl9PC9TQ01BU2VhcmNoTm9SZXN1bHRzU3VidGl0bGU+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1NDTUFTZWFyY2hOb1Jlc3VsdHM+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7IXNlYXJjaExvYWRpbmdBZ2VudHMgJiYgIWN1c3RvbUFnZW50cy5sZW5ndGggJiYgIWlzU2VhcmNoQWN0aXZlID8gKFxuICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgICAgICA8U0NNQUVtcHR5U3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgICAgICAgICAgPFNDTUFFbXB0eVN0YXRlVGl0bGU+e3QoJ21hcmtldHBsYWNlLm15QWdlbnRzRW1wdHlTdGF0ZVRpdGxlJyl9PC9TQ01BRW1wdHlTdGF0ZVRpdGxlPlxuICAgICAgICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZVN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAge2NhbkNyZWF0ZUFnZW50XG4gICAgICAgICAgICAgICAgICAgID8gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNFbXB0eVN0YXRlRGVzY3JpcHRpb24nKVxuICAgICAgICAgICAgICAgICAgICA6IHQoJ21hcmtldHBsYWNlLm15QWdlbnRzRW1wdHlTdGF0ZURlc2NyaXB0aW9uTm9QZXJtJyl9XG4gICAgICAgICAgICAgICAgPC9TQ01BRW1wdHlTdGF0ZVN1YnRpdGxlPlxuICAgICAgICAgICAgICA8L1NDTUFFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICAgICAgICAgIDwvU0NNQUVtcHR5U3RhdGVDb2x1bW4+XG4gICAgICAgICAgICB7Y2FuQ3JlYXRlQWdlbnQgPyAoXG4gICAgICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlRW1wdHlTdGF0ZVByaW1hcnlBY3Rpb259PlxuICAgICAgICAgICAgICAgIHt0KCdtYXJrZXRwbGFjZS5teUFnZW50c0VtcHR5U3RhdGVCdXR0b24nKX1cbiAgICAgICAgICAgICAgPC9TQ01BRW1wdHlTdGF0ZUJ1dHRvbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU0NNQUVtcHR5U3RhdGVSb290PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge2xvYWRpbmdNb3JlQWdlbnRzID8gKFxuICAgICAgICAgIDxTQ01BTG9hZE1vcmVXcmFwcGVyPlxuICAgICAgICAgICAgPEZhZGU+XG4gICAgICAgICAgICAgIDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgICAgIDwvRmFkZT5cbiAgICAgICAgICA8L1NDTUFMb2FkTW9yZVdyYXBwZXI+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9TQ01BQm9keT5cbiAgICAgIHtkZWxldGVNb2RhbENoYXQgPyAoXG4gICAgICAgIDxEZWxldGVRdWVzdGlvbk1vZGFsXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0QWdlbnRUb0RlbGV0ZShudWxsKX1cbiAgICAgICAgICBoYW5kbGVycz17e1xuICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbjogaGFuZGxlQ29uZmlybURlbGV0ZSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGNoYXQ9e2RlbGV0ZU1vZGFsQ2hhdH1cbiAgICAgICAgICBhY3Rpb249XCJhZ2VudFwiXG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L1NDTUFNeUFnZW50c0NvbnRhaW5lcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPQSxLQUFLLElBQUlDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDaEYsU0FBU0MsUUFBUSxRQUFRLDJDQUEyQztBQUNwRSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLElBQUksUUFBUSx1Q0FBdUM7QUFDNUQsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxnQkFBZ0IsUUFBUSxpQ0FBaUM7QUFDbEUsU0FBU0MsT0FBTyxRQUFRLDJCQUEyQjtBQUVuRCxTQUFTQyxXQUFXLFFBQVEsMkNBQTJDO0FBQ3ZFLFNBQVNDLGtCQUFrQixRQUFRLHNEQUFzRDtBQUN6RixTQUFTQyxtQkFBbUIs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cEIsSUFBSSxFQUNQLENBQUNKLG1CQUFtQixJQUFJLENBQUNjLFlBQVksQ0FBQzNDLE1BQU0sSUFBSSxDQUFDdUUsY0FBYyxnQkFDOURyRixLQUFBLENBQUN4QixrQkFBa0I7UUFBQThDLFFBQUEsZ0JBQ2pCeEIsSUFBQSxDQUFDckIsb0JBQW9CO1VBQUE2QyxRQUFBLGVBQ25CdEIsS0FBQSxDQUFDdEIsd0JBQXdCO1lBQUE0QyxRQUFBLGdCQUN2QnhCLElBQUEsQ0FBQ25CLG1CQUFtQjtjQUFBMkMsUUFBQSxFQUFFeUIsQ0FBQyxDQUFDLHFDQUFxQztZQUFDLENBQXNCLENBQUMsZUFDckZqRCxJQUFBLENBQUNsQixzQkFBc0I7Y0FBQTBDLFFBQUEsRUFDcEJrRCxjQUFjLEdBQ1h6QixDQUFDLENBQUMsMkNBQTJDLENBQUMsR0FDOUNBLENBQUMsQ0FBQyxpREFBaUQ7WUFBQyxDQUNsQyxDQUFDO1VBQUEsQ0FDRDtRQUFDLENBQ1AsQ0FBQyxFQUN0QnlCLGNBQWMsZ0JBQ2IxRSxJQUFBLENBQUNqQixvQkFBb0I7VUFBQzZDLElBQUksRUFBQyxRQUFRO1VBQUNtSixPQUFPLEVBQUV6RSw2QkFBOEI7VUFBQTlFLFFBQUEsRUFDeEV5QixDQUFDLENBQUMsc0NBQXNDO1FBQUMsQ0FDdEIsQ0FBQyxHQUNyQixJQUFJO01BQUEsQ0FDVSxDQUFDLEdBQ25CLElBQUksRUFDUFQsaUJBQWlCLGdCQUNoQnhDLElBQUEsQ0FBQ2YsbUJBQW1CO1FBQUF1QyxRQUFBLGVBQ2xCeEIsSUFBQSxDQUFDNUMsSUFBSTtVQUFBb0UsUUFBQSxlQUNIeEIsSUFBQSxDQUFDN0MsTUFBTTtZQUFDb08sSUFBSSxFQUFDO1VBQU8sQ0FBRTtRQUFDLENBQ25CO01BQUMsQ0FDWSxDQUFDLEdBQ3BCLElBQUk7SUFBQSxDQUNBLENBQUMsRUFDVjlFLGVBQWUsZ0JBQ2R6RyxJQUFBLENBQUMvQyxtQkFBbUI7TUFDbEJ1TyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtRQUFBLE9BQVFsSCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7TUFBQSxDQUFDO01BQ3RDbUgsUUFBUSxFQUFFO1FBQ1JDLG1CQUFtQixFQUFFaEQ7TUFDdkIsQ0FBRTtNQUNGTSxJQUFJLEVBQUV2QyxlQUFnQjtNQUN0QmtGLE1BQU0sRUFBQztJQUFPLENBQ2YsQ0FBQyxHQUNBLElBQUk7RUFBQSxDQUNhLENBQUM7QUFFNUIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
454
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZiIsInVzZVN0YXRlIiwiTWVudURvdHMiLCJTZWFyY2giLCJTdGFyIiwiVG9vbHRpcCIsInVzZVRyYW5zbGF0aW9uIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVzZXIiLCJkZWxldGVBZ2VudCIsInVzZVNuYWNrQmFyTWFuYWdlciIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJTRUNUSU9OUyIsIkxvYWRlciIsIkZhZGUiLCJTa2VsZXRvbiIsInVzZVRvZ2dsZUZhdm9yaXRlIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJTQ01BQm9keSIsIlNDTUFDYXJkQm9keSIsIlNDTUFDYXJkQnV0dG9uIiwiU0NNQUNhcmRGb290ZXIiLCJTQ01BQ2FyZEhlYWRlciIsIlNDTUFDYXJkVG9wUm93IiwiU0NNQUNhcmRJbnRyb1RleHQiLCJTQ01BQ2FyZE1lbnUiLCJTQ01BQ2FyZE1lbnVJdGVtIiwiU0NNQUNhcmRNZW51SXRlbXMiLCJTQ01BRmF2b3JpdGVCdXR0b24iLCJTQ01BRmF2b3JpdGVTdGFyV3JhcCIsIlNDTUFDYXJkRm9vdGVyRGF0ZSIsIlNDTUFDYXJkVGl0bGVFbW9qaSIsIlNDTUFDYXJkVGl0bGVOYW1lIiwiU0NNQUNhcmRzT3V0ZXIiLCJTQ01BQ2FyZHNSb3ciLCJTQ01BRW1wdHlTdGF0ZVJvb3QiLCJTQ01BRW1wdHlTdGF0ZUNvbHVtbiIsIlNDTUFFbXB0eVN0YXRlVGl0bGVCbG9jayIsIlNDTUFFbXB0eVN0YXRlVGl0bGUiLCJTQ01BRW1wdHlTdGF0ZVN1YnRpdGxlIiwiU0NNQUVtcHR5U3RhdGVCdXR0b24iLCJTQ01BS2ViYWJCdXR0b24iLCJTQ01BTG9hZE1vcmVXcmFwcGVyIiwiU0NNQUxvZ29Db250YWluZXIiLCJTQ01BTXlBZ2VudHNDb250YWluZXIiLCJTQ01BVGl0bGUiLCJTQ01BVGl0bGVJbm5lciIsIlNDTUFUaXRsZVdyYXAiLCJTQ01BQ2FyZFNrZWxldG9uSXRlbSIsIlNDTUFTZWFyY2hXcmFwcGVyIiwiU0NNQVNlYXJjaElucHV0IiwiU0NNQVNlYXJjaEhpbnQiLCJTQ01BU2VhcmNoTm9SZXN1bHRzIiwiU0NNQVNlYXJjaE5vUmVzdWx0c1RpdGxlIiwiU0NNQVNlYXJjaE5vUmVzdWx0c1N1YnRpdGxlIiwiTUFJQUlzb2xvZ28iLCJidWlsZEFnZW50RGVsZXRlTW9kYWxDaGF0IiwiZ2V0QWdlbnRDcmVhdGVkQXRMYWJlbCIsIm5vcm1hbGl6ZUFnZW50SW50cm9UZXh0Iiwic2hvdWxkQXV0b0xvYWRNb3JlQWdlbnRzIiwic2hvdWxkRGVib3VuY2VBZ2VudFNlYXJjaCIsInNob3VsZExvYWRNb3JlQWdlbnRzT25TY3JvbGwiLCJzaG91bGRVc2VNYWlha2VyRW1wdHlTdGF0ZUFjdGlvbiIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJBZ2VudFNlYXJjaElucHV0IiwibWVtbyIsIl9yZWYiLCJvblNlYXJjaCIsInBsYWNlaG9sZGVyIiwiaGludCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInZhbHVlIiwic2V0VmFsdWUiLCJkZWJvdW5jZVJlZiIsInNob3dIaW50IiwibGVuZ3RoIiwiaGFuZGxlQ2hhbmdlIiwiZSIsInZhbCIsInRhcmdldCIsImN1cnJlbnQiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiY2hpbGRyZW4iLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwidHlwZSIsIm9uQ2hhbmdlIiwiQ2hhdEFJTXlBZ2VudHMiLCJfcmVmMiIsIl91c2VyJHBlcm1pc3Npb25zIiwib25CYWNrIiwiYWdlbnRzIiwib25EZWxldGVBZ2VudCIsIm9uRmF2b3JpdGVBZ2VudFVwZGF0ZSIsIl9yZWYyJGhhc01vcmVBZ2VudHMiLCJoYXNNb3JlQWdlbnRzIiwiX3JlZjIkbG9hZGluZ01vcmVBZ2VuIiwibG9hZGluZ01vcmVBZ2VudHMiLCJvbkxvYWRNb3JlQWdlbnRzIiwib25Hb1RvTWFpYWtlciIsIm9uU2VhcmNoQWdlbnRzIiwiX3JlZjIkc2VhcmNoTG9hZGluZ0FnIiwic2VhcmNoTG9hZGluZ0FnZW50cyIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsImFibUFnZW50IiwidCIsInVzZXIiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdEFnZW50Iiwic2V0UHJvamVjdCIsInNldENsaWVudCIsInNldFRhc2siLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJTdWNjZXNzIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsImN1c3RvbUFnZW50cyIsImZpbHRlciIsImFnZW50IiwiaXNfZGVsZXRlZCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibWVudU9wZW5Gb3JBZ2VudElkIiwic2V0TWVudU9wZW5Gb3JBZ2VudElkIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJhZ2VudFRvRGVsZXRlIiwic2V0QWdlbnRUb0RlbGV0ZSIsInVzZXJQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY2FuQ3JlYXRlQWdlbnQiLCJjcmVhdGUiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiY2FuRWRpdCIsImVkaXQiLCJjYW5EZWxldGUiLCJjYW5TaG93TWVudSIsIl91c2VUb2dnbGVGYXZvcml0ZSIsInRvZ2dsZUZhdm9yaXRlIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImlzU2VhcmNoQWN0aXZlIiwic2V0SXNTZWFyY2hBY3RpdmUiLCJoYW5kbGVTZWFyY2hBZ2VudHMiLCJxdWVyeSIsIm9wZW5DcmVhdGVBZ2VudE1vZGFsIiwib3Blbk1vZGFsIiwib3B0aW9uIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJhZ2VudFZhbHVlcyIsInZhbHVlcyIsImlzRWRpdGluZyIsImlzT3BlbiIsImhhbmRsZUVtcHR5U3RhdGVQcmltYXJ5QWN0aW9uIiwiaGFuZGxlTG9hZE1vcmUiLCJkZWxldGVNb2RhbENoYXQiLCJoYW5kbGVVc2VBZ2VudCIsImdldENyZWF0ZWRBdExhYmVsIiwidG9kYXkiLCJvbmVEYXlBZ28iLCJkYXlzQWdvIiwiZGF5cyIsIkRhdGUiLCJub3ciLCJoYW5kbGVPcGVuRWRpdEFnZW50Iiwia25vd2xlZGdlIiwiZ2VuZXJhbCIsIm5hbWUiLCJpZCIsImhhbmRsZVRvZ2dsZUZhdm9yaXRlIiwiZXZlbnQiLCJpc0Zhdm9yaXRlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJ1cGRhdGVkQWdlbnQiLCJ1bmRlZmluZWQiLCJoYW5kbGVDb25maXJtRGVsZXRlIiwiX3JlZjMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImNoYXQiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwibnMiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY29udGFpbmVyIiwiZ2V0RWxlbWVudEJ5SWQiLCJvblNjcm9sbCIsInNjcm9sbFRvcCIsImNsaWVudEhlaWdodCIsInNjcm9sbEhlaWdodCIsIiRoYXNBZ2VudHMiLCIkY2FuQ3JlYXRlQWdlbnQiLCJBcnJheSIsImZyb20iLCJtYXAiLCJfIiwiaSIsInZhcmlhbnQiLCJpbmRleCIsIl9hZ2VudCRlbW9qaSIsIiRpbmRleCIsIm9uQ2xpY2siLCJlbW9qaSIsInRyaW0iLCJpbnRyb2R1Y3Rpb24iLCJ0aXRsZSIsImlzX2Zhdm9yaXRlIiwiJGFsd2F5c1Zpc2libGUiLCJmaWxsIiwiY2xhc3NOYW1lIiwic2l6ZSIsIm9uQ2xvc2UiLCJoYW5kbGVycyIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJhY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTXlBZ2VudHMvQ2hhdEFJTXlBZ2VudHMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBNZW51RG90cyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL01lbnVEb3RzJ1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvU2VhcmNoJ1xuaW1wb3J0IHsgU3RhciB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1N0YXInXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IGRlbGV0ZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZGVsZXRlQWdlbnQnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBGYWRlIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmFkZSdcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAnLi4vLi4vYXRvbXMvU2tlbGV0b24vU2tlbGV0b24nXG5pbXBvcnQgeyB1c2VUb2dnbGVGYXZvcml0ZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHtcbiAgU0NNQUJvZHksXG4gIFNDTUFDYXJkQm9keSxcbiAgU0NNQUNhcmRCdXR0b24sXG4gIFNDTUFDYXJkRm9vdGVyLFxuICBTQ01BQ2FyZEhlYWRlcixcbiAgU0NNQUNhcmRUb3BSb3csXG4gIFNDTUFDYXJkSW50cm9UZXh0LFxuICBTQ01BQ2FyZE1lbnUsXG4gIFNDTUFDYXJkTWVudUl0ZW0sXG4gIFNDTUFDYXJkTWVudUl0ZW1zLFxuICBTQ01BRmF2b3JpdGVCdXR0b24sXG4gIFNDTUFGYXZvcml0ZVN0YXJXcmFwLFxuICBTQ01BQ2FyZEZvb3RlckRhdGUsXG4gIFNDTUFDYXJkVGl0bGVFbW9qaSxcbiAgU0NNQUNhcmRUaXRsZU5hbWUsXG4gIFNDTUFDYXJkc091dGVyLFxuICBTQ01BQ2FyZHNSb3csXG4gIFNDTUFFbXB0eVN0YXRlUm9vdCxcbiAgU0NNQUVtcHR5U3RhdGVDb2x1bW4sXG4gIFNDTUFFbXB0eVN0YXRlVGl0bGVCbG9jayxcbiAgU0NNQUVtcHR5U3RhdGVUaXRsZSxcbiAgU0NNQUVtcHR5U3RhdGVTdWJ0aXRsZSxcbiAgU0NNQUVtcHR5U3RhdGVCdXR0b24sXG4gIFNDTUFLZWJhYkJ1dHRvbixcbiAgU0NNQUxvYWRNb3JlV3JhcHBlcixcbiAgU0NNQUxvZ29Db250YWluZXIsXG4gIFNDTUFNeUFnZW50c0NvbnRhaW5lcixcbiAgU0NNQVRpdGxlLFxuICBTQ01BVGl0bGVJbm5lcixcbiAgU0NNQVRpdGxlV3JhcCxcbiAgU0NNQUNhcmRTa2VsZXRvbkl0ZW0sXG4gIFNDTUFTZWFyY2hXcmFwcGVyLFxuICBTQ01BU2VhcmNoSW5wdXQsXG4gIFNDTUFTZWFyY2hIaW50LFxuICBTQ01BU2VhcmNoTm9SZXN1bHRzLFxuICBTQ01BU2VhcmNoTm9SZXN1bHRzVGl0bGUsXG4gIFNDTUFTZWFyY2hOb1Jlc3VsdHNTdWJ0aXRsZSxcbn0gZnJvbSAnLi9DaGF0QUlNeUFnZW50cy5zdHlsZXMnXG5pbXBvcnQgeyBNQUlBSXNvbG9nbyB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zJ1xuaW1wb3J0IHtcbiAgYnVpbGRBZ2VudERlbGV0ZU1vZGFsQ2hhdCxcbiAgZ2V0QWdlbnRDcmVhdGVkQXRMYWJlbCxcbiAgbm9ybWFsaXplQWdlbnRJbnRyb1RleHQsXG4gIHNob3VsZEF1dG9Mb2FkTW9yZUFnZW50cyxcbiAgc2hvdWxkRGVib3VuY2VBZ2VudFNlYXJjaCxcbiAgc2hvdWxkTG9hZE1vcmVBZ2VudHNPblNjcm9sbCxcbiAgc2hvdWxkVXNlTWFpYWtlckVtcHR5U3RhdGVBY3Rpb24sXG59IGZyb20gJy4vQ2hhdEFJTXlBZ2VudHMuaGVscGVycydcblxuY29uc3QgQWdlbnRTZWFyY2hJbnB1dCA9IFJlYWN0Lm1lbW8oXG4gICh7IG9uU2VhcmNoLCBwbGFjZWhvbGRlciwgaGludCB9OiB7IG9uU2VhcmNoOiAocTogc3RyaW5nKSA9PiB2b2lkOyBwbGFjZWhvbGRlcjogc3RyaW5nOyBoaW50OiBzdHJpbmcgfSkgPT4ge1xuICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoJycpXG4gICAgY29uc3QgZGVib3VuY2VSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKVxuICAgIGNvbnN0IHNob3dIaW50ID0gdmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPCAzXG5cbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICBjb25zdCB7IHZhbHVlOiB2YWwgfSA9IGUudGFyZ2V0XG4gICAgICAgIHNldFZhbHVlKHZhbClcbiAgICAgICAgaWYgKGRlYm91bmNlUmVmLmN1cnJlbnQpIGNsZWFyVGltZW91dChkZWJvdW5jZVJlZi5jdXJyZW50KVxuICAgICAgICBkZWJvdW5jZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHNob3VsZERlYm91bmNlQWdlbnRTZWFyY2godmFsKSkgb25TZWFyY2godmFsKVxuICAgICAgICB9LCAzNTApXG4gICAgICB9LFxuICAgICAgW29uU2VhcmNoXVxuICAgIClcblxuICAgIHVzZUVmZmVjdChcbiAgICAgICgpID0+ICgpID0+IHtcbiAgICAgICAgaWYgKGRlYm91bmNlUmVmLmN1cnJlbnQpIGNsZWFyVGltZW91dChkZWJvdW5jZVJlZi5jdXJyZW50KVxuICAgICAgfSxcbiAgICAgIFtdXG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ01BU2VhcmNoV3JhcHBlcj5cbiAgICAgICAgPFNlYXJjaCB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IGNvbG9yPVwiIzk5OVwiIC8+XG4gICAgICAgIDxTQ01BU2VhcmNoSW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT17dmFsdWV9IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9IHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn0gLz5cbiAgICAgICAge3Nob3dIaW50ID8gPFNDTUFTZWFyY2hIaW50PntoaW50fTwvU0NNQVNlYXJjaEhpbnQ+IDogbnVsbH1cbiAgICAgIDwvU0NNQVNlYXJjaFdyYXBwZXI+XG4gICAgKVxuICB9XG4pXG5cbnR5cGUgQ2hhdEFJTXlBZ2VudHNQcm9wcyA9IHtcbiAgb25CYWNrOiAoKSA9PiB2b2lkXG4gIGFnZW50czogQWdlbnRbXVxuICBvbkRlbGV0ZUFnZW50PzogKGFnZW50SWQ6IHN0cmluZykgPT4gdm9pZFxuICBvbkZhdm9yaXRlQWdlbnRVcGRhdGU/OiAoYWdlbnQ6IEFnZW50KSA9PiB2b2lkXG4gIGhhc01vcmVBZ2VudHM/OiBib29sZWFuXG4gIGxvYWRpbmdNb3JlQWdlbnRzPzogYm9vbGVhblxuICBvbkxvYWRNb3JlQWdlbnRzPzogKCkgPT4gdm9pZFxuICBvbkdvVG9NYWlha2VyPzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbiAgb25TZWFyY2hBZ2VudHM/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZFxuICBzZWFyY2hMb2FkaW5nQWdlbnRzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTXlBZ2VudHMgPSAoe1xuICBvbkJhY2ssXG4gIGFnZW50cyxcbiAgb25EZWxldGVBZ2VudCxcbiAgb25GYXZvcml0ZUFnZW50VXBkYXRlLFxuICBoYXNNb3JlQWdlbnRzID0gZmFsc2UsXG4gIGxvYWRpbmdNb3JlQWdlbnRzID0gZmFsc2UsXG4gIG9uTG9hZE1vcmVBZ2VudHMsXG4gIG9uR29Ub01haWFrZXIsXG4gIG9uU2VhcmNoQWdlbnRzLFxuICBzZWFyY2hMb2FkaW5nQWdlbnRzID0gZmFsc2UsXG59OiBDaGF0QUlNeUFnZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmNoYXRBSSwgU0VDVElPTlMuYWJtQWdlbnRdKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgc2VsZWN0QWdlbnQsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzayB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHsgaGFuZGxlU25hY2tiYXJTdWNjZXNzLCBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCBjdXN0b21BZ2VudHMgPSBhZ2VudHMuZmlsdGVyKGFnZW50ID0+IGFnZW50LnR5cGUgPT09ICdjdXN0b20nICYmICFhZ2VudC5pc19kZWxldGVkKVxuICBjb25zdCBbbWVudU9wZW5Gb3JBZ2VudElkLCBzZXRNZW51T3BlbkZvckFnZW50SWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2FnZW50VG9EZWxldGUsIHNldEFnZW50VG9EZWxldGVdID0gdXNlU3RhdGU8QWdlbnQgfCBudWxsPihudWxsKVxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG4gIGNvbnN0IGNhbkNyZWF0ZUFnZW50ID0gISF1c2VyUGVybWlzc2lvbnM/LmNyZWF0ZSAmJiAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG4gIGNvbnN0IGNhbkVkaXQgPSAhIXVzZXJQZXJtaXNzaW9ucz8uZWRpdCAmJiAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG4gIGNvbnN0IGNhbkRlbGV0ZSA9ICEhdXNlclBlcm1pc3Npb25zPy5kZWxldGUgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICBjb25zdCBjYW5TaG93TWVudSA9IGNhbkVkaXQgfHwgY2FuRGVsZXRlXG4gIGNvbnN0IHsgdG9nZ2xlRmF2b3JpdGUgfSA9IHVzZVRvZ2dsZUZhdm9yaXRlKClcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IFtpc1NlYXJjaEFjdGl2ZSwgc2V0SXNTZWFyY2hBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoQWdlbnRzID0gdXNlQ2FsbGJhY2soXG4gICAgKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICAgIHNldElzU2VhcmNoQWN0aXZlKHF1ZXJ5ICE9PSAnJylcbiAgICAgIG9uU2VhcmNoQWdlbnRzPy4ocXVlcnkpXG4gICAgfSxcbiAgICBbb25TZWFyY2hBZ2VudHNdXG4gIClcblxuICBjb25zdCBvcGVuQ3JlYXRlQWdlbnRNb2RhbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMub3Blbk1vZGFsLCB7IG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgYWdlbnRWYWx1ZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApXG4gIH0sIFtldmVudEFtcGxpdHVkZV0pXG5cbiAgY29uc3QgaGFuZGxlRW1wdHlTdGF0ZVByaW1hcnlBY3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNob3VsZFVzZU1haWFrZXJFbXB0eVN0YXRlQWN0aW9uKCEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMsIG9uR29Ub01haWFrZXIpKSB7XG4gICAgICBvbkdvVG9NYWlha2VyPy4oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG9wZW5DcmVhdGVBZ2VudE1vZGFsKClcbiAgfSwgW29uR29Ub01haWFrZXIsIG9wZW5DcmVhdGVBZ2VudE1vZGFsXSlcblxuICBjb25zdCBoYW5kbGVMb2FkTW9yZSA9ICgpID0+IHtcbiAgICBpZiAoIW9uTG9hZE1vcmVBZ2VudHMpIHJldHVyblxuICAgIG9uTG9hZE1vcmVBZ2VudHMoKVxuICB9XG5cbiAgY29uc3QgZGVsZXRlTW9kYWxDaGF0ID0gdXNlTWVtbygoKSA9PiBidWlsZEFnZW50RGVsZXRlTW9kYWxDaGF0KGFnZW50VG9EZWxldGUpLCBbYWdlbnRUb0RlbGV0ZV0pXG5cbiAgY29uc3QgaGFuZGxlVXNlQWdlbnQgPSAoYWdlbnQ6IEFnZW50KSA9PiB7XG4gICAgc2V0UHJvamVjdChudWxsKVxuICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgc2V0VGFzayhudWxsKVxuICAgIHNlbGVjdEFnZW50KGFnZW50KVxuICAgIG9uQmFjaygpXG4gIH1cblxuICBjb25zdCBnZXRDcmVhdGVkQXRMYWJlbCA9IChhZ2VudDogQWdlbnQpID0+XG4gICAgZ2V0QWdlbnRDcmVhdGVkQXRMYWJlbChcbiAgICAgIGFnZW50LFxuICAgICAge1xuICAgICAgICB0b2RheTogdCgnbWFya2V0cGxhY2UubXlBZ2VudHNUb2RheScpLFxuICAgICAgICBvbmVEYXlBZ286IHQoJ21hcmtldHBsYWNlLm15QWdlbnRzT25lRGF5QWdvJyksXG4gICAgICAgIGRheXNBZ286IGRheXMgPT4gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNEYXlzQWdvJywgeyBkYXlzIH0pLFxuICAgICAgfSxcbiAgICAgIERhdGUubm93KClcbiAgICApXG5cbiAgY29uc3QgaGFuZGxlT3BlbkVkaXRBZ2VudCA9IChhZ2VudDogQWdlbnQpID0+IHtcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgYWdlbnRWYWx1ZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBpc0VkaXRpbmc6IHRydWUsXG4gICAgICAgICAgICAgIGtub3dsZWRnZTogYWdlbnQ/Lmtub3dsZWRnZSB8fCBbXSxcbiAgICAgICAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFnZW50Lm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6IGFnZW50LmlkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApXG4gICAgc2V0TWVudU9wZW5Gb3JBZ2VudElkKG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVUb2dnbGVGYXZvcml0ZSA9IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4sIGFnZW50OiBBZ2VudCwgaXNGYXZvcml0ZTogYm9vbGVhbikgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgdG9nZ2xlRmF2b3JpdGUoXG4gICAgICBhZ2VudC5pZCxcbiAgICAgIHVwZGF0ZWRBZ2VudCA9PiB7XG4gICAgICAgIG9uRmF2b3JpdGVBZ2VudFVwZGF0ZT8uKHVwZGF0ZWRBZ2VudClcbiAgICAgIH0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBpc0Zhdm9yaXRlXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybURlbGV0ZSA9IGFzeW5jIChjaGF0OiB7IGlkOiBzdHJpbmcgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVBZ2VudChjaGF0LmlkKVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudERlbGV0ZWQnLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KSlcbiAgICAgIG9uRGVsZXRlQWdlbnQ/LihjaGF0LmlkKVxuICAgICAgc2V0QWdlbnRUb0RlbGV0ZShudWxsKVxuICAgICAgc2V0TWVudU9wZW5Gb3JBZ2VudElkKG51bGwpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnZXJyb3JBZ2VudENyZWF0ZWQnLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9ICgpID0+IHtcbiAgICAgIGlmIChtZW51T3BlbkZvckFnZW50SWQpIHtcbiAgICAgICAgc2V0TWVudU9wZW5Gb3JBZ2VudElkKG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW21lbnVPcGVuRm9yQWdlbnRJZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXktYWdlbnRzLXNjcm9sbC1jb250YWluZXInKVxuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3Qgb25TY3JvbGwgPSAoKSA9PiB7XG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgY2xpZW50SGVpZ2h0LCBzY3JvbGxIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgICAgaWYgKFxuICAgICAgICBzaG91bGRMb2FkTW9yZUFnZW50c09uU2Nyb2xsKHtcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgICAgICBoYXNNb3JlQWdlbnRzLFxuICAgICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzLFxuICAgICAgICB9KVxuICAgICAgKSB7XG4gICAgICAgIGhhbmRsZUxvYWRNb3JlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25TY3JvbGwpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbClcbiAgICB9XG4gIH0sIFtoYXNNb3JlQWdlbnRzLCBsb2FkaW5nTW9yZUFnZW50cywgb25Mb2FkTW9yZUFnZW50c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXktYWdlbnRzLXNjcm9sbC1jb250YWluZXInKVxuICAgIGlmICghY29udGFpbmVyIHx8ICFoYXNNb3JlQWdlbnRzIHx8IGxvYWRpbmdNb3JlQWdlbnRzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgc2hvdWxkQXV0b0xvYWRNb3JlQWdlbnRzKHtcbiAgICAgICAgc2Nyb2xsSGVpZ2h0OiBjb250YWluZXIuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBjbGllbnRIZWlnaHQ6IGNvbnRhaW5lci5jbGllbnRIZWlnaHQsXG4gICAgICAgIGhhc01vcmVBZ2VudHMsXG4gICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzLFxuICAgICAgfSlcbiAgICApIHtcbiAgICAgIGhhbmRsZUxvYWRNb3JlKClcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9LCBbY3VzdG9tQWdlbnRzLmxlbmd0aCwgaGFzTW9yZUFnZW50cywgbG9hZGluZ01vcmVBZ2VudHMsIG9uTG9hZE1vcmVBZ2VudHNdKVxuXG4gIHJldHVybiAoXG4gICAgPFNDTUFNeUFnZW50c0NvbnRhaW5lciBpZD1cIm15LWFnZW50cy1zY3JvbGwtY29udGFpbmVyXCIgJGhhc0FnZW50cz17ISFjdXN0b21BZ2VudHMubGVuZ3RoIHx8IGlzU2VhcmNoQWN0aXZlfT5cbiAgICAgIDxTQ01BTG9nb0NvbnRhaW5lcj5cbiAgICAgICAgPE1BSUFJc29sb2dvIC8+XG4gICAgICA8L1NDTUFMb2dvQ29udGFpbmVyPlxuXG4gICAgICA8U0NNQUJvZHkgJGNhbkNyZWF0ZUFnZW50PXtjYW5DcmVhdGVBZ2VudH0+XG4gICAgICAgIHtjdXN0b21BZ2VudHMubGVuZ3RoIHx8IGlzU2VhcmNoQWN0aXZlID8gKFxuICAgICAgICAgIDxTQ01BVGl0bGVXcmFwPlxuICAgICAgICAgICAgPFNDTUFUaXRsZUlubmVyPlxuICAgICAgICAgICAgICA8U0NNQVRpdGxlPnt0KCdtYXJrZXRwbGFjZS5teUFnZW50c1JlYWR5VGl0bGUnKX08L1NDTUFUaXRsZT5cbiAgICAgICAgICAgIDwvU0NNQVRpdGxlSW5uZXI+XG4gICAgICAgICAgICB7b25TZWFyY2hBZ2VudHMgPyAoXG4gICAgICAgICAgICAgIDxBZ2VudFNlYXJjaElucHV0XG4gICAgICAgICAgICAgICAgb25TZWFyY2g9e2hhbmRsZVNlYXJjaEFnZW50c31cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnbWFya2V0cGxhY2Uuc2VhcmNoQWdlbnRQbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICAgIGhpbnQ9e3QoJ21hcmtldHBsYWNlLnNlYXJjaE1pbkxlbmd0aCcpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TQ01BVGl0bGVXcmFwPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7c2VhcmNoTG9hZGluZ0FnZW50cyA/IChcbiAgICAgICAgICA8U0NNQUNhcmRzT3V0ZXI+XG4gICAgICAgICAgICA8U0NNQUNhcmRzUm93PlxuICAgICAgICAgICAgICB7QXJyYXkuZnJvbSh7IGxlbmd0aDogNiB9KS5tYXAoKF8sIGkpID0+IChcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG4gICAgICAgICAgICAgICAgPFNDTUFDYXJkU2tlbGV0b25JdGVtIGtleT17aX0+XG4gICAgICAgICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cImNpcmN1bGFyXCIgd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJ0ZXh0XCIgaGVpZ2h0PXsxNH0gLz5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwidGV4dFwiIGhlaWdodD17MTR9IHdpZHRoPVwiNzUlXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwidGV4dFwiIGhlaWdodD17MTJ9IC8+XG4gICAgICAgICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cInRleHRcIiBoZWlnaHQ9ezEyfSB3aWR0aD1cIjg1JVwiIC8+XG4gICAgICAgICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cInRleHRcIiBoZWlnaHQ9ezExfSB3aWR0aD1cIjQwJVwiIC8+XG4gICAgICAgICAgICAgICAgPC9TQ01BQ2FyZFNrZWxldG9uSXRlbT5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1NDTUFDYXJkc1Jvdz5cbiAgICAgICAgICA8L1NDTUFDYXJkc091dGVyPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgeyFzZWFyY2hMb2FkaW5nQWdlbnRzICYmIGN1c3RvbUFnZW50cy5sZW5ndGggPyAoXG4gICAgICAgICAgPFNDTUFDYXJkc091dGVyPlxuICAgICAgICAgICAgPFNDTUFDYXJkc1Jvdz5cbiAgICAgICAgICAgICAge2N1c3RvbUFnZW50cy5tYXAoKGFnZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEJ1dHRvbiBrZXk9e2FnZW50LmlkfSAkaW5kZXg9e2luZGV4fSB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gaGFuZGxlVXNlQWdlbnQoYWdlbnQpfT5cbiAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkVG9wUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZFRpdGxlRW1vamkgYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YWdlbnQuZW1vamk/LnRyaW0oKSA/IGFnZW50LmVtb2ppIDogJ1xcdTAwYTAnfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRUaXRsZUVtb2ppPlxuICAgICAgICAgICAgICAgICAgICAgIHtjYW5TaG93TWVudSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01BS2ViYWJCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ21hcmtldHBsYWNlLmNhcmRNZW51QXJpYUxhYmVsJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNZW51T3BlbkZvckFnZW50SWQocHJldiA9PiAocHJldiA9PT0gYWdlbnQuaWQgPyBudWxsIDogYWdlbnQuaWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWVudURvdHMgY29sb3I9XCIjOTk5XCIgd2lkdGg9ezE1fSBoZWlnaHQ9ezE1fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01BS2ViYWJCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRUb3BSb3c+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZFRpdGxlTmFtZT57YWdlbnQubmFtZX08L1NDTUFDYXJkVGl0bGVOYW1lPlxuICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZEludHJvVGV4dD57bm9ybWFsaXplQWdlbnRJbnRyb1RleHQoYWdlbnQuaW50cm9kdWN0aW9uKX08L1NDTUFDYXJkSW50cm9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRGb290ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkRm9vdGVyRGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDcmVhdGVkQXRMYWJlbChhZ2VudCkgfHwgdCgnbWFya2V0cGxhY2UubXlBZ2VudHNGYWxsYmFja0RhdGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTUFDYXJkRm9vdGVyRGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17YWdlbnQuaXNfZmF2b3JpdGUgPyB0KCdhZ2VudHMucmVtb3ZlRmF2b3JpdGUnKSA6IHQoJ2FnZW50cy5hZGRGYXZvcml0ZScpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01BRmF2b3JpdGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FnZW50LmlzX2Zhdm9yaXRlID8gdCgnYWdlbnRzLnJlbW92ZUZhdm9yaXRlJykgOiB0KCdhZ2VudHMuYWRkRmF2b3JpdGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsd2F5c1Zpc2libGU9eyEhYWdlbnQuaXNfZmF2b3JpdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IGhhbmRsZVRvZ2dsZUZhdm9yaXRlKGV2ZW50LCBhZ2VudCwgISFhZ2VudC5pc19mYXZvcml0ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01BRmF2b3JpdGVTdGFyV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezE2fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsxNn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXthZ2VudC5pc19mYXZvcml0ZSA/ICcjRkZDNjI0JyA6ICcjOTk5J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9e2FnZW50LmlzX2Zhdm9yaXRlID8gJyNGRkM2MjQnIDogJ25vbmUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YWdlbnQuaXNfZmF2b3JpdGUgPyAnJyA6ICdzdGFyLWZhdm9yaXRlLWljb24nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNQUZhdm9yaXRlU3RhcldyYXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NDTUFGYXZvcml0ZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNQUNhcmRGb290ZXI+XG4gICAgICAgICAgICAgICAgICA8L1NDTUFDYXJkQm9keT5cbiAgICAgICAgICAgICAgICAgIHttZW51T3BlbkZvckFnZW50SWQgPT09IGFnZW50LmlkICYmIGNhblNob3dNZW51ID8gKFxuICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRNZW51XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTUFDYXJkTWVudUl0ZW1zPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhbkVkaXQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01BQ2FyZE1lbnVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3BlbkVkaXRBZ2VudChhZ2VudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2VkaXQnLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZE1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2FuRGVsZXRlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NNQUNhcmRNZW51SXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFnZW50VG9EZWxldGUoYWdlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdkZWxldGUnLCB7IG5zOiBTRUNUSU9OUy5hYm1BZ2VudCB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZE1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZE1lbnVJdGVtcz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01BQ2FyZE1lbnU+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L1NDTUFDYXJkQnV0dG9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvU0NNQUNhcmRzUm93PlxuICAgICAgICAgIDwvU0NNQUNhcmRzT3V0ZXI+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7IXNlYXJjaExvYWRpbmdBZ2VudHMgJiYgIWN1c3RvbUFnZW50cy5sZW5ndGggJiYgaXNTZWFyY2hBY3RpdmUgPyAoXG4gICAgICAgICAgPFNDTUFTZWFyY2hOb1Jlc3VsdHM+XG4gICAgICAgICAgICA8U0NNQVNlYXJjaE5vUmVzdWx0c1RpdGxlPnt0KCdtYXJrZXRwbGFjZS5zZWFyY2hOb1Jlc3VsdHMnKX08L1NDTUFTZWFyY2hOb1Jlc3VsdHNUaXRsZT5cbiAgICAgICAgICAgIHtjYW5DcmVhdGVBZ2VudCA/IChcbiAgICAgICAgICAgICAgPFNDTUFTZWFyY2hOb1Jlc3VsdHNTdWJ0aXRsZT57dCgnbWFya2V0cGxhY2Uuc2VhcmNoTm9SZXN1bHRzU3VidGl0bGUnKX08L1NDTUFTZWFyY2hOb1Jlc3VsdHNTdWJ0aXRsZT5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU0NNQVNlYXJjaE5vUmVzdWx0cz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHshc2VhcmNoTG9hZGluZ0FnZW50cyAmJiAhY3VzdG9tQWdlbnRzLmxlbmd0aCAmJiAhaXNTZWFyY2hBY3RpdmUgPyAoXG4gICAgICAgICAgPFNDTUFFbXB0eVN0YXRlUm9vdD5cbiAgICAgICAgICAgIDxTQ01BRW1wdHlTdGF0ZUNvbHVtbj5cbiAgICAgICAgICAgICAgPFNDTUFFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICAgICAgICAgICAgICA8U0NNQUVtcHR5U3RhdGVUaXRsZT57dCgnbWFya2V0cGxhY2UubXlBZ2VudHNFbXB0eVN0YXRlVGl0bGUnKX08L1NDTUFFbXB0eVN0YXRlVGl0bGU+XG4gICAgICAgICAgICAgICAgPFNDTUFFbXB0eVN0YXRlU3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICB7Y2FuQ3JlYXRlQWdlbnRcbiAgICAgICAgICAgICAgICAgICAgPyB0KCdtYXJrZXRwbGFjZS5teUFnZW50c0VtcHR5U3RhdGVEZXNjcmlwdGlvbicpXG4gICAgICAgICAgICAgICAgICAgIDogdCgnbWFya2V0cGxhY2UubXlBZ2VudHNFbXB0eVN0YXRlRGVzY3JpcHRpb25Ob1Blcm0nKX1cbiAgICAgICAgICAgICAgICA8L1NDTUFFbXB0eVN0YXRlU3VidGl0bGU+XG4gICAgICAgICAgICAgIDwvU0NNQUVtcHR5U3RhdGVUaXRsZUJsb2NrPlxuICAgICAgICAgICAgPC9TQ01BRW1wdHlTdGF0ZUNvbHVtbj5cbiAgICAgICAgICAgIHtjYW5DcmVhdGVBZ2VudCA/IChcbiAgICAgICAgICAgICAgPFNDTUFFbXB0eVN0YXRlQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVFbXB0eVN0YXRlUHJpbWFyeUFjdGlvbn0+XG4gICAgICAgICAgICAgICAge3QoJ21hcmtldHBsYWNlLm15QWdlbnRzRW1wdHlTdGF0ZUJ1dHRvbicpfVxuICAgICAgICAgICAgICA8L1NDTUFFbXB0eVN0YXRlQnV0dG9uPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TQ01BRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7bG9hZGluZ01vcmVBZ2VudHMgPyAoXG4gICAgICAgICAgPFNDTUFMb2FkTW9yZVdyYXBwZXI+XG4gICAgICAgICAgICA8RmFkZT5cbiAgICAgICAgICAgICAgPExvYWRlciBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICAgICAgPC9GYWRlPlxuICAgICAgICAgIDwvU0NNQUxvYWRNb3JlV3JhcHBlcj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L1NDTUFCb2R5PlxuICAgICAge2RlbGV0ZU1vZGFsQ2hhdCA/IChcbiAgICAgICAgPERlbGV0ZVF1ZXN0aW9uTW9kYWxcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRBZ2VudFRvRGVsZXRlKG51bGwpfVxuICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICBoYW5kbGVDb25maXJtQWN0aW9uOiBoYW5kbGVDb25maXJtRGVsZXRlLFxuICAgICAgICAgIH19XG4gICAgICAgICAgY2hhdD17ZGVsZXRlTW9kYWxDaGF0fVxuICAgICAgICAgIGFjdGlvbj1cImFnZW50XCJcbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvU0NNQU15QWdlbnRzQ29udGFpbmVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLE9BQU9BLEtBQUssSUFBSUMsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRixTQUFTQyxRQUFRLFFBQVEsMkNBQTJDO0FBQ3BFLFNBQVNDLE1BQU0sUUFBUSx5Q0FBeUM7QUFDaEUsU0FBU0MsSUFBSSxRQUFRLHVDQUF1QztBQUM1RCxTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBQ3RFLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLGdCQUFnQixRQUFRLGlDQUFpQztBQUNsRSxTQUFTQyxPQUFPLFFBQVEsMkJBQTJCO0FBRW5ELFNBQVNDLFdBQVcsUUFBUSwyQ0FBMkM7QUFDdkUsU0FBU0Msa0JBQWtCLFFBQVEsc0RBQXNEO0FBQ3pGLFNBQVNDLG1CQUFtQixRQUFRLHlEQUF5RDtBQUM3RixTQUFTQyxRQUFRLFFBQVEsMkJBQTJCO0FBQ3BELFNB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
@@ -0,0 +1,41 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ export var DROPDOWN_GAP_PX = 6;
3
+ export var CARD_MENU_ITEM_HEIGHT_PX = 40;
4
+ export var resolveDropdownPlacement = function resolveDropdownPlacement(anchorRect, dropdownHeight) {
5
+ var viewportHeight = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : window.innerHeight;
6
+ var spaceBelow = viewportHeight - anchorRect.bottom - DROPDOWN_GAP_PX;
7
+ var spaceAbove = anchorRect.top - DROPDOWN_GAP_PX;
8
+ if (spaceBelow >= dropdownHeight) return 'bottom';
9
+ if (spaceAbove >= dropdownHeight) return 'top';
10
+ return spaceBelow >= spaceAbove ? 'bottom' : 'top';
11
+ };
12
+ export var formatSkillDisplayName = function formatSkillDisplayName(name) {
13
+ var normalized = name.replace(/^(@\/|#)/, '');
14
+ return "#".concat(normalized);
15
+ };
16
+ export var filterAndSortSkills = function filterAndSortSkills(skills, searchQuery) {
17
+ var normalizedQuery = searchQuery.toLowerCase();
18
+ var matched = normalizedQuery ? skills.filter(function (skill) {
19
+ return skill.name.toLowerCase().includes(normalizedQuery);
20
+ }) : skills;
21
+ return _toConsumableArray(matched).sort(function (a, b) {
22
+ return a.name.localeCompare(b.name);
23
+ });
24
+ };
25
+ export var resolveSkillsCardMenuHeightPx = function resolveSkillsCardMenuHeightPx(isMineTab) {
26
+ return isMineTab ? CARD_MENU_ITEM_HEIGHT_PX * 3 : CARD_MENU_ITEM_HEIGHT_PX;
27
+ };
28
+ export var buildSkillDeleteModalChat = function buildSkillDeleteModalChat(skill) {
29
+ return skill ? {
30
+ title: skill.name,
31
+ id: skill.id
32
+ } : null;
33
+ };
34
+ export var resolveSkillCreateAnalyticsSource = function resolveSkillCreateAnalyticsSource(activeTab, loading, mySkillsCount, searchQuery) {
35
+ var fromEmpty = activeTab === 'mine' && !loading && mySkillsCount === 0 && !searchQuery;
36
+ return fromEmpty ? 'empty' : 'catalog';
37
+ };
38
+ export var shouldShowSkillsToolbar = function shouldShowSkillsToolbar(isMineTab, isMineEmpty, tabSkillsCount, searchQuery) {
39
+ return isMineTab ? !isMineEmpty : tabSkillsCount > 0 || !!searchQuery;
40
+ };
41
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEUk9QRE9XTl9HQVBfUFgiLCJDQVJEX01FTlVfSVRFTV9IRUlHSFRfUFgiLCJyZXNvbHZlRHJvcGRvd25QbGFjZW1lbnQiLCJhbmNob3JSZWN0IiwiZHJvcGRvd25IZWlnaHQiLCJ2aWV3cG9ydEhlaWdodCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIndpbmRvdyIsImlubmVySGVpZ2h0Iiwic3BhY2VCZWxvdyIsImJvdHRvbSIsInNwYWNlQWJvdmUiLCJ0b3AiLCJmb3JtYXRTa2lsbERpc3BsYXlOYW1lIiwibmFtZSIsIm5vcm1hbGl6ZWQiLCJyZXBsYWNlIiwiY29uY2F0IiwiZmlsdGVyQW5kU29ydFNraWxscyIsInNraWxscyIsInNlYXJjaFF1ZXJ5Iiwibm9ybWFsaXplZFF1ZXJ5IiwidG9Mb3dlckNhc2UiLCJtYXRjaGVkIiwiZmlsdGVyIiwic2tpbGwiLCJpbmNsdWRlcyIsIl90b0NvbnN1bWFibGVBcnJheSIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJyZXNvbHZlU2tpbGxzQ2FyZE1lbnVIZWlnaHRQeCIsImlzTWluZVRhYiIsImJ1aWxkU2tpbGxEZWxldGVNb2RhbENoYXQiLCJ0aXRsZSIsImlkIiwicmVzb2x2ZVNraWxsQ3JlYXRlQW5hbHl0aWNzU291cmNlIiwiYWN0aXZlVGFiIiwibG9hZGluZyIsIm15U2tpbGxzQ291bnQiLCJmcm9tRW1wdHkiLCJzaG91bGRTaG93U2tpbGxzVG9vbGJhciIsImlzTWluZUVtcHR5IiwidGFiU2tpbGxzQ291bnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTXlTa2lsbHMvQ2hhdEFJTXlTa2lsbHMuaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNraWxsIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc2tpbGwnXG5cbmV4cG9ydCB0eXBlIERyb3Bkb3duUGxhY2VtZW50ID0gJ3RvcCcgfCAnYm90dG9tJ1xuXG5leHBvcnQgY29uc3QgRFJPUERPV05fR0FQX1BYID0gNlxuZXhwb3J0IGNvbnN0IENBUkRfTUVOVV9JVEVNX0hFSUdIVF9QWCA9IDQwXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlRHJvcGRvd25QbGFjZW1lbnQgPSAoXG4gIGFuY2hvclJlY3Q6IFBpY2s8RE9NUmVjdCwgJ3RvcCcgfCAnYm90dG9tJz4sXG4gIGRyb3Bkb3duSGVpZ2h0OiBudW1iZXIsXG4gIHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0XG4pOiBEcm9wZG93blBsYWNlbWVudCA9PiB7XG4gIGNvbnN0IHNwYWNlQmVsb3cgPSB2aWV3cG9ydEhlaWdodCAtIGFuY2hvclJlY3QuYm90dG9tIC0gRFJPUERPV05fR0FQX1BYXG4gIGNvbnN0IHNwYWNlQWJvdmUgPSBhbmNob3JSZWN0LnRvcCAtIERST1BET1dOX0dBUF9QWFxuXG4gIGlmIChzcGFjZUJlbG93ID49IGRyb3Bkb3duSGVpZ2h0KSByZXR1cm4gJ2JvdHRvbSdcbiAgaWYgKHNwYWNlQWJvdmUgPj0gZHJvcGRvd25IZWlnaHQpIHJldHVybiAndG9wJ1xuICByZXR1cm4gc3BhY2VCZWxvdyA+PSBzcGFjZUFib3ZlID8gJ2JvdHRvbScgOiAndG9wJ1xufVxuXG5leHBvcnQgY29uc3QgZm9ybWF0U2tpbGxEaXNwbGF5TmFtZSA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gbmFtZS5yZXBsYWNlKC9eKEBcXC98IykvLCAnJylcbiAgcmV0dXJuIGAjJHtub3JtYWxpemVkfWBcbn1cblxuZXhwb3J0IGNvbnN0IGZpbHRlckFuZFNvcnRTa2lsbHMgPSAoc2tpbGxzOiBTa2lsbFtdLCBzZWFyY2hRdWVyeTogc3RyaW5nKTogU2tpbGxbXSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IHNlYXJjaFF1ZXJ5LnRvTG93ZXJDYXNlKClcbiAgY29uc3QgbWF0Y2hlZCA9IG5vcm1hbGl6ZWRRdWVyeSA/IHNraWxscy5maWx0ZXIoc2tpbGwgPT4gc2tpbGwubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkpIDogc2tpbGxzXG4gIHJldHVybiBbLi4ubWF0Y2hlZF0uc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSlcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTa2lsbHNDYXJkTWVudUhlaWdodFB4ID0gKGlzTWluZVRhYjogYm9vbGVhbik6IG51bWJlciA9PlxuICBpc01pbmVUYWIgPyBDQVJEX01FTlVfSVRFTV9IRUlHSFRfUFggKiAzIDogQ0FSRF9NRU5VX0lURU1fSEVJR0hUX1BYXG5cbmV4cG9ydCBjb25zdCBidWlsZFNraWxsRGVsZXRlTW9kYWxDaGF0ID0gKHNraWxsOiBTa2lsbCB8IG51bGwpOiB7IHRpdGxlOiBzdHJpbmc7IGlkOiBzdHJpbmcgfSB8IG51bGwgPT5cbiAgc2tpbGwgPyB7IHRpdGxlOiBza2lsbC5uYW1lLCBpZDogc2tpbGwuaWQgfSA6IG51bGxcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTa2lsbENyZWF0ZUFuYWx5dGljc1NvdXJjZSA9IChcbiAgYWN0aXZlVGFiOiAnbWluZScgfCAnc2hhcmVkJyxcbiAgbG9hZGluZzogYm9vbGVhbixcbiAgbXlTa2lsbHNDb3VudDogbnVtYmVyLFxuICBzZWFyY2hRdWVyeTogc3RyaW5nXG4pOiAnY2F0YWxvZycgfCAnZW1wdHknID0+IHtcbiAgY29uc3QgZnJvbUVtcHR5ID0gYWN0aXZlVGFiID09PSAnbWluZScgJiYgIWxvYWRpbmcgJiYgbXlTa2lsbHNDb3VudCA9PT0gMCAmJiAhc2VhcmNoUXVlcnlcbiAgcmV0dXJuIGZyb21FbXB0eSA/ICdlbXB0eScgOiAnY2F0YWxvZydcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dTa2lsbHNUb29sYmFyID0gKFxuICBpc01pbmVUYWI6IGJvb2xlYW4sXG4gIGlzTWluZUVtcHR5OiBib29sZWFuLFxuICB0YWJTa2lsbHNDb3VudDogbnVtYmVyLFxuICBzZWFyY2hRdWVyeTogc3RyaW5nXG4pOiBib29sZWFuID0+IChpc01pbmVUYWIgPyAhaXNNaW5lRW1wdHkgOiB0YWJTa2lsbHNDb3VudCA+IDAgfHwgISFzZWFyY2hRdWVyeSlcbiJdLCJtYXBwaW5ncyI6IjtBQUlBLE9BQU8sSUFBTUEsZUFBZSxHQUFHLENBQUM7QUFDaEMsT0FBTyxJQUFNQyx3QkFBd0IsR0FBRyxFQUFFO0FBRTFDLE9BQU8sSUFBTUMsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FDbkNDLFVBQTJDLEVBQzNDQyxjQUFzQixFQUVBO0VBQUEsSUFEdEJDLGNBQWMsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUdHLE1BQU0sQ0FBQ0MsV0FBVztFQUVuQyxJQUFNQyxVQUFVLEdBQUdOLGNBQWMsR0FBR0YsVUFBVSxDQUFDUyxNQUFNLEdBQUdaLGVBQWU7RUFDdkUsSUFBTWEsVUFBVSxHQUFHVixVQUFVLENBQUNXLEdBQUcsR0FBR2QsZUFBZTtFQUVuRCxJQUFJVyxVQUFVLElBQUlQLGNBQWMsRUFBRSxPQUFPLFFBQVE7RUFDakQsSUFBSVMsVUFBVSxJQUFJVCxjQUFjLEVBQUUsT0FBTyxLQUFLO0VBQzlDLE9BQU9PLFVBQVUsSUFBSUUsVUFBVSxHQUFHLFFBQVEsR0FBRyxLQUFLO0FBQ3BELENBQUM7QUFFRCxPQUFPLElBQU1FLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUlDLElBQVksRUFBYTtFQUM5RCxJQUFNQyxVQUFVLEdBQUdELElBQUksQ0FBQ0UsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7RUFDL0MsV0FBQUMsTUFBQSxDQUFXRixVQUFVO0FBQ3ZCLENBQUM7QUFFRCxPQUFPLElBQU1HLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUlDLE1BQWUsRUFBRUMsV0FBbUIsRUFBYztFQUNwRixJQUFNQyxlQUFlLEdBQUdELFdBQVcsQ0FBQ0UsV0FBVyxDQUFDLENBQUM7RUFDakQsSUFBTUMsT0FBTyxHQUFHRixlQUFlLEdBQUdGLE1BQU0sQ0FBQ0ssTUFBTSxDQUFDLFVBQUFDLEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUNYLElBQUksQ0FBQ1EsV0FBVyxDQUFDLENBQUMsQ0FBQ0ksUUFBUSxDQUFDTCxlQUFlLENBQUM7RUFBQSxFQUFDLEdBQUdGLE1BQU07RUFDckgsT0FBT1Esa0JBQUEsQ0FBSUosT0FBTyxFQUFFSyxJQUFJLENBQUMsVUFBQ0MsQ0FBQyxFQUFFQyxDQUFDO0lBQUEsT0FBS0QsQ0FBQyxDQUFDZixJQUFJLENBQUNpQixhQUFhLENBQUNELENBQUMsQ0FBQ2hCLElBQUksQ0FBQztFQUFBLEVBQUM7QUFDbEUsQ0FBQztBQUVELE9BQU8sSUFBTWtCLDZCQUE2QixHQUFHLFNBQWhDQSw2QkFBNkJBLENBQUlDLFNBQWtCO0VBQUEsT0FDOURBLFNBQVMsR0FBR2xDLHdCQUF3QixHQUFHLENBQUMsR0FBR0Esd0JBQXdCO0FBQUE7QUFFckUsT0FBTyxJQUFNbUMseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FBSVQsS0FBbUI7RUFBQSxPQUMzREEsS0FBSyxHQUFHO0lBQUVVLEtBQUssRUFBRVYsS0FBSyxDQUFDWCxJQUFJO0lBQUVzQixFQUFFLEVBQUVYLEtBQUssQ0FBQ1c7RUFBRyxDQUFDLEdBQUcsSUFBSTtBQUFBO0FBRXBELE9BQU8sSUFBTUMsaUNBQWlDLEdBQUcsU0FBcENBLGlDQUFpQ0EsQ0FDNUNDLFNBQTRCLEVBQzVCQyxPQUFnQixFQUNoQkMsYUFBcUIsRUFDckJwQixXQUFtQixFQUNLO0VBQ3hCLElBQU1xQixTQUFTLEdBQUdILFNBQVMsS0FBSyxNQUFNLElBQUksQ0FBQ0MsT0FBTyxJQUFJQyxhQUFhLEtBQUssQ0FBQyxJQUFJLENBQUNwQixXQUFXO0VBQ3pGLE9BQU9xQixTQUFTLEdBQUcsT0FBTyxHQUFHLFNBQVM7QUFDeEMsQ0FBQztBQUVELE9BQU8sSUFBTUMsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbENULFNBQWtCLEVBQ2xCVSxXQUFvQixFQUNwQkMsY0FBc0IsRUFDdEJ4QixXQUFtQjtFQUFBLE9BQ05hLFNBQVMsR0FBRyxDQUFDVSxXQUFXLEdBQUdDLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDeEIsV0FBVztBQUFBLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=