@projectcor/maia-components 2.11.66-8 → 2.11.67-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/components/atoms/Chip/Chip.js +15 -50
- package/lib/components/atoms/Chip/styles.js +5 -9
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +9 -5
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +4 -2
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +35 -8
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +37 -28
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +30 -42
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +13 -21
- package/lib/components/atoms/MAIAInput/MAIAInput.js +29 -24
- package/lib/components/atoms/icons/MAIAIsologo.js +5 -2
- package/lib/components/atoms/icons/SkillIcon.js +30 -0
- package/lib/components/atoms/icons/SkillsNavIcon.js +27 -0
- package/lib/components/atoms/icons/TaskLinkIcon.js +27 -0
- package/lib/components/atoms/icons/index.js +3 -1
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +19 -2
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +48 -298
- package/lib/components/molecules/ChatAIHome/styles.js +26 -63
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +150 -57
- package/lib/components/molecules/ChatAIMessages/newStyles.js +12 -21
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +80 -223
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +4 -27
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +46 -19
- package/lib/components/molecules/ChatAIModal/constants.js +6 -2
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +123 -28
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +66 -41
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +357 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +145 -0
- package/lib/components/molecules/ChatAIMySkills/index.js +2 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +24 -78
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +7 -22
- package/lib/components/molecules/ChatFooter/styles.js +2 -11
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
- package/lib/components/molecules/Sidebar/Sidebar.js +66 -21
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +40 -26
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +10 -7
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +160 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +34 -0
- package/lib/components/organisms/AbmSkillGenerateModal/index.js +2 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +446 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +98 -0
- package/lib/components/organisms/AbmSkillModal/index.js +2 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +8 -1
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +2 -2
- package/lib/constants/config.js +4 -1
- package/lib/constants/maiaTaskPanelAccess.js +5 -7
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +4 -1
- package/lib/constants/taskLinkIcon.js +15 -6
- package/lib/constants/taskUrls.js +1 -3
- package/lib/context/global-context.js +1 -8
- package/lib/hooks/index.js +1 -2
- package/lib/hooks/useChatManager/useChatManager.js +125 -149
- package/lib/hooks/useChatMessages/useChatMessages.js +5 -34
- package/lib/hooks/useContextMentions.js +60 -15
- package/lib/hooks/useEntitySearch.js +337 -96
- package/lib/hooks/useEvent.js +4 -3
- package/lib/hooks/useFrequentlyAskedQuestions.js +10 -12
- package/lib/hooks/useFrequentlyUsedActions.js +3 -5
- package/lib/hooks/useMentionAllowedTypes.js +41 -16
- package/lib/hooks/useMentionPopover.js +54 -49
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +18 -27
- package/lib/hooks/useProjectSearch.js +28 -4
- package/lib/hooks/useProjectSummaryConfig.js +4 -74
- package/lib/hooks/useRecentClientsSearch.js +34 -4
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +16 -24
- package/lib/lang/br/index.js +60 -32
- package/lib/lang/en/index.js +60 -32
- package/lib/lang/es/index.js +60 -32
- package/lib/lang/fr/index.js +60 -32
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +3 -6
- package/lib/services/maia/Agents/getAgents.js +223 -199
- package/lib/services/maia/Chats/getChatMessages.js +6 -34
- package/lib/services/maia/Chats/getChatsByUserId.js +2 -10
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +4 -6
- package/lib/services/maia/Orchestrator/orchestrator.js +5 -21
- package/lib/services/maia/Skills/createSkill.js +39 -0
- package/lib/services/maia/Skills/deleteSkill.js +38 -0
- package/lib/services/maia/Skills/generateSkill.js +41 -0
- package/lib/services/maia/Skills/getSkills.js +90 -0
- package/lib/services/maia/Skills/updateSkill.js +39 -0
- package/lib/services/maia/index.js +2 -4
- package/lib/services/utils/validateIsMaia.js +2 -2
- package/lib/types/agent.js +1 -1
- package/lib/types/contextMention.js +1 -1
- package/lib/types/skill.js +2 -0
- package/lib/utils/agentDisplayName.js +19 -11
- package/lib/utils/contextMentionIcons.js +35 -16
- package/lib/utils/contextMentionTriggers.js +53 -0
- package/lib/utils/corConnectorMentionTypes.js +37 -0
- package/lib/utils/hitlAnalytics.js +6 -5
- package/lib/utils/normalizeAgentConnectors.js +32 -0
- package/lib/utils/renderContextMentions.js +9 -6
- package/package.json +1 -1
- package/lib/hooks/useContextPinPopover.js +0 -235
- package/lib/hooks/useRecentContexts.js +0 -86
- package/lib/services/maia/RecentContexts/getRecentContexts.js +0 -54
- package/lib/services/maia/RecentContexts/index.js +0 -6
- package/lib/utils/entityLinkRender.js +0 -132
|
@@ -1,348 +1,106 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
2
|
/* eslint-disable react/function-component-definition */
|
|
6
3
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
7
4
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
8
5
|
import { useEffect, useRef, useState, useCallback, useMemo } from 'react';
|
|
9
6
|
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
10
|
-
import { ListChecklist } from '@projectcor/icons/lib/components/ListChecklist';
|
|
11
7
|
import { useT } from '../../../hooks/useT';
|
|
12
|
-
import {
|
|
13
|
-
import { SCCAIHomeContainer, SCCAIHomeContent, SCCAIHomeContentInner, SCCAIHomeGradientTop, SCCAIHomeGradientBottom, SCCAIHomeHeader, SCCAIHomeGreeting, SCCAIHomeAgentInfoContainer, SCCAIHomeAgentInfo, SCCAIHomeProjectSummary, SCCAIHomeProjectSummaryContent, SCCAIHomeProjectSummaryTitle, SCCAIHomeProjectSummaryDescription, SCCAHWrapperSummaryProject, SCCAIHomeIntroduction, SCCAIHomeCreatedByContainer, SCCAIHomeCreatedByText, SCCAIHomeCreatedByTextName, SCCAIHomeIconContainer, SCCAIHomeLogoWrapper, SCCAIHomeMaiaHeaderStack, SCCAIHomeTitle, SCCAIHomeSubtitle, SCCAIHomeDynamicSection, SCCAIHomeRecentContexts, SCCAIHomeRecentContextsList, SCCAIHomeRecentContextPill, SCCAIHomeRecentContextPillIcon, SCCAIHomeRecentContextPillText, SCCAIHomeRecentContextPillSkeleton } from './styles';
|
|
8
|
+
import { SCCAIHomeContainer, SCCAIHomeContent, SCCAIHomeContentInner, SCCAIHomeGradientTop, SCCAIHomeGradientBottom, SCCAIHomeHeader, SCCAIHomeGreeting, SCCAIHomeAgentInfoContainer, SCCAIHomeAgentInfo, SCCAIHomeProjectSummary, SCCAIHomeProjectSummaryContent, SCCAIHomeProjectSummaryTitle, SCCAIHomeProjectSummaryDescription, SCCAHWrapperSummaryProject, SCCAIHomeIntroduction, SCCAIHomeCreatedByContainer, SCCAIHomeCreatedByText, SCCAIHomeCreatedByTextName, SCCAIHomeIconContainer, SCCAIHomeLogoWrapper, SCCAIHomeMaiaHeaderStack, SCCAIHomeDynamicSection } from './styles';
|
|
14
9
|
import { useGlobalContext } from '../../../context/global-context';
|
|
15
|
-
import { CORUserRole, useUser } from '../../../context/cor-user';
|
|
16
|
-
import { useResizeListener } from '../../../hooks/useResize';
|
|
17
|
-
import { getContextMentionIcon } from '../../../utils/contextMentionIcons';
|
|
18
10
|
import { validateIsMaia } from '../../../services/utils/validateIsMaia';
|
|
11
|
+
import { isMaiakerAgent } from '../../../utils/agentDisplayName';
|
|
19
12
|
import { FrequentlyAskedQuestions } from '../../atoms/FrequentlyAskedQuestions';
|
|
20
13
|
import { FrequentlyUsedActions } from '../../atoms/FrequentlyUsedActions';
|
|
21
14
|
import { useFrequentlyUsedActions } from '../../../hooks/useFrequentlyUsedActions';
|
|
22
15
|
import { useFrequentlyAskedQuestions } from '../../../hooks/useFrequentlyAskedQuestions';
|
|
23
|
-
import { useRecentContexts } from '../../../hooks/useRecentContexts';
|
|
24
16
|
import { MAIAIsologo } from '../../atoms/icons/MAIAIsologo';
|
|
25
17
|
import { TemplateGradientIcon } from '../../atoms/icons/TemplateGradientIcon';
|
|
26
18
|
import { ChatAIHomeMaiaker } from './ChatAIHomeMaiaker';
|
|
27
|
-
import {
|
|
19
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
28
20
|
export var FrequentQuestions = /*#__PURE__*/function (FrequentQuestions) {
|
|
29
21
|
FrequentQuestions["rentabilidad_proyecto"] = "rentabilidad_proyecto";
|
|
30
22
|
FrequentQuestions["avance_proyecto"] = "avance_proyecto";
|
|
31
23
|
return FrequentQuestions;
|
|
32
24
|
}({});
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
label = _ref.label,
|
|
39
|
-
onClick = _ref.onClick;
|
|
40
|
-
var textRef = useRef(null);
|
|
41
|
-
var _useResizeListener = useResizeListener(textRef, [label]),
|
|
42
|
-
showTooltip = _useResizeListener.showTooltip;
|
|
43
|
-
return /*#__PURE__*/_jsxs(SCCAIHomeRecentContextPill, {
|
|
44
|
-
type: "button",
|
|
45
|
-
onClick: onClick,
|
|
46
|
-
children: [/*#__PURE__*/_jsx(SCCAIHomeRecentContextPillIcon, {
|
|
47
|
-
children: context.type === 'task' ? /*#__PURE__*/_jsx(ListChecklist, {
|
|
48
|
-
color: RECENT_CONTEXT_ICON_COLOR,
|
|
49
|
-
width: "14px",
|
|
50
|
-
height: "14px"
|
|
51
|
-
}) : getContextMentionIcon(context.type, RECENT_CONTEXT_ICON_COLOR, undefined, 14)
|
|
52
|
-
}), /*#__PURE__*/_jsx(SCCAIHomeRecentContextPillText, {
|
|
53
|
-
ref: textRef,
|
|
54
|
-
children: showTooltip ? /*#__PURE__*/_jsx(Tooltip, {
|
|
55
|
-
title: label,
|
|
56
|
-
children: /*#__PURE__*/_jsx("span", {
|
|
57
|
-
children: label
|
|
58
|
-
})
|
|
59
|
-
}) : label
|
|
60
|
-
})]
|
|
61
|
-
});
|
|
62
|
-
};
|
|
63
|
-
var parseNumericId = function parseNumericId(value) {
|
|
64
|
-
if (value === null || value === undefined || value === '') return null;
|
|
65
|
-
var parsed = Number(value);
|
|
66
|
-
return Number.isFinite(parsed) ? parsed : null;
|
|
67
|
-
};
|
|
68
|
-
var getAllowedRecentContextTypes = function getAllowedRecentContextTypes(roleId) {
|
|
69
|
-
if (roleId === CORUserRole.CLEVEL || roleId === CORUserRole.DIRECTOR || roleId === CORUserRole.PROJECT_MANAGER) {
|
|
70
|
-
return new Set(['client', 'project', 'task']);
|
|
71
|
-
}
|
|
72
|
-
if (roleId === CORUserRole.COLLABORATOR) {
|
|
73
|
-
return new Set(['task']);
|
|
74
|
-
}
|
|
75
|
-
return new Set();
|
|
76
|
-
};
|
|
77
|
-
export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
78
|
-
var handlers = _ref2.handlers,
|
|
79
|
-
onStartChat = _ref2.onStartChat,
|
|
80
|
-
expanded = _ref2.expanded,
|
|
81
|
-
floating = _ref2.floating;
|
|
25
|
+
export var ChatAIHome = function ChatAIHome(_ref) {
|
|
26
|
+
var handlers = _ref.handlers,
|
|
27
|
+
onStartChat = _ref.onStartChat,
|
|
28
|
+
expanded = _ref.expanded,
|
|
29
|
+
floating = _ref.floating;
|
|
82
30
|
var _useT = useT(),
|
|
83
31
|
t = _useT.t,
|
|
84
32
|
i18n = _useT.i18n;
|
|
85
|
-
var event = useEvent();
|
|
86
|
-
var user = useUser();
|
|
87
33
|
var _useGlobalContext = useGlobalContext(),
|
|
88
34
|
agent = _useGlobalContext.agent,
|
|
89
|
-
section = _useGlobalContext.section
|
|
90
|
-
client = _useGlobalContext.client,
|
|
91
|
-
project = _useGlobalContext.project,
|
|
92
|
-
task = _useGlobalContext.task,
|
|
93
|
-
chipsProject = _useGlobalContext.chipsProject,
|
|
94
|
-
setClient = _useGlobalContext.setClient,
|
|
95
|
-
setProject = _useGlobalContext.setProject,
|
|
96
|
-
setTask = _useGlobalContext.setTask,
|
|
97
|
-
setChipsProject = _useGlobalContext.setChipsProject;
|
|
35
|
+
section = _useGlobalContext.section;
|
|
98
36
|
var isMAIA = validateIsMaia(agent);
|
|
99
37
|
var floatingCustomCenter = !!(floating && (agent === null || agent === void 0 ? void 0 : agent.type) === 'custom');
|
|
100
38
|
var lang = i18n.language === 'br' ? 'pt' : i18n.language;
|
|
101
39
|
var summaryProjectAccess = typeof window !== 'undefined' && (String(window.MAIA_PROJECT_SUMMARY_FEATURE_ACCESS).toLowerCase() === 'true' || String(window.maiaProjectSummaryAccess).toLowerCase() === 'true');
|
|
102
40
|
var faqsAccess = true;
|
|
103
41
|
var showProjectSummary = !!(isMAIA && summaryProjectAccess);
|
|
104
|
-
|
|
105
|
-
//
|
|
106
|
-
|
|
107
|
-
var
|
|
108
|
-
var
|
|
109
|
-
return getAllowedRecentContextTypes(user.role_id);
|
|
110
|
-
}, [user.role_id]);
|
|
111
|
-
var _useRecentContexts = useRecentContexts({
|
|
112
|
-
enabled: isHeaderHome,
|
|
113
|
-
limit: RECENT_CONTEXTS_LIMIT
|
|
114
|
-
}),
|
|
115
|
-
fetchedRecentContexts = _useRecentContexts.contexts,
|
|
116
|
-
recentContextsLoading = _useRecentContexts.loading;
|
|
117
|
-
var recentContexts = useMemo(function () {
|
|
118
|
-
return fetchedRecentContexts.filter(function (context) {
|
|
119
|
-
return allowedRecentContextTypes.has(context.type);
|
|
120
|
-
});
|
|
121
|
-
}, [fetchedRecentContexts, allowedRecentContextTypes]);
|
|
122
|
-
|
|
123
|
-
// Home del orchestrator en 2 pasos:
|
|
124
|
-
// - Paso 1 (sin contexto pineado): se muestran solo los contextos recientes.
|
|
125
|
-
// - Paso 2 (contexto pineado): se muestran las FAQs/acciones que referencian ese contexto.
|
|
126
|
-
// Volver al paso 1 = quitar el chip (limpia el contexto global).
|
|
127
|
-
var hasPinnedContext = !!(task !== null && task !== void 0 && task.id || chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId || client !== null && client !== void 0 && client.id || project !== null && project !== void 0 && project.id);
|
|
128
|
-
var isRecentContextsStep = isHeaderHome && !hasPinnedContext;
|
|
129
|
-
var isContextHomeStep = isHeaderHome && hasPinnedContext;
|
|
130
|
-
|
|
131
|
-
// Contexto activo para derivar FAQs/acciones (paso 2). Preferimos el pill clickeado;
|
|
132
|
-
// si no, lo reconstruimos desde el contexto global.
|
|
133
|
-
var _useState = useState(null),
|
|
134
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
135
|
-
selectedContext = _useState2[0],
|
|
136
|
-
setSelectedContext = _useState2[1];
|
|
137
|
-
useEffect(function () {
|
|
138
|
-
if (!hasPinnedContext) setSelectedContext(null);
|
|
139
|
-
}, [hasPinnedContext]);
|
|
140
|
-
var activeContext = useMemo(function () {
|
|
141
|
-
if (selectedContext) return selectedContext;
|
|
142
|
-
if (!isContextHomeStep) return null;
|
|
143
|
-
if (task !== null && task !== void 0 && task.id) return {
|
|
144
|
-
type: 'task',
|
|
145
|
-
id: task.id,
|
|
146
|
-
name: task.name
|
|
147
|
-
};
|
|
148
|
-
if (chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId) return {
|
|
149
|
-
type: 'project',
|
|
150
|
-
id: chipsProject.projectId,
|
|
151
|
-
name: chipsProject.projectName
|
|
152
|
-
};
|
|
153
|
-
if (client !== null && client !== void 0 && client.id) return {
|
|
154
|
-
type: 'client',
|
|
155
|
-
id: client.id,
|
|
156
|
-
name: client.name
|
|
157
|
-
};
|
|
158
|
-
return null;
|
|
159
|
-
}, [selectedContext, isContextHomeStep, task === null || task === void 0 ? void 0 : task.id, task === null || task === void 0 ? void 0 : task.name, chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId, chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectName, client === null || client === void 0 ? void 0 : client.id, client === null || client === void 0 ? void 0 : client.name]);
|
|
160
|
-
|
|
161
|
-
// entity_type del contexto pineado (project/client/task), tomado del contexto global.
|
|
162
|
-
// Aplica tanto al abrir MAIA desde una sección específica como al cambiar de conversación.
|
|
163
|
-
var pinnedEntityType = useMemo(function () {
|
|
164
|
-
if (task !== null && task !== void 0 && task.id) return 'task';
|
|
165
|
-
if (chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId || project !== null && project !== void 0 && project.id) return 'project';
|
|
166
|
-
if (client !== null && client !== void 0 && client.id) return 'client';
|
|
167
|
-
return undefined;
|
|
168
|
-
}, [task === null || task === void 0 ? void 0 : task.id, chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId, project === null || project === void 0 ? void 0 : project.id, client === null || client === void 0 ? void 0 : client.id]);
|
|
169
|
-
|
|
170
|
-
// FAQs/acciones:
|
|
171
|
-
// - header-home (orchestrator), paso 2: filtradas por `entity_type` del contexto seleccionado.
|
|
172
|
-
// - homes de proyecto/cliente/tarea (sección): filtradas por el `entity_type` del contexto seteado.
|
|
173
|
-
var realListsAgentId = function () {
|
|
174
|
-
if (!isMAIA || isMaiaker) return undefined;
|
|
175
|
-
if (isHeaderHome) return isContextHomeStep ? agent === null || agent === void 0 ? void 0 : agent.id : undefined;
|
|
176
|
-
return agent === null || agent === void 0 ? void 0 : agent.id;
|
|
177
|
-
}();
|
|
178
|
-
var realListsEntityType = function () {
|
|
179
|
-
if (!isHeaderHome) return pinnedEntityType;
|
|
180
|
-
return isContextHomeStep ? activeContext === null || activeContext === void 0 ? void 0 : activeContext.type : undefined;
|
|
181
|
-
}();
|
|
182
|
-
var _useFrequentlyUsedAct = useFrequentlyUsedActions(realListsAgentId, section, realListsEntityType),
|
|
42
|
+
var isMaiaker = isMaiakerAgent(agent);
|
|
43
|
+
// FUA y FAQ solo aplican a agentes clone (los custom no las tienen habilitadas por ahora).
|
|
44
|
+
// Maiaker (clone global) queda excluido como antes.
|
|
45
|
+
var homeListsAgentId = isMAIA && !isMaiaker ? agent === null || agent === void 0 ? void 0 : agent.id : undefined;
|
|
46
|
+
var _useFrequentlyUsedAct = useFrequentlyUsedActions(homeListsAgentId, section),
|
|
183
47
|
agentFuas = _useFrequentlyUsedAct.actions,
|
|
184
48
|
fuasLoading = _useFrequentlyUsedAct.loading;
|
|
185
|
-
var _useFrequentlyAskedQu = useFrequentlyAskedQuestions(
|
|
49
|
+
var _useFrequentlyAskedQu = useFrequentlyAskedQuestions(homeListsAgentId, lang),
|
|
186
50
|
agentFaqs = _useFrequentlyAskedQu.faqs,
|
|
187
51
|
faqsLoading = _useFrequentlyAskedQu.loading,
|
|
188
52
|
handleGetFrequentlyAskedQuestions = _useFrequentlyAskedQu.handleGetFrequentlyAskedQuestions;
|
|
189
53
|
var faqsFetchRef = useRef(null);
|
|
190
54
|
useEffect(function () {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
var
|
|
194
|
-
var lastKey = faqsFetchRef.current ? "".concat(faqsFetchRef.current.agentId, "-").concat(faqsFetchRef.current.lang, "-").concat((_faqsFetchRef$current = faqsFetchRef.current.entityType) !== null && _faqsFetchRef$current !== void 0 ? _faqsFetchRef$current : 'all') : null;
|
|
55
|
+
if (!isMAIA || isMaiaker || section === 'task' || !(agent !== null && agent !== void 0 && agent.id)) return;
|
|
56
|
+
var currentKey = "".concat(agent.id, "-").concat(lang);
|
|
57
|
+
var lastKey = faqsFetchRef.current ? "".concat(faqsFetchRef.current.agentId, "-").concat(faqsFetchRef.current.lang) : null;
|
|
195
58
|
if (currentKey !== lastKey) {
|
|
196
59
|
faqsFetchRef.current = {
|
|
197
|
-
agentId:
|
|
198
|
-
lang: lang
|
|
199
|
-
entityType: realListsEntityType
|
|
60
|
+
agentId: agent.id,
|
|
61
|
+
lang: lang
|
|
200
62
|
};
|
|
201
63
|
handleGetFrequentlyAskedQuestions({
|
|
202
|
-
agentId:
|
|
203
|
-
lang: lang
|
|
204
|
-
entityType: realListsEntityType
|
|
64
|
+
agentId: agent.id,
|
|
65
|
+
lang: lang
|
|
205
66
|
});
|
|
206
67
|
}
|
|
207
|
-
}, [
|
|
208
|
-
var
|
|
209
|
-
var
|
|
210
|
-
var
|
|
211
|
-
var fuasAreLoading = fuasLoading;
|
|
212
|
-
var showRecentContextsBlock = isRecentContextsStep && (recentContextsLoading || recentContexts.length > 0);
|
|
213
|
-
var shouldShowFaqs = (isContextHomeStep || !isHeaderHome && section !== 'task' && faqsAccess) && !isMaiaker && (faqs.length > 0 || faqsAreLoading);
|
|
214
|
-
var shouldShowFuas = !isMaiaker && (isContextHomeStep || !isHeaderHome) && (fuas.length > 0 || fuasAreLoading);
|
|
68
|
+
}, [isMaiaker, section, agent === null || agent === void 0 ? void 0 : agent.id, lang, handleGetFrequentlyAskedQuestions]);
|
|
69
|
+
var shouldShowFaqs = !isMaiaker && section !== 'task' && faqsAccess && (agentFaqs.length > 0 || faqsLoading);
|
|
70
|
+
var shouldShowFuas = !isMaiaker && (agentFuas.length > 0 || fuasLoading);
|
|
71
|
+
var hasAnyHomeListContent = !isMaiaker && section !== 'task' && faqsAccess && agentFaqs.length > 0 || !isMaiaker && agentFuas.length > 0;
|
|
215
72
|
var showProjectSummaryCard = showProjectSummary && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'project';
|
|
216
|
-
var showFAQs = !!(
|
|
73
|
+
var showFAQs = !!(hasAnyHomeListContent || showProjectSummaryCard || isMaiaker);
|
|
217
74
|
var homeScrollableLayout = showFAQs;
|
|
218
|
-
var showDynamicSection =
|
|
75
|
+
var showDynamicSection = hasAnyHomeListContent || shouldShowFaqs || shouldShowFuas || isMaiaker;
|
|
219
76
|
|
|
220
77
|
// Lógica del scroll con gradientes
|
|
221
78
|
var contentContainerRef = useRef(null);
|
|
79
|
+
var _useState = useState(false),
|
|
80
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
81
|
+
showTopGradient = _useState2[0],
|
|
82
|
+
setShowTopGradient = _useState2[1];
|
|
222
83
|
var _useState3 = useState(false),
|
|
223
84
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
224
|
-
|
|
225
|
-
|
|
85
|
+
showBottomGradient = _useState4[0],
|
|
86
|
+
setShowBottomGradient = _useState4[1];
|
|
226
87
|
var _useState5 = useState(false),
|
|
227
88
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
var _useState7 = useState(false),
|
|
231
|
-
_useState8 = _slicedToArray(_useState7, 2),
|
|
232
|
-
isScrolling = _useState8[0],
|
|
233
|
-
setIsScrolling = _useState8[1];
|
|
89
|
+
isScrolling = _useState6[0],
|
|
90
|
+
setIsScrolling = _useState6[1];
|
|
234
91
|
var scrollTimeoutRef = useRef(null);
|
|
235
92
|
|
|
236
|
-
// Saludo
|
|
93
|
+
// Saludo aleatorio desde agent.introduction (array con 3 variantes del back). En task, mensaje fijo i18n. Maiaker sin intro del agente.
|
|
237
94
|
var greeting = useMemo(function () {
|
|
238
95
|
if (isMaiaker) return '';
|
|
239
|
-
if (
|
|
240
|
-
if (isMAIA && pinnedEntityType) {
|
|
241
|
-
return t("homeMenu.contextHome.contextGreeting.".concat(pinnedEntityType));
|
|
242
|
-
}
|
|
96
|
+
if (section === 'task') return t('homeMenu.taskGreeting');
|
|
243
97
|
var intro = agent === null || agent === void 0 ? void 0 : agent.introduction;
|
|
244
98
|
if (!intro) return '';
|
|
245
99
|
if (Array.isArray(intro) && intro.length > 0) {
|
|
246
100
|
return intro[Math.floor(Math.random() * intro.length)];
|
|
247
101
|
}
|
|
248
102
|
return typeof intro === 'string' ? intro : '';
|
|
249
|
-
}, [agent === null || agent === void 0 ? void 0 : agent.id, agent === null || agent === void 0 ? void 0 : agent.introduction,
|
|
250
|
-
var handleSelectRecentContext = useCallback(function (context, order) {
|
|
251
|
-
var _context$parents, _context$parents2, _context$parents3, _context$parents4;
|
|
252
|
-
event(EVENTS.aiChatContextSelected, {
|
|
253
|
-
order: order,
|
|
254
|
-
type: context.type
|
|
255
|
-
});
|
|
256
|
-
var contextId = parseNumericId(context.id);
|
|
257
|
-
var clientId = parseNumericId((_context$parents = context.parents) === null || _context$parents === void 0 ? void 0 : _context$parents.client_id);
|
|
258
|
-
var projectId = parseNumericId((_context$parents2 = context.parents) === null || _context$parents2 === void 0 ? void 0 : _context$parents2.project_id);
|
|
259
|
-
var clientName = ((_context$parents3 = context.parents) === null || _context$parents3 === void 0 ? void 0 : _context$parents3.client_name) || '';
|
|
260
|
-
var projectName = ((_context$parents4 = context.parents) === null || _context$parents4 === void 0 ? void 0 : _context$parents4.project_name) || '';
|
|
261
|
-
setSelectedContext(context);
|
|
262
|
-
setTask(null);
|
|
263
|
-
setProject(null);
|
|
264
|
-
setClient === null || setClient === void 0 || setClient(null);
|
|
265
|
-
setChipsProject(null);
|
|
266
|
-
if (context.type === 'client') {
|
|
267
|
-
if (contextId == null) return;
|
|
268
|
-
setClient === null || setClient === void 0 || setClient({
|
|
269
|
-
id: contextId,
|
|
270
|
-
name: context.name
|
|
271
|
-
});
|
|
272
|
-
} else if (context.type === 'project') {
|
|
273
|
-
if (contextId == null) return;
|
|
274
|
-
setProject(_objectSpread(_objectSpread({
|
|
275
|
-
id: contextId,
|
|
276
|
-
name: context.name
|
|
277
|
-
}, clientId != null ? {
|
|
278
|
-
clientId: clientId
|
|
279
|
-
} : {}), clientId != null ? {
|
|
280
|
-
client: {
|
|
281
|
-
id: clientId,
|
|
282
|
-
name: clientName
|
|
283
|
-
}
|
|
284
|
-
} : {}));
|
|
285
|
-
setChipsProject({
|
|
286
|
-
projectId: String(contextId),
|
|
287
|
-
projectName: context.name,
|
|
288
|
-
clientName: clientName
|
|
289
|
-
});
|
|
290
|
-
} else if (context.type === 'task') {
|
|
291
|
-
setTask(_objectSpread(_objectSpread({
|
|
292
|
-
id: context.id,
|
|
293
|
-
name: context.name
|
|
294
|
-
}, projectId != null ? {
|
|
295
|
-
projectId: projectId
|
|
296
|
-
} : {}), clientId != null ? {
|
|
297
|
-
clientId: clientId
|
|
298
|
-
} : {}));
|
|
299
|
-
if (clientId != null) {
|
|
300
|
-
setClient === null || setClient === void 0 || setClient({
|
|
301
|
-
id: clientId,
|
|
302
|
-
name: clientName
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
if (projectId != null) {
|
|
306
|
-
setProject(_objectSpread(_objectSpread({
|
|
307
|
-
id: projectId,
|
|
308
|
-
name: projectName || "".concat(t('homeMenu.recentContexts.types.project'), " ").concat(projectId)
|
|
309
|
-
}, clientId != null ? {
|
|
310
|
-
clientId: clientId
|
|
311
|
-
} : {}), clientId != null ? {
|
|
312
|
-
client: {
|
|
313
|
-
id: clientId,
|
|
314
|
-
name: clientName
|
|
315
|
-
}
|
|
316
|
-
} : {}));
|
|
317
|
-
setChipsProject({
|
|
318
|
-
projectId: String(projectId),
|
|
319
|
-
projectName: projectName || "".concat(t('homeMenu.recentContexts.types.project'), " ").concat(projectId),
|
|
320
|
-
clientName: clientName
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
requestAnimationFrame(function () {
|
|
325
|
-
document.dispatchEvent(new CustomEvent('maia-input-refocus'));
|
|
326
|
-
});
|
|
327
|
-
}, [event, setChipsProject, setClient, setProject, setTask, t]);
|
|
328
|
-
var renderRecentContexts = function renderRecentContexts() {
|
|
329
|
-
if (!isRecentContextsStep) return null;
|
|
330
|
-
return /*#__PURE__*/_jsx(SCCAIHomeRecentContexts, {
|
|
331
|
-
children: /*#__PURE__*/_jsxs(SCCAIHomeRecentContextsList, {
|
|
332
|
-
children: [recentContextsLoading && RECENT_CONTEXT_SKELETON_KEYS.map(function (key) {
|
|
333
|
-
return /*#__PURE__*/_jsx(SCCAIHomeRecentContextPillSkeleton, {}, key);
|
|
334
|
-
}), !recentContextsLoading && recentContexts.map(function (context, index) {
|
|
335
|
-
return /*#__PURE__*/_jsx(RecentContextPill, {
|
|
336
|
-
context: context,
|
|
337
|
-
label: context.name.trim(),
|
|
338
|
-
onClick: function onClick() {
|
|
339
|
-
return handleSelectRecentContext(context, index + 1);
|
|
340
|
-
}
|
|
341
|
-
}, "".concat(context.type, "-").concat(context.id));
|
|
342
|
-
})]
|
|
343
|
-
})
|
|
344
|
-
});
|
|
345
|
-
};
|
|
103
|
+
}, [agent === null || agent === void 0 ? void 0 : agent.id, agent === null || agent === void 0 ? void 0 : agent.introduction, section, isMaiaker, t]);
|
|
346
104
|
var checkScroll = useCallback(function () {
|
|
347
105
|
var container = contentContainerRef.current;
|
|
348
106
|
if (!container || !homeScrollableLayout) return;
|
|
@@ -402,22 +160,14 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
402
160
|
});
|
|
403
161
|
}
|
|
404
162
|
return /*#__PURE__*/_jsxs(SCCAIHomeMaiaHeaderStack, {
|
|
405
|
-
$noGap: !
|
|
163
|
+
$noGap: !greeting,
|
|
406
164
|
children: [/*#__PURE__*/_jsx(SCCAIHomeIconContainer, {
|
|
407
165
|
children: /*#__PURE__*/_jsx(SCCAIHomeLogoWrapper, {
|
|
408
166
|
children: /*#__PURE__*/_jsx(MAIAIsologo, {})
|
|
409
167
|
})
|
|
410
|
-
}),
|
|
411
|
-
children: [/*#__PURE__*/_jsx(SCCAIHomeTitle, {
|
|
412
|
-
children: t('homeMenu.contextHome.greeting', {
|
|
413
|
-
name: user.firstName
|
|
414
|
-
})
|
|
415
|
-
}), /*#__PURE__*/_jsx(SCCAIHomeSubtitle, {
|
|
416
|
-
children: t(user.role_id === CORUserRole.COLLABORATOR ? 'homeMenu.contextHome.subtitleCollaborator' : 'homeMenu.contextHome.subtitle')
|
|
417
|
-
})]
|
|
418
|
-
}) : greeting && /*#__PURE__*/_jsx(SCCAIHomeGreeting, {
|
|
168
|
+
}), greeting ? /*#__PURE__*/_jsx(SCCAIHomeGreeting, {
|
|
419
169
|
children: greeting
|
|
420
|
-
})]
|
|
170
|
+
}) : null]
|
|
421
171
|
});
|
|
422
172
|
};
|
|
423
173
|
return /*#__PURE__*/_jsxs(SCCAIHomeContainer, {
|
|
@@ -457,21 +207,21 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
457
207
|
})]
|
|
458
208
|
}), showDynamicSection && /*#__PURE__*/_jsxs(SCCAIHomeDynamicSection, {
|
|
459
209
|
$grow: isMaiaker,
|
|
460
|
-
children: [
|
|
210
|
+
children: [shouldShowFaqs && /*#__PURE__*/_jsx(FrequentlyAskedQuestions, {
|
|
461
211
|
onStartChat: onStartChat,
|
|
462
212
|
showFAQs: showFAQs,
|
|
463
213
|
showProjectSummary: showProjectSummary,
|
|
464
214
|
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
465
215
|
lang: lang,
|
|
466
216
|
isScrolling: isScrolling,
|
|
467
|
-
faqs:
|
|
468
|
-
loading:
|
|
217
|
+
faqs: agentFaqs,
|
|
218
|
+
loading: faqsLoading
|
|
469
219
|
}), shouldShowFuas && /*#__PURE__*/_jsx(FrequentlyUsedActions, {
|
|
470
220
|
onStartChat: onStartChat,
|
|
471
221
|
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
472
222
|
isScrolling: isScrolling,
|
|
473
|
-
actions:
|
|
474
|
-
loading:
|
|
223
|
+
actions: agentFuas,
|
|
224
|
+
loading: fuasLoading
|
|
475
225
|
}), isMaiaker ? /*#__PURE__*/_jsx(ChatAIHomeMaiaker, {
|
|
476
226
|
onStartChat: onStartChat
|
|
477
227
|
}) : null]
|
|
@@ -482,4 +232,4 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
482
232
|
})]
|
|
483
233
|
});
|
|
484
234
|
};
|
|
485
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIlRvb2x0aXAiLCJMaXN0Q2hlY2tsaXN0IiwidXNlVCIsIkVWRU5UUyIsInVzZUV2ZW50IiwiU0NDQUlIb21lQ29udGFpbmVyIiwiU0NDQUlIb21lQ29udGVudCIsIlNDQ0FJSG9tZUNvbnRlbnRJbm5lciIsIlNDQ0FJSG9tZUdyYWRpZW50VG9wIiwiU0NDQUlIb21lR3JhZGllbnRCb3R0b20iLCJTQ0NBSUhvbWVIZWFkZXIiLCJTQ0NBSUhvbWVHcmVldGluZyIsIlNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lciIsIlNDQ0FJSG9tZUFnZW50SW5mbyIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24iLCJTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCIsIlNDQ0FJSG9tZUludHJvZHVjdGlvbiIsIlNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lciIsIlNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQiLCJTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQ0FJSG9tZUljb25Db250YWluZXIiLCJTQ0NBSUhvbWVMb2dvV3JhcHBlciIsIlNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayIsIlNDQ0FJSG9tZVRpdGxlIiwiU0NDQUlIb21lU3VidGl0bGUiLCJTQ0NBSUhvbWVEeW5hbWljU2VjdGlvbiIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzIiwiU0NDQUlIb21lUmVjZW50Q29udGV4dHNMaXN0IiwiU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGwiLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbEljb24iLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQiLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFNrZWxldG9uIiwidXNlR2xvYmFsQ29udGV4dCIsIkNPUlVzZXJSb2xlIiwidXNlVXNlciIsInVzZVJlc2l6ZUxpc3RlbmVyIiwiZ2V0Q29udGV4dE1lbnRpb25JY29uIiwidmFsaWRhdGVJc01haWEiLCJGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJGcmVxdWVudGx5VXNlZEFjdGlvbnMiLCJ1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMiLCJ1c2VGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJ1c2VSZWNlbnRDb250ZXh0cyIsIk1BSUFJc29sb2dvIiwiVGVtcGxhdGVHcmFkaWVudEljb24iLCJDaGF0QUlIb21lTWFpYWtlciIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIkZyZXF1ZW50UXVlc3Rpb25zIiwiUkVDRU5UX0NPTlRFWFRTX0xJTUlUIiwiUkVDRU5UX0NPTlRFWFRfSUNPTl9DT0xPUiIsIlJFQ0VOVF9DT05URVhUX1NLRUxFVE9OX0tFWVMiLCJSZWNlbnRDb250ZXh0UGlsbCIsIl9yZWYiLCJjb250ZXh0IiwibGFiZWwiLCJvbkNsaWNrIiwidGV4dFJlZiIsIl91c2VSZXNpemVMaXN0ZW5lciIsInNob3dUb29sdGlwIiwidHlwZSIsImNoaWxkcmVuIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsInVuZGVmaW5lZCIsInJlZiIsInRpdGxlIiwicGFyc2VOdW1lcmljSWQiLCJ2YWx1ZSIsInBhcnNlZCIsIk51bWJlciIsImlzRmluaXRlIiwiZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyIsInJvbGVJZCIsIkNMRVZFTCIsIkRJUkVDVE9SIiwiUFJPSkVDVF9NQU5BR0VSIiwiU2V0IiwiQ09MTEFCT1JBVE9SIiwiQ2hhdEFJSG9tZSIsIl9yZWYyIiwiaGFuZGxlcnMiLCJvblN0YXJ0Q2hhdCIsImV4cGFuZGVkIiwiZmxvYXRpbmciLCJfdXNlVCIsInQiLCJpMThuIiwiZXZlbnQiLCJ1c2VyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsInNlY3Rpb24iLCJjbGllbnQiLCJwcm9qZWN0IiwidGFzayIsImNoaXBzUHJvamVjdCIsInNldENsaWVudCIsInNldFByb2plY3QiLCJzZXRUYXNrIiwic2V0Q2hpcHNQcm9qZWN0IiwiaXNNQUlBIiwiZmxvYXRpbmdDdXN0b21DZW50ZXIiLCJsYW5nIiwibGFuZ3VhZ2UiLCJzdW1tYXJ5UHJvamVjdEFjY2VzcyIsIndpbmRvdyIsIlN0cmluZyIsIk1BSUFfUFJPSkVDVF9TVU1NQVJZX0ZFQVRVUkVfQUNDRVNTIiwidG9Mb3dlckNhc2UiLCJtYWlhUHJvamVjdFN1bW1hcnlBY2Nlc3MiLCJmYXFzQWNjZXNzIiwic2hvd1Byb2plY3RTdW1tYXJ5IiwiaXNNYWlha2VyIiwiZW50aXR5IiwidGVzdCIsIm5hbWUiLCJpc0hlYWRlckhvbWUiLCJhbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzIiwicm9sZV9pZCIsIl91c2VSZWNlbnRDb250ZXh0cyIsImVuYWJsZWQiLCJsaW1pdCIsImZldGNoZWRSZWNlbnRDb250ZXh0cyIsImNvbnRleHRzIiwicmVjZW50Q29udGV4dHNMb2FkaW5nIiwibG9hZGluZyIsInJlY2VudENvbnRleHRzIiwiZmlsdGVyIiwiaGFzIiwiaGFzUGlubmVkQ29udGV4dCIsImlkIiwicHJvamVjdElkIiwiaXNSZWNlbnRDb250ZXh0c1N0ZXAiLCJpc0NvbnRleHRIb21lU3RlcCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNlbGVjdGVkQ29udGV4dCIsInNldFNlbGVjdGVkQ29udGV4dCIsImFjdGl2ZUNvbnRleHQiLCJwcm9qZWN0TmFtZSIsInBpbm5lZEVudGl0eVR5cGUiLCJyZWFsTGlzdHNBZ2VudElkIiwicmVhbExpc3RzRW50aXR5VHlwZSIsIl91c2VGcmVxdWVudGx5VXNlZEFjdCIsImFnZW50RnVhcyIsImFjdGlvbnMiLCJmdWFzTG9hZGluZyIsIl91c2VGcmVxdWVudGx5QXNrZWRRdSIsImFnZW50RmFxcyIsImZhcXMiLCJmYXFzTG9hZGluZyIsImhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyIsImZhcXNGZXRjaFJlZiIsIl9mYXFzRmV0Y2hSZWYkY3VycmVudCIsImN1cnJlbnRLZXkiLCJjb25jYXQiLCJsYXN0S2V5IiwiY3VycmVudCIsImFnZW50SWQiLCJlbnRpdHlUeXBlIiwiZnVhcyIsImZhcXNBcmVMb2FkaW5nIiwiZnVhc0FyZUxvYWRpbmciLCJzaG93UmVjZW50Q29udGV4dHNCbG9jayIsImxlbmd0aCIsInNob3VsZFNob3dGYXFzIiwic2hvdWxkU2hvd0Z1YXMiLCJzaG93UHJvamVjdFN1bW1hcnlDYXJkIiwic2hvd0ZBUXMiLCJob21lU2Nyb2xsYWJsZUxheW91dCIsInNob3dEeW5hbWljU2VjdGlvbiIsImNvbnRlbnRDb250YWluZXJSZWYiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNob3dUb3BHcmFkaWVudCIsInNldFNob3dUb3BHcmFkaWVudCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd0JvdHRvbUdyYWRpZW50Iiwic2V0U2hvd0JvdHRvbUdyYWRpZW50IiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJpc1Njcm9sbGluZyIsInNldElzU2Nyb2xsaW5nIiwic2Nyb2xsVGltZW91dFJlZiIsImdyZWV0aW5nIiwiaW50cm8iLCJpbnRyb2R1Y3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0Iiwib3JkZXIiLCJfY29udGV4dCRwYXJlbnRzIiwiX2NvbnRleHQkcGFyZW50czIiLCJfY29udGV4dCRwYXJlbnRzMyIsIl9jb250ZXh0JHBhcmVudHM0IiwiYWlDaGF0Q29udGV4dFNlbGVjdGVkIiwiY29udGV4dElkIiwiY2xpZW50SWQiLCJwYXJlbnRzIiwiY2xpZW50X2lkIiwicHJvamVjdF9pZCIsImNsaWVudE5hbWUiLCJjbGllbnRfbmFtZSIsInByb2plY3RfbmFtZSIsIl9vYmplY3RTcHJlYWQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsInJlbmRlclJlY2VudENvbnRleHRzIiwibWFwIiwia2V5IiwiaW5kZXgiLCJ0cmltIiwiY2hlY2tTY3JvbGwiLCJjb250YWluZXIiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJpc1Njcm9sbGFibGUiLCJpc0F0VG9wIiwiaXNBdEJvdHRvbSIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJhZGRFdmVudExpc3RlbmVyIiwidGltZW91dElkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbmRlckhlYWRlckNvbnRlbnQiLCJfYWdlbnQkY3JlYXRlZF9ieSIsIl9hZ2VudCRjcmVhdGVkX2J5MiIsImVtb2ppIiwiY3JlYXRlZF9ieSIsImlzX2RlbGV0ZWQiLCIkbm9HYXAiLCJmaXJzdE5hbWUiLCIkc2hvdyIsIiRpc0FnZW50VmlldyIsIiRmbG9hdGluZ0N1c3RvbUNlbnRlciIsIiRnYXAiLCIkbWF4V2lkdGgiLCJwcm9qZWN0U3VtbWFyeSIsIiRncm93Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSUhvbWUvQ2hhdEFJSG9tZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyBMaXN0Q2hlY2tsaXN0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvTGlzdENoZWNrbGlzdCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuXG5pbXBvcnQgeyBvcHRpb25zIH0gZnJvbSAnLi4vQ2hhdEFJTW9kYWwvY29uc3RhbnRzJ1xuXG5pbXBvcnQge1xuICBTQ0NBSUhvbWVDb250YWluZXIsXG4gIFNDQ0FJSG9tZUNvbnRlbnQsXG4gIFNDQ0FJSG9tZUNvbnRlbnRJbm5lcixcbiAgU0NDQUlIb21lR3JhZGllbnRUb3AsXG4gIFNDQ0FJSG9tZUdyYWRpZW50Qm90dG9tLFxuICBTQ0NBSUhvbWVIZWFkZXIsXG4gIFNDQ0FJSG9tZUdyZWV0aW5nLFxuICBTQ0NBSUhvbWVBZ2VudEluZm9Db250YWluZXIsXG4gIFNDQ0FJSG9tZUFnZW50SW5mbyxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnksXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudCxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnlEZXNjcmlwdGlvbixcbiAgU0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3QsXG4gIFNDQ0FJSG9tZUludHJvZHVjdGlvbixcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyLFxuICBTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0LFxuICBTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSxcbiAgU0NDQUlIb21lSWNvbkNvbnRhaW5lcixcbiAgU0NDQUlIb21lTG9nb1dyYXBwZXIsXG4gIFNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayxcbiAgU0NDQUlIb21lVGl0bGUsXG4gIFNDQ0FJSG9tZVN1YnRpdGxlLFxuICBTQ0NBSUhvbWVEeW5hbWljU2VjdGlvbixcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dHMsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdCxcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGwsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbixcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxUZXh0LFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFNrZWxldG9uLFxufSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQ09SVXNlclJvbGUsIHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlUmVzaXplTGlzdGVuZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZXNpemUnXG5pbXBvcnQgeyBnZXRDb250ZXh0TWVudGlvbkljb24gfSBmcm9tICcuLi8uLi8uLi91dGlscy9jb250ZXh0TWVudGlvbkljb25zJ1xuaW1wb3J0IHsgdmFsaWRhdGVJc01haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy92YWxpZGF0ZUlzTWFpYSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IEZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IHVzZVJlY2VudENvbnRleHRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVjZW50Q29udGV4dHMnXG5pbXBvcnQgdHlwZSB7IFJlY2VudENvbnRleHRJdGVtLCBSZWNlbnRDb250ZXh0VHlwZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvUmVjZW50Q29udGV4dHMnXG5pbXBvcnQgeyBNQUlBSXNvbG9nbyB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL01BSUFJc29sb2dvJ1xuaW1wb3J0IHsgVGVtcGxhdGVHcmFkaWVudEljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9UZW1wbGF0ZUdyYWRpZW50SWNvbidcbmltcG9ydCB7IENoYXRBSUhvbWVNYWlha2VyIH0gZnJvbSAnLi9DaGF0QUlIb21lTWFpYWtlcidcblxudHlwZSBDaGF0QUlIb21lUHJvcHMgPSB7XG4gIG9uU3RhcnRDaGF0OiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgbWVudGlvbnM/OiBudWxsLFxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICkgPT4gdm9pZFxuICBoYW5kbGVyczogUmVjb3JkPG9wdGlvbnMsICgpID0+IHZvaWQ+XG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBmbG9hdGluZz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGVudW0gRnJlcXVlbnRRdWVzdGlvbnMge1xuICByZW50YWJpbGlkYWRfcHJveWVjdG8gPSAncmVudGFiaWxpZGFkX3Byb3llY3RvJyxcbiAgYXZhbmNlX3Byb3llY3RvID0gJ2F2YW5jZV9wcm95ZWN0bycsXG59XG5cbmNvbnN0IFJFQ0VOVF9DT05URVhUU19MSU1JVCA9IDlcbmNvbnN0IFJFQ0VOVF9DT05URVhUX0lDT05fQ09MT1IgPSAnIzRENEQ0RCdcbmNvbnN0IFJFQ0VOVF9DT05URVhUX1NLRUxFVE9OX0tFWVMgPSBbXG4gICdyZWNlbnQtY29udGV4dC1za2VsZXRvbi0xJyxcbiAgJ3JlY2VudC1jb250ZXh0LXNrZWxldG9uLTInLFxuICAncmVjZW50LWNvbnRleHQtc2tlbGV0b24tMycsXG5dXG5cbmNvbnN0IFJlY2VudENvbnRleHRQaWxsID0gKHtcbiAgY29udGV4dCxcbiAgbGFiZWwsXG4gIG9uQ2xpY2ssXG59OiB7XG4gIGNvbnRleHQ6IFJlY2VudENvbnRleHRJdGVtXG4gIGxhYmVsOiBzdHJpbmdcbiAgb25DbGljazogKCkgPT4gdm9pZFxufSkgPT4ge1xuICBjb25zdCB0ZXh0UmVmID0gdXNlUmVmPEhUTUxTcGFuRWxlbWVudD4obnVsbClcbiAgY29uc3QgeyBzaG93VG9vbHRpcCB9ID0gdXNlUmVzaXplTGlzdGVuZXIodGV4dFJlZiwgW2xhYmVsXSlcblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17b25DbGlja30+XG4gICAgICA8U0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxJY29uPlxuICAgICAgICB7Y29udGV4dC50eXBlID09PSAndGFzaycgPyAoXG4gICAgICAgICAgPExpc3RDaGVja2xpc3QgY29sb3I9e1JFQ0VOVF9DT05URVhUX0lDT05fQ09MT1J9IHdpZHRoPVwiMTRweFwiIGhlaWdodD1cIjE0cHhcIiAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIGdldENvbnRleHRNZW50aW9uSWNvbihjb250ZXh0LnR5cGUsIFJFQ0VOVF9DT05URVhUX0lDT05fQ09MT1IsIHVuZGVmaW5lZCwgMTQpXG4gICAgICAgICl9XG4gICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbj5cbiAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQgcmVmPXt0ZXh0UmVmfT5cbiAgICAgICAge3Nob3dUb29sdGlwID8gKFxuICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtsYWJlbH0+XG4gICAgICAgICAgICA8c3Bhbj57bGFiZWx9PC9zcGFuPlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICBsYWJlbFxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQ+XG4gICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbD5cbiAgKVxufVxuXG5jb25zdCBwYXJzZU51bWVyaWNJZCA9ICh2YWx1ZT86IHN0cmluZyB8IG51bWJlciB8IG51bGwpOiBudW1iZXIgfCBudWxsID0+IHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gbnVsbFxuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUpXG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGxcbn1cblxuY29uc3QgZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyA9IChyb2xlSWQ/OiBDT1JVc2VyUm9sZSk6IFNldDxSZWNlbnRDb250ZXh0VHlwZT4gPT4ge1xuICBpZiAocm9sZUlkID09PSBDT1JVc2VyUm9sZS5DTEVWRUwgfHwgcm9sZUlkID09PSBDT1JVc2VyUm9sZS5ESVJFQ1RPUiB8fCByb2xlSWQgPT09IENPUlVzZXJSb2xlLlBST0pFQ1RfTUFOQUdFUikge1xuICAgIHJldHVybiBuZXcgU2V0KFsnY2xpZW50JywgJ3Byb2plY3QnLCAndGFzayddKVxuICB9XG4gIGlmIChyb2xlSWQgPT09IENPUlVzZXJSb2xlLkNPTExBQk9SQVRPUikge1xuICAgIHJldHVybiBuZXcgU2V0KFsndGFzayddKVxuICB9XG4gIHJldHVybiBuZXcgU2V0KClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSUhvbWUgPSAoeyBoYW5kbGVycywgb25TdGFydENoYXQsIGV4cGFuZGVkLCBmbG9hdGluZyB9OiBDaGF0QUlIb21lUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0LCBpMThuIH0gPSB1c2VUKClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBhZ2VudCwgc2VjdGlvbiwgY2xpZW50LCBwcm9qZWN0LCB0YXNrLCBjaGlwc1Byb2plY3QsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0IH0gPVxuICAgIHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIGNvbnN0IGlzTUFJQSA9IHZhbGlkYXRlSXNNYWlhKGFnZW50IGFzIEFnZW50KVxuICBjb25zdCBmbG9hdGluZ0N1c3RvbUNlbnRlciA9ICEhKGZsb2F0aW5nICYmIGFnZW50Py50eXBlID09PSAnY3VzdG9tJylcbiAgY29uc3QgbGFuZyA9IGkxOG4ubGFuZ3VhZ2UgPT09ICdicicgPyAncHQnIDogaTE4bi5sYW5ndWFnZVxuXG4gIGNvbnN0IHN1bW1hcnlQcm9qZWN0QWNjZXNzID1cbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIChTdHJpbmcod2luZG93Lk1BSUFfUFJPSkVDVF9TVU1NQVJZX0ZFQVRVUkVfQUNDRVNTKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgIFN0cmluZyh3aW5kb3cubWFpYVByb2plY3RTdW1tYXJ5QWNjZXNzKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpXG4gIGNvbnN0IGZhcXNBY2Nlc3MgPSB0cnVlXG4gIGNvbnN0IHNob3dQcm9qZWN0U3VtbWFyeSA9ICEhKGlzTUFJQSAmJiBzdW1tYXJ5UHJvamVjdEFjY2VzcylcbiAgLy8gRWwgb3JjaGVzdHJhdG9yICh0eXBlID09PSAnb3JjaGVzdHJhdG9yJykgbXVlc3RyYSBGQVFzL0ZVQXMgYWdyZWdhZGFzIGRlIHN1cyBzdWJhZ2VudGVzLFxuICAvLyBhc8OtIHF1ZSBOTyBzZSB0cmF0YSBjb21vIG1haWFrZXIgYWPDoS4gTWFpYWtlciA9IGNsb25lIGdsb2JhbCBsZWdhY3kgY29uIG5vbWJyZSBtYWlha2VyL21hcmtldHBsYWNlLlxuICBjb25zdCBpc01haWFrZXIgPVxuICAgIGFnZW50Py50eXBlICE9PSAnb3JjaGVzdHJhdG9yJyAmJiBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJyAmJiAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhZ2VudD8ubmFtZSB8fCAnJylcbiAgY29uc3QgaXNIZWFkZXJIb21lID0gaXNNQUlBICYmIHNlY3Rpb24gPT09ICdoZWFkZXInICYmIGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJ1xuICBjb25zdCBhbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzID0gdXNlTWVtbygoKSA9PiBnZXRBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzKHVzZXIucm9sZV9pZCksIFt1c2VyLnJvbGVfaWRdKVxuICBjb25zdCB7IGNvbnRleHRzOiBmZXRjaGVkUmVjZW50Q29udGV4dHMsIGxvYWRpbmc6IHJlY2VudENvbnRleHRzTG9hZGluZyB9ID0gdXNlUmVjZW50Q29udGV4dHMoe1xuICAgIGVuYWJsZWQ6IGlzSGVhZGVySG9tZSxcbiAgICBsaW1pdDogUkVDRU5UX0NPTlRFWFRTX0xJTUlULFxuICB9KVxuICBjb25zdCByZWNlbnRDb250ZXh0cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZmV0Y2hlZFJlY2VudENvbnRleHRzLmZpbHRlcihjb250ZXh0ID0+IGFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMuaGFzKGNvbnRleHQudHlwZSkpLFxuICAgIFtmZXRjaGVkUmVjZW50Q29udGV4dHMsIGFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXNdXG4gIClcblxuICAvLyBIb21lIGRlbCBvcmNoZXN0cmF0b3IgZW4gMiBwYXNvczpcbiAgLy8gIC0gUGFzbyAxIChzaW4gY29udGV4dG8gcGluZWFkbyk6IHNlIG11ZXN0cmFuIHNvbG8gbG9zIGNvbnRleHRvcyByZWNpZW50ZXMuXG4gIC8vICAtIFBhc28gMiAoY29udGV4dG8gcGluZWFkbyk6IHNlIG11ZXN0cmFuIGxhcyBGQVFzL2FjY2lvbmVzIHF1ZSByZWZlcmVuY2lhbiBlc2UgY29udGV4dG8uXG4gIC8vIFZvbHZlciBhbCBwYXNvIDEgPSBxdWl0YXIgZWwgY2hpcCAobGltcGlhIGVsIGNvbnRleHRvIGdsb2JhbCkuXG4gIGNvbnN0IGhhc1Bpbm5lZENvbnRleHQgPSAhISh0YXNrPy5pZCB8fCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCB8fCBjbGllbnQ/LmlkIHx8IHByb2plY3Q/LmlkKVxuICBjb25zdCBpc1JlY2VudENvbnRleHRzU3RlcCA9IGlzSGVhZGVySG9tZSAmJiAhaGFzUGlubmVkQ29udGV4dFxuICBjb25zdCBpc0NvbnRleHRIb21lU3RlcCA9IGlzSGVhZGVySG9tZSAmJiBoYXNQaW5uZWRDb250ZXh0XG5cbiAgLy8gQ29udGV4dG8gYWN0aXZvIHBhcmEgZGVyaXZhciBGQVFzL2FjY2lvbmVzIChwYXNvIDIpLiBQcmVmZXJpbW9zIGVsIHBpbGwgY2xpY2tlYWRvO1xuICAvLyBzaSBubywgbG8gcmVjb25zdHJ1aW1vcyBkZXNkZSBlbCBjb250ZXh0byBnbG9iYWwuXG4gIGNvbnN0IFtzZWxlY3RlZENvbnRleHQsIHNldFNlbGVjdGVkQ29udGV4dF0gPSB1c2VTdGF0ZTxSZWNlbnRDb250ZXh0SXRlbSB8IG51bGw+KG51bGwpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFoYXNQaW5uZWRDb250ZXh0KSBzZXRTZWxlY3RlZENvbnRleHQobnVsbClcbiAgfSwgW2hhc1Bpbm5lZENvbnRleHRdKVxuXG4gIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSB1c2VNZW1vPFJlY2VudENvbnRleHRJdGVtIHwgbnVsbD4oKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZENvbnRleHQpIHJldHVybiBzZWxlY3RlZENvbnRleHRcbiAgICBpZiAoIWlzQ29udGV4dEhvbWVTdGVwKSByZXR1cm4gbnVsbFxuICAgIGlmICh0YXNrPy5pZCkgcmV0dXJuIHsgdHlwZTogJ3Rhc2snLCBpZDogdGFzay5pZCwgbmFtZTogdGFzay5uYW1lIH1cbiAgICBpZiAoY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQpIHJldHVybiB7IHR5cGU6ICdwcm9qZWN0JywgaWQ6IGNoaXBzUHJvamVjdC5wcm9qZWN0SWQsIG5hbWU6IGNoaXBzUHJvamVjdC5wcm9qZWN0TmFtZSB9XG4gICAgaWYgKGNsaWVudD8uaWQpIHJldHVybiB7IHR5cGU6ICdjbGllbnQnLCBpZDogY2xpZW50LmlkLCBuYW1lOiBjbGllbnQubmFtZSB9XG4gICAgcmV0dXJuIG51bGxcbiAgfSwgW1xuICAgIHNlbGVjdGVkQ29udGV4dCxcbiAgICBpc0NvbnRleHRIb21lU3RlcCxcbiAgICB0YXNrPy5pZCxcbiAgICB0YXNrPy5uYW1lLFxuICAgIGNoaXBzUHJvamVjdD8ucHJvamVjdElkLFxuICAgIGNoaXBzUHJvamVjdD8ucHJvamVjdE5hbWUsXG4gICAgY2xpZW50Py5pZCxcbiAgICBjbGllbnQ/Lm5hbWUsXG4gIF0pXG5cbiAgLy8gZW50aXR5X3R5cGUgZGVsIGNvbnRleHRvIHBpbmVhZG8gKHByb2plY3QvY2xpZW50L3Rhc2spLCB0b21hZG8gZGVsIGNvbnRleHRvIGdsb2JhbC5cbiAgLy8gQXBsaWNhIHRhbnRvIGFsIGFicmlyIE1BSUEgZGVzZGUgdW5hIHNlY2Npw7NuIGVzcGVjw61maWNhIGNvbW8gYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuLlxuICBjb25zdCBwaW5uZWRFbnRpdHlUeXBlID0gdXNlTWVtbzxSZWNlbnRDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgIGlmICh0YXNrPy5pZCkgcmV0dXJuICd0YXNrJ1xuICAgIGlmIChjaGlwc1Byb2plY3Q/LnByb2plY3RJZCB8fCBwcm9qZWN0Py5pZCkgcmV0dXJuICdwcm9qZWN0J1xuICAgIGlmIChjbGllbnQ/LmlkKSByZXR1cm4gJ2NsaWVudCdcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0sIFt0YXNrPy5pZCwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQsIHByb2plY3Q/LmlkLCBjbGllbnQ/LmlkXSlcblxuICAvLyBGQVFzL2FjY2lvbmVzOlxuICAvLyAgLSBoZWFkZXItaG9tZSAob3JjaGVzdHJhdG9yKSwgcGFzbyAyOiBmaWx0cmFkYXMgcG9yIGBlbnRpdHlfdHlwZWAgZGVsIGNvbnRleHRvIHNlbGVjY2lvbmFkby5cbiAgLy8gIC0gaG9tZXMgZGUgcHJveWVjdG8vY2xpZW50ZS90YXJlYSAoc2VjY2nDs24pOiBmaWx0cmFkYXMgcG9yIGVsIGBlbnRpdHlfdHlwZWAgZGVsIGNvbnRleHRvIHNldGVhZG8uXG4gIGNvbnN0IHJlYWxMaXN0c0FnZW50SWQgPSAoKCkgPT4ge1xuICAgIGlmICghaXNNQUlBIHx8IGlzTWFpYWtlcikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChpc0hlYWRlckhvbWUpIHJldHVybiBpc0NvbnRleHRIb21lU3RlcCA/IGFnZW50Py5pZCA6IHVuZGVmaW5lZFxuICAgIHJldHVybiBhZ2VudD8uaWRcbiAgfSkoKVxuICBjb25zdCByZWFsTGlzdHNFbnRpdHlUeXBlID0gKCgpID0+IHtcbiAgICBpZiAoIWlzSGVhZGVySG9tZSkgcmV0dXJuIHBpbm5lZEVudGl0eVR5cGVcbiAgICByZXR1cm4gaXNDb250ZXh0SG9tZVN0ZXAgPyBhY3RpdmVDb250ZXh0Py50eXBlIDogdW5kZWZpbmVkXG4gIH0pKClcbiAgY29uc3QgeyBhY3Rpb25zOiBhZ2VudEZ1YXMsIGxvYWRpbmc6IGZ1YXNMb2FkaW5nIH0gPSB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMoXG4gICAgcmVhbExpc3RzQWdlbnRJZCxcbiAgICBzZWN0aW9uLFxuICAgIHJlYWxMaXN0c0VudGl0eVR5cGVcbiAgKVxuICBjb25zdCB7XG4gICAgZmFxczogYWdlbnRGYXFzLFxuICAgIGxvYWRpbmc6IGZhcXNMb2FkaW5nLFxuICAgIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyxcbiAgfSA9IHVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyhyZWFsTGlzdHNBZ2VudElkLCBsYW5nLCByZWFsTGlzdHNFbnRpdHlUeXBlKVxuICBjb25zdCBmYXFzRmV0Y2hSZWYgPSB1c2VSZWY8eyBhZ2VudElkOiBzdHJpbmc7IGxhbmc6IHN0cmluZzsgZW50aXR5VHlwZT86IHN0cmluZyB9IHwgbnVsbD4obnVsbClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXJlYWxMaXN0c0FnZW50SWQgfHwgc2VjdGlvbiA9PT0gJ3Rhc2snKSByZXR1cm5cbiAgICBjb25zdCBjdXJyZW50S2V5ID0gYCR7cmVhbExpc3RzQWdlbnRJZH0tJHtsYW5nfS0ke3JlYWxMaXN0c0VudGl0eVR5cGUgPz8gJ2FsbCd9YFxuICAgIGNvbnN0IGxhc3RLZXkgPSBmYXFzRmV0Y2hSZWYuY3VycmVudFxuICAgICAgPyBgJHtmYXFzRmV0Y2hSZWYuY3VycmVudC5hZ2VudElkfS0ke2ZhcXNGZXRjaFJlZi5jdXJyZW50Lmxhbmd9LSR7ZmFxc0ZldGNoUmVmLmN1cnJlbnQuZW50aXR5VHlwZSA/PyAnYWxsJ31gXG4gICAgICA6IG51bGxcbiAgICBpZiAoY3VycmVudEtleSAhPT0gbGFzdEtleSkge1xuICAgICAgZmFxc0ZldGNoUmVmLmN1cnJlbnQgPSB7IGFnZW50SWQ6IHJlYWxMaXN0c0FnZW50SWQsIGxhbmcsIGVudGl0eVR5cGU6IHJlYWxMaXN0c0VudGl0eVR5cGUgfVxuICAgICAgaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zKHsgYWdlbnRJZDogcmVhbExpc3RzQWdlbnRJZCwgbGFuZywgZW50aXR5VHlwZTogcmVhbExpc3RzRW50aXR5VHlwZSB9KVxuICAgIH1cbiAgfSwgW3JlYWxMaXN0c0FnZW50SWQsIHJlYWxMaXN0c0VudGl0eVR5cGUsIHNlY3Rpb24sIGxhbmcsIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc10pXG5cbiAgY29uc3QgZmFxcyA9IGFnZW50RmFxc1xuICBjb25zdCBmdWFzID0gYWdlbnRGdWFzXG4gIGNvbnN0IGZhcXNBcmVMb2FkaW5nID0gZmFxc0xvYWRpbmdcbiAgY29uc3QgZnVhc0FyZUxvYWRpbmcgPSBmdWFzTG9hZGluZ1xuXG4gIGNvbnN0IHNob3dSZWNlbnRDb250ZXh0c0Jsb2NrID0gaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgKHJlY2VudENvbnRleHRzTG9hZGluZyB8fCByZWNlbnRDb250ZXh0cy5sZW5ndGggPiAwKVxuICBjb25zdCBzaG91bGRTaG93RmFxcyA9XG4gICAgKGlzQ29udGV4dEhvbWVTdGVwIHx8ICghaXNIZWFkZXJIb21lICYmIHNlY3Rpb24gIT09ICd0YXNrJyAmJiBmYXFzQWNjZXNzKSkgJiZcbiAgICAhaXNNYWlha2VyICYmXG4gICAgKGZhcXMubGVuZ3RoID4gMCB8fCBmYXFzQXJlTG9hZGluZylcbiAgY29uc3Qgc2hvdWxkU2hvd0Z1YXMgPSAhaXNNYWlha2VyICYmIChpc0NvbnRleHRIb21lU3RlcCB8fCAhaXNIZWFkZXJIb21lKSAmJiAoZnVhcy5sZW5ndGggPiAwIHx8IGZ1YXNBcmVMb2FkaW5nKVxuXG4gIGNvbnN0IHNob3dQcm9qZWN0U3VtbWFyeUNhcmQgPSBzaG93UHJvamVjdFN1bW1hcnkgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnXG4gIGNvbnN0IHNob3dGQVFzID0gISEoXG4gICAgc2hvd1JlY2VudENvbnRleHRzQmxvY2sgfHxcbiAgICBzaG91bGRTaG93RmFxcyB8fFxuICAgIHNob3VsZFNob3dGdWFzIHx8XG4gICAgc2hvd1Byb2plY3RTdW1tYXJ5Q2FyZCB8fFxuICAgIGlzTWFpYWtlclxuICApXG4gIGNvbnN0IGhvbWVTY3JvbGxhYmxlTGF5b3V0ID0gc2hvd0ZBUXNcbiAgY29uc3Qgc2hvd0R5bmFtaWNTZWN0aW9uID0gc2hvd1JlY2VudENvbnRleHRzQmxvY2sgfHwgc2hvdWxkU2hvd0ZhcXMgfHwgc2hvdWxkU2hvd0Z1YXMgfHwgaXNNYWlha2VyXG5cbiAgLy8gTMOzZ2ljYSBkZWwgc2Nyb2xsIGNvbiBncmFkaWVudGVzXG4gIGNvbnN0IGNvbnRlbnRDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtzaG93VG9wR3JhZGllbnQsIHNldFNob3dUb3BHcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dCb3R0b21HcmFkaWVudCwgc2V0U2hvd0JvdHRvbUdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNTY3JvbGxpbmcsIHNldElzU2Nyb2xsaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaW1lb3V0UmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcblxuICAvLyBTYWx1ZG8gZmlqbyBwb3IgdGlwbyBkZSBjb250ZXh0byAoaTE4bikuIEN1c3RvbSBhZ2VudHMgc2lndWVuIHVzYW5kbyBhZ2VudC5pbnRyb2R1Y3Rpb24uXG4gIGNvbnN0IGdyZWV0aW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzTWFpYWtlcikgcmV0dXJuICcnXG4gICAgaWYgKGlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gJydcblxuICAgIGlmIChpc01BSUEgJiYgcGlubmVkRW50aXR5VHlwZSkge1xuICAgICAgcmV0dXJuIHQoYGhvbWVNZW51LmNvbnRleHRIb21lLmNvbnRleHRHcmVldGluZy4ke3Bpbm5lZEVudGl0eVR5cGV9YClcbiAgICB9XG5cbiAgICBjb25zdCBpbnRybyA9IGFnZW50Py5pbnRyb2R1Y3Rpb25cbiAgICBpZiAoIWludHJvKSByZXR1cm4gJydcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnRybykgJiYgaW50cm8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGludHJvW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGludHJvLmxlbmd0aCldXG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgaW50cm8gPT09ICdzdHJpbmcnID8gaW50cm8gOiAnJ1xuICB9LCBbYWdlbnQ/LmlkLCBhZ2VudD8uaW50cm9kdWN0aW9uLCBpc01haWFrZXIsIGlzTUFJQSwgcGlubmVkRW50aXR5VHlwZSwgaXNSZWNlbnRDb250ZXh0c1N0ZXAsIHRdKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFJlY2VudENvbnRleHQgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGV4dDogUmVjZW50Q29udGV4dEl0ZW0sIG9yZGVyOiBudW1iZXIpID0+IHtcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRDb250ZXh0U2VsZWN0ZWQsIHsgb3JkZXIsIHR5cGU6IGNvbnRleHQudHlwZSB9KVxuXG4gICAgICBjb25zdCBjb250ZXh0SWQgPSBwYXJzZU51bWVyaWNJZChjb250ZXh0LmlkKVxuICAgICAgY29uc3QgY2xpZW50SWQgPSBwYXJzZU51bWVyaWNJZChjb250ZXh0LnBhcmVudHM/LmNsaWVudF9pZClcbiAgICAgIGNvbnN0IHByb2plY3RJZCA9IHBhcnNlTnVtZXJpY0lkKGNvbnRleHQucGFyZW50cz8ucHJvamVjdF9pZClcbiAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBjb250ZXh0LnBhcmVudHM/LmNsaWVudF9uYW1lIHx8ICcnXG4gICAgICBjb25zdCBwcm9qZWN0TmFtZSA9IGNvbnRleHQucGFyZW50cz8ucHJvamVjdF9uYW1lIHx8ICcnXG5cbiAgICAgIHNldFNlbGVjdGVkQ29udGV4dChjb250ZXh0KVxuICAgICAgc2V0VGFzayhudWxsKVxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgICBpZiAoY29udGV4dC50eXBlID09PSAnY2xpZW50Jykge1xuICAgICAgICBpZiAoY29udGV4dElkID09IG51bGwpIHJldHVyblxuICAgICAgICBzZXRDbGllbnQ/Lih7IGlkOiBjb250ZXh0SWQsIG5hbWU6IGNvbnRleHQubmFtZSB9KVxuICAgICAgfSBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT09ICdwcm9qZWN0Jykge1xuICAgICAgICBpZiAoY29udGV4dElkID09IG51bGwpIHJldHVyblxuICAgICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgICBpZDogY29udGV4dElkLFxuICAgICAgICAgIG5hbWU6IGNvbnRleHQubmFtZSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50OiB7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSB9IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoY29udGV4dElkKSxcbiAgICAgICAgICBwcm9qZWN0TmFtZTogY29udGV4dC5uYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGNvbnRleHQudHlwZSA9PT0gJ3Rhc2snKSB7XG4gICAgICAgIHNldFRhc2soe1xuICAgICAgICAgIGlkOiBjb250ZXh0LmlkLFxuICAgICAgICAgIG5hbWU6IGNvbnRleHQubmFtZSxcbiAgICAgICAgICAuLi4ocHJvamVjdElkICE9IG51bGwgPyB7IHByb2plY3RJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihjbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZCB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgICBpZiAoY2xpZW50SWQgIT0gbnVsbCkge1xuICAgICAgICAgIHNldENsaWVudD8uKHsgaWQ6IGNsaWVudElkLCBuYW1lOiBjbGllbnROYW1lIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgICAgICBpZDogcHJvamVjdElkLFxuICAgICAgICAgICAgbmFtZTogcHJvamVjdE5hbWUgfHwgYCR7dCgnaG9tZU1lbnUucmVjZW50Q29udGV4dHMudHlwZXMucHJvamVjdCcpfSAke3Byb2plY3RJZH1gLFxuICAgICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkIH0gOiB7fSksXG4gICAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50OiB7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSB9IH0gOiB7fSksXG4gICAgICAgICAgfSlcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcocHJvamVjdElkKSxcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0TmFtZSB8fCBgJHt0KCdob21lTWVudS5yZWNlbnRDb250ZXh0cy50eXBlcy5wcm9qZWN0Jyl9ICR7cHJvamVjdElkfWAsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ21haWEtaW5wdXQtcmVmb2N1cycpKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtldmVudCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2ssIHRdXG4gIClcblxuICBjb25zdCByZW5kZXJSZWNlbnRDb250ZXh0cyA9ICgpID0+IHtcbiAgICBpZiAoIWlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0cz5cbiAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdD5cbiAgICAgICAgICB7cmVjZW50Q29udGV4dHNMb2FkaW5nICYmXG4gICAgICAgICAgICBSRUNFTlRfQ09OVEVYVF9TS0VMRVRPTl9LRVlTLm1hcChrZXkgPT4gPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24ga2V5PXtrZXl9IC8+KX1cbiAgICAgICAgICB7IXJlY2VudENvbnRleHRzTG9hZGluZyAmJlxuICAgICAgICAgICAgcmVjZW50Q29udGV4dHMubWFwKChjb250ZXh0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8UmVjZW50Q29udGV4dFBpbGxcbiAgICAgICAgICAgICAgICBrZXk9e2Ake2NvbnRleHQudHlwZX0tJHtjb250ZXh0LmlkfWB9XG4gICAgICAgICAgICAgICAgY29udGV4dD17Y29udGV4dH1cbiAgICAgICAgICAgICAgICBsYWJlbD17Y29udGV4dC5uYW1lLnRyaW0oKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0KGNvbnRleHQsIGluZGV4ICsgMSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3Q+XG4gICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGNoZWNrU2Nyb2xsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRlbnRDb250YWluZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGFpbmVyIHx8ICFob21lU2Nyb2xsYWJsZUxheW91dCkgcmV0dXJuXG5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgIGNvbnN0IGlzU2Nyb2xsYWJsZSA9IHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodFxuICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxUb3AgPT09IDBcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0ID49IHNjcm9sbEhlaWdodCAtIDFcblxuICAgIHNldFNob3dUb3BHcmFkaWVudChpc1Njcm9sbGFibGUgJiYgIWlzQXRUb3ApXG4gICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KGlzU2Nyb2xsYWJsZSAmJiAhaXNBdEJvdHRvbSlcbiAgICBzZXRJc1Njcm9sbGluZyh0cnVlKVxuXG4gICAgaWYgKHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudClcbiAgICB9XG5cbiAgICBzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzU2Nyb2xsaW5nKGZhbHNlKVxuICAgIH0sIDE1MClcbiAgfSwgW2hvbWVTY3JvbGxhYmxlTGF5b3V0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaG9tZVNjcm9sbGFibGVMYXlvdXQpIHtcbiAgICAgIHNldFNob3dUb3BHcmFkaWVudChmYWxzZSlcbiAgICAgIHNldFNob3dCb3R0b21HcmFkaWVudChmYWxzZSlcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBjb250ZW50Q29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNoZWNrU2Nyb2xsKClcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2hlY2tTY3JvbGwpXG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGNoZWNrU2Nyb2xsLCAxMDApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNoZWNrU2Nyb2xsKVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgIGlmIChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtob21lU2Nyb2xsYWJsZUxheW91dCwgY2hlY2tTY3JvbGxdKVxuXG4gIGNvbnN0IHJlbmRlckhlYWRlckNvbnRlbnQgPSAoKSA9PiB7XG4gICAgaWYgKCFpc01BSUEpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTQ0NBSUhvbWVBZ2VudEluZm9Db250YWluZXI+XG4gICAgICAgICAgPFNDQ0FJSG9tZUFnZW50SW5mbz5cbiAgICAgICAgICAgIHthZ2VudD8uZW1vaml9IHthZ2VudD8ubmFtZX1cbiAgICAgICAgICA8L1NDQ0FJSG9tZUFnZW50SW5mbz5cbiAgICAgICAgICB7YWdlbnQ/LmNyZWF0ZWRfYnkgJiYgIWlzTUFJQSAmJiAoXG4gICAgICAgICAgICA8U0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyPlxuICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgIGFnZW50Py5jcmVhdGVkX2J5Py5pc19kZWxldGVkID8gdCgnaG9tZU1lbnUuY3JlYXRlZEJ5VG9vbHRpcERlbGV0ZWQnKSA6IHQoJ2hvbWVNZW51LmNyZWF0ZWRCeVRvb2x0aXAnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0PlxuICAgICAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LmNyZWF0ZWRCeScpfXsnICd9XG4gICAgICAgICAgICAgICAgICA8U0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWU+e2FnZW50Py5jcmVhdGVkX2J5Py5uYW1lfTwvU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWU+XG4gICAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVDcmVhdGVkQnlUZXh0PlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICA8L1NDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lcj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lcj5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayAkbm9HYXA9eyFpc1JlY2VudENvbnRleHRzU3RlcCAmJiAhZ3JlZXRpbmd9PlxuICAgICAgICA8U0NDQUlIb21lSWNvbkNvbnRhaW5lcj5cbiAgICAgICAgICA8U0NDQUlIb21lTG9nb1dyYXBwZXI+XG4gICAgICAgICAgICA8TUFJQUlzb2xvZ28gLz5cbiAgICAgICAgICA8L1NDQ0FJSG9tZUxvZ29XcmFwcGVyPlxuICAgICAgICA8L1NDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgIHtpc1JlY2VudENvbnRleHRzU3RlcCA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlPnt0KCdob21lTWVudS5jb250ZXh0SG9tZS5ncmVldGluZycsIHsgbmFtZTogdXNlci5maXJzdE5hbWUgfSl9PC9TQ0NBSUhvbWVUaXRsZT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVTdWJ0aXRsZT5cbiAgICAgICAgICAgICAge3QoXG4gICAgICAgICAgICAgICAgdXNlci5yb2xlX2lkID09PSBDT1JVc2VyUm9sZS5DT0xMQUJPUkFUT1JcbiAgICAgICAgICAgICAgICAgID8gJ2hvbWVNZW51LmNvbnRleHRIb21lLnN1YnRpdGxlQ29sbGFib3JhdG9yJ1xuICAgICAgICAgICAgICAgICAgOiAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGUnXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1NDQ0FJSG9tZVN1YnRpdGxlPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIGdyZWV0aW5nICYmIDxTQ0NBSUhvbWVHcmVldGluZz57Z3JlZXRpbmd9PC9TQ0NBSUhvbWVHcmVldGluZz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlIb21lTWFpYUhlYWRlclN0YWNrPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDQ0FJSG9tZUNvbnRhaW5lciBzaG93RkFRcz17c2hvd0ZBUXN9PlxuICAgICAge2hvbWVTY3JvbGxhYmxlTGF5b3V0ICYmIDxTQ0NBSUhvbWVHcmFkaWVudFRvcCAkc2hvdz17c2hvd1RvcEdyYWRpZW50fSAvPn1cbiAgICAgIDxTQ0NBSUhvbWVDb250ZW50XG4gICAgICAgIHJlZj17Y29udGVudENvbnRhaW5lclJlZn1cbiAgICAgICAgc2hvd0ZBUXM9e2hvbWVTY3JvbGxhYmxlTGF5b3V0fVxuICAgICAgICAkaXNBZ2VudFZpZXc9eyFpc01BSUF9XG4gICAgICAgICRmbG9hdGluZ0N1c3RvbUNlbnRlcj17ZmxvYXRpbmdDdXN0b21DZW50ZXJ9XG4gICAgICA+XG4gICAgICAgIDxTQ0NBSUhvbWVDb250ZW50SW5uZXJcbiAgICAgICAgICBzaG93RkFRcz17aG9tZVNjcm9sbGFibGVMYXlvdXR9XG4gICAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAgICRmbG9hdGluZ0N1c3RvbUNlbnRlcj17ZmxvYXRpbmdDdXN0b21DZW50ZXJ9XG4gICAgICAgID5cbiAgICAgICAgICA8U0NDQUlIb21lSGVhZGVyXG4gICAgICAgICAgICAkZ2FwPXtpc01BSUEgJiYgc2VjdGlvbiAhPT0gJ3Byb2plY3QnID8gJzhweCcgOiAnMjBweCd9XG4gICAgICAgICAgICAkbWF4V2lkdGg9e2lzTUFJQSA/ICcxMDAlJyA6ICczODBweCd9XG4gICAgICAgICAgICAkaXNBZ2VudFZpZXc9eyFpc01BSUF9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3JlbmRlckhlYWRlckNvbnRlbnQoKX1cblxuICAgICAgICAgICAge3NlY3Rpb24gIT09ICdwcm9qZWN0JyAmJiAoXG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVJbnRyb2R1Y3Rpb24gZXhwYW5kZWQ9e2V4cGFuZGVkfT57IWlzTUFJQSAmJiBhZ2VudD8uaW50cm9kdWN0aW9ufTwvU0NDQUlIb21lSW50cm9kdWN0aW9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NDQ0FJSG9tZUhlYWRlcj5cbiAgICAgICAgICB7c2hvd1Byb2plY3RTdW1tYXJ5Q2FyZCAmJiAoXG4gICAgICAgICAgICA8U0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3Qgb25DbGljaz17aGFuZGxlcnMucHJvamVjdFN1bW1hcnl9PlxuICAgICAgICAgICAgICA8U0NDQUlIb21lUHJvamVjdFN1bW1hcnk+XG4gICAgICAgICAgICAgICAgPFRlbXBsYXRlR3JhZGllbnRJY29uIGhlaWdodD17MjR9IHdpZHRoPXsyNH0gLz5cbiAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeT5cbiAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudD5cbiAgICAgICAgICAgICAgICA8U0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZT57dCgnaG9tZU1lbnUucHJvamVjdFN1bW1hcnkudGl0bGUnKX08L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGU+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUucHJvamVjdFN1bW1hcnkuZGVzY3JpcHRpb24nKX1cbiAgICAgICAgICAgICAgICA8L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50PlxuICAgICAgICAgICAgPC9TQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtzaG93RHluYW1pY1NlY3Rpb24gJiYgKFxuICAgICAgICAgICAgPFNDQ0FJSG9tZUR5bmFtaWNTZWN0aW9uICRncm93PXtpc01haWFrZXJ9PlxuICAgICAgICAgICAgICB7cmVuZGVyUmVjZW50Q29udGV4dHMoKX1cbiAgICAgICAgICAgICAge3Nob3VsZFNob3dGYXFzICYmIChcbiAgICAgICAgICAgICAgICA8RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgICBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBzaG93RkFRcz17c2hvd0ZBUXN9XG4gICAgICAgICAgICAgICAgICBzaG93UHJvamVjdFN1bW1hcnk9e3Nob3dQcm9qZWN0U3VtbWFyeX1cbiAgICAgICAgICAgICAgICAgIGFnZW50SWQ9e2FnZW50Py5pZH1cbiAgICAgICAgICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBmYXFzPXtmYXFzfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZmFxc0FyZUxvYWRpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge3Nob3VsZFNob3dGdWFzICYmIChcbiAgICAgICAgICAgICAgICA8RnJlcXVlbnRseVVzZWRBY3Rpb25zXG4gICAgICAgICAgICAgICAgICBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBhZ2VudElkPXthZ2VudD8uaWR9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBhY3Rpb25zPXtmdWFzfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZnVhc0FyZUxvYWRpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2lzTWFpYWtlciA/IDxDaGF0QUlIb21lTWFpYWtlciBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9IC8+IDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lRHluYW1pY1NlY3Rpb24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0NBSUhvbWVDb250ZW50SW5uZXI+XG4gICAgICA8L1NDQ0FJSG9tZUNvbnRlbnQ+XG4gICAgICB7aG9tZVNjcm9sbGFibGVMYXlvdXQgJiYgPFNDQ0FJSG9tZUdyYWRpZW50Qm90dG9tICRzaG93PXtzaG93Qm90dG9tR3JhZGllbnR9IC8+fVxuICAgIDwvU0NDQUlIb21lQ29udGFpbmVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sUUFBUSxPQUFPO0FBRXpFLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsYUFBYSxRQUFRLGdEQUFnRDtBQUM5RSxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLHlCQUF5QjtBQUkxRCxTQUNFQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixFQUNoQkMscUJBQXFCLEVBQ3JCQyxvQkFBb0IsRUFDcEJDLHVCQUF1QixFQUN2QkMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLDJCQUEyQixFQUMzQkMsa0JBQWtCLEVBQ2xCQyx1QkFBdUIsRUFDdkJDLDhCQUE4QixFQUM5QkMsNEJBQTRCLEVBQzVCQyxrQ0FBa0MsRUFDbENDLDBCQUEwQixFQUMxQkMscUJBQXFCLEVBQ3JCQywyQkFBMkIsRUFDM0JDLHNCQUFzQixFQUN0QkMsMEJBQTBCLEVBQzFCQyxzQkFBc0IsRUFDdEJDLG9CQUFvQixFQUNwQkMsd0JBQXdCLEVB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
|
|
235
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIlRvb2x0aXAiLCJ1c2VUIiwiU0NDQUlIb21lQ29udGFpbmVyIiwiU0NDQUlIb21lQ29udGVudCIsIlNDQ0FJSG9tZUNvbnRlbnRJbm5lciIsIlNDQ0FJSG9tZUdyYWRpZW50VG9wIiwiU0NDQUlIb21lR3JhZGllbnRCb3R0b20iLCJTQ0NBSUhvbWVIZWFkZXIiLCJTQ0NBSUhvbWVHcmVldGluZyIsIlNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lciIsIlNDQ0FJSG9tZUFnZW50SW5mbyIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24iLCJTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCIsIlNDQ0FJSG9tZUludHJvZHVjdGlvbiIsIlNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lciIsIlNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQiLCJTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQ0FJSG9tZUljb25Db250YWluZXIiLCJTQ0NBSUhvbWVMb2dvV3JhcHBlciIsIlNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayIsIlNDQ0FJSG9tZUR5bmFtaWNTZWN0aW9uIiwidXNlR2xvYmFsQ29udGV4dCIsInZhbGlkYXRlSXNNYWlhIiwiaXNNYWlha2VyQWdlbnQiLCJGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJGcmVxdWVudGx5VXNlZEFjdGlvbnMiLCJ1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMiLCJ1c2VGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJNQUlBSXNvbG9nbyIsIlRlbXBsYXRlR3JhZGllbnRJY29uIiwiQ2hhdEFJSG9tZU1haWFrZXIiLCJqc3hzIiwiX2pzeHMiLCJqc3giLCJfanN4IiwiRnJlcXVlbnRRdWVzdGlvbnMiLCJDaGF0QUlIb21lIiwiX3JlZiIsImhhbmRsZXJzIiwib25TdGFydENoYXQiLCJleHBhbmRlZCIsImZsb2F0aW5nIiwiX3VzZVQiLCJ0IiwiaTE4biIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJzZWN0aW9uIiwiaXNNQUlBIiwiZmxvYXRpbmdDdXN0b21DZW50ZXIiLCJ0eXBlIiwibGFuZyIsImxhbmd1YWdlIiwic3VtbWFyeVByb2plY3RBY2Nlc3MiLCJ3aW5kb3ciLCJTdHJpbmciLCJNQUlBX1BST0pFQ1RfU1VNTUFSWV9GRUFUVVJFX0FDQ0VTUyIsInRvTG93ZXJDYXNlIiwibWFpYVByb2plY3RTdW1tYXJ5QWNjZXNzIiwiZmFxc0FjY2VzcyIsInNob3dQcm9qZWN0U3VtbWFyeSIsImlzTWFpYWtlciIsImhvbWVMaXN0c0FnZW50SWQiLCJpZCIsInVuZGVmaW5lZCIsIl91c2VGcmVxdWVudGx5VXNlZEFjdCIsImFnZW50RnVhcyIsImFjdGlvbnMiLCJmdWFzTG9hZGluZyIsImxvYWRpbmciLCJfdXNlRnJlcXVlbnRseUFza2VkUXUiLCJhZ2VudEZhcXMiLCJmYXFzIiwiZmFxc0xvYWRpbmciLCJoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJmYXFzRmV0Y2hSZWYiLCJjdXJyZW50S2V5IiwiY29uY2F0IiwibGFzdEtleSIsImN1cnJlbnQiLCJhZ2VudElkIiwic2hvdWxkU2hvd0ZhcXMiLCJsZW5ndGgiLCJzaG91bGRTaG93RnVhcyIsImhhc0FueUhvbWVMaXN0Q29udGVudCIsInNob3dQcm9qZWN0U3VtbWFyeUNhcmQiLCJlbnRpdHkiLCJzaG93RkFRcyIsImhvbWVTY3JvbGxhYmxlTGF5b3V0Iiwic2hvd0R5bmFtaWNTZWN0aW9uIiwiY29udGVudENvbnRhaW5lclJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNob3dUb3BHcmFkaWVudCIsInNldFNob3dUb3BHcmFkaWVudCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2hvd0JvdHRvbUdyYWRpZW50Iiwic2V0U2hvd0JvdHRvbUdyYWRpZW50IiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc1Njcm9sbGluZyIsInNldElzU2Nyb2xsaW5nIiwic2Nyb2xsVGltZW91dFJlZiIsImdyZWV0aW5nIiwiaW50cm8iLCJpbnRyb2R1Y3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJjaGVja1Njcm9sbCIsImNvbnRhaW5lciIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImlzU2Nyb2xsYWJsZSIsImlzQXRUb3AiLCJpc0F0Qm90dG9tIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJ0aW1lb3V0SWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVuZGVySGVhZGVyQ29udGVudCIsIl9hZ2VudCRjcmVhdGVkX2J5IiwiX2FnZW50JGNyZWF0ZWRfYnkyIiwiY2hpbGRyZW4iLCJlbW9qaSIsIm5hbWUiLCJjcmVhdGVkX2J5IiwidGl0bGUiLCJpc19kZWxldGVkIiwiJG5vR2FwIiwiJHNob3ciLCJyZWYiLCIkaXNBZ2VudFZpZXciLCIkZmxvYXRpbmdDdXN0b21DZW50ZXIiLCIkZ2FwIiwiJG1heFdpZHRoIiwib25DbGljayIsInByb2plY3RTdW1tYXJ5IiwiaGVpZ2h0Iiwid2lkdGgiLCIkZ3JvdyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlIb21lL0NoYXRBSUhvbWUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5cbmltcG9ydCB7IG9wdGlvbnMgfSBmcm9tICcuLi9DaGF0QUlNb2RhbC9jb25zdGFudHMnXG5cbmltcG9ydCB7XG4gIFNDQ0FJSG9tZUNvbnRhaW5lcixcbiAgU0NDQUlIb21lQ29udGVudCxcbiAgU0NDQUlIb21lQ29udGVudElubmVyLFxuICBTQ0NBSUhvbWVHcmFkaWVudFRvcCxcbiAgU0NDQUlIb21lR3JhZGllbnRCb3R0b20sXG4gIFNDQ0FJSG9tZUhlYWRlcixcbiAgU0NDQUlIb21lR3JlZXRpbmcsXG4gIFNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lcixcbiAgU0NDQUlIb21lQWdlbnRJbmZvLFxuICBTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeSxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50LFxuICBTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeVRpdGxlLFxuICBTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeURlc2NyaXB0aW9uLFxuICBTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCxcbiAgU0NDQUlIb21lSW50cm9kdWN0aW9uLFxuICBTQ0NBSUhvbWVDcmVhdGVkQnlDb250YWluZXIsXG4gIFNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQsXG4gIFNDQ0FJSG9tZUNyZWF0ZWRCeVRleHROYW1lLFxuICBTQ0NBSUhvbWVJY29uQ29udGFpbmVyLFxuICBTQ0NBSUhvbWVMb2dvV3JhcHBlcixcbiAgU0NDQUlIb21lTWFpYUhlYWRlclN0YWNrLFxuICBTQ0NBSUhvbWVEeW5hbWljU2VjdGlvbixcbn0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHZhbGlkYXRlSXNNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMvdmFsaWRhdGVJc01haWEnXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMgfSBmcm9tICcuLi8uLi9hdG9tcy9GcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMnXG5pbXBvcnQgeyBGcmVxdWVudGx5VXNlZEFjdGlvbnMgfSBmcm9tICcuLi8uLi9hdG9tcy9GcmVxdWVudGx5VXNlZEFjdGlvbnMnXG5pbXBvcnQgeyB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMnXG5pbXBvcnQgeyB1c2VGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMnXG5pbXBvcnQgeyBNQUlBSXNvbG9nbyB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL01BSUFJc29sb2dvJ1xuaW1wb3J0IHsgVGVtcGxhdGVHcmFkaWVudEljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9UZW1wbGF0ZUdyYWRpZW50SWNvbidcbmltcG9ydCB7IENoYXRBSUhvbWVNYWlha2VyIH0gZnJvbSAnLi9DaGF0QUlIb21lTWFpYWtlcidcblxudHlwZSBDaGF0QUlIb21lUHJvcHMgPSB7XG4gIG9uU3RhcnRDaGF0OiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgbWVudGlvbnM/OiBudWxsLFxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICkgPT4gdm9pZFxuICBoYW5kbGVyczogUmVjb3JkPG9wdGlvbnMsICgpID0+IHZvaWQ+XG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBmbG9hdGluZz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGVudW0gRnJlcXVlbnRRdWVzdGlvbnMge1xuICByZW50YWJpbGlkYWRfcHJveWVjdG8gPSAncmVudGFiaWxpZGFkX3Byb3llY3RvJyxcbiAgYXZhbmNlX3Byb3llY3RvID0gJ2F2YW5jZV9wcm95ZWN0bycsXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlIb21lID0gKHsgaGFuZGxlcnMsIG9uU3RhcnRDaGF0LCBleHBhbmRlZCwgZmxvYXRpbmcgfTogQ2hhdEFJSG9tZVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgYWdlbnQsIHNlY3Rpb24gfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIGNvbnN0IGlzTUFJQSA9IHZhbGlkYXRlSXNNYWlhKGFnZW50IGFzIEFnZW50KVxuICBjb25zdCBmbG9hdGluZ0N1c3RvbUNlbnRlciA9ICEhKGZsb2F0aW5nICYmIGFnZW50Py50eXBlID09PSAnY3VzdG9tJylcbiAgY29uc3QgbGFuZyA9IGkxOG4ubGFuZ3VhZ2UgPT09ICdicicgPyAncHQnIDogaTE4bi5sYW5ndWFnZVxuXG4gIGNvbnN0IHN1bW1hcnlQcm9qZWN0QWNjZXNzID1cbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIChTdHJpbmcod2luZG93Lk1BSUFfUFJPSkVDVF9TVU1NQVJZX0ZFQVRVUkVfQUNDRVNTKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgIFN0cmluZyh3aW5kb3cubWFpYVByb2plY3RTdW1tYXJ5QWNjZXNzKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpXG4gIGNvbnN0IGZhcXNBY2Nlc3MgPSB0cnVlXG4gIGNvbnN0IHNob3dQcm9qZWN0U3VtbWFyeSA9ICEhKGlzTUFJQSAmJiBzdW1tYXJ5UHJvamVjdEFjY2VzcylcbiAgY29uc3QgaXNNYWlha2VyID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG4gIC8vIEZVQSB5IEZBUSBzb2xvIGFwbGljYW4gYSBhZ2VudGVzIGNsb25lIChsb3MgY3VzdG9tIG5vIGxhcyB0aWVuZW4gaGFiaWxpdGFkYXMgcG9yIGFob3JhKS5cbiAgLy8gTWFpYWtlciAoY2xvbmUgZ2xvYmFsKSBxdWVkYSBleGNsdWlkbyBjb21vIGFudGVzLlxuICBjb25zdCBob21lTGlzdHNBZ2VudElkID0gaXNNQUlBICYmICFpc01haWFrZXIgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWRcbiAgY29uc3QgeyBhY3Rpb25zOiBhZ2VudEZ1YXMsIGxvYWRpbmc6IGZ1YXNMb2FkaW5nIH0gPSB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMoaG9tZUxpc3RzQWdlbnRJZCwgc2VjdGlvbilcbiAgY29uc3Qge1xuICAgIGZhcXM6IGFnZW50RmFxcyxcbiAgICBsb2FkaW5nOiBmYXFzTG9hZGluZyxcbiAgICBoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMsXG4gIH0gPSB1c2VGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMoaG9tZUxpc3RzQWdlbnRJZCwgbGFuZylcbiAgY29uc3QgZmFxc0ZldGNoUmVmID0gdXNlUmVmPHsgYWdlbnRJZDogc3RyaW5nOyBsYW5nOiBzdHJpbmcgfSB8IG51bGw+KG51bGwpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc01BSUEgfHwgaXNNYWlha2VyIHx8IHNlY3Rpb24gPT09ICd0YXNrJyB8fCAhYWdlbnQ/LmlkKSByZXR1cm5cbiAgICBjb25zdCBjdXJyZW50S2V5ID0gYCR7YWdlbnQuaWR9LSR7bGFuZ31gXG4gICAgY29uc3QgbGFzdEtleSA9IGZhcXNGZXRjaFJlZi5jdXJyZW50ID8gYCR7ZmFxc0ZldGNoUmVmLmN1cnJlbnQuYWdlbnRJZH0tJHtmYXFzRmV0Y2hSZWYuY3VycmVudC5sYW5nfWAgOiBudWxsXG4gICAgaWYgKGN1cnJlbnRLZXkgIT09IGxhc3RLZXkpIHtcbiAgICAgIGZhcXNGZXRjaFJlZi5jdXJyZW50ID0geyBhZ2VudElkOiBhZ2VudC5pZCwgbGFuZyB9XG4gICAgICBoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMoeyBhZ2VudElkOiBhZ2VudC5pZCwgbGFuZyB9KVxuICAgIH1cbiAgfSwgW2lzTWFpYWtlciwgc2VjdGlvbiwgYWdlbnQ/LmlkLCBsYW5nLCBoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNdKVxuXG4gIGNvbnN0IHNob3VsZFNob3dGYXFzID0gIWlzTWFpYWtlciAmJiBzZWN0aW9uICE9PSAndGFzaycgJiYgZmFxc0FjY2VzcyAmJiAoYWdlbnRGYXFzLmxlbmd0aCA+IDAgfHwgZmFxc0xvYWRpbmcpXG4gIGNvbnN0IHNob3VsZFNob3dGdWFzID0gIWlzTWFpYWtlciAmJiAoYWdlbnRGdWFzLmxlbmd0aCA+IDAgfHwgZnVhc0xvYWRpbmcpXG4gIGNvbnN0IGhhc0FueUhvbWVMaXN0Q29udGVudCA9XG4gICAgKCFpc01haWFrZXIgJiYgc2VjdGlvbiAhPT0gJ3Rhc2snICYmIGZhcXNBY2Nlc3MgJiYgYWdlbnRGYXFzLmxlbmd0aCA+IDApIHx8ICghaXNNYWlha2VyICYmIGFnZW50RnVhcy5sZW5ndGggPiAwKVxuXG4gIGNvbnN0IHNob3dQcm9qZWN0U3VtbWFyeUNhcmQgPSBzaG93UHJvamVjdFN1bW1hcnkgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnXG4gIGNvbnN0IHNob3dGQVFzID0gISEoaGFzQW55SG9tZUxpc3RDb250ZW50IHx8IHNob3dQcm9qZWN0U3VtbWFyeUNhcmQgfHwgaXNNYWlha2VyKVxuICBjb25zdCBob21lU2Nyb2xsYWJsZUxheW91dCA9IHNob3dGQVFzXG4gIGNvbnN0IHNob3dEeW5hbWljU2VjdGlvbiA9IGhhc0FueUhvbWVMaXN0Q29udGVudCB8fCBzaG91bGRTaG93RmFxcyB8fCBzaG91bGRTaG93RnVhcyB8fCBpc01haWFrZXJcblxuICAvLyBMw7NnaWNhIGRlbCBzY3JvbGwgY29uIGdyYWRpZW50ZXNcbiAgY29uc3QgY29udGVudENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgW3Nob3dUb3BHcmFkaWVudCwgc2V0U2hvd1RvcEdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd0JvdHRvbUdyYWRpZW50LCBzZXRTaG93Qm90dG9tR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1Njcm9sbGluZywgc2V0SXNTY3JvbGxpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRpbWVvdXRSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKVxuXG4gIC8vIFNhbHVkbyBhbGVhdG9yaW8gZGVzZGUgYWdlbnQuaW50cm9kdWN0aW9uIChhcnJheSBjb24gMyB2YXJpYW50ZXMgZGVsIGJhY2spLiBFbiB0YXNrLCBtZW5zYWplIGZpam8gaTE4bi4gTWFpYWtlciBzaW4gaW50cm8gZGVsIGFnZW50ZS5cbiAgY29uc3QgZ3JlZXRpbmcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaXNNYWlha2VyKSByZXR1cm4gJydcbiAgICBpZiAoc2VjdGlvbiA9PT0gJ3Rhc2snKSByZXR1cm4gdCgnaG9tZU1lbnUudGFza0dyZWV0aW5nJylcbiAgICBjb25zdCBpbnRybyA9IGFnZW50Py5pbnRyb2R1Y3Rpb25cbiAgICBpZiAoIWludHJvKSByZXR1cm4gJydcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnRybykgJiYgaW50cm8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGludHJvW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGludHJvLmxlbmd0aCldXG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgaW50cm8gPT09ICdzdHJpbmcnID8gaW50cm8gOiAnJ1xuICB9LCBbYWdlbnQ/LmlkLCBhZ2VudD8uaW50cm9kdWN0aW9uLCBzZWN0aW9uLCBpc01haWFrZXIsIHRdKVxuXG4gIGNvbnN0IGNoZWNrU2Nyb2xsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRlbnRDb250YWluZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGFpbmVyIHx8ICFob21lU2Nyb2xsYWJsZUxheW91dCkgcmV0dXJuXG5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgIGNvbnN0IGlzU2Nyb2xsYWJsZSA9IHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodFxuICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxUb3AgPT09IDBcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0ID49IHNjcm9sbEhlaWdodCAtIDFcblxuICAgIHNldFNob3dUb3BHcmFkaWVudChpc1Njcm9sbGFibGUgJiYgIWlzQXRUb3ApXG4gICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KGlzU2Nyb2xsYWJsZSAmJiAhaXNBdEJvdHRvbSlcbiAgICBzZXRJc1Njcm9sbGluZyh0cnVlKVxuXG4gICAgaWYgKHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudClcbiAgICB9XG5cbiAgICBzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzU2Nyb2xsaW5nKGZhbHNlKVxuICAgIH0sIDE1MClcbiAgfSwgW2hvbWVTY3JvbGxhYmxlTGF5b3V0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaG9tZVNjcm9sbGFibGVMYXlvdXQpIHtcbiAgICAgIHNldFNob3dUb3BHcmFkaWVudChmYWxzZSlcbiAgICAgIHNldFNob3dCb3R0b21HcmFkaWVudChmYWxzZSlcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBjb250ZW50Q29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNoZWNrU2Nyb2xsKClcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2hlY2tTY3JvbGwpXG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGNoZWNrU2Nyb2xsLCAxMDApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNoZWNrU2Nyb2xsKVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgIGlmIChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtob21lU2Nyb2xsYWJsZUxheW91dCwgY2hlY2tTY3JvbGxdKVxuXG4gIGNvbnN0IHJlbmRlckhlYWRlckNvbnRlbnQgPSAoKSA9PiB7XG4gICAgaWYgKCFpc01BSUEpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTQ0NBSUhvbWVBZ2VudEluZm9Db250YWluZXI+XG4gICAgICAgICAgPFNDQ0FJSG9tZUFnZW50SW5mbz5cbiAgICAgICAgICAgIHthZ2VudD8uZW1vaml9IHthZ2VudD8ubmFtZX1cbiAgICAgICAgICA8L1NDQ0FJSG9tZUFnZW50SW5mbz5cbiAgICAgICAgICB7YWdlbnQ/LmNyZWF0ZWRfYnkgJiYgIWlzTUFJQSAmJiAoXG4gICAgICAgICAgICA8U0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyPlxuICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgIGFnZW50Py5jcmVhdGVkX2J5Py5pc19kZWxldGVkID8gdCgnaG9tZU1lbnUuY3JlYXRlZEJ5VG9vbHRpcERlbGV0ZWQnKSA6IHQoJ2hvbWVNZW51LmNyZWF0ZWRCeVRvb2x0aXAnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0PlxuICAgICAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LmNyZWF0ZWRCeScpfXsnICd9XG4gICAgICAgICAgICAgICAgICA8U0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWU+e2FnZW50Py5jcmVhdGVkX2J5Py5uYW1lfTwvU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWU+XG4gICAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVDcmVhdGVkQnlUZXh0PlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICA8L1NDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lcj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lcj5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayAkbm9HYXA9eyFncmVldGluZ30+XG4gICAgICAgIDxTQ0NBSUhvbWVJY29uQ29udGFpbmVyPlxuICAgICAgICAgIDxTQ0NBSUhvbWVMb2dvV3JhcHBlcj5cbiAgICAgICAgICAgIDxNQUlBSXNvbG9nbyAvPlxuICAgICAgICAgIDwvU0NDQUlIb21lTG9nb1dyYXBwZXI+XG4gICAgICAgIDwvU0NDQUlIb21lSWNvbkNvbnRhaW5lcj5cbiAgICAgICAge2dyZWV0aW5nID8gPFNDQ0FJSG9tZUdyZWV0aW5nPntncmVldGluZ308L1NDQ0FJSG9tZUdyZWV0aW5nPiA6IG51bGx9XG4gICAgICA8L1NDQ0FJSG9tZU1haWFIZWFkZXJTdGFjaz5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSUhvbWVDb250YWluZXIgc2hvd0ZBUXM9e3Nob3dGQVFzfT5cbiAgICAgIHtob21lU2Nyb2xsYWJsZUxheW91dCAmJiA8U0NDQUlIb21lR3JhZGllbnRUb3AgJHNob3c9e3Nob3dUb3BHcmFkaWVudH0gLz59XG4gICAgICA8U0NDQUlIb21lQ29udGVudFxuICAgICAgICByZWY9e2NvbnRlbnRDb250YWluZXJSZWZ9XG4gICAgICAgIHNob3dGQVFzPXtob21lU2Nyb2xsYWJsZUxheW91dH1cbiAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAkZmxvYXRpbmdDdXN0b21DZW50ZXI9e2Zsb2F0aW5nQ3VzdG9tQ2VudGVyfVxuICAgICAgPlxuICAgICAgICA8U0NDQUlIb21lQ29udGVudElubmVyXG4gICAgICAgICAgc2hvd0ZBUXM9e2hvbWVTY3JvbGxhYmxlTGF5b3V0fVxuICAgICAgICAgICRpc0FnZW50Vmlldz17IWlzTUFJQX1cbiAgICAgICAgICAkZmxvYXRpbmdDdXN0b21DZW50ZXI9e2Zsb2F0aW5nQ3VzdG9tQ2VudGVyfVxuICAgICAgICA+XG4gICAgICAgICAgPFNDQ0FJSG9tZUhlYWRlclxuICAgICAgICAgICAgJGdhcD17aXNNQUlBICYmIHNlY3Rpb24gIT09ICdwcm9qZWN0JyA/ICc4cHgnIDogJzIwcHgnfVxuICAgICAgICAgICAgJG1heFdpZHRoPXtpc01BSUEgPyAnMTAwJScgOiAnMzgwcHgnfVxuICAgICAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtyZW5kZXJIZWFkZXJDb250ZW50KCl9XG5cbiAgICAgICAgICAgIHtzZWN0aW9uICE9PSAncHJvamVjdCcgJiYgKFxuICAgICAgICAgICAgICA8U0NDQUlIb21lSW50cm9kdWN0aW9uIGV4cGFuZGVkPXtleHBhbmRlZH0+eyFpc01BSUEgJiYgYWdlbnQ/LmludHJvZHVjdGlvbn08L1NDQ0FJSG9tZUludHJvZHVjdGlvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9TQ0NBSUhvbWVIZWFkZXI+XG4gICAgICAgICAge3Nob3dQcm9qZWN0U3VtbWFyeUNhcmQgJiYgKFxuICAgICAgICAgICAgPFNDQ0FIV3JhcHBlclN1bW1hcnlQcm9qZWN0IG9uQ2xpY2s9e2hhbmRsZXJzLnByb2plY3RTdW1tYXJ5fT5cbiAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5PlxuICAgICAgICAgICAgICAgIDxUZW1wbGF0ZUdyYWRpZW50SWNvbiBoZWlnaHQ9ezI0fSB3aWR0aD17MjR9IC8+XG4gICAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnk+XG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGU+e3QoJ2hvbWVNZW51LnByb2plY3RTdW1tYXJ5LnRpdGxlJyl9PC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeVRpdGxlPlxuICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeURlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LnByb2plY3RTdW1tYXJ5LmRlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeURlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICA8L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudD5cbiAgICAgICAgICAgIDwvU0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3Q+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7c2hvd0R5bmFtaWNTZWN0aW9uICYmIChcbiAgICAgICAgICAgIDxTQ0NBSUhvbWVEeW5hbWljU2VjdGlvbiAkZ3Jvdz17aXNNYWlha2VyfT5cbiAgICAgICAgICAgICAge3Nob3VsZFNob3dGYXFzICYmIChcbiAgICAgICAgICAgICAgICA8RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgICBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBzaG93RkFRcz17c2hvd0ZBUXN9XG4gICAgICAgICAgICAgICAgICBzaG93UHJvamVjdFN1bW1hcnk9e3Nob3dQcm9qZWN0U3VtbWFyeX1cbiAgICAgICAgICAgICAgICAgIGFnZW50SWQ9e2FnZW50Py5pZH1cbiAgICAgICAgICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBmYXFzPXthZ2VudEZhcXN9XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nPXtmYXFzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7c2hvdWxkU2hvd0Z1YXMgJiYgKFxuICAgICAgICAgICAgICAgIDxGcmVxdWVudGx5VXNlZEFjdGlvbnNcbiAgICAgICAgICAgICAgICAgIG9uU3RhcnRDaGF0PXtvblN0YXJ0Q2hhdH1cbiAgICAgICAgICAgICAgICAgIGFnZW50SWQ9e2FnZW50Py5pZH1cbiAgICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nPXtpc1Njcm9sbGluZ31cbiAgICAgICAgICAgICAgICAgIGFjdGlvbnM9e2FnZW50RnVhc31cbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2Z1YXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtpc01haWFrZXIgPyA8Q2hhdEFJSG9tZU1haWFrZXIgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fSAvPiA6IG51bGx9XG4gICAgICAgICAgICA8L1NDQ0FJSG9tZUR5bmFtaWNTZWN0aW9uPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlIb21lQ29udGVudElubmVyPlxuICAgICAgPC9TQ0NBSUhvbWVDb250ZW50PlxuICAgICAge2hvbWVTY3JvbGxhYmxlTGF5b3V0ICYmIDxTQ0NBSUhvbWVHcmFkaWVudEJvdHRvbSAkc2hvdz17c2hvd0JvdHRvbUdyYWRpZW50fSAvPn1cbiAgICA8L1NDQ0FJSG9tZUNvbnRhaW5lcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsU0FBUyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxPQUFPLFFBQVEsT0FBTztBQUV6RSxTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBQ3RFLFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFJMUMsU0FDRUMsa0JBQWtCLEVBQ2xCQyxnQkFBZ0IsRUFDaEJDLHFCQUFxQixFQUNyQkMsb0JBQW9CLEVBQ3BCQyx1QkFBdUIsRUFDdkJDLGVBQWUsRUFDZkMsaUJBQWlCLEVBQ2pCQywyQkFBMkIsRUFDM0JDLGtCQUFrQixFQUNsQkMsdUJBQXVCLEVBQ3ZCQyw4QkFBOEIsRUFDOUJDLDRCQUE0QixFQUM1QkMsa0NBQWtDLEVBQ2xDQywwQkFBMEIsRUFDMUJDLHFCQUFxQixFQUNyQkMsMkJBQTJCLEVBQzNCQyxzQkFBc0IsRUFDdEJDLDBCQUEwQixFQUMxQkMsc0JBQXNCLEVBQ3RCQyxvQkFBb0IsRUFDcEJDLHdCQUF3QixFQUN4QkMsdUJBQXVCLFFBQ2xCLFVBQVU7QUFDakIsU0FBU0MsZ0JBQWdCLFFBQVEsaUNBQWlDO0FBQ2xFLFNBQVNDLGNBQWMsUUFBUSx3Q0FBd0M7QUFDdkUsU0FBU0MsY0FBYyxRQUFRLGlDQUFpQztBQUdoRSxTQUFTQyx3QkFBd0IsUUFBUSxzQ0FB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
|