@projectcor/maia-components 2.11.65-7 → 2.11.65-9

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.
@@ -1,26 +1,47 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
2
  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; }
2
5
  /* eslint-disable react/function-component-definition */
3
6
  /* eslint-disable jsx-a11y/click-events-have-key-events */
4
7
  /* eslint-disable jsx-a11y/no-static-element-interactions */
5
8
  import { useEffect, useRef, useState, useCallback, useMemo } from 'react';
6
9
  import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
7
10
  import { useT } from '../../../hooks/useT';
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';
11
+ import { SCCAIHomeContainer, SCCAIHomeContent, SCCAIHomeContentInner, SCCAIHomeGradientTop, SCCAIHomeGradientBottom, SCCAIHomeHeader, SCCAIHomeGreeting, SCCAIHomeAgentInfoContainer, SCCAIHomeAgentInfo, SCCAIHomeProjectSummary, SCCAIHomeProjectSummaryContent, SCCAIHomeProjectSummaryTitle, SCCAIHomeProjectSummaryDescription, SCCAHWrapperSummaryProject, SCCAIHomeIntroduction, SCCAIHomeCreatedByContainer, SCCAIHomeCreatedByText, SCCAIHomeCreatedByTextName, SCCAIHomeIconContainer, SCCAIHomeLogoWrapper, SCCAIHomeMaiaHeaderStack, SCCAIHomeDynamicSection, SCCAIHomeRecentContexts, SCCAIHomeRecentContextsTitle, SCCAIHomeRecentContextsList, SCCAIHomeRecentContextPill, SCCAIHomeRecentContextPillSkeleton } from './styles';
9
12
  import { useGlobalContext } from '../../../context/global-context';
13
+ import { CORUserRole, useUser } from '../../../context/cor-user';
10
14
  import { validateIsMaia } from '../../../services/utils/validateIsMaia';
11
15
  import { FrequentlyAskedQuestions } from '../../atoms/FrequentlyAskedQuestions';
12
16
  import { FrequentlyUsedActions } from '../../atoms/FrequentlyUsedActions';
13
17
  import { useFrequentlyUsedActions } from '../../../hooks/useFrequentlyUsedActions';
14
18
  import { useFrequentlyAskedQuestions } from '../../../hooks/useFrequentlyAskedQuestions';
19
+ import { useRecentContexts } from '../../../hooks/useRecentContexts';
15
20
  import { MAIAIsologo } from '../../atoms/icons/MAIAIsologo';
16
21
  import { TemplateGradientIcon } from '../../atoms/icons/TemplateGradientIcon';
17
22
  import { ChatAIHomeMaiaker } from './ChatAIHomeMaiaker';
18
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
23
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
24
  export var FrequentQuestions = /*#__PURE__*/function (FrequentQuestions) {
20
25
  FrequentQuestions["rentabilidad_proyecto"] = "rentabilidad_proyecto";
21
26
  FrequentQuestions["avance_proyecto"] = "avance_proyecto";
22
27
  return FrequentQuestions;
23
28
  }({});
29
+ var RECENT_CONTEXTS_PER_TYPE = 3;
30
+ var RECENT_CONTEXT_SKELETON_KEYS = ['recent-context-skeleton-1', 'recent-context-skeleton-2', 'recent-context-skeleton-3'];
31
+ var parseNumericId = function parseNumericId(value) {
32
+ if (value === null || value === undefined || value === '') return null;
33
+ var parsed = Number(value);
34
+ return Number.isFinite(parsed) ? parsed : null;
35
+ };
36
+ var getAllowedRecentContextTypes = function getAllowedRecentContextTypes(roleId) {
37
+ if (roleId === CORUserRole.CLEVEL || roleId === CORUserRole.DIRECTOR || roleId === CORUserRole.PROJECT_MANAGER) {
38
+ return new Set(['client', 'project', 'task']);
39
+ }
40
+ if (roleId === CORUserRole.COLLABORATOR) {
41
+ return new Set(['task']);
42
+ }
43
+ return new Set();
44
+ };
24
45
  export var ChatAIHome = function ChatAIHome(_ref) {
25
46
  var handlers = _ref.handlers,
26
47
  onStartChat = _ref.onStartChat,
@@ -29,9 +50,14 @@ export var ChatAIHome = function ChatAIHome(_ref) {
29
50
  var _useT = useT(),
30
51
  t = _useT.t,
31
52
  i18n = _useT.i18n;
53
+ var user = useUser();
32
54
  var _useGlobalContext = useGlobalContext(),
33
55
  agent = _useGlobalContext.agent,
34
- section = _useGlobalContext.section;
56
+ section = _useGlobalContext.section,
57
+ setClient = _useGlobalContext.setClient,
58
+ setProject = _useGlobalContext.setProject,
59
+ setTask = _useGlobalContext.setTask,
60
+ setChipsProject = _useGlobalContext.setChipsProject;
35
61
  var isMAIA = validateIsMaia(agent);
36
62
  var floatingCustomCenter = !!(floating && (agent === null || agent === void 0 ? void 0 : agent.type) === 'custom');
37
63
  var lang = i18n.language === 'br' ? 'pt' : i18n.language;
@@ -41,9 +67,27 @@ export var ChatAIHome = function ChatAIHome(_ref) {
41
67
  // El orchestrator (type === 'orchestrator') muestra FAQs/FUAs agregadas de sus subagentes,
42
68
  // así que NO se trata como maiaker acá. Maiaker = clone global legacy con nombre maiaker/marketplace.
43
69
  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) || '');
70
+ var isHeaderHome = isMAIA && section === 'header' && (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator';
71
+ var allowedRecentContextTypes = useMemo(function () {
72
+ return getAllowedRecentContextTypes(user.role_id);
73
+ }, [user.role_id]);
74
+ var _useRecentContexts = useRecentContexts({
75
+ enabled: isHeaderHome,
76
+ limit: RECENT_CONTEXTS_PER_TYPE
77
+ }),
78
+ fetchedRecentContexts = _useRecentContexts.contexts,
79
+ recentContextsLoading = _useRecentContexts.loading,
80
+ recentContextsLoaded = _useRecentContexts.loaded;
81
+ var recentContexts = useMemo(function () {
82
+ return fetchedRecentContexts.filter(function (context) {
83
+ return allowedRecentContextTypes.has(context.type);
84
+ });
85
+ }, [fetchedRecentContexts, allowedRecentContextTypes]);
86
+ var hasRecentContextActivity = !isHeaderHome || recentContexts.length > 0;
87
+ var hideHeaderHomeSuggestions = isHeaderHome && recentContextsLoaded && !recentContextsLoading && recentContexts.length === 0;
44
88
  // FUA y FAQ aplican a agentes clone y al orchestrator (los custom no las tienen habilitadas por ahora).
45
89
  // Maiaker (clone global legacy) queda excluido como antes.
46
- var homeListsAgentId = isMAIA && !isMaiaker ? agent === null || agent === void 0 ? void 0 : agent.id : undefined;
90
+ var homeListsAgentId = isMAIA && !isMaiaker && hasRecentContextActivity ? agent === null || agent === void 0 ? void 0 : agent.id : undefined;
47
91
  var _useFrequentlyUsedAct = useFrequentlyUsedActions(homeListsAgentId, section),
48
92
  agentFuas = _useFrequentlyUsedAct.actions,
49
93
  fuasLoading = _useFrequentlyUsedAct.loading;
@@ -53,7 +97,7 @@ export var ChatAIHome = function ChatAIHome(_ref) {
53
97
  handleGetFrequentlyAskedQuestions = _useFrequentlyAskedQu.handleGetFrequentlyAskedQuestions;
54
98
  var faqsFetchRef = useRef(null);
55
99
  useEffect(function () {
56
- if (!isMAIA || isMaiaker || section === 'task' || !(agent !== null && agent !== void 0 && agent.id)) return;
100
+ if (!isMAIA || isMaiaker || section === 'task' || !(agent !== null && agent !== void 0 && agent.id) || !hasRecentContextActivity) return;
57
101
  var currentKey = "".concat(agent.id, "-").concat(lang);
58
102
  var lastKey = faqsFetchRef.current ? "".concat(faqsFetchRef.current.agentId, "-").concat(faqsFetchRef.current.lang) : null;
59
103
  if (currentKey !== lastKey) {
@@ -66,14 +110,15 @@ export var ChatAIHome = function ChatAIHome(_ref) {
66
110
  lang: lang
67
111
  });
68
112
  }
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;
113
+ }, [isMaiaker, section, agent === null || agent === void 0 ? void 0 : agent.id, lang, handleGetFrequentlyAskedQuestions, hasRecentContextActivity]);
114
+ var shouldShowFaqs = !hideHeaderHomeSuggestions && !isMaiaker && section !== 'task' && faqsAccess && (agentFaqs.length > 0 || faqsLoading);
115
+ var shouldShowFuas = !hideHeaderHomeSuggestions && !isMaiaker && (agentFuas.length > 0 || fuasLoading);
116
+ var hasAnyHomeListContent = !hideHeaderHomeSuggestions && (!isMaiaker && section !== 'task' && faqsAccess && agentFaqs.length > 0 || !isMaiaker && agentFuas.length > 0);
73
117
  var showProjectSummaryCard = showProjectSummary && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'project';
74
- var showFAQs = !!(hasAnyHomeListContent || showProjectSummaryCard || isMaiaker);
118
+ var hasRecentContextsContent = isHeaderHome && (recentContextsLoading || recentContexts.length > 0);
119
+ var showFAQs = !!(hasRecentContextsContent || hasAnyHomeListContent || showProjectSummaryCard || isMaiaker);
75
120
  var homeScrollableLayout = showFAQs;
76
- var showDynamicSection = hasAnyHomeListContent || shouldShowFaqs || shouldShowFuas || isMaiaker;
121
+ var showDynamicSection = hasRecentContextsContent || hasAnyHomeListContent || shouldShowFaqs || shouldShowFuas || isMaiaker;
77
122
 
78
123
  // Lógica del scroll con gradientes
79
124
  var contentContainerRef = useRef(null);
@@ -102,6 +147,107 @@ export var ChatAIHome = function ChatAIHome(_ref) {
102
147
  }
103
148
  return typeof intro === 'string' ? intro : '';
104
149
  }, [agent === null || agent === void 0 ? void 0 : agent.id, agent === null || agent === void 0 ? void 0 : agent.introduction, section, isMaiaker, t]);
150
+ var handleSelectRecentContext = useCallback(function (context) {
151
+ var _context$parents, _context$parents2, _context$parents3, _context$parents4;
152
+ var contextId = parseNumericId(context.id);
153
+ var clientId = parseNumericId((_context$parents = context.parents) === null || _context$parents === void 0 ? void 0 : _context$parents.client_id);
154
+ var projectId = parseNumericId((_context$parents2 = context.parents) === null || _context$parents2 === void 0 ? void 0 : _context$parents2.project_id);
155
+ var clientName = ((_context$parents3 = context.parents) === null || _context$parents3 === void 0 ? void 0 : _context$parents3.client_name) || '';
156
+ var projectName = ((_context$parents4 = context.parents) === null || _context$parents4 === void 0 ? void 0 : _context$parents4.project_name) || '';
157
+ setTask(null);
158
+ setProject(null);
159
+ setClient === null || setClient === void 0 || setClient(null);
160
+ setChipsProject(null);
161
+ if (context.type === 'client') {
162
+ if (contextId == null) return;
163
+ setClient === null || setClient === void 0 || setClient({
164
+ id: contextId,
165
+ name: context.name
166
+ });
167
+ return;
168
+ }
169
+ if (context.type === 'project') {
170
+ if (contextId == null) return;
171
+ setProject(_objectSpread(_objectSpread({
172
+ id: contextId,
173
+ name: context.name
174
+ }, clientId != null ? {
175
+ clientId: clientId
176
+ } : {}), clientId != null ? {
177
+ client: {
178
+ id: clientId,
179
+ name: clientName
180
+ }
181
+ } : {}));
182
+ setChipsProject({
183
+ projectId: String(contextId),
184
+ projectName: context.name,
185
+ clientName: clientName
186
+ });
187
+ return;
188
+ }
189
+ if (context.type === 'task') {
190
+ setTask(_objectSpread(_objectSpread({
191
+ id: context.id,
192
+ name: context.name
193
+ }, projectId != null ? {
194
+ projectId: projectId
195
+ } : {}), clientId != null ? {
196
+ clientId: clientId
197
+ } : {}));
198
+ if (clientId != null) {
199
+ setClient === null || setClient === void 0 || setClient({
200
+ id: clientId,
201
+ name: clientName
202
+ });
203
+ }
204
+ if (projectId != null) {
205
+ setProject(_objectSpread(_objectSpread({
206
+ id: projectId,
207
+ name: projectName || "".concat(t('homeMenu.recentContexts.types.project'), " ").concat(projectId)
208
+ }, clientId != null ? {
209
+ clientId: clientId
210
+ } : {}), clientId != null ? {
211
+ client: {
212
+ id: clientId,
213
+ name: clientName
214
+ }
215
+ } : {}));
216
+ setChipsProject({
217
+ projectId: String(projectId),
218
+ projectName: projectName || "".concat(t('homeMenu.recentContexts.types.project'), " ").concat(projectId),
219
+ clientName: clientName
220
+ });
221
+ }
222
+ }
223
+ }, [setChipsProject, setClient, setProject, setTask, t]);
224
+ var renderRecentContexts = function renderRecentContexts() {
225
+ if (!isHeaderHome || hideHeaderHomeSuggestions) return null;
226
+ return /*#__PURE__*/_jsxs(SCCAIHomeRecentContexts, {
227
+ children: [(recentContextsLoading || recentContexts.length > 0) && /*#__PURE__*/_jsx(SCCAIHomeRecentContextsTitle, {
228
+ children: t('homeMenu.recentContexts.title')
229
+ }), /*#__PURE__*/_jsxs(SCCAIHomeRecentContextsList, {
230
+ children: [recentContextsLoading && RECENT_CONTEXT_SKELETON_KEYS.map(function (key) {
231
+ return /*#__PURE__*/_jsx(SCCAIHomeRecentContextPillSkeleton, {}, key);
232
+ }), !recentContextsLoading && recentContexts.map(function (context) {
233
+ var typeLabel = t("homeMenu.recentContexts.types.".concat(context.type));
234
+ var label = "".concat(typeLabel, ": ").concat(context.name);
235
+ return /*#__PURE__*/_jsx(SCCAIHomeRecentContextPill, {
236
+ type: "button",
237
+ onClick: function onClick() {
238
+ return handleSelectRecentContext(context);
239
+ },
240
+ children: /*#__PURE__*/_jsx(Tooltip, {
241
+ title: label,
242
+ children: /*#__PURE__*/_jsx("span", {
243
+ children: label
244
+ })
245
+ })
246
+ }, "".concat(context.type, "-").concat(context.id));
247
+ })]
248
+ })]
249
+ });
250
+ };
105
251
  var checkScroll = useCallback(function () {
106
252
  var container = contentContainerRef.current;
107
253
  if (!container || !homeScrollableLayout) return;
@@ -184,7 +330,7 @@ export var ChatAIHome = function ChatAIHome(_ref) {
184
330
  showFAQs: homeScrollableLayout,
185
331
  $isAgentView: !isMAIA,
186
332
  $floatingCustomCenter: floatingCustomCenter,
187
- children: [/*#__PURE__*/_jsxs(SCCAIHomeHeader, {
333
+ children: [!hideHeaderHomeSuggestions && /*#__PURE__*/_jsxs(SCCAIHomeHeader, {
188
334
  $gap: isMAIA && section !== 'project' ? '8px' : '20px',
189
335
  $maxWidth: isMAIA ? '100%' : '380px',
190
336
  $isAgentView: !isMAIA,
@@ -208,7 +354,7 @@ export var ChatAIHome = function ChatAIHome(_ref) {
208
354
  })]
209
355
  }), showDynamicSection && /*#__PURE__*/_jsxs(SCCAIHomeDynamicSection, {
210
356
  $grow: isMaiaker,
211
- children: [shouldShowFaqs && /*#__PURE__*/_jsx(FrequentlyAskedQuestions, {
357
+ children: [renderRecentContexts(), shouldShowFaqs && /*#__PURE__*/_jsx(FrequentlyAskedQuestions, {
212
358
  onStartChat: onStartChat,
213
359
  showFAQs: showFAQs,
214
360
  showProjectSummary: showProjectSummary,
@@ -233,4 +379,4 @@ export var ChatAIHome = function ChatAIHome(_ref) {
233
379
  })]
234
380
  });
235
381
  };
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
382
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIlRvb2x0aXAiLCJ1c2VUIiwiU0NDQUlIb21lQ29udGFpbmVyIiwiU0NDQUlIb21lQ29udGVudCIsIlNDQ0FJSG9tZUNvbnRlbnRJbm5lciIsIlNDQ0FJSG9tZUdyYWRpZW50VG9wIiwiU0NDQUlIb21lR3JhZGllbnRCb3R0b20iLCJTQ0NBSUhvbWVIZWFkZXIiLCJTQ0NBSUhvbWVHcmVldGluZyIsIlNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lciIsIlNDQ0FJSG9tZUFnZW50SW5mbyIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24iLCJTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCIsIlNDQ0FJSG9tZUludHJvZHVjdGlvbiIsIlNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lciIsIlNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQiLCJTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQ0FJSG9tZUljb25Db250YWluZXIiLCJTQ0NBSUhvbWVMb2dvV3JhcHBlciIsIlNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayIsIlNDQ0FJSG9tZUR5bmFtaWNTZWN0aW9uIiwiU0NDQUlIb21lUmVjZW50Q29udGV4dHMiLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1RpdGxlIiwiU0NDQUlIb21lUmVjZW50Q29udGV4dHNMaXN0IiwiU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGwiLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFNrZWxldG9uIiwidXNlR2xvYmFsQ29udGV4dCIsIkNPUlVzZXJSb2xlIiwidXNlVXNlciIsInZhbGlkYXRlSXNNYWlhIiwiRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwiRnJlcXVlbnRseVVzZWRBY3Rpb25zIiwidXNlRnJlcXVlbnRseVVzZWRBY3Rpb25zIiwidXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwidXNlUmVjZW50Q29udGV4dHMiLCJNQUlBSXNvbG9nbyIsIlRlbXBsYXRlR3JhZGllbnRJY29uIiwiQ2hhdEFJSG9tZU1haWFrZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJlcXVlbnRRdWVzdGlvbnMiLCJSRUNFTlRfQ09OVEVYVFNfUEVSX1RZUEUiLCJSRUNFTlRfQ09OVEVYVF9TS0VMRVRPTl9LRVlTIiwicGFyc2VOdW1lcmljSWQiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsInBhcnNlZCIsIk51bWJlciIsImlzRmluaXRlIiwiZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyIsInJvbGVJZCIsIkNMRVZFTCIsIkRJUkVDVE9SIiwiUFJPSkVDVF9NQU5BR0VSIiwiU2V0IiwiQ09MTEFCT1JBVE9SIiwiQ2hhdEFJSG9tZSIsIl9yZWYiLCJoYW5kbGVycyIsIm9uU3RhcnRDaGF0IiwiZXhwYW5kZWQiLCJmbG9hdGluZyIsIl91c2VUIiwidCIsImkxOG4iLCJ1c2VyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsInNlY3Rpb24iLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0Iiwic2V0VGFzayIsInNldENoaXBzUHJvamVjdCIsImlzTUFJQSIsImZsb2F0aW5nQ3VzdG9tQ2VudGVyIiwidHlwZSIsImxhbmciLCJsYW5ndWFnZSIsInN1bW1hcnlQcm9qZWN0QWNjZXNzIiwid2luZG93IiwiU3RyaW5nIiwiTUFJQV9QUk9KRUNUX1NVTU1BUllfRkVBVFVSRV9BQ0NFU1MiLCJ0b0xvd2VyQ2FzZSIsIm1haWFQcm9qZWN0U3VtbWFyeUFjY2VzcyIsImZhcXNBY2Nlc3MiLCJzaG93UHJvamVjdFN1bW1hcnkiLCJpc01haWFrZXIiLCJlbnRpdHkiLCJ0ZXN0IiwibmFtZSIsImlzSGVhZGVySG9tZSIsImFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMiLCJyb2xlX2lkIiwiX3VzZVJlY2VudENvbnRleHRzIiwiZW5hYmxlZCIsImxpbWl0IiwiZmV0Y2hlZFJlY2VudENvbnRleHRzIiwiY29udGV4dHMiLCJyZWNlbnRDb250ZXh0c0xvYWRpbmciLCJsb2FkaW5nIiwicmVjZW50Q29udGV4dHNMb2FkZWQiLCJsb2FkZWQiLCJyZWNlbnRDb250ZXh0cyIsImZpbHRlciIsImNvbnRleHQiLCJoYXMiLCJoYXNSZWNlbnRDb250ZXh0QWN0aXZpdHkiLCJsZW5ndGgiLCJoaWRlSGVhZGVySG9tZVN1Z2dlc3Rpb25zIiwiaG9tZUxpc3RzQWdlbnRJZCIsImlkIiwiX3VzZUZyZXF1ZW50bHlVc2VkQWN0IiwiYWdlbnRGdWFzIiwiYWN0aW9ucyIsImZ1YXNMb2FkaW5nIiwiX3VzZUZyZXF1ZW50bHlBc2tlZFF1IiwiYWdlbnRGYXFzIiwiZmFxcyIsImZhcXNMb2FkaW5nIiwiaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwiZmFxc0ZldGNoUmVmIiwiY3VycmVudEtleSIsImNvbmNhdCIsImxhc3RLZXkiLCJjdXJyZW50IiwiYWdlbnRJZCIsInNob3VsZFNob3dGYXFzIiwic2hvdWxkU2hvd0Z1YXMiLCJoYXNBbnlIb21lTGlzdENvbnRlbnQiLCJzaG93UHJvamVjdFN1bW1hcnlDYXJkIiwiaGFzUmVjZW50Q29udGV4dHNDb250ZW50Iiwic2hvd0ZBUXMiLCJob21lU2Nyb2xsYWJsZUxheW91dCIsInNob3dEeW5hbWljU2VjdGlvbiIsImNvbnRlbnRDb250YWluZXJSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzaG93VG9wR3JhZGllbnQiLCJzZXRTaG93VG9wR3JhZGllbnQiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNob3dCb3R0b21HcmFkaWVudCIsInNldFNob3dCb3R0b21HcmFkaWVudCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNTY3JvbGxpbmciLCJzZXRJc1Njcm9sbGluZyIsInNjcm9sbFRpbWVvdXRSZWYiLCJncmVldGluZyIsImludHJvIiwiaW50cm9kdWN0aW9uIiwiQXJyYXkiLCJpc0FycmF5IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiaGFuZGxlU2VsZWN0UmVjZW50Q29udGV4dCIsIl9jb250ZXh0JHBhcmVudHMiLCJfY29udGV4dCRwYXJlbnRzMiIsIl9jb250ZXh0JHBhcmVudHMzIiwiX2NvbnRleHQkcGFyZW50czQiLCJjb250ZXh0SWQiLCJjbGllbnRJZCIsInBhcmVudHMiLCJjbGllbnRfaWQiLCJwcm9qZWN0SWQiLCJwcm9qZWN0X2lkIiwiY2xpZW50TmFtZSIsImNsaWVudF9uYW1lIiwicHJvamVjdE5hbWUiLCJwcm9qZWN0X25hbWUiLCJfb2JqZWN0U3ByZWFkIiwiY2xpZW50IiwicmVuZGVyUmVjZW50Q29udGV4dHMiLCJjaGlsZHJlbiIsIm1hcCIsImtleSIsInR5cGVMYWJlbCIsImxhYmVsIiwib25DbGljayIsInRpdGxlIiwiY2hlY2tTY3JvbGwiLCJjb250YWluZXIiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJpc1Njcm9sbGFibGUiLCJpc0F0VG9wIiwiaXNBdEJvdHRvbSIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJhZGRFdmVudExpc3RlbmVyIiwidGltZW91dElkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbmRlckhlYWRlckNvbnRlbnQiLCJfYWdlbnQkY3JlYXRlZF9ieSIsIl9hZ2VudCRjcmVhdGVkX2J5MiIsImVtb2ppIiwiY3JlYXRlZF9ieSIsImlzX2RlbGV0ZWQiLCIkbm9HYXAiLCIkc2hvdyIsInJlZiIsIiRpc0FnZW50VmlldyIsIiRmbG9hdGluZ0N1c3RvbUNlbnRlciIsIiRnYXAiLCIkbWF4V2lkdGgiLCJwcm9qZWN0U3VtbWFyeSIsImhlaWdodCIsIndpZHRoIiwiJGdyb3ciXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJSG9tZS9DaGF0QUlIb21lLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuXG5pbXBvcnQgeyBvcHRpb25zIH0gZnJvbSAnLi4vQ2hhdEFJTW9kYWwvY29uc3RhbnRzJ1xuXG5pbXBvcnQge1xuICBTQ0NBSUhvbWVDb250YWluZXIsXG4gIFNDQ0FJSG9tZUNvbnRlbnQsXG4gIFNDQ0FJSG9tZUNvbnRlbnRJbm5lcixcbiAgU0NDQUlIb21lR3JhZGllbnRUb3AsXG4gIFNDQ0FJSG9tZUdyYWRpZW50Qm90dG9tLFxuICBTQ0NBSUhvbWVIZWFkZXIsXG4gIFNDQ0FJSG9tZUdyZWV0aW5nLFxuICBTQ0NBSUhvbWVBZ2VudEluZm9Db250YWluZXIsXG4gIFNDQ0FJSG9tZUFnZW50SW5mbyxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnksXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudCxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnlEZXNjcmlwdGlvbixcbiAgU0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3QsXG4gIFNDQ0FJSG9tZUludHJvZHVjdGlvbixcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyLFxuICBTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0LFxuICBTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSxcbiAgU0NDQUlIb21lSWNvbkNvbnRhaW5lcixcbiAgU0NDQUlIb21lTG9nb1dyYXBwZXIsXG4gIFNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayxcbiAgU0NDQUlIb21lRHluYW1pY1NlY3Rpb24sXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1RpdGxlLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3QsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFNrZWxldG9uLFxufSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQ09SVXNlclJvbGUsIHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdmFsaWRhdGVJc01haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy92YWxpZGF0ZUlzTWFpYSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IEZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IHVzZVJlY2VudENvbnRleHRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVjZW50Q29udGV4dHMnXG5pbXBvcnQgdHlwZSB7IFJlY2VudENvbnRleHRJdGVtLCBSZWNlbnRDb250ZXh0VHlwZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvUmVjZW50Q29udGV4dHMnXG5pbXBvcnQgeyBNQUlBSXNvbG9nbyB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL01BSUFJc29sb2dvJ1xuaW1wb3J0IHsgVGVtcGxhdGVHcmFkaWVudEljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9UZW1wbGF0ZUdyYWRpZW50SWNvbidcbmltcG9ydCB7IENoYXRBSUhvbWVNYWlha2VyIH0gZnJvbSAnLi9DaGF0QUlIb21lTWFpYWtlcidcblxudHlwZSBDaGF0QUlIb21lUHJvcHMgPSB7XG4gIG9uU3RhcnRDaGF0OiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgbWVudGlvbnM/OiBudWxsLFxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICkgPT4gdm9pZFxuICBoYW5kbGVyczogUmVjb3JkPG9wdGlvbnMsICgpID0+IHZvaWQ+XG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBmbG9hdGluZz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGVudW0gRnJlcXVlbnRRdWVzdGlvbnMge1xuICByZW50YWJpbGlkYWRfcHJveWVjdG8gPSAncmVudGFiaWxpZGFkX3Byb3llY3RvJyxcbiAgYXZhbmNlX3Byb3llY3RvID0gJ2F2YW5jZV9wcm95ZWN0bycsXG59XG5cbmNvbnN0IFJFQ0VOVF9DT05URVhUU19QRVJfVFlQRSA9IDNcbmNvbnN0IFJFQ0VOVF9DT05URVhUX1NLRUxFVE9OX0tFWVMgPSBbXG4gICdyZWNlbnQtY29udGV4dC1za2VsZXRvbi0xJyxcbiAgJ3JlY2VudC1jb250ZXh0LXNrZWxldG9uLTInLFxuICAncmVjZW50LWNvbnRleHQtc2tlbGV0b24tMycsXG5dXG5cbmNvbnN0IHBhcnNlTnVtZXJpY0lkID0gKHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCk6IG51bWJlciB8IG51bGwgPT4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiBudWxsXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSlcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxufVxuXG5jb25zdCBnZXRBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzID0gKHJvbGVJZD86IENPUlVzZXJSb2xlKTogU2V0PFJlY2VudENvbnRleHRUeXBlPiA9PiB7XG4gIGlmIChyb2xlSWQgPT09IENPUlVzZXJSb2xlLkNMRVZFTCB8fCByb2xlSWQgPT09IENPUlVzZXJSb2xlLkRJUkVDVE9SIHx8IHJvbGVJZCA9PT0gQ09SVXNlclJvbGUuUFJPSkVDVF9NQU5BR0VSKSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoWydjbGllbnQnLCAncHJvamVjdCcsICd0YXNrJ10pXG4gIH1cbiAgaWYgKHJvbGVJZCA9PT0gQ09SVXNlclJvbGUuQ09MTEFCT1JBVE9SKSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoWyd0YXNrJ10pXG4gIH1cbiAgcmV0dXJuIG5ldyBTZXQoKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJSG9tZSA9ICh7IGhhbmRsZXJzLCBvblN0YXJ0Q2hhdCwgZXhwYW5kZWQsIGZsb2F0aW5nIH06IENoYXRBSUhvbWVQcm9wcykgPT4ge1xuICBjb25zdCB7IHQsIGkxOG4gfSA9IHVzZVQoKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgYWdlbnQsIHNlY3Rpb24sIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICBjb25zdCBpc01BSUEgPSB2YWxpZGF0ZUlzTWFpYShhZ2VudCBhcyBBZ2VudClcbiAgY29uc3QgZmxvYXRpbmdDdXN0b21DZW50ZXIgPSAhIShmbG9hdGluZyAmJiBhZ2VudD8udHlwZSA9PT0gJ2N1c3RvbScpXG4gIGNvbnN0IGxhbmcgPSBpMThuLmxhbmd1YWdlID09PSAnYnInID8gJ3B0JyA6IGkxOG4ubGFuZ3VhZ2VcblxuICBjb25zdCBzdW1tYXJ5UHJvamVjdEFjY2VzcyA9XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAoU3RyaW5nKHdpbmRvdy5NQUlBX1BST0pFQ1RfU1VNTUFSWV9GRUFUVVJFX0FDQ0VTUykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIHx8XG4gICAgICBTdHJpbmcod2luZG93Lm1haWFQcm9qZWN0U3VtbWFyeUFjY2VzcykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKVxuICBjb25zdCBmYXFzQWNjZXNzID0gdHJ1ZVxuICBjb25zdCBzaG93UHJvamVjdFN1bW1hcnkgPSAhIShpc01BSUEgJiYgc3VtbWFyeVByb2plY3RBY2Nlc3MpXG4gIC8vIEVsIG9yY2hlc3RyYXRvciAodHlwZSA9PT0gJ29yY2hlc3RyYXRvcicpIG11ZXN0cmEgRkFRcy9GVUFzIGFncmVnYWRhcyBkZSBzdXMgc3ViYWdlbnRlcyxcbiAgLy8gYXPDrSBxdWUgTk8gc2UgdHJhdGEgY29tbyBtYWlha2VyIGFjw6EuIE1haWFrZXIgPSBjbG9uZSBnbG9iYWwgbGVnYWN5IGNvbiBub21icmUgbWFpYWtlci9tYXJrZXRwbGFjZS5cbiAgY29uc3QgaXNNYWlha2VyID1cbiAgICBhZ2VudD8udHlwZSAhPT0gJ29yY2hlc3RyYXRvcicgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYWdlbnQ/Lm5hbWUgfHwgJycpXG4gIGNvbnN0IGlzSGVhZGVySG9tZSA9IGlzTUFJQSAmJiBzZWN0aW9uID09PSAnaGVhZGVyJyAmJiBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcidcbiAgY29uc3QgYWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyA9IHVzZU1lbW8oKCkgPT4gZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyh1c2VyLnJvbGVfaWQpLCBbdXNlci5yb2xlX2lkXSlcbiAgY29uc3Qge1xuICAgIGNvbnRleHRzOiBmZXRjaGVkUmVjZW50Q29udGV4dHMsXG4gICAgbG9hZGluZzogcmVjZW50Q29udGV4dHNMb2FkaW5nLFxuICAgIGxvYWRlZDogcmVjZW50Q29udGV4dHNMb2FkZWQsXG4gIH0gPSB1c2VSZWNlbnRDb250ZXh0cyh7XG4gICAgZW5hYmxlZDogaXNIZWFkZXJIb21lLFxuICAgIGxpbWl0OiBSRUNFTlRfQ09OVEVYVFNfUEVSX1RZUEUsXG4gIH0pXG4gIGNvbnN0IHJlY2VudENvbnRleHRzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBmZXRjaGVkUmVjZW50Q29udGV4dHMuZmlsdGVyKGNvbnRleHQgPT4gYWxsb3dlZFJlY2VudENvbnRleHRUeXBlcy5oYXMoY29udGV4dC50eXBlKSksXG4gICAgW2ZldGNoZWRSZWNlbnRDb250ZXh0cywgYWxsb3dlZFJlY2VudENvbnRleHRUeXBlc11cbiAgKVxuICBjb25zdCBoYXNSZWNlbnRDb250ZXh0QWN0aXZpdHkgPSAhaXNIZWFkZXJIb21lIHx8IHJlY2VudENvbnRleHRzLmxlbmd0aCA+IDBcbiAgY29uc3QgaGlkZUhlYWRlckhvbWVTdWdnZXN0aW9ucyA9XG4gICAgaXNIZWFkZXJIb21lICYmIHJlY2VudENvbnRleHRzTG9hZGVkICYmICFyZWNlbnRDb250ZXh0c0xvYWRpbmcgJiYgcmVjZW50Q29udGV4dHMubGVuZ3RoID09PSAwXG4gIC8vIEZVQSB5IEZBUSBhcGxpY2FuIGEgYWdlbnRlcyBjbG9uZSB5IGFsIG9yY2hlc3RyYXRvciAobG9zIGN1c3RvbSBubyBsYXMgdGllbmVuIGhhYmlsaXRhZGFzIHBvciBhaG9yYSkuXG4gIC8vIE1haWFrZXIgKGNsb25lIGdsb2JhbCBsZWdhY3kpIHF1ZWRhIGV4Y2x1aWRvIGNvbW8gYW50ZXMuXG4gIGNvbnN0IGhvbWVMaXN0c0FnZW50SWQgPSBpc01BSUEgJiYgIWlzTWFpYWtlciAmJiBoYXNSZWNlbnRDb250ZXh0QWN0aXZpdHkgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWRcbiAgY29uc3QgeyBhY3Rpb25zOiBhZ2VudEZ1YXMsIGxvYWRpbmc6IGZ1YXNMb2FkaW5nIH0gPSB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMoaG9tZUxpc3RzQWdlbnRJZCwgc2VjdGlvbilcbiAgY29uc3Qge1xuICAgIGZhcXM6IGFnZW50RmFxcyxcbiAgICBsb2FkaW5nOiBmYXFzTG9hZGluZyxcbiAgICBoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMsXG4gIH0gPSB1c2VGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMoaG9tZUxpc3RzQWdlbnRJZCwgbGFuZylcbiAgY29uc3QgZmFxc0ZldGNoUmVmID0gdXNlUmVmPHsgYWdlbnRJZDogc3RyaW5nOyBsYW5nOiBzdHJpbmcgfSB8IG51bGw+KG51bGwpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc01BSUEgfHwgaXNNYWlha2VyIHx8IHNlY3Rpb24gPT09ICd0YXNrJyB8fCAhYWdlbnQ/LmlkIHx8ICFoYXNSZWNlbnRDb250ZXh0QWN0aXZpdHkpIHJldHVyblxuICAgIGNvbnN0IGN1cnJlbnRLZXkgPSBgJHthZ2VudC5pZH0tJHtsYW5nfWBcbiAgICBjb25zdCBsYXN0S2V5ID0gZmFxc0ZldGNoUmVmLmN1cnJlbnQgPyBgJHtmYXFzRmV0Y2hSZWYuY3VycmVudC5hZ2VudElkfS0ke2ZhcXNGZXRjaFJlZi5jdXJyZW50Lmxhbmd9YCA6IG51bGxcbiAgICBpZiAoY3VycmVudEtleSAhPT0gbGFzdEtleSkge1xuICAgICAgZmFxc0ZldGNoUmVmLmN1cnJlbnQgPSB7IGFnZW50SWQ6IGFnZW50LmlkLCBsYW5nIH1cbiAgICAgIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyh7IGFnZW50SWQ6IGFnZW50LmlkLCBsYW5nIH0pXG4gICAgfVxuICB9LCBbaXNNYWlha2VyLCBzZWN0aW9uLCBhZ2VudD8uaWQsIGxhbmcsIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucywgaGFzUmVjZW50Q29udGV4dEFjdGl2aXR5XSlcblxuICBjb25zdCBzaG91bGRTaG93RmFxcyA9XG4gICAgIWhpZGVIZWFkZXJIb21lU3VnZ2VzdGlvbnMgJiZcbiAgICAhaXNNYWlha2VyICYmXG4gICAgc2VjdGlvbiAhPT0gJ3Rhc2snICYmXG4gICAgZmFxc0FjY2VzcyAmJlxuICAgIChhZ2VudEZhcXMubGVuZ3RoID4gMCB8fCBmYXFzTG9hZGluZylcbiAgY29uc3Qgc2hvdWxkU2hvd0Z1YXMgPSAhaGlkZUhlYWRlckhvbWVTdWdnZXN0aW9ucyAmJiAhaXNNYWlha2VyICYmIChhZ2VudEZ1YXMubGVuZ3RoID4gMCB8fCBmdWFzTG9hZGluZylcbiAgY29uc3QgaGFzQW55SG9tZUxpc3RDb250ZW50ID1cbiAgICAhaGlkZUhlYWRlckhvbWVTdWdnZXN0aW9ucyAmJlxuICAgICgoIWlzTWFpYWtlciAmJiBzZWN0aW9uICE9PSAndGFzaycgJiYgZmFxc0FjY2VzcyAmJiBhZ2VudEZhcXMubGVuZ3RoID4gMCkgfHwgKCFpc01haWFrZXIgJiYgYWdlbnRGdWFzLmxlbmd0aCA+IDApKVxuXG4gIGNvbnN0IHNob3dQcm9qZWN0U3VtbWFyeUNhcmQgPSBzaG93UHJvamVjdFN1bW1hcnkgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnXG4gIGNvbnN0IGhhc1JlY2VudENvbnRleHRzQ29udGVudCA9IGlzSGVhZGVySG9tZSAmJiAocmVjZW50Q29udGV4dHNMb2FkaW5nIHx8IHJlY2VudENvbnRleHRzLmxlbmd0aCA+IDApXG4gIGNvbnN0IHNob3dGQVFzID0gISEoaGFzUmVjZW50Q29udGV4dHNDb250ZW50IHx8IGhhc0FueUhvbWVMaXN0Q29udGVudCB8fCBzaG93UHJvamVjdFN1bW1hcnlDYXJkIHx8IGlzTWFpYWtlcilcbiAgY29uc3QgaG9tZVNjcm9sbGFibGVMYXlvdXQgPSBzaG93RkFRc1xuICBjb25zdCBzaG93RHluYW1pY1NlY3Rpb24gPVxuICAgIGhhc1JlY2VudENvbnRleHRzQ29udGVudCB8fCBoYXNBbnlIb21lTGlzdENvbnRlbnQgfHwgc2hvdWxkU2hvd0ZhcXMgfHwgc2hvdWxkU2hvd0Z1YXMgfHwgaXNNYWlha2VyXG5cbiAgLy8gTMOzZ2ljYSBkZWwgc2Nyb2xsIGNvbiBncmFkaWVudGVzXG4gIGNvbnN0IGNvbnRlbnRDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtzaG93VG9wR3JhZGllbnQsIHNldFNob3dUb3BHcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dCb3R0b21HcmFkaWVudCwgc2V0U2hvd0JvdHRvbUdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNTY3JvbGxpbmcsIHNldElzU2Nyb2xsaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaW1lb3V0UmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcblxuICAvLyBTYWx1ZG8gYWxlYXRvcmlvIGRlc2RlIGFnZW50LmludHJvZHVjdGlvbiAoYXJyYXkgY29uIDMgdmFyaWFudGVzIGRlbCBiYWNrKS4gRW4gdGFzaywgbWVuc2FqZSBmaWpvIGkxOG4uIE1haWFrZXIgc2luIGludHJvIGRlbCBhZ2VudGUuXG4gIGNvbnN0IGdyZWV0aW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzTWFpYWtlcikgcmV0dXJuICcnXG4gICAgaWYgKHNlY3Rpb24gPT09ICd0YXNrJykgcmV0dXJuIHQoJ2hvbWVNZW51LnRhc2tHcmVldGluZycpXG4gICAgY29uc3QgaW50cm8gPSBhZ2VudD8uaW50cm9kdWN0aW9uXG4gICAgaWYgKCFpbnRybykgcmV0dXJuICcnXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW50cm8pICYmIGludHJvLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBpbnRyb1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBpbnRyby5sZW5ndGgpXVxuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGludHJvID09PSAnc3RyaW5nJyA/IGludHJvIDogJydcbiAgfSwgW2FnZW50Py5pZCwgYWdlbnQ/LmludHJvZHVjdGlvbiwgc2VjdGlvbiwgaXNNYWlha2VyLCB0XSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRleHQ6IFJlY2VudENvbnRleHRJdGVtKSA9PiB7XG4gICAgICBjb25zdCBjb250ZXh0SWQgPSBwYXJzZU51bWVyaWNJZChjb250ZXh0LmlkKVxuICAgICAgY29uc3QgY2xpZW50SWQgPSBwYXJzZU51bWVyaWNJZChjb250ZXh0LnBhcmVudHM/LmNsaWVudF9pZClcbiAgICAgIGNvbnN0IHByb2plY3RJZCA9IHBhcnNlTnVtZXJpY0lkKGNvbnRleHQucGFyZW50cz8ucHJvamVjdF9pZClcbiAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBjb250ZXh0LnBhcmVudHM/LmNsaWVudF9uYW1lIHx8ICcnXG4gICAgICBjb25zdCBwcm9qZWN0TmFtZSA9IGNvbnRleHQucGFyZW50cz8ucHJvamVjdF9uYW1lIHx8ICcnXG5cbiAgICAgIHNldFRhc2sobnVsbClcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgICAgaWYgKGNvbnRleHQudHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgc2V0Q2xpZW50Py4oeyBpZDogY29udGV4dElkLCBuYW1lOiBjb250ZXh0Lm5hbWUgfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChjb250ZXh0LnR5cGUgPT09ICdwcm9qZWN0Jykge1xuICAgICAgICBpZiAoY29udGV4dElkID09IG51bGwpIHJldHVyblxuICAgICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgICBpZDogY29udGV4dElkLFxuICAgICAgICAgIG5hbWU6IGNvbnRleHQubmFtZSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50OiB7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSB9IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoY29udGV4dElkKSxcbiAgICAgICAgICBwcm9qZWN0TmFtZTogY29udGV4dC5uYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoY29udGV4dC50eXBlID09PSAndGFzaycpIHtcbiAgICAgICAgc2V0VGFzayh7XG4gICAgICAgICAgaWQ6IGNvbnRleHQuaWQsXG4gICAgICAgICAgbmFtZTogY29udGV4dC5uYW1lLFxuICAgICAgICAgIC4uLihwcm9qZWN0SWQgIT0gbnVsbCA/IHsgcHJvamVjdElkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkIH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChjbGllbnRJZCAhPSBudWxsKSB7XG4gICAgICAgICAgc2V0Q2xpZW50Py4oeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgfSlcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgICAgIGlkOiBwcm9qZWN0SWQsXG4gICAgICAgICAgICBuYW1lOiBwcm9qZWN0TmFtZSB8fCBgJHt0KCdob21lTWVudS5yZWNlbnRDb250ZXh0cy50eXBlcy5wcm9qZWN0Jyl9ICR7cHJvamVjdElkfWAsXG4gICAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQgfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLihjbGllbnRJZCAhPSBudWxsID8geyBjbGllbnQ6IHsgaWQ6IGNsaWVudElkLCBuYW1lOiBjbGllbnROYW1lIH0gfSA6IHt9KSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwcm9qZWN0SWQpLFxuICAgICAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lIHx8IGAke3QoJ2hvbWVNZW51LnJlY2VudENvbnRleHRzLnR5cGVzLnByb2plY3QnKX0gJHtwcm9qZWN0SWR9YCxcbiAgICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NldENoaXBzUHJvamVjdCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB0XVxuICApXG5cbiAgY29uc3QgcmVuZGVyUmVjZW50Q29udGV4dHMgPSAoKSA9PiB7XG4gICAgaWYgKCFpc0hlYWRlckhvbWUgfHwgaGlkZUhlYWRlckhvbWVTdWdnZXN0aW9ucykgcmV0dXJuIG51bGxcblxuICAgIHJldHVybiAoXG4gICAgICA8U0NDQUlIb21lUmVjZW50Q29udGV4dHM+XG4gICAgICAgIHsocmVjZW50Q29udGV4dHNMb2FkaW5nIHx8IHJlY2VudENvbnRleHRzLmxlbmd0aCA+IDApICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lUmVjZW50Q29udGV4dHNUaXRsZT57dCgnaG9tZU1lbnUucmVjZW50Q29udGV4dHMudGl0bGUnKX08L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzVGl0bGU+XG4gICAgICAgICl9XG4gICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3Q+XG4gICAgICAgICAge3JlY2VudENvbnRleHRzTG9hZGluZyAmJlxuICAgICAgICAgICAgUkVDRU5UX0NPTlRFWFRfU0tFTEVUT05fS0VZUy5tYXAoa2V5ID0+IDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFNrZWxldG9uIGtleT17a2V5fSAvPil9XG4gICAgICAgICAgeyFyZWNlbnRDb250ZXh0c0xvYWRpbmcgJiZcbiAgICAgICAgICAgIHJlY2VudENvbnRleHRzLm1hcChjb250ZXh0ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdHlwZUxhYmVsID0gdChgaG9tZU1lbnUucmVjZW50Q29udGV4dHMudHlwZXMuJHtjb250ZXh0LnR5cGV9YClcbiAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBgJHt0eXBlTGFiZWx9OiAke2NvbnRleHQubmFtZX1gXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsXG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2NvbnRleHQudHlwZX0tJHtjb250ZXh0LmlkfWB9XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdFJlY2VudENvbnRleHQoY29udGV4dCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2xhYmVsfT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e2xhYmVsfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3Q+XG4gICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGNoZWNrU2Nyb2xsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRlbnRDb250YWluZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGFpbmVyIHx8ICFob21lU2Nyb2xsYWJsZUxheW91dCkgcmV0dXJuXG5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgIGNvbnN0IGlzU2Nyb2xsYWJsZSA9IHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodFxuICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxUb3AgPT09IDBcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0ID49IHNjcm9sbEhlaWdodCAtIDFcblxuICAgIHNldFNob3dUb3BHcmFkaWVudChpc1Njcm9sbGFibGUgJiYgIWlzQXRUb3ApXG4gICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KGlzU2Nyb2xsYWJsZSAmJiAhaXNBdEJvdHRvbSlcbiAgICBzZXRJc1Njcm9sbGluZyh0cnVlKVxuXG4gICAgaWYgKHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudClcbiAgICB9XG5cbiAgICBzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzU2Nyb2xsaW5nKGZhbHNlKVxuICAgIH0sIDE1MClcbiAgfSwgW2hvbWVTY3JvbGxhYmxlTGF5b3V0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaG9tZVNjcm9sbGFibGVMYXlvdXQpIHtcbiAgICAgIHNldFNob3dUb3BHcmFkaWVudChmYWxzZSlcbiAgICAgIHNldFNob3dCb3R0b21HcmFkaWVudChmYWxzZSlcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBjb250ZW50Q29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNoZWNrU2Nyb2xsKClcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2hlY2tTY3JvbGwpXG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGNoZWNrU2Nyb2xsLCAxMDApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNoZWNrU2Nyb2xsKVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgIGlmIChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtob21lU2Nyb2xsYWJsZUxheW91dCwgY2hlY2tTY3JvbGxdKVxuXG4gIGNvbnN0IHJlbmRlckhlYWRlckNvbnRlbnQgPSAoKSA9PiB7XG4gICAgaWYgKCFpc01BSUEpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTQ0NBSUhvbWVBZ2VudEluZm9Db250YWluZXI+XG4gICAgICAgICAgPFNDQ0FJSG9tZUFnZW50SW5mbz5cbiAgICAgICAgICAgIHthZ2VudD8uZW1vaml9IHthZ2VudD8ubmFtZX1cbiAgICAgICAgICA8L1NDQ0FJSG9tZUFnZW50SW5mbz5cbiAgICAgICAgICB7YWdlbnQ/LmNyZWF0ZWRfYnkgJiYgIWlzTUFJQSAmJiAoXG4gICAgICAgICAgICA8U0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyPlxuICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgIGFnZW50Py5jcmVhdGVkX2J5Py5pc19kZWxldGVkID8gdCgnaG9tZU1lbnUuY3JlYXRlZEJ5VG9vbHRpcERlbGV0ZWQnKSA6IHQoJ2hvbWVNZW51LmNyZWF0ZWRCeVRvb2x0aXAnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0PlxuICAgICAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LmNyZWF0ZWRCeScpfXsnICd9XG4gICAgICAgICAgICAgICAgICA8U0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWU+e2FnZW50Py5jcmVhdGVkX2J5Py5uYW1lfTwvU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWU+XG4gICAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVDcmVhdGVkQnlUZXh0PlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICA8L1NDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lcj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lcj5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayAkbm9HYXA9eyFncmVldGluZ30+XG4gICAgICAgIDxTQ0NBSUhvbWVJY29uQ29udGFpbmVyPlxuICAgICAgICAgIDxTQ0NBSUhvbWVMb2dvV3JhcHBlcj5cbiAgICAgICAgICAgIDxNQUlBSXNvbG9nbyAvPlxuICAgICAgICAgIDwvU0NDQUlIb21lTG9nb1dyYXBwZXI+XG4gICAgICAgIDwvU0NDQUlIb21lSWNvbkNvbnRhaW5lcj5cbiAgICAgICAge2dyZWV0aW5nID8gPFNDQ0FJSG9tZUdyZWV0aW5nPntncmVldGluZ308L1NDQ0FJSG9tZUdyZWV0aW5nPiA6IG51bGx9XG4gICAgICA8L1NDQ0FJSG9tZU1haWFIZWFkZXJTdGFjaz5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSUhvbWVDb250YWluZXIgc2hvd0ZBUXM9e3Nob3dGQVFzfT5cbiAgICAgIHtob21lU2Nyb2xsYWJsZUxheW91dCAmJiA8U0NDQUlIb21lR3JhZGllbnRUb3AgJHNob3c9e3Nob3dUb3BHcmFkaWVudH0gLz59XG4gICAgICA8U0NDQUlIb21lQ29udGVudFxuICAgICAgICByZWY9e2NvbnRlbnRDb250YWluZXJSZWZ9XG4gICAgICAgIHNob3dGQVFzPXtob21lU2Nyb2xsYWJsZUxheW91dH1cbiAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAkZmxvYXRpbmdDdXN0b21DZW50ZXI9e2Zsb2F0aW5nQ3VzdG9tQ2VudGVyfVxuICAgICAgPlxuICAgICAgICA8U0NDQUlIb21lQ29udGVudElubmVyXG4gICAgICAgICAgc2hvd0ZBUXM9e2hvbWVTY3JvbGxhYmxlTGF5b3V0fVxuICAgICAgICAgICRpc0FnZW50Vmlldz17IWlzTUFJQX1cbiAgICAgICAgICAkZmxvYXRpbmdDdXN0b21DZW50ZXI9e2Zsb2F0aW5nQ3VzdG9tQ2VudGVyfVxuICAgICAgICA+XG4gICAgICAgICAgeyFoaWRlSGVhZGVySG9tZVN1Z2dlc3Rpb25zICYmIChcbiAgICAgICAgICAgIDxTQ0NBSUhvbWVIZWFkZXJcbiAgICAgICAgICAgICAgJGdhcD17aXNNQUlBICYmIHNlY3Rpb24gIT09ICdwcm9qZWN0JyA/ICc4cHgnIDogJzIwcHgnfVxuICAgICAgICAgICAgICAkbWF4V2lkdGg9e2lzTUFJQSA/ICcxMDAlJyA6ICczODBweCd9XG4gICAgICAgICAgICAgICRpc0FnZW50Vmlldz17IWlzTUFJQX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3JlbmRlckhlYWRlckNvbnRlbnQoKX1cblxuICAgICAgICAgICAgICB7c2VjdGlvbiAhPT0gJ3Byb2plY3QnICYmIChcbiAgICAgICAgICAgICAgICA8U0NDQUlIb21lSW50cm9kdWN0aW9uIGV4cGFuZGVkPXtleHBhbmRlZH0+eyFpc01BSUEgJiYgYWdlbnQ/LmludHJvZHVjdGlvbn08L1NDQ0FJSG9tZUludHJvZHVjdGlvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lSGVhZGVyPlxuICAgICAgICAgICl9XG4gICAgICAgICAge3Nob3dQcm9qZWN0U3VtbWFyeUNhcmQgJiYgKFxuICAgICAgICAgICAgPFNDQ0FIV3JhcHBlclN1bW1hcnlQcm9qZWN0IG9uQ2xpY2s9e2hhbmRsZXJzLnByb2plY3RTdW1tYXJ5fT5cbiAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5PlxuICAgICAgICAgICAgICAgIDxUZW1wbGF0ZUdyYWRpZW50SWNvbiBoZWlnaHQ9ezI0fSB3aWR0aD17MjR9IC8+XG4gICAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnk+XG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGU+e3QoJ2hvbWVNZW51LnByb2plY3RTdW1tYXJ5LnRpdGxlJyl9PC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeVRpdGxlPlxuICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeURlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LnByb2plY3RTdW1tYXJ5LmRlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeURlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICA8L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudD5cbiAgICAgICAgICAgIDwvU0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3Q+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7c2hvd0R5bmFtaWNTZWN0aW9uICYmIChcbiAgICAgICAgICAgIDxTQ0NBSUhvbWVEeW5hbWljU2VjdGlvbiAkZ3Jvdz17aXNNYWlha2VyfT5cbiAgICAgICAgICAgICAge3JlbmRlclJlY2VudENvbnRleHRzKCl9XG4gICAgICAgICAgICAgIHtzaG91bGRTaG93RmFxcyAmJiAoXG4gICAgICAgICAgICAgICAgPEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc1xuICAgICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fVxuICAgICAgICAgICAgICAgICAgc2hvd0ZBUXM9e3Nob3dGQVFzfVxuICAgICAgICAgICAgICAgICAgc2hvd1Byb2plY3RTdW1tYXJ5PXtzaG93UHJvamVjdFN1bW1hcnl9XG4gICAgICAgICAgICAgICAgICBhZ2VudElkPXthZ2VudD8uaWR9XG4gICAgICAgICAgICAgICAgICBsYW5nPXtsYW5nfVxuICAgICAgICAgICAgICAgICAgaXNTY3JvbGxpbmc9e2lzU2Nyb2xsaW5nfVxuICAgICAgICAgICAgICAgICAgZmFxcz17YWdlbnRGYXFzfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZmFxc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge3Nob3VsZFNob3dGdWFzICYmIChcbiAgICAgICAgICAgICAgICA8RnJlcXVlbnRseVVzZWRBY3Rpb25zXG4gICAgICAgICAgICAgICAgICBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBhZ2VudElkPXthZ2VudD8uaWR9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBhY3Rpb25zPXthZ2VudEZ1YXN9XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nPXtmdWFzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7aXNNYWlha2VyID8gPENoYXRBSUhvbWVNYWlha2VyIG9uU3RhcnRDaGF0PXtvblN0YXJ0Q2hhdH0gLz4gOiBudWxsfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVEeW5hbWljU2VjdGlvbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NDQ0FJSG9tZUNvbnRlbnRJbm5lcj5cbiAgICAgIDwvU0NDQUlIb21lQ29udGVudD5cbiAgICAgIHtob21lU2Nyb2xsYWJsZUxheW91dCAmJiA8U0NDQUlIb21lR3JhZGllbnRCb3R0b20gJHNob3c9e3Nob3dCb3R0b21HcmFkaWVudH0gLz59XG4gICAgPC9TQ0NBSUhvbWVDb250YWluZXI+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsT0FBTyxRQUFRLE9BQU87QUFFekUsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBSTFDLFNBQ0VDLGtCQUFrQixFQUNsQkMsZ0JBQWdCLEVBQ2hCQyxxQkFBcUIsRUFDckJDLG9CQUFvQixFQUNwQkMsdUJBQXVCLEVBQ3ZCQyxlQUFlLEVBQ2ZDLGlCQUFpQixFQUNqQkMsMkJBQTJCLEVBQzNCQyxrQkFBa0IsRUFDbEJDLHVCQUF1QixFQUN2QkMsOEJBQThCLEVBQzlCQyw0QkFBNEIsRUFDNUJDLGtDQUFrQyxFQUNsQ0MsMEJBQTBCLEVBQzFCQyxxQkFBcUIsRUFDckJDLDJCQUEyQixFQUMzQkMsc0JBQXNCLEVBQ3RCQywwQkFBMEIsRUFDMUJDLHNCQUFzQixFQUN0QkMsb0JBQW9CLEVBQ3BCQyx3QkFBd0IsRUFDeEJDLHVC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