@projectcor/maia-components 2.11.65-9 → 2.11.65

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 (50) hide show
  1. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +10 -16
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +11 -14
  3. package/lib/components/atoms/Chip/Chip.js +15 -49
  4. package/lib/components/atoms/Chip/styles.js +3 -7
  5. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +6 -38
  6. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +13 -21
  7. package/lib/components/atoms/MAIAInput/MAIAInput.js +42 -207
  8. package/lib/components/atoms/MAIAInput/styles.js +24 -64
  9. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +17 -165
  10. package/lib/components/molecules/ChatAIHome/styles.js +18 -39
  11. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +7 -13
  12. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +9 -15
  13. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +12 -13
  14. package/lib/components/molecules/ChatFooter/ChatFooter.js +21 -105
  15. package/lib/components/molecules/ChatFooter/styles.js +2 -11
  16. package/lib/components/molecules/Sidebar/Sidebar.js +5 -9
  17. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +2 -2
  18. package/lib/context/global-context.js +1 -8
  19. package/lib/dev/DevContextMentionInput.js +1 -3
  20. package/lib/hooks/index.js +1 -2
  21. package/lib/hooks/useChatManager/useChatManager.js +78 -274
  22. package/lib/hooks/useChatMessages/useChatMessages.js +1 -14
  23. package/lib/hooks/useEntitySearch.js +129 -74
  24. package/lib/hooks/useMentionAllowedTypes.js +1 -11
  25. package/lib/hooks/useMentionPopover.js +2 -3
  26. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  27. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +10 -22
  28. package/lib/hooks/useProjectSearch.js +28 -4
  29. package/lib/hooks/useProjectSummaryConfig.js +18 -103
  30. package/lib/hooks/useRecentClientsSearch.js +34 -4
  31. package/lib/lang/br/index.js +1 -23
  32. package/lib/lang/en/index.js +1 -23
  33. package/lib/lang/es/index.js +1 -23
  34. package/lib/lang/fr/index.js +1 -23
  35. package/lib/services/maia/Agents/getAgents.js +91 -68
  36. package/lib/services/maia/Chats/getChatMessages.js +3 -11
  37. package/lib/services/maia/Chats/getChatsByUserId.js +2 -10
  38. package/lib/services/maia/Orchestrator/orchestrator.js +9 -27
  39. package/lib/services/maia/index.js +2 -4
  40. package/lib/services/utils/mapChatMessages.js +8 -18
  41. package/lib/services/utils/validateIsMaia.js +2 -2
  42. package/lib/types/Chat.js +1 -1
  43. package/lib/types/agent.js +1 -1
  44. package/lib/utils/hitlAnalytics.js +3 -3
  45. package/package.json +1 -1
  46. package/lib/hooks/useContextPinPopover.js +0 -235
  47. package/lib/hooks/useRecentContexts.js +0 -84
  48. package/lib/services/maia/RecentContexts/getRecentContexts.js +0 -51
  49. package/lib/services/maia/RecentContexts/index.js +0 -6
  50. package/lib/types/Hitl.js +0 -2
@@ -1,47 +1,26 @@
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
7
  import { useT } from '../../../hooks/useT';
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';
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';
12
9
  import { useGlobalContext } from '../../../context/global-context';
13
- import { CORUserRole, useUser } from '../../../context/cor-user';
14
10
  import { validateIsMaia } from '../../../services/utils/validateIsMaia';
15
11
  import { FrequentlyAskedQuestions } from '../../atoms/FrequentlyAskedQuestions';
16
12
  import { FrequentlyUsedActions } from '../../atoms/FrequentlyUsedActions';
17
13
  import { useFrequentlyUsedActions } from '../../../hooks/useFrequentlyUsedActions';
18
14
  import { useFrequentlyAskedQuestions } from '../../../hooks/useFrequentlyAskedQuestions';
19
- import { useRecentContexts } from '../../../hooks/useRecentContexts';
20
15
  import { MAIAIsologo } from '../../atoms/icons/MAIAIsologo';
21
16
  import { TemplateGradientIcon } from '../../atoms/icons/TemplateGradientIcon';
22
17
  import { ChatAIHomeMaiaker } from './ChatAIHomeMaiaker';
23
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
18
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
24
19
  export var FrequentQuestions = /*#__PURE__*/function (FrequentQuestions) {
25
20
  FrequentQuestions["rentabilidad_proyecto"] = "rentabilidad_proyecto";
26
21
  FrequentQuestions["avance_proyecto"] = "avance_proyecto";
27
22
  return FrequentQuestions;
28
23
  }({});
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
- };
45
24
  export var ChatAIHome = function ChatAIHome(_ref) {
46
25
  var handlers = _ref.handlers,
47
26
  onStartChat = _ref.onStartChat,
@@ -50,44 +29,19 @@ export var ChatAIHome = function ChatAIHome(_ref) {
50
29
  var _useT = useT(),
51
30
  t = _useT.t,
52
31
  i18n = _useT.i18n;
53
- var user = useUser();
54
32
  var _useGlobalContext = useGlobalContext(),
55
33
  agent = _useGlobalContext.agent,
56
- section = _useGlobalContext.section,
57
- setClient = _useGlobalContext.setClient,
58
- setProject = _useGlobalContext.setProject,
59
- setTask = _useGlobalContext.setTask,
60
- setChipsProject = _useGlobalContext.setChipsProject;
34
+ section = _useGlobalContext.section;
61
35
  var isMAIA = validateIsMaia(agent);
62
36
  var floatingCustomCenter = !!(floating && (agent === null || agent === void 0 ? void 0 : agent.type) === 'custom');
63
37
  var lang = i18n.language === 'br' ? 'pt' : i18n.language;
64
38
  var summaryProjectAccess = typeof window !== 'undefined' && (String(window.MAIA_PROJECT_SUMMARY_FEATURE_ACCESS).toLowerCase() === 'true' || String(window.maiaProjectSummaryAccess).toLowerCase() === 'true');
65
39
  var faqsAccess = true;
66
40
  var showProjectSummary = !!(isMAIA && summaryProjectAccess);
67
- // El orchestrator (type === 'orchestrator') muestra FAQs/FUAs agregadas de sus subagentes,
68
- // así que NO se trata como maiaker acá. Maiaker = clone global legacy con nombre maiaker/marketplace.
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;
88
- // FUA y FAQ aplican a agentes clone y al orchestrator (los custom no las tienen habilitadas por ahora).
89
- // Maiaker (clone global legacy) queda excluido como antes.
90
- var homeListsAgentId = isMAIA && !isMaiaker && hasRecentContextActivity ? agent === null || agent === void 0 ? void 0 : agent.id : undefined;
41
+ var isMaiaker = (agent === null || agent === void 0 ? void 0 : agent.entity) === 'global' && /(maiaker|marketplace)/i.test((agent === null || agent === void 0 ? void 0 : agent.name) || '');
42
+ // FUA y FAQ solo aplican a agentes clone (los custom no las tienen habilitadas por ahora).
43
+ // Maiaker (clone global) queda excluido como antes.
44
+ var homeListsAgentId = isMAIA && !isMaiaker ? agent === null || agent === void 0 ? void 0 : agent.id : undefined;
91
45
  var _useFrequentlyUsedAct = useFrequentlyUsedActions(homeListsAgentId, section),
92
46
  agentFuas = _useFrequentlyUsedAct.actions,
93
47
  fuasLoading = _useFrequentlyUsedAct.loading;
@@ -97,7 +51,7 @@ export var ChatAIHome = function ChatAIHome(_ref) {
97
51
  handleGetFrequentlyAskedQuestions = _useFrequentlyAskedQu.handleGetFrequentlyAskedQuestions;
98
52
  var faqsFetchRef = useRef(null);
99
53
  useEffect(function () {
100
- if (!isMAIA || isMaiaker || section === 'task' || !(agent !== null && agent !== void 0 && agent.id) || !hasRecentContextActivity) return;
54
+ if (!isMAIA || isMaiaker || section === 'task' || !(agent !== null && agent !== void 0 && agent.id)) return;
101
55
  var currentKey = "".concat(agent.id, "-").concat(lang);
102
56
  var lastKey = faqsFetchRef.current ? "".concat(faqsFetchRef.current.agentId, "-").concat(faqsFetchRef.current.lang) : null;
103
57
  if (currentKey !== lastKey) {
@@ -110,15 +64,14 @@ export var ChatAIHome = function ChatAIHome(_ref) {
110
64
  lang: lang
111
65
  });
112
66
  }
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);
67
+ }, [isMaiaker, section, agent === null || agent === void 0 ? void 0 : agent.id, lang, handleGetFrequentlyAskedQuestions]);
68
+ var shouldShowFaqs = !isMaiaker && section !== 'task' && faqsAccess && (agentFaqs.length > 0 || faqsLoading);
69
+ var shouldShowFuas = !isMaiaker && (agentFuas.length > 0 || fuasLoading);
70
+ var hasAnyHomeListContent = !isMaiaker && section !== 'task' && faqsAccess && agentFaqs.length > 0 || !isMaiaker && agentFuas.length > 0;
117
71
  var showProjectSummaryCard = showProjectSummary && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'project';
118
- var hasRecentContextsContent = isHeaderHome && (recentContextsLoading || recentContexts.length > 0);
119
- var showFAQs = !!(hasRecentContextsContent || hasAnyHomeListContent || showProjectSummaryCard || isMaiaker);
72
+ var showFAQs = !!(hasAnyHomeListContent || showProjectSummaryCard || isMaiaker);
120
73
  var homeScrollableLayout = showFAQs;
121
- var showDynamicSection = hasRecentContextsContent || hasAnyHomeListContent || shouldShowFaqs || shouldShowFuas || isMaiaker;
74
+ var showDynamicSection = hasAnyHomeListContent || shouldShowFaqs || shouldShowFuas || isMaiaker;
122
75
 
123
76
  // Lógica del scroll con gradientes
124
77
  var contentContainerRef = useRef(null);
@@ -147,107 +100,6 @@ export var ChatAIHome = function ChatAIHome(_ref) {
147
100
  }
148
101
  return typeof intro === 'string' ? intro : '';
149
102
  }, [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
- };
251
103
  var checkScroll = useCallback(function () {
252
104
  var container = contentContainerRef.current;
253
105
  if (!container || !homeScrollableLayout) return;
@@ -330,7 +182,7 @@ export var ChatAIHome = function ChatAIHome(_ref) {
330
182
  showFAQs: homeScrollableLayout,
331
183
  $isAgentView: !isMAIA,
332
184
  $floatingCustomCenter: floatingCustomCenter,
333
- children: [!hideHeaderHomeSuggestions && /*#__PURE__*/_jsxs(SCCAIHomeHeader, {
185
+ children: [/*#__PURE__*/_jsxs(SCCAIHomeHeader, {
334
186
  $gap: isMAIA && section !== 'project' ? '8px' : '20px',
335
187
  $maxWidth: isMAIA ? '100%' : '380px',
336
188
  $isAgentView: !isMAIA,
@@ -354,7 +206,7 @@ export var ChatAIHome = function ChatAIHome(_ref) {
354
206
  })]
355
207
  }), showDynamicSection && /*#__PURE__*/_jsxs(SCCAIHomeDynamicSection, {
356
208
  $grow: isMaiaker,
357
- children: [renderRecentContexts(), shouldShowFaqs && /*#__PURE__*/_jsx(FrequentlyAskedQuestions, {
209
+ children: [shouldShowFaqs && /*#__PURE__*/_jsx(FrequentlyAskedQuestions, {
358
210
  onStartChat: onStartChat,
359
211
  showFAQs: showFAQs,
360
212
  showProjectSummary: showProjectSummary,
@@ -379,4 +231,4 @@ export var ChatAIHome = function ChatAIHome(_ref) {
379
231
  })]
380
232
  });
381
233
  };
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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
234
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIlRvb2x0aXAiLCJ1c2VUIiwiU0NDQUlIb21lQ29udGFpbmVyIiwiU0NDQUlIb21lQ29udGVudCIsIlNDQ0FJSG9tZUNvbnRlbnRJbm5lciIsIlNDQ0FJSG9tZUdyYWRpZW50VG9wIiwiU0NDQUlIb21lR3JhZGllbnRCb3R0b20iLCJTQ0NBSUhvbWVIZWFkZXIiLCJTQ0NBSUhvbWVHcmVldGluZyIsIlNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lciIsIlNDQ0FJSG9tZUFnZW50SW5mbyIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24iLCJTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCIsIlNDQ0FJSG9tZUludHJvZHVjdGlvbiIsIlNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lciIsIlNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQiLCJTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQ0FJSG9tZUljb25Db250YWluZXIiLCJTQ0NBSUhvbWVMb2dvV3JhcHBlciIsIlNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayIsIlNDQ0FJSG9tZUR5bmFtaWNTZWN0aW9uIiwidXNlR2xvYmFsQ29udGV4dCIsInZhbGlkYXRlSXNNYWlhIiwiRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwiRnJlcXVlbnRseVVzZWRBY3Rpb25zIiwidXNlRnJlcXVlbnRseVVzZWRBY3Rpb25zIiwidXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwiTUFJQUlzb2xvZ28iLCJUZW1wbGF0ZUdyYWRpZW50SWNvbiIsIkNoYXRBSUhvbWVNYWlha2VyIiwianN4cyIsIl9qc3hzIiwianN4IiwiX2pzeCIsIkZyZXF1ZW50UXVlc3Rpb25zIiwiQ2hhdEFJSG9tZSIsIl9yZWYiLCJoYW5kbGVycyIsIm9uU3RhcnRDaGF0IiwiZXhwYW5kZWQiLCJmbG9hdGluZyIsIl91c2VUIiwidCIsImkxOG4iLCJfdXNlR2xvYmFsQ29udGV4dCIsImFnZW50Iiwic2VjdGlvbiIsImlzTUFJQSIsImZsb2F0aW5nQ3VzdG9tQ2VudGVyIiwidHlwZSIsImxhbmciLCJsYW5ndWFnZSIsInN1bW1hcnlQcm9qZWN0QWNjZXNzIiwid2luZG93IiwiU3RyaW5nIiwiTUFJQV9QUk9KRUNUX1NVTU1BUllfRkVBVFVSRV9BQ0NFU1MiLCJ0b0xvd2VyQ2FzZSIsIm1haWFQcm9qZWN0U3VtbWFyeUFjY2VzcyIsImZhcXNBY2Nlc3MiLCJzaG93UHJvamVjdFN1bW1hcnkiLCJpc01haWFrZXIiLCJlbnRpdHkiLCJ0ZXN0IiwibmFtZSIsImhvbWVMaXN0c0FnZW50SWQiLCJpZCIsInVuZGVmaW5lZCIsIl91c2VGcmVxdWVudGx5VXNlZEFjdCIsImFnZW50RnVhcyIsImFjdGlvbnMiLCJmdWFzTG9hZGluZyIsImxvYWRpbmciLCJfdXNlRnJlcXVlbnRseUFza2VkUXUiLCJhZ2VudEZhcXMiLCJmYXFzIiwiZmFxc0xvYWRpbmciLCJoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJmYXFzRmV0Y2hSZWYiLCJjdXJyZW50S2V5IiwiY29uY2F0IiwibGFzdEtleSIsImN1cnJlbnQiLCJhZ2VudElkIiwic2hvdWxkU2hvd0ZhcXMiLCJsZW5ndGgiLCJzaG91bGRTaG93RnVhcyIsImhhc0FueUhvbWVMaXN0Q29udGVudCIsInNob3dQcm9qZWN0U3VtbWFyeUNhcmQiLCJzaG93RkFRcyIsImhvbWVTY3JvbGxhYmxlTGF5b3V0Iiwic2hvd0R5bmFtaWNTZWN0aW9uIiwiY29udGVudENvbnRhaW5lclJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNob3dUb3BHcmFkaWVudCIsInNldFNob3dUb3BHcmFkaWVudCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2hvd0JvdHRvbUdyYWRpZW50Iiwic2V0U2hvd0JvdHRvbUdyYWRpZW50IiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc1Njcm9sbGluZyIsInNldElzU2Nyb2xsaW5nIiwic2Nyb2xsVGltZW91dFJlZiIsImdyZWV0aW5nIiwiaW50cm8iLCJpbnRyb2R1Y3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJjaGVja1Njcm9sbCIsImNvbnRhaW5lciIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImlzU2Nyb2xsYWJsZSIsImlzQXRUb3AiLCJpc0F0Qm90dG9tIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJ0aW1lb3V0SWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVuZGVySGVhZGVyQ29udGVudCIsIl9hZ2VudCRjcmVhdGVkX2J5IiwiX2FnZW50JGNyZWF0ZWRfYnkyIiwiY2hpbGRyZW4iLCJlbW9qaSIsImNyZWF0ZWRfYnkiLCJ0aXRsZSIsImlzX2RlbGV0ZWQiLCIkbm9HYXAiLCIkc2hvdyIsInJlZiIsIiRpc0FnZW50VmlldyIsIiRmbG9hdGluZ0N1c3RvbUNlbnRlciIsIiRnYXAiLCIkbWF4V2lkdGgiLCJvbkNsaWNrIiwicHJvamVjdFN1bW1hcnkiLCJoZWlnaHQiLCJ3aWR0aCIsIiRncm93Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSUhvbWUvQ2hhdEFJSG9tZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcblxuaW1wb3J0IHsgb3B0aW9ucyB9IGZyb20gJy4uL0NoYXRBSU1vZGFsL2NvbnN0YW50cydcblxuaW1wb3J0IHtcbiAgU0NDQUlIb21lQ29udGFpbmVyLFxuICBTQ0NBSUhvbWVDb250ZW50LFxuICBTQ0NBSUhvbWVDb250ZW50SW5uZXIsXG4gIFNDQ0FJSG9tZUdyYWRpZW50VG9wLFxuICBTQ0NBSUhvbWVHcmFkaWVudEJvdHRvbSxcbiAgU0NDQUlIb21lSGVhZGVyLFxuICBTQ0NBSUhvbWVHcmVldGluZyxcbiAgU0NDQUlIb21lQWdlbnRJbmZvQ29udGFpbmVyLFxuICBTQ0NBSUhvbWVBZ2VudEluZm8sXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5LFxuICBTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQsXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGUsXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24sXG4gIFNDQ0FIV3JhcHBlclN1bW1hcnlQcm9qZWN0LFxuICBTQ0NBSUhvbWVJbnRyb2R1Y3Rpb24sXG4gIFNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lcixcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dCxcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWUsXG4gIFNDQ0FJSG9tZUljb25Db250YWluZXIsXG4gIFNDQ0FJSG9tZUxvZ29XcmFwcGVyLFxuICBTQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2ssXG4gIFNDQ0FJSG9tZUR5bmFtaWNTZWN0aW9uLFxufSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdmFsaWRhdGVJc01haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy92YWxpZGF0ZUlzTWFpYSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IEZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IE1BSUFJc29sb2dvIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvTUFJQUlzb2xvZ28nXG5pbXBvcnQgeyBUZW1wbGF0ZUdyYWRpZW50SWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL1RlbXBsYXRlR3JhZGllbnRJY29uJ1xuaW1wb3J0IHsgQ2hhdEFJSG9tZU1haWFrZXIgfSBmcm9tICcuL0NoYXRBSUhvbWVNYWlha2VyJ1xuXG50eXBlIENoYXRBSUhvbWVQcm9wcyA9IHtcbiAgb25TdGFydENoYXQ6IChcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdIHwgbnVsbCxcbiAgICBmYXFJZD86IHN0cmluZyxcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICBtZW50aW9ucz86IG51bGwsXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgKSA9PiB2b2lkXG4gIGhhbmRsZXJzOiBSZWNvcmQ8b3B0aW9ucywgKCkgPT4gdm9pZD5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG4gIGZsb2F0aW5nPzogYm9vbGVhblxufVxuXG5leHBvcnQgZW51bSBGcmVxdWVudFF1ZXN0aW9ucyB7XG4gIHJlbnRhYmlsaWRhZF9wcm95ZWN0byA9ICdyZW50YWJpbGlkYWRfcHJveWVjdG8nLFxuICBhdmFuY2VfcHJveWVjdG8gPSAnYXZhbmNlX3Byb3llY3RvJyxcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSUhvbWUgPSAoeyBoYW5kbGVycywgb25TdGFydENoYXQsIGV4cGFuZGVkLCBmbG9hdGluZyB9OiBDaGF0QUlIb21lUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0LCBpMThuIH0gPSB1c2VUKClcbiAgY29uc3QgeyBhZ2VudCwgc2VjdGlvbiB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG4gIGNvbnN0IGZsb2F0aW5nQ3VzdG9tQ2VudGVyID0gISEoZmxvYXRpbmcgJiYgYWdlbnQ/LnR5cGUgPT09ICdjdXN0b20nKVxuICBjb25zdCBsYW5nID0gaTE4bi5sYW5ndWFnZSA9PT0gJ2JyJyA/ICdwdCcgOiBpMThuLmxhbmd1YWdlXG5cbiAgY29uc3Qgc3VtbWFyeVByb2plY3RBY2Nlc3MgPVxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgKFN0cmluZyh3aW5kb3cuTUFJQV9QUk9KRUNUX1NVTU1BUllfRkVBVFVSRV9BQ0NFU1MpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgU3RyaW5nKHdpbmRvdy5tYWlhUHJvamVjdFN1bW1hcnlBY2Nlc3MpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJylcbiAgY29uc3QgZmFxc0FjY2VzcyA9IHRydWVcbiAgY29uc3Qgc2hvd1Byb2plY3RTdW1tYXJ5ID0gISEoaXNNQUlBICYmIHN1bW1hcnlQcm9qZWN0QWNjZXNzKVxuICBjb25zdCBpc01haWFrZXIgPSBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJyAmJiAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhZ2VudD8ubmFtZSB8fCAnJylcbiAgLy8gRlVBIHkgRkFRIHNvbG8gYXBsaWNhbiBhIGFnZW50ZXMgY2xvbmUgKGxvcyBjdXN0b20gbm8gbGFzIHRpZW5lbiBoYWJpbGl0YWRhcyBwb3IgYWhvcmEpLlxuICAvLyBNYWlha2VyIChjbG9uZSBnbG9iYWwpIHF1ZWRhIGV4Y2x1aWRvIGNvbW8gYW50ZXMuXG4gIGNvbnN0IGhvbWVMaXN0c0FnZW50SWQgPSBpc01BSUEgJiYgIWlzTWFpYWtlciA/IGFnZW50Py5pZCA6IHVuZGVmaW5lZFxuICBjb25zdCB7IGFjdGlvbnM6IGFnZW50RnVhcywgbG9hZGluZzogZnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhob21lTGlzdHNBZ2VudElkLCBzZWN0aW9uKVxuICBjb25zdCB7XG4gICAgZmFxczogYWdlbnRGYXFzLFxuICAgIGxvYWRpbmc6IGZhcXNMb2FkaW5nLFxuICAgIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyxcbiAgfSA9IHVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyhob21lTGlzdHNBZ2VudElkLCBsYW5nKVxuICBjb25zdCBmYXFzRmV0Y2hSZWYgPSB1c2VSZWY8eyBhZ2VudElkOiBzdHJpbmc7IGxhbmc6IHN0cmluZyB9IHwgbnVsbD4obnVsbClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzTUFJQSB8fCBpc01haWFrZXIgfHwgc2VjdGlvbiA9PT0gJ3Rhc2snIHx8ICFhZ2VudD8uaWQpIHJldHVyblxuICAgIGNvbnN0IGN1cnJlbnRLZXkgPSBgJHthZ2VudC5pZH0tJHtsYW5nfWBcbiAgICBjb25zdCBsYXN0S2V5ID0gZmFxc0ZldGNoUmVmLmN1cnJlbnQgPyBgJHtmYXFzRmV0Y2hSZWYuY3VycmVudC5hZ2VudElkfS0ke2ZhcXNGZXRjaFJlZi5jdXJyZW50Lmxhbmd9YCA6IG51bGxcbiAgICBpZiAoY3VycmVudEtleSAhPT0gbGFzdEtleSkge1xuICAgICAgZmFxc0ZldGNoUmVmLmN1cnJlbnQgPSB7IGFnZW50SWQ6IGFnZW50LmlkLCBsYW5nIH1cbiAgICAgIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyh7IGFnZW50SWQ6IGFnZW50LmlkLCBsYW5nIH0pXG4gICAgfVxuICB9LCBbaXNNYWlha2VyLCBzZWN0aW9uLCBhZ2VudD8uaWQsIGxhbmcsIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc10pXG5cbiAgY29uc3Qgc2hvdWxkU2hvd0ZhcXMgPSAhaXNNYWlha2VyICYmIHNlY3Rpb24gIT09ICd0YXNrJyAmJiBmYXFzQWNjZXNzICYmIChhZ2VudEZhcXMubGVuZ3RoID4gMCB8fCBmYXFzTG9hZGluZylcbiAgY29uc3Qgc2hvdWxkU2hvd0Z1YXMgPSAhaXNNYWlha2VyICYmIChhZ2VudEZ1YXMubGVuZ3RoID4gMCB8fCBmdWFzTG9hZGluZylcbiAgY29uc3QgaGFzQW55SG9tZUxpc3RDb250ZW50ID1cbiAgICAoIWlzTWFpYWtlciAmJiBzZWN0aW9uICE9PSAndGFzaycgJiYgZmFxc0FjY2VzcyAmJiBhZ2VudEZhcXMubGVuZ3RoID4gMCkgfHwgKCFpc01haWFrZXIgJiYgYWdlbnRGdWFzLmxlbmd0aCA+IDApXG5cbiAgY29uc3Qgc2hvd1Byb2plY3RTdW1tYXJ5Q2FyZCA9IHNob3dQcm9qZWN0U3VtbWFyeSAmJiBhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCdcbiAgY29uc3Qgc2hvd0ZBUXMgPSAhIShoYXNBbnlIb21lTGlzdENvbnRlbnQgfHwgc2hvd1Byb2plY3RTdW1tYXJ5Q2FyZCB8fCBpc01haWFrZXIpXG4gIGNvbnN0IGhvbWVTY3JvbGxhYmxlTGF5b3V0ID0gc2hvd0ZBUXNcbiAgY29uc3Qgc2hvd0R5bmFtaWNTZWN0aW9uID0gaGFzQW55SG9tZUxpc3RDb250ZW50IHx8IHNob3VsZFNob3dGYXFzIHx8IHNob3VsZFNob3dGdWFzIHx8IGlzTWFpYWtlclxuXG4gIC8vIEzDs2dpY2EgZGVsIHNjcm9sbCBjb24gZ3JhZGllbnRlc1xuICBjb25zdCBjb250ZW50Q29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzU2Nyb2xsaW5nLCBzZXRJc1Njcm9sbGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGltZW91dFJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpXG5cbiAgLy8gU2FsdWRvIGFsZWF0b3JpbyBkZXNkZSBhZ2VudC5pbnRyb2R1Y3Rpb24gKGFycmF5IGNvbiAzIHZhcmlhbnRlcyBkZWwgYmFjaykuIEVuIHRhc2ssIG1lbnNhamUgZmlqbyBpMThuLiBNYWlha2VyIHNpbiBpbnRybyBkZWwgYWdlbnRlLlxuICBjb25zdCBncmVldGluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc01haWFrZXIpIHJldHVybiAnJ1xuICAgIGlmIChzZWN0aW9uID09PSAndGFzaycpIHJldHVybiB0KCdob21lTWVudS50YXNrR3JlZXRpbmcnKVxuICAgIGNvbnN0IGludHJvID0gYWdlbnQ/LmludHJvZHVjdGlvblxuICAgIGlmICghaW50cm8pIHJldHVybiAnJ1xuICAgIGlmIChBcnJheS5pc0FycmF5KGludHJvKSAmJiBpbnRyby5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gaW50cm9bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogaW50cm8ubGVuZ3RoKV1cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBpbnRybyA9PT0gJ3N0cmluZycgPyBpbnRybyA6ICcnXG4gIH0sIFthZ2VudD8uaWQsIGFnZW50Py5pbnRyb2R1Y3Rpb24sIHNlY3Rpb24sIGlzTWFpYWtlciwgdF0pXG5cbiAgY29uc3QgY2hlY2tTY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGVudENvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWhvbWVTY3JvbGxhYmxlTGF5b3V0KSByZXR1cm5cblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG4gICAgY29uc3QgaXNTY3JvbGxhYmxlID0gc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0XG4gICAgY29uc3QgaXNBdFRvcCA9IHNjcm9sbFRvcCA9PT0gMFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBzY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0IC0gMVxuXG4gICAgc2V0U2hvd1RvcEdyYWRpZW50KGlzU2Nyb2xsYWJsZSAmJiAhaXNBdFRvcClcbiAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQoaXNTY3JvbGxhYmxlICYmICFpc0F0Qm90dG9tKVxuICAgIHNldElzU2Nyb2xsaW5nKHRydWUpXG5cbiAgICBpZiAoc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50KVxuICAgIH1cblxuICAgIHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0SXNTY3JvbGxpbmcoZmFsc2UpXG4gICAgfSwgMTUwKVxuICB9LCBbaG9tZVNjcm9sbGFibGVMYXlvdXRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFob21lU2Nyb2xsYWJsZUxheW91dCkge1xuICAgICAgc2V0U2hvd1RvcEdyYWRpZW50KGZhbHNlKVxuICAgICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KGZhbHNlKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRlbnRDb250YWluZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY2hlY2tTY3JvbGwoKVxuICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjaGVja1Njcm9sbClcblxuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoY2hlY2tTY3JvbGwsIDEwMClcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2hlY2tTY3JvbGwpXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgICAgaWYgKHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2hvbWVTY3JvbGxhYmxlTGF5b3V0LCBjaGVja1Njcm9sbF0pXG5cbiAgY29uc3QgcmVuZGVySGVhZGVyQ29udGVudCA9ICgpID0+IHtcbiAgICBpZiAoIWlzTUFJQSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lcj5cbiAgICAgICAgICA8U0NDQUlIb21lQWdlbnRJbmZvPlxuICAgICAgICAgICAge2FnZW50Py5lbW9qaX0ge2FnZW50Py5uYW1lfVxuICAgICAgICAgIDwvU0NDQUlIb21lQWdlbnRJbmZvPlxuICAgICAgICAgIHthZ2VudD8uY3JlYXRlZF9ieSAmJiAhaXNNQUlBICYmIChcbiAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlDb250YWluZXI+XG4gICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgYWdlbnQ/LmNyZWF0ZWRfYnk/LmlzX2RlbGV0ZWQgPyB0KCdob21lTWVudS5jcmVhdGVkQnlUb29sdGlwRGVsZXRlZCcpIDogdCgnaG9tZU1lbnUuY3JlYXRlZEJ5VG9vbHRpcCcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQ+XG4gICAgICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUuY3JlYXRlZEJ5Jyl9eycgJ31cbiAgICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZT57YWdlbnQ/LmNyZWF0ZWRfYnk/Lm5hbWV9PC9TQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZT5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJSG9tZUNyZWF0ZWRCeVRleHQ+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgIDwvU0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlIb21lQWdlbnRJbmZvQ29udGFpbmVyPlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U0NDQUlIb21lTWFpYUhlYWRlclN0YWNrICRub0dhcD17IWdyZWV0aW5nfT5cbiAgICAgICAgPFNDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICAgPFNDQ0FJSG9tZUxvZ29XcmFwcGVyPlxuICAgICAgICAgICAgPE1BSUFJc29sb2dvIC8+XG4gICAgICAgICAgPC9TQ0NBSUhvbWVMb2dvV3JhcHBlcj5cbiAgICAgICAgPC9TQ0NBSUhvbWVJY29uQ29udGFpbmVyPlxuICAgICAgICB7Z3JlZXRpbmcgPyA8U0NDQUlIb21lR3JlZXRpbmc+e2dyZWV0aW5nfTwvU0NDQUlIb21lR3JlZXRpbmc+IDogbnVsbH1cbiAgICAgIDwvU0NDQUlIb21lTWFpYUhlYWRlclN0YWNrPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDQ0FJSG9tZUNvbnRhaW5lciBzaG93RkFRcz17c2hvd0ZBUXN9PlxuICAgICAge2hvbWVTY3JvbGxhYmxlTGF5b3V0ICYmIDxTQ0NBSUhvbWVHcmFkaWVudFRvcCAkc2hvdz17c2hvd1RvcEdyYWRpZW50fSAvPn1cbiAgICAgIDxTQ0NBSUhvbWVDb250ZW50XG4gICAgICAgIHJlZj17Y29udGVudENvbnRhaW5lclJlZn1cbiAgICAgICAgc2hvd0ZBUXM9e2hvbWVTY3JvbGxhYmxlTGF5b3V0fVxuICAgICAgICAkaXNBZ2VudFZpZXc9eyFpc01BSUF9XG4gICAgICAgICRmbG9hdGluZ0N1c3RvbUNlbnRlcj17ZmxvYXRpbmdDdXN0b21DZW50ZXJ9XG4gICAgICA+XG4gICAgICAgIDxTQ0NBSUhvbWVDb250ZW50SW5uZXJcbiAgICAgICAgICBzaG93RkFRcz17aG9tZVNjcm9sbGFibGVMYXlvdXR9XG4gICAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAgICRmbG9hdGluZ0N1c3RvbUNlbnRlcj17ZmxvYXRpbmdDdXN0b21DZW50ZXJ9XG4gICAgICAgID5cbiAgICAgICAgICA8U0NDQUlIb21lSGVhZGVyXG4gICAgICAgICAgICAkZ2FwPXtpc01BSUEgJiYgc2VjdGlvbiAhPT0gJ3Byb2plY3QnID8gJzhweCcgOiAnMjBweCd9XG4gICAgICAgICAgICAkbWF4V2lkdGg9e2lzTUFJQSA/ICcxMDAlJyA6ICczODBweCd9XG4gICAgICAgICAgICAkaXNBZ2VudFZpZXc9eyFpc01BSUF9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3JlbmRlckhlYWRlckNvbnRlbnQoKX1cblxuICAgICAgICAgICAge3NlY3Rpb24gIT09ICdwcm9qZWN0JyAmJiAoXG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVJbnRyb2R1Y3Rpb24gZXhwYW5kZWQ9e2V4cGFuZGVkfT57IWlzTUFJQSAmJiBhZ2VudD8uaW50cm9kdWN0aW9ufTwvU0NDQUlIb21lSW50cm9kdWN0aW9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NDQ0FJSG9tZUhlYWRlcj5cbiAgICAgICAgICB7c2hvd1Byb2plY3RTdW1tYXJ5Q2FyZCAmJiAoXG4gICAgICAgICAgICA8U0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3Qgb25DbGljaz17aGFuZGxlcnMucHJvamVjdFN1bW1hcnl9PlxuICAgICAgICAgICAgICA8U0NDQUlIb21lUHJvamVjdFN1bW1hcnk+XG4gICAgICAgICAgICAgICAgPFRlbXBsYXRlR3JhZGllbnRJY29uIGhlaWdodD17MjR9IHdpZHRoPXsyNH0gLz5cbiAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeT5cbiAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudD5cbiAgICAgICAgICAgICAgICA8U0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZT57dCgnaG9tZU1lbnUucHJvamVjdFN1bW1hcnkudGl0bGUnKX08L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGU+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUucHJvamVjdFN1bW1hcnkuZGVzY3JpcHRpb24nKX1cbiAgICAgICAgICAgICAgICA8L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50PlxuICAgICAgICAgICAgPC9TQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtzaG93RHluYW1pY1NlY3Rpb24gJiYgKFxuICAgICAgICAgICAgPFNDQ0FJSG9tZUR5bmFtaWNTZWN0aW9uICRncm93PXtpc01haWFrZXJ9PlxuICAgICAgICAgICAgICB7c2hvdWxkU2hvd0ZhcXMgJiYgKFxuICAgICAgICAgICAgICAgIDxGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNcbiAgICAgICAgICAgICAgICAgIG9uU3RhcnRDaGF0PXtvblN0YXJ0Q2hhdH1cbiAgICAgICAgICAgICAgICAgIHNob3dGQVFzPXtzaG93RkFRc31cbiAgICAgICAgICAgICAgICAgIHNob3dQcm9qZWN0U3VtbWFyeT17c2hvd1Byb2plY3RTdW1tYXJ5fVxuICAgICAgICAgICAgICAgICAgYWdlbnRJZD17YWdlbnQ/LmlkfVxuICAgICAgICAgICAgICAgICAgbGFuZz17bGFuZ31cbiAgICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nPXtpc1Njcm9sbGluZ31cbiAgICAgICAgICAgICAgICAgIGZhcXM9e2FnZW50RmFxc31cbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2ZhcXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtzaG91bGRTaG93RnVhcyAmJiAoXG4gICAgICAgICAgICAgICAgPEZyZXF1ZW50bHlVc2VkQWN0aW9uc1xuICAgICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fVxuICAgICAgICAgICAgICAgICAgYWdlbnRJZD17YWdlbnQ/LmlkfVxuICAgICAgICAgICAgICAgICAgaXNTY3JvbGxpbmc9e2lzU2Nyb2xsaW5nfVxuICAgICAgICAgICAgICAgICAgYWN0aW9ucz17YWdlbnRGdWFzfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZnVhc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2lzTWFpYWtlciA/IDxDaGF0QUlIb21lTWFpYWtlciBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9IC8+IDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lRHluYW1pY1NlY3Rpb24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0NBSUhvbWVDb250ZW50SW5uZXI+XG4gICAgICA8L1NDQ0FJSG9tZUNvbnRlbnQ+XG4gICAgICB7aG9tZVNjcm9sbGFibGVMYXlvdXQgJiYgPFNDQ0FJSG9tZUdyYWRpZW50Qm90dG9tICRzaG93PXtzaG93Qm90dG9tR3JhZGllbnR9IC8+fVxuICAgIDwvU0NDQUlIb21lQ29udGFpbmVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sUUFBUSxPQUFPO0FBRXpFLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUkxQyxTQUNFQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixFQUNoQkMscUJBQXFCLEVBQ3JCQyxvQkFBb0IsRUFDcEJDLHVCQUF1QixFQUN2QkMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLDJCQUEyQixFQUMzQkMsa0JBQWtCLEVBQ2xCQyx1QkFBdUIsRUFDdkJDLDhCQUE4QixFQUM5QkMsNEJBQTRCLEVBQzVCQyxrQ0FBa0MsRUFDbENDLDBCQUEwQixFQUMxQkMscUJBQXFCLEVBQ3JCQywyQkFBMkIsRUFDM0JDLHNCQUFzQixFQUN0QkMsMEJBQTBCLEVBQzFCQyxzQkFBc0IsRUFDdEJDLG9CQUFvQixFQUNwQkMsd0JBQXdCLEVBQ3hCQyx1QkFBdUIsUUFDbEIsVUFBVTtBQUNqQixTQUFTQyxnQkFBZ0IsUUFBUSxpQ0FBaUM7QUFDbEUsU0FBU0MsY0FBYyxRQUFRLHdDQUF3QztBQUd2RSxTQUFTQyx3QkFBd0IsUUFBUSxzQ0FBc0M7QUFDL0UsU0FBU0MscUJBQXFCLFFBQVEsbUNBQW1DO0FBQ3pFLFNBQVNDLHdC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