@projectcor/maia-components 2.11.36-7 → 2.11.37-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/App.js +11 -24
- package/lib/components/atoms/Chip/Chip.js +35 -31
- package/lib/components/atoms/MAIAInput/MAIAInput.js +436 -126
- package/lib/components/atoms/MAIAInput/styles.js +61 -43
- package/lib/components/atoms/icons/index.js +1 -3
- package/lib/components/index.js +1 -2
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +2 -2
- package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +3 -3
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +2 -2
- package/lib/components/molecules/AbmSection/index.js +1 -2
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +1 -13
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +4 -8
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +2 -21
- package/lib/components/molecules/ChatAIMessages/newStyles.js +2 -2
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +89 -91
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +2 -2
- package/lib/components/molecules/ChatAIModal/constants.js +2 -10
- package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -6
- package/lib/components/molecules/Sidebar/Sidebar.js +31 -68
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -6
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +50 -247
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +4 -4
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +3 -13
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +3 -6
- package/lib/dev/Providers.js +6 -11
- package/lib/hooks/useAgentModel/useCreateAgent.js +10 -11
- package/lib/hooks/useAgentModel/useUpdateAgent.js +11 -12
- package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
- package/lib/hooks/useChatManager/useChatManager.js +11 -21
- package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
- package/lib/hooks/useChatMessages/useChatMessages.js +14 -30
- package/lib/hooks/useEvent.js +2 -5
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -6
- package/lib/lang/br/index.js +5 -266
- package/lib/lang/en/index.js +5 -266
- package/lib/lang/es/index.js +5 -266
- package/lib/lang/fr/index.js +6 -268
- package/lib/services/maia/Agents/createAgent.js +1 -1
- package/lib/services/maia/Agents/getAgentById.js +2 -3
- package/lib/services/maia/Agents/updateAgent.js +1 -1
- package/lib/services/maia/Chats/getChatMessages.js +4 -29
- package/lib/services/maia/Orchestrator/orchestrator.js +9 -11
- package/lib/services/maia/RecentProjects/getRecentProjects.js +4 -12
- package/lib/services/utils/mapChatMessages.js +5 -12
- package/lib/types/Chat.js +1 -1
- package/lib/types/agent.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/lib/utils/hitlAnalytics.js +6 -1
- package/package.json +1 -1
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +0 -28
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +0 -84
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +0 -123
- package/lib/components/atoms/ContextMentionChip/index.js +0 -4
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +0 -85
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +0 -6
- package/lib/components/atoms/ContextMentionEditor/index.js +0 -2
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +0 -188
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +0 -98
- package/lib/components/atoms/ContextMentionItem/index.js +0 -2
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +0 -131
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +0 -63
- package/lib/components/atoms/ContextMentionPopover/index.js +0 -3
- package/lib/components/atoms/icons/NotionIcon.js +0 -36
- package/lib/components/atoms/icons/RocketIcon.js +0 -31
- package/lib/components/atoms/icons/WrenchIcon.js +0 -42
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.js +0 -510
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.styles.js +0 -234
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/catalog.js +0 -437
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/index.js +0 -3
- package/lib/components/molecules/AbmSection/AbmSkillsSection.styles.js +0 -80
- package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.interface.js +0 -2
- package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.js +0 -722
- package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.styles.js +0 -165
- package/lib/components/molecules/AbmSection/AbmTriggersSection/index.js +0 -2
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +0 -55
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +0 -6
- package/lib/components/molecules/ContextMentionInput/index.js +0 -2
- package/lib/components/molecules/SchedulesPage/SchedulesPage.js +0 -610
- package/lib/components/molecules/SchedulesPage/index.js +0 -2
- package/lib/components/molecules/SkillsPage/SkillsPage.js +0 -708
- package/lib/components/molecules/SkillsPage/index.js +0 -2
- package/lib/components/molecules/maiaSectionModalStyles.js +0 -91
- package/lib/components/molecules/maiaSectionUiTokens.js +0 -31
- package/lib/constants/taskLinkIcon.js +0 -6
- package/lib/dev/DevAbmAgentModal.js +0 -114
- package/lib/dev/DevContextMentionInput.js +0 -65
- package/lib/dev/mocks/abmModalMocks.js +0 -193
- package/lib/hooks/useCaretPosition.js +0 -35
- package/lib/hooks/useContextMentions.js +0 -204
- package/lib/hooks/useEntitySearch.js +0 -405
- package/lib/hooks/useMentionAllowedTypes.js +0 -86
- package/lib/hooks/useMentionPopover.js +0 -284
- package/lib/services/maia/Agents/connectors.js +0 -110
- package/lib/services/maia/Agents/skills.js +0 -164
- package/lib/services/maia/Schedules/createSchedule.js +0 -39
- package/lib/services/maia/Schedules/deleteSchedule.js +0 -36
- package/lib/services/maia/Schedules/getMySchedules.js +0 -55
- package/lib/services/maia/Schedules/getSchedules.js +0 -58
- package/lib/services/maia/Schedules/index.js +0 -5
- package/lib/services/query/entitySearchQuery.js +0 -16
- package/lib/services/query/usersDirectoryQuery.js +0 -19
- package/lib/types/agentSkill.js +0 -2
- package/lib/types/attachment.js +0 -2
- package/lib/types/contextMention.js +0 -37
- package/lib/utils/contextMentionIcons.js +0 -115
- package/lib/utils/contextMentionLabel.js +0 -4
- package/lib/utils/contextMentionTypeLabel.js +0 -17
- package/lib/utils/renderContextMentions.js +0 -216
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
1
2
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
4
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
5
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
6
|
+
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; }
|
|
7
|
+
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; }
|
|
2
8
|
/* eslint-disable no-restricted-syntax */
|
|
3
9
|
/* eslint-disable no-continue */
|
|
4
10
|
/* eslint-disable no-void */
|
|
@@ -9,26 +15,28 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
|
9
15
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
10
16
|
/* eslint-disable no-console */
|
|
11
17
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
18
|
+
import { useEffect, useRef, useState } from 'react';
|
|
19
|
+
import { Popover } from '@mui/material';
|
|
14
20
|
import { PaperPlane } from '@projectcor/icons/lib/components/PaperPlane';
|
|
15
21
|
import { Attach } from '@projectcor/icons/lib/components/Attach';
|
|
16
22
|
import { Globe } from '@projectcor/icons/lib/components/Globe';
|
|
17
23
|
import { Trash } from '@projectcor/icons/lib/components/Trash';
|
|
24
|
+
import { Plus } from '@projectcor/icons/lib/components/Plus';
|
|
25
|
+
import { Check } from '@projectcor/icons/lib/components/Check';
|
|
26
|
+
import { Cross } from '@projectcor/icons/lib/components/Cross';
|
|
18
27
|
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
19
|
-
import {
|
|
28
|
+
import { ActiveToolChipIconButton, ActiveToolChipLabel, ActiveToolChipRoot, PlusMenuDivider, PlusMenuInnerColumn, PlusMenuItemButton, PlusMenuItemLabel, PlusMenuPaper, PlusMenuToolsRow, PlusToggleButton, SCMIAttachment, SCMIAttachmentDeleteIcon, StyledMAIAInput, StyledMAIAInputButtons, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAStopButton, StyledMAIAStopIcon } from './styles';
|
|
20
29
|
import { useGlobalContext } from '../../../context/global-context';
|
|
21
30
|
import { ModalFileExceeds } from '../../organisms/ModalFileExceeds';
|
|
22
31
|
import { useT } from '../../../hooks/useT';
|
|
23
32
|
import { TelescopeIcon } from '../icons/TelescopeIcon';
|
|
24
33
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
34
|
+
import { getChatToolsMenuAgentType } from '../../../utils/hitlAnalytics';
|
|
25
35
|
import { allowedFileTypes, fileTypes, MAX_FILE_SIZE_MB_MAIA_VISION, MAX_FILE_SIZE_MB_OLD, MAX_FILE_SIZE_MB_AUDIO } from '../../../constants/formatExtensions';
|
|
26
|
-
import { BLUE_IA_COLORS } from '../../../styles/config';
|
|
27
|
-
import { ContextMentionEditor } from '../ContextMentionEditor';
|
|
28
|
-
// eslint-disable-next-line import/no-cycle
|
|
29
|
-
import { useMentionPopover } from '../../../hooks/useMentionPopover';
|
|
30
36
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
37
|
+
var TOOL_CHIP_EXIT_MS = 220;
|
|
31
38
|
export var MAIAInput = function MAIAInput(_ref) {
|
|
39
|
+
var _agent$entity;
|
|
32
40
|
var onSendMessage = _ref.onSendMessage,
|
|
33
41
|
className = _ref.className,
|
|
34
42
|
disabled = _ref.disabled,
|
|
@@ -47,13 +55,13 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
47
55
|
newChatKey = _ref.newChatKey;
|
|
48
56
|
var _useT = useT(),
|
|
49
57
|
t = _useT.t;
|
|
50
|
-
var
|
|
58
|
+
var inputRef = useRef(null);
|
|
51
59
|
var fileInputRef = useRef(null);
|
|
52
60
|
var wrapperRef = useRef(null);
|
|
53
61
|
var _useState = useState(''),
|
|
54
62
|
_useState2 = _slicedToArray(_useState, 2),
|
|
55
|
-
|
|
56
|
-
|
|
63
|
+
valueTextarea = _useState2[0],
|
|
64
|
+
setValueTextarea = _useState2[1];
|
|
57
65
|
var _useState3 = useState(true),
|
|
58
66
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
59
67
|
isDisabled = _useState4[0],
|
|
@@ -78,63 +86,256 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
78
86
|
toggleDeepSearch = _useGlobalContext.toggleDeepSearch,
|
|
79
87
|
isDeepSearchActive = _useGlobalContext.isDeepSearchActive,
|
|
80
88
|
agent = _useGlobalContext.agent;
|
|
81
|
-
var
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
var
|
|
89
|
+
var _useState9 = useState(null),
|
|
90
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
91
|
+
plusMenuAnchor = _useState0[0],
|
|
92
|
+
setPlusMenuAnchor = _useState0[1];
|
|
93
|
+
var _useState1 = useState(false),
|
|
94
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
95
|
+
activeToolChipHovered = _useState10[0],
|
|
96
|
+
setActiveToolChipHovered = _useState10[1];
|
|
97
|
+
var _useState11 = useState(false),
|
|
98
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
99
|
+
toolChipExiting = _useState12[0],
|
|
100
|
+
setToolChipExiting = _useState12[1];
|
|
101
|
+
var toolChipExitTimerRef = useRef(null);
|
|
102
|
+
var searchModeActiveRef = useRef({
|
|
103
|
+
web: false,
|
|
104
|
+
deep: false
|
|
105
|
+
});
|
|
106
|
+
var plusMenuOpen = Boolean(plusMenuAnchor);
|
|
107
|
+
searchModeActiveRef.current = {
|
|
108
|
+
web: isWebSearchActive,
|
|
109
|
+
deep: isDeepSearchActive
|
|
110
|
+
};
|
|
111
|
+
var analyticsAgentType = getChatToolsMenuAgentType(agent);
|
|
112
|
+
var analyticsCloneEntityPayload = (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' ? {
|
|
113
|
+
entity: (_agent$entity = agent.entity) !== null && _agent$entity !== void 0 ? _agent$entity : null
|
|
114
|
+
} : {};
|
|
115
|
+
var closePlusMenu = function closePlusMenu() {
|
|
116
|
+
setPlusMenuAnchor(null);
|
|
117
|
+
};
|
|
118
|
+
var handlePlusButtonClick = function handlePlusButtonClick(e) {
|
|
119
|
+
e.stopPropagation();
|
|
120
|
+
if (plusMenuAnchor) {
|
|
121
|
+
closePlusMenu();
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
setPlusMenuAnchor(e.currentTarget);
|
|
125
|
+
eventAmplitude(EVENTS.aiChatPlusOpen, _objectSpread({
|
|
126
|
+
agent_type: analyticsAgentType
|
|
127
|
+
}, analyticsCloneEntityPayload));
|
|
128
|
+
};
|
|
129
|
+
var handlePlusMenuAttach = function handlePlusMenuAttach() {
|
|
130
|
+
var _fileInputRef$current;
|
|
131
|
+
closePlusMenu();
|
|
132
|
+
eventAmplitude(EVENTS.aiChatTools, _objectSpread({
|
|
133
|
+
agent_type: analyticsAgentType,
|
|
134
|
+
option: 'files'
|
|
135
|
+
}, analyticsCloneEntityPayload));
|
|
136
|
+
if (attachments.length >= 5) return;
|
|
137
|
+
(_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || _fileInputRef$current.click();
|
|
138
|
+
};
|
|
139
|
+
var beginToolChipExit = function beginToolChipExit() {
|
|
140
|
+
if (toolChipExitTimerRef.current !== null) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
var wasWeb = isWebSearchActive;
|
|
144
|
+
var wasDeep = isDeepSearchActive;
|
|
145
|
+
if (!wasWeb && !wasDeep) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
setToolChipExiting(true);
|
|
149
|
+
toolChipExitTimerRef.current = setTimeout(function () {
|
|
150
|
+
toolChipExitTimerRef.current = null;
|
|
151
|
+
var _searchModeActiveRef$ = searchModeActiveRef.current,
|
|
152
|
+
web = _searchModeActiveRef$.web,
|
|
153
|
+
deep = _searchModeActiveRef$.deep;
|
|
154
|
+
if (wasWeb && web) {
|
|
155
|
+
toggleWebSearch();
|
|
156
|
+
} else if (wasDeep && deep) {
|
|
157
|
+
toggleDeepSearch();
|
|
158
|
+
}
|
|
159
|
+
setToolChipExiting(false);
|
|
160
|
+
}, TOOL_CHIP_EXIT_MS);
|
|
161
|
+
};
|
|
162
|
+
var handlePlusMenuWebSearch = function handlePlusMenuWebSearch() {
|
|
163
|
+
closePlusMenu();
|
|
164
|
+
if (isWebSearchActive) {
|
|
165
|
+
beginToolChipExit();
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
94
168
|
if (isDeepSearchActive) {
|
|
95
169
|
toggleDeepSearch();
|
|
96
170
|
}
|
|
97
171
|
toggleWebSearch();
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
172
|
+
eventAmplitude(EVENTS.aiChatTools, _objectSpread({
|
|
173
|
+
agent_type: analyticsAgentType,
|
|
174
|
+
option: 'search'
|
|
175
|
+
}, analyticsCloneEntityPayload));
|
|
103
176
|
};
|
|
104
|
-
var
|
|
177
|
+
var handlePlusMenuDeepSearch = function handlePlusMenuDeepSearch() {
|
|
178
|
+
closePlusMenu();
|
|
179
|
+
if (isDeepSearchActive) {
|
|
180
|
+
beginToolChipExit();
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
105
183
|
if (isWebSearchActive) {
|
|
106
184
|
toggleWebSearch();
|
|
107
185
|
}
|
|
108
186
|
toggleDeepSearch();
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
187
|
+
eventAmplitude(EVENTS.aiChatTools, _objectSpread({
|
|
188
|
+
agent_type: analyticsAgentType,
|
|
189
|
+
option: 'deep_search'
|
|
190
|
+
}, analyticsCloneEntityPayload));
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
// Inicializar las referencias como undefined para detectar el primer cambio correctamente
|
|
194
|
+
var previousAgentIdRef = useRef(undefined);
|
|
195
|
+
var previousChatIdRef = useRef(undefined);
|
|
196
|
+
var previousNewChatKeyRef = useRef(undefined);
|
|
197
|
+
var handleResize = function handleResize() {
|
|
198
|
+
var textarea = inputRef.current;
|
|
199
|
+
if (!textarea) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Altura mínima equivalente a una línea
|
|
204
|
+
var minHeight = 22.1;
|
|
205
|
+
var maxHeight = 122.1;
|
|
206
|
+
|
|
207
|
+
// Para medir correctamente el scrollHeight, necesitamos quitar temporalmente las restricciones
|
|
208
|
+
var previousMinHeight = textarea.style.minHeight;
|
|
209
|
+
var previousMaxHeight = textarea.style.maxHeight;
|
|
210
|
+
|
|
211
|
+
// Establecer altura a 'auto' y quitar temporalmente min-height y max-height para medir correctamente
|
|
212
|
+
textarea.style.height = 'auto';
|
|
213
|
+
textarea.style.minHeight = '0px';
|
|
214
|
+
textarea.style.maxHeight = 'none';
|
|
215
|
+
|
|
216
|
+
// Forzar reflow para que el navegador recalcule
|
|
217
|
+
void textarea.offsetHeight;
|
|
218
|
+
|
|
219
|
+
// Ahora medir el scrollHeight real sin restricciones
|
|
220
|
+
var scrollHeight = textarea.scrollHeight;
|
|
221
|
+
|
|
222
|
+
// Calcular la altura de una línea usando los estilos computados
|
|
223
|
+
var computedStyle = window.getComputedStyle(textarea);
|
|
224
|
+
var lineHeight = parseFloat(computedStyle.lineHeight) || 20; // Fallback a 20px si no está definido
|
|
225
|
+
var paddingTop = parseFloat(computedStyle.paddingTop) || 0;
|
|
226
|
+
var paddingBottom = parseFloat(computedStyle.paddingBottom) || 0;
|
|
227
|
+
var borderTop = parseFloat(computedStyle.borderTopWidth) || 0;
|
|
228
|
+
var borderBottom = parseFloat(computedStyle.borderBottomWidth) || 0;
|
|
229
|
+
|
|
230
|
+
// Altura de una línea completa (line-height + padding + border)
|
|
231
|
+
var singleLineHeight = lineHeight + paddingTop + paddingBottom + borderTop + borderBottom;
|
|
232
|
+
var isEmpty = textarea.value.trim() === '';
|
|
233
|
+
|
|
234
|
+
// Medir el ancho del texto usando Canvas para determinar si se envuelve a múltiples líneas
|
|
235
|
+
var hasMultipleVisualLines = false;
|
|
236
|
+
var canvas = document.createElement('canvas');
|
|
237
|
+
var context = canvas.getContext('2d');
|
|
238
|
+
if (!context) {
|
|
239
|
+
// Fallback si Canvas no está disponible: usar scrollHeight
|
|
240
|
+
hasMultipleVisualLines = scrollHeight > singleLineHeight * 1.5;
|
|
241
|
+
} else {
|
|
242
|
+
var textareaStyles = window.getComputedStyle(textarea);
|
|
243
|
+
context.font = "".concat(textareaStyles.fontWeight, " ").concat(textareaStyles.fontSize, " ").concat(textareaStyles.fontFamily);
|
|
244
|
+
|
|
245
|
+
// Calcular el ancho disponible (ancho total menos padding izquierdo/derecho y border izquierdo/derecho)
|
|
246
|
+
var paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;
|
|
247
|
+
var paddingRight = parseFloat(computedStyle.paddingRight) || 0;
|
|
248
|
+
var borderLeft = parseFloat(computedStyle.borderLeftWidth) || 0;
|
|
249
|
+
var borderRight = parseFloat(computedStyle.borderRightWidth) || 0;
|
|
250
|
+
var textareaWidth = textarea.offsetWidth - paddingLeft - paddingRight - borderLeft - borderRight;
|
|
251
|
+
var text = textarea.value || '';
|
|
252
|
+
var lines = text.split('\n');
|
|
253
|
+
|
|
254
|
+
// Si hay múltiples líneas por saltos de línea explícitos
|
|
255
|
+
if (lines.length > 1) {
|
|
256
|
+
hasMultipleVisualLines = true;
|
|
257
|
+
} else {
|
|
258
|
+
// Verificar si el texto se envuelve midiendo el ancho de cada línea
|
|
259
|
+
var _iterator = _createForOfIteratorHelper(lines),
|
|
260
|
+
_step;
|
|
261
|
+
try {
|
|
262
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
263
|
+
var line = _step.value;
|
|
264
|
+
if (line.trim() === '') continue;
|
|
265
|
+
var textWidth = context.measureText(line).width;
|
|
266
|
+
// Si alguna línea es más ancha que el textarea disponible, se envuelve
|
|
267
|
+
if (textWidth > textareaWidth) {
|
|
268
|
+
hasMultipleVisualLines = true;
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
} catch (err) {
|
|
273
|
+
_iterator.e(err);
|
|
274
|
+
} finally {
|
|
275
|
+
_iterator.f();
|
|
276
|
+
}
|
|
277
|
+
}
|
|
113
278
|
}
|
|
279
|
+
var newHeight;
|
|
280
|
+
if (isEmpty) {
|
|
281
|
+
// Cuando está vacío, usar altura mínima
|
|
282
|
+
newHeight = minHeight;
|
|
283
|
+
} else if (!hasMultipleVisualLines) {
|
|
284
|
+
// Cuando hay contenido pero solo una línea visual, usar altura mínima
|
|
285
|
+
newHeight = minHeight;
|
|
286
|
+
} else {
|
|
287
|
+
// Para múltiples líneas visuales, usar el scrollHeight
|
|
288
|
+
newHeight = Math.min(Math.max(scrollHeight, minHeight), maxHeight);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Restaurar estilos antes de aplicar la nueva altura
|
|
292
|
+
textarea.style.minHeight = previousMinHeight || '22.1px';
|
|
293
|
+
textarea.style.maxHeight = previousMaxHeight || '122.1px';
|
|
294
|
+
textarea.style.height = "".concat(newHeight, "px");
|
|
114
295
|
};
|
|
115
296
|
useEffect(function () {
|
|
116
|
-
if (!disabled) {
|
|
117
|
-
|
|
118
|
-
(
|
|
297
|
+
if (inputRef.current && !disabled) {
|
|
298
|
+
inputRef.current.focus();
|
|
299
|
+
handleResize();
|
|
119
300
|
}
|
|
120
301
|
}, [disabled]);
|
|
302
|
+
useEffect(function () {
|
|
303
|
+
return function () {
|
|
304
|
+
if (toolChipExitTimerRef.current !== null) {
|
|
305
|
+
clearTimeout(toolChipExitTimerRef.current);
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
}, []);
|
|
309
|
+
useEffect(function () {
|
|
310
|
+
if (!isWebSearchActive && !isDeepSearchActive) {
|
|
311
|
+
setActiveToolChipHovered(false);
|
|
312
|
+
}
|
|
313
|
+
}, [isWebSearchActive, isDeepSearchActive]);
|
|
121
314
|
|
|
122
315
|
// Auto-focus cuando cambia el agente o la conversación, o al montar el componente
|
|
123
316
|
useEffect(function () {
|
|
317
|
+
// Comparación que maneja correctamente undefined/null
|
|
124
318
|
var agentChanged = previousAgentIdRef.current !== (agent === null || agent === void 0 ? void 0 : agent.id);
|
|
319
|
+
// Comparación estricta que detecta cambios incluso cuando uno es undefined
|
|
125
320
|
var previousChatId = previousChatIdRef.current;
|
|
126
321
|
var currentChatId = chatId;
|
|
127
322
|
var chatChanged = previousChatId !== currentChatId;
|
|
323
|
+
// Detectar cambio específico de undefined/null a un valor (nuevo chat -> conversación vieja)
|
|
128
324
|
var changedFromNewChatToOldChat = (previousChatId === undefined || previousChatId === null) && currentChatId !== undefined && currentChatId !== null;
|
|
129
325
|
var newChatStarted = previousNewChatKeyRef.current !== newChatKey;
|
|
130
326
|
var isInitialMount = previousAgentIdRef.current === undefined && previousChatIdRef.current === undefined;
|
|
131
|
-
if ((agentChanged || chatChanged || changedFromNewChatToOldChat || newChatStarted || isInitialMount) && !disabled) {
|
|
327
|
+
if ((agentChanged || chatChanged || changedFromNewChatToOldChat || newChatStarted || isInitialMount) && inputRef.current && !disabled) {
|
|
328
|
+
// Usar setTimeout para asegurar que el DOM esté listo
|
|
329
|
+
// Aumentar el delay para casos donde el componente se está montando
|
|
132
330
|
var delay = isInitialMount || changedFromNewChatToOldChat ? 200 : 100;
|
|
133
331
|
setTimeout(function () {
|
|
134
|
-
|
|
135
|
-
|
|
332
|
+
if (inputRef.current && !disabled) {
|
|
333
|
+
inputRef.current.focus();
|
|
334
|
+
}
|
|
136
335
|
}, delay);
|
|
137
336
|
}
|
|
337
|
+
|
|
338
|
+
// Actualizar las referencias DESPUÉS de la comparación
|
|
138
339
|
previousAgentIdRef.current = agent === null || agent === void 0 ? void 0 : agent.id;
|
|
139
340
|
previousChatIdRef.current = chatId;
|
|
140
341
|
previousNewChatKeyRef.current = newChatKey;
|
|
@@ -143,46 +344,72 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
143
344
|
// Clear input when session changes (user switches to a different chat)
|
|
144
345
|
useEffect(function () {
|
|
145
346
|
var handleSessionChange = function handleSessionChange() {
|
|
146
|
-
|
|
147
|
-
(_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.clear();
|
|
148
|
-
setValueText('');
|
|
347
|
+
setValueTextarea('');
|
|
149
348
|
setIsDisabled(true);
|
|
349
|
+
if (inputRef.current) {
|
|
350
|
+
inputRef.current.value = '';
|
|
351
|
+
}
|
|
352
|
+
handleResize();
|
|
150
353
|
};
|
|
151
354
|
document.addEventListener('chat-session-changed', handleSessionChange);
|
|
152
355
|
return function () {
|
|
153
|
-
|
|
356
|
+
document.removeEventListener('chat-session-changed', handleSessionChange);
|
|
154
357
|
};
|
|
155
358
|
}, []);
|
|
156
359
|
useEffect(function () {
|
|
157
|
-
var
|
|
360
|
+
var animationFrameId = requestAnimationFrame(function () {
|
|
361
|
+
handleResize();
|
|
362
|
+
});
|
|
363
|
+
return function () {
|
|
364
|
+
return cancelAnimationFrame(animationFrameId);
|
|
365
|
+
};
|
|
366
|
+
}, [valueTextarea]);
|
|
367
|
+
useEffect(function () {
|
|
368
|
+
var hasText = valueTextarea.trim().length > 0;
|
|
158
369
|
var hasAttachments = attachments.length > 0;
|
|
159
370
|
setIsDisabled(!hasText && !hasAttachments);
|
|
160
|
-
}, [attachments,
|
|
161
|
-
var handleSendMessage =
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
}, [attachments.length, onChange, handleTrigger]);
|
|
179
|
-
var handleKeyDown = useCallback(function (e) {
|
|
180
|
-
if (handlePopoverKeyDown(e)) return;
|
|
181
|
-
if (e.key === 'Enter' && !e.shiftKey && !popoverOpen) {
|
|
371
|
+
}, [attachments, valueTextarea]);
|
|
372
|
+
var handleSendMessage = function handleSendMessage() {
|
|
373
|
+
if (inputRef.current) {
|
|
374
|
+
onSendMessage(inputRef.current.value, attachments);
|
|
375
|
+
inputRef.current.value = '';
|
|
376
|
+
setValueTextarea('');
|
|
377
|
+
setIsDisabled(true);
|
|
378
|
+
handleResize();
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
if (attachments.length) {
|
|
382
|
+
onSendMessage('', attachments);
|
|
383
|
+
setValueTextarea('');
|
|
384
|
+
setIsDisabled(true);
|
|
385
|
+
}
|
|
386
|
+
};
|
|
387
|
+
var handleKeyDown = function handleKeyDown(e) {
|
|
388
|
+
if (e.key === 'Enter' && !e.shiftKey) {
|
|
182
389
|
e.preventDefault();
|
|
183
|
-
if (!isDisabled && !disabled)
|
|
390
|
+
if (!isDisabled && !disabled) {
|
|
391
|
+
handleSendMessage();
|
|
392
|
+
}
|
|
184
393
|
}
|
|
185
|
-
}
|
|
394
|
+
};
|
|
395
|
+
var handleChange = function handleChange(e) {
|
|
396
|
+
var hasText = e.target.value.trim().length > 0;
|
|
397
|
+
var hasAttachments = attachments.length > 0;
|
|
398
|
+
setIsDisabled(!hasText && !hasAttachments);
|
|
399
|
+
setValueTextarea(e.target.value);
|
|
400
|
+
onChange === null || onChange === void 0 || onChange();
|
|
401
|
+
};
|
|
402
|
+
var handlePaste = function handlePaste() {
|
|
403
|
+
setTimeout(function () {
|
|
404
|
+
var _inputRef$current$val, _inputRef$current;
|
|
405
|
+
handleResize();
|
|
406
|
+
var currentValue = (_inputRef$current$val = (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.value) !== null && _inputRef$current$val !== void 0 ? _inputRef$current$val : '';
|
|
407
|
+
var hasText = currentValue.trim().length > 0;
|
|
408
|
+
var hasAttachments = attachments.length > 0;
|
|
409
|
+
setValueTextarea(currentValue);
|
|
410
|
+
setIsDisabled(!hasText && !hasAttachments);
|
|
411
|
+
}, 10);
|
|
412
|
+
};
|
|
186
413
|
var handleFileSelect = function handleFileSelect(e) {
|
|
187
414
|
var files = e.target.files;
|
|
188
415
|
if (!files) return;
|
|
@@ -265,17 +492,14 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
265
492
|
fileInputRef.current.value = '';
|
|
266
493
|
}
|
|
267
494
|
};
|
|
268
|
-
var handleAttachClick = function handleAttachClick() {
|
|
269
|
-
var _fileInputRef$current;
|
|
270
|
-
eventAmplitude(EVENTS.aiChatTools, {
|
|
271
|
-
option: 'files'
|
|
272
|
-
});
|
|
273
|
-
if (attachments.length >= 5) return;
|
|
274
|
-
(_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || _fileInputRef$current.click();
|
|
275
|
-
};
|
|
276
495
|
var handleDeleteAttachment = function handleDeleteAttachment(fileId) {
|
|
277
496
|
onDeleteAttachment === null || onDeleteAttachment === void 0 || onDeleteAttachment(fileId);
|
|
278
497
|
};
|
|
498
|
+
var handleBlur = function handleBlur() {
|
|
499
|
+
var hasText = valueTextarea.trim().length > 0;
|
|
500
|
+
var hasAttachments = attachments.length > 0;
|
|
501
|
+
setIsDisabled(!hasText && !hasAttachments);
|
|
502
|
+
};
|
|
279
503
|
var handleWrapperFocus = function handleWrapperFocus() {
|
|
280
504
|
return setIsFocused(true);
|
|
281
505
|
};
|
|
@@ -291,7 +515,30 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
291
515
|
eventAmplitude(EVENTS.aiChatStopResponse);
|
|
292
516
|
onStopGeneration === null || onStopGeneration === void 0 || onStopGeneration();
|
|
293
517
|
};
|
|
294
|
-
var
|
|
518
|
+
var plusIconColor = isFocused ? '#666666' : '#999';
|
|
519
|
+
var plusMenuIconColor = '#4d4d4d';
|
|
520
|
+
/** Alineado con `PlusMenuItemLabel` ($selected) y el check del menú */
|
|
521
|
+
var plusMenuSelectedColor = '#00578c';
|
|
522
|
+
var activeToolChipLeadingIcon;
|
|
523
|
+
if (activeToolChipHovered) {
|
|
524
|
+
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Cross, {
|
|
525
|
+
color: "#a4adb5",
|
|
526
|
+
width: 18,
|
|
527
|
+
height: 18
|
|
528
|
+
});
|
|
529
|
+
} else if (isWebSearchActive) {
|
|
530
|
+
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Globe, {
|
|
531
|
+
color: plusMenuIconColor,
|
|
532
|
+
width: 18,
|
|
533
|
+
height: 18
|
|
534
|
+
});
|
|
535
|
+
} else {
|
|
536
|
+
activeToolChipLeadingIcon = /*#__PURE__*/_jsx(TelescopeIcon, {
|
|
537
|
+
color: plusMenuIconColor,
|
|
538
|
+
width: 18,
|
|
539
|
+
height: 18
|
|
540
|
+
});
|
|
541
|
+
}
|
|
295
542
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
296
543
|
children: [/*#__PURE__*/_jsxs(StyledMAIAInputWrapper, {
|
|
297
544
|
ref: wrapperRef,
|
|
@@ -330,57 +577,120 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
330
577
|
})
|
|
331
578
|
}, "".concat(index, "-").concat(attachment.name));
|
|
332
579
|
})
|
|
333
|
-
}), /*#__PURE__*/_jsx(
|
|
334
|
-
ref:
|
|
580
|
+
}), /*#__PURE__*/_jsx(StyledMAIAInput, {
|
|
581
|
+
ref: inputRef,
|
|
335
582
|
disabled: disabled,
|
|
336
|
-
|
|
337
|
-
onInput: handleEditorInput,
|
|
583
|
+
onChange: handleChange,
|
|
338
584
|
onKeyDown: handleKeyDown,
|
|
339
|
-
|
|
340
|
-
|
|
585
|
+
onPaste: handlePaste,
|
|
586
|
+
placeholder: placeholder,
|
|
587
|
+
alignButtons: alignButtons,
|
|
588
|
+
onBlur: handleBlur
|
|
341
589
|
}), /*#__PURE__*/_jsxs(StyledMAIAInputButtons, {
|
|
342
|
-
children: [/*#__PURE__*/_jsxs(
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
children: /*#__PURE__*/_jsx(Attach, {
|
|
355
|
-
color: !attachments.length ? iconColorInactive : "".concat(BLUE_IA_COLORS[500]),
|
|
356
|
-
width: 18,
|
|
357
|
-
height: 18
|
|
358
|
-
})
|
|
590
|
+
children: [/*#__PURE__*/_jsxs(PlusMenuToolsRow, {
|
|
591
|
+
children: [/*#__PURE__*/_jsx(PlusToggleButton, {
|
|
592
|
+
type: "button",
|
|
593
|
+
$menuOpen: plusMenuOpen,
|
|
594
|
+
onClick: handlePlusButtonClick,
|
|
595
|
+
"aria-label": t('chat.openPlusMenuAria'),
|
|
596
|
+
"aria-haspopup": "true",
|
|
597
|
+
"aria-expanded": plusMenuOpen,
|
|
598
|
+
children: /*#__PURE__*/_jsx(Plus, {
|
|
599
|
+
color: plusIconColor,
|
|
600
|
+
width: 20,
|
|
601
|
+
height: 20
|
|
359
602
|
})
|
|
360
|
-
}), /*#__PURE__*/_jsx(
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
}
|
|
603
|
+
}), /*#__PURE__*/_jsx(Popover, {
|
|
604
|
+
open: plusMenuOpen,
|
|
605
|
+
anchorEl: plusMenuAnchor,
|
|
606
|
+
onClose: closePlusMenu,
|
|
607
|
+
anchorOrigin: {
|
|
608
|
+
vertical: 'top',
|
|
609
|
+
horizontal: 'left'
|
|
610
|
+
},
|
|
611
|
+
transformOrigin: {
|
|
612
|
+
vertical: 'bottom',
|
|
613
|
+
horizontal: 'left'
|
|
614
|
+
},
|
|
615
|
+
slotProps: {
|
|
616
|
+
paper: {
|
|
617
|
+
elevation: 0,
|
|
618
|
+
sx: {
|
|
619
|
+
overflow: 'visible',
|
|
620
|
+
borderRadius: '4px',
|
|
621
|
+
boxShadow: 'none',
|
|
622
|
+
backgroundColor: 'transparent',
|
|
623
|
+
marginTop: '-4px'
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
},
|
|
627
|
+
children: /*#__PURE__*/_jsxs(PlusMenuPaper, {
|
|
628
|
+
children: [/*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
|
|
629
|
+
children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
630
|
+
type: "button",
|
|
631
|
+
onClick: handlePlusMenuAttach,
|
|
632
|
+
children: [/*#__PURE__*/_jsx(Attach, {
|
|
633
|
+
color: plusMenuIconColor,
|
|
634
|
+
width: 20,
|
|
635
|
+
height: 20
|
|
636
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
637
|
+
$selected: false,
|
|
638
|
+
children: t('chat.plusMenuAttach')
|
|
639
|
+
})]
|
|
640
|
+
}), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
641
|
+
type: "button",
|
|
642
|
+
onClick: handlePlusMenuWebSearch,
|
|
643
|
+
children: [/*#__PURE__*/_jsx(Globe, {
|
|
644
|
+
color: isWebSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
|
|
645
|
+
width: 20,
|
|
646
|
+
height: 20
|
|
647
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
648
|
+
$selected: !!isWebSearchActive,
|
|
649
|
+
children: t('chat.searchWeb')
|
|
650
|
+
}), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
651
|
+
color: plusMenuSelectedColor,
|
|
652
|
+
width: 16,
|
|
653
|
+
height: 16
|
|
654
|
+
}) : null]
|
|
655
|
+
})]
|
|
656
|
+
}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
|
|
657
|
+
type: "button",
|
|
658
|
+
onClick: handlePlusMenuDeepSearch,
|
|
659
|
+
children: [/*#__PURE__*/_jsx(TelescopeIcon, {
|
|
660
|
+
color: isDeepSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
|
|
661
|
+
width: 20,
|
|
662
|
+
height: 20
|
|
663
|
+
}), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
|
|
664
|
+
$selected: !!isDeepSearchActive,
|
|
665
|
+
children: t('chat.plusMenuDeepInvestigation')
|
|
666
|
+
}), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
|
|
667
|
+
color: plusMenuSelectedColor,
|
|
668
|
+
width: 16,
|
|
669
|
+
height: 16
|
|
670
|
+
}) : null]
|
|
671
|
+
})]
|
|
383
672
|
})
|
|
673
|
+
}), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
|
|
674
|
+
$hovered: activeToolChipHovered,
|
|
675
|
+
$exiting: toolChipExiting,
|
|
676
|
+
onMouseEnter: function onMouseEnter() {
|
|
677
|
+
return setActiveToolChipHovered(true);
|
|
678
|
+
},
|
|
679
|
+
onMouseLeave: function onMouseLeave() {
|
|
680
|
+
return setActiveToolChipHovered(false);
|
|
681
|
+
},
|
|
682
|
+
children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
|
|
683
|
+
type: "button",
|
|
684
|
+
$closeShown: activeToolChipHovered,
|
|
685
|
+
"aria-label": t('chat.removeActiveToolAria'),
|
|
686
|
+
onClick: function onClick(e) {
|
|
687
|
+
e.stopPropagation();
|
|
688
|
+
beginToolChipExit();
|
|
689
|
+
},
|
|
690
|
+
children: activeToolChipLeadingIcon
|
|
691
|
+
}), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
|
|
692
|
+
children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
|
|
693
|
+
})]
|
|
384
694
|
})]
|
|
385
695
|
}), isWriting ? /*#__PURE__*/_jsx(Tooltip, {
|
|
386
696
|
title: t('chat.stop'),
|
|
@@ -396,7 +706,7 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
396
706
|
onClick: handleSendMessage,
|
|
397
707
|
className: className,
|
|
398
708
|
disabled: isDisabled || disabled,
|
|
399
|
-
hasValues: !!
|
|
709
|
+
hasValues: !!valueTextarea.length,
|
|
400
710
|
children: /*#__PURE__*/_jsx(PaperPlane, {
|
|
401
711
|
color: "#BFBFBF",
|
|
402
712
|
width: 18,
|
|
@@ -426,7 +736,7 @@ export var MAIAInput = function MAIAInput(_ref) {
|
|
|
426
736
|
excludedFiles: modalProps.excludedFiles,
|
|
427
737
|
exceededFiles: modalProps.exceededFiles,
|
|
428
738
|
fileSizes: modalProps.fileSizes
|
|
429
|
-
})
|
|
739
|
+
})]
|
|
430
740
|
});
|
|
431
741
|
};
|
|
432
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlUG9ydGFsIiwiUGFwZXJQbGFuZSIsIkF0dGFjaCIsIkdsb2JlIiwiVHJhc2giLCJUb29sdGlwIiwiU0NNSUF0dGFjaG1lbnQiLCJTQ01JQXR0YWNobWVudERlbGV0ZUljb24iLCJTQ01JV3JhcHBlckF0dGFjaG1lbnRCdXR0b24iLCJTQ01JV3JhcHBlcldlYlNlYXJjaEJ1dHRvbiIsIlNDTUlXcmFwcGVyRGVlcFNlYXJjaEJ1dHRvbiIsIlN0eWxlZE1BSUFJbnB1dEJ1dHRvbnMiLCJTdHlsZWRNQUlBSW5wdXRXcmFwcGVyIiwiU3R5bGVkTUFJQVNlbmRCdXR0b24iLCJTdHlsZWRNQUlBU3RvcEJ1dHRvbiIsIlN0eWxlZE1BSUFTdG9wSWNvbiIsInVzZUdsb2JhbENvbnRleHQiLCJNb2RhbEZpbGVFeGNlZWRzIiwidXNlVCIsIlRlbGVzY29wZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImFsbG93ZWRGaWxlVHlwZXMiLCJmaWxlVHlwZXMiLCJNQVhfRklMRV9TSVpFX01CX01BSUFfVklTSU9OIiwiTUFYX0ZJTEVfU0laRV9NQl9PTEQiLCJNQVhfRklMRV9TSVpFX01CX0FVRElPIiwiQkxVRV9JQV9DT0xPUlMiLCJDb250ZXh0TWVudGlvbkVkaXRvciIsInVzZU1lbnRpb25Qb3BvdmVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiTUFJQUlucHV0IiwiX3JlZiIsIm9uU2VuZE1lc3NhZ2UiLCJjbGFzc05hbWUiLCJkaXNhYmxlZCIsImlzU3RyZWFtaW5nIiwiaXNXcml0aW5nIiwib25TdG9wR2VuZXJhdGlvbiIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJfcmVmJGFsaWduQnV0dG9ucyIsImFsaWduQnV0dG9ucyIsIm9uRmlsZUF0dGFjaCIsIm9uRGVsZXRlQXR0YWNobWVudCIsIl9yZWYkYXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImNoYXRJZCIsIm5ld0NoYXRLZXkiLCJfdXNlVCIsInQiLCJlZGl0b3JSZWYiLCJmaWxlSW5wdXRSZWYiLCJ3cmFwcGVyUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwidmFsdWVUZXh0Iiwic2V0VmFsdWVUZXh0IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc0Rpc2FibGVkIiwic2V0SXNEaXNhYmxlZCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNGb2N1c2VkIiwic2V0SXNGb2N1c2VkIiwiX3VzZVN0YXRlNyIsImlzT3BlbiIsImV4Y2x1ZGVkRmlsZXMiLCJleGNlZWRlZEZpbGVzIiwiZmlsZVNpemVzIiwiX3VzZVN0YXRlOCIsIm1vZGFsUHJvcHMiLCJzZXRNb2RhbFByb3BzIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInRvZ2dsZVdlYlNlYXJjaCIsImlzV2ViU2VhcmNoQWN0aXZlIiwidG9nZ2xlRGVlcFNlYXJjaCIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwiX3VzZU1lbnRpb25Qb3BvdmVyIiwicG9wb3Zlck9wZW4iLCJoYW5kbGVUcmlnZ2VyIiwiaGFuZGxlUG9wb3ZlcktleURvd24iLCJoYW5kbGVLZXlEb3duIiwicG9wb3Zlck5vZGUiLCJwcmV2aW91c0FnZW50SWRSZWYiLCJ1bmRlZmluZWQiLCJwcmV2aW91c0NoYXRJZFJlZiIsInByZXZpb3VzTmV3Q2hhdEtleVJlZiIsImhhbmRsZVdlYlNlYXJjaFRvZ2dsZSIsImFpQ2hhdFRvb2xzIiwib3B0aW9uIiwiaGFuZGxlRGVlcFNlYXJjaFRvZ2dsZSIsIl9lZGl0b3JSZWYkY3VycmVudCIsImN1cnJlbnQiLCJmb2N1cyIsImFnZW50Q2hhbmdlZCIsImlkIiwicHJldmlvdXNDaGF0SWQiLCJjdXJyZW50Q2hhdElkIiwiY2hhdENoYW5nZWQiLCJjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQiLCJuZXdDaGF0U3RhcnRlZCIsImlzSW5pdGlhbE1vdW50IiwiZGVsYXkiLCJzZXRUaW1lb3V0IiwiX2VkaXRvclJlZiRjdXJyZW50MiIsImhhbmRsZVNlc3Npb25DaGFuZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQzIiwiY2xlYXIiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFzVGV4dCIsInRyaW0iLCJsZW5ndGgiLCJoYXNBdHRhY2htZW50cyIsImhhbmRsZVNlbmRNZXNzYWdlIiwiX2VkaXRvclJlZiRjdXJyZW50NCIsIl9zdGF0ZSR0ZXh0IiwiX3N0YXRlJG1lbnRpb25zIiwiX2VkaXRvclJlZiRjdXJyZW50NSIsInN0YXRlIiwic2VyaWFsaXplIiwidGV4dCIsIm1lbnRpb25zIiwiaGFuZGxlRWRpdG9ySW5wdXQiLCJfcmVmMiIsInRyaWdnZXIiLCJlIiwia2V5Iiwic2hpZnRLZXkiLCJwcmV2ZW50RGVmYXVsdCIsImhhbmRsZUZpbGVTZWxlY3QiLCJmaWxlcyIsInRhcmdldCIsImZpbGVzSW5zZXJ0ZWQiLCJpc05ld0Zvcm1hdCIsImV4dGVuc2lvbiIsImluY2x1ZGVzIiwiaXNPbGRGb3JtYXQiLCJpc0F1ZGlvRm9ybWF0IiwiQXJyYXkiLCJmcm9tIiwiZm9yRWFjaCIsImZpbGUiLCJfZmlsZU5hbWVQYXJ0cyRwb3AiLCJleGNsdWRlZEZpbGUiLCJmaWxlTmFtZVBhcnRzIiwibmFtZSIsInNwbGl0IiwiZmlsZUV4dGVuc2lvbiIsImNvbmNhdCIsInBvcCIsInRvTG93ZXJDYXNlIiwic2l6ZSIsInB1c2giLCJ0eXBlRmlsZSIsInR5cGUiLCJwYXJzZWRGaWxlIiwiRmlsZSIsInZhbHVlIiwiaGFuZGxlQXR0YWNoQ2xpY2siLCJfZmlsZUlucHV0UmVmJGN1cnJlbnQiLCJjbGljayIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlSWQiLCJoYW5kbGVXcmFwcGVyRm9jdXMiLCJoYW5kbGVXcmFwcGVyQmx1ciIsIl93cmFwcGVyUmVmJGN1cnJlbnQiLCJjb250YWlucyIsImFjdGl2ZUVsZW1lbnQiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImFpQ2hhdFN0b3BSZXNwb25zZSIsImljb25Db2xvckluYWN0aXZlIiwiY2hpbGRyZW4iLCJyZWYiLCJvbkZvY3VzIiwib25CbHVyIiwic3R5bGUiLCJkaXNwbGF5IiwiZ2FwIiwiYWxpZ25JdGVtcyIsIm1hcCIsImF0dGFjaG1lbnQiLCJpbmRleCIsIl9maWxlTmFtZVBhcnRzJHBvcDIiLCJfYXR0YWNobWVudCR0eXBlIiwiaXNJbWFnZUJ5RXh0ZW5zaW9uIiwiaXNJbWFnZUJ5TWltZSIsInN0YXJ0c1dpdGgiLCJpc0ltYWdlIiwidGl0bGUiLCJpY29uIiwib25DbGljayIsImNvbG9yIiwid2lkdGgiLCJoZWlnaHQiLCJvbklucHV0Iiwib25LZXlEb3duIiwiaXNNYXhpbWl6ZWQiLCIkaXNGb2N1c2VkIiwiaXNBY3RpdmUiLCJoYXNWYWx1ZXMiLCJtdWx0aXBsZSIsImFjY2VwdCIsIm9uQ2xvc2UiLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12b2lkICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWxvbmVseS1pZiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWRlc3RydWN0dXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHsgQ2hhbmdlRXZlbnQsIEtleWJvYXJkRXZlbnQsIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgUGFwZXJQbGFuZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BhcGVyUGxhbmUnXG5pbXBvcnQgeyBBdHRhY2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BdHRhY2gnXG5pbXBvcnQgeyBHbG9iZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0dsb2JlJ1xuaW1wb3J0IHsgVHJhc2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9UcmFzaCdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcblxuaW1wb3J0IHtcbiAgU0NNSUF0dGFjaG1lbnQsXG4gIFNDTUlBdHRhY2htZW50RGVsZXRlSWNvbixcbiAgU0NNSVdyYXBwZXJBdHRhY2htZW50QnV0dG9uLFxuICBTQ01JV3JhcHBlcldlYlNlYXJjaEJ1dHRvbixcbiAgU0NNSVdyYXBwZXJEZWVwU2VhcmNoQnV0dG9uLFxuICBTdHlsZWRNQUlBSW5wdXRCdXR0b25zLFxuICBTdHlsZWRNQUlBSW5wdXRXcmFwcGVyLFxuICBTdHlsZWRNQUlBU2VuZEJ1dHRvbixcbiAgU3R5bGVkTUFJQVN0b3BCdXR0b24sXG4gIFN0eWxlZE1BSUFTdG9wSWNvbixcbn0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IE1vZGFsRmlsZUV4Y2VlZHMgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvTW9kYWxGaWxlRXhjZWVkcydcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgVGVsZXNjb3BlSWNvbiB9IGZyb20gJy4uL2ljb25zL1RlbGVzY29wZUljb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQge1xuICBhbGxvd2VkRmlsZVR5cGVzLFxuICBmaWxlVHlwZXMsXG4gIE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04sXG4gIE1BWF9GSUxFX1NJWkVfTUJfT0xELFxuICBNQVhfRklMRV9TSVpFX01CX0FVRElPLFxufSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvZm9ybWF0RXh0ZW5zaW9ucydcbmltcG9ydCB7IEJMVUVfSUFfQ09MT1JTIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2NvbmZpZydcbmltcG9ydCB7IENvbnRleHRNZW50aW9uRWRpdG9yLCBDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZSB9IGZyb20gJy4uL0NvbnRleHRNZW50aW9uRWRpdG9yJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHsgdXNlTWVudGlvblBvcG92ZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNZW50aW9uUG9wb3ZlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5cbnR5cGUgQXR0YWNobWVudEZpbGUgPSB7XG4gIGZpbGU6IEZpbGVcbiAgb3JpZ2luYWxGaWxlPzogRmlsZVxuICBpZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzaXplOiBudW1iZXJcbiAgdHlwZTogc3RyaW5nXG4gIGljb24/OiBSZWFjdE5vZGVcbn1cblxudHlwZSBNQUlBSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICBvblNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSkgPT4gdm9pZFxuICBvblN0b3BHZW5lcmF0aW9uPzogKCkgPT4gdm9pZFxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNXcml0aW5nPzogYm9vbGVhblxuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBvbkNoYW5nZT86ICgpID0+IHZvaWRcbiAgYWxpZ25CdXR0b25zPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuICBvbkZpbGVBdHRhY2g/OiAoZmlsZTogRmlsZSkgPT4gdm9pZFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQ/OiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGNoYXRJZD86IHN0cmluZ1xuICBuZXdDaGF0S2V5PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBNQUlBSW5wdXQgPSAoe1xuICBvblNlbmRNZXNzYWdlLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVkLFxuICBpc1N0cmVhbWluZyxcbiAgaXNXcml0aW5nLFxuICBvblN0b3BHZW5lcmF0aW9uLFxuICBwbGFjZWhvbGRlcixcbiAgb25DaGFuZ2UsXG4gIGFsaWduQnV0dG9ucyA9ICd2ZXJ0aWNhbCcsXG4gIG9uRmlsZUF0dGFjaCxcbiAgb25EZWxldGVBdHRhY2htZW50LFxuICBhdHRhY2htZW50cyA9IFtdLFxuICBjaGF0SWQsXG4gIG5ld0NoYXRLZXksXG59OiBNQUlBSW5wdXRQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VSZWY8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGU+KG51bGwpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCB3cmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbdmFsdWVUZXh0LCBzZXRWYWx1ZVRleHRdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtpc0Rpc2FibGVkLCBzZXRJc0Rpc2FibGVkXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IFtpc0ZvY3VzZWQsIHNldElzRm9jdXNlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGFsUHJvcHMsIHNldE1vZGFsUHJvcHNdID0gdXNlU3RhdGUoe1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgZXhjbHVkZWRGaWxlczogW10gYXMgc3RyaW5nW10sXG4gICAgZXhjZWVkZWRGaWxlczogW10gYXMgc3RyaW5nW10sXG4gICAgZmlsZVNpemVzOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+LFxuICB9KVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyB0b2dnbGVXZWJTZWFyY2gsIGlzV2ViU2VhcmNoQWN0aXZlLCB0b2dnbGVEZWVwU2VhcmNoLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICBjb25zdCB7XG4gICAgcG9wb3Zlck9wZW4sXG4gICAgaGFuZGxlVHJpZ2dlcixcbiAgICBoYW5kbGVLZXlEb3duOiBoYW5kbGVQb3BvdmVyS2V5RG93bixcbiAgICBwb3BvdmVyTm9kZSxcbiAgfSA9IHVzZU1lbnRpb25Qb3BvdmVyKHtcbiAgICBlZGl0b3JSZWYsXG4gIH0pXG5cbiAgLy8gSW5pY2lhbGl6YXIgbGFzIHJlZmVyZW5jaWFzIGNvbW8gdW5kZWZpbmVkIHBhcmEgZGV0ZWN0YXIgZWwgcHJpbWVyIGNhbWJpbyBjb3JyZWN0YW1lbnRlXG4gIGNvbnN0IHByZXZpb3VzQWdlbnRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgY29uc3QgcHJldmlvdXNDaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTmV3Q2hhdEtleVJlZiA9IHVzZVJlZjxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICBjb25zdCBoYW5kbGVXZWJTZWFyY2hUb2dnbGUgPSAoKSA9PiB7XG4gICAgaWYgKGlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSkge1xuICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7IG9wdGlvbjogJ3NlYXJjaCcgfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWVwU2VhcmNoVG9nZ2xlID0gKCkgPT4ge1xuICAgIGlmIChpc1dlYlNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgaWYgKCFpc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRUb29scywgeyBvcHRpb246ICdkZWVwX3NlYXJjaCcgfSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbZGlzYWJsZWRdKVxuXG4gIC8vIEF1dG8tZm9jdXMgY3VhbmRvIGNhbWJpYSBlbCBhZ2VudGUgbyBsYSBjb252ZXJzYWNpw7NuLCBvIGFsIG1vbnRhciBlbCBjb21wb25lbnRlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYWdlbnRDaGFuZ2VkID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgIT09IGFnZW50Py5pZFxuICAgIGNvbnN0IHByZXZpb3VzQ2hhdElkID0gcHJldmlvdXNDaGF0SWRSZWYuY3VycmVudFxuICAgIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSBjaGF0SWRcbiAgICBjb25zdCBjaGF0Q2hhbmdlZCA9IHByZXZpb3VzQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkXG4gICAgY29uc3QgY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0ID1cbiAgICAgIChwcmV2aW91c0NoYXRJZCA9PT0gdW5kZWZpbmVkIHx8IHByZXZpb3VzQ2hhdElkID09PSBudWxsKSAmJiBjdXJyZW50Q2hhdElkICE9PSB1bmRlZmluZWQgJiYgY3VycmVudENoYXRJZCAhPT0gbnVsbFxuICAgIGNvbnN0IG5ld0NoYXRTdGFydGVkID0gcHJldmlvdXNOZXdDaGF0S2V5UmVmLmN1cnJlbnQgIT09IG5ld0NoYXRLZXlcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9IHByZXZpb3VzQWdlbnRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWQgJiYgcHJldmlvdXNDaGF0SWRSZWYuY3VycmVudCA9PT0gdW5kZWZpbmVkXG5cbiAgICBpZiAoKGFnZW50Q2hhbmdlZCB8fCBjaGF0Q2hhbmdlZCB8fCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgfHwgbmV3Q2hhdFN0YXJ0ZWQgfHwgaXNJbml0aWFsTW91bnQpICYmICFkaXNhYmxlZCkge1xuICAgICAgY29uc3QgZGVsYXkgPSBpc0luaXRpYWxNb3VudCB8fCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgPyAyMDAgOiAxMDBcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIWRpc2FibGVkKSBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSwgZGVsYXkpXG4gICAgfVxuXG4gICAgcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgPSBhZ2VudD8uaWRcbiAgICBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50ID0gY2hhdElkXG4gICAgcHJldmlvdXNOZXdDaGF0S2V5UmVmLmN1cnJlbnQgPSBuZXdDaGF0S2V5XG4gIH0sIFthZ2VudD8uaWQsIGNoYXRJZCwgbmV3Q2hhdEtleSwgZGlzYWJsZWRdKVxuXG4gIC8vIENsZWFyIGlucHV0IHdoZW4gc2Vzc2lvbiBjaGFuZ2VzICh1c2VyIHN3aXRjaGVzIHRvIGEgZGlmZmVyZW50IGNoYXQpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlU2Vzc2lvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgICBzZXRWYWx1ZVRleHQoJycpXG4gICAgICBzZXRJc0Rpc2FibGVkKHRydWUpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFzVGV4dCA9IHZhbHVlVGV4dC50cmltKCkubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICB9LCBbYXR0YWNobWVudHMsIHZhbHVlVGV4dF0pXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBlZGl0b3JSZWYuY3VycmVudD8uc2VyaWFsaXplKClcbiAgICBjb25zdCB0ZXh0ID0gc3RhdGU/LnRleHQgPz8gJydcbiAgICBpZiAoIXRleHQudHJpbSgpICYmICFhdHRhY2htZW50cy5sZW5ndGgpIHJldHVyblxuICAgIG9uU2VuZE1lc3NhZ2UodGV4dCwgYXR0YWNobWVudHMsIHN0YXRlPy5tZW50aW9ucyA/PyBbXSlcbiAgICBlZGl0b3JSZWYuY3VycmVudD8uY2xlYXIoKVxuICAgIHNldFZhbHVlVGV4dCgnJylcbiAgICBzZXRJc0Rpc2FibGVkKHRydWUpXG4gIH0sIFthdHRhY2htZW50cywgb25TZW5kTWVzc2FnZV0pXG5cbiAgY29uc3QgaGFuZGxlRWRpdG9ySW5wdXQgPSB1c2VDYWxsYmFjayhcbiAgICAoeyB0ZXh0LCB0cmlnZ2VyIH06IHsgdGV4dDogc3RyaW5nOyBtZW50aW9uczogQ29udGV4dE1lbnRpb25bXTsgdHJpZ2dlcjogeyBhY3RpdmU6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgICBzZXRWYWx1ZVRleHQodGV4dClcbiAgICAgIHNldElzRGlzYWJsZWQoIXRleHQudHJpbSgpICYmICFhdHRhY2htZW50cy5sZW5ndGgpXG4gICAgICBvbkNoYW5nZT8uKClcbiAgICAgIGhhbmRsZVRyaWdnZXIodHJpZ2dlcilcbiAgICB9LFxuICAgIFthdHRhY2htZW50cy5sZW5ndGgsIG9uQ2hhbmdlLCBoYW5kbGVUcmlnZ2VyXVxuICApXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGhhbmRsZVBvcG92ZXJLZXlEb3duKGUpKSByZXR1cm5cbiAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSAmJiAhcG9wb3Zlck9wZW4pIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGlmICghaXNEaXNhYmxlZCAmJiAhZGlzYWJsZWQpIGhhbmRsZVNlbmRNZXNzYWdlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVQb3BvdmVyS2V5RG93biwgcG9wb3Zlck9wZW4sIGlzRGlzYWJsZWQsIGRpc2FibGVkLCBoYW5kbGVTZW5kTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVTZWxlY3QgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IGUudGFyZ2V0LmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG5cbiAgICBjb25zdCBleGNlZWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZXhjbHVkZWRGaWxlczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGZpbGVTaXplczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9XG4gICAgbGV0IGZpbGVzSW5zZXJ0ZWQgPSBhdHRhY2htZW50cy5sZW5ndGhcblxuICAgIC8vIERlZmluaXIgbMOtbWl0ZXMgcGFyYSBkaWZlcmVudGVzIHRpcG9zIGRlIGFyY2hpdm9zXG4gICAgY29uc3QgaXNOZXdGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+IFsnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5wZGYnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNPbGRGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy50eHQnLCAnLm1kJywgJy5jc3YnLCAnLmRvYycsICcuZG9jeCcsICcueGxzeCcsICcueGxzJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuICAgIGNvbnN0IGlzQXVkaW9Gb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuXG4gICAgQXJyYXkuZnJvbShmaWxlcykuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGxldCBleGNsdWRlZEZpbGUgPSBmYWxzZVxuICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGZpbGUubmFtZS5zcGxpdCgnLicpXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG5cbiAgICAgIGlmICghYWxsb3dlZEZpbGVUeXBlcz8uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZpbGVTaXplc1tmaWxlLm5hbWVdID0gZmlsZS5zaXplXG5cbiAgICAgIC8vIFZhbGlkYWNpb25lcyBlc3BlY8OtZmljYXMgc2Vnw7puIGVsIHRpcG8gZGUgYXJjaGl2b1xuICAgICAgaWYgKGlzTmV3Rm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIC8vIFBhcmEgbnVldm9zIGZvcm1hdG9zOiBoYXN0YSA0Ljk5TUIgcG9yIGFyY2hpdm8sIGhhc3RhIDUgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04gKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gNSkge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzT2xkRm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIC8vIFBhcmEgZm9ybWF0b3MgYW50ZXJpb3JlczogaGFzdGEgMU1CIHBvciBhcmNoaXZvLCBoYXN0YSA1IGFyY2hpdm9zXG4gICAgICAgIGlmIChmaWxlLnNpemUgPiBNQVhfRklMRV9TSVpFX01CX09MRCAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiA1KSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNBdWRpb0Zvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAvLyBQYXJhIGFyY2hpdm9zIGRlIGF1ZGlvOiBoYXN0YSAxME1CIHBvciBhcmNoaXZvLCBoYXN0YSA1IGFyY2hpdm9zXG4gICAgICAgIGlmIChmaWxlLnNpemUgPiBNQVhfRklMRV9TSVpFX01CX0FVRElPICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IDUpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWV4Y2x1ZGVkRmlsZSkge1xuICAgICAgICBmaWxlc0luc2VydGVkICs9IDFcbiAgICAgICAgY29uc3QgdHlwZUZpbGUgPSBmaWxlLnR5cGUgfHwgZmlsZVR5cGVzW2ZpbGVFeHRlbnNpb25dXG4gICAgICAgIGNvbnN0IHBhcnNlZEZpbGUgPSBuZXcgRmlsZShbZmlsZV0sIGZpbGUubmFtZSwgeyB0eXBlOiB0eXBlRmlsZSB9KVxuICAgICAgICBvbkZpbGVBdHRhY2g/LihwYXJzZWRGaWxlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRJc0Rpc2FibGVkKGZhbHNlKVxuICAgIGlmIChleGNsdWRlZEZpbGVzLmxlbmd0aCB8fCBleGNlZWRlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogdHJ1ZSwgZXhjbHVkZWRGaWxlcywgZXhjZWVkZWRGaWxlcywgZmlsZVNpemVzIH0pXG4gICAgfVxuXG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNoQ2xpY2sgPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7IG9wdGlvbjogJ2ZpbGVzJyB9KVxuICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPj0gNSkgcmV0dXJuXG4gICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQgPSAoZmlsZUlkOiBzdHJpbmcpID0+IHtcbiAgICBvbkRlbGV0ZUF0dGFjaG1lbnQ/LihmaWxlSWQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVXcmFwcGVyRm9jdXMgPSAoKSA9PiBzZXRJc0ZvY3VzZWQodHJ1ZSlcbiAgY29uc3QgaGFuZGxlV3JhcHBlckJsdXIgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXdyYXBwZXJSZWYuY3VycmVudD8uY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgc2V0SXNGb2N1c2VkKGZhbHNlKVxuICAgICAgfVxuICAgIH0sIDApXG4gIH1cblxuICBjb25zdCBoYW5kbGVTdG9wR2VuZXJhdGlvbiA9ICgpID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0U3RvcFJlc3BvbnNlKVxuICAgIG9uU3RvcEdlbmVyYXRpb24/LigpXG4gIH1cblxuICBjb25zdCBpY29uQ29sb3JJbmFjdGl2ZSA9IGlzRm9jdXNlZCA/ICcjNjY2NjY2JyA6ICcjOTk5J1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTdHlsZWRNQUlBSW5wdXRXcmFwcGVyXG4gICAgICAgIHJlZj17d3JhcHBlclJlZn1cbiAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICBhbGlnbkJ1dHRvbnM9e2FsaWduQnV0dG9uc31cbiAgICAgICAgaGFzQXR0YWNobWVudHM9eyEhYXR0YWNobWVudHMubGVuZ3RofVxuICAgICAgICBvbkZvY3VzPXtoYW5kbGVXcmFwcGVyRm9jdXN9XG4gICAgICAgIG9uQmx1cj17aGFuZGxlV3JhcHBlckJsdXJ9XG4gICAgICA+XG4gICAgICAgIHshIWF0dGFjaG1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzEycHgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lUGFydHMgPSBhdHRhY2htZW50Lm5hbWUuc3BsaXQoJy4nKVxuICAgICAgICAgICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2VCeUV4dGVuc2lvbiA9IFsnLnBuZycsICcuanBnJywgJy5qcGVnJ10uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbilcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZUJ5TWltZSA9IGF0dGFjaG1lbnQudHlwZT8uc3RhcnRzV2l0aCgnaW1hZ2UvJylcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZSA9IGlzSW1hZ2VCeU1pbWUgJiYgaXNJbWFnZUJ5RXh0ZW5zaW9uXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2F0dGFjaG1lbnQubmFtZX0ga2V5PXtgJHtpbmRleH0tJHthdHRhY2htZW50Lm5hbWV9YH0+XG4gICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnQgaXNJbWFnZT17aXNJbWFnZX0+XG4gICAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50Lmljb259XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudERlbGV0ZUljb24gb25DbGljaz17KCkgPT4gaGFuZGxlRGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgPFRyYXNoIGNvbG9yPVwicmdiYSgxOTEsIDE5MSwgMTkxLCAxKVwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01JQXR0YWNobWVudERlbGV0ZUljb24+XG4gICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50PlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxDb250ZXh0TWVudGlvbkVkaXRvclxuICAgICAgICAgIHJlZj17ZWRpdG9yUmVmfVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgb25JbnB1dD17aGFuZGxlRWRpdG9ySW5wdXR9XG4gICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZVdyYXBwZXJGb2N1c31cbiAgICAgICAgICBvbkJsdXI9e2hhbmRsZVdyYXBwZXJCbHVyfVxuICAgICAgICAvPlxuICAgICAgICA8U3R5bGVkTUFJQUlucHV0QnV0dG9ucz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMTBweCcgfX0+XG4gICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17YXR0YWNobWVudHMubGVuZ3RoID49IDUgPyB0KCdjaGF0LmxpbWl0RmlsZXMnKSA6IHQoJ2NoYXQuYXR0YWNoRmlsZScpfT5cbiAgICAgICAgICAgICAgPFNDTUlXcmFwcGVyQXR0YWNobWVudEJ1dHRvblxuICAgICAgICAgICAgICAgIGhhc0F0dGFjaG1lbnRzPXshIWF0dGFjaG1lbnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICBpc01heGltaXplZD17YXR0YWNobWVudHMubGVuZ3RoID49IDV9XG4gICAgICAgICAgICAgICAgJGlzRm9jdXNlZD17aXNGb2N1c2VkfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUF0dGFjaENsaWNrfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEF0dGFjaFxuICAgICAgICAgICAgICAgICAgY29sb3I9eyFhdHRhY2htZW50cy5sZW5ndGggPyBpY29uQ29sb3JJbmFjdGl2ZSA6IGAke0JMVUVfSUFfQ09MT1JTWzUwMF19YH1cbiAgICAgICAgICAgICAgICAgIHdpZHRoPXsxOH1cbiAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TQ01JV3JhcHBlckF0dGFjaG1lbnRCdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY2hhdC5zZWFyY2hXZWInKX0+XG4gICAgICAgICAgICAgIDxTQ01JV3JhcHBlcldlYlNlYXJjaEJ1dHRvblxuICAgICAgICAgICAgICAgIGlzQWN0aXZlPXshIWlzV2ViU2VhcmNoQWN0aXZlfVxuICAgICAgICAgICAgICAgICRpc0ZvY3VzZWQ9e2lzRm9jdXNlZH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVXZWJTZWFyY2hUb2dnbGV9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8R2xvYmVcbiAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc1dlYlNlYXJjaEFjdGl2ZSA/IGAke0JMVUVfSUFfQ09MT1JTWzUwMF19YCA6IGljb25Db2xvckluYWN0aXZlfVxuICAgICAgICAgICAgICAgICAgd2lkdGg9ezE4fVxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsxOH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1NDTUlXcmFwcGVyV2ViU2VhcmNoQnV0dG9uPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuZGVlcFNlYXJjaCcpfT5cbiAgICAgICAgICAgICAgPFNDTUlXcmFwcGVyRGVlcFNlYXJjaEJ1dHRvblxuICAgICAgICAgICAgICAgIGlzQWN0aXZlPXshIWlzRGVlcFNlYXJjaEFjdGl2ZX1cbiAgICAgICAgICAgICAgICAkaXNGb2N1c2VkPXtpc0ZvY3VzZWR9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVlcFNlYXJjaFRvZ2dsZX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUZWxlc2NvcGVJY29uXG4gICAgICAgICAgICAgICAgICBjb2xvcj17aXNEZWVwU2VhcmNoQWN0aXZlID8gYCR7QkxVRV9JQV9DT0xPUlNbNTAwXX1gIDogaWNvbkNvbG9ySW5hY3RpdmV9XG4gICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvU0NNSVdyYXBwZXJEZWVwU2VhcmNoQnV0dG9uPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAge2lzV3JpdGluZyA/IChcbiAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjaGF0LnN0b3AnKX0+XG4gICAgICAgICAgICAgIDxTdHlsZWRNQUlBU3RvcEJ1dHRvbiBkaXNhYmxlZD17ZmFsc2V9IG9uQ2xpY2s9e2hhbmRsZVN0b3BHZW5lcmF0aW9ufSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wSWNvbiAvPlxuICAgICAgICAgICAgICA8L1N0eWxlZE1BSUFTdG9wQnV0dG9uPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17aXNTdHJlYW1pbmcgPyB0KCdjaGF0LnNlbmQnKSA6IHQoJ2NoYXQuc2VuZCcpfT5cbiAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTZW5kQnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VuZE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWQgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgaGFzVmFsdWVzPXshIXZhbHVlVGV4dC5sZW5ndGh9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGFwZXJQbGFuZSBjb2xvcj1cIiNCRkJGQkZcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRCdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TdHlsZWRNQUlBSW5wdXRCdXR0b25zPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwuY3N2LC5kb2MsLmRvY3gsLnBuZywuanBnLC5qcGVnLC5wZGYsLnhsc3gsLnhscywuZmxhYywubTRhLC5tcDMsLm1wNCwub2dhLC5vZ2csLndhdiwud2VibVwiXG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVTZWxlY3R9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgIC8+XG4gICAgICA8L1N0eWxlZE1BSUFJbnB1dFdyYXBwZXI+XG4gICAgICB7bW9kYWxQcm9wcy5pc09wZW4gJiYgKFxuICAgICAgICA8TW9kYWxGaWxlRXhjZWVkc1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldE1vZGFsUHJvcHMoeyBpc09wZW46IGZhbHNlLCBleGNsdWRlZEZpbGVzOiBbXSwgZXhjZWVkZWRGaWxlczogW10sIGZpbGVTaXplczoge30gfSl9XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNsdWRlZEZpbGVzfVxuICAgICAgICAgIGV4Y2VlZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjZWVkZWRGaWxlc31cbiAgICAgICAgICBmaWxlU2l6ZXM9e21vZGFsUHJvcHMuZmlsZVNpemVzfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtwb3BvdmVyTm9kZSAmJiBjcmVhdGVQb3J0YWwocG9wb3Zlck5vZGUsIGRvY3VtZW50LmJvZHkpfVxuICAgIDwvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdEQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUN2RyxTQUFTQyxZQUFZLFFBQVEsV0FBVztBQUN4QyxTQUFTQyxVQUFVLFFBQVEsNkNBQTZDO0FBQ3hFLFNBQVNDLE1BQU0sUUFBUSx5Q0FBeUM7QUFDaEUsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFFdEUsU0FDRUMsY0FBYyxFQUNkQyx3QkFB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
|
|
742
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIlBvcG92ZXIiLCJQYXBlclBsYW5lIiwiQXR0YWNoIiwiR2xvYmUiLCJUcmFzaCIsIlBsdXMiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlN0eWxlZE1BSUFJbnB1dCIsIlN0eWxlZE1BSUFJbnB1dEJ1dHRvbnMiLCJTdHlsZWRNQUlBSW5wdXRXcmFwcGVyIiwiU3R5bGVkTUFJQVNlbmRCdXR0b24iLCJTdHlsZWRNQUlBU3RvcEJ1dHRvbiIsIlN0eWxlZE1BSUFTdG9wSWNvbiIsInVzZUdsb2JhbENvbnRleHQiLCJNb2RhbEZpbGVFeGNlZWRzIiwidXNlVCIsIlRlbGVzY29wZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldENoYXRUb29sc01lbnVBZ2VudFR5cGUiLCJhbGxvd2VkRmlsZVR5cGVzIiwiZmlsZVR5cGVzIiwiTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTiIsIk1BWF9GSUxFX1NJWkVfTUJfT0xEIiwiTUFYX0ZJTEVfU0laRV9NQl9BVURJTyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIlRPT0xfQ0hJUF9FWElUX01TIiwiTUFJQUlucHV0IiwiX3JlZiIsIl9hZ2VudCRlbnRpdHkiLCJvblNlbmRNZXNzYWdlIiwiY2xhc3NOYW1lIiwiZGlzYWJsZWQiLCJpc1N0cmVhbWluZyIsImlzV3JpdGluZyIsIm9uU3RvcEdlbmVyYXRpb24iLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwiX3JlZiRhbGlnbkJ1dHRvbnMiLCJhbGlnbkJ1dHRvbnMiLCJvbkZpbGVBdHRhY2giLCJvbkRlbGV0ZUF0dGFjaG1lbnQiLCJfcmVmJGF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJjaGF0SWQiLCJuZXdDaGF0S2V5IiwiX3VzZVQiLCJ0IiwiaW5wdXRSZWYiLCJmaWxlSW5wdXRSZWYiLCJ3cmFwcGVyUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwidmFsdWVUZXh0YXJlYSIsInNldFZhbHVlVGV4dGFyZWEiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzRGlzYWJsZWQiLCJzZXRJc0Rpc2FibGVkIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc0ZvY3VzZWQiLCJzZXRJc0ZvY3VzZWQiLCJfdXNlU3RhdGU3IiwiaXNPcGVuIiwiZXhjbHVkZWRGaWxlcyIsImV4Y2VlZGVkRmlsZXMiLCJmaWxlU2l6ZXMiLCJfdXNlU3RhdGU4IiwibW9kYWxQcm9wcyIsInNldE1vZGFsUHJvcHMiLCJldmVudEFtcGxpdHVkZSIsIl91c2VHbG9iYWxDb250ZXh0IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJ0b2dnbGVEZWVwU2VhcmNoIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiYWdlbnQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInBsdXNNZW51QW5jaG9yIiwic2V0UGx1c01lbnVBbmNob3IiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJhY3RpdmVUb29sQ2hpcEhvdmVyZWQiLCJzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwidG9vbENoaXBFeGl0aW5nIiwic2V0VG9vbENoaXBFeGl0aW5nIiwidG9vbENoaXBFeGl0VGltZXJSZWYiLCJzZWFyY2hNb2RlQWN0aXZlUmVmIiwid2ViIiwiZGVlcCIsInBsdXNNZW51T3BlbiIsIkJvb2xlYW4iLCJjdXJyZW50IiwiYW5hbHl0aWNzQWdlbnRUeXBlIiwiYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIiwidHlwZSIsImVudGl0eSIsImNsb3NlUGx1c01lbnUiLCJoYW5kbGVQbHVzQnV0dG9uQ2xpY2siLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiY3VycmVudFRhcmdldCIsImFpQ2hhdFBsdXNPcGVuIiwiX29iamVjdFNwcmVhZCIsImFnZW50X3R5cGUiLCJoYW5kbGVQbHVzTWVudUF0dGFjaCIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImFpQ2hhdFRvb2xzIiwib3B0aW9uIiwibGVuZ3RoIiwiY2xpY2siLCJiZWdpblRvb2xDaGlwRXhpdCIsIndhc1dlYiIsIndhc0RlZXAiLCJzZXRUaW1lb3V0IiwiX3NlYXJjaE1vZGVBY3RpdmVSZWYkIiwiaGFuZGxlUGx1c01lbnVXZWJTZWFyY2giLCJoYW5kbGVQbHVzTWVudURlZXBTZWFyY2giLCJwcmV2aW91c0FnZW50SWRSZWYiLCJ1bmRlZmluZWQiLCJwcmV2aW91c0NoYXRJZFJlZiIsInByZXZpb3VzTmV3Q2hhdEtleVJlZiIsImhhbmRsZVJlc2l6ZSIsInRleHRhcmVhIiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwicHJldmlvdXNNaW5IZWlnaHQiLCJzdHlsZSIsInByZXZpb3VzTWF4SGVpZ2h0IiwiaGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0IiwiY29tcHV0ZWRTdHlsZSIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJsaW5lSGVpZ2h0IiwicGFyc2VGbG9hdCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwiYm9yZGVyVG9wIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b20iLCJib3JkZXJCb3R0b21XaWR0aCIsInNpbmdsZUxpbmVIZWlnaHQiLCJpc0VtcHR5IiwidmFsdWUiLCJ0cmltIiwiaGFzTXVsdGlwbGVWaXN1YWxMaW5lcyIsImNhbnZhcyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwidGV4dGFyZWFTdHlsZXMiLCJmb250IiwiY29uY2F0IiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwiYm9yZGVyTGVmdCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyUmlnaHRXaWR0aCIsInRleHRhcmVhV2lkdGgiLCJvZmZzZXRXaWR0aCIsInRleHQiLCJsaW5lcyIsInNwbGl0IiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsImxpbmUiLCJ0ZXh0V2lkdGgiLCJtZWFzdXJlVGV4dCIsIndpZHRoIiwiZXJyIiwiZiIsIm5ld0hlaWdodCIsIk1hdGgiLCJtaW4iLCJtYXgiLCJmb2N1cyIsImNsZWFyVGltZW91dCIsImFnZW50Q2hhbmdlZCIsImlkIiwicHJldmlvdXNDaGF0SWQiLCJjdXJyZW50Q2hhdElkIiwiY2hhdENoYW5nZWQiLCJjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQiLCJuZXdDaGF0U3RhcnRlZCIsImlzSW5pdGlhbE1vdW50IiwiZGVsYXkiLCJoYW5kbGVTZXNzaW9uQ2hhbmdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhbmltYXRpb25GcmFtZUlkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJoYXNUZXh0IiwiaGFzQXR0YWNobWVudHMiLCJoYW5kbGVTZW5kTWVzc2FnZSIsImhhbmRsZUtleURvd24iLCJrZXkiLCJzaGlmdEtleSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlQ2hhbmdlIiwidGFyZ2V0IiwiaGFuZGxlUGFzdGUiLCJfaW5wdXRSZWYkY3VycmVudCR2YWwiLCJfaW5wdXRSZWYkY3VycmVudCIsImN1cnJlbnRWYWx1ZSIsImhhbmRsZUZpbGVTZWxlY3QiLCJmaWxlcyIsImZpbGVzSW5zZXJ0ZWQiLCJpc05ld0Zvcm1hdCIsImV4dGVuc2lvbiIsImluY2x1ZGVzIiwiaXNPbGRGb3JtYXQiLCJpc0F1ZGlvRm9ybWF0IiwiQXJyYXkiLCJmcm9tIiwiZm9yRWFjaCIsImZpbGUiLCJfZmlsZU5hbWVQYXJ0cyRwb3AiLCJleGNsdWRlZEZpbGUiLCJmaWxlTmFtZVBhcnRzIiwibmFtZSIsImZpbGVFeHRlbnNpb24iLCJwb3AiLCJ0b0xvd2VyQ2FzZSIsInNpemUiLCJwdXNoIiwidHlwZUZpbGUiLCJwYXJzZWRGaWxlIiwiRmlsZSIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlSWQiLCJoYW5kbGVCbHVyIiwiaGFuZGxlV3JhcHBlckZvY3VzIiwiaGFuZGxlV3JhcHBlckJsdXIiLCJfd3JhcHBlclJlZiRjdXJyZW50IiwiY29udGFpbnMiLCJhY3RpdmVFbGVtZW50IiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJhaUNoYXRTdG9wUmVzcG9uc2UiLCJwbHVzSWNvbkNvbG9yIiwicGx1c01lbnVJY29uQ29sb3IiLCJwbHVzTWVudVNlbGVjdGVkQ29sb3IiLCJhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uIiwiY29sb3IiLCJjaGlsZHJlbiIsInJlZiIsIm9uRm9jdXMiLCJvbkJsdXIiLCJkaXNwbGF5IiwiZ2FwIiwiYWxpZ25JdGVtcyIsIm1hcCIsImF0dGFjaG1lbnQiLCJpbmRleCIsIl9maWxlTmFtZVBhcnRzJHBvcDIiLCJfYXR0YWNobWVudCR0eXBlIiwiaXNJbWFnZUJ5RXh0ZW5zaW9uIiwiaXNJbWFnZUJ5TWltZSIsInN0YXJ0c1dpdGgiLCJpc0ltYWdlIiwidGl0bGUiLCJpY29uIiwib25DbGljayIsIm9uS2V5RG93biIsIm9uUGFzdGUiLCIkbWVudU9wZW4iLCJvcGVuIiwiYW5jaG9yRWwiLCJvbkNsb3NlIiwiYW5jaG9yT3JpZ2luIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwidHJhbnNmb3JtT3JpZ2luIiwic2xvdFByb3BzIiwicGFwZXIiLCJlbGV2YXRpb24iLCJzeCIsIm92ZXJmbG93IiwiYm9yZGVyUmFkaXVzIiwiYm94U2hhZG93IiwiYmFja2dyb3VuZENvbG9yIiwibWFyZ2luVG9wIiwiJHNlbGVjdGVkIiwiJGhvdmVyZWQiLCIkZXhpdGluZyIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsIiRjbG9zZVNob3duIiwiaGFzVmFsdWVzIiwibXVsdGlwbGUiLCJhY2NlcHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9NQUlBSW5wdXQvTUFJQUlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZvaWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbG9uZWx5LWlmICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItZGVzdHJ1Y3R1cmluZyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgS2V5Ym9hcmRFdmVudCwgTW91c2VFdmVudCwgUmVhY3ROb2RlLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFBvcG92ZXIgfSBmcm9tICdAbXVpL21hdGVyaWFsJ1xuaW1wb3J0IHsgUGFwZXJQbGFuZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BhcGVyUGxhbmUnXG5pbXBvcnQgeyBBdHRhY2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BdHRhY2gnXG5pbXBvcnQgeyBHbG9iZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0dsb2JlJ1xuaW1wb3J0IHsgVHJhc2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9UcmFzaCdcbmltcG9ydCB7IFBsdXMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QbHVzJ1xuaW1wb3J0IHsgQ2hlY2sgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGVjaydcbmltcG9ydCB7IENyb3NzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3MnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5cbmltcG9ydCB7XG4gIEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbixcbiAgQWN0aXZlVG9vbENoaXBMYWJlbCxcbiAgQWN0aXZlVG9vbENoaXBSb290LFxuICBQbHVzTWVudURpdmlkZXIsXG4gIFBsdXNNZW51SW5uZXJDb2x1bW4sXG4gIFBsdXNNZW51SXRlbUJ1dHRvbixcbiAgUGx1c01lbnVJdGVtTGFiZWwsXG4gIFBsdXNNZW51UGFwZXIsXG4gIFBsdXNNZW51VG9vbHNSb3csXG4gIFBsdXNUb2dnbGVCdXR0b24sXG4gIFNDTUlBdHRhY2htZW50LFxuICBTQ01JQXR0YWNobWVudERlbGV0ZUljb24sXG4gIFN0eWxlZE1BSUFJbnB1dCxcbiAgU3R5bGVkTUFJQUlucHV0QnV0dG9ucyxcbiAgU3R5bGVkTUFJQUlucHV0V3JhcHBlcixcbiAgU3R5bGVkTUFJQVNlbmRCdXR0b24sXG4gIFN0eWxlZE1BSUFTdG9wQnV0dG9uLFxuICBTdHlsZWRNQUlBU3RvcEljb24sXG59IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBNb2RhbEZpbGVFeGNlZWRzIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL01vZGFsRmlsZUV4Y2VlZHMnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IFRlbGVzY29wZUljb24gfSBmcm9tICcuLi9pY29ucy9UZWxlc2NvcGVJY29uJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQge1xuICBhbGxvd2VkRmlsZVR5cGVzLFxuICBmaWxlVHlwZXMsXG4gIE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04sXG4gIE1BWF9GSUxFX1NJWkVfTUJfT0xELFxuICBNQVhfRklMRV9TSVpFX01CX0FVRElPLFxufSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvZm9ybWF0RXh0ZW5zaW9ucydcblxuY29uc3QgVE9PTF9DSElQX0VYSVRfTVMgPSAyMjBcblxudHlwZSBBdHRhY2htZW50RmlsZSA9IHtcbiAgZmlsZTogRmlsZVxuICBvcmlnaW5hbEZpbGU/OiBGaWxlXG4gIGlkOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHNpemU6IG51bWJlclxuICB0eXBlOiBzdHJpbmdcbiAgaWNvbj86IFJlYWN0Tm9kZVxufVxuXG50eXBlIE1BSUFJbnB1dFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2VuZE1lc3NhZ2U6IChtZXNzYWdlOiBzdHJpbmcsIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSkgPT4gdm9pZFxuICBvblN0b3BHZW5lcmF0aW9uPzogKCkgPT4gdm9pZFxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNXcml0aW5nPzogYm9vbGVhblxuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBvbkNoYW5nZT86ICgpID0+IHZvaWRcbiAgYWxpZ25CdXR0b25zPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuICBvbkZpbGVBdHRhY2g/OiAoZmlsZTogRmlsZSkgPT4gdm9pZFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQ/OiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGNoYXRJZD86IHN0cmluZ1xuICBuZXdDaGF0S2V5PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBNQUlBSW5wdXQgPSAoe1xuICBvblNlbmRNZXNzYWdlLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVkLFxuICBpc1N0cmVhbWluZyxcbiAgaXNXcml0aW5nLFxuICBvblN0b3BHZW5lcmF0aW9uLFxuICBwbGFjZWhvbGRlcixcbiAgb25DaGFuZ2UsXG4gIGFsaWduQnV0dG9ucyA9ICd2ZXJ0aWNhbCcsXG4gIG9uRmlsZUF0dGFjaCxcbiAgb25EZWxldGVBdHRhY2htZW50LFxuICBhdHRhY2htZW50cyA9IFtdLFxuICBjaGF0SWQsXG4gIG5ld0NoYXRLZXksXG59OiBNQUlBSW5wdXRQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKVxuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcbiAgY29uc3Qgd3JhcHBlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgW3ZhbHVlVGV4dGFyZWEsIHNldFZhbHVlVGV4dGFyZWFdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtpc0Rpc2FibGVkLCBzZXRJc0Rpc2FibGVkXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IFtpc0ZvY3VzZWQsIHNldElzRm9jdXNlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGFsUHJvcHMsIHNldE1vZGFsUHJvcHNdID0gdXNlU3RhdGUoe1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgZXhjbHVkZWRGaWxlczogW10gYXMgc3RyaW5nW10sXG4gICAgZXhjZWVkZWRGaWxlczogW10gYXMgc3RyaW5nW10sXG4gICAgZmlsZVNpemVzOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+LFxuICB9KVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyB0b2dnbGVXZWJTZWFyY2gsIGlzV2ViU2VhcmNoQWN0aXZlLCB0b2dnbGVEZWVwU2VhcmNoLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgW3BsdXNNZW51QW5jaG9yLCBzZXRQbHVzTWVudUFuY2hvcl0gPSB1c2VTdGF0ZTxIVE1MQnV0dG9uRWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFthY3RpdmVUb29sQ2hpcEhvdmVyZWQsIHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Rvb2xDaGlwRXhpdGluZywgc2V0VG9vbENoaXBFeGl0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0b29sQ2hpcEV4aXRUaW1lclJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNlYXJjaE1vZGVBY3RpdmVSZWYgPSB1c2VSZWYoeyB3ZWI6IGZhbHNlLCBkZWVwOiBmYWxzZSB9KVxuICBjb25zdCBwbHVzTWVudU9wZW4gPSBCb29sZWFuKHBsdXNNZW51QW5jaG9yKVxuXG4gIHNlYXJjaE1vZGVBY3RpdmVSZWYuY3VycmVudCA9IHsgd2ViOiBpc1dlYlNlYXJjaEFjdGl2ZSwgZGVlcDogaXNEZWVwU2VhcmNoQWN0aXZlIH1cblxuICBjb25zdCBhbmFseXRpY3NBZ2VudFR5cGUgPSBnZXRDaGF0VG9vbHNNZW51QWdlbnRUeXBlKGFnZW50KVxuICBjb25zdCBhbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQgPSBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/IHsgZW50aXR5OiBhZ2VudC5lbnRpdHkgPz8gbnVsbCB9IDoge31cblxuICBjb25zdCBjbG9zZVBsdXNNZW51ID0gKCkgPT4ge1xuICAgIHNldFBsdXNNZW51QW5jaG9yKG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzQnV0dG9uQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHBsdXNNZW51QW5jaG9yKSB7XG4gICAgICBjbG9zZVBsdXNNZW51KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQbHVzTWVudUFuY2hvcihlLmN1cnJlbnRUYXJnZXQpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFBsdXNPcGVuLCB7IGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSwgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudUF0dGFjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ2ZpbGVzJyxcbiAgICAgIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCxcbiAgICB9KVxuICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPj0gNSkgcmV0dXJuXG4gICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgfVxuXG4gIGNvbnN0IGJlZ2luVG9vbENoaXBFeGl0ID0gKCkgPT4ge1xuICAgIGlmICh0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgd2FzV2ViID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBjb25zdCB3YXNEZWVwID0gaXNEZWVwU2VhcmNoQWN0aXZlXG4gICAgaWYgKCF3YXNXZWIgJiYgIXdhc0RlZXApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRUb29sQ2hpcEV4aXRpbmcodHJ1ZSlcbiAgICB0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgY29uc3QgeyB3ZWIsIGRlZXAgfSA9IHNlYXJjaE1vZGVBY3RpdmVSZWYuY3VycmVudFxuICAgICAgaWYgKHdhc1dlYiAmJiB3ZWIpIHtcbiAgICAgICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICAgIH0gZWxzZSBpZiAod2FzRGVlcCAmJiBkZWVwKSB7XG4gICAgICAgIHRvZ2dsZURlZXBTZWFyY2goKVxuICAgICAgfVxuICAgICAgc2V0VG9vbENoaXBFeGl0aW5nKGZhbHNlKVxuICAgIH0sIFRPT0xfQ0hJUF9FWElUX01TKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVXZWJTZWFyY2ggPSAoKSA9PiB7XG4gICAgY2xvc2VQbHVzTWVudSgpXG4gICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgICBiZWdpblRvb2xDaGlwRXhpdCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7XG4gICAgICBhZ2VudF90eXBlOiBhbmFseXRpY3NBZ2VudFR5cGUsXG4gICAgICBvcHRpb246ICdzZWFyY2gnLFxuICAgICAgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudURlZXBTZWFyY2ggPSAoKSA9PiB7XG4gICAgY2xvc2VQbHVzTWVudSgpXG4gICAgaWYgKGlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgICAgYmVnaW5Ub29sQ2hpcEV4aXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChpc1dlYlNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7XG4gICAgICBhZ2VudF90eXBlOiBhbmFseXRpY3NBZ2VudFR5cGUsXG4gICAgICBvcHRpb246ICdkZWVwX3NlYXJjaCcsXG4gICAgICAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQsXG4gICAgfSlcbiAgfVxuXG4gIC8vIEluaWNpYWxpemFyIGxhcyByZWZlcmVuY2lhcyBjb21vIHVuZGVmaW5lZCBwYXJhIGRldGVjdGFyIGVsIHByaW1lciBjYW1iaW8gY29ycmVjdGFtZW50ZVxuICBjb25zdCBwcmV2aW91c0FnZW50SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBjb25zdCBwcmV2aW91c05ld0NoYXRLZXlSZWYgPSB1c2VSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgY29uc3QgaGFuZGxlUmVzaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHRleHRhcmVhID0gaW5wdXRSZWYuY3VycmVudFxuICAgIGlmICghdGV4dGFyZWEpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEFsdHVyYSBtw61uaW1hIGVxdWl2YWxlbnRlIGEgdW5hIGzDrW5lYVxuICAgIGNvbnN0IG1pbkhlaWdodCA9IDIyLjFcbiAgICBjb25zdCBtYXhIZWlnaHQgPSAxMjIuMVxuXG4gICAgLy8gUGFyYSBtZWRpciBjb3JyZWN0YW1lbnRlIGVsIHNjcm9sbEhlaWdodCwgbmVjZXNpdGFtb3MgcXVpdGFyIHRlbXBvcmFsbWVudGUgbGFzIHJlc3RyaWNjaW9uZXNcbiAgICBjb25zdCBwcmV2aW91c01pbkhlaWdodCA9IHRleHRhcmVhLnN0eWxlLm1pbkhlaWdodFxuICAgIGNvbnN0IHByZXZpb3VzTWF4SGVpZ2h0ID0gdGV4dGFyZWEuc3R5bGUubWF4SGVpZ2h0XG5cbiAgICAvLyBFc3RhYmxlY2VyIGFsdHVyYSBhICdhdXRvJyB5IHF1aXRhciB0ZW1wb3JhbG1lbnRlIG1pbi1oZWlnaHQgeSBtYXgtaGVpZ2h0IHBhcmEgbWVkaXIgY29ycmVjdGFtZW50ZVxuICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdhdXRvJ1xuICAgIHRleHRhcmVhLnN0eWxlLm1pbkhlaWdodCA9ICcwcHgnXG4gICAgdGV4dGFyZWEuc3R5bGUubWF4SGVpZ2h0ID0gJ25vbmUnXG5cbiAgICAvLyBGb3J6YXIgcmVmbG93IHBhcmEgcXVlIGVsIG5hdmVnYWRvciByZWNhbGN1bGVcbiAgICB2b2lkIHRleHRhcmVhLm9mZnNldEhlaWdodFxuXG4gICAgLy8gQWhvcmEgbWVkaXIgZWwgc2Nyb2xsSGVpZ2h0IHJlYWwgc2luIHJlc3RyaWNjaW9uZXNcbiAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0ZXh0YXJlYS5zY3JvbGxIZWlnaHRcblxuICAgIC8vIENhbGN1bGFyIGxhIGFsdHVyYSBkZSB1bmEgbMOtbmVhIHVzYW5kbyBsb3MgZXN0aWxvcyBjb21wdXRhZG9zXG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRleHRhcmVhKVxuICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUubGluZUhlaWdodCkgfHwgMjAgLy8gRmFsbGJhY2sgYSAyMHB4IHNpIG5vIGVzdMOhIGRlZmluaWRvXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nVG9wKSB8fCAwXG4gICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nQm90dG9tKSB8fCAwXG4gICAgY29uc3QgYm9yZGVyVG9wID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoKSB8fCAwXG4gICAgY29uc3QgYm9yZGVyQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKSB8fCAwXG5cbiAgICAvLyBBbHR1cmEgZGUgdW5hIGzDrW5lYSBjb21wbGV0YSAobGluZS1oZWlnaHQgKyBwYWRkaW5nICsgYm9yZGVyKVxuICAgIGNvbnN0IHNpbmdsZUxpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0ICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJUb3AgKyBib3JkZXJCb3R0b21cblxuICAgIGNvbnN0IGlzRW1wdHkgPSB0ZXh0YXJlYS52YWx1ZS50cmltKCkgPT09ICcnXG5cbiAgICAvLyBNZWRpciBlbCBhbmNobyBkZWwgdGV4dG8gdXNhbmRvIENhbnZhcyBwYXJhIGRldGVybWluYXIgc2kgc2UgZW52dWVsdmUgYSBtw7psdGlwbGVzIGzDrW5lYXNcbiAgICBsZXQgaGFzTXVsdGlwbGVWaXN1YWxMaW5lcyA9IGZhbHNlXG5cbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKVxuXG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAvLyBGYWxsYmFjayBzaSBDYW52YXMgbm8gZXN0w6EgZGlzcG9uaWJsZTogdXNhciBzY3JvbGxIZWlnaHRcbiAgICAgIGhhc011bHRpcGxlVmlzdWFsTGluZXMgPSBzY3JvbGxIZWlnaHQgPiBzaW5nbGVMaW5lSGVpZ2h0ICogMS41XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRleHRhcmVhU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGV4dGFyZWEpXG4gICAgICBjb250ZXh0LmZvbnQgPSBgJHt0ZXh0YXJlYVN0eWxlcy5mb250V2VpZ2h0fSAke3RleHRhcmVhU3R5bGVzLmZvbnRTaXplfSAke3RleHRhcmVhU3R5bGVzLmZvbnRGYW1pbHl9YFxuXG4gICAgICAvLyBDYWxjdWxhciBlbCBhbmNobyBkaXNwb25pYmxlIChhbmNobyB0b3RhbCBtZW5vcyBwYWRkaW5nIGl6cXVpZXJkby9kZXJlY2hvIHkgYm9yZGVyIGl6cXVpZXJkby9kZXJlY2hvKVxuICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ0xlZnQpIHx8IDBcbiAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nUmlnaHQpIHx8IDBcbiAgICAgIGNvbnN0IGJvcmRlckxlZnQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuYm9yZGVyTGVmdFdpZHRoKSB8fCAwXG4gICAgICBjb25zdCBib3JkZXJSaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJSaWdodFdpZHRoKSB8fCAwXG4gICAgICBjb25zdCB0ZXh0YXJlYVdpZHRoID0gdGV4dGFyZWEub2Zmc2V0V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodCAtIGJvcmRlckxlZnQgLSBib3JkZXJSaWdodFxuICAgICAgY29uc3QgdGV4dCA9IHRleHRhcmVhLnZhbHVlIHx8ICcnXG4gICAgICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpXG5cbiAgICAgIC8vIFNpIGhheSBtw7psdGlwbGVzIGzDrW5lYXMgcG9yIHNhbHRvcyBkZSBsw61uZWEgZXhwbMOtY2l0b3NcbiAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGhhc011bHRpcGxlVmlzdWFsTGluZXMgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBWZXJpZmljYXIgc2kgZWwgdGV4dG8gc2UgZW52dWVsdmUgbWlkaWVuZG8gZWwgYW5jaG8gZGUgY2FkYSBsw61uZWFcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgaWYgKGxpbmUudHJpbSgpID09PSAnJykgY29udGludWVcbiAgICAgICAgICBjb25zdCB0ZXh0V2lkdGggPSBjb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmUpLndpZHRoXG4gICAgICAgICAgLy8gU2kgYWxndW5hIGzDrW5lYSBlcyBtw6FzIGFuY2hhIHF1ZSBlbCB0ZXh0YXJlYSBkaXNwb25pYmxlLCBzZSBlbnZ1ZWx2ZVxuICAgICAgICAgIGlmICh0ZXh0V2lkdGggPiB0ZXh0YXJlYVdpZHRoKSB7XG4gICAgICAgICAgICBoYXNNdWx0aXBsZVZpc3VhbExpbmVzID0gdHJ1ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV3SGVpZ2h0OiBudW1iZXJcbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgLy8gQ3VhbmRvIGVzdMOhIHZhY8OtbywgdXNhciBhbHR1cmEgbcOtbmltYVxuICAgICAgbmV3SGVpZ2h0ID0gbWluSGVpZ2h0XG4gICAgfSBlbHNlIGlmICghaGFzTXVsdGlwbGVWaXN1YWxMaW5lcykge1xuICAgICAgLy8gQ3VhbmRvIGhheSBjb250ZW5pZG8gcGVybyBzb2xvIHVuYSBsw61uZWEgdmlzdWFsLCB1c2FyIGFsdHVyYSBtw61uaW1hXG4gICAgICBuZXdIZWlnaHQgPSBtaW5IZWlnaHRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFyYSBtw7psdGlwbGVzIGzDrW5lYXMgdmlzdWFsZXMsIHVzYXIgZWwgc2Nyb2xsSGVpZ2h0XG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1pbihNYXRoLm1heChzY3JvbGxIZWlnaHQsIG1pbkhlaWdodCksIG1heEhlaWdodClcbiAgICB9XG5cbiAgICAvLyBSZXN0YXVyYXIgZXN0aWxvcyBhbnRlcyBkZSBhcGxpY2FyIGxhIG51ZXZhIGFsdHVyYVxuICAgIHRleHRhcmVhLnN0eWxlLm1pbkhlaWdodCA9IHByZXZpb3VzTWluSGVpZ2h0IHx8ICcyMi4xcHgnXG4gICAgdGV4dGFyZWEuc3R5bGUubWF4SGVpZ2h0ID0gcHJldmlvdXNNYXhIZWlnaHQgfHwgJzEyMi4xcHgnXG5cbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBgJHtuZXdIZWlnaHR9cHhgXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ICYmICFkaXNhYmxlZCkge1xuICAgICAgaW5wdXRSZWYuY3VycmVudC5mb2N1cygpXG4gICAgICBoYW5kbGVSZXNpemUoKVxuICAgIH1cbiAgfSwgW2Rpc2FibGVkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSAmJiAhaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGVsIGFnZW50ZSBvIGxhIGNvbnZlcnNhY2nDs24sIG8gYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBDb21wYXJhY2nDs24gcXVlIG1hbmVqYSBjb3JyZWN0YW1lbnRlIHVuZGVmaW5lZC9udWxsXG4gICAgY29uc3QgYWdlbnRDaGFuZ2VkID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgIT09IGFnZW50Py5pZFxuICAgIC8vIENvbXBhcmFjacOzbiBlc3RyaWN0YSBxdWUgZGV0ZWN0YSBjYW1iaW9zIGluY2x1c28gY3VhbmRvIHVubyBlcyB1bmRlZmluZWRcbiAgICBjb25zdCBwcmV2aW91c0NoYXRJZCA9IHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnRcbiAgICBjb25zdCBjdXJyZW50Q2hhdElkID0gY2hhdElkXG4gICAgY29uc3QgY2hhdENoYW5nZWQgPSBwcmV2aW91c0NoYXRJZCAhPT0gY3VycmVudENoYXRJZFxuICAgIC8vIERldGVjdGFyIGNhbWJpbyBlc3BlY8OtZmljbyBkZSB1bmRlZmluZWQvbnVsbCBhIHVuIHZhbG9yIChudWV2byBjaGF0IC0+IGNvbnZlcnNhY2nDs24gdmllamEpXG4gICAgY29uc3QgY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0ID1cbiAgICAgIChwcmV2aW91c0NoYXRJZCA9PT0gdW5kZWZpbmVkIHx8IHByZXZpb3VzQ2hhdElkID09PSBudWxsKSAmJiBjdXJyZW50Q2hhdElkICE9PSB1bmRlZmluZWQgJiYgY3VycmVudENoYXRJZCAhPT0gbnVsbFxuICAgIGNvbnN0IG5ld0NoYXRTdGFydGVkID0gcHJldmlvdXNOZXdDaGF0S2V5UmVmLmN1cnJlbnQgIT09IG5ld0NoYXRLZXlcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9IHByZXZpb3VzQWdlbnRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWQgJiYgcHJldmlvdXNDaGF0SWRSZWYuY3VycmVudCA9PT0gdW5kZWZpbmVkXG5cbiAgICBpZiAoXG4gICAgICAoYWdlbnRDaGFuZ2VkIHx8IGNoYXRDaGFuZ2VkIHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCB8fCBuZXdDaGF0U3RhcnRlZCB8fCBpc0luaXRpYWxNb3VudCkgJiZcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICFkaXNhYmxlZFxuICAgICkge1xuICAgICAgLy8gVXNhciBzZXRUaW1lb3V0IHBhcmEgYXNlZ3VyYXIgcXVlIGVsIERPTSBlc3TDqSBsaXN0b1xuICAgICAgLy8gQXVtZW50YXIgZWwgZGVsYXkgcGFyYSBjYXNvcyBkb25kZSBlbCBjb21wb25lbnRlIHNlIGVzdMOhIG1vbnRhbmRvXG4gICAgICBjb25zdCBkZWxheSA9IGlzSW5pdGlhbE1vdW50IHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCA/IDIwMCA6IDEwMFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ICYmICFkaXNhYmxlZCkge1xuICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKVxuICAgICAgICB9XG4gICAgICB9LCBkZWxheSlcbiAgICB9XG5cbiAgICAvLyBBY3R1YWxpemFyIGxhcyByZWZlcmVuY2lhcyBERVNQVcOJUyBkZSBsYSBjb21wYXJhY2nDs25cbiAgICBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCA9IGFnZW50Py5pZFxuICAgIHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnQgPSBjaGF0SWRcbiAgICBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCA9IG5ld0NoYXRLZXlcbiAgfSwgW2FnZW50Py5pZCwgY2hhdElkLCBuZXdDaGF0S2V5LCBkaXNhYmxlZF0pXG5cbiAgLy8gQ2xlYXIgaW5wdXQgd2hlbiBzZXNzaW9uIGNoYW5nZXMgKHVzZXIgc3dpdGNoZXMgdG8gYSBkaWZmZXJlbnQgY2hhdClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTZXNzaW9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgc2V0VmFsdWVUZXh0YXJlYSgnJylcbiAgICAgIHNldElzRGlzYWJsZWQodHJ1ZSlcbiAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgaGFuZGxlUmVzaXplKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgfSlcblxuICAgIHJldHVybiAoKSA9PiBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb25GcmFtZUlkKVxuICB9LCBbdmFsdWVUZXh0YXJlYV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXNUZXh0ID0gdmFsdWVUZXh0YXJlYS50cmltKCkubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICB9LCBbYXR0YWNobWVudHMsIHZhbHVlVGV4dGFyZWFdKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBvblNlbmRNZXNzYWdlKGlucHV0UmVmLmN1cnJlbnQudmFsdWUsIGF0dGFjaG1lbnRzKVxuICAgICAgaW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgICBzZXRWYWx1ZVRleHRhcmVhKCcnKVxuICAgICAgc2V0SXNEaXNhYmxlZCh0cnVlKVxuICAgICAgaGFuZGxlUmVzaXplKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYXR0YWNobWVudHMubGVuZ3RoKSB7XG4gICAgICBvblNlbmRNZXNzYWdlKCcnLCBhdHRhY2htZW50cylcbiAgICAgIHNldFZhbHVlVGV4dGFyZWEoJycpXG4gICAgICBzZXRJc0Rpc2FibGVkKHRydWUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGlmICghaXNEaXNhYmxlZCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgaGFuZGxlU2VuZE1lc3NhZ2UoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGhhc1RleHQgPSBlLnRhcmdldC52YWx1ZS50cmltKCkubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICAgIHNldFZhbHVlVGV4dGFyZWEoZS50YXJnZXQudmFsdWUpXG4gICAgb25DaGFuZ2U/LigpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQYXN0ZSA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpbnB1dFJlZi5jdXJyZW50Py52YWx1ZSA/PyAnJ1xuICAgICAgY29uc3QgaGFzVGV4dCA9IGN1cnJlbnRWYWx1ZS50cmltKCkubGVuZ3RoID4gMFxuICAgICAgY29uc3QgaGFzQXR0YWNobWVudHMgPSBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICBzZXRWYWx1ZVRleHRhcmVhKGN1cnJlbnRWYWx1ZSlcbiAgICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICAgIH0sIDEwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmlsZVNlbGVjdCA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXNcbiAgICBpZiAoIWZpbGVzKSByZXR1cm5cblxuICAgIGNvbnN0IGV4Y2VlZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBleGNsdWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZmlsZVNpemVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge31cbiAgICBsZXQgZmlsZXNJbnNlcnRlZCA9IGF0dGFjaG1lbnRzLmxlbmd0aFxuXG4gICAgLy8gRGVmaW5pciBsw61taXRlcyBwYXJhIGRpZmVyZW50ZXMgdGlwb3MgZGUgYXJjaGl2b3NcbiAgICBjb25zdCBpc05ld0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT4gWycucG5nJywgJy5qcGcnLCAnLmpwZWcnLCAnLnBkZiddLmluY2x1ZGVzKGV4dGVuc2lvbilcbiAgICBjb25zdCBpc09sZEZvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLnR4dCcsICcubWQnLCAnLmNzdicsICcuZG9jJywgJy5kb2N4JywgJy54bHN4JywgJy54bHMnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNBdWRpb0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5pbmNsdWRlcyhleHRlbnNpb24pXG5cbiAgICBBcnJheS5mcm9tKGZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgbGV0IGV4Y2x1ZGVkRmlsZSA9IGZhbHNlXG4gICAgICBjb25zdCBmaWxlTmFtZVBhcnRzID0gZmlsZS5uYW1lLnNwbGl0KCcuJylcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlTmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBgLiR7ZmlsZU5hbWVQYXJ0cy5wb3AoKT8udG9Mb3dlckNhc2UoKX1gIDogJydcblxuICAgICAgaWYgKCFhbGxvd2VkRmlsZVR5cGVzPy5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZmlsZVNpemVzW2ZpbGUubmFtZV0gPSBmaWxlLnNpemVcblxuICAgICAgLy8gVmFsaWRhY2lvbmVzIGVzcGVjw61maWNhcyBzZWfDum4gZWwgdGlwbyBkZSBhcmNoaXZvXG4gICAgICBpZiAoaXNOZXdGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBudWV2b3MgZm9ybWF0b3M6IGhhc3RhIDQuOTlNQiBwb3IgYXJjaGl2bywgaGFzdGEgNSBhcmNoaXZvc1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTiAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiA1KSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNPbGRGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBmb3JtYXRvcyBhbnRlcmlvcmVzOiBoYXN0YSAxTUIgcG9yIGFyY2hpdm8sIGhhc3RhIDUgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfT0xEICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IDUpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0F1ZGlvRm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIC8vIFBhcmEgYXJjaGl2b3MgZGUgYXVkaW86IGhhc3RhIDEwTUIgcG9yIGFyY2hpdm8sIGhhc3RhIDUgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfQVVESU8gKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gNSkge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhjbHVkZWRGaWxlKSB7XG4gICAgICAgIGZpbGVzSW5zZXJ0ZWQgKz0gMVxuICAgICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgZmlsZS5uYW1lLCB7IHR5cGU6IHR5cGVGaWxlIH0pXG4gICAgICAgIG9uRmlsZUF0dGFjaD8uKHBhcnNlZEZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldElzRGlzYWJsZWQoZmFsc2UpXG4gICAgaWYgKGV4Y2x1ZGVkRmlsZXMubGVuZ3RoIHx8IGV4Y2VlZGVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICBzZXRNb2RhbFByb3BzKHsgaXNPcGVuOiB0cnVlLCBleGNsdWRlZEZpbGVzLCBleGNlZWRlZEZpbGVzLCBmaWxlU2l6ZXMgfSlcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWxldGVBdHRhY2htZW50ID0gKGZpbGVJZDogc3RyaW5nKSA9PiB7XG4gICAgb25EZWxldGVBdHRhY2htZW50Py4oZmlsZUlkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQmx1ciA9ICgpID0+IHtcbiAgICBjb25zdCBoYXNUZXh0ID0gdmFsdWVUZXh0YXJlYS50cmltKCkubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlV3JhcHBlckZvY3VzID0gKCkgPT4gc2V0SXNGb2N1c2VkKHRydWUpXG4gIGNvbnN0IGhhbmRsZVdyYXBwZXJCbHVyID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF3cmFwcGVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIHNldElzRm9jdXNlZChmYWxzZSlcbiAgICAgIH1cbiAgICB9LCAwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU3RvcEdlbmVyYXRpb24gPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFN0b3BSZXNwb25zZSlcbiAgICBvblN0b3BHZW5lcmF0aW9uPy4oKVxuICB9XG5cbiAgY29uc3QgcGx1c0ljb25Db2xvciA9IGlzRm9jdXNlZCA/ICcjNjY2NjY2JyA6ICcjOTk5J1xuICBjb25zdCBwbHVzTWVudUljb25Db2xvciA9ICcjNGQ0ZDRkJ1xuICAvKiogQWxpbmVhZG8gY29uIGBQbHVzTWVudUl0ZW1MYWJlbGAgKCRzZWxlY3RlZCkgeSBlbCBjaGVjayBkZWwgbWVuw7ogKi9cbiAgY29uc3QgcGx1c01lbnVTZWxlY3RlZENvbG9yID0gJyMwMDU3OGMnXG5cbiAgbGV0IGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb246IFJlYWN0Tm9kZVxuICBpZiAoYWN0aXZlVG9vbENoaXBIb3ZlcmVkKSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxDcm9zcyBjb2xvcj1cIiNhNGFkYjVcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH0gZWxzZSBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPEdsb2JlIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICB9IGVsc2Uge1xuICAgIGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb24gPSA8VGVsZXNjb3BlSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTdHlsZWRNQUlBSW5wdXRXcmFwcGVyXG4gICAgICAgIHJlZj17d3JhcHBlclJlZn1cbiAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICBhbGlnbkJ1dHRvbnM9e2FsaWduQnV0dG9uc31cbiAgICAgICAgaGFzQXR0YWNobWVudHM9eyEhYXR0YWNobWVudHMubGVuZ3RofVxuICAgICAgICBvbkZvY3VzPXtoYW5kbGVXcmFwcGVyRm9jdXN9XG4gICAgICAgIG9uQmx1cj17aGFuZGxlV3JhcHBlckJsdXJ9XG4gICAgICA+XG4gICAgICAgIHshIWF0dGFjaG1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzEycHgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lUGFydHMgPSBhdHRhY2htZW50Lm5hbWUuc3BsaXQoJy4nKVxuICAgICAgICAgICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2VCeUV4dGVuc2lvbiA9IFsnLnBuZycsICcuanBnJywgJy5qcGVnJ10uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbilcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZUJ5TWltZSA9IGF0dGFjaG1lbnQudHlwZT8uc3RhcnRzV2l0aCgnaW1hZ2UvJylcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZSA9IGlzSW1hZ2VCeU1pbWUgJiYgaXNJbWFnZUJ5RXh0ZW5zaW9uXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2F0dGFjaG1lbnQubmFtZX0ga2V5PXtgJHtpbmRleH0tJHthdHRhY2htZW50Lm5hbWV9YH0+XG4gICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnQgaXNJbWFnZT17aXNJbWFnZX0+XG4gICAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50Lmljb259XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudERlbGV0ZUljb24gb25DbGljaz17KCkgPT4gaGFuZGxlRGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgPFRyYXNoIGNvbG9yPVwicmdiYSgxOTEsIDE5MSwgMTkxLCAxKVwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01JQXR0YWNobWVudERlbGV0ZUljb24+XG4gICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50PlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRNQUlBSW5wdXRcbiAgICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICBvblBhc3RlPXtoYW5kbGVQYXN0ZX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgYWxpZ25CdXR0b25zPXthbGlnbkJ1dHRvbnN9XG4gICAgICAgICAgb25CbHVyPXtoYW5kbGVCbHVyfVxuICAgICAgICAvPlxuICAgICAgICA8U3R5bGVkTUFJQUlucHV0QnV0dG9ucz5cbiAgICAgICAgICA8UGx1c01lbnVUb29sc1Jvdz5cbiAgICAgICAgICAgIDxQbHVzVG9nZ2xlQnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAkbWVudU9wZW49e3BsdXNNZW51T3Blbn1cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUGx1c0J1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjaGF0Lm9wZW5QbHVzTWVudUFyaWEnKX1cbiAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxQbHVzIGNvbG9yPXtwbHVzSWNvbkNvbG9yfSB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICA8L1BsdXNUb2dnbGVCdXR0b24+XG4gICAgICAgICAgICA8UG9wb3ZlclxuICAgICAgICAgICAgICBvcGVuPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgIGFuY2hvckVsPXtwbHVzTWVudUFuY2hvcn1cbiAgICAgICAgICAgICAgb25DbG9zZT17Y2xvc2VQbHVzTWVudX1cbiAgICAgICAgICAgICAgYW5jaG9yT3JpZ2luPXt7IHZlcnRpY2FsOiAndG9wJywgaG9yaXpvbnRhbDogJ2xlZnQnIH19XG4gICAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbj17eyB2ZXJ0aWNhbDogJ2JvdHRvbScsIGhvcml6b250YWw6ICdsZWZ0JyB9fVxuICAgICAgICAgICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgICAgICAgICBwYXBlcjoge1xuICAgICAgICAgICAgICAgICAgZWxldmF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnLTRweCcsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxQbHVzTWVudVBhcGVyPlxuICAgICAgICAgICAgICAgIDxQbHVzTWVudUlubmVyQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVBdHRhY2h9PlxuICAgICAgICAgICAgICAgICAgICA8QXR0YWNoIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWwgJHNlbGVjdGVkPXtmYWxzZX0+e3QoJ2NoYXQucGx1c01lbnVBdHRhY2gnKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8UGx1c01lbnVEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudVdlYlNlYXJjaH0+XG4gICAgICAgICAgICAgICAgICAgIDxHbG9iZVxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc1dlYlNlYXJjaEFjdGl2ZSA/IHBsdXNNZW51U2VsZWN0ZWRDb2xvciA6IHBsdXNNZW51SWNvbkNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezIwfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWwgJHNlbGVjdGVkPXshIWlzV2ViU2VhcmNoQWN0aXZlfT57dCgnY2hhdC5zZWFyY2hXZWInKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICB7aXNXZWJTZWFyY2hBY3RpdmUgPyA8Q2hlY2sgY29sb3I9e3BsdXNNZW51U2VsZWN0ZWRDb2xvcn0gd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1BsdXNNZW51SW5uZXJDb2x1bW4+XG4gICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVEZWVwU2VhcmNofT5cbiAgICAgICAgICAgICAgICAgIDxUZWxlc2NvcGVJY29uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc0RlZXBTZWFyY2hBY3RpdmUgPyBwbHVzTWVudVNlbGVjdGVkQ29sb3IgOiBwbHVzTWVudUljb25Db2xvcn1cbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezIwfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezIwfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbCAkc2VsZWN0ZWQ9eyEhaXNEZWVwU2VhcmNoQWN0aXZlfT5cbiAgICAgICAgICAgICAgICAgICAge3QoJ2NoYXQucGx1c01lbnVEZWVwSW52ZXN0aWdhdGlvbicpfVxuICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtpc0RlZXBTZWFyY2hBY3RpdmUgPyA8Q2hlY2sgY29sb3I9e3BsdXNNZW51U2VsZWN0ZWRDb2xvcn0gd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgIDwvUGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICAgICAgIHsoaXNXZWJTZWFyY2hBY3RpdmUgfHwgaXNEZWVwU2VhcmNoQWN0aXZlKSAmJiAoXG4gICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcFJvb3RcbiAgICAgICAgICAgICAgICAkaG92ZXJlZD17YWN0aXZlVG9vbENoaXBIb3ZlcmVkfVxuICAgICAgICAgICAgICAgICRleGl0aW5nPXt0b29sQ2hpcEV4aXRpbmd9XG4gICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAkY2xvc2VTaG93bj17YWN0aXZlVG9vbENoaXBIb3ZlcmVkfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5yZW1vdmVBY3RpdmVUb29sQXJpYScpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5Ub29sQ2hpcEV4aXQoKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7YWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbn1cbiAgICAgICAgICAgICAgICA8L0FjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8QWN0aXZlVG9vbENoaXBMYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtpc1dlYlNlYXJjaEFjdGl2ZSA/IHQoJ2NoYXQuc2VhcmNoV2ViJykgOiB0KCdjaGF0LnBsdXNNZW51RGVlcEludmVzdGlnYXRpb24nKX1cbiAgICAgICAgICAgICAgICA8L0FjdGl2ZVRvb2xDaGlwTGFiZWw+XG4gICAgICAgICAgICAgIDwvQWN0aXZlVG9vbENoaXBSb290PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1BsdXNNZW51VG9vbHNSb3c+XG5cbiAgICAgICAgICB7aXNXcml0aW5nID8gKFxuICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuc3RvcCcpfT5cbiAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wQnV0dG9uIGRpc2FibGVkPXtmYWxzZX0gb25DbGljaz17aGFuZGxlU3RvcEdlbmVyYXRpb259IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICA8U3R5bGVkTUFJQVN0b3BJY29uIC8+XG4gICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVN0b3BCdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtpc1N0cmVhbWluZyA/IHQoJ2NoYXQuc2VuZCcpIDogdCgnY2hhdC5zZW5kJyl9PlxuICAgICAgICAgICAgICA8U3R5bGVkTUFJQVNlbmRCdXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZCB8fCBkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICBoYXNWYWx1ZXM9eyEhdmFsdWVUZXh0YXJlYS5sZW5ndGh9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGFwZXJQbGFuZSBjb2xvcj1cIiNCRkJGQkZcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRCdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TdHlsZWRNQUlBSW5wdXRCdXR0b25zPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwuY3N2LC5kb2MsLmRvY3gsLnBuZywuanBnLC5qcGVnLC5wZGYsLnhsc3gsLnhscywuZmxhYywubTRhLC5tcDMsLm1wNCwub2dhLC5vZ2csLndhdiwud2VibVwiXG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVTZWxlY3R9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgIC8+XG4gICAgICA8L1N0eWxlZE1BSUFJbnB1dFdyYXBwZXI+XG4gICAgICB7bW9kYWxQcm9wcy5pc09wZW4gJiYgKFxuICAgICAgICA8TW9kYWxGaWxlRXhjZWVkc1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldE1vZGFsUHJvcHMoeyBpc09wZW46IGZhbHNlLCBleGNsdWRlZEZpbGVzOiBbXSwgZXhjZWVkZWRGaWxlczogW10sIGZpbGVTaXplczoge30gfSl9XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNsdWRlZEZpbGVzfVxuICAgICAgICAgIGV4Y2VlZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjZWVkZWRGaWxlc31cbiAgICAgICAgICBmaWxlU2l6ZXM9e21vZGFsUHJvcHMuZmlsZVNpemVzfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUE0REEsU0FBUyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ3RHLFNB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
|