@projectcor/maia-components 2.11.65-23 → 2.11.65-3

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