@projectcor/maia-components 2.11.36-4 → 2.11.36-6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/App.js +24 -11
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +28 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +84 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +123 -0
- package/lib/components/atoms/ContextMentionChip/index.js +4 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +85 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +6 -0
- package/lib/components/atoms/ContextMentionEditor/index.js +2 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +188 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +98 -0
- package/lib/components/atoms/ContextMentionItem/index.js +2 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +131 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +63 -0
- package/lib/components/atoms/ContextMentionPopover/index.js +3 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +61 -191
- package/lib/components/atoms/icons/NotionIcon.js +36 -0
- package/lib/components/atoms/icons/RocketIcon.js +31 -0
- package/lib/components/atoms/icons/WrenchIcon.js +1 -1
- package/lib/components/atoms/icons/index.js +3 -1
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +2 -2
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.js +483 -0
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.styles.js +238 -0
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/catalog.js +437 -0
- package/lib/components/molecules/AbmSection/AbmActionsSectionV2/index.js +3 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +3 -3
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +2 -2
- package/lib/components/molecules/AbmSection/AbmSkillsSection.styles.js +80 -0
- package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.js +105 -44
- package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.styles.js +40 -19
- package/lib/components/molecules/AbmSection/index.js +2 -2
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -1
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +8 -4
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +3 -39
- package/lib/components/molecules/ChatAIHome/styles.js +1 -37
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +21 -2
- package/lib/components/molecules/ChatAIMessages/newStyles.js +2 -2
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +27 -96
- package/lib/components/molecules/ChatAIModal/constants.js +6 -2
- package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -4
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +55 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +6 -0
- package/lib/components/molecules/ContextMentionInput/index.js +2 -0
- package/lib/components/molecules/SchedulesPage/SchedulesPage.js +226 -233
- package/lib/components/molecules/Sidebar/Sidebar.js +28 -11
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +6 -2
- package/lib/components/molecules/SkillsPage/SkillsPage.js +708 -0
- package/lib/components/molecules/SkillsPage/index.js +2 -0
- package/lib/components/molecules/maiaSectionModalStyles.js +91 -0
- package/lib/components/molecules/maiaSectionUiTokens.js +31 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +183 -48
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +4 -4
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +5 -2
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +6 -3
- package/lib/constants/taskLinkIcon.js +6 -0
- package/lib/dev/DevAbmAgentModal.js +114 -0
- package/lib/dev/DevContextMentionInput.js +65 -0
- package/lib/dev/Providers.js +11 -6
- package/lib/dev/mocks/abmModalMocks.js +193 -0
- package/lib/hooks/useCaretPosition.js +35 -0
- package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
- package/lib/hooks/useChatManager/useChatManager.js +21 -11
- package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
- package/lib/hooks/useChatMessages/useChatMessages.js +30 -14
- package/lib/hooks/useContextMentions.js +204 -0
- package/lib/hooks/useEntitySearch.js +405 -0
- package/lib/hooks/useEvent.js +5 -1
- package/lib/hooks/useMentionAllowedTypes.js +86 -0
- package/lib/hooks/useMentionPopover.js +284 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -4
- package/lib/lang/br/index.js +139 -1
- package/lib/lang/en/index.js +139 -1
- package/lib/lang/es/index.js +139 -1
- package/lib/lang/fr/index.js +147 -9
- package/lib/services/maia/Agents/connectors.js +89 -0
- package/lib/services/maia/Agents/skills.js +164 -0
- package/lib/services/maia/Chats/getChatMessages.js +29 -4
- package/lib/services/maia/Orchestrator/orchestrator.js +7 -5
- package/lib/services/maia/RecentProjects/getRecentProjects.js +12 -4
- package/lib/services/maia/Schedules/getMySchedules.js +1 -1
- package/lib/services/maia/Schedules/index.js +1 -1
- package/lib/services/query/entitySearchQuery.js +16 -0
- package/lib/services/query/usersDirectoryQuery.js +19 -0
- package/lib/services/utils/mapChatMessages.js +12 -5
- package/lib/types/Chat.js +1 -1
- package/lib/types/agent.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/lib/types/agentSkill.js +2 -0
- package/lib/types/attachment.js +2 -0
- package/lib/types/contextMention.js +37 -0
- package/lib/utils/contextMentionIcons.js +115 -0
- package/lib/utils/contextMentionLabel.js +4 -0
- package/lib/utils/contextMentionTypeLabel.js +17 -0
- package/lib/utils/renderContextMentions.js +216 -0
- package/package.json +1 -1
- package/lib/components/molecules/AbmSection/AbmActionsSection.js +0 -136
- package/lib/components/molecules/AbmSection/AbmActionsSection.styles.js +0 -74
|
@@ -32,7 +32,7 @@ import { useUser } from '../../../context/cor-user';
|
|
|
32
32
|
import { AccessibilityIcon, BrainIcon } from '../../atoms/icons';
|
|
33
33
|
import { useAgentModel } from '../../../hooks/useAgentModel/useAgentModel';
|
|
34
34
|
import { useGetAgentById } from '../../../services/maia/Agents/getAgentById';
|
|
35
|
-
import {
|
|
35
|
+
import { AbmActionsSectionV2, AbmGeneralSection, AbmKnowledgeSection } from '../../molecules/AbmSection';
|
|
36
36
|
import { SCAAMContent, SCAAMFooter, SCAAMHeader, SCAAMHeaderTitle, SCAAMHeaderLeft, SCAAMHeaderFavorite, SCAAMHeaderCloseButton, SCAAMSidebar, SCAAMWrapper, SCAAMSidebarItem, SCAAMSidebarItemTitle, SCAAMDeleteButton, SCAAMSaveButton, SCAAMWrapperSpinner, SCAAMWrapperSpinnerContent, SCAAMSidebarItemError } from './AbmAgentModal.styles';
|
|
37
37
|
import { useCreateAgent } from '../../../hooks/useAgentModel/useCreateAgent';
|
|
38
38
|
import { useDeleteAgent } from '../../../hooks/useAgentModel/useDeleteAgent';
|
|
@@ -47,6 +47,7 @@ import { DeleteQuestionModal } from '../DeleteQuestionModal/DeleteQuestionModal'
|
|
|
47
47
|
import { useAccessClient } from '../../../hooks/useAccessClient/useAccessClient';
|
|
48
48
|
import { useToggleFavorite } from '../../../hooks';
|
|
49
49
|
import { createSchedule } from '../../../services/maia/Schedules';
|
|
50
|
+
import { getAgentConnectors, openConnectorAuthorizationWindows, saveAgentConnectors } from '../../../services/maia/Agents/connectors';
|
|
50
51
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
51
52
|
var initialValues = Object.freeze({
|
|
52
53
|
isEditing: false,
|
|
@@ -68,7 +69,8 @@ var initialValues = Object.freeze({
|
|
|
68
69
|
clients: null
|
|
69
70
|
},
|
|
70
71
|
actions: {
|
|
71
|
-
selectedToolGroups: []
|
|
72
|
+
selectedToolGroups: [],
|
|
73
|
+
selectedConnectors: []
|
|
72
74
|
}
|
|
73
75
|
});
|
|
74
76
|
export var SectionByKey = {
|
|
@@ -82,7 +84,7 @@ export var SectionByKey = {
|
|
|
82
84
|
return /*#__PURE__*/_jsx(AbmAccessibilitySection, _objectSpread({}, props));
|
|
83
85
|
},
|
|
84
86
|
actions: function actions(props) {
|
|
85
|
-
return /*#__PURE__*/_jsx(
|
|
87
|
+
return /*#__PURE__*/_jsx(AbmActionsSectionV2, _objectSpread({}, props));
|
|
86
88
|
}
|
|
87
89
|
};
|
|
88
90
|
var validateFieldValues = function validateFieldValues(valueToValidate) {
|
|
@@ -138,7 +140,8 @@ function buildEditingModalValuesFromAgentDetail(agentById, agentModels, prev) {
|
|
|
138
140
|
})) || null
|
|
139
141
|
},
|
|
140
142
|
actions: {
|
|
141
|
-
selectedToolGroups: agentById.toolGroupSlugs || []
|
|
143
|
+
selectedToolGroups: agentById.toolGroupSlugs || [],
|
|
144
|
+
selectedConnectors: []
|
|
142
145
|
}
|
|
143
146
|
});
|
|
144
147
|
}
|
|
@@ -165,6 +168,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
|
|
|
165
168
|
isSubscribed = _useState2[0],
|
|
166
169
|
setIsSubscribed = _useState2[1];
|
|
167
170
|
var modalRef = useRef(null);
|
|
171
|
+
var connectorAuthPopupRef = useRef(null);
|
|
168
172
|
var hasPendingFilesRef = useRef(false);
|
|
169
173
|
var actionsToFiles = useRef({
|
|
170
174
|
toDelete: [],
|
|
@@ -291,13 +295,46 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
|
|
|
291
295
|
return slug !== originalActions[index];
|
|
292
296
|
});
|
|
293
297
|
};
|
|
298
|
+
var hasConnectorChanges = function hasConnectorChanges() {
|
|
299
|
+
var _modalValues$actions2, _firstValueAgent$curr3;
|
|
300
|
+
var currentConnectors = _toConsumableArray(((_modalValues$actions2 = modalValues.actions) === null || _modalValues$actions2 === void 0 ? void 0 : _modalValues$actions2.selectedConnectors) || []).sort();
|
|
301
|
+
var originalConnectors = _toConsumableArray(((_firstValueAgent$curr3 = firstValueAgent.current) === null || _firstValueAgent$curr3 === void 0 || (_firstValueAgent$curr3 = _firstValueAgent$curr3.actions) === null || _firstValueAgent$curr3 === void 0 ? void 0 : _firstValueAgent$curr3.selectedConnectors) || []).sort();
|
|
302
|
+
if (currentConnectors.length !== originalConnectors.length) return true;
|
|
303
|
+
return currentConnectors.some(function (slug, index) {
|
|
304
|
+
return slug !== originalConnectors[index];
|
|
305
|
+
});
|
|
306
|
+
};
|
|
307
|
+
var persistAgentConnectors = useCallback(/*#__PURE__*/function () {
|
|
308
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(agentId, connectorSlugs, popupWindow) {
|
|
309
|
+
var response, pendingAuthorizations;
|
|
310
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
311
|
+
while (1) switch (_context.prev = _context.next) {
|
|
312
|
+
case 0:
|
|
313
|
+
_context.next = 1;
|
|
314
|
+
return saveAgentConnectors(agentId, connectorSlugs);
|
|
315
|
+
case 1:
|
|
316
|
+
response = _context.sent;
|
|
317
|
+
pendingAuthorizations = response.requires_auth || [];
|
|
318
|
+
openConnectorAuthorizationWindows(pendingAuthorizations, popupWindow);
|
|
319
|
+
connectorAuthPopupRef.current = null;
|
|
320
|
+
return _context.abrupt("return", response);
|
|
321
|
+
case 2:
|
|
322
|
+
case "end":
|
|
323
|
+
return _context.stop();
|
|
324
|
+
}
|
|
325
|
+
}, _callee);
|
|
326
|
+
}));
|
|
327
|
+
return function (_x, _x2, _x3) {
|
|
328
|
+
return _ref2.apply(this, arguments);
|
|
329
|
+
};
|
|
330
|
+
}(), []);
|
|
294
331
|
var validateAgentValuesIsSame = function validateAgentValuesIsSame() {
|
|
295
|
-
var _firstValueAgent$
|
|
296
|
-
if (!((_firstValueAgent$
|
|
297
|
-
return modalValues.general.name === firstValueAgent.current.general.name && modalValues.general.emoji === firstValueAgent.current.general.emoji && modalValues.general.introduction === firstValueAgent.current.general.introduction && modalValues.general.inputPlaceholder === firstValueAgent.current.general.inputPlaceholder && ((_modalValues$general$ = modalValues.general.aiModel) === null || _modalValues$general$ === void 0 ? void 0 : _modalValues$general$.id) === ((_firstValueAgent$
|
|
332
|
+
var _firstValueAgent$curr4, _modalValues$general$, _firstValueAgent$curr5, _modalValues$knowledg, _firstValueAgent$curr6, _modalValues$knowledg2, _firstValueAgent$curr7, _actionsToFiles$curre, _actionsToFiles$curre2;
|
|
333
|
+
if (!((_firstValueAgent$curr4 = firstValueAgent.current) !== null && _firstValueAgent$curr4 !== void 0 && _firstValueAgent$curr4.general) || !(modalValues !== null && modalValues !== void 0 && modalValues.general)) return false;
|
|
334
|
+
return modalValues.general.name === firstValueAgent.current.general.name && modalValues.general.emoji === firstValueAgent.current.general.emoji && modalValues.general.introduction === firstValueAgent.current.general.introduction && modalValues.general.inputPlaceholder === firstValueAgent.current.general.inputPlaceholder && ((_modalValues$general$ = modalValues.general.aiModel) === null || _modalValues$general$ === void 0 ? void 0 : _modalValues$general$.id) === ((_firstValueAgent$curr5 = firstValueAgent.current.general.aiModel) === null || _firstValueAgent$curr5 === void 0 ? void 0 : _firstValueAgent$curr5.id) && modalValues.general.userPrompt === firstValueAgent.current.general.userPrompt && !hasActionsChanged() && !hasConnectorChanges() && (((_modalValues$knowledg = modalValues.knowledge) === null || _modalValues$knowledg === void 0 ? void 0 : _modalValues$knowledg.length) === ((_firstValueAgent$curr6 = firstValueAgent.current) === null || _firstValueAgent$curr6 === void 0 || (_firstValueAgent$curr6 = _firstValueAgent$curr6.knowledge) === null || _firstValueAgent$curr6 === void 0 ? void 0 : _firstValueAgent$curr6.length) || !((_modalValues$knowledg2 = modalValues.knowledge) !== null && _modalValues$knowledg2 !== void 0 && _modalValues$knowledg2.length) && !((_firstValueAgent$curr7 = firstValueAgent.current) !== null && _firstValueAgent$curr7 !== void 0 && (_firstValueAgent$curr7 = _firstValueAgent$curr7.knowledge) !== null && _firstValueAgent$curr7 !== void 0 && _firstValueAgent$curr7.length)) && !((_actionsToFiles$curre = actionsToFiles.current.toUpdate) !== null && _actionsToFiles$curre !== void 0 && _actionsToFiles$curre.length) && !((_actionsToFiles$curre2 = actionsToFiles.current.toDelete) !== null && _actionsToFiles$curre2 !== void 0 && _actionsToFiles$curre2.length) && !hasAccessibilityChanged();
|
|
298
335
|
};
|
|
299
336
|
var hasAnyValueForCreation = function hasAnyValueForCreation() {
|
|
300
|
-
var _modalValues$general$2, _agentModels$, _modalValues$general$3, _modalValues$
|
|
337
|
+
var _modalValues$general$2, _agentModels$, _modalValues$general$3, _modalValues$actions3, _modalValues$actions4;
|
|
301
338
|
if (modalValues.isEditing) return false;
|
|
302
339
|
var isDefaultAiModel = !!agentModels.length && ((_modalValues$general$2 = modalValues.general.aiModel) === null || _modalValues$general$2 === void 0 ? void 0 : _modalValues$general$2.id) === ((_agentModels$ = agentModels[0]) === null || _agentModels$ === void 0 ? void 0 : _agentModels$.id);
|
|
303
340
|
var defaultInputPlaceholder = t('generalSection.inputPlaceholder');
|
|
@@ -312,8 +349,9 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
|
|
|
312
349
|
var hasKnowledge = !!modalValues.knowledge.length;
|
|
313
350
|
var hasCustomAiModel = modalValues.general.aiModel && !isDefaultAiModel;
|
|
314
351
|
var hasAccessibility = modalValues.accessibility.accessType !== 'company';
|
|
315
|
-
var hasActions = !!((_modalValues$
|
|
316
|
-
|
|
352
|
+
var hasActions = !!((_modalValues$actions3 = modalValues.actions) !== null && _modalValues$actions3 !== void 0 && (_modalValues$actions3 = _modalValues$actions3.selectedToolGroups) !== null && _modalValues$actions3 !== void 0 && _modalValues$actions3.length);
|
|
353
|
+
var hasConnectors = !!((_modalValues$actions4 = modalValues.actions) !== null && _modalValues$actions4 !== void 0 && (_modalValues$actions4 = _modalValues$actions4.selectedConnectors) !== null && _modalValues$actions4 !== void 0 && _modalValues$actions4.length);
|
|
354
|
+
return hasName || hasEmoji || hasIntroduction || hasInputPlaceholder || hasUserPrompt || hasKnowledge || hasCustomAiModel || hasAccessibility || hasActions || hasConnectors;
|
|
317
355
|
};
|
|
318
356
|
var hasChangesForEditing = function hasChangesForEditing() {
|
|
319
357
|
if (!modalValues.isEditing) return false;
|
|
@@ -370,6 +408,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
|
|
|
370
408
|
setSection('general');
|
|
371
409
|
setIsOpen(false);
|
|
372
410
|
agentCreatedRef.current = null;
|
|
411
|
+
connectorAuthPopupRef.current = null;
|
|
373
412
|
pendingInitialSectionRef.current = null;
|
|
374
413
|
pendingTriggerRef.current = null;
|
|
375
414
|
prefetchedAgentByIdRef.current = null;
|
|
@@ -385,10 +424,10 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
|
|
|
385
424
|
});
|
|
386
425
|
setSection(newSection);
|
|
387
426
|
};
|
|
388
|
-
var handleSetAgentValuesByKeys = function handleSetAgentValuesByKeys(
|
|
389
|
-
var key =
|
|
390
|
-
value =
|
|
391
|
-
deleteKnowledge =
|
|
427
|
+
var handleSetAgentValuesByKeys = function handleSetAgentValuesByKeys(_ref3) {
|
|
428
|
+
var key = _ref3.key,
|
|
429
|
+
value = _ref3.value,
|
|
430
|
+
deleteKnowledge = _ref3.deleteKnowledge;
|
|
392
431
|
if (key === 'knowledge') {
|
|
393
432
|
var nextKnowledge = value || [];
|
|
394
433
|
if (!deleteKnowledge) {
|
|
@@ -426,54 +465,99 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
|
|
|
426
465
|
});
|
|
427
466
|
};
|
|
428
467
|
var _handleConfirmAction = /*#__PURE__*/function () {
|
|
429
|
-
var
|
|
430
|
-
|
|
431
|
-
|
|
468
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(chat, action) {
|
|
469
|
+
var _modalValues$actions5;
|
|
470
|
+
var connectorChanges, _modalValues$actions6, _firstValueAgent$curr8, _modalValues$actions7, _t;
|
|
471
|
+
return _regeneratorRuntime.wrap(function (_context2) {
|
|
472
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
432
473
|
case 0:
|
|
433
474
|
if (window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
|
|
434
|
-
|
|
475
|
+
_context2.next = 1;
|
|
435
476
|
break;
|
|
436
477
|
}
|
|
437
|
-
return
|
|
478
|
+
return _context2.abrupt("return");
|
|
438
479
|
case 1:
|
|
439
480
|
if (!(action === 'delete')) {
|
|
440
|
-
|
|
481
|
+
_context2.next = 2;
|
|
441
482
|
break;
|
|
442
483
|
}
|
|
443
484
|
eventAmplitude(EVENTS["delete"]);
|
|
444
485
|
handleDeleteAgent(chat.id);
|
|
445
|
-
return
|
|
486
|
+
return _context2.abrupt("return");
|
|
446
487
|
case 2:
|
|
447
488
|
eventAmplitude(EVENTS.confirmAction, {
|
|
448
489
|
option: modalValues.isEditing ? 'edite' : 'create'
|
|
449
490
|
});
|
|
491
|
+
if ((_modalValues$actions5 = modalValues.actions) !== null && _modalValues$actions5 !== void 0 && (_modalValues$actions5 = _modalValues$actions5.selectedConnectors) !== null && _modalValues$actions5 !== void 0 && _modalValues$actions5.length) {
|
|
492
|
+
connectorAuthPopupRef.current = window.open('', '_blank', 'popup=yes,width=560,height=760');
|
|
493
|
+
}
|
|
450
494
|
// Al reintentar guardar, liberar el freno del timeout previo para que los
|
|
451
495
|
// useEffect de post-guardado vuelvan a poder disparar snackbars y cerrar.
|
|
452
496
|
processFilesTimedOutRef.current = false;
|
|
453
497
|
if (!modalValues.isEditing) {
|
|
454
|
-
|
|
498
|
+
_context2.next = 11;
|
|
455
499
|
break;
|
|
456
500
|
}
|
|
501
|
+
connectorChanges = hasConnectorChanges();
|
|
502
|
+
if (!(modalValues.general.id && connectorChanges)) {
|
|
503
|
+
_context2.next = 7;
|
|
504
|
+
break;
|
|
505
|
+
}
|
|
506
|
+
_context2.prev = 3;
|
|
507
|
+
_context2.next = 4;
|
|
508
|
+
return persistAgentConnectors(modalValues.general.id.toString(), ((_modalValues$actions6 = modalValues.actions) === null || _modalValues$actions6 === void 0 ? void 0 : _modalValues$actions6.selectedConnectors) || [], connectorAuthPopupRef.current);
|
|
509
|
+
case 4:
|
|
510
|
+
firstValueAgent.current = _objectSpread(_objectSpread({}, firstValueAgent.current), {}, {
|
|
511
|
+
actions: _objectSpread(_objectSpread({}, (_firstValueAgent$curr8 = firstValueAgent.current) === null || _firstValueAgent$curr8 === void 0 ? void 0 : _firstValueAgent$curr8.actions), {}, {
|
|
512
|
+
selectedConnectors: _toConsumableArray(((_modalValues$actions7 = modalValues.actions) === null || _modalValues$actions7 === void 0 ? void 0 : _modalValues$actions7.selectedConnectors) || [])
|
|
513
|
+
})
|
|
514
|
+
});
|
|
515
|
+
_context2.next = 6;
|
|
516
|
+
break;
|
|
517
|
+
case 5:
|
|
518
|
+
_context2.prev = 5;
|
|
519
|
+
_t = _context2["catch"](3);
|
|
520
|
+
handleSnackbarError(t('errorAgentCreated'));
|
|
521
|
+
if (connectorAuthPopupRef.current && !connectorAuthPopupRef.current.closed) {
|
|
522
|
+
connectorAuthPopupRef.current.close();
|
|
523
|
+
}
|
|
524
|
+
connectorAuthPopupRef.current = null;
|
|
525
|
+
return _context2.abrupt("return");
|
|
526
|
+
case 6:
|
|
527
|
+
_context2.next = 8;
|
|
528
|
+
break;
|
|
529
|
+
case 7:
|
|
530
|
+
if (connectorAuthPopupRef.current && !connectorAuthPopupRef.current.closed) {
|
|
531
|
+
connectorAuthPopupRef.current.close();
|
|
532
|
+
connectorAuthPopupRef.current = null;
|
|
533
|
+
}
|
|
534
|
+
case 8:
|
|
457
535
|
if (validateAgentValuesIsSame()) {
|
|
458
|
-
|
|
536
|
+
_context2.next = 10;
|
|
459
537
|
break;
|
|
460
538
|
}
|
|
461
|
-
|
|
539
|
+
_context2.next = 9;
|
|
462
540
|
return handleUpdateAgent(modalValues);
|
|
463
|
-
case
|
|
464
|
-
|
|
541
|
+
case 9:
|
|
542
|
+
return _context2.abrupt("return");
|
|
543
|
+
case 10:
|
|
544
|
+
if (connectorChanges) {
|
|
545
|
+
handleSnackbarSuccess(t('confirmAgentUpdated'));
|
|
546
|
+
handleClose();
|
|
547
|
+
}
|
|
548
|
+
_context2.next = 12;
|
|
465
549
|
break;
|
|
466
|
-
case
|
|
467
|
-
|
|
550
|
+
case 11:
|
|
551
|
+
_context2.next = 12;
|
|
468
552
|
return handleCreateAgent(modalValues);
|
|
469
|
-
case
|
|
553
|
+
case 12:
|
|
470
554
|
case "end":
|
|
471
|
-
return
|
|
555
|
+
return _context2.stop();
|
|
472
556
|
}
|
|
473
|
-
},
|
|
557
|
+
}, _callee2, null, [[3, 5]]);
|
|
474
558
|
}));
|
|
475
|
-
return function handleConfirmAction(
|
|
476
|
-
return
|
|
559
|
+
return function handleConfirmAction(_x4, _x5) {
|
|
560
|
+
return _ref4.apply(this, arguments);
|
|
477
561
|
};
|
|
478
562
|
}();
|
|
479
563
|
useEffect(function () {
|
|
@@ -481,7 +565,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
|
|
|
481
565
|
var _agentValues$values, _agentValues$values3;
|
|
482
566
|
var agentValues = event.detail.agentValues;
|
|
483
567
|
var initialSection = agentValues === null || agentValues === void 0 ? void 0 : agentValues.initialSection;
|
|
484
|
-
pendingInitialSectionRef.current = initialSection && ['general', 'knowledge', 'accessibility'].includes(initialSection) ? initialSection : null;
|
|
568
|
+
pendingInitialSectionRef.current = initialSection && ['general', 'knowledge', 'accessibility', 'actions'].includes(initialSection) ? initialSection : null;
|
|
485
569
|
getAllAgentModels();
|
|
486
570
|
setIsOpen(true);
|
|
487
571
|
setIsLoading(true);
|
|
@@ -581,7 +665,21 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
|
|
|
581
665
|
useEffect(function () {
|
|
582
666
|
// Evitar ejecución múltiple del efecto
|
|
583
667
|
if (successCreate && !isLoadingCreate && agentCreatedRef.current !== successCreate.id) {
|
|
668
|
+
var _modalValues$actions8;
|
|
584
669
|
agentCreatedRef.current = successCreate.id;
|
|
670
|
+
if ((_modalValues$actions8 = modalValues.actions) !== null && _modalValues$actions8 !== void 0 && (_modalValues$actions8 = _modalValues$actions8.selectedConnectors) !== null && _modalValues$actions8 !== void 0 && _modalValues$actions8.length) {
|
|
671
|
+
persistAgentConnectors(successCreate.id.toString(), modalValues.actions.selectedConnectors, connectorAuthPopupRef.current)["catch"](function (error) {
|
|
672
|
+
console.error('Error saving agent connectors after create:', error);
|
|
673
|
+
handleSnackbarError(t('errorAgentCreated'));
|
|
674
|
+
if (connectorAuthPopupRef.current && !connectorAuthPopupRef.current.closed) {
|
|
675
|
+
connectorAuthPopupRef.current.close();
|
|
676
|
+
}
|
|
677
|
+
connectorAuthPopupRef.current = null;
|
|
678
|
+
});
|
|
679
|
+
} else if (connectorAuthPopupRef.current && !connectorAuthPopupRef.current.closed) {
|
|
680
|
+
connectorAuthPopupRef.current.close();
|
|
681
|
+
connectorAuthPopupRef.current = null;
|
|
682
|
+
}
|
|
585
683
|
if (pendingTriggerRef.current) {
|
|
586
684
|
createSchedule(_objectSpread(_objectSpread({}, pendingTriggerRef.current), {}, {
|
|
587
685
|
agent_external_id: successCreate.id.toString()
|
|
@@ -947,8 +1045,8 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
|
|
|
947
1045
|
resetSuccessUpdateAccess();
|
|
948
1046
|
handleClose();
|
|
949
1047
|
}, [isShowProcessFiles, modalValues.isEditing, successUpdate, successCreate, updateAgent, currentSelectedAgent === null || currentSelectedAgent === void 0 ? void 0 : currentSelectedAgent.id, selectAgent, handleSnackbarSuccess, t, resetSuccessUpdate, resetSuccessCreate, handleResetSuccessSave, handleResetSuccessDelete, resetSuccessUpdateAccess, handleClose]);
|
|
950
|
-
var webSocketFunction = function webSocketFunction(
|
|
951
|
-
var modelData =
|
|
1048
|
+
var webSocketFunction = function webSocketFunction(_ref5) {
|
|
1049
|
+
var modelData = _ref5.model_data;
|
|
952
1050
|
var fileStatus = modelData;
|
|
953
1051
|
if (fileStatus.status === 'done' || fileStatus.status === 'failed') {
|
|
954
1052
|
setModalValues(function (prev) {
|
|
@@ -1180,16 +1278,51 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
|
|
|
1180
1278
|
}, 3000);
|
|
1181
1279
|
return false;
|
|
1182
1280
|
}
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
return
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1281
|
+
;
|
|
1282
|
+
_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
1283
|
+
var selectedConnectors, connectors, _t2;
|
|
1284
|
+
return _regeneratorRuntime.wrap(function (_context3) {
|
|
1285
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
1286
|
+
case 0:
|
|
1287
|
+
selectedConnectors = [];
|
|
1288
|
+
_context3.prev = 1;
|
|
1289
|
+
_context3.next = 2;
|
|
1290
|
+
return getAgentConnectors(source.id.toString());
|
|
1291
|
+
case 2:
|
|
1292
|
+
connectors = _context3.sent;
|
|
1293
|
+
selectedConnectors = connectors.filter(function (connector) {
|
|
1294
|
+
return connector.enabled_for_agent;
|
|
1295
|
+
}).map(function (connector) {
|
|
1296
|
+
return connector.slug;
|
|
1297
|
+
});
|
|
1298
|
+
_context3.next = 4;
|
|
1299
|
+
break;
|
|
1300
|
+
case 3:
|
|
1301
|
+
_context3.prev = 3;
|
|
1302
|
+
_t2 = _context3["catch"](1);
|
|
1303
|
+
console.error('Error fetching agent connectors:', _t2);
|
|
1304
|
+
case 4:
|
|
1305
|
+
setModalValues(function (prev) {
|
|
1306
|
+
var agentValuesToSet = buildEditingModalValuesFromAgentDetail(source, agentModels, prev);
|
|
1307
|
+
var nextValues = _objectSpread(_objectSpread({}, agentValuesToSet), {}, {
|
|
1308
|
+
actions: _objectSpread(_objectSpread({}, agentValuesToSet.actions), {}, {
|
|
1309
|
+
selectedConnectors: selectedConnectors
|
|
1310
|
+
})
|
|
1311
|
+
});
|
|
1312
|
+
firstValueAgent.current = nextValues;
|
|
1313
|
+
return nextValues;
|
|
1314
|
+
});
|
|
1315
|
+
setIsLoading(false);
|
|
1316
|
+
if (pendingInitialSectionRef.current) {
|
|
1317
|
+
setSection(pendingInitialSectionRef.current);
|
|
1318
|
+
pendingInitialSectionRef.current = null;
|
|
1319
|
+
}
|
|
1320
|
+
case 5:
|
|
1321
|
+
case "end":
|
|
1322
|
+
return _context3.stop();
|
|
1323
|
+
}
|
|
1324
|
+
}, _callee3, null, [[1, 3]]);
|
|
1325
|
+
}))();
|
|
1193
1326
|
return true;
|
|
1194
1327
|
};
|
|
1195
1328
|
var prefetched = prefetchedAgentByIdRef.current;
|
|
@@ -1211,7 +1344,9 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
|
|
|
1211
1344
|
});
|
|
1212
1345
|
});
|
|
1213
1346
|
}
|
|
1214
|
-
|
|
1347
|
+
// No incluir `isLoading` en deps: al terminar getAgentConnectors se hace setIsLoading(false) y
|
|
1348
|
+
// se re-ejecutaría el efecto con el mismo agentById, duplicando la query de connectors.
|
|
1349
|
+
}, [agentById, isOpen, agentLoading, agentModels === null || agentModels === void 0 ? void 0 : agentModels.length, modalValues.isEditing, t]);
|
|
1215
1350
|
useEffect(function () {
|
|
1216
1351
|
if (errorGetAgentById) {
|
|
1217
1352
|
if (errorGetAgentById === "Access denied: You don't have permission to access this agent") {
|
|
@@ -1454,4 +1589,4 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
|
|
|
1454
1589
|
})]
|
|
1455
1590
|
}), selector);
|
|
1456
1591
|
};
|
|
1457
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VDYWxsYmFjayIsImNyZWF0ZVBvcnRhbCIsInVzZVRyYW5zbGF0aW9uIiwiQ1VCdXR0b24iLCJDYXRlZ29yeSIsIkFsZXJ0IiwiVHJhc2giLCJTdGFyIiwiQ3Jvc3MiLCJTcGlubmVyTG90dGllIiwiVG9vbHRpcCIsIkFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIiwiQmFja2Ryb3AiLCJ1c2VVc2VyIiwiQWNjZXNzaWJpbGl0eUljb24iLCJCcmFpbkljb24iLCJ1c2VBZ2VudE1vZGVsIiwidXNlR2V0QWdlbnRCeUlkIiwiQWJtQWN0aW9uc1NlY3Rpb24iLCJBYm1HZW5lcmFsU2VjdGlvbiIsIkFibUtub3dsZWRnZVNlY3Rpb24iLCJTQ0FBTUNvbnRlbnQiLCJTQ0FBTUZvb3RlciIsIlNDQUFNSGVhZGVyIiwiU0NBQU1IZWFkZXJUaXRsZSIsIlNDQUFNSGVhZGVyTGVmdCIsIlNDQUFNSGVhZGVyRmF2b3JpdGUiLCJTQ0FBTUhlYWRlckNsb3NlQnV0dG9uIiwiU0NBQU1TaWRlYmFyIiwiU0NBQU1XcmFwcGVyIiwiU0NBQU1TaWRlYmFySXRlbSIsIlNDQUFNU2lkZWJhckl0ZW1UaXRsZSIsIlNDQUFNRGVsZXRlQnV0dG9uIiwiU0NBQU1TYXZlQnV0dG9uIiwiU0NBQU1XcmFwcGVyU3Bpbm5lciIsIlNDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50IiwiU0NBQU1TaWRlYmFySXRlbUVycm9yIiwidXNlQ3JlYXRlQWdlbnQiLCJ1c2VEZWxldGVBZ2VudCIsInVzZVNuYWNrQmFyTWFuYWdlciIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VVcGRhdGVBZ2VudCIsInVzZUtub3dsZWRnZU9wZXJhdGlvbnMiLCJBYm1Mb2FkZXJGaWxlcyIsIldyYXBwZXJDZW50ZXJJY29uIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJEZWxldGVRdWVzdGlvbk1vZGFsIiwidXNlQWNjZXNzQ2xpZW50IiwidXNlVG9nZ2xlRmF2b3JpdGUiLCJjcmVhdGVTY2hlZHVsZSIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImluaXRpYWxWYWx1ZXMiLCJPYmplY3QiLCJmcmVlemUiLCJpc0VkaXRpbmciLCJrbm93bGVkZ2UiLCJnZW5lcmFsIiwibmFtZSIsImVtb2ppIiwiaW50cm9kdWN0aW9uIiwiaW5wdXRQbGFjZWhvbGRlciIsImlzQWN0aXZlIiwiYWlNb2RlbCIsImlkIiwidXNlclByb21wdCIsImtub3dsZWRnZUJhc2VzIiwiaXNfZmF2b3JpdGUiLCJhY2Nlc3NpYmlsaXR5IiwiYWNjZXNzVHlwZSIsImNsaWVudHMiLCJhY3Rpb25zIiwic2VsZWN0ZWRUb29sR3JvdXBzIiwiU2VjdGlvbkJ5S2V5IiwicHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwidmFsaWRhdGVGaWVsZFZhbHVlcyIsInZhbHVlVG9WYWxpZGF0ZSIsImJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsIiwiYWdlbnRCeUlkIiwiYWdlbnRNb2RlbHMiLCJwcmV2IiwiX2FnZW50QnlJZCRrbm93bGVkZ2VCIiwiX2FnZW50QnlJZCRjbGllbnRzIiwiYWdlbnRNb2RlbCIsImZpbmQiLCJtb2RlbCIsIm1vZGVsQWlJZCIsImNyZWF0ZWRfYnkiLCJjcmVhdGVkQnkiLCJtYXAiLCJrIiwiZmlsZSIsIkZpbGUiLCJmaWxlbmFtZSIsInRvU3RyaW5nIiwic2l6ZSIsImZpbGVfc2l6ZV9ieXRlcyIsInR5cGUiLCJvcmlnaW5hbF9maWxlX3R5cGUiLCJzdGF0dXMiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwiYWNjZXNzIiwiY2xpZW50IiwiX2NsaWVudCRpZCIsIl9jbGllbnQkaXNfYWN0aXZlIiwiX2NsaWVudCRpc19kZWxldGVkIiwiaXNfYWN0aXZlIiwiaXNfZGVsZXRlZCIsInRvb2xHcm91cFNsdWdzIiwiQWJtQWdlbnRNb2RhbCIsIl9yZWYiLCJfdXNlciRwZXJtaXNzaW9ucyIsIl9tb2RhbFZhbHVlcyRhY2Nlc3NpYjIiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDMiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDQiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDUiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDYiLCJhZGRBZ2VudCIsInVwZGF0ZUFnZW50IiwicmVtb3ZlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInVzZXIiLCJldmVudEFtcGxpdHVkZSIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsImN1cnJlbnRTZWxlY3RlZEFnZW50IiwiYWdlbnQiLCJzZWxlY3RBZ2VudCIsIl91c2VUb2dnbGVGYXZvcml0ZSIsInRvZ2dsZUZhdm9yaXRlIiwic2VsZWN0b3IiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNTdWJzY3JpYmVkIiwic2V0SXNTdWJzY3JpYmVkIiwibW9kYWxSZWYiLCJoYXNQZW5kaW5nRmlsZXNSZWYiLCJhY3Rpb25zVG9GaWxlcyIsInRvRGVsZXRlIiwidG9VcGxvYWQiLCJhY2Nlc3NVcGRhdGVDb250ZXh0IiwiaXNGcm9tQ3JlYXRpb24iLCJpc0Zyb21FZGl0aW5nIiwiaGFzQWN0aW9uRmlsZXMiLCJvcGVyYXRpb25UeXBlIiwiaGFzQmVlbkNhbGxlZCIsImFjY2Vzc0hhbmRsZWRSZWYiLCJhZ2VudENyZWF0ZWRSZWYiLCJwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYiLCJwZW5kaW5nVHJpZ2dlclJlZiIsInByZWZldGNoZWRBZ2VudEJ5SWRSZWYiLCJmaWxlc0ZpbmlzaGVkUmVmIiwicHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImZpbGVzUHJvY2Vzc2VkIiwic2V0RmlsZXNQcm9jZXNzZWQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzT3BlbiIsInNldElzT3BlbiIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2hvd01vZGFsRGVsZXRlIiwic2V0U2hvd01vZGFsRGVsZXRlIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzZWN0aW9uIiwic2V0U2VjdGlvbiIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJtb2RhbFZhbHVlcyIsInNldE1vZGFsVmFsdWVzIiwiX3VzZUdldEFnZW50QnlJZCIsImFnZW50TG9hZGluZyIsImxvYWRpbmciLCJoYW5kbGVHZXRBZ2VudEJ5SWQiLCJoYW5kbGVDbGVhbkFnZW50IiwiZXJyb3JHZXRBZ2VudEJ5SWQiLCJlcnJvciIsIl91c2VBZ2VudE1vZGVsIiwiZ2V0QWxsQWdlbnRNb2RlbHMiLCJmaXJzdFZhbHVlQWdlbnQiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiaXNTaG93UHJvY2Vzc0ZpbGVzIiwic2V0SXNTaG93UHJvY2Vzc0ZpbGVzIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImhhc0ZpbGVFcnJvcnMiLCJzZXRIYXNGaWxlRXJyb3JzIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJfdXNlRGVsZXRlQWdlbnQiLCJoYW5kbGVEZWxldGVBZ2VudCIsInN1Y2Nlc3NEZWxldGUiLCJzdWNjZXNzIiwicmVzZXRTdWNjZXNzIiwiX3VzZVVwZGF0ZUFnZW50IiwiaGFuZGxlVXBkYXRlQWdlbnQiLCJzdWNjZXNzVXBkYXRlIiwicmVzZXRTdWNjZXNzVXBkYXRlIiwiX3VzZUNyZWF0ZUFnZW50IiwiaGFuZGxlQ3JlYXRlQWdlbnQiLCJpc0xvYWRpbmdDcmVhdGUiLCJzdWNjZXNzQ3JlYXRlIiwicmVzZXRTdWNjZXNzQ3JlYXRlIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlS25vd2xlZGdlT3BlcmF0aW8iLCJoYW5kbGVDcmVhdGVLbm93bGVkZ2VzIiwiaGFuZGxlRGVsZXRlS25vd2xlZGdlcyIsImhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMiLCJpc0xvYWRpbmdLbm93bGVkZ2UiLCJlcnJvcktub3dsZWRnZSIsInN1Y2Nlc3NLbm93bGVkZ2VEZWxldGUiLCJoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlIiwiaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlIiwiX3VzZUFjY2Vzc0NsaWVudCIsImhhbmRsZUFjY2Vzc0NsaWVudCIsInN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJpc0xvYWRpbmdVcGRhdGVBY2Nlc3MiLCJyZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJoYW5kbGVSZXNldFN1Y2Nlc3MiLCJhcmVDbGllbnRzQXJyYXlzRXF1YWwiLCJjbGllbnRzMSIsImNsaWVudHMyIiwibGVuZ3RoIiwiY2xpZW50czFJZHMiLCJjIiwiY2xpZW50SWQiLCJzb3J0IiwiY2xpZW50czJJZHMiLCJldmVyeSIsImluZGV4IiwiaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIiLCJjdXJyZW50IiwiYWNjZXNzVHlwZVNhbWUiLCJjbGllbnRzU2FtZSIsImhhc0FjdGlvbnNDaGFuZ2VkIiwiX21vZGFsVmFsdWVzJGFjdGlvbnMiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIyIiwiY3VycmVudEFjdGlvbnMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJvcmlnaW5hbEFjdGlvbnMiLCJzb21lIiwic2x1ZyIsInZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIzIiwiX21vZGFsVmFsdWVzJGdlbmVyYWwkIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyNCIsIl9tb2RhbFZhbHVlcyRrbm93bGVkZyIsIl9maXJzdFZhbHVlQWdlbnQkY3VycjUiLCJfbW9kYWxWYWx1ZXMka25vd2xlZGcyIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyNiIsIl9hY3Rpb25zVG9GaWxlcyRjdXJyZSIsIl9hY3Rpb25zVG9GaWxlcyRjdXJyZTIiLCJ0b1VwZGF0ZSIsImhhc0FueVZhbHVlRm9yQ3JlYXRpb24iLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbCQyIiwiX2FnZW50TW9kZWxzJCIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsJDMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczIiLCJpc0RlZmF1bHRBaU1vZGVsIiwiZGVmYXVsdElucHV0UGxhY2Vob2xkZXIiLCJpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyIiwiZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciIsImlzRGVmYXVsdFVzZXJQcm9tcHQiLCJoYXNOYW1lIiwidHJpbSIsImhhc0Vtb2ppIiwiaGFzSW50cm9kdWN0aW9uIiwiaGFzSW5wdXRQbGFjZWhvbGRlciIsImhhc1VzZXJQcm9tcHQiLCJoYXNLbm93bGVkZ2UiLCJoYXNDdXN0b21BaU1vZGVsIiwiaGFzQWNjZXNzaWJpbGl0eSIsImhhc0FjdGlvbnMiLCJoYXNDaGFuZ2VzRm9yRWRpdGluZyIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudCIsImFnZW50SWQiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwidXBkYXRlZEFnZW50IiwiaGFuZGxlQ2xvc2UiLCJza2lwQ29uZmlybWF0aW9uIiwiYXJndW1lbnRzIiwiY29uZmlybU1lc3NhZ2UiLCJ3aW5kb3ciLCJjb25maXJtIiwiaGFuZGxlQmFja2Ryb3BDbGljayIsImV2ZW50IiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsImhhbmRsZVNlY3Rpb25DaGFuZ2UiLCJuZXdTZWN0aW9uIiwidGFiU2VjdGlvbiIsIm9wdGlvbiIsImhhbmRsZVNldEFnZW50VmFsdWVzQnlLZXlzIiwiX3JlZjIiLCJrZXkiLCJ2YWx1ZSIsImRlbGV0ZUtub3dsZWRnZSIsIm5leHRLbm93bGVkZ2UiLCJfYWN0aW9uc1RvRmlsZXMkY3VycmUzIiwicHVzaCIsImFwcGx5IiwiZmlsZXNQcmV2SWRzIiwiU2V0IiwibmV3RmlsZXMiLCJmaWx0ZXIiLCJoYXMiLCJ2YWx1ZUlkcyIsImNvbmNhdCIsImtub3dsZWRnZUZpbGVzIiwiX2RlZmluZVByb3BlcnR5IiwiaGFuZGxlQ29uZmlybUFjdGlvbiIsIl9yZWYzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJjaGF0IiwiYWN0aW9uIiwid3JhcCIsIl9jb250ZXh0IiwibmV4dCIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJhYnJ1cHQiLCJjb25maXJtQWN0aW9uIiwic3RvcCIsIl94IiwiX3gyIiwiaGFuZGxlU2V0QWdlbnRWYWx1ZXMiLCJfYWdlbnRWYWx1ZXMkdmFsdWVzIiwiX2FnZW50VmFsdWVzJHZhbHVlczMiLCJhZ2VudFZhbHVlcyIsImRldGFpbCIsImluaXRpYWxTZWN0aW9uIiwiaW5jbHVkZXMiLCJ2YWx1ZXMiLCJfYWdlbnRWYWx1ZXMkdmFsdWVzMiIsInByZWZldGNoZWRBZ2VudEJ5SWQiLCJuZXh0VmFsdWVzIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfZG9jdW1lbnQiLCJib2R5Iiwib3JpZ2luYWxPdmVyZmxvdyIsInN0eWxlIiwib3ZlcmZsb3ciLCJoYW5kbGVCZWZvcmVVbmxvYWQiLCJwcmV2ZW50RGVmYXVsdCIsInJldHVyblZhbHVlIiwiYWdlbnRfZXh0ZXJuYWxfaWQiLCJlcnIiLCJjb25zb2xlIiwicHJvbWlzZXMiLCJmaWxlc1RvRGVsZXRlIiwiZmlsZXNUb0NyZWF0ZSIsImFnZW50V2l0aEZhdm9yaXRlIiwiYWdlbnRGb3JUb2dnbGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImFsbCIsImZpbGVzIiwiYWlDaGF0RmF2b3JpdGUiLCJmaWxlc1RvVXBsb2FkIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiaGFuZGxlUHJvY2Vzc0ZpbGVzVGltZW91dCIsIndlYlNvY2tldEZ1bmN0aW9uIiwiX3JlZjQiLCJtb2RlbERhdGEiLCJtb2RlbF9kYXRhIiwiZmlsZVN0YXR1cyIsInVwZGF0ZWRLbm93bGVkZ2UiLCJrbm93bGVkZ2VfYmFzZV9pZCIsImhhc1BlbmRpbmdGaWxlcyIsImhhc0Vycm9yRmlsZXMiLCJwcmV2Q291bnQiLCJjb250ZXh0IiwiYWdlbnRUb0FkZCIsIl9zdWNjZXNzQ3JlYXRlJGlkIiwiY2hhbm5lbCIsIiRfc2MiLCJfJF9zYyIsInN1YnNjcmliZUhhbmRsZXIiLCJfJF9zYzIiLCJfJF9zYzMiLCJfJF9zYyRjaGFubmVsVHlwZSIsIm1vZGVsX2hhc2giLCJhY3Rpb25UeXBlIiwiU1VCU0NSSUJFIiwidXBkYXRlQ29ubmVjdGlvbk1vZGVsIiwiY2hhbm5lbFR5cGUiLCJNT0RFTF9DSEFOTkVMIiwiYXBwbHlFZGl0aW5nQWdlbnQiLCJzb3VyY2UiLCJzZXRUaW1lb3V0IiwiYWdlbnRWYWx1ZXNUb1NldCIsInByZWZldGNoZWQiLCJzaG91bGREaXNhYmxlU2F2ZUZvckNsaWVudHMiLCJfbW9kYWxWYWx1ZXMkYWNjZXNzaWIiLCJpc1NhdmVCdXR0b25EaXNhYmxlZCIsImhhbmRsZVRvZ2dsZUZhdm9yaXRlIiwiX21vZGFsVmFsdWVzJGdlbmVyYWwiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDIiLCJjcmVhdGUiLCJlZGl0IiwiekluZGV4Iiwib25DbGljayIsImNoaWxkcmVuIiwicmVmIiwidGFiSW5kZXgiLCJjb2xvciIsImF0dGFjaG1lbnRzIiwibGFiZWwiLCJvblRpbWVvdXQiLCJ0aXRsZSIsIndpZHRoIiwiaGVpZ2h0IiwiZmlsbCIsInZhcmlhbnQiLCJjbGFzc05hbWUiLCJjYW5jZWxNb2RhbCIsImRpc2FibGVkIiwiaGFzU2Nyb2xsIiwiZXhpc3RpbmdLbm93bGVkZ2UiLCJuZXdLbm93bGVkZ2UiLCJvblJlbW92ZUV4aXN0aW5nS25vd2xlZGdlIiwib25SZW1vdmVOZXdLbm93bGVkZ2UiLCJvbkZpbGVFcnJvckNoYW5nZSIsImNoaWxkcmVuV2l0aEljb24iLCJkaXNwbGF5IiwiZ2FwIiwiaXNEaXNhYmxlZCIsIm9uQ2xvc2UiLCJoYW5kbGVycyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWFsZXJ0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tY3ljbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1uby11c2VsZXNzLWZyYWdtZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5cbmltcG9ydCB7IENVQnV0dG9uIH0gZnJvbSAnQHByb2plY3Rjb3IvYnV0dG9uL2xpYi9jb21wb25lbnRzL0NVQnV0dG9uJ1xuaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DYXRlZ29yeSdcbmltcG9ydCB7IEFsZXJ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQWxlcnQnXG5pbXBvcnQgeyBUcmFzaCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1RyYXNoJ1xuaW1wb3J0IHsgU3RhciB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1N0YXInXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgU3Bpbm5lckxvdHRpZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2Nvci1jb21tb25zL2xpYi9jb21wb25lbnRzL3NwaW5uZXItbG90dGllJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgQWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbidcbmltcG9ydCB7IEJhY2tkcm9wIH0gZnJvbSAnLi4vLi4vYXRvbXMvQmFja2Ryb3AnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IEFjY2Vzc2liaWxpdHlJY29uLCBCcmFpbkljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IHVzZUFnZW50TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBZ2VudE1vZGVsL3VzZUFnZW50TW9kZWwnXG5pbXBvcnQgeyBBZ2VudCwgQWdlbnRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgdXNlR2V0QWdlbnRCeUlkIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZ2V0QWdlbnRCeUlkJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQWJtQWN0aW9uc1NlY3Rpb24sIEFibUdlbmVyYWxTZWN0aW9uLCBBYm1Lbm93bGVkZ2VTZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0FibVNlY3Rpb24nXG5pbXBvcnQgeyBNb2RhbFZhbHVlcyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50TW9kYWwnXG5pbXBvcnQge1xuICBTQ0FBTUNvbnRlbnQsXG4gIFNDQUFNRm9vdGVyLFxuICBTQ0FBTUhlYWRlcixcbiAgU0NBQU1IZWFkZXJUaXRsZSxcbiAgU0NBQU1IZWFkZXJMZWZ0LFxuICBTQ0FBTUhlYWRlckZhdm9yaXRlLFxuICBTQ0FBTUhlYWRlckNsb3NlQnV0dG9uLFxuICBTQ0FBTVNpZGViYXIsXG4gIFNDQUFNV3JhcHBlcixcbiAgU0NBQU1TaWRlYmFySXRlbSxcbiAgU0NBQU1TaWRlYmFySXRlbVRpdGxlLFxuICBTQ0FBTURlbGV0ZUJ1dHRvbixcbiAgU0NBQU1TYXZlQnV0dG9uLFxuICBTQ0FBTVdyYXBwZXJTcGlubmVyLFxuICBTQ0FBTVdyYXBwZXJTcGlubmVyQ29udGVudCxcbiAgU0NBQU1TaWRlYmFySXRlbUVycm9yLFxufSBmcm9tICcuL0FibUFnZW50TW9kYWwuc3R5bGVzJ1xuaW1wb3J0IHsgdXNlQ3JlYXRlQWdlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBZ2VudE1vZGVsL3VzZUNyZWF0ZUFnZW50J1xuaW1wb3J0IHsgdXNlRGVsZXRlQWdlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBZ2VudE1vZGVsL3VzZURlbGV0ZUFnZW50J1xuaW1wb3J0IHsgdXNlU25hY2tCYXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU25hY2tCYXJNYW5hZ2VyL3VzZVNuYWNrQmFyTWFuYWdlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlVXBkYXRlQWdlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBZ2VudE1vZGVsL3VzZVVwZGF0ZUFnZW50J1xuaW1wb3J0IHsgdXNlS25vd2xlZGdlT3BlcmF0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUtub3dsZWRnZSdcbmltcG9ydCB7IEFibUxvYWRlckZpbGVzIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0FibVNlY3Rpb24vQWJtTG9hZGVyRmlsZXMnXG5pbXBvcnQgeyBXcmFwcGVyQ2VudGVySWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL1dyYXBwZXJDZW50ZXJJY29uJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uL0RlbGV0ZVF1ZXN0aW9uTW9kYWwvRGVsZXRlUXVlc3Rpb25Nb2RhbCdcbmltcG9ydCB7IHVzZUFjY2Vzc0NsaWVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUFjY2Vzc0NsaWVudC91c2VBY2Nlc3NDbGllbnQnXG5pbXBvcnQgeyB1c2VUb2dnbGVGYXZvcml0ZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzJ1xuaW1wb3J0IHsgY3JlYXRlU2NoZWR1bGUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NjaGVkdWxlcydcbmltcG9ydCB0eXBlIHsgUGVuZGluZ1RyaWdnZXJQYXlsb2FkIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0FibVNlY3Rpb24vQWJtVHJpZ2dlcnNTZWN0aW9uL0FibVRyaWdnZXJzU2VjdGlvbi5pbnRlcmZhY2UnXG5cbmNvbnN0IGluaXRpYWxWYWx1ZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgaXNFZGl0aW5nOiBmYWxzZSxcbiAga25vd2xlZGdlOiBbXSxcbiAgZ2VuZXJhbDoge1xuICAgIG5hbWU6ICcnLFxuICAgIGVtb2ppOiAnJyxcbiAgICBpbnRyb2R1Y3Rpb246ICcnLFxuICAgIGlucHV0UGxhY2Vob2xkZXI6ICcnLFxuICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICBhaU1vZGVsOiBudWxsLFxuICAgIGlkOiBudWxsLFxuICAgIHVzZXJQcm9tcHQ6IG51bGwsXG4gICAga25vd2xlZGdlQmFzZXM6IFtdLFxuICAgIGlzX2Zhdm9yaXRlOiBmYWxzZSxcbiAgfSxcbiAgYWNjZXNzaWJpbGl0eToge1xuICAgIGFjY2Vzc1R5cGU6ICdjb21wYW55JyxcbiAgICBjbGllbnRzOiBudWxsLFxuICB9LFxuICBhY3Rpb25zOiB7XG4gICAgc2VsZWN0ZWRUb29sR3JvdXBzOiBbXSxcbiAgfSxcbn0pXG5cbnR5cGUgQWJtU2VjdGlvbiA9ICdnZW5lcmFsJyB8ICdrbm93bGVkZ2UnIHwgJ3RyYWluaW5nJyB8ICd0ZXN0aW5nJyB8ICdhY2Nlc3NpYmlsaXR5JyB8ICdhY3Rpb25zJ1xuXG5leHBvcnQgY29uc3QgU2VjdGlvbkJ5S2V5ID0ge1xuICBnZW5lcmFsOiAocHJvcHM6IHtcbiAgICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlbGV0ZUtub3dsZWRnZSxcbiAgICB9OiB7XG4gICAgICBrZXk6IHN0cmluZ1xuICAgICAgdmFsdWU6IHVua25vd25cbiAgICAgIGRlbGV0ZUtub3dsZWRnZT86IGJvb2xlYW5cbiAgICB9KSA9PiB2b2lkXG4gICAgYWdlbnRNb2RlbHM6IEFnZW50TW9kZWxbXVxuICAgIGxvYWRpbmc6IGJvb2xlYW5cbiAgfSkgPT4gPEFibUdlbmVyYWxTZWN0aW9uIHsuLi5wcm9wc30gLz4sXG4gIGtub3dsZWRnZTogKHByb3BzOiB7XG4gICAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiAoeyBrZXksIHZhbHVlIH06IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pID0+IHZvaWRcbiAgICBleGlzdGluZ0tub3dsZWRnZTogQXR0YWNobWVudEZpbGVbXVxuICAgIG5ld0tub3dsZWRnZTogQXR0YWNobWVudEZpbGVbXVxuICAgIG9uUmVtb3ZlRXhpc3RpbmdLbm93bGVkZ2U6IChmaWxlSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uUmVtb3ZlTmV3S25vd2xlZGdlOiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkZpbGVFcnJvckNoYW5nZTogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICB9KSA9PiA8QWJtS25vd2xlZGdlU2VjdGlvbiB7Li4ucHJvcHN9IC8+LFxuICBhY2Nlc3NpYmlsaXR5OiAocHJvcHM6IHtcbiAgICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7IGtleSwgdmFsdWUgfTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT4gdm9pZFxuICB9KSA9PiA8QWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24gey4uLnByb3BzfSAvPixcbiAgYWN0aW9uczogKHByb3BzOiB7XG4gICAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiAoeyBrZXksIHZhbHVlIH06IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pID0+IHZvaWRcbiAgfSkgPT4gPEFibUFjdGlvbnNTZWN0aW9uIHsuLi5wcm9wc30gLz4sXG59XG5cbnR5cGUgQWJtQWdlbnRNb2RhbFByb3BzID0ge1xuICBhZGRBZ2VudDogKG5ld0FnZW50OiBBZ2VudCwgb3B0aW9ucz86IHsgbmF2aWdhdGVIb21lPzogYm9vbGVhbiB9KSA9PiB2b2lkXG4gIHJlbW92ZUFnZW50OiAoYWdlbnRJZDogbnVtYmVyIHwgc3RyaW5nKSA9PiB2b2lkXG4gIHVwZGF0ZUFnZW50OiAodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4gdm9pZFxuICB1cGRhdGVBZ2VudEZhdm9yaXRlOiAodXBkYXRlZEFnZW50OiBBZ2VudCwgc2hvdWxkU29ydD86IGJvb2xlYW4pID0+IHZvaWRcbiAgc2VsZWN0Rmlyc3RBZ2VudDogKGFnZW50SWQ6IHN0cmluZykgPT4gdm9pZFxufVxuXG5jb25zdCB2YWxpZGF0ZUZpZWxkVmFsdWVzID0gKHZhbHVlVG9WYWxpZGF0ZTogTW9kYWxWYWx1ZXMpID0+IHtcbiAgaWYgKCF2YWx1ZVRvVmFsaWRhdGUuZ2VuZXJhbC5uYW1lIHx8ICF2YWx1ZVRvVmFsaWRhdGUuZ2VuZXJhbC51c2VyUHJvbXB0KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqIE1pc21hIGVzdHJ1Y3R1cmEgcXVlIGVsIGVmZWN0byBxdWUgaGlkcmF0YSBkZXNkZSB1c2VHZXRBZ2VudEJ5SWQgKHRvZGFzIGxhcyBwZXN0YcOxYXMgZGVsIEFCTSkuICovXG5mdW5jdGlvbiBidWlsZEVkaXRpbmdNb2RhbFZhbHVlc0Zyb21BZ2VudERldGFpbChcbiAgYWdlbnRCeUlkOiBhbnksXG4gIGFnZW50TW9kZWxzOiBBZ2VudE1vZGVsW10sXG4gIHByZXY6IE1vZGFsVmFsdWVzXG4pOiBNb2RhbFZhbHVlcyB7XG4gIGNvbnN0IGFnZW50TW9kZWwgPSBhZ2VudE1vZGVscy5maW5kKG1vZGVsID0+IG1vZGVsLmlkID09PSBhZ2VudEJ5SWQubW9kZWxBaUlkKVxuICByZXR1cm4ge1xuICAgIC4uLnByZXYsXG4gICAgaXNFZGl0aW5nOiB0cnVlLFxuICAgIGdlbmVyYWw6IHtcbiAgICAgIGVtb2ppOiBhZ2VudEJ5SWQuZW1vamksXG4gICAgICBuYW1lOiBhZ2VudEJ5SWQubmFtZSxcbiAgICAgIGludHJvZHVjdGlvbjogYWdlbnRCeUlkLmludHJvZHVjdGlvbixcbiAgICAgIGlucHV0UGxhY2Vob2xkZXI6IGFnZW50QnlJZC5pbnB1dFBsYWNlaG9sZGVyLFxuICAgICAgaXNBY3RpdmU6IGFnZW50QnlJZC5pc0FjdGl2ZSxcbiAgICAgIGFpTW9kZWw6IGFnZW50TW9kZWwgfHwgbnVsbCxcbiAgICAgIGlkOiBhZ2VudEJ5SWQuaWQsXG4gICAgICB1c2VyUHJvbXB0OiBhZ2VudEJ5SWQudXNlclByb21wdCxcbiAgICAgIGtub3dsZWRnZUJhc2VzOiBbXSxcbiAgICAgIGlzX2Zhdm9yaXRlOiBhZ2VudEJ5SWQuaXNfZmF2b3JpdGUsXG4gICAgICBjcmVhdGVkX2J5OiBhZ2VudEJ5SWQuY3JlYXRlZEJ5LFxuICAgIH0sXG4gICAga25vd2xlZGdlOlxuICAgICAgYWdlbnRCeUlkLmtub3dsZWRnZUJhc2VzPy5tYXAoKGs6IGFueSkgPT4gKHtcbiAgICAgICAgZmlsZTogbmV3IEZpbGUoW10sIGsuZmlsZW5hbWUpLFxuICAgICAgICBpZDogay5pZC50b1N0cmluZygpLFxuICAgICAgICBuYW1lOiBrLmZpbGVuYW1lLFxuICAgICAgICBzaXplOiBrLmZpbGVfc2l6ZV9ieXRlcyB8fCAwLFxuICAgICAgICB0eXBlOiBrLm9yaWdpbmFsX2ZpbGVfdHlwZSxcbiAgICAgICAgc3RhdHVzOiBrLnN0YXR1cyxcbiAgICAgICAgdXJsX29yaWdpbmFsOiBrLnVybF9vcmlnaW5hbCB8fCB1bmRlZmluZWQsXG4gICAgICAgIHVybF90aHVtYm5haWw6IGsudXJsX3RodW1ibmFpbCB8fCB1bmRlZmluZWQsXG4gICAgICB9KSkgfHwgW10sXG4gICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgYWNjZXNzVHlwZTogYWdlbnRCeUlkLmFjY2VzcyxcbiAgICAgIGNsaWVudHM6XG4gICAgICAgIGFnZW50QnlJZC5jbGllbnRzPy5tYXAoKGNsaWVudDogYW55KSA9PiAoe1xuICAgICAgICAgIGlkOiBjbGllbnQuaWQ/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICAgICAgbmFtZTogY2xpZW50Lm5hbWUsXG4gICAgICAgICAgaXNfYWN0aXZlOiBjbGllbnQuaXNfYWN0aXZlID8/IGZhbHNlLFxuICAgICAgICAgIGlzX2RlbGV0ZWQ6IGNsaWVudC5pc19kZWxldGVkID8/IGZhbHNlLFxuICAgICAgICB9KSkgfHwgbnVsbCxcbiAgICB9LFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHNlbGVjdGVkVG9vbEdyb3VwczogYWdlbnRCeUlkLnRvb2xHcm91cFNsdWdzIHx8IFtdLFxuICAgIH0sXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEFibUFnZW50TW9kYWwgPSAoe1xuICBhZGRBZ2VudCxcbiAgdXBkYXRlQWdlbnQsXG4gIHJlbW92ZUFnZW50LFxuICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICBzZWxlY3RGaXJzdEFnZW50LFxufTogQWJtQWdlbnRNb2RhbFByb3BzKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oJ2FibV9hZ2VudF9zZWN0aW9uJylcbiAgLy8gY29uc3QgJF9zYzogYW55ID0gbnVsbFxuICBjb25zdCB7IGFnZW50OiBjdXJyZW50U2VsZWN0ZWRBZ2VudCwgc2VsZWN0QWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCB7IHRvZ2dsZUZhdm9yaXRlIH0gPSB1c2VUb2dnbGVGYXZvcml0ZSgpXG4gIGNvbnN0IHNlbGVjdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FibS1hZ2VudC1tb2RhbCcpXG4gIGNvbnN0IFtpc1N1YnNjcmliZWQsIHNldElzU3Vic2NyaWJlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgbW9kYWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGhhc1BlbmRpbmdGaWxlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgYWN0aW9uc1RvRmlsZXMgPSB1c2VSZWY8YW55Pih7XG4gICAgdG9EZWxldGU6IFtdLFxuICAgIHRvVXBsb2FkOiBbXSxcbiAgfSlcbiAgY29uc3QgYWNjZXNzVXBkYXRlQ29udGV4dCA9IHVzZVJlZjx7XG4gICAgaXNGcm9tQ3JlYXRpb246IGJvb2xlYW5cbiAgICBpc0Zyb21FZGl0aW5nOiBib29sZWFuXG4gICAgaGFzQWN0aW9uRmlsZXM6IGJvb2xlYW5cbiAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyB8ICd1cGRhdGUnIHwgbnVsbFxuICAgIGhhc0JlZW5DYWxsZWQ/OiBib29sZWFuXG4gIH0+KHtcbiAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gIH0pXG4gIGNvbnN0IGFjY2Vzc0hhbmRsZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGFnZW50Q3JlYXRlZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYgPSB1c2VSZWY8QWJtU2VjdGlvbiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHBlbmRpbmdUcmlnZ2VyUmVmID0gdXNlUmVmPFBlbmRpbmdUcmlnZ2VyUGF5bG9hZCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHByZWZldGNoZWRBZ2VudEJ5SWRSZWYgPSB1c2VSZWY8YW55PihudWxsKVxuICBjb25zdCBmaWxlc0ZpbmlzaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICAvLyBNYXJjYSBjdWFuZG8gY2VycmFtb3MgZWwgbG9hZGVyIHBvciBlbCB0aW1lb3V0IGRlIHNlZ3VyaWRhZCBkZSBhcmNoaXZvcy5cbiAgLy8gTWllbnRyYXMgZXN0w6kgYWN0aXZvLCBsb3MgdXNlRWZmZWN0IGRlIHBvc3QtZ3VhcmRhZG8gTk8gZGViZW4gZGlzcGFyYXJcbiAgLy8gc25hY2tiYXJzIGRlIMOpeGl0byBuaSBhdXRvLWNlcnJhciBlbCBtb2RhbC5cbiAgY29uc3QgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFtmaWxlc1Byb2Nlc3NlZCwgc2V0RmlsZXNQcm9jZXNzZWRdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd01vZGFsRGVsZXRlLCBzZXRTaG93TW9kYWxEZWxldGVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWN0aW9uLCBzZXRTZWN0aW9uXSA9IHVzZVN0YXRlPEFibVNlY3Rpb24+KCdnZW5lcmFsJylcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kYWxWYWx1ZXMsIHNldE1vZGFsVmFsdWVzXSA9IHVzZVN0YXRlPHtcbiAgICBnZW5lcmFsOiBhbnlcbiAgICBrbm93bGVkZ2U6IGFueVxuICAgIGlzRWRpdGluZzogYm9vbGVhblxuICAgIGFjY2Vzc2liaWxpdHk6IGFueVxuICAgIGFjdGlvbnM6IGFueVxuICB9Pihpbml0aWFsVmFsdWVzKVxuICBjb25zdCB7XG4gICAgbG9hZGluZzogYWdlbnRMb2FkaW5nLFxuICAgIGhhbmRsZUdldEFnZW50QnlJZCxcbiAgICBhZ2VudDogYWdlbnRCeUlkLFxuICAgIGhhbmRsZUNsZWFuQWdlbnQsXG4gICAgZXJyb3I6IGVycm9yR2V0QWdlbnRCeUlkLFxuICB9ID0gdXNlR2V0QWdlbnRCeUlkKClcbiAgY29uc3QgeyBhZ2VudE1vZGVscywgZ2V0QWxsQWdlbnRNb2RlbHMgfSA9IHVzZUFnZW50TW9kZWwoKVxuICBjb25zdCBmaXJzdFZhbHVlQWdlbnQgPSB1c2VSZWY8YW55PihudWxsKVxuICBjb25zdCBbaXNTaG93UHJvY2Vzc0ZpbGVzLCBzZXRJc1Nob3dQcm9jZXNzRmlsZXNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtoYXNGaWxlRXJyb3JzLCBzZXRIYXNGaWxlRXJyb3JzXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcblxuICBjb25zdCB7IGhhbmRsZURlbGV0ZUFnZW50LCBzdWNjZXNzOiBzdWNjZXNzRGVsZXRlLCByZXNldFN1Y2Nlc3MgfSA9IHVzZURlbGV0ZUFnZW50KClcbiAgY29uc3QgeyBoYW5kbGVVcGRhdGVBZ2VudCwgc3VjY2Vzczogc3VjY2Vzc1VwZGF0ZSwgcmVzZXRTdWNjZXNzOiByZXNldFN1Y2Nlc3NVcGRhdGUgfSA9IHVzZVVwZGF0ZUFnZW50KClcblxuICBjb25zdCB7XG4gICAgaGFuZGxlQ3JlYXRlQWdlbnQsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdDcmVhdGUsXG4gICAgc3VjY2Vzczogc3VjY2Vzc0NyZWF0ZSxcbiAgICByZXNldFN1Y2Nlc3M6IHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgfSA9IHVzZUNyZWF0ZUFnZW50KClcblxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyU3VjY2VzcywgaGFuZGxlU25hY2tiYXJFcnJvciB9ID0gdXNlU25hY2tCYXJNYW5hZ2VyKClcblxuICBjb25zdCB7XG4gICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdLbm93bGVkZ2UsXG4gICAgZXJyb3I6IGVycm9yS25vd2xlZGdlLFxuICAgIHN1Y2Nlc3NEZWxldGU6IHN1Y2Nlc3NLbm93bGVkZ2VEZWxldGUsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzU2F2ZSxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUsXG4gIH0gPSB1c2VLbm93bGVkZ2VPcGVyYXRpb25zKClcblxuICBjb25zdCB7XG4gICAgaGFuZGxlQWNjZXNzQ2xpZW50LFxuICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzOiByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gIH0gPSB1c2VBY2Nlc3NDbGllbnQoKVxuXG4gIGlmICghc2VsZWN0b3IpIHJldHVybiBudWxsXG5cbiAgY29uc3QgYXJlQ2xpZW50c0FycmF5c0VxdWFsID0gKGNsaWVudHMxOiBhbnlbXSB8IG51bGwsIGNsaWVudHMyOiBhbnlbXSB8IG51bGwpID0+IHtcbiAgICBpZiAoIWNsaWVudHMxICYmICFjbGllbnRzMikgcmV0dXJuIHRydWVcbiAgICBpZiAoIWNsaWVudHMxIHx8ICFjbGllbnRzMikgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGNsaWVudHMxLmxlbmd0aCAhPT0gY2xpZW50czIubGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGNsaWVudHMxSWRzID0gY2xpZW50czEubWFwKGMgPT4gYy5jbGllbnRJZCkuc29ydCgpXG4gICAgY29uc3QgY2xpZW50czJJZHMgPSBjbGllbnRzMi5tYXAoYyA9PiBjLmNsaWVudElkKS5zb3J0KClcblxuICAgIHJldHVybiBjbGllbnRzMUlkcy5ldmVyeSgoaWQsIGluZGV4KSA9PiBpZCA9PT0gY2xpZW50czJJZHNbaW5kZXhdKVxuICB9XG5cbiAgY29uc3QgaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFZhbHVlQWdlbnQuY3VycmVudD8uYWNjZXNzaWJpbGl0eSB8fCAhbW9kYWxWYWx1ZXM/LmFjY2Vzc2liaWxpdHkpIHJldHVybiB0cnVlXG5cbiAgICBjb25zdCBhY2Nlc3NUeXBlU2FtZSA9IG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlXG4gICAgY29uc3QgY2xpZW50c1NhbWUgPSBhcmVDbGllbnRzQXJyYXlzRXF1YWwoXG4gICAgICBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmNsaWVudHMsXG4gICAgICBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5hY2Nlc3NpYmlsaXR5LmNsaWVudHNcbiAgICApXG5cbiAgICByZXR1cm4gIWFjY2Vzc1R5cGVTYW1lIHx8ICFjbGllbnRzU2FtZVxuICB9XG5cbiAgY29uc3QgaGFzQWN0aW9uc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudEFjdGlvbnMgPSBbLi4uKG1vZGFsVmFsdWVzLmFjdGlvbnM/LnNlbGVjdGVkVG9vbEdyb3VwcyB8fCBbXSldLnNvcnQoKVxuICAgIGNvbnN0IG9yaWdpbmFsQWN0aW9ucyA9IFsuLi4oZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/LmFjdGlvbnM/LnNlbGVjdGVkVG9vbEdyb3VwcyB8fCBbXSldLnNvcnQoKVxuXG4gICAgaWYgKGN1cnJlbnRBY3Rpb25zLmxlbmd0aCAhPT0gb3JpZ2luYWxBY3Rpb25zLmxlbmd0aCkgcmV0dXJuIHRydWVcblxuICAgIHJldHVybiBjdXJyZW50QWN0aW9ucy5zb21lKChzbHVnLCBpbmRleCkgPT4gc2x1ZyAhPT0gb3JpZ2luYWxBY3Rpb25zW2luZGV4XSlcbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUgPSAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFZhbHVlQWdlbnQuY3VycmVudD8uZ2VuZXJhbCB8fCAhbW9kYWxWYWx1ZXM/LmdlbmVyYWwpIHJldHVybiBmYWxzZVxuXG4gICAgcmV0dXJuIChcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwubmFtZSA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC5uYW1lICYmXG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLmVtb2ppID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLmVtb2ppICYmXG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLmludHJvZHVjdGlvbiA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC5pbnRyb2R1Y3Rpb24gJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlciA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyICYmXG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLmFpTW9kZWw/LmlkID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLmFpTW9kZWw/LmlkICYmXG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwudXNlclByb21wdCAmJlxuICAgICAgIWhhc0FjdGlvbnNDaGFuZ2VkKCkgJiZcbiAgICAgIChtb2RhbFZhbHVlcy5rbm93bGVkZ2U/Lmxlbmd0aCA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/Lmtub3dsZWRnZT8ubGVuZ3RoIHx8XG4gICAgICAgICghbW9kYWxWYWx1ZXMua25vd2xlZGdlPy5sZW5ndGggJiYgIWZpcnN0VmFsdWVBZ2VudC5jdXJyZW50Py5rbm93bGVkZ2U/Lmxlbmd0aCkpICYmXG4gICAgICAhYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwZGF0ZT8ubGVuZ3RoICYmXG4gICAgICAhYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZT8ubGVuZ3RoICYmXG4gICAgICAhaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKVxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhc0FueVZhbHVlRm9yQ3JlYXRpb24gPSAoKSA9PiB7XG4gICAgaWYgKG1vZGFsVmFsdWVzLmlzRWRpdGluZykgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBpc0RlZmF1bHRBaU1vZGVsID0gISFhZ2VudE1vZGVscy5sZW5ndGggJiYgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5haU1vZGVsPy5pZCA9PT0gYWdlbnRNb2RlbHNbMF0/LmlkXG5cbiAgICBjb25zdCBkZWZhdWx0SW5wdXRQbGFjZWhvbGRlciA9IHQoJ2dlbmVyYWxTZWN0aW9uLmlucHV0UGxhY2Vob2xkZXInKVxuICAgIGNvbnN0IGlzRGVmYXVsdElucHV0UGxhY2Vob2xkZXIgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIgPT09IGRlZmF1bHRJbnB1dFBsYWNlaG9sZGVyXG5cbiAgICBjb25zdCBkZWZhdWx0VXNlclByb21wdFBsYWNlaG9sZGVyID0gdCgnZ2VuZXJhbFNlY3Rpb24uaW5pdGlhbFByb21wdFBsYWNlaG9sZGVyJylcbiAgICBjb25zdCBpc0RlZmF1bHRVc2VyUHJvbXB0ID1cbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciB8fFxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC51c2VyUHJvbXB0ID09PSAnJyB8fFxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC51c2VyUHJvbXB0ID09PSBudWxsXG5cbiAgICBjb25zdCBoYXNOYW1lID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5uYW1lLnRyaW0oKSAhPT0gJydcbiAgICBjb25zdCBoYXNFbW9qaSA9IG1vZGFsVmFsdWVzLmdlbmVyYWwuZW1vamkudHJpbSgpICE9PSAnJ1xuICAgIGNvbnN0IGhhc0ludHJvZHVjdGlvbiA9IG1vZGFsVmFsdWVzLmdlbmVyYWwuaW50cm9kdWN0aW9uLnRyaW0oKSAhPT0gJydcbiAgICBjb25zdCBoYXNJbnB1dFBsYWNlaG9sZGVyID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyLnRyaW0oKSAhPT0gJycgJiYgIWlzRGVmYXVsdElucHV0UGxhY2Vob2xkZXJcbiAgICBjb25zdCBoYXNVc2VyUHJvbXB0ID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC51c2VyUHJvbXB0Py50cmltKCkgIT09ICcnICYmICFpc0RlZmF1bHRVc2VyUHJvbXB0XG4gICAgY29uc3QgaGFzS25vd2xlZGdlID0gISFtb2RhbFZhbHVlcy5rbm93bGVkZ2UubGVuZ3RoXG4gICAgY29uc3QgaGFzQ3VzdG9tQWlNb2RlbCA9IG1vZGFsVmFsdWVzLmdlbmVyYWwuYWlNb2RlbCAmJiAhaXNEZWZhdWx0QWlNb2RlbFxuICAgIGNvbnN0IGhhc0FjY2Vzc2liaWxpdHkgPSBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55J1xuICAgIGNvbnN0IGhhc0FjdGlvbnMgPSAhIW1vZGFsVmFsdWVzLmFjdGlvbnM/LnNlbGVjdGVkVG9vbEdyb3Vwcz8ubGVuZ3RoXG5cbiAgICByZXR1cm4gKFxuICAgICAgaGFzTmFtZSB8fFxuICAgICAgaGFzRW1vamkgfHxcbiAgICAgIGhhc0ludHJvZHVjdGlvbiB8fFxuICAgICAgaGFzSW5wdXRQbGFjZWhvbGRlciB8fFxuICAgICAgaGFzVXNlclByb21wdCB8fFxuICAgICAgaGFzS25vd2xlZGdlIHx8XG4gICAgICBoYXNDdXN0b21BaU1vZGVsIHx8XG4gICAgICBoYXNBY2Nlc3NpYmlsaXR5IHx8XG4gICAgICBoYXNBY3Rpb25zXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFzQ2hhbmdlc0ZvckVkaXRpbmcgPSAoKSA9PiB7XG4gICAgaWYgKCFtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHJldHVybiBmYWxzZVxuXG4gICAgcmV0dXJuIChcbiAgICAgICF2YWxpZGF0ZUFnZW50VmFsdWVzSXNTYW1lKCkgfHxcbiAgICAgICEhYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGggfHxcbiAgICAgICEhYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGhcbiAgICApXG4gIH1cblxuICBjb25zdCBoYXNQZW5kaW5nQ2hhbmdlcyA9ICgpID0+IHtcbiAgICByZXR1cm4gaGFzQW55VmFsdWVGb3JDcmVhdGlvbigpIHx8IGhhc0NoYW5nZXNGb3JFZGl0aW5nKClcbiAgfVxuXG4gIC8vIEhlbHBlciBwYXJhIG1hbmVqYXIgZWwgdG9nZ2xlIGRlIGZhdm9yaXRvIHkgYWN0dWFsaXphciBlbCBlc3RhZG8gY29uIG9yZGVuYW1pZW50b1xuICBjb25zdCBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50SWQ6IHN0cmluZywgYWdlbnQ6IEFnZW50LCBvblN1Y2Nlc3M/OiAodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4gdm9pZCwgb25FcnJvcj86ICgpID0+IHZvaWQpID0+IHtcbiAgICAgIHRvZ2dsZUZhdm9yaXRlKFxuICAgICAgICBhZ2VudElkLFxuICAgICAgICB1cGRhdGVkQWdlbnQgPT4ge1xuICAgICAgICAgIC8vIEFjdHVhbGl6YXIgZWwgZXN0YWRvIGRlIGFnZW50ZXMgY29uIGVsIHJlc3VsdGFkbyBkZWwgc2Vydmlkb3IgeSBvcmRlbmFyXG4gICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZSh1cGRhdGVkQWdlbnQsIHRydWUpXG4gICAgICAgICAgaWYgKG9uU3VjY2Vzcykge1xuICAgICAgICAgICAgb25TdWNjZXNzKHVwZGF0ZWRBZ2VudClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAob25FcnJvcikge1xuICAgICAgICAgICAgb25FcnJvcigpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhZ2VudC5pc19mYXZvcml0ZVxuICAgICAgKVxuICAgIH0sXG4gICAgW3RvZ2dsZUZhdm9yaXRlLCB1cGRhdGVBZ2VudEZhdm9yaXRlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoc2tpcENvbmZpcm1hdGlvbiA9IGZhbHNlKSA9PiB7XG4gICAgaWYgKCFza2lwQ29uZmlybWF0aW9uICYmIGhhc1BlbmRpbmdDaGFuZ2VzKCkgJiYgIXN1Y2Nlc3NDcmVhdGUgJiYgIXN1Y2Nlc3NVcGRhdGUgJiYgIXN1Y2Nlc3NEZWxldGUpIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1NZXNzYWdlID0gbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gdCgnY29uZmlybUNsb3NlRWRpdEFnZW50JykgOiB0KCdjb25maXJtQ2xvc2VDcmVhdGVBZ2VudCcpXG5cbiAgICAgIGlmICghd2luZG93LmNvbmZpcm0oY29uZmlybU1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIHNldE1vZGFsVmFsdWVzKGluaXRpYWxWYWx1ZXMpXG4gICAgaGFuZGxlQ2xlYW5BZ2VudCgpXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzU2F2ZSgpXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQgPSB7XG4gICAgICB0b0RlbGV0ZTogW10sXG4gICAgICB0b1VwbG9hZDogW10sXG4gICAgfVxuICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgIGlzRnJvbUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgb3BlcmF0aW9uVHlwZTogbnVsbCxcbiAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgIH1cbiAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXMoZmFsc2UpXG4gICAgc2V0SXNTdWJzY3JpYmVkKGZhbHNlKVxuICAgIHNldEZpbGVzUHJvY2Vzc2VkKDApXG4gICAgc2V0U2VjdGlvbignZ2VuZXJhbCcpXG4gICAgc2V0SXNPcGVuKGZhbHNlKVxuICAgIGFnZW50Q3JlYXRlZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHBlbmRpbmdUcmlnZ2VyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICB9XG5cbiAgY29uc3QgaGFuZGxlQmFja2Ryb3BDbGljayA9IChldmVudDogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgIWlzU2hvd1Byb2Nlc3NGaWxlcykge1xuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNlY3Rpb25DaGFuZ2UgPSAobmV3U2VjdGlvbjogQWJtU2VjdGlvbikgPT4ge1xuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy50YWJTZWN0aW9uLCB7IG9wdGlvbjogbmV3U2VjdGlvbiB9KVxuICAgIHNldFNlY3Rpb24obmV3U2VjdGlvbilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNldEFnZW50VmFsdWVzQnlLZXlzID0gKHtcbiAgICBrZXksXG4gICAgdmFsdWUsXG4gICAgZGVsZXRlS25vd2xlZGdlLFxuICB9OiB7XG4gICAga2V5OiBzdHJpbmdcbiAgICB2YWx1ZTogdW5rbm93blxuICAgIGRlbGV0ZUtub3dsZWRnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIGlmIChrZXkgPT09ICdrbm93bGVkZ2UnKSB7XG4gICAgICBjb25zdCBuZXh0S25vd2xlZGdlID0gKHZhbHVlIGFzIEF0dGFjaG1lbnRGaWxlW10gfCB1bmRlZmluZWQpIHx8IFtdXG4gICAgICBpZiAoIWRlbGV0ZUtub3dsZWRnZSkge1xuICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLnB1c2goLi4ubmV4dEtub3dsZWRnZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpbGVzUHJldklkcyA9IG5leHRLbm93bGVkZ2UubGVuZ3RoID8gbmV3IFNldChuZXh0S25vd2xlZGdlLm1hcChmaWxlID0+IGZpbGUuaWQpKSA6IG5ldyBTZXQoKVxuICAgICAgICBjb25zdCBuZXdGaWxlcyA9IG1vZGFsVmFsdWVzLmtub3dsZWRnZS5maWx0ZXIoZmlsZSA9PiAhZmlsZXNQcmV2SWRzLmhhcyhmaWxlLmlkKSAmJiBmaWxlLnN0YXR1cyAhPT0gJ3N0YXJ0ZWQnKVxuICAgICAgICBpZiAoIW5ld0ZpbGVzLmxlbmd0aCAmJiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlSWRzID0gbmV3IFNldChuZXh0S25vd2xlZGdlLm1hcChmaWxlID0+IGZpbGUuaWQpKVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQgPSBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLmZpbHRlcihmaWxlID0+IHZhbHVlSWRzLmhhcyhmaWxlLmlkKSlcbiAgICAgICAgfVxuICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlID0gWy4uLihhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlIHx8IFtdKSwgLi4ubmV3RmlsZXNdXG4gICAgICB9XG4gICAgfVxuICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4ge1xuICAgICAgY29uc3Qga25vd2xlZGdlRmlsZXMgPVxuICAgICAgICBrZXkgPT09ICdrbm93bGVkZ2UnXG4gICAgICAgICAgPyBkZWxldGVLbm93bGVkZ2VcbiAgICAgICAgICAgID8gKHZhbHVlIGFzIEF0dGFjaG1lbnRGaWxlW10pXG4gICAgICAgICAgICA6IFsuLi4ocHJldi5rbm93bGVkZ2UgfHwgW10pLCAuLi4oKHZhbHVlIGFzIEF0dGFjaG1lbnRGaWxlW10pIHx8IFtdKV1cbiAgICAgICAgICA6IG51bGxcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIC4uLihrZXkgPT09ICdrbm93bGVkZ2UnXG4gICAgICAgICAgPyB7IGtub3dsZWRnZToga25vd2xlZGdlRmlsZXMgfVxuICAgICAgICAgIDoga2V5ID09PSAnYWNjZXNzaWJpbGl0eSdcbiAgICAgICAgICAgID8geyBhY2Nlc3NpYmlsaXR5OiB2YWx1ZSB9XG4gICAgICAgICAgICA6IGtleSA9PT0gJ2FjdGlvbnMnXG4gICAgICAgICAgICAgID8geyBhY3Rpb25zOiB2YWx1ZSB9XG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgICAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgICAgICAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1BY3Rpb24gPSBhc3luYyAoY2hhdDogYW55LCBhY3Rpb246ICdkZWxldGUnIHwgJ3VwZGF0ZScgfCAnY3JlYXRlJykgPT4ge1xuICAgIC8vIFNvbG8gcGVybWl0aXIgb3BlcmFjaW9uZXMgZGUgYWdlbnRlcyBjdXN0b20gc2kgbGEgZmVhdHVyZSBmbGFnIGVzdMOhIGhhYmlsaXRhZGFcbiAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYWN0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmRlbGV0ZSlcbiAgICAgIGhhbmRsZURlbGV0ZUFnZW50KGNoYXQuaWQgYXMgdW5rbm93biBhcyBzdHJpbmcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmNvbmZpcm1BY3Rpb24sIHsgb3B0aW9uOiBtb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyAnZWRpdGUnIDogJ2NyZWF0ZScgfSlcbiAgICAvLyBBbCByZWludGVudGFyIGd1YXJkYXIsIGxpYmVyYXIgZWwgZnJlbm8gZGVsIHRpbWVvdXQgcHJldmlvIHBhcmEgcXVlIGxvc1xuICAgIC8vIHVzZUVmZmVjdCBkZSBwb3N0LWd1YXJkYWRvIHZ1ZWx2YW4gYSBwb2RlciBkaXNwYXJhciBzbmFja2JhcnMgeSBjZXJyYXIuXG4gICAgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgaWYgKG1vZGFsVmFsdWVzLmlzRWRpdGluZykge1xuICAgICAgaWYgKCF2YWxpZGF0ZUFnZW50VmFsdWVzSXNTYW1lKCkpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlVXBkYXRlQWdlbnQobW9kYWxWYWx1ZXMpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGhhbmRsZUNyZWF0ZUFnZW50KG1vZGFsVmFsdWVzKVxuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlU2V0QWdlbnRWYWx1ZXMgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudFZhbHVlcyB9ID0gZXZlbnQuZGV0YWlsXG4gICAgICBjb25zdCBpbml0aWFsU2VjdGlvbiA9IGFnZW50VmFsdWVzPy5pbml0aWFsU2VjdGlvbiBhcyBBYm1TZWN0aW9uIHwgdW5kZWZpbmVkXG4gICAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9XG4gICAgICAgIGluaXRpYWxTZWN0aW9uICYmIFsnZ2VuZXJhbCcsICdrbm93bGVkZ2UnLCAnYWNjZXNzaWJpbGl0eSddLmluY2x1ZGVzKGluaXRpYWxTZWN0aW9uKVxuICAgICAgICAgID8gaW5pdGlhbFNlY3Rpb25cbiAgICAgICAgICA6IG51bGxcblxuICAgICAgZ2V0QWxsQWdlbnRNb2RlbHMoKVxuICAgICAgc2V0SXNPcGVuKHRydWUpXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcblxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYWdlbnRWYWx1ZXMudmFsdWVzPy5pc0VkaXRpbmcpIHtcbiAgICAgICAgLy8gVmFsaWRhciBxdWUgbGEgZmVhdHVyZSBmbGFnIGVzdMOpIGhhYmlsaXRhZGEgYW50ZXMgZGUgY2FyZ2FyIGVsIGFnZW50ZSBwYXJhIGVkaXRhclxuICAgICAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFjY2Vzc0RlbmllZCcpKVxuICAgICAgICAgIHNldElzT3BlbihmYWxzZSlcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChhZ2VudFZhbHVlcy5wcmVmZXRjaGVkQWdlbnRCeUlkKSB7XG4gICAgICAgICAgaGFuZGxlQ2xlYW5BZ2VudCgpXG4gICAgICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gYWdlbnRWYWx1ZXMucHJlZmV0Y2hlZEFnZW50QnlJZFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGhhbmRsZUdldEFnZW50QnlJZChhZ2VudFZhbHVlcz8udmFsdWVzPy5nZW5lcmFsPy5pZCBhcyB1bmtub3duIGFzIHN0cmluZylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChhZ2VudFZhbHVlcy52YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlcyA9IHtcbiAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLFxuICAgICAgICAgIC4uLmFnZW50VmFsdWVzLnZhbHVlcyxcbiAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLmdlbmVyYWwsXG4gICAgICAgICAgICAuLi4oYWdlbnRWYWx1ZXMudmFsdWVzLmdlbmVyYWwgfHwge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgICAgICAgLi4uaW5pdGlhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LFxuICAgICAgICAgICAgLi4uKGFnZW50VmFsdWVzLnZhbHVlcy5hY2Nlc3NpYmlsaXR5IHx8IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLmluaXRpYWxWYWx1ZXMuYWN0aW9ucyxcbiAgICAgICAgICAgIC4uLihhZ2VudFZhbHVlcy52YWx1ZXMuYWN0aW9ucyB8fCB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBrbm93bGVkZ2U6IGFnZW50VmFsdWVzLnZhbHVlcy5rbm93bGVkZ2UgfHwgW10sXG4gICAgICAgIH1cblxuICAgICAgICBmaXJzdFZhbHVlQWdlbnQuY3VycmVudCA9IG5leHRWYWx1ZXNcbiAgICAgICAgc2V0TW9kYWxWYWx1ZXMobmV4dFZhbHVlcylcbiAgICAgIH1cblxuICAgICAgaWYgKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ICYmICFhZ2VudFZhbHVlcy52YWx1ZXM/LmlzRWRpdGluZykge1xuICAgICAgICBzZXRTZWN0aW9uKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50KVxuICAgICAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIGhhbmRsZVNldEFnZW50VmFsdWVzKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIGhhbmRsZVNldEFnZW50VmFsdWVzIGFzIEV2ZW50TGlzdGVuZXIpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyB1c2VFZmZlY3QgdG8gaGFuZGxlIHRoZSBvdmVyZmxvdyBvZiB0aGUgYm9keSB3aGVuIHRoZSBtb2RhbCBpcyBvcGVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxPdmVyZmxvdyA9IGJvZHkuc3R5bGUub3ZlcmZsb3dcbiAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gb3JpZ2luYWxPdmVyZmxvd1xuICAgIH1cbiAgfSwgW2lzT3Blbl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVCZWZvcmVVbmxvYWQgPSAoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IHQoJ2NvbmZpcm1SZWxvYWRCcm93c2VyJylcbiAgICAgICAgcmV0dXJuIHQoJ2NvbmZpcm1SZWxvYWRCcm93c2VyJylcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgaGFuZGxlQmVmb3JlVW5sb2FkKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgaGFuZGxlQmVmb3JlVW5sb2FkKVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgaGFzUGVuZGluZ0NoYW5nZXMsIHRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN1Y2Nlc3NEZWxldGUpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnREZWxldGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3MoKVxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCA9PT0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCkge1xuICAgICAgICBzZWxlY3RGaXJzdEFnZW50KGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCBhcyBzdHJpbmcpXG4gICAgICB9XG4gICAgICByZW1vdmVBZ2VudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKVxuICAgICAgc2V0U2hvd01vZGFsRGVsZXRlKGZhbHNlKVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH1cbiAgfSwgW3N1Y2Nlc3NEZWxldGVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRXZpdGFyIGVqZWN1Y2nDs24gbcO6bHRpcGxlIGRlbCBlZmVjdG9cbiAgICBpZiAoc3VjY2Vzc0NyZWF0ZSAmJiAhaXNMb2FkaW5nQ3JlYXRlICYmIGFnZW50Q3JlYXRlZFJlZi5jdXJyZW50ICE9PSBzdWNjZXNzQ3JlYXRlLmlkKSB7XG4gICAgICBhZ2VudENyZWF0ZWRSZWYuY3VycmVudCA9IHN1Y2Nlc3NDcmVhdGUuaWRcbiAgICAgIGlmIChwZW5kaW5nVHJpZ2dlclJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNyZWF0ZVNjaGVkdWxlKHsgLi4ucGVuZGluZ1RyaWdnZXJSZWYuY3VycmVudCwgYWdlbnRfZXh0ZXJuYWxfaWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KS5jYXRjaChlcnIgPT5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjcmVhdGluZyBwZW5kaW5nIHRyaWdnZXI6JywgZXJyKVxuICAgICAgICApXG4gICAgICAgIHBlbmRpbmdUcmlnZ2VyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGggJiYgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVybyBoYXkgYXJjaGl2b3MsIGVzdGFibGVjZXIgZWwgY29udGV4dG8gcGFyYSBjcmVhY2nDs25cbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtcbiAgICAgICAgICBoYW5kbGVEZWxldGVBbmRDcmVhdGVLbm93bGVkZ2VzKHtcbiAgICAgICAgICAgIGZpbGVzVG9EZWxldGU6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsXG4gICAgICAgICAgICBmaWxlc1RvQ3JlYXRlOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLFxuICAgICAgICAgICAgYWdlbnRJZDogc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdXG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChoYW5kbGVBY2Nlc3NDbGllbnQoc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlzX2Zhdm9yaXRlKSB7XG4gICAgICAgICAgY29uc3QgYWdlbnRXaXRoRmF2b3JpdGUgPSB7IC4uLnN1Y2Nlc3NDcmVhdGUsIGlzX2Zhdm9yaXRlOiB0cnVlIH1cbiAgICAgICAgICBhZGRBZ2VudChhZ2VudFdpdGhGYXZvcml0ZSlcbiAgICAgICAgICAvLyBDdWFuZG8gc2UgY3JlYSB1biBhZ2VudGUgbnVldm8sIGVsIHNlcnZpZG9yIG5vIHRpZW5lIGVsIGZhdm9yaXRvIG1hcmNhZG8gYcO6blxuICAgICAgICAgIC8vIEVudG9uY2VzIGN1cnJlbnRJc0Zhdm9yaXRlIGRlYmUgc2VyIGZhbHNlIHBhcmEgcXVlIGVsIHRvZ2dsZSBsbyBtYXJxdWUgY29tbyB0cnVlXG4gICAgICAgICAgY29uc3QgYWdlbnRGb3JUb2dnbGUgPSB7IC4uLmFnZW50V2l0aEZhdm9yaXRlLCBpc19mYXZvcml0ZTogZmFsc2UgfVxuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZUZhdm9yaXRlRm9yQWdlbnQoXG4gICAgICAgICAgICAgICAgc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIGFnZW50Rm9yVG9nZ2xlLFxuICAgICAgICAgICAgICAgICgpID0+IHJlc29sdmUoKSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZWplY3QoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRBZ2VudChzdWNjZXNzQ3JlYXRlKVxuICAgICAgICB9XG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG5cbiAgICAgICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyh0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLmxlbmd0aCkge1xuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlICE9PSAnY29tcGFueScpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTaSBubyBoYXkgYWNjZXNpYmlsaWRhZCBwZXJvIGhheSBhcmNoaXZvcywgZXN0YWJsZWNlciBlbCBjb250ZXh0byBwYXJhIGNyZWFjacOzblxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW1xuICAgICAgICAgIGhhbmRsZURlbGV0ZUtub3dsZWRnZXMoeyBmaWxlczogYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSwgYWdlbnRJZDogc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpIH0pLFxuICAgICAgICBdXG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChoYW5kbGVBY2Nlc3NDbGllbnQoc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlzX2Zhdm9yaXRlKSB7XG4gICAgICAgICAgY29uc3QgYWdlbnRXaXRoRmF2b3JpdGUgPSB7IC4uLnN1Y2Nlc3NDcmVhdGUsIGlzX2Zhdm9yaXRlOiB0cnVlIH1cbiAgICAgICAgICBhZGRBZ2VudChhZ2VudFdpdGhGYXZvcml0ZSlcbiAgICAgICAgICAvLyBDdWFuZG8gc2UgY3JlYSB1biBhZ2VudGUgbnVldm8sIGVsIHNlcnZpZG9yIG5vIHRpZW5lIGVsIGZhdm9yaXRvIG1hcmNhZG8gYcO6blxuICAgICAgICAgIC8vIEVudG9uY2VzIGN1cnJlbnRJc0Zhdm9yaXRlIGRlYmUgc2VyIGZhbHNlIHBhcmEgcXVlIGVsIHRvZ2dsZSBsbyBtYXJxdWUgY29tbyB0cnVlXG4gICAgICAgICAgY29uc3QgYWdlbnRGb3JUb2dnbGUgPSB7IC4uLmFnZW50V2l0aEZhdm9yaXRlLCBpc19mYXZvcml0ZTogZmFsc2UgfVxuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZUZhdm9yaXRlRm9yQWdlbnQoXG4gICAgICAgICAgICAgICAgc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIGFnZW50Rm9yVG9nZ2xlLFxuICAgICAgICAgICAgICAgICgpID0+IHJlc29sdmUoKSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZWplY3QoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRBZ2VudChzdWNjZXNzQ3JlYXRlKVxuICAgICAgICB9XG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICAgIGhhbmRsZURlbGV0ZUtub3dsZWRnZXMoeyBmaWxlczogYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSwgYWdlbnRJZDogc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpIH0pXG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVybyBoYXkgYXJjaGl2b3MsIGVzdGFibGVjZXIgZWwgY29udGV4dG8gcGFyYSBjcmVhY2nDs25cbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtcbiAgICAgICAgICBoYW5kbGVDcmVhdGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgIC8vIFNvbG8gcmVzZXRlYXIgZWwgY29udGV4dG8gc2kgTk8gc2UgaGEgbGxhbWFkbyB0b2RhdsOtYVxuICAgICAgICBpZiAoIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkKSB7XG4gICAgICAgICAgY29uc3QgeyBoYXNBY3Rpb25GaWxlcyB9ID0gYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBoYXNBY3Rpb25GaWxlcyB8fCBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgIGhhbmRsZUFjY2Vzc0NsaWVudChzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0JlZW5DYWxsZWQgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb2xvIGVqZWN1dGFyIGhhbmRsZUFjY2Vzc0NsaWVudCwgZWwgYWdlbnRlIHNlIGFncmVnYXLDoSB5IGVsIHRvZ2dsZSBzZSBoYXLDoSBlbiBzdWNjZXNzVXBkYXRlQWNjZXNzXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgZmF2b3JpdGUgaWYgaXQgd2FzIG1hcmtlZCBkdXJpbmcgY3JlYXRpb25cbiAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlzX2Zhdm9yaXRlKSB7XG4gICAgICAgIC8vIFByaW1lcm8gYWdyZWdhciBlbCBhZ2VudGUgYSBsYSBsaXN0YSAoYWRkQWdlbnQgeWEgb3JkZW5hKVxuICAgICAgICBjb25zdCBhZ2VudFdpdGhGYXZvcml0ZSA9IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfVxuICAgICAgICBhZGRBZ2VudChhZ2VudFdpdGhGYXZvcml0ZSlcblxuICAgICAgICAvLyBDdWFuZG8gc2UgY3JlYSB1biBhZ2VudGUgbnVldm8sIGVsIHNlcnZpZG9yIG5vIHRpZW5lIGVsIGZhdm9yaXRvIG1hcmNhZG8gYcO6blxuICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiBmYWxzZSB9XG4gICAgICAgIC8vIEx1ZWdvIGhhY2VyIGVsIHRvZ2dsZSBkZSBmYXZvcml0byBlbiBlbCBzZXJ2aWRvciB5IGFjdHVhbGl6YXIgZWwgZXN0YWRvXG4gICAgICAgIGhhbmRsZVRvZ2dsZUZhdm9yaXRlRm9yQWdlbnQoXG4gICAgICAgICAgc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGFnZW50Rm9yVG9nZ2xlLFxuICAgICAgICAgIHVwZGF0ZWRBZ2VudCA9PiB7XG4gICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0RmF2b3JpdGUsIHsgb3B0aW9uOiB1cGRhdGVkQWdlbnQuaXNfZmF2b3JpdGUgPyAnYWRkJyA6ICdyZW1vdmUnIH0pXG4gICAgICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgICAgICAgc2VsZWN0QWdlbnQoeyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IHVwZGF0ZWRBZ2VudC5pc19mYXZvcml0ZSB9KVxuICAgICAgICAgICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICAgICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0RmF2b3JpdGUsIHsgb3B0aW9uOiAnYWRkJyB9KVxuICAgICAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgICAgIHNlbGVjdEFnZW50KGFnZW50V2l0aEZhdm9yaXRlKVxuICAgICAgICAgICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICAgICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgICBhZGRBZ2VudChzdWNjZXNzQ3JlYXRlKVxuICAgICAgICBzZWxlY3RBZ2VudChzdWNjZXNzQ3JlYXRlKVxuICAgICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9LCBbXG4gICAgaXNMb2FkaW5nQ3JlYXRlLFxuICAgIHN1Y2Nlc3NDcmVhdGUsXG4gICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgYWRkQWdlbnQsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICBoYW5kbGVDbG9zZSxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICBdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN1Y2Nlc3NVcGRhdGUpIHtcbiAgICAgIGlmIChhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLmxlbmd0aCAmJiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLmxlbmd0aCkge1xuICAgICAgICBpZiAoaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKSkge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IHRydWUsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICd1cGRhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpIHtcbiAgICAgICAgICBjb25zdCBmaWxlc1RvRGVsZXRlID0gWy4uLmFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGVdXG4gICAgICAgICAgY29uc3QgZmlsZXNUb1VwbG9hZCA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkXVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUgPSBbXVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQgPSBbXVxuXG4gICAgICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICAgIGZpbGVzVG9EZWxldGUsXG4gICAgICAgICAgICAgIGZpbGVzVG9DcmVhdGU6IGZpbGVzVG9VcGxvYWQsXG4gICAgICAgICAgICAgIGFnZW50SWQ6IG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKClcbiAgICAgICAgICAgICAgPyBbaGFuZGxlQWNjZXNzQ2xpZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSldXG4gICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgIF0pXG4gICAgICAgIH1cbiAgICAgICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyh0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLmxlbmd0aCkge1xuICAgICAgICBpZiAoaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKSkge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IHRydWUsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICd1cGRhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpIHtcbiAgICAgICAgICBjb25zdCBmaWxlc1RvRGVsZXRlID0gWy4uLmFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGVdXG4gICAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSA9IFtdXG5cbiAgICAgICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHtcbiAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzVG9EZWxldGUsXG4gICAgICAgICAgICAgIGFnZW50SWQ6IG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKClcbiAgICAgICAgICAgICAgPyBbaGFuZGxlQWNjZXNzQ2xpZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSldXG4gICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgIF0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb1VwbG9hZCA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkXVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQgPSBbXVxuXG4gICAgICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICAgIGZpbGVzOiBmaWxlc1RvVXBsb2FkLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKSkge1xuICAgICAgICAvLyBTb2xvIHJlc2V0ZWFyIGVsIGNvbnRleHRvIHNpIE5PIHNlIGhhIGxsYW1hZG8gdG9kYXbDrWEgeSBOTyBoYXkgYXJjaGl2b3MgcGVuZGllbnRlc1xuICAgICAgICBpZiAoIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkICYmICFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQWN0aW9uRmlsZXMpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ3VwZGF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCkge1xuICAgICAgICAgIC8vIExsYW1hciBhIGhhbmRsZUFjY2Vzc0NsaWVudCBzb2xvIHVuYSB2ZXpcbiAgICAgICAgICBpZiAoIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkKSB7XG4gICAgICAgICAgICBoYW5kbGVBY2Nlc3NDbGllbnQobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KVxuICAgICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0JlZW5DYWxsZWQgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBTb2xvIGNlcnJhciBzaSBubyBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3MgbmkgYWNjZXNzIHBlbmRpZW50ZVxuICAgICAgaWYgKFxuICAgICAgICAhaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiZcbiAgICAgICAgIWlzU2hvd1Byb2Nlc3NGaWxlcyAmJlxuICAgICAgICAhYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGggJiZcbiAgICAgICAgIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgICAhc3VjY2Vzc1VwZGF0ZUFjY2VzcyAmJlxuICAgICAgICAhcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudFxuICAgICAgKSB7XG4gICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICAgIHVwZGF0ZUFnZW50KHN1Y2Nlc3NVcGRhdGUpXG4gICAgICAgIGlmIChjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQgPT09IHN1Y2Nlc3NVcGRhdGUuaWQpIHtcbiAgICAgICAgICBzZWxlY3RBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZSgpXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIHN1Y2Nlc3NVcGRhdGUsXG4gICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCxcbiAgICBoYW5kbGVEZWxldGVBbmRDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZURlbGV0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3MsXG4gICAgdCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUsXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlLFxuICAgIGhhbmRsZUNsb3NlLFxuICBdKVxuXG4gIGNvbnN0IGhhbmRsZVByb2Nlc3NGaWxlc1RpbWVvdXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCAmJiAhaXNTaG93UHJvY2Vzc0ZpbGVzKSByZXR1cm5cblxuICAgIC8vIEFsIGN1bXBsaXJzZSBlbCB0aW1lb3V0IGFzdW1pbW9zIHF1ZSBlbCBndWFyZGFkbyBkZWwgYWdlbnRlIGZ1ZSBleGl0b3NvXG4gICAgLy8gKGVsIHNlcnZlciByZXNwb25kacOzIE9LKSB5IHF1ZSBsb3MgYXJjaGl2b3Mgc2UgZW52aWFyb24gY29ycmVjdGFtZW50ZS5cbiAgICAvLyBTb2xvIHBlcmRpbW9zIGxhIGNvbmZpcm1hY2nDs24gYXNpbmNyw7NuaWNhIGRlbCBXZWJTb2NrZXQgc29icmUgc3VcbiAgICAvLyBwcm9jZXNhbWllbnRvLiBDZXJyYW1vcyB0b2RvIG1vc3RyYW5kbyBlbCBzbmFja2JhciBkZSDDqXhpdG8gcXVlIGh1Ymllc2VcbiAgICAvLyBkaXNwYXJhZG8gZWwgZmx1am8gbm9ybWFsIGRlIMOpeGl0by5cblxuICAgIC8vIEZyZW5vIHBhcmEgcXVlIGxvcyB1c2VFZmZlY3QgZGUgcG9zdC1ndWFyZGFkbyBubyByZS1kaXNwYXJlbiBzbmFja2JhcnNcbiAgICAvLyBvIGNpZXJyZXMgZHVwbGljYWRvcyBjdWFuZG8gc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKGZhbHNlKSBsb3MgZ2F0aWxsZS5cbiAgICBwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50ID0gdHJ1ZVxuXG4gICAgaWYgKG1vZGFsVmFsdWVzLmlzRWRpdGluZyAmJiBzdWNjZXNzVXBkYXRlKSB7XG4gICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCA9PT0gc3VjY2Vzc1VwZGF0ZS5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgfVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpKVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZSgpXG4gICAgfSBlbHNlIGlmICghbW9kYWxWYWx1ZXMuaXNFZGl0aW5nICYmIHN1Y2Nlc3NDcmVhdGUpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgIH1cblxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUoKVxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcblxuICAgIGhhbmRsZUNsb3NlKClcbiAgfSwgW1xuICAgIGlzU2hvd1Byb2Nlc3NGaWxlcyxcbiAgICBtb2RhbFZhbHVlcy5pc0VkaXRpbmcsXG4gICAgc3VjY2Vzc1VwZGF0ZSxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIHVwZGF0ZUFnZW50LFxuICAgIGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCxcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3MsXG4gICAgdCxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGUsXG4gICAgcmVzZXRTdWNjZXNzQ3JlYXRlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcyxcbiAgICBoYW5kbGVDbG9zZSxcbiAgXSlcblxuICBjb25zdCB3ZWJTb2NrZXRGdW5jdGlvbiA9ICh7IG1vZGVsX2RhdGE6IG1vZGVsRGF0YSB9OiB7IG1vZGVsX2RhdGE6IGFueSB9KSA9PiB7XG4gICAgY29uc3QgZmlsZVN0YXR1cyA9IG1vZGVsRGF0YVxuICAgIGlmIChmaWxlU3RhdHVzLnN0YXR1cyA9PT0gJ2RvbmUnIHx8IGZpbGVTdGF0dXMuc3RhdHVzID09PSAnZmFpbGVkJykge1xuICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRLbm93bGVkZ2UgPSBwcmV2Lmtub3dsZWRnZS5tYXAoZmlsZSA9PiB7XG4gICAgICAgICAgaWYgKGZpbGUubmFtZSA9PT0gZmlsZVN0YXR1cy5maWxlbmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uZmlsZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiBmaWxlU3RhdHVzLnN0YXR1cyxcbiAgICAgICAgICAgICAgaWQ6IGZpbGVTdGF0dXMua25vd2xlZGdlX2Jhc2VfaWQgfHwgZmlsZS5pZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZpbGVcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgaGFzUGVuZGluZ0ZpbGVzID0gdXBkYXRlZEtub3dsZWRnZS5zb21lKGZpbGUgPT4gZmlsZS5zdGF0dXMgPT09ICdwZW5kaW5nJylcbiAgICAgICAgY29uc3QgaGFzRXJyb3JGaWxlcyA9IHVwZGF0ZWRLbm93bGVkZ2Uuc29tZShmaWxlID0+IGZpbGUuc3RhdHVzID09PSAnZmFpbGVkJylcbiAgICAgICAgaWYgKGhhc0Vycm9yRmlsZXMgJiYgIWhhc1BlbmRpbmdGaWxlcykge1xuICAgICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXMoZmFsc2UpXG4gICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcihcbiAgICAgICAgICAgIG1vZGFsVmFsdWVzLmlzRWRpdGluZyA/IHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWRXaXRoRmlsZXNFcnJvcicpIDogdCgnY29uZmlybUFnZW50V2l0aEZpbGVzRXJyb3InKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIGlmICghaGFzUGVuZGluZ0ZpbGVzICYmICFoYXNFcnJvckZpbGVzKSB7XG4gICAgICAgICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyhmYWxzZSlcblxuICAgICAgICAgIC8vIFNpIGhhYsOtYSBhY2Nlc3MgcGVuZGllbnRlIHkgeWEgZXN0YWJhIG1hbmVqYWRvLCBmb3J6YXIgcXVlIGVsIHVzZUVmZmVjdCBkZSBhY2Nlc3Mgc2UgZWplY3V0ZSBkZSBudWV2b1xuICAgICAgICAgIGlmIChhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQWN0aW9uRmlsZXMgJiYgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBzZXRGaWxlc1Byb2Nlc3NlZChwcmV2Q291bnQgPT4gcHJldkNvdW50ICsgMSlcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lm9wZXJhdGlvblR5cGUgPT09ICdjcmVhdGUnICYmXG4gICAgICAgICAgICAhYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzICYmXG4gICAgICAgICAgICAhZmlsZXNGaW5pc2hlZFJlZi5jdXJyZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBTaSBlcyBjcmVhY2nDs24gc2luIGFjY2VzaWJpbGlkYWQsIG1hcmNhciBxdWUgbG9zIGFyY2hpdm9zIHRlcm1pbmFyb25cbiAgICAgICAgICAgIGZpbGVzRmluaXNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgICAgIHNldEZpbGVzUHJvY2Vzc2VkKHByZXZDb3VudCA9PiBwcmV2Q291bnQgKyAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAga25vd2xlZGdlOiB1cGRhdGVkS25vd2xlZGdlLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN1Y2Nlc3NLbm93bGVkZ2VEZWxldGUgJiYgIWlzTG9hZGluZ0tub3dsZWRnZSAmJiAhZXJyb3JLbm93bGVkZ2UpIHtcbiAgICAgIC8vIFNvbG8gY2VycmFyIHNpIE5PIGhheSBhcmNoaXZvcyBzaWVuZG8gcHJvY2VzYWRvc1xuICAgICAgaWYgKGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50IHx8IGlzU2hvd1Byb2Nlc3NGaWxlcyB8fCBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLmxlbmd0aCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIFNpIGVsIGxvYWRlciBzZSBjZXJyw7MgcG9yIHRpbWVvdXQsIG5vIG1vc3RyYXIgc25hY2tiYXIgZGUgw6l4aXRvIG5pIGNlcnJhclxuICAgICAgaWYgKHByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50VXBkYXRlZCcpKVxuICAgICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG4gICAgaWYgKGVycm9yS25vd2xlZGdlKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKFxuICAgICAgICBtb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyB0KCdjb25maXJtQWdlbnRVcGRhdGVkV2l0aEZpbGVzRXJyb3InKSA6IHQoJ2NvbmZpcm1BZ2VudFdpdGhGaWxlc0Vycm9yJylcbiAgICAgIClcbiAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgfVxuICB9LCBbc3VjY2Vzc0tub3dsZWRnZURlbGV0ZSwgaXNMb2FkaW5nS25vd2xlZGdlLCBlcnJvcktub3dsZWRnZSwgaXNTaG93UHJvY2Vzc0ZpbGVzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnRcblxuICAgIC8vIFNpIGhheSBhcmNoaXZvcyBzaWVuZG8gcHJvY2VzYWRvcywgZXNwZXJhciBhIHF1ZSB0ZXJtaW5lblxuICAgIGlmIChjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmIChoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCB8fCBpc1Nob3dQcm9jZXNzRmlsZXMpKSB7XG4gICAgICAvLyBTaSBzdWNjZXNzVXBkYXRlQWNjZXNzIGVzdMOhIGFjdGl2bywgbWFyY2FyIGNvbW8gbWFuZWphZG8gcGVybyBOTyByZXNldGVhciBoYXN0YSBxdWUgdGVybWluZW4gbG9zIGFyY2hpdm9zXG4gICAgICBpZiAoc3VjY2Vzc1VwZGF0ZUFjY2VzcyAmJiAhYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFNpIHlhIGZ1ZSBtYW5lamFkbyB5IG5vIGhheSBhcmNoaXZvcyBwZW5kaWVudGVzLCBlamVjdXRhciBlbCBjaWVycmVcbiAgICBpZiAoYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ICYmIGNvbnRleHQuaGFzQWN0aW9uRmlsZXMgJiYgY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJykge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICBpZiAoc3VjY2Vzc1VwZGF0ZUFjY2Vzcykge1xuICAgICAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuICAgICAgfVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzdWNjZXNzVXBkYXRlQWNjZXNzKSB7XG4gICAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcygpXG5cbiAgICBpZiAoY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJykge1xuICAgICAgLy8gU2kgaGF5IGFyY2hpdm9zLCBlbCBhZ2VudGUgeWEgZnVlIGFncmVnYWRvIHkgZWwgdG9nZ2xlIHlhIHNlIGhpem8gZW4gc3VjY2Vzc0NyZWF0ZVxuICAgICAgLy8gU29sbyBuZWNlc2l0YW1vcyBjZXJyYXIgZWwgbW9kYWxcbiAgICAgIGlmIChjb250ZXh0Lmhhc0FjdGlvbkZpbGVzKSB7XG4gICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFNpIGVsIGFnZW50ZSBmdWUgY3JlYWRvIGNvbiBmYXZvcml0bywgbmVjZXNpdGFtb3Mgb3JkZW5hciBkZXNwdcOpcyBkZSBhZ3JlZ2FybG9cbiAgICAgIGNvbnN0IGFnZW50VG9BZGQgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmlzX2Zhdm9yaXRlID8geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9IDogc3VjY2Vzc0NyZWF0ZVxuXG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgYWRkQWdlbnQoYWdlbnRUb0FkZClcbiAgICAgIHNlbGVjdEFnZW50KGFnZW50VG9BZGQpXG5cbiAgICAgIC8vIFNpIHRpZW5lIGZhdm9yaXRvLCBoYWNlciB0b2dnbGUgeSBhY3R1YWxpemFyIGVzdGFkbyBhbnRlcyBkZSBjZXJyYXJcbiAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlzX2Zhdm9yaXRlKSB7XG4gICAgICAgIC8vIEN1YW5kbyBzZSBjcmVhIHVuIGFnZW50ZSBudWV2bywgZWwgc2Vydmlkb3Igbm8gdGllbmUgZWwgZmF2b3JpdG8gbWFyY2FkbyBhw7puXG4gICAgICAgIC8vIEVudG9uY2VzIGN1cnJlbnRJc0Zhdm9yaXRlIGRlYmUgc2VyIGZhbHNlIHBhcmEgcXVlIGVsIHRvZ2dsZSBsbyBtYXJxdWUgY29tbyB0cnVlXG4gICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFRvQWRkLCBpc19mYXZvcml0ZTogZmFsc2UgfVxuICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAvLyBDZXJyYXIgZGVzcHXDqXMgZGUgcXVlIGVsIHRvZ2dsZSBjb21wbGV0ZSB5IGFjdHVhbGljZSBlbCBlc3RhZG9cbiAgICAgICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAndXBkYXRlJykge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWQnKSlcbiAgICAgIHVwZGF0ZUFnZW50KHN1Y2Nlc3NVcGRhdGUpXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkID09PSBzdWNjZXNzVXBkYXRlLmlkKSB7XG4gICAgICAgIHNlbGVjdEFnZW50KHN1Y2Nlc3NVcGRhdGUpXG4gICAgICB9XG4gICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpKVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH1cblxuICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgIGlzRnJvbUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgb3BlcmF0aW9uVHlwZTogbnVsbCxcbiAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgIH1cbiAgfSwgW3N1Y2Nlc3NVcGRhdGVBY2Nlc3MsIGZpbGVzUHJvY2Vzc2VkXSlcblxuICAvLyB1c2VFZmZlY3QgcGFyYSBtYW5lamFyIGVsIGNpZXJyZSBkZWwgbW9kYWwgY3VhbmRvIHRlcm1pbmFuIGxvcyBhcmNoaXZvcyBlbiBjcmVhY2nDs24gc2luIGFjY2VzaWJpbGlkYWRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50XG5cbiAgICAvLyBTb2xvIHByb2Nlc2FyIHNpOlxuICAgIC8vIC0gRXMgdW5hIG9wZXJhY2nDs24gZGUgY3JlYWNpw7NuXG4gICAgLy8gLSBObyBoYXkgYWNjZXNpYmlsaWRhZCBwZW5kaWVudGVcbiAgICAvLyAtIExvcyBhcmNoaXZvcyB0ZXJtaW5hcm9uIGRlIHByb2Nlc2Fyc2VcbiAgICAvLyAtIEVsIGFnZW50ZSBmdWUgY3JlYWRvIGV4aXRvc2FtZW50ZVxuICAgIC8vIC0gQcO6biBubyBzZSBoYSBjZXJyYWRvIGVsIG1vZGFsXG4gICAgaWYgKFxuICAgICAgY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgIWNvbnRleHQuaGFzQWN0aW9uRmlsZXMgJiZcbiAgICAgIGZpbGVzRmluaXNoZWRSZWYuY3VycmVudCAmJlxuICAgICAgc3VjY2Vzc0NyZWF0ZSAmJlxuICAgICAgIWhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ICYmXG4gICAgICAhaXNTaG93UHJvY2Vzc0ZpbGVzXG4gICAgKSB7XG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGZpbGVzRmluaXNoZWRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgIGlzRnJvbUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogbnVsbCxcbiAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGFtYmnDqW4gbWFuZWphciBlbCBjYXNvIGN1YW5kbyBoYXkgYWNjZXNpYmlsaWRhZCB5IGFyY2hpdm9zIHRlcm1pbmFyb25cbiAgICBpZiAoXG4gICAgICBjb250ZXh0Lm9wZXJhdGlvblR5cGUgPT09ICdjcmVhdGUnICYmXG4gICAgICBjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmXG4gICAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgJiZcbiAgICAgIHN1Y2Nlc3NDcmVhdGUgJiZcbiAgICAgICFoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCAmJlxuICAgICAgIWlzU2hvd1Byb2Nlc3NGaWxlc1xuICAgICkge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICBpZiAoc3VjY2Vzc1VwZGF0ZUFjY2Vzcykge1xuICAgICAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuICAgICAgfVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGZpbGVzUHJvY2Vzc2VkLFxuICAgIHN1Y2Nlc3NDcmVhdGUsXG4gICAgc3VjY2Vzc1VwZGF0ZUFjY2VzcyxcbiAgICBpc1Nob3dQcm9jZXNzRmlsZXMsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgcmVzZXRTdWNjZXNzQ3JlYXRlLFxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcyxcbiAgICBoYW5kbGVDbG9zZSxcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc1Nob3dQcm9jZXNzRmlsZXMpIHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBga25vd2xlZGdlLWJhc2Uuc3RhdHVzOiR7YWdlbnRCeUlkID8gYWdlbnRCeUlkPy5pZCA6IHN1Y2Nlc3NDcmVhdGU/LmlkPy50b1N0cmluZygpfWBcbiAgICAgIGlmICgkX3NjKSB7XG4gICAgICAgIGlmIChpc1N1YnNjcmliZWQpIHtcbiAgICAgICAgICAkX3NjPy5zdWJzY3JpYmVIYW5kbGVyKGNoYW5uZWwsIHdlYlNvY2tldEZ1bmN0aW9uKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG1vZGVsRGF0YSA9IHtcbiAgICAgICAgICAgIG1vZGVsX2hhc2g6IGNoYW5uZWwsXG4gICAgICAgICAgICBhY3Rpb246ICRfc2M/LmFjdGlvblR5cGU/LlNVQlNDUklCRSxcbiAgICAgICAgICB9XG4gICAgICAgICAgJF9zYz8udXBkYXRlQ29ubmVjdGlvbk1vZGVsKG1vZGVsRGF0YSwgY2hhbm5lbCwgdXNlciwgdXNlciwgJF9zYy5jaGFubmVsVHlwZT8uTU9ERUxfQ0hBTk5FTClcbiAgICAgICAgICBzZXRJc1N1YnNjcmliZWQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzU2hvd1Byb2Nlc3NGaWxlcywgaXNTdWJzY3JpYmVkLCAkX3NjLCBhZ2VudEJ5SWQsIHN1Y2Nlc3NDcmVhdGVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4gfHwgIWFnZW50TW9kZWxzLmxlbmd0aCkgcmV0dXJuXG4gICAgaWYgKGFnZW50TG9hZGluZyAmJiAhcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50KSByZXR1cm5cblxuICAgIGNvbnN0IGFwcGx5RWRpdGluZ0FnZW50ID0gKHNvdXJjZTogYW55KSA9PiB7XG4gICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdjdXN0b20nIHx8ICF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ2Vycm9yQWNjZXNzRGVuaWVkJykpXG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICB9LCAzMDAwKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4ge1xuICAgICAgICBjb25zdCBhZ2VudFZhbHVlc1RvU2V0ID0gYnVpbGRFZGl0aW5nTW9kYWxWYWx1ZXNGcm9tQWdlbnREZXRhaWwoc291cmNlLCBhZ2VudE1vZGVscywgcHJldilcbiAgICAgICAgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQgPSBhZ2VudFZhbHVlc1RvU2V0XG4gICAgICAgIHJldHVybiBhZ2VudFZhbHVlc1RvU2V0XG4gICAgICB9KVxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgaWYgKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50KSB7XG4gICAgICAgIHNldFNlY3Rpb24ocGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQpXG4gICAgICAgIHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBwcmVmZXRjaGVkID0gcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50XG4gICAgaWYgKHByZWZldGNoZWQpIHtcbiAgICAgIHByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFwcGx5RWRpdGluZ0FnZW50KHByZWZldGNoZWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYWdlbnRCeUlkICYmICFhZ2VudExvYWRpbmcgJiYgYWdlbnRNb2RlbHMubGVuZ3RoKSB7XG4gICAgICBhcHBseUVkaXRpbmdBZ2VudChhZ2VudEJ5SWQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWlzTG9hZGluZyAmJiAhYWdlbnRMb2FkaW5nICYmICFhZ2VudEJ5SWQgJiYgIW1vZGFsVmFsdWVzLmlzRWRpdGluZykge1xuICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgIGFpTW9kZWw6IGFnZW50TW9kZWxzWzBdLFxuICAgICAgICB9LFxuICAgICAgfSkpXG4gICAgfVxuICB9LCBbYWdlbnRCeUlkLCBpc09wZW4sIGlzTG9hZGluZywgYWdlbnRMb2FkaW5nLCBhZ2VudE1vZGVscz8ubGVuZ3RoLCBtb2RhbFZhbHVlcy5pc0VkaXRpbmcsIHRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVycm9yR2V0QWdlbnRCeUlkKSB7XG4gICAgICBpZiAoZXJyb3JHZXRBZ2VudEJ5SWQgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiKSB7XG4gICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnZXJyb3JBY2Nlc3NEZW5pZWQnKSlcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICB9LCAzMDAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IoZXJyb3JHZXRBZ2VudEJ5SWQpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfSwgMzAwMClcbiAgICB9XG4gIH0sIFtlcnJvckdldEFnZW50QnlJZF0pXG5cbiAgY29uc3Qgc2hvdWxkRGlzYWJsZVNhdmVGb3JDbGllbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFtb2RhbFZhbHVlcz8uYWNjZXNzaWJpbGl0eT8uY2xpZW50cyB8fCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmNsaWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuY2xpZW50cy5zb21lKGNsaWVudCA9PiBjbGllbnQuaXNfYWN0aXZlID09PSBmYWxzZSB8fCBjbGllbnQuaXNfZGVsZXRlZCA9PT0gdHJ1ZSlcbiAgfSwgW21vZGFsVmFsdWVzPy5hY2Nlc3NpYmlsaXR5Py5jbGllbnRzXSlcblxuICBjb25zdCBpc1NhdmVCdXR0b25EaXNhYmxlZCA9XG4gICAgIXZhbGlkYXRlRmllbGRWYWx1ZXMobW9kYWxWYWx1ZXMpIHx8XG4gICAgdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSgpIHx8XG4gICAgaXNMb2FkaW5nIHx8XG4gICAgaXNMb2FkaW5nS25vd2xlZGdlIHx8XG4gICAgaXNMb2FkaW5nQ3JlYXRlIHx8XG4gICAgaXNMb2FkaW5nVXBkYXRlQWNjZXNzIHx8XG4gICAgc2hvdWxkRGlzYWJsZVNhdmVGb3JDbGllbnRzIHx8XG4gICAgaGFzRmlsZUVycm9yc1xuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZUZhdm9yaXRlID0gKCkgPT4ge1xuICAgIGlmIChtb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaWQpIHtcbiAgICAgIC8vIEV4aXN0aW5nIGFnZW50XG4gICAgICB0b2dnbGVGYXZvcml0ZShcbiAgICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCxcbiAgICAgICAgdXBkYXRlZEFnZW50ID0+IHtcbiAgICAgICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgICAgIGlzX2Zhdm9yaXRlOiB1cGRhdGVkQWdlbnQuaXNfZmF2b3JpdGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pKVxuICAgICAgICAgIC8vIEFjdHVhbGl6YXIgZWwgZXN0YWRvIGRlIGFnZW50ZXMgeSBvcmRlbmFyIGN1YW5kbyBzZSBoYWNlIGRlc2RlIGVsIG1vZGFsIEFCTVxuICAgICAgICAgIHVwZGF0ZUFnZW50RmF2b3JpdGUodXBkYXRlZEFnZW50LCB0cnVlKVxuICAgICAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRGYXZvcml0ZSwge1xuICAgICAgICAgICAgb3B0aW9uOiB1cGRhdGVkQWdlbnQuaXNfZmF2b3JpdGUgPyAnYWRkJyA6ICdyZW1vdmUnLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgbW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlzX2Zhdm9yaXRlXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBuZXcgYWdlbnRcbiAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgIC4uLnByZXYuZ2VuZXJhbCxcbiAgICAgICAgICBpc19mYXZvcml0ZTogIXByZXYuZ2VuZXJhbC5pc19mYXZvcml0ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pKVxuICAgIH1cbiAgfVxuXG4gIGlmICghaXNPcGVuIHx8ICghdXNlclBlcm1pc3Npb25zPy5jcmVhdGUgJiYgIXVzZXJQZXJtaXNzaW9ucz8uZWRpdCAmJiAhdXNlclBlcm1pc3Npb25zPy5kZWxldGUpKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPEJhY2tkcm9wIHpJbmRleD17MTExMn0gb25DbGljaz17aGFuZGxlQmFja2Ryb3BDbGlja30+XG4gICAgICA8U0NBQU1XcmFwcGVyIHJlZj17bW9kYWxSZWZ9IHRhYkluZGV4PXstMX0+XG4gICAgICAgIHtpc0xvYWRpbmcgPyAoXG4gICAgICAgICAgPFNDQUFNV3JhcHBlclNwaW5uZXI+XG4gICAgICAgICAgICA8U0NBQU1XcmFwcGVyU3Bpbm5lckNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxTcGlubmVyTG90dGllIHNpemU9XCI4MHB4XCIgY29sb3I9XCJwcmltYXJ5XCIgLz5cbiAgICAgICAgICAgIDwvU0NBQU1XcmFwcGVyU3Bpbm5lckNvbnRlbnQ+XG4gICAgICAgICAgPC9TQ0FBTVdyYXBwZXJTcGlubmVyPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7aXNTaG93UHJvY2Vzc0ZpbGVzICYmIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID8gKFxuICAgICAgICAgICAgICA8QWJtTG9hZGVyRmlsZXNcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50cz17bW9kYWxWYWx1ZXMua25vd2xlZGdlfVxuICAgICAgICAgICAgICAgIGxhYmVsPXt0KGBwcm9jZXNzaW5nS25vd2xlZGdlLiR7bW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gJ2Rlc2NyaXB0aW9uVXBkYXRlJyA6ICdkZXNjcmlwdGlvbkNyZWF0ZSd9YCl9XG4gICAgICAgICAgICAgICAgb25UaW1lb3V0PXtoYW5kbGVQcm9jZXNzRmlsZXNUaW1lb3V0fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8U0NBQU1IZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8U0NBQU1IZWFkZXJMZWZ0PlxuICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHQoJ2dlbmVyYWxTZWN0aW9uLnJlbW92ZUZhdm9yaXRlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0KCdnZW5lcmFsU2VjdGlvbi5hZGRGYXZvcml0ZScpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyRmF2b3JpdGUgb25DbGljaz17aGFuZGxlVG9nZ2xlRmF2b3JpdGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezIwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezIwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17bW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlzX2Zhdm9yaXRlID8gJyNGRkM2MjQnIDogJyNhNmE2YTYnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPXttb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGUgPyAnI0ZGQzYyNCcgOiAnbm9uZSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzb2xpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17bW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlzX2Zhdm9yaXRlID8gJycgOiAnc3Rhci1mYXZvcml0ZS1pY29uJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTUhlYWRlckZhdm9yaXRlPlxuICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTUhlYWRlclRpdGxlPnttb2RhbFZhbHVlcz8uaXNFZGl0aW5nID8gdCgnZWRpdEFnZW50JykgOiB0KCduZXdBZ2VudCcpfTwvU0NBQU1IZWFkZXJUaXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvU0NBQU1IZWFkZXJMZWZ0PlxuICAgICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyQ2xvc2VCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5jYW5jZWxNb2RhbClcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmcgfHwgaXNMb2FkaW5nS25vd2xlZGdlIHx8IGlzTG9hZGluZ0NyZWF0ZSB8fCBpc0xvYWRpbmdVcGRhdGVBY2Nlc3N9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxDcm9zcyBjb2xvcj1cIiNhNmE2YTZcIiB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICAgICAgICA8L1NDQUFNSGVhZGVyQ2xvc2VCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9TQ0FBTUhlYWRlcj5cbiAgICAgICAgICAgICAgICA8U0NBQU1Db250ZW50IGhhc1Njcm9sbD17c2VjdGlvbiAhPT0gJ2tub3dsZWRnZSd9PlxuICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2dlbmVyYWwnfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlY3Rpb25DaGFuZ2UoJ2dlbmVyYWwnKX1cbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFibS1hZ2VudC1tb2RhbC1nZW5lcmFsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2Ake3NlY3Rpb24gPT09ICdnZW5lcmFsJyA/ICdyZ2JhKDYzLCA2MywgNjMsIDEpJyA6ICdyZ2JhKDE2NiwgMTY2LCAxNjYsIDEpJ31gfVxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtVGl0bGUgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdnZW5lcmFsJ30+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnZ2VuZXJhbFNlY3Rpb24udGl0bGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhckl0ZW1UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdrbm93bGVkZ2UnfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlY3Rpb25DaGFuZ2UoJ2tub3dsZWRnZScpfVxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWJtLWFnZW50LW1vZGFsLWtub3dsZWRnZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8QnJhaW5JY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YCR7c2VjdGlvbiA9PT0gJ2tub3dsZWRnZScgPyAncmdiYSg2MywgNjMsIDYzLCAxKScgOiAncmdiYSgxNjYsIDE2NiwgMTY2LCAxKSd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVRpdGxlIGlzQWN0aXZlPXtzZWN0aW9uID09PSAna25vd2xlZGdlJ30+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgna25vd2xlZGdlU2VjdGlvbi50aXRsZScpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhckl0ZW0+XG5cbiAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2FjdGlvbnMnfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlY3Rpb25DaGFuZ2UoJ2FjdGlvbnMnKX1cbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFibS1hZ2VudC1tb2RhbC1hY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxDYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2Ake3NlY3Rpb24gPT09ICdhY3Rpb25zJyA/ICdyZ2JhKDYzLCA2MywgNjMsIDEpJyA6ICdyZ2JhKDE2NiwgMTY2LCAxNjYsIDEpJ31gfVxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtVGl0bGUgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdhY3Rpb25zJ30+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnYWN0aW9uc1NlY3Rpb24udGl0bGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhckl0ZW1UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdhY2Nlc3NpYmlsaXR5J31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdhY2Nlc3NpYmlsaXR5Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhYm0tYWdlbnQtbW9kYWwtYWNjZXNzaWJpbGl0eVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8QWNjZXNzaWJpbGl0eUljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtgJHtzZWN0aW9uID09PSAnYWNjZXNzaWJpbGl0eScgPyAncmdiYSg2MywgNjMsIDYzLCAxKScgOiAncmdiYSgxNjYsIDE2NiwgMTY2LCAxKSd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVRpdGxlIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnYWNjZXNzaWJpbGl0eSd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLnRpdGxlVGFiJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAge3Nob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnYWNjZXNzaWJpbGl0eVNlY3Rpb24uY2xpZW50c0Vycm9yJyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbUVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBbGVydCBjb2xvcj1cIiNDNzA1MDVcIiB3aWR0aD1cIjE2cHhcIiBoZWlnaHQ9XCIxNnB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtRXJyb3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuXG4gICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhcj5cbiAgICAgICAgICAgICAgICAgIHtTZWN0aW9uQnlLZXlbc2VjdGlvbl0oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IG1vZGFsVmFsdWVzLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZXRBZ2VudFZhbHVlczogaGFuZGxlU2V0QWdlbnRWYWx1ZXNCeUtleXMsXG4gICAgICAgICAgICAgICAgICAgIGFnZW50TW9kZWxzLFxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdLbm93bGVkZ2U6IFtdLFxuICAgICAgICAgICAgICAgICAgICBuZXdLbm93bGVkZ2U6IFtdLFxuICAgICAgICAgICAgICAgICAgICBvblJlbW92ZUV4aXN0aW5nS25vd2xlZGdlOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgb25SZW1vdmVOZXdLbm93bGVkZ2U6ICgpID0+IHt9LFxuICAgICAgICAgICAgICAgICAgICBvbkZpbGVFcnJvckNoYW5nZTogc2V0SGFzRmlsZUVycm9ycyxcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvU0NBQU1Db250ZW50PlxuICAgICAgICAgICAgICAgIDxTQ0FBTUZvb3RlciBpc0VkaXRpbmc9eyEhbW9kYWxWYWx1ZXM/LmlzRWRpdGluZyAmJiAhIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlfT5cbiAgICAgICAgICAgICAgICAgIHshIW1vZGFsVmFsdWVzPy5pc0VkaXRpbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgISF1c2VyUGVybWlzc2lvbnM/LmRlbGV0ZSAmJlxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNRGVsZXRlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENVQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5XaXRoSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd01vZGFsRGVsZXRlKHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmcgfHwgaXNMb2FkaW5nS25vd2xlZGdlIHx8IGlzTG9hZGluZ0NyZWF0ZSB8fCBpc0xvYWRpbmdVcGRhdGVBY2Nlc3N9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxXcmFwcGVyQ2VudGVySWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHJhc2ggY29sb3I9XCIjMDhjXCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdkZWxldGVBZ2VudCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1dyYXBwZXJDZW50ZXJJY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9DVUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNRGVsZXRlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzI0cHgnIH19PlxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TYXZlQnV0dG9uIGlzRGlzYWJsZWQ9e2lzU2F2ZUJ1dHRvbkRpc2FibGVkfT5cbiAgICAgICAgICAgICAgICAgICAgICA8Q1VCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb24obnVsbCwgJ2NyZWF0ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU2F2ZUJ1dHRvbkRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHttb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyB0KCdzYXZlQ2hhbmdlcycpIDogdCgnY3JlYXRlQWdlbnRMYWJlbEJ1dHRvbicpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvQ1VCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TYXZlQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9TQ0FBTUZvb3Rlcj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9TQ0FBTVdyYXBwZXI+XG4gICAgICB7c2hvd01vZGFsRGVsZXRlICYmIChcbiAgICAgICAgPERlbGV0ZVF1ZXN0aW9uTW9kYWxcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TW9kYWxEZWxldGUoZmFsc2UpfVxuICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICBoYW5kbGVDb25maXJtQWN0aW9uOiAocHJvcHM6IGFueSkgPT4gaGFuZGxlQ29uZmlybUFjdGlvbihwcm9wcywgJ2RlbGV0ZScpLFxuICAgICAgICAgIH19XG4gICAgICAgICAgY2hhdD17eyB0aXRsZTogbW9kYWxWYWx1ZXMuZ2VuZXJhbC5uYW1lLCBpZDogbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCB9fVxuICAgICAgICAgIGFjdGlvbj1cImFnZW50XCJcbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9CYWNrZHJvcD4sXG4gICAgc2VsZWN0b3JcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsUUFBUSxPQUFPO0FBQ3pFLFNBQVNDLFlBQVksUUFBUSxXQUFXO0FBQ3hDLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBRTlDLFNBQVNDLFFBQVEsUUFBUSw0Q0FBNEM7QUFDckUsU0FBU0MsUUFBUSxRQUFRLDJDQUEyQztBQUNwRSxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsSUFBSSxRQUFRLHVDQUF1QztBQUM1RCxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLGFBQWEsUUFBUSx1REFBdUQ7QUFDckYsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyx1QkFBdUIsUUFBUSw0RUFBNEU7QUFDcEgsU0FBU0MsUUFBUSxRQUFRLHNCQUFzQjtBQUMvQyxTQUFTQyxPQUFPLFFBQVEsMkJBQTJCO0FBQ25ELFNBQVNDLGlCQUFpQixFQUFFQyxTQUFTLFFBQVEsbUJBQW1CO0FBQ2hFLFNBQVNDLGFBQWEsUUFBUSw0Q0FBNEM7QUFFMUUsU0FB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
|
|
1592
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VDYWxsYmFjayIsImNyZWF0ZVBvcnRhbCIsInVzZVRyYW5zbGF0aW9uIiwiQ1VCdXR0b24iLCJDYXRlZ29yeSIsIkFsZXJ0IiwiVHJhc2giLCJTdGFyIiwiQ3Jvc3MiLCJTcGlubmVyTG90dGllIiwiVG9vbHRpcCIsIkFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIiwiQmFja2Ryb3AiLCJ1c2VVc2VyIiwiQWNjZXNzaWJpbGl0eUljb24iLCJCcmFpbkljb24iLCJ1c2VBZ2VudE1vZGVsIiwidXNlR2V0QWdlbnRCeUlkIiwiQWJtQWN0aW9uc1NlY3Rpb25WMiIsIkFibUdlbmVyYWxTZWN0aW9uIiwiQWJtS25vd2xlZGdlU2VjdGlvbiIsIlNDQUFNQ29udGVudCIsIlNDQUFNRm9vdGVyIiwiU0NBQU1IZWFkZXIiLCJTQ0FBTUhlYWRlclRpdGxlIiwiU0NBQU1IZWFkZXJMZWZ0IiwiU0NBQU1IZWFkZXJGYXZvcml0ZSIsIlNDQUFNSGVhZGVyQ2xvc2VCdXR0b24iLCJTQ0FBTVNpZGViYXIiLCJTQ0FBTVdyYXBwZXIiLCJTQ0FBTVNpZGViYXJJdGVtIiwiU0NBQU1TaWRlYmFySXRlbVRpdGxlIiwiU0NBQU1EZWxldGVCdXR0b24iLCJTQ0FBTVNhdmVCdXR0b24iLCJTQ0FBTVdyYXBwZXJTcGlubmVyIiwiU0NBQU1XcmFwcGVyU3Bpbm5lckNvbnRlbnQiLCJTQ0FBTVNpZGViYXJJdGVtRXJyb3IiLCJ1c2VDcmVhdGVBZ2VudCIsInVzZURlbGV0ZUFnZW50IiwidXNlU25hY2tCYXJNYW5hZ2VyIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVwZGF0ZUFnZW50IiwidXNlS25vd2xlZGdlT3BlcmF0aW9ucyIsIkFibUxvYWRlckZpbGVzIiwiV3JhcHBlckNlbnRlckljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJ1c2VBY2Nlc3NDbGllbnQiLCJ1c2VUb2dnbGVGYXZvcml0ZSIsImNyZWF0ZVNjaGVkdWxlIiwiZ2V0QWdlbnRDb25uZWN0b3JzIiwib3BlbkNvbm5lY3RvckF1dGhvcml6YXRpb25XaW5kb3dzIiwic2F2ZUFnZW50Q29ubmVjdG9ycyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImluaXRpYWxWYWx1ZXMiLCJPYmplY3QiLCJmcmVlemUiLCJpc0VkaXRpbmciLCJrbm93bGVkZ2UiLCJnZW5lcmFsIiwibmFtZSIsImVtb2ppIiwiaW50cm9kdWN0aW9uIiwiaW5wdXRQbGFjZWhvbGRlciIsImlzQWN0aXZlIiwiYWlNb2RlbCIsImlkIiwidXNlclByb21wdCIsImtub3dsZWRnZUJhc2VzIiwiaXNfZmF2b3JpdGUiLCJhY2Nlc3NpYmlsaXR5IiwiYWNjZXNzVHlwZSIsImNsaWVudHMiLCJhY3Rpb25zIiwic2VsZWN0ZWRUb29sR3JvdXBzIiwic2VsZWN0ZWRDb25uZWN0b3JzIiwiU2VjdGlvbkJ5S2V5IiwicHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwidmFsaWRhdGVGaWVsZFZhbHVlcyIsInZhbHVlVG9WYWxpZGF0ZSIsImJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsIiwiYWdlbnRCeUlkIiwiYWdlbnRNb2RlbHMiLCJwcmV2IiwiX2FnZW50QnlJZCRrbm93bGVkZ2VCIiwiX2FnZW50QnlJZCRjbGllbnRzIiwiYWdlbnRNb2RlbCIsImZpbmQiLCJtb2RlbCIsIm1vZGVsQWlJZCIsImNyZWF0ZWRfYnkiLCJjcmVhdGVkQnkiLCJtYXAiLCJrIiwiZmlsZSIsIkZpbGUiLCJmaWxlbmFtZSIsInRvU3RyaW5nIiwic2l6ZSIsImZpbGVfc2l6ZV9ieXRlcyIsInR5cGUiLCJvcmlnaW5hbF9maWxlX3R5cGUiLCJzdGF0dXMiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwiYWNjZXNzIiwiY2xpZW50IiwiX2NsaWVudCRpZCIsIl9jbGllbnQkaXNfYWN0aXZlIiwiX2NsaWVudCRpc19kZWxldGVkIiwiaXNfYWN0aXZlIiwiaXNfZGVsZXRlZCIsInRvb2xHcm91cFNsdWdzIiwiQWJtQWdlbnRNb2RhbCIsIl9yZWYiLCJfdXNlciRwZXJtaXNzaW9ucyIsIl9tb2RhbFZhbHVlcyRhY2Nlc3NpYjIiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDMiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDQiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDUiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDYiLCJhZGRBZ2VudCIsInVwZGF0ZUFnZW50IiwicmVtb3ZlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInVzZXIiLCJldmVudEFtcGxpdHVkZSIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsImN1cnJlbnRTZWxlY3RlZEFnZW50IiwiYWdlbnQiLCJzZWxlY3RBZ2VudCIsIl91c2VUb2dnbGVGYXZvcml0ZSIsInRvZ2dsZUZhdm9yaXRlIiwic2VsZWN0b3IiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNTdWJzY3JpYmVkIiwic2V0SXNTdWJzY3JpYmVkIiwibW9kYWxSZWYiLCJjb25uZWN0b3JBdXRoUG9wdXBSZWYiLCJoYXNQZW5kaW5nRmlsZXNSZWYiLCJhY3Rpb25zVG9GaWxlcyIsInRvRGVsZXRlIiwidG9VcGxvYWQiLCJhY2Nlc3NVcGRhdGVDb250ZXh0IiwiaXNGcm9tQ3JlYXRpb24iLCJpc0Zyb21FZGl0aW5nIiwiaGFzQWN0aW9uRmlsZXMiLCJvcGVyYXRpb25UeXBlIiwiaGFzQmVlbkNhbGxlZCIsImFjY2Vzc0hhbmRsZWRSZWYiLCJhZ2VudENyZWF0ZWRSZWYiLCJwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYiLCJwZW5kaW5nVHJpZ2dlclJlZiIsInByZWZldGNoZWRBZ2VudEJ5SWRSZWYiLCJmaWxlc0ZpbmlzaGVkUmVmIiwicHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImZpbGVzUHJvY2Vzc2VkIiwic2V0RmlsZXNQcm9jZXNzZWQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzT3BlbiIsInNldElzT3BlbiIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2hvd01vZGFsRGVsZXRlIiwic2V0U2hvd01vZGFsRGVsZXRlIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzZWN0aW9uIiwic2V0U2VjdGlvbiIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJtb2RhbFZhbHVlcyIsInNldE1vZGFsVmFsdWVzIiwiX3VzZUdldEFnZW50QnlJZCIsImFnZW50TG9hZGluZyIsImxvYWRpbmciLCJoYW5kbGVHZXRBZ2VudEJ5SWQiLCJoYW5kbGVDbGVhbkFnZW50IiwiZXJyb3JHZXRBZ2VudEJ5SWQiLCJlcnJvciIsIl91c2VBZ2VudE1vZGVsIiwiZ2V0QWxsQWdlbnRNb2RlbHMiLCJmaXJzdFZhbHVlQWdlbnQiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiaXNTaG93UHJvY2Vzc0ZpbGVzIiwic2V0SXNTaG93UHJvY2Vzc0ZpbGVzIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImhhc0ZpbGVFcnJvcnMiLCJzZXRIYXNGaWxlRXJyb3JzIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJfdXNlRGVsZXRlQWdlbnQiLCJoYW5kbGVEZWxldGVBZ2VudCIsInN1Y2Nlc3NEZWxldGUiLCJzdWNjZXNzIiwicmVzZXRTdWNjZXNzIiwiX3VzZVVwZGF0ZUFnZW50IiwiaGFuZGxlVXBkYXRlQWdlbnQiLCJzdWNjZXNzVXBkYXRlIiwicmVzZXRTdWNjZXNzVXBkYXRlIiwiX3VzZUNyZWF0ZUFnZW50IiwiaGFuZGxlQ3JlYXRlQWdlbnQiLCJpc0xvYWRpbmdDcmVhdGUiLCJzdWNjZXNzQ3JlYXRlIiwicmVzZXRTdWNjZXNzQ3JlYXRlIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlS25vd2xlZGdlT3BlcmF0aW8iLCJoYW5kbGVDcmVhdGVLbm93bGVkZ2VzIiwiaGFuZGxlRGVsZXRlS25vd2xlZGdlcyIsImhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMiLCJpc0xvYWRpbmdLbm93bGVkZ2UiLCJlcnJvcktub3dsZWRnZSIsInN1Y2Nlc3NLbm93bGVkZ2VEZWxldGUiLCJoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlIiwiaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlIiwiX3VzZUFjY2Vzc0NsaWVudCIsImhhbmRsZUFjY2Vzc0NsaWVudCIsInN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJpc0xvYWRpbmdVcGRhdGVBY2Nlc3MiLCJyZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJoYW5kbGVSZXNldFN1Y2Nlc3MiLCJhcmVDbGllbnRzQXJyYXlzRXF1YWwiLCJjbGllbnRzMSIsImNsaWVudHMyIiwibGVuZ3RoIiwiY2xpZW50czFJZHMiLCJjIiwiY2xpZW50SWQiLCJzb3J0IiwiY2xpZW50czJJZHMiLCJldmVyeSIsImluZGV4IiwiaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIiLCJjdXJyZW50IiwiYWNjZXNzVHlwZVNhbWUiLCJjbGllbnRzU2FtZSIsImhhc0FjdGlvbnNDaGFuZ2VkIiwiX21vZGFsVmFsdWVzJGFjdGlvbnMiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIyIiwiY3VycmVudEFjdGlvbnMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJvcmlnaW5hbEFjdGlvbnMiLCJzb21lIiwic2x1ZyIsImhhc0Nvbm5lY3RvckNoYW5nZXMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczIiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIzIiwiY3VycmVudENvbm5lY3RvcnMiLCJvcmlnaW5hbENvbm5lY3RvcnMiLCJwZXJzaXN0QWdlbnRDb25uZWN0b3JzIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImFnZW50SWQiLCJjb25uZWN0b3JTbHVncyIsInBvcHVwV2luZG93IiwicmVzcG9uc2UiLCJwZW5kaW5nQXV0aG9yaXphdGlvbnMiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0Iiwic2VudCIsInJlcXVpcmVzX2F1dGgiLCJhYnJ1cHQiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsInZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnI0IiwiX21vZGFsVmFsdWVzJGdlbmVyYWwkIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyNSIsIl9tb2RhbFZhbHVlcyRrbm93bGVkZyIsIl9maXJzdFZhbHVlQWdlbnQkY3VycjYiLCJfbW9kYWxWYWx1ZXMka25vd2xlZGcyIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyNyIsIl9hY3Rpb25zVG9GaWxlcyRjdXJyZSIsIl9hY3Rpb25zVG9GaWxlcyRjdXJyZTIiLCJ0b1VwZGF0ZSIsImhhc0FueVZhbHVlRm9yQ3JlYXRpb24iLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbCQyIiwiX2FnZW50TW9kZWxzJCIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsJDMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczQiLCJpc0RlZmF1bHRBaU1vZGVsIiwiZGVmYXVsdElucHV0UGxhY2Vob2xkZXIiLCJpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyIiwiZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciIsImlzRGVmYXVsdFVzZXJQcm9tcHQiLCJoYXNOYW1lIiwidHJpbSIsImhhc0Vtb2ppIiwiaGFzSW50cm9kdWN0aW9uIiwiaGFzSW5wdXRQbGFjZWhvbGRlciIsImhhc1VzZXJQcm9tcHQiLCJoYXNLbm93bGVkZ2UiLCJoYXNDdXN0b21BaU1vZGVsIiwiaGFzQWNjZXNzaWJpbGl0eSIsImhhc0FjdGlvbnMiLCJoYXNDb25uZWN0b3JzIiwiaGFzQ2hhbmdlc0ZvckVkaXRpbmciLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImhhbmRsZVRvZ2dsZUZhdm9yaXRlRm9yQWdlbnQiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwidXBkYXRlZEFnZW50IiwiaGFuZGxlQ2xvc2UiLCJza2lwQ29uZmlybWF0aW9uIiwiY29uZmlybU1lc3NhZ2UiLCJ3aW5kb3ciLCJjb25maXJtIiwiaGFuZGxlQmFja2Ryb3BDbGljayIsImV2ZW50IiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsImhhbmRsZVNlY3Rpb25DaGFuZ2UiLCJuZXdTZWN0aW9uIiwidGFiU2VjdGlvbiIsIm9wdGlvbiIsImhhbmRsZVNldEFnZW50VmFsdWVzQnlLZXlzIiwiX3JlZjMiLCJrZXkiLCJ2YWx1ZSIsImRlbGV0ZUtub3dsZWRnZSIsIm5leHRLbm93bGVkZ2UiLCJfYWN0aW9uc1RvRmlsZXMkY3VycmUzIiwicHVzaCIsImZpbGVzUHJldklkcyIsIlNldCIsIm5ld0ZpbGVzIiwiZmlsdGVyIiwiaGFzIiwidmFsdWVJZHMiLCJjb25jYXQiLCJrbm93bGVkZ2VGaWxlcyIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJfcmVmNCIsIl9jYWxsZWUyIiwiY2hhdCIsImFjdGlvbiIsIl9tb2RhbFZhbHVlcyRhY3Rpb25zNSIsImNvbm5lY3RvckNoYW5nZXMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczYiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnI4IiwiX21vZGFsVmFsdWVzJGFjdGlvbnM3IiwiX3QiLCJfY29udGV4dDIiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiY29uZmlybUFjdGlvbiIsIm9wZW4iLCJjbG9zZWQiLCJjbG9zZSIsIl94NCIsIl94NSIsImhhbmRsZVNldEFnZW50VmFsdWVzIiwiX2FnZW50VmFsdWVzJHZhbHVlcyIsIl9hZ2VudFZhbHVlcyR2YWx1ZXMzIiwiYWdlbnRWYWx1ZXMiLCJkZXRhaWwiLCJpbml0aWFsU2VjdGlvbiIsImluY2x1ZGVzIiwidmFsdWVzIiwiX2FnZW50VmFsdWVzJHZhbHVlczIiLCJwcmVmZXRjaGVkQWdlbnRCeUlkIiwibmV4dFZhbHVlcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX2RvY3VtZW50IiwiYm9keSIsIm9yaWdpbmFsT3ZlcmZsb3ciLCJzdHlsZSIsIm92ZXJmbG93IiwiaGFuZGxlQmVmb3JlVW5sb2FkIiwicHJldmVudERlZmF1bHQiLCJyZXR1cm5WYWx1ZSIsIl9tb2RhbFZhbHVlcyRhY3Rpb25zOCIsImNvbnNvbGUiLCJhZ2VudF9leHRlcm5hbF9pZCIsImVyciIsInByb21pc2VzIiwiZmlsZXNUb0RlbGV0ZSIsImZpbGVzVG9DcmVhdGUiLCJhZ2VudFdpdGhGYXZvcml0ZSIsImFnZW50Rm9yVG9nZ2xlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJhbGwiLCJmaWxlcyIsImFpQ2hhdEZhdm9yaXRlIiwiZmlsZXNUb1VwbG9hZCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImhhbmRsZVByb2Nlc3NGaWxlc1RpbWVvdXQiLCJ3ZWJTb2NrZXRGdW5jdGlvbiIsIl9yZWY1IiwibW9kZWxEYXRhIiwibW9kZWxfZGF0YSIsImZpbGVTdGF0dXMiLCJ1cGRhdGVkS25vd2xlZGdlIiwia25vd2xlZGdlX2Jhc2VfaWQiLCJoYXNQZW5kaW5nRmlsZXMiLCJoYXNFcnJvckZpbGVzIiwicHJldkNvdW50IiwiY29udGV4dCIsImFnZW50VG9BZGQiLCJfc3VjY2Vzc0NyZWF0ZSRpZCIsImNoYW5uZWwiLCIkX3NjIiwiXyRfc2MiLCJzdWJzY3JpYmVIYW5kbGVyIiwiXyRfc2MyIiwiXyRfc2MzIiwiXyRfc2MkY2hhbm5lbFR5cGUiLCJtb2RlbF9oYXNoIiwiYWN0aW9uVHlwZSIsIlNVQlNDUklCRSIsInVwZGF0ZUNvbm5lY3Rpb25Nb2RlbCIsImNoYW5uZWxUeXBlIiwiTU9ERUxfQ0hBTk5FTCIsImFwcGx5RWRpdGluZ0FnZW50Iiwic291cmNlIiwic2V0VGltZW91dCIsIl9jYWxsZWUzIiwiY29ubmVjdG9ycyIsIl90MiIsIl9jb250ZXh0MyIsImNvbm5lY3RvciIsImVuYWJsZWRfZm9yX2FnZW50IiwiYWdlbnRWYWx1ZXNUb1NldCIsInByZWZldGNoZWQiLCJzaG91bGREaXNhYmxlU2F2ZUZvckNsaWVudHMiLCJfbW9kYWxWYWx1ZXMkYWNjZXNzaWIiLCJpc1NhdmVCdXR0b25EaXNhYmxlZCIsImhhbmRsZVRvZ2dsZUZhdm9yaXRlIiwiX21vZGFsVmFsdWVzJGdlbmVyYWwiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDIiLCJjcmVhdGUiLCJlZGl0IiwiekluZGV4Iiwib25DbGljayIsImNoaWxkcmVuIiwicmVmIiwidGFiSW5kZXgiLCJjb2xvciIsImF0dGFjaG1lbnRzIiwibGFiZWwiLCJvblRpbWVvdXQiLCJ0aXRsZSIsIndpZHRoIiwiaGVpZ2h0IiwiZmlsbCIsInZhcmlhbnQiLCJjbGFzc05hbWUiLCJjYW5jZWxNb2RhbCIsImRpc2FibGVkIiwiaGFzU2Nyb2xsIiwiZXhpc3RpbmdLbm93bGVkZ2UiLCJuZXdLbm93bGVkZ2UiLCJvblJlbW92ZUV4aXN0aW5nS25vd2xlZGdlIiwib25SZW1vdmVOZXdLbm93bGVkZ2UiLCJvbkZpbGVFcnJvckNoYW5nZSIsImNoaWxkcmVuV2l0aEljb24iLCJkaXNwbGF5IiwiZ2FwIiwiaXNEaXNhYmxlZCIsIm9uQ2xvc2UiLCJoYW5kbGVycyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWFsZXJ0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tY3ljbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1uby11c2VsZXNzLWZyYWdtZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5cbmltcG9ydCB7IENVQnV0dG9uIH0gZnJvbSAnQHByb2plY3Rjb3IvYnV0dG9uL2xpYi9jb21wb25lbnRzL0NVQnV0dG9uJ1xuaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DYXRlZ29yeSdcbmltcG9ydCB7IEFsZXJ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQWxlcnQnXG5pbXBvcnQgeyBUcmFzaCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1RyYXNoJ1xuaW1wb3J0IHsgU3RhciB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1N0YXInXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgU3Bpbm5lckxvdHRpZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2Nvci1jb21tb25zL2xpYi9jb21wb25lbnRzL3NwaW5uZXItbG90dGllJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgQWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbidcbmltcG9ydCB7IEJhY2tkcm9wIH0gZnJvbSAnLi4vLi4vYXRvbXMvQmFja2Ryb3AnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IEFjY2Vzc2liaWxpdHlJY29uLCBCcmFpbkljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IHVzZUFnZW50TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBZ2VudE1vZGVsL3VzZUFnZW50TW9kZWwnXG5pbXBvcnQgeyBBZ2VudCwgQWdlbnRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgdXNlR2V0QWdlbnRCeUlkIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZ2V0QWdlbnRCeUlkJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQWJtQWN0aW9uc1NlY3Rpb25WMiwgQWJtR2VuZXJhbFNlY3Rpb24sIEFibUtub3dsZWRnZVNlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQWJtU2VjdGlvbidcbmltcG9ydCB7IE1vZGFsVmFsdWVzIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnRNb2RhbCdcbmltcG9ydCB7XG4gIFNDQUFNQ29udGVudCxcbiAgU0NBQU1Gb290ZXIsXG4gIFNDQUFNSGVhZGVyLFxuICBTQ0FBTUhlYWRlclRpdGxlLFxuICBTQ0FBTUhlYWRlckxlZnQsXG4gIFNDQUFNSGVhZGVyRmF2b3JpdGUsXG4gIFNDQUFNSGVhZGVyQ2xvc2VCdXR0b24sXG4gIFNDQUFNU2lkZWJhcixcbiAgU0NBQU1XcmFwcGVyLFxuICBTQ0FBTVNpZGViYXJJdGVtLFxuICBTQ0FBTVNpZGViYXJJdGVtVGl0bGUsXG4gIFNDQUFNRGVsZXRlQnV0dG9uLFxuICBTQ0FBTVNhdmVCdXR0b24sXG4gIFNDQUFNV3JhcHBlclNwaW5uZXIsXG4gIFNDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50LFxuICBTQ0FBTVNpZGViYXJJdGVtRXJyb3IsXG59IGZyb20gJy4vQWJtQWdlbnRNb2RhbC5zdHlsZXMnXG5pbXBvcnQgeyB1c2VDcmVhdGVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUFnZW50TW9kZWwvdXNlQ3JlYXRlQWdlbnQnXG5pbXBvcnQgeyB1c2VEZWxldGVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUFnZW50TW9kZWwvdXNlRGVsZXRlQWdlbnQnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyB1c2VVcGRhdGVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUFnZW50TW9kZWwvdXNlVXBkYXRlQWdlbnQnXG5pbXBvcnQgeyB1c2VLbm93bGVkZ2VPcGVyYXRpb25zIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlS25vd2xlZGdlJ1xuaW1wb3J0IHsgQWJtTG9hZGVyRmlsZXMgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1Mb2FkZXJGaWxlcydcbmltcG9ydCB7IFdyYXBwZXJDZW50ZXJJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvV3JhcHBlckNlbnRlckljb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBEZWxldGVRdWVzdGlvbk1vZGFsIH0gZnJvbSAnLi4vRGVsZXRlUXVlc3Rpb25Nb2RhbC9EZWxldGVRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHsgdXNlQWNjZXNzQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWNjZXNzQ2xpZW50L3VzZUFjY2Vzc0NsaWVudCdcbmltcG9ydCB7IHVzZVRvZ2dsZUZhdm9yaXRlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MnXG5pbXBvcnQgeyBjcmVhdGVTY2hlZHVsZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2NoZWR1bGVzJ1xuaW1wb3J0IHtcbiAgZ2V0QWdlbnRDb25uZWN0b3JzLFxuICBvcGVuQ29ubmVjdG9yQXV0aG9yaXphdGlvbldpbmRvd3MsXG4gIHNhdmVBZ2VudENvbm5lY3RvcnMsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2Nvbm5lY3RvcnMnXG5pbXBvcnQgdHlwZSB7IFBlbmRpbmdUcmlnZ2VyUGF5bG9hZCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9BYm1TZWN0aW9uL0FibVRyaWdnZXJzU2VjdGlvbi9BYm1UcmlnZ2Vyc1NlY3Rpb24uaW50ZXJmYWNlJ1xuXG5jb25zdCBpbml0aWFsVmFsdWVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGlzRWRpdGluZzogZmFsc2UsXG4gIGtub3dsZWRnZTogW10sXG4gIGdlbmVyYWw6IHtcbiAgICBuYW1lOiAnJyxcbiAgICBlbW9qaTogJycsXG4gICAgaW50cm9kdWN0aW9uOiAnJyxcbiAgICBpbnB1dFBsYWNlaG9sZGVyOiAnJyxcbiAgICBpc0FjdGl2ZTogZmFsc2UsXG4gICAgYWlNb2RlbDogbnVsbCxcbiAgICBpZDogbnVsbCxcbiAgICB1c2VyUHJvbXB0OiBudWxsLFxuICAgIGtub3dsZWRnZUJhc2VzOiBbXSxcbiAgICBpc19mYXZvcml0ZTogZmFsc2UsXG4gIH0sXG4gIGFjY2Vzc2liaWxpdHk6IHtcbiAgICBhY2Nlc3NUeXBlOiAnY29tcGFueScsXG4gICAgY2xpZW50czogbnVsbCxcbiAgfSxcbiAgYWN0aW9uczoge1xuICAgIHNlbGVjdGVkVG9vbEdyb3VwczogW10sXG4gICAgc2VsZWN0ZWRDb25uZWN0b3JzOiBbXSxcbiAgfSxcbn0pXG5cbnR5cGUgQWJtU2VjdGlvbiA9ICdnZW5lcmFsJyB8ICdrbm93bGVkZ2UnIHwgJ3RyYWluaW5nJyB8ICd0ZXN0aW5nJyB8ICdhY2Nlc3NpYmlsaXR5JyB8ICdhY3Rpb25zJ1xuXG5leHBvcnQgY29uc3QgU2VjdGlvbkJ5S2V5ID0ge1xuICBnZW5lcmFsOiAocHJvcHM6IHtcbiAgICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlbGV0ZUtub3dsZWRnZSxcbiAgICB9OiB7XG4gICAgICBrZXk6IHN0cmluZ1xuICAgICAgdmFsdWU6IHVua25vd25cbiAgICAgIGRlbGV0ZUtub3dsZWRnZT86IGJvb2xlYW5cbiAgICB9KSA9PiB2b2lkXG4gICAgYWdlbnRNb2RlbHM6IEFnZW50TW9kZWxbXVxuICAgIGxvYWRpbmc6IGJvb2xlYW5cbiAgfSkgPT4gPEFibUdlbmVyYWxTZWN0aW9uIHsuLi5wcm9wc30gLz4sXG4gIGtub3dsZWRnZTogKHByb3BzOiB7XG4gICAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiAoeyBrZXksIHZhbHVlIH06IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pID0+IHZvaWRcbiAgICBleGlzdGluZ0tub3dsZWRnZTogQXR0YWNobWVudEZpbGVbXVxuICAgIG5ld0tub3dsZWRnZTogQXR0YWNobWVudEZpbGVbXVxuICAgIG9uUmVtb3ZlRXhpc3RpbmdLbm93bGVkZ2U6IChmaWxlSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uUmVtb3ZlTmV3S25vd2xlZGdlOiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkZpbGVFcnJvckNoYW5nZTogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICB9KSA9PiA8QWJtS25vd2xlZGdlU2VjdGlvbiB7Li4ucHJvcHN9IC8+LFxuICBhY2Nlc3NpYmlsaXR5OiAocHJvcHM6IHtcbiAgICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7IGtleSwgdmFsdWUgfTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT4gdm9pZFxuICB9KSA9PiA8QWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24gey4uLnByb3BzfSAvPixcbiAgYWN0aW9uczogKHByb3BzOiB7XG4gICAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiAoeyBrZXksIHZhbHVlIH06IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pID0+IHZvaWRcbiAgfSkgPT4gPEFibUFjdGlvbnNTZWN0aW9uVjIgey4uLnByb3BzfSAvPixcbn1cblxudHlwZSBBYm1BZ2VudE1vZGFsUHJvcHMgPSB7XG4gIGFkZEFnZW50OiAobmV3QWdlbnQ6IEFnZW50LCBvcHRpb25zPzogeyBuYXZpZ2F0ZUhvbWU/OiBib29sZWFuIH0pID0+IHZvaWRcbiAgcmVtb3ZlQWdlbnQ6IChhZ2VudElkOiBudW1iZXIgfCBzdHJpbmcpID0+IHZvaWRcbiAgdXBkYXRlQWdlbnQ6ICh1cGRhdGVkQWdlbnQ6IEFnZW50KSA9PiB2b2lkXG4gIHVwZGF0ZUFnZW50RmF2b3JpdGU6ICh1cGRhdGVkQWdlbnQ6IEFnZW50LCBzaG91bGRTb3J0PzogYm9vbGVhbikgPT4gdm9pZFxuICBzZWxlY3RGaXJzdEFnZW50OiAoYWdlbnRJZDogc3RyaW5nKSA9PiB2b2lkXG59XG5cbmNvbnN0IHZhbGlkYXRlRmllbGRWYWx1ZXMgPSAodmFsdWVUb1ZhbGlkYXRlOiBNb2RhbFZhbHVlcykgPT4ge1xuICBpZiAoIXZhbHVlVG9WYWxpZGF0ZS5nZW5lcmFsLm5hbWUgfHwgIXZhbHVlVG9WYWxpZGF0ZS5nZW5lcmFsLnVzZXJQcm9tcHQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKiogTWlzbWEgZXN0cnVjdHVyYSBxdWUgZWwgZWZlY3RvIHF1ZSBoaWRyYXRhIGRlc2RlIHVzZUdldEFnZW50QnlJZCAodG9kYXMgbGFzIHBlc3Rhw7FhcyBkZWwgQUJNKS4gKi9cbmZ1bmN0aW9uIGJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsKFxuICBhZ2VudEJ5SWQ6IGFueSxcbiAgYWdlbnRNb2RlbHM6IEFnZW50TW9kZWxbXSxcbiAgcHJldjogTW9kYWxWYWx1ZXNcbik6IE1vZGFsVmFsdWVzIHtcbiAgY29uc3QgYWdlbnRNb2RlbCA9IGFnZW50TW9kZWxzLmZpbmQobW9kZWwgPT4gbW9kZWwuaWQgPT09IGFnZW50QnlJZC5tb2RlbEFpSWQpXG4gIHJldHVybiB7XG4gICAgLi4ucHJldixcbiAgICBpc0VkaXRpbmc6IHRydWUsXG4gICAgZ2VuZXJhbDoge1xuICAgICAgZW1vamk6IGFnZW50QnlJZC5lbW9qaSxcbiAgICAgIG5hbWU6IGFnZW50QnlJZC5uYW1lLFxuICAgICAgaW50cm9kdWN0aW9uOiBhZ2VudEJ5SWQuaW50cm9kdWN0aW9uLFxuICAgICAgaW5wdXRQbGFjZWhvbGRlcjogYWdlbnRCeUlkLmlucHV0UGxhY2Vob2xkZXIsXG4gICAgICBpc0FjdGl2ZTogYWdlbnRCeUlkLmlzQWN0aXZlLFxuICAgICAgYWlNb2RlbDogYWdlbnRNb2RlbCB8fCBudWxsLFxuICAgICAgaWQ6IGFnZW50QnlJZC5pZCxcbiAgICAgIHVzZXJQcm9tcHQ6IGFnZW50QnlJZC51c2VyUHJvbXB0LFxuICAgICAga25vd2xlZGdlQmFzZXM6IFtdLFxuICAgICAgaXNfZmF2b3JpdGU6IGFnZW50QnlJZC5pc19mYXZvcml0ZSxcbiAgICAgIGNyZWF0ZWRfYnk6IGFnZW50QnlJZC5jcmVhdGVkQnksXG4gICAgfSxcbiAgICBrbm93bGVkZ2U6XG4gICAgICBhZ2VudEJ5SWQua25vd2xlZGdlQmFzZXM/Lm1hcCgoazogYW55KSA9PiAoe1xuICAgICAgICBmaWxlOiBuZXcgRmlsZShbXSwgay5maWxlbmFtZSksXG4gICAgICAgIGlkOiBrLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWU6IGsuZmlsZW5hbWUsXG4gICAgICAgIHNpemU6IGsuZmlsZV9zaXplX2J5dGVzIHx8IDAsXG4gICAgICAgIHR5cGU6IGsub3JpZ2luYWxfZmlsZV90eXBlLFxuICAgICAgICBzdGF0dXM6IGsuc3RhdHVzLFxuICAgICAgICB1cmxfb3JpZ2luYWw6IGsudXJsX29yaWdpbmFsIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX3RodW1ibmFpbDogay51cmxfdGh1bWJuYWlsIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pKSB8fCBbXSxcbiAgICBhY2Nlc3NpYmlsaXR5OiB7XG4gICAgICBhY2Nlc3NUeXBlOiBhZ2VudEJ5SWQuYWNjZXNzLFxuICAgICAgY2xpZW50czpcbiAgICAgICAgYWdlbnRCeUlkLmNsaWVudHM/Lm1hcCgoY2xpZW50OiBhbnkpID0+ICh7XG4gICAgICAgICAgaWQ6IGNsaWVudC5pZD8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICBuYW1lOiBjbGllbnQubmFtZSxcbiAgICAgICAgICBpc19hY3RpdmU6IGNsaWVudC5pc19hY3RpdmUgPz8gZmFsc2UsXG4gICAgICAgICAgaXNfZGVsZXRlZDogY2xpZW50LmlzX2RlbGV0ZWQgPz8gZmFsc2UsXG4gICAgICAgIH0pKSB8fCBudWxsLFxuICAgIH0sXG4gICAgYWN0aW9uczoge1xuICAgICAgc2VsZWN0ZWRUb29sR3JvdXBzOiBhZ2VudEJ5SWQudG9vbEdyb3VwU2x1Z3MgfHwgW10sXG4gICAgICBzZWxlY3RlZENvbm5lY3RvcnM6IFtdLFxuICAgIH0sXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEFibUFnZW50TW9kYWwgPSAoe1xuICBhZGRBZ2VudCxcbiAgdXBkYXRlQWdlbnQsXG4gIHJlbW92ZUFnZW50LFxuICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICBzZWxlY3RGaXJzdEFnZW50LFxufTogQWJtQWdlbnRNb2RhbFByb3BzKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oJ2FibV9hZ2VudF9zZWN0aW9uJylcbiAgLy8gY29uc3QgJF9zYzogYW55ID0gbnVsbFxuICBjb25zdCB7IGFnZW50OiBjdXJyZW50U2VsZWN0ZWRBZ2VudCwgc2VsZWN0QWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCB7IHRvZ2dsZUZhdm9yaXRlIH0gPSB1c2VUb2dnbGVGYXZvcml0ZSgpXG4gIGNvbnN0IHNlbGVjdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FibS1hZ2VudC1tb2RhbCcpXG4gIGNvbnN0IFtpc1N1YnNjcmliZWQsIHNldElzU3Vic2NyaWJlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgbW9kYWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNvbm5lY3RvckF1dGhQb3B1cFJlZiA9IHVzZVJlZjxXaW5kb3cgfCBudWxsPihudWxsKVxuICBjb25zdCBoYXNQZW5kaW5nRmlsZXNSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGFjdGlvbnNUb0ZpbGVzID0gdXNlUmVmPGFueT4oe1xuICAgIHRvRGVsZXRlOiBbXSxcbiAgICB0b1VwbG9hZDogW10sXG4gIH0pXG4gIGNvbnN0IGFjY2Vzc1VwZGF0ZUNvbnRleHQgPSB1c2VSZWY8e1xuICAgIGlzRnJvbUNyZWF0aW9uOiBib29sZWFuXG4gICAgaXNGcm9tRWRpdGluZzogYm9vbGVhblxuICAgIGhhc0FjdGlvbkZpbGVzOiBib29sZWFuXG4gICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScgfCAndXBkYXRlJyB8IG51bGxcbiAgICBoYXNCZWVuQ2FsbGVkPzogYm9vbGVhblxuICB9Pih7XG4gICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICB9KVxuICBjb25zdCBhY2Nlc3NIYW5kbGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBhZ2VudENyZWF0ZWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmID0gdXNlUmVmPEFibVNlY3Rpb24gfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nVHJpZ2dlclJlZiA9IHVzZVJlZjxQZW5kaW5nVHJpZ2dlclBheWxvYWQgfCBudWxsPihudWxsKVxuICBjb25zdCBwcmVmZXRjaGVkQWdlbnRCeUlkUmVmID0gdXNlUmVmPGFueT4obnVsbClcbiAgY29uc3QgZmlsZXNGaW5pc2hlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgLy8gTWFyY2EgY3VhbmRvIGNlcnJhbW9zIGVsIGxvYWRlciBwb3IgZWwgdGltZW91dCBkZSBzZWd1cmlkYWQgZGUgYXJjaGl2b3MuXG4gIC8vIE1pZW50cmFzIGVzdMOpIGFjdGl2bywgbG9zIHVzZUVmZmVjdCBkZSBwb3N0LWd1YXJkYWRvIE5PIGRlYmVuIGRpc3BhcmFyXG4gIC8vIHNuYWNrYmFycyBkZSDDqXhpdG8gbmkgYXV0by1jZXJyYXIgZWwgbW9kYWwuXG4gIGNvbnN0IHByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbZmlsZXNQcm9jZXNzZWQsIHNldEZpbGVzUHJvY2Vzc2VkXSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dNb2RhbERlbGV0ZSwgc2V0U2hvd01vZGFsRGVsZXRlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VjdGlvbiwgc2V0U2VjdGlvbl0gPSB1c2VTdGF0ZTxBYm1TZWN0aW9uPignZ2VuZXJhbCcpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGFsVmFsdWVzLCBzZXRNb2RhbFZhbHVlc10gPSB1c2VTdGF0ZTx7XG4gICAgZ2VuZXJhbDogYW55XG4gICAga25vd2xlZGdlOiBhbnlcbiAgICBpc0VkaXRpbmc6IGJvb2xlYW5cbiAgICBhY2Nlc3NpYmlsaXR5OiBhbnlcbiAgICBhY3Rpb25zOiBhbnlcbiAgfT4oaW5pdGlhbFZhbHVlcylcbiAgY29uc3Qge1xuICAgIGxvYWRpbmc6IGFnZW50TG9hZGluZyxcbiAgICBoYW5kbGVHZXRBZ2VudEJ5SWQsXG4gICAgYWdlbnQ6IGFnZW50QnlJZCxcbiAgICBoYW5kbGVDbGVhbkFnZW50LFxuICAgIGVycm9yOiBlcnJvckdldEFnZW50QnlJZCxcbiAgfSA9IHVzZUdldEFnZW50QnlJZCgpXG4gIGNvbnN0IHsgYWdlbnRNb2RlbHMsIGdldEFsbEFnZW50TW9kZWxzIH0gPSB1c2VBZ2VudE1vZGVsKClcbiAgY29uc3QgZmlyc3RWYWx1ZUFnZW50ID0gdXNlUmVmPGFueT4obnVsbClcbiAgY29uc3QgW2lzU2hvd1Byb2Nlc3NGaWxlcywgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaGFzRmlsZUVycm9ycywgc2V0SGFzRmlsZUVycm9yc10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG5cbiAgY29uc3QgeyBoYW5kbGVEZWxldGVBZ2VudCwgc3VjY2Vzczogc3VjY2Vzc0RlbGV0ZSwgcmVzZXRTdWNjZXNzIH0gPSB1c2VEZWxldGVBZ2VudCgpXG4gIGNvbnN0IHsgaGFuZGxlVXBkYXRlQWdlbnQsIHN1Y2Nlc3M6IHN1Y2Nlc3NVcGRhdGUsIHJlc2V0U3VjY2VzczogcmVzZXRTdWNjZXNzVXBkYXRlIH0gPSB1c2VVcGRhdGVBZ2VudCgpXG5cbiAgY29uc3Qge1xuICAgIGhhbmRsZUNyZWF0ZUFnZW50LFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nQ3JlYXRlLFxuICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NDcmVhdGUsXG4gICAgcmVzZXRTdWNjZXNzOiByZXNldFN1Y2Nlc3NDcmVhdGUsXG4gIH0gPSB1c2VDcmVhdGVBZ2VudCgpXG5cbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhclN1Y2Nlc3MsIGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG5cbiAgY29uc3Qge1xuICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVBbmRDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nS25vd2xlZGdlLFxuICAgIGVycm9yOiBlcnJvcktub3dsZWRnZSxcbiAgICBzdWNjZXNzRGVsZXRlOiBzdWNjZXNzS25vd2xlZGdlRGVsZXRlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICB9ID0gdXNlS25vd2xlZGdlT3BlcmF0aW9ucygpXG5cbiAgY29uc3Qge1xuICAgIGhhbmRsZUFjY2Vzc0NsaWVudCxcbiAgICBzdWNjZXNzOiBzdWNjZXNzVXBkYXRlQWNjZXNzLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nVXBkYXRlQWNjZXNzLFxuICAgIGhhbmRsZVJlc2V0U3VjY2VzczogcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzLFxuICB9ID0gdXNlQWNjZXNzQ2xpZW50KClcblxuICBpZiAoIXNlbGVjdG9yKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGFyZUNsaWVudHNBcnJheXNFcXVhbCA9IChjbGllbnRzMTogYW55W10gfCBudWxsLCBjbGllbnRzMjogYW55W10gfCBudWxsKSA9PiB7XG4gICAgaWYgKCFjbGllbnRzMSAmJiAhY2xpZW50czIpIHJldHVybiB0cnVlXG4gICAgaWYgKCFjbGllbnRzMSB8fCAhY2xpZW50czIpIHJldHVybiBmYWxzZVxuICAgIGlmIChjbGllbnRzMS5sZW5ndGggIT09IGNsaWVudHMyLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBjbGllbnRzMUlkcyA9IGNsaWVudHMxLm1hcChjID0+IGMuY2xpZW50SWQpLnNvcnQoKVxuICAgIGNvbnN0IGNsaWVudHMySWRzID0gY2xpZW50czIubWFwKGMgPT4gYy5jbGllbnRJZCkuc29ydCgpXG5cbiAgICByZXR1cm4gY2xpZW50czFJZHMuZXZlcnkoKGlkLCBpbmRleCkgPT4gaWQgPT09IGNsaWVudHMySWRzW2luZGV4XSlcbiAgfVxuXG4gIGNvbnN0IGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkID0gKCkgPT4ge1xuICAgIGlmICghZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/LmFjY2Vzc2liaWxpdHkgfHwgIW1vZGFsVmFsdWVzPy5hY2Nlc3NpYmlsaXR5KSByZXR1cm4gdHJ1ZVxuXG4gICAgY29uc3QgYWNjZXNzVHlwZVNhbWUgPSBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZVxuICAgIGNvbnN0IGNsaWVudHNTYW1lID0gYXJlQ2xpZW50c0FycmF5c0VxdWFsKFxuICAgICAgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5jbGllbnRzLFxuICAgICAgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuYWNjZXNzaWJpbGl0eS5jbGllbnRzXG4gICAgKVxuXG4gICAgcmV0dXJuICFhY2Nlc3NUeXBlU2FtZSB8fCAhY2xpZW50c1NhbWVcbiAgfVxuXG4gIGNvbnN0IGhhc0FjdGlvbnNDaGFuZ2VkID0gKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRBY3Rpb25zID0gWy4uLihtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZFRvb2xHcm91cHMgfHwgW10pXS5zb3J0KClcbiAgICBjb25zdCBvcmlnaW5hbEFjdGlvbnMgPSBbLi4uKGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50Py5hY3Rpb25zPy5zZWxlY3RlZFRvb2xHcm91cHMgfHwgW10pXS5zb3J0KClcblxuICAgIGlmIChjdXJyZW50QWN0aW9ucy5sZW5ndGggIT09IG9yaWdpbmFsQWN0aW9ucy5sZW5ndGgpIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gY3VycmVudEFjdGlvbnMuc29tZSgoc2x1ZywgaW5kZXgpID0+IHNsdWcgIT09IG9yaWdpbmFsQWN0aW9uc1tpbmRleF0pXG4gIH1cblxuICBjb25zdCBoYXNDb25uZWN0b3JDaGFuZ2VzID0gKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRDb25uZWN0b3JzID0gWy4uLihtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZENvbm5lY3RvcnMgfHwgW10pXS5zb3J0KClcbiAgICBjb25zdCBvcmlnaW5hbENvbm5lY3RvcnMgPSBbLi4uKGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50Py5hY3Rpb25zPy5zZWxlY3RlZENvbm5lY3RvcnMgfHwgW10pXS5zb3J0KClcblxuICAgIGlmIChjdXJyZW50Q29ubmVjdG9ycy5sZW5ndGggIT09IG9yaWdpbmFsQ29ubmVjdG9ycy5sZW5ndGgpIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gY3VycmVudENvbm5lY3RvcnMuc29tZSgoc2x1ZywgaW5kZXgpID0+IHNsdWcgIT09IG9yaWdpbmFsQ29ubmVjdG9yc1tpbmRleF0pXG4gIH1cblxuICBjb25zdCBwZXJzaXN0QWdlbnRDb25uZWN0b3JzID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGFnZW50SWQ6IHN0cmluZywgY29ubmVjdG9yU2x1Z3M6IHN0cmluZ1tdLCBwb3B1cFdpbmRvdz86IFdpbmRvdyB8IG51bGwpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2F2ZUFnZW50Q29ubmVjdG9ycyhhZ2VudElkLCBjb25uZWN0b3JTbHVncylcbiAgICAgIGNvbnN0IHBlbmRpbmdBdXRob3JpemF0aW9ucyA9IHJlc3BvbnNlLnJlcXVpcmVzX2F1dGggfHwgW11cblxuICAgICAgb3BlbkNvbm5lY3RvckF1dGhvcml6YXRpb25XaW5kb3dzKHBlbmRpbmdBdXRob3JpemF0aW9ucywgcG9wdXBXaW5kb3cpXG4gICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3QgdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSA9ICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VmFsdWVBZ2VudC5jdXJyZW50Py5nZW5lcmFsIHx8ICFtb2RhbFZhbHVlcz8uZ2VuZXJhbCkgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gKFxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5uYW1lID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLm5hbWUgJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuZW1vamkgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwuZW1vamkgJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaW50cm9kdWN0aW9uID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLmludHJvZHVjdGlvbiAmJlxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIgJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuYWlNb2RlbD8uaWQgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwuYWlNb2RlbD8uaWQgJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC51c2VyUHJvbXB0ICYmXG4gICAgICAhaGFzQWN0aW9uc0NoYW5nZWQoKSAmJlxuICAgICAgIWhhc0Nvbm5lY3RvckNoYW5nZXMoKSAmJlxuICAgICAgKG1vZGFsVmFsdWVzLmtub3dsZWRnZT8ubGVuZ3RoID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudD8ua25vd2xlZGdlPy5sZW5ndGggfHxcbiAgICAgICAgKCFtb2RhbFZhbHVlcy5rbm93bGVkZ2U/Lmxlbmd0aCAmJiAhZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/Lmtub3dsZWRnZT8ubGVuZ3RoKSkgJiZcbiAgICAgICFhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBkYXRlPy5sZW5ndGggJiZcbiAgICAgICFhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlPy5sZW5ndGggJiZcbiAgICAgICFoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFzQW55VmFsdWVGb3JDcmVhdGlvbiA9ICgpID0+IHtcbiAgICBpZiAobW9kYWxWYWx1ZXMuaXNFZGl0aW5nKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGlzRGVmYXVsdEFpTW9kZWwgPSAhIWFnZW50TW9kZWxzLmxlbmd0aCAmJiBtb2RhbFZhbHVlcy5nZW5lcmFsLmFpTW9kZWw/LmlkID09PSBhZ2VudE1vZGVsc1swXT8uaWRcblxuICAgIGNvbnN0IGRlZmF1bHRJbnB1dFBsYWNlaG9sZGVyID0gdCgnZ2VuZXJhbFNlY3Rpb24uaW5wdXRQbGFjZWhvbGRlcicpXG4gICAgY29uc3QgaXNEZWZhdWx0SW5wdXRQbGFjZWhvbGRlciA9IG1vZGFsVmFsdWVzLmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlciA9PT0gZGVmYXVsdElucHV0UGxhY2Vob2xkZXJcblxuICAgIGNvbnN0IGRlZmF1bHRVc2VyUHJvbXB0UGxhY2Vob2xkZXIgPSB0KCdnZW5lcmFsU2VjdGlvbi5pbml0aWFsUHJvbXB0UGxhY2Vob2xkZXInKVxuICAgIGNvbnN0IGlzRGVmYXVsdFVzZXJQcm9tcHQgPVxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC51c2VyUHJvbXB0ID09PSBkZWZhdWx0VXNlclByb21wdFBsYWNlaG9sZGVyIHx8XG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09ICcnIHx8XG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09IG51bGxcblxuICAgIGNvbnN0IGhhc05hbWUgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLm5hbWUudHJpbSgpICE9PSAnJ1xuICAgIGNvbnN0IGhhc0Vtb2ppID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5lbW9qaS50cmltKCkgIT09ICcnXG4gICAgY29uc3QgaGFzSW50cm9kdWN0aW9uID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pbnRyb2R1Y3Rpb24udHJpbSgpICE9PSAnJ1xuICAgIGNvbnN0IGhhc0lucHV0UGxhY2Vob2xkZXIgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIudHJpbSgpICE9PSAnJyAmJiAhaXNEZWZhdWx0SW5wdXRQbGFjZWhvbGRlclxuICAgIGNvbnN0IGhhc1VzZXJQcm9tcHQgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQ/LnRyaW0oKSAhPT0gJycgJiYgIWlzRGVmYXVsdFVzZXJQcm9tcHRcbiAgICBjb25zdCBoYXNLbm93bGVkZ2UgPSAhIW1vZGFsVmFsdWVzLmtub3dsZWRnZS5sZW5ndGhcbiAgICBjb25zdCBoYXNDdXN0b21BaU1vZGVsID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5haU1vZGVsICYmICFpc0RlZmF1bHRBaU1vZGVsXG4gICAgY29uc3QgaGFzQWNjZXNzaWJpbGl0eSA9IG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknXG4gICAgY29uc3QgaGFzQWN0aW9ucyA9ICEhbW9kYWxWYWx1ZXMuYWN0aW9ucz8uc2VsZWN0ZWRUb29sR3JvdXBzPy5sZW5ndGhcbiAgICBjb25zdCBoYXNDb25uZWN0b3JzID0gISFtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZENvbm5lY3RvcnM/Lmxlbmd0aFxuXG4gICAgcmV0dXJuIChcbiAgICAgIGhhc05hbWUgfHxcbiAgICAgIGhhc0Vtb2ppIHx8XG4gICAgICBoYXNJbnRyb2R1Y3Rpb24gfHxcbiAgICAgIGhhc0lucHV0UGxhY2Vob2xkZXIgfHxcbiAgICAgIGhhc1VzZXJQcm9tcHQgfHxcbiAgICAgIGhhc0tub3dsZWRnZSB8fFxuICAgICAgaGFzQ3VzdG9tQWlNb2RlbCB8fFxuICAgICAgaGFzQWNjZXNzaWJpbGl0eSB8fFxuICAgICAgaGFzQWN0aW9ucyB8fFxuICAgICAgaGFzQ29ubmVjdG9yc1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhc0NoYW5nZXNGb3JFZGl0aW5nID0gKCkgPT4ge1xuICAgIGlmICghbW9kYWxWYWx1ZXMuaXNFZGl0aW5nKSByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiAoXG4gICAgICAhdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSgpIHx8XG4gICAgICAhIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUubGVuZ3RoIHx8XG4gICAgICAhIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFzUGVuZGluZ0NoYW5nZXMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGhhc0FueVZhbHVlRm9yQ3JlYXRpb24oKSB8fCBoYXNDaGFuZ2VzRm9yRWRpdGluZygpXG4gIH1cblxuICAvLyBIZWxwZXIgcGFyYSBtYW5lamFyIGVsIHRvZ2dsZSBkZSBmYXZvcml0byB5IGFjdHVhbGl6YXIgZWwgZXN0YWRvIGNvbiBvcmRlbmFtaWVudG9cbiAgY29uc3QgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudCA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudElkOiBzdHJpbmcsIGFnZW50OiBBZ2VudCwgb25TdWNjZXNzPzogKHVwZGF0ZWRBZ2VudDogQWdlbnQpID0+IHZvaWQsIG9uRXJyb3I/OiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICB0b2dnbGVGYXZvcml0ZShcbiAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgdXBkYXRlZEFnZW50ID0+IHtcbiAgICAgICAgICAvLyBBY3R1YWxpemFyIGVsIGVzdGFkbyBkZSBhZ2VudGVzIGNvbiBlbCByZXN1bHRhZG8gZGVsIHNlcnZpZG9yIHkgb3JkZW5hclxuICAgICAgICAgIHVwZGF0ZUFnZW50RmF2b3JpdGUodXBkYXRlZEFnZW50LCB0cnVlKVxuICAgICAgICAgIGlmIChvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIG9uU3VjY2Vzcyh1cGRhdGVkQWdlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgICAgIG9uRXJyb3IoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYWdlbnQuaXNfZmF2b3JpdGVcbiAgICAgIClcbiAgICB9LFxuICAgIFt0b2dnbGVGYXZvcml0ZSwgdXBkYXRlQWdlbnRGYXZvcml0ZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKHNraXBDb25maXJtYXRpb24gPSBmYWxzZSkgPT4ge1xuICAgIGlmICghc2tpcENvbmZpcm1hdGlvbiAmJiBoYXNQZW5kaW5nQ2hhbmdlcygpICYmICFzdWNjZXNzQ3JlYXRlICYmICFzdWNjZXNzVXBkYXRlICYmICFzdWNjZXNzRGVsZXRlKSB7XG4gICAgICBjb25zdCBjb25maXJtTWVzc2FnZSA9IG1vZGFsVmFsdWVzLmlzRWRpdGluZyA/IHQoJ2NvbmZpcm1DbG9zZUVkaXRBZ2VudCcpIDogdCgnY29uZmlybUNsb3NlQ3JlYXRlQWdlbnQnKVxuXG4gICAgICBpZiAoIXdpbmRvdy5jb25maXJtKGNvbmZpcm1NZXNzYWdlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRNb2RhbFZhbHVlcyhpbml0aWFsVmFsdWVzKVxuICAgIGhhbmRsZUNsZWFuQWdlbnQoKVxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUoKVxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50ID0ge1xuICAgICAgdG9EZWxldGU6IFtdLFxuICAgICAgdG9VcGxvYWQ6IFtdLFxuICAgIH1cbiAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICB9XG4gICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKGZhbHNlKVxuICAgIHNldElzU3Vic2NyaWJlZChmYWxzZSlcbiAgICBzZXRGaWxlc1Byb2Nlc3NlZCgwKVxuICAgIHNldFNlY3Rpb24oJ2dlbmVyYWwnKVxuICAgIHNldElzT3BlbihmYWxzZSlcbiAgICBhZ2VudENyZWF0ZWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCA9IG51bGxcbiAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICBwZW5kaW5nVHJpZ2dlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmICFpc1Nob3dQcm9jZXNzRmlsZXMpIHtcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVTZWN0aW9uQ2hhbmdlID0gKG5ld1NlY3Rpb246IEFibVNlY3Rpb24pID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMudGFiU2VjdGlvbiwgeyBvcHRpb246IG5ld1NlY3Rpb24gfSlcbiAgICBzZXRTZWN0aW9uKG5ld1NlY3Rpb24pXG4gIH1cblxuICBjb25zdCBoYW5kbGVTZXRBZ2VudFZhbHVlc0J5S2V5cyA9ICh7XG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgIGRlbGV0ZUtub3dsZWRnZSxcbiAgfToge1xuICAgIGtleTogc3RyaW5nXG4gICAgdmFsdWU6IHVua25vd25cbiAgICBkZWxldGVLbm93bGVkZ2U/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICBpZiAoa2V5ID09PSAna25vd2xlZGdlJykge1xuICAgICAgY29uc3QgbmV4dEtub3dsZWRnZSA9ICh2YWx1ZSBhcyBBdHRhY2htZW50RmlsZVtdIHwgdW5kZWZpbmVkKSB8fCBbXVxuICAgICAgaWYgKCFkZWxldGVLbm93bGVkZ2UpIHtcbiAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5wdXNoKC4uLm5leHRLbm93bGVkZ2UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmaWxlc1ByZXZJZHMgPSBuZXh0S25vd2xlZGdlLmxlbmd0aCA/IG5ldyBTZXQobmV4dEtub3dsZWRnZS5tYXAoZmlsZSA9PiBmaWxlLmlkKSkgOiBuZXcgU2V0KClcbiAgICAgICAgY29uc3QgbmV3RmlsZXMgPSBtb2RhbFZhbHVlcy5rbm93bGVkZ2UuZmlsdGVyKGZpbGUgPT4gIWZpbGVzUHJldklkcy5oYXMoZmlsZS5pZCkgJiYgZmlsZS5zdGF0dXMgIT09ICdzdGFydGVkJylcbiAgICAgICAgaWYgKCFuZXdGaWxlcy5sZW5ndGggJiYgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZUlkcyA9IG5ldyBTZXQobmV4dEtub3dsZWRnZS5tYXAoZmlsZSA9PiBmaWxlLmlkKSlcbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5maWx0ZXIoZmlsZSA9PiB2YWx1ZUlkcy5oYXMoZmlsZS5pZCkpXG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSA9IFsuLi4oYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSB8fCBbXSksIC4uLm5ld0ZpbGVzXVxuICAgICAgfVxuICAgIH1cbiAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IGtub3dsZWRnZUZpbGVzID1cbiAgICAgICAga2V5ID09PSAna25vd2xlZGdlJ1xuICAgICAgICAgID8gZGVsZXRlS25vd2xlZGdlXG4gICAgICAgICAgICA/ICh2YWx1ZSBhcyBBdHRhY2htZW50RmlsZVtdKVxuICAgICAgICAgICAgOiBbLi4uKHByZXYua25vd2xlZGdlIHx8IFtdKSwgLi4uKCh2YWx1ZSBhcyBBdHRhY2htZW50RmlsZVtdKSB8fCBbXSldXG4gICAgICAgICAgOiBudWxsXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICAuLi4oa2V5ID09PSAna25vd2xlZGdlJ1xuICAgICAgICAgID8geyBrbm93bGVkZ2U6IGtub3dsZWRnZUZpbGVzIH1cbiAgICAgICAgICA6IGtleSA9PT0gJ2FjY2Vzc2liaWxpdHknXG4gICAgICAgICAgICA/IHsgYWNjZXNzaWJpbGl0eTogdmFsdWUgfVxuICAgICAgICAgICAgOiBrZXkgPT09ICdhY3Rpb25zJ1xuICAgICAgICAgICAgICA/IHsgYWN0aW9uczogdmFsdWUgfVxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgICAgICAgICAgICBba2V5XTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVDb25maXJtQWN0aW9uID0gYXN5bmMgKGNoYXQ6IGFueSwgYWN0aW9uOiAnZGVsZXRlJyB8ICd1cGRhdGUnIHwgJ2NyZWF0ZScpID0+IHtcbiAgICAvLyBTb2xvIHBlcm1pdGlyIG9wZXJhY2lvbmVzIGRlIGFnZW50ZXMgY3VzdG9tIHNpIGxhIGZlYXR1cmUgZmxhZyBlc3TDoSBoYWJpbGl0YWRhXG4gICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5kZWxldGUpXG4gICAgICBoYW5kbGVEZWxldGVBZ2VudChjaGF0LmlkIGFzIHVua25vd24gYXMgc3RyaW5nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5jb25maXJtQWN0aW9uLCB7IG9wdGlvbjogbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gJ2VkaXRlJyA6ICdjcmVhdGUnIH0pXG4gICAgaWYgKG1vZGFsVmFsdWVzLmFjdGlvbnM/LnNlbGVjdGVkQ29ubmVjdG9ycz8ubGVuZ3RoKSB7XG4gICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCA9IHdpbmRvdy5vcGVuKCcnLCAnX2JsYW5rJywgJ3BvcHVwPXllcyx3aWR0aD01NjAsaGVpZ2h0PTc2MCcpXG4gICAgfVxuICAgIC8vIEFsIHJlaW50ZW50YXIgZ3VhcmRhciwgbGliZXJhciBlbCBmcmVubyBkZWwgdGltZW91dCBwcmV2aW8gcGFyYSBxdWUgbG9zXG4gICAgLy8gdXNlRWZmZWN0IGRlIHBvc3QtZ3VhcmRhZG8gdnVlbHZhbiBhIHBvZGVyIGRpc3BhcmFyIHNuYWNrYmFycyB5IGNlcnJhci5cbiAgICBwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBpZiAobW9kYWxWYWx1ZXMuaXNFZGl0aW5nKSB7XG4gICAgICBjb25zdCBjb25uZWN0b3JDaGFuZ2VzID0gaGFzQ29ubmVjdG9yQ2hhbmdlcygpXG5cbiAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkICYmIGNvbm5lY3RvckNoYW5nZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBwZXJzaXN0QWdlbnRDb25uZWN0b3JzKFxuICAgICAgICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgbW9kYWxWYWx1ZXMuYWN0aW9ucz8uc2VsZWN0ZWRDb25uZWN0b3JzIHx8IFtdLFxuICAgICAgICAgICAgY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnRcbiAgICAgICAgICApXG4gICAgICAgICAgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICAuLi5maXJzdFZhbHVlQWdlbnQuY3VycmVudCxcbiAgICAgICAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgICAgICAgLi4uZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/LmFjdGlvbnMsXG4gICAgICAgICAgICAgIHNlbGVjdGVkQ29ubmVjdG9yczogWy4uLihtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZENvbm5lY3RvcnMgfHwgW10pXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnZXJyb3JBZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgICBpZiAoY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQgJiYgIWNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50LmNsb3NlZCkge1xuICAgICAgICAgICAgY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQuY2xvc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCAmJiAhY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQuY2xvc2VkKSB7XG4gICAgICAgIGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50LmNsb3NlKClcbiAgICAgICAgY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSgpKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZVVwZGF0ZUFnZW50KG1vZGFsVmFsdWVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbm5lY3RvckNoYW5nZXMpIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWQnKSlcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBoYW5kbGVDcmVhdGVBZ2VudChtb2RhbFZhbHVlcylcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNldEFnZW50VmFsdWVzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnRWYWx1ZXMgfSA9IGV2ZW50LmRldGFpbFxuICAgICAgY29uc3QgaW5pdGlhbFNlY3Rpb24gPSBhZ2VudFZhbHVlcz8uaW5pdGlhbFNlY3Rpb24gYXMgQWJtU2VjdGlvbiB8IHVuZGVmaW5lZFxuICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPVxuICAgICAgICBpbml0aWFsU2VjdGlvbiAmJiBbJ2dlbmVyYWwnLCAna25vd2xlZGdlJywgJ2FjY2Vzc2liaWxpdHknLCAnYWN0aW9ucyddLmluY2x1ZGVzKGluaXRpYWxTZWN0aW9uKVxuICAgICAgICAgID8gaW5pdGlhbFNlY3Rpb25cbiAgICAgICAgICA6IG51bGxcblxuICAgICAgZ2V0QWxsQWdlbnRNb2RlbHMoKVxuICAgICAgc2V0SXNPcGVuKHRydWUpXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcblxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYWdlbnRWYWx1ZXMudmFsdWVzPy5pc0VkaXRpbmcpIHtcbiAgICAgICAgLy8gVmFsaWRhciBxdWUgbGEgZmVhdHVyZSBmbGFnIGVzdMOpIGhhYmlsaXRhZGEgYW50ZXMgZGUgY2FyZ2FyIGVsIGFnZW50ZSBwYXJhIGVkaXRhclxuICAgICAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFjY2Vzc0RlbmllZCcpKVxuICAgICAgICAgIHNldElzT3BlbihmYWxzZSlcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChhZ2VudFZhbHVlcy5wcmVmZXRjaGVkQWdlbnRCeUlkKSB7XG4gICAgICAgICAgaGFuZGxlQ2xlYW5BZ2VudCgpXG4gICAgICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gYWdlbnRWYWx1ZXMucHJlZmV0Y2hlZEFnZW50QnlJZFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGhhbmRsZUdldEFnZW50QnlJZChhZ2VudFZhbHVlcz8udmFsdWVzPy5nZW5lcmFsPy5pZCBhcyB1bmtub3duIGFzIHN0cmluZylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChhZ2VudFZhbHVlcy52YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlcyA9IHtcbiAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLFxuICAgICAgICAgIC4uLmFnZW50VmFsdWVzLnZhbHVlcyxcbiAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLmdlbmVyYWwsXG4gICAgICAgICAgICAuLi4oYWdlbnRWYWx1ZXMudmFsdWVzLmdlbmVyYWwgfHwge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgICAgICAgLi4uaW5pdGlhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LFxuICAgICAgICAgICAgLi4uKGFnZW50VmFsdWVzLnZhbHVlcy5hY2Nlc3NpYmlsaXR5IHx8IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLmluaXRpYWxWYWx1ZXMuYWN0aW9ucyxcbiAgICAgICAgICAgIC4uLihhZ2VudFZhbHVlcy52YWx1ZXMuYWN0aW9ucyB8fCB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBrbm93bGVkZ2U6IGFnZW50VmFsdWVzLnZhbHVlcy5rbm93bGVkZ2UgfHwgW10sXG4gICAgICAgIH1cblxuICAgICAgICBmaXJzdFZhbHVlQWdlbnQuY3VycmVudCA9IG5leHRWYWx1ZXNcbiAgICAgICAgc2V0TW9kYWxWYWx1ZXMobmV4dFZhbHVlcylcbiAgICAgIH1cblxuICAgICAgaWYgKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ICYmICFhZ2VudFZhbHVlcy52YWx1ZXM/LmlzRWRpdGluZykge1xuICAgICAgICBzZXRTZWN0aW9uKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50KVxuICAgICAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIGhhbmRsZVNldEFnZW50VmFsdWVzKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIGhhbmRsZVNldEFnZW50VmFsdWVzIGFzIEV2ZW50TGlzdGVuZXIpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyB1c2VFZmZlY3QgdG8gaGFuZGxlIHRoZSBvdmVyZmxvdyBvZiB0aGUgYm9keSB3aGVuIHRoZSBtb2RhbCBpcyBvcGVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxPdmVyZmxvdyA9IGJvZHkuc3R5bGUub3ZlcmZsb3dcbiAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gb3JpZ2luYWxPdmVyZmxvd1xuICAgIH1cbiAgfSwgW2lzT3Blbl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVCZWZvcmVVbmxvYWQgPSAoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IHQoJ2NvbmZpcm1SZWxvYWRCcm93c2VyJylcbiAgICAgICAgcmV0dXJuIHQoJ2NvbmZpcm1SZWxvYWRCcm93c2VyJylcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgaGFuZGxlQmVmb3JlVW5sb2FkKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgaGFuZGxlQmVmb3JlVW5sb2FkKVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgaGFzUGVuZGluZ0NoYW5nZXMsIHRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN1Y2Nlc3NEZWxldGUpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnREZWxldGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3MoKVxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCA9PT0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCkge1xuICAgICAgICBzZWxlY3RGaXJzdEFnZW50KGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCBhcyBzdHJpbmcpXG4gICAgICB9XG4gICAgICByZW1vdmVBZ2VudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKVxuICAgICAgc2V0U2hvd01vZGFsRGVsZXRlKGZhbHNlKVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH1cbiAgfSwgW3N1Y2Nlc3NEZWxldGVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRXZpdGFyIGVqZWN1Y2nDs24gbcO6bHRpcGxlIGRlbCBlZmVjdG9cbiAgICBpZiAoc3VjY2Vzc0NyZWF0ZSAmJiAhaXNMb2FkaW5nQ3JlYXRlICYmIGFnZW50Q3JlYXRlZFJlZi5jdXJyZW50ICE9PSBzdWNjZXNzQ3JlYXRlLmlkKSB7XG4gICAgICBhZ2VudENyZWF0ZWRSZWYuY3VycmVudCA9IHN1Y2Nlc3NDcmVhdGUuaWRcbiAgICAgIGlmIChtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZENvbm5lY3RvcnM/Lmxlbmd0aCkge1xuICAgICAgICBwZXJzaXN0QWdlbnRDb25uZWN0b3JzKFxuICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBtb2RhbFZhbHVlcy5hY3Rpb25zLnNlbGVjdGVkQ29ubmVjdG9ycyxcbiAgICAgICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudFxuICAgICAgICApLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgYWdlbnQgY29ubmVjdG9ycyBhZnRlciBjcmVhdGU6JywgZXJyb3IpXG4gICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFnZW50Q3JlYXRlZCcpKVxuICAgICAgICAgIGlmIChjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCAmJiAhY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQuY2xvc2VkKSB7XG4gICAgICAgICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudC5jbG9zZSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCAmJiAhY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQuY2xvc2VkKSB7XG4gICAgICAgIGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50LmNsb3NlKClcbiAgICAgICAgY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgICBpZiAocGVuZGluZ1RyaWdnZXJSZWYuY3VycmVudCkge1xuICAgICAgICBjcmVhdGVTY2hlZHVsZSh7IC4uLnBlbmRpbmdUcmlnZ2VyUmVmLmN1cnJlbnQsIGFnZW50X2V4dGVybmFsX2lkOiBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCkgfSkuY2F0Y2goZXJyID0+XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY3JlYXRpbmcgcGVuZGluZyB0cmlnZ2VyOicsIGVycilcbiAgICAgICAgKVxuICAgICAgICBwZW5kaW5nVHJpZ2dlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUubGVuZ3RoICYmIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBhY2Nlc2liaWxpZGFkIHBlcm8gaGF5IGFyY2hpdm9zLCBlc3RhYmxlY2VyIGVsIGNvbnRleHRvIHBhcmEgY3JlYWNpw7NuXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICBmaWxlc1RvRGVsZXRlOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLFxuICAgICAgICAgICAgZmlsZXNUb0NyZWF0ZTogYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZCxcbiAgICAgICAgICAgIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuXG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVybyBoYXkgYXJjaGl2b3MsIGVzdGFibGVjZXIgZWwgY29udGV4dG8gcGFyYSBjcmVhY2nDs25cbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtcbiAgICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBhY2Nlc2liaWxpZGFkIHBlcm8gaGF5IGFyY2hpdm9zLCBlc3RhYmxlY2VyIGVsIGNvbnRleHRvIHBhcmEgY3JlYWNpw7NuXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyh7IGZpbGVzOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLCBhZ2VudElkOiBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCkgfSksXG4gICAgICAgIF1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlICE9PSAnY29tcGFueScpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKGhhbmRsZUFjY2Vzc0NsaWVudChzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaXNfZmF2b3JpdGUpIHtcbiAgICAgICAgICBjb25zdCBhZ2VudFdpdGhGYXZvcml0ZSA9IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfVxuICAgICAgICAgIGFkZEFnZW50KGFnZW50V2l0aEZhdm9yaXRlKVxuICAgICAgICAgIC8vIEN1YW5kbyBzZSBjcmVhIHVuIGFnZW50ZSBudWV2bywgZWwgc2Vydmlkb3Igbm8gdGllbmUgZWwgZmF2b3JpdG8gbWFyY2FkbyBhw7puXG4gICAgICAgICAgLy8gRW50b25jZXMgY3VycmVudElzRmF2b3JpdGUgZGViZSBzZXIgZmFsc2UgcGFyYSBxdWUgZWwgdG9nZ2xlIGxvIG1hcnF1ZSBjb21vIHRydWVcbiAgICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiBmYWxzZSB9XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudChcbiAgICAgICAgICAgICAgICBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgYWdlbnRGb3JUb2dnbGUsXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVzb2x2ZSgpLFxuICAgICAgICAgICAgICAgICgpID0+IHJlamVjdCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZEFnZW50KHN1Y2Nlc3NDcmVhdGUpXG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyh0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAvLyBTb2xvIHJlc2V0ZWFyIGVsIGNvbnRleHRvIHNpIE5PIHNlIGhhIGxsYW1hZG8gdG9kYXbDrWFcbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgIGNvbnN0IHsgaGFzQWN0aW9uRmlsZXMgfSA9IGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudFxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogaGFzQWN0aW9uRmlsZXMgfHwgZmFsc2UsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0JlZW5DYWxsZWQpIHtcbiAgICAgICAgICBoYW5kbGVBY2Nlc3NDbGllbnQoc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KVxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBoYW5kbGVBY2Nlc3NDbGllbnQsIGVsIGFnZW50ZSBzZSBhZ3JlZ2Fyw6EgeSBlbCB0b2dnbGUgc2UgaGFyw6EgZW4gc3VjY2Vzc1VwZGF0ZUFjY2Vzc1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGZhdm9yaXRlIGlmIGl0IHdhcyBtYXJrZWQgZHVyaW5nIGNyZWF0aW9uXG4gICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAvLyBQcmltZXJvIGFncmVnYXIgZWwgYWdlbnRlIGEgbGEgbGlzdGEgKGFkZEFnZW50IHlhIG9yZGVuYSlcbiAgICAgICAgY29uc3QgYWdlbnRXaXRoRmF2b3JpdGUgPSB7IC4uLnN1Y2Nlc3NDcmVhdGUsIGlzX2Zhdm9yaXRlOiB0cnVlIH1cbiAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG5cbiAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgLy8gRW50b25jZXMgY3VycmVudElzRmF2b3JpdGUgZGViZSBzZXIgZmFsc2UgcGFyYSBxdWUgZWwgdG9nZ2xlIGxvIG1hcnF1ZSBjb21vIHRydWVcbiAgICAgICAgY29uc3QgYWdlbnRGb3JUb2dnbGUgPSB7IC4uLmFnZW50V2l0aEZhdm9yaXRlLCBpc19mYXZvcml0ZTogZmFsc2UgfVxuICAgICAgICAvLyBMdWVnbyBoYWNlciBlbCB0b2dnbGUgZGUgZmF2b3JpdG8gZW4gZWwgc2Vydmlkb3IgeSBhY3R1YWxpemFyIGVsIGVzdGFkb1xuICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICB1cGRhdGVkQWdlbnQgPT4ge1xuICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7IG9wdGlvbjogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlID8gJ2FkZCcgOiAncmVtb3ZlJyB9KVxuICAgICAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgICAgIHNlbGVjdEFnZW50KHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiB1cGRhdGVkQWdlbnQuaXNfZmF2b3JpdGUgfSlcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7IG9wdGlvbjogJ2FkZCcgfSlcbiAgICAgICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFdpdGhGYXZvcml0ZSlcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGlzTG9hZGluZ0NyZWF0ZSxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2VzcyxcbiAgICB0LFxuICAgIGFkZEFnZW50LFxuICAgIHNlbGVjdEFnZW50LFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgICByZXNldFN1Y2Nlc3NDcmVhdGUsXG4gICAgaGFuZGxlQ2xvc2UsXG4gICAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzVXBkYXRlKSB7XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGggJiYgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlXVxuICAgICAgICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBbLi4uYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZF1cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlID0gW11cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gW11cblxuICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMoe1xuICAgICAgICAgICAgICBmaWxlc1RvRGVsZXRlLFxuICAgICAgICAgICAgICBmaWxlc1RvQ3JlYXRlOiBmaWxlc1RvVXBsb2FkLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlXVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUgPSBbXVxuXG4gICAgICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICAgIGZpbGVzOiBmaWxlc1RvRGVsZXRlLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ3VwZGF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCkge1xuICAgICAgICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBbLi4uYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZF1cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gW11cblxuICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMoe1xuICAgICAgICAgICAgICBmaWxlczogZmlsZXNUb1VwbG9hZCxcbiAgICAgICAgICAgICAgYWdlbnRJZDogbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi4oaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKVxuICAgICAgICAgICAgICA/IFtoYW5kbGVBY2Nlc3NDbGllbnQobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KV1cbiAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgXSlcbiAgICAgICAgfVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgLy8gU29sbyByZXNldGVhciBlbCBjb250ZXh0byBzaSBOTyBzZSBoYSBsbGFtYWRvIHRvZGF2w61hIHkgTk8gaGF5IGFyY2hpdm9zIHBlbmRpZW50ZXNcbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCAmJiAhYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICd1cGRhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpIHtcbiAgICAgICAgICAvLyBMbGFtYXIgYSBoYW5kbGVBY2Nlc3NDbGllbnQgc29sbyB1bmEgdmV6XG4gICAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgICAgaGFuZGxlQWNjZXNzQ2xpZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSlcbiAgICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gU29sbyBjZXJyYXIgc2kgbm8gaGF5IGFyY2hpdm9zIHNpZW5kbyBwcm9jZXNhZG9zIG5pIGFjY2VzcyBwZW5kaWVudGVcbiAgICAgIGlmIChcbiAgICAgICAgIWhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ICYmXG4gICAgICAgICFpc1Nob3dQcm9jZXNzRmlsZXMgJiZcbiAgICAgICAgIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoICYmXG4gICAgICAgICFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQWN0aW9uRmlsZXMgJiZcbiAgICAgICAgIXN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiZcbiAgICAgICAgIXByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnRcbiAgICAgICkge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50VXBkYXRlZCcpKVxuICAgICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgICBpZiAoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkID09PSBzdWNjZXNzVXBkYXRlLmlkKSB7XG4gICAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJykpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBzdWNjZXNzVXBkYXRlLFxuICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQsXG4gICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgdXBkYXRlQWdlbnQsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZSxcbiAgICBoYW5kbGVDbG9zZSxcbiAgXSlcblxuICBjb25zdCBoYW5kbGVQcm9jZXNzRmlsZXNUaW1lb3V0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiYgIWlzU2hvd1Byb2Nlc3NGaWxlcykgcmV0dXJuXG5cbiAgICAvLyBBbCBjdW1wbGlyc2UgZWwgdGltZW91dCBhc3VtaW1vcyBxdWUgZWwgZ3VhcmRhZG8gZGVsIGFnZW50ZSBmdWUgZXhpdG9zb1xuICAgIC8vIChlbCBzZXJ2ZXIgcmVzcG9uZGnDsyBPSykgeSBxdWUgbG9zIGFyY2hpdm9zIHNlIGVudmlhcm9uIGNvcnJlY3RhbWVudGUuXG4gICAgLy8gU29sbyBwZXJkaW1vcyBsYSBjb25maXJtYWNpw7NuIGFzaW5jcsOzbmljYSBkZWwgV2ViU29ja2V0IHNvYnJlIHN1XG4gICAgLy8gcHJvY2VzYW1pZW50by4gQ2VycmFtb3MgdG9kbyBtb3N0cmFuZG8gZWwgc25hY2tiYXIgZGUgw6l4aXRvIHF1ZSBodWJpZXNlXG4gICAgLy8gZGlzcGFyYWRvIGVsIGZsdWpvIG5vcm1hbCBkZSDDqXhpdG8uXG5cbiAgICAvLyBGcmVubyBwYXJhIHF1ZSBsb3MgdXNlRWZmZWN0IGRlIHBvc3QtZ3VhcmRhZG8gbm8gcmUtZGlzcGFyZW4gc25hY2tiYXJzXG4gICAgLy8gbyBjaWVycmVzIGR1cGxpY2Fkb3MgY3VhbmRvIHNldElzU2hvd1Byb2Nlc3NGaWxlcyhmYWxzZSkgbG9zIGdhdGlsbGUuXG4gICAgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudCA9IHRydWVcblxuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcgJiYgc3VjY2Vzc1VwZGF0ZSkge1xuICAgICAgdXBkYXRlQWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgIGlmIChjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQgPT09IHN1Y2Nlc3NVcGRhdGUuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgIH0gZWxzZSBpZiAoIW1vZGFsVmFsdWVzLmlzRWRpdGluZyAmJiBzdWNjZXNzQ3JlYXRlKSB7XG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlKClcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcygpXG5cbiAgICBoYW5kbGVDbG9zZSgpXG4gIH0sIFtcbiAgICBpc1Nob3dQcm9jZXNzRmlsZXMsXG4gICAgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nLFxuICAgIHN1Y2Nlc3NVcGRhdGUsXG4gICAgc3VjY2Vzc0NyZWF0ZSxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICBjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlLFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlQ2xvc2UsXG4gIF0pXG5cbiAgY29uc3Qgd2ViU29ja2V0RnVuY3Rpb24gPSAoeyBtb2RlbF9kYXRhOiBtb2RlbERhdGEgfTogeyBtb2RlbF9kYXRhOiBhbnkgfSkgPT4ge1xuICAgIGNvbnN0IGZpbGVTdGF0dXMgPSBtb2RlbERhdGFcbiAgICBpZiAoZmlsZVN0YXR1cy5zdGF0dXMgPT09ICdkb25lJyB8fCBmaWxlU3RhdHVzLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkS25vd2xlZGdlID0gcHJldi5rbm93bGVkZ2UubWFwKGZpbGUgPT4ge1xuICAgICAgICAgIGlmIChmaWxlLm5hbWUgPT09IGZpbGVTdGF0dXMuZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmZpbGUsXG4gICAgICAgICAgICAgIHN0YXR1czogZmlsZVN0YXR1cy5zdGF0dXMsXG4gICAgICAgICAgICAgIGlkOiBmaWxlU3RhdHVzLmtub3dsZWRnZV9iYXNlX2lkIHx8IGZpbGUuaWQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaWxlXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGhhc1BlbmRpbmdGaWxlcyA9IHVwZGF0ZWRLbm93bGVkZ2Uuc29tZShmaWxlID0+IGZpbGUuc3RhdHVzID09PSAncGVuZGluZycpXG4gICAgICAgIGNvbnN0IGhhc0Vycm9yRmlsZXMgPSB1cGRhdGVkS25vd2xlZGdlLnNvbWUoZmlsZSA9PiBmaWxlLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpXG4gICAgICAgIGlmIChoYXNFcnJvckZpbGVzICYmICFoYXNQZW5kaW5nRmlsZXMpIHtcbiAgICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IoXG4gICAgICAgICAgICBtb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyB0KCdjb25maXJtQWdlbnRVcGRhdGVkV2l0aEZpbGVzRXJyb3InKSA6IHQoJ2NvbmZpcm1BZ2VudFdpdGhGaWxlc0Vycm9yJylcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc1BlbmRpbmdGaWxlcyAmJiAhaGFzRXJyb3JGaWxlcykge1xuICAgICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXMoZmFsc2UpXG5cbiAgICAgICAgICAvLyBTaSBoYWLDrWEgYWNjZXNzIHBlbmRpZW50ZSB5IHlhIGVzdGFiYSBtYW5lamFkbywgZm9yemFyIHF1ZSBlbCB1c2VFZmZlY3QgZGUgYWNjZXNzIHNlIGVqZWN1dGUgZGUgbnVldm9cbiAgICAgICAgICBpZiAoYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzICYmIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgc2V0RmlsZXNQcm9jZXNzZWQocHJldkNvdW50ID0+IHByZXZDb3VudCArIDEpXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgICAgICAgIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgICAgICAgIWZpbGVzRmluaXNoZWRSZWYuY3VycmVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gU2kgZXMgY3JlYWNpw7NuIHNpbiBhY2Nlc2liaWxpZGFkLCBtYXJjYXIgcXVlIGxvcyBhcmNoaXZvcyB0ZXJtaW5hcm9uXG4gICAgICAgICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgICBzZXRGaWxlc1Byb2Nlc3NlZChwcmV2Q291bnQgPT4gcHJldkNvdW50ICsgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgIGtub3dsZWRnZTogdXBkYXRlZEtub3dsZWRnZSxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzS25vd2xlZGdlRGVsZXRlICYmICFpc0xvYWRpbmdLbm93bGVkZ2UgJiYgIWVycm9yS25vd2xlZGdlKSB7XG4gICAgICAvLyBTb2xvIGNlcnJhciBzaSBOTyBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3NcbiAgICAgIGlmIChoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCB8fCBpc1Nob3dQcm9jZXNzRmlsZXMgfHwgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBTaSBlbCBsb2FkZXIgc2UgY2VycsOzIHBvciB0aW1lb3V0LCBubyBtb3N0cmFyIHNuYWNrYmFyIGRlIMOpeGl0byBuaSBjZXJyYXJcbiAgICAgIGlmIChwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWQnKSlcbiAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfVxuICAgIGlmIChlcnJvcktub3dsZWRnZSkge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcihcbiAgICAgICAgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gdCgnY29uZmlybUFnZW50VXBkYXRlZFdpdGhGaWxlc0Vycm9yJykgOiB0KCdjb25maXJtQWdlbnRXaXRoRmlsZXNFcnJvcicpXG4gICAgICApXG4gICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIH1cbiAgfSwgW3N1Y2Nlc3NLbm93bGVkZ2VEZWxldGUsIGlzTG9hZGluZ0tub3dsZWRnZSwgZXJyb3JLbm93bGVkZ2UsIGlzU2hvd1Byb2Nlc3NGaWxlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50XG5cbiAgICAvLyBTaSBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3MsIGVzcGVyYXIgYSBxdWUgdGVybWluZW5cbiAgICBpZiAoY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJiAoaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgfHwgaXNTaG93UHJvY2Vzc0ZpbGVzKSkge1xuICAgICAgLy8gU2kgc3VjY2Vzc1VwZGF0ZUFjY2VzcyBlc3TDoSBhY3Rpdm8sIG1hcmNhciBjb21vIG1hbmVqYWRvIHBlcm8gTk8gcmVzZXRlYXIgaGFzdGEgcXVlIHRlcm1pbmVuIGxvcyBhcmNoaXZvc1xuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiYgIWFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTaSB5YSBmdWUgbWFuZWphZG8geSBubyBoYXkgYXJjaGl2b3MgcGVuZGllbnRlcywgZWplY3V0YXIgZWwgY2llcnJlXG4gICAgaWYgKGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCAmJiBjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MpIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghc3VjY2Vzc1VwZGF0ZUFjY2Vzcykge1xuICAgICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuXG4gICAgaWYgKGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIC8vIFNpIGhheSBhcmNoaXZvcywgZWwgYWdlbnRlIHlhIGZ1ZSBhZ3JlZ2FkbyB5IGVsIHRvZ2dsZSB5YSBzZSBoaXpvIGVuIHN1Y2Nlc3NDcmVhdGVcbiAgICAgIC8vIFNvbG8gbmVjZXNpdGFtb3MgY2VycmFyIGVsIG1vZGFsXG4gICAgICBpZiAoY29udGV4dC5oYXNBY3Rpb25GaWxlcykge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBTaSBlbCBhZ2VudGUgZnVlIGNyZWFkbyBjb24gZmF2b3JpdG8sIG5lY2VzaXRhbW9zIG9yZGVuYXIgZGVzcHXDqXMgZGUgYWdyZWdhcmxvXG4gICAgICBjb25zdCBhZ2VudFRvQWRkID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSA/IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfSA6IHN1Y2Nlc3NDcmVhdGVcblxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIGFkZEFnZW50KGFnZW50VG9BZGQpXG4gICAgICBzZWxlY3RBZ2VudChhZ2VudFRvQWRkKVxuXG4gICAgICAvLyBTaSB0aWVuZSBmYXZvcml0bywgaGFjZXIgdG9nZ2xlIHkgYWN0dWFsaXphciBlc3RhZG8gYW50ZXMgZGUgY2VycmFyXG4gICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAvLyBDdWFuZG8gc2UgY3JlYSB1biBhZ2VudGUgbnVldm8sIGVsIHNlcnZpZG9yIG5vIHRpZW5lIGVsIGZhdm9yaXRvIG1hcmNhZG8gYcO6blxuICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRUb0FkZCwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudChcbiAgICAgICAgICBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgYWdlbnRGb3JUb2dnbGUsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2VycmFyIGRlc3B1w6lzIGRlIHF1ZSBlbCB0b2dnbGUgY29tcGxldGUgeSBhY3R1YWxpY2UgZWwgZXN0YWRvXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCA9PT0gc3VjY2Vzc1VwZGF0ZS5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgfVxuICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlKClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG5cbiAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICB9XG4gIH0sIFtzdWNjZXNzVXBkYXRlQWNjZXNzLCBmaWxlc1Byb2Nlc3NlZF0pXG5cbiAgLy8gdXNlRWZmZWN0IHBhcmEgbWFuZWphciBlbCBjaWVycmUgZGVsIG1vZGFsIGN1YW5kbyB0ZXJtaW5hbiBsb3MgYXJjaGl2b3MgZW4gY3JlYWNpw7NuIHNpbiBhY2Nlc2liaWxpZGFkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudFxuXG4gICAgLy8gU29sbyBwcm9jZXNhciBzaTpcbiAgICAvLyAtIEVzIHVuYSBvcGVyYWNpw7NuIGRlIGNyZWFjacOzblxuICAgIC8vIC0gTm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVuZGllbnRlXG4gICAgLy8gLSBMb3MgYXJjaGl2b3MgdGVybWluYXJvbiBkZSBwcm9jZXNhcnNlXG4gICAgLy8gLSBFbCBhZ2VudGUgZnVlIGNyZWFkbyBleGl0b3NhbWVudGVcbiAgICAvLyAtIEHDum4gbm8gc2UgaGEgY2VycmFkbyBlbCBtb2RhbFxuICAgIGlmIChcbiAgICAgIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScgJiZcbiAgICAgICFjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmXG4gICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgJiZcbiAgICAgIHN1Y2Nlc3NDcmVhdGUgJiZcbiAgICAgICFoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCAmJlxuICAgICAgIWlzU2hvd1Byb2Nlc3NGaWxlc1xuICAgICkge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRhbWJpw6luIG1hbmVqYXIgZWwgY2FzbyBjdWFuZG8gaGF5IGFjY2VzaWJpbGlkYWQgeSBhcmNoaXZvcyB0ZXJtaW5hcm9uXG4gICAgaWYgKFxuICAgICAgY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ICYmXG4gICAgICBzdWNjZXNzQ3JlYXRlICYmXG4gICAgICAhaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiZcbiAgICAgICFpc1Nob3dQcm9jZXNzRmlsZXNcbiAgICApIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MpIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBmaWxlc1Byb2Nlc3NlZCxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIHN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaXNTaG93UHJvY2Vzc0ZpbGVzLFxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2VzcyxcbiAgICB0LFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlQ2xvc2UsXG4gIF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNTaG93UHJvY2Vzc0ZpbGVzKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gYGtub3dsZWRnZS1iYXNlLnN0YXR1czoke2FnZW50QnlJZCA/IGFnZW50QnlJZD8uaWQgOiBzdWNjZXNzQ3JlYXRlPy5pZD8udG9TdHJpbmcoKX1gXG4gICAgICBpZiAoJF9zYykge1xuICAgICAgICBpZiAoaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgICAgJF9zYz8uc3Vic2NyaWJlSGFuZGxlcihjaGFubmVsLCB3ZWJTb2NrZXRGdW5jdGlvbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBtb2RlbERhdGEgPSB7XG4gICAgICAgICAgICBtb2RlbF9oYXNoOiBjaGFubmVsLFxuICAgICAgICAgICAgYWN0aW9uOiAkX3NjPy5hY3Rpb25UeXBlPy5TVUJTQ1JJQkUsXG4gICAgICAgICAgfVxuICAgICAgICAgICRfc2M/LnVwZGF0ZUNvbm5lY3Rpb25Nb2RlbChtb2RlbERhdGEsIGNoYW5uZWwsIHVzZXIsIHVzZXIsICRfc2MuY2hhbm5lbFR5cGU/Lk1PREVMX0NIQU5ORUwpXG4gICAgICAgICAgc2V0SXNTdWJzY3JpYmVkKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc1Nob3dQcm9jZXNzRmlsZXMsIGlzU3Vic2NyaWJlZCwgJF9zYywgYWdlbnRCeUlkLCBzdWNjZXNzQ3JlYXRlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuIHx8ICFhZ2VudE1vZGVscy5sZW5ndGgpIHJldHVyblxuICAgIGlmIChhZ2VudExvYWRpbmcgJiYgIXByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBjb25zdCBhcHBseUVkaXRpbmdBZ2VudCA9IChzb3VyY2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZS50eXBlICE9PSAnY3VzdG9tJyB8fCAhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFjY2Vzc0RlbmllZCcpKVxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgfSwgMzAwMClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICA7KGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ29ubmVjdG9yczogc3RyaW5nW10gPSBbXVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29ubmVjdG9ycyA9IGF3YWl0IGdldEFnZW50Q29ubmVjdG9ycyhzb3VyY2UuaWQudG9TdHJpbmcoKSlcbiAgICAgICAgICBzZWxlY3RlZENvbm5lY3RvcnMgPSBjb25uZWN0b3JzXG4gICAgICAgICAgICAuZmlsdGVyKGNvbm5lY3RvciA9PiBjb25uZWN0b3IuZW5hYmxlZF9mb3JfYWdlbnQpXG4gICAgICAgICAgICAubWFwKGNvbm5lY3RvciA9PiBjb25uZWN0b3Iuc2x1ZylcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhZ2VudCBjb25uZWN0b3JzOicsIGVycm9yKVxuICAgICAgICB9XG5cbiAgICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiB7XG4gICAgICAgICAgY29uc3QgYWdlbnRWYWx1ZXNUb1NldCA9IGJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsKHNvdXJjZSwgYWdlbnRNb2RlbHMsIHByZXYpXG4gICAgICAgICAgY29uc3QgbmV4dFZhbHVlcyA9IHtcbiAgICAgICAgICAgIC4uLmFnZW50VmFsdWVzVG9TZXQsXG4gICAgICAgICAgICBhY3Rpb25zOiB7XG4gICAgICAgICAgICAgIC4uLmFnZW50VmFsdWVzVG9TZXQuYWN0aW9ucyxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRDb25uZWN0b3JzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQgPSBuZXh0VmFsdWVzXG4gICAgICAgICAgcmV0dXJuIG5leHRWYWx1ZXNcbiAgICAgICAgfSlcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICBpZiAocGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBzZXRTZWN0aW9uKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50KVxuICAgICAgICAgIHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9KSgpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IHByZWZldGNoZWQgPSBwcmVmZXRjaGVkQWdlbnRCeUlkUmVmLmN1cnJlbnRcbiAgICBpZiAocHJlZmV0Y2hlZCkge1xuICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYXBwbHlFZGl0aW5nQWdlbnQocHJlZmV0Y2hlZClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhZ2VudEJ5SWQgJiYgIWFnZW50TG9hZGluZyAmJiBhZ2VudE1vZGVscy5sZW5ndGgpIHtcbiAgICAgIGFwcGx5RWRpdGluZ0FnZW50KGFnZW50QnlJZClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghaXNMb2FkaW5nICYmICFhZ2VudExvYWRpbmcgJiYgIWFnZW50QnlJZCAmJiAhbW9kYWxWYWx1ZXMuaXNFZGl0aW5nKSB7XG4gICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgYWlNb2RlbDogYWdlbnRNb2RlbHNbMF0sXG4gICAgICAgIH0sXG4gICAgICB9KSlcbiAgICB9XG4gICAgLy8gTm8gaW5jbHVpciBgaXNMb2FkaW5nYCBlbiBkZXBzOiBhbCB0ZXJtaW5hciBnZXRBZ2VudENvbm5lY3RvcnMgc2UgaGFjZSBzZXRJc0xvYWRpbmcoZmFsc2UpIHlcbiAgICAvLyBzZSByZS1lamVjdXRhcsOtYSBlbCBlZmVjdG8gY29uIGVsIG1pc21vIGFnZW50QnlJZCwgZHVwbGljYW5kbyBsYSBxdWVyeSBkZSBjb25uZWN0b3JzLlxuICB9LCBbYWdlbnRCeUlkLCBpc09wZW4sIGFnZW50TG9hZGluZywgYWdlbnRNb2RlbHM/Lmxlbmd0aCwgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nLCB0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChlcnJvckdldEFnZW50QnlJZCkge1xuICAgICAgaWYgKGVycm9yR2V0QWdlbnRCeUlkID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIikge1xuICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ2Vycm9yQWNjZXNzRGVuaWVkJykpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgfSwgMzAwMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKGVycm9yR2V0QWdlbnRCeUlkKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH0sIDMwMDApXG4gICAgfVxuICB9LCBbZXJyb3JHZXRBZ2VudEJ5SWRdKVxuXG4gIGNvbnN0IHNob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghbW9kYWxWYWx1ZXM/LmFjY2Vzc2liaWxpdHk/LmNsaWVudHMgfHwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5jbGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmNsaWVudHMuc29tZShjbGllbnQgPT4gY2xpZW50LmlzX2FjdGl2ZSA9PT0gZmFsc2UgfHwgY2xpZW50LmlzX2RlbGV0ZWQgPT09IHRydWUpXG4gIH0sIFttb2RhbFZhbHVlcz8uYWNjZXNzaWJpbGl0eT8uY2xpZW50c10pXG5cbiAgY29uc3QgaXNTYXZlQnV0dG9uRGlzYWJsZWQgPVxuICAgICF2YWxpZGF0ZUZpZWxkVmFsdWVzKG1vZGFsVmFsdWVzKSB8fFxuICAgIHZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUoKSB8fFxuICAgIGlzTG9hZGluZyB8fFxuICAgIGlzTG9hZGluZ0tub3dsZWRnZSB8fFxuICAgIGlzTG9hZGluZ0NyZWF0ZSB8fFxuICAgIGlzTG9hZGluZ1VwZGF0ZUFjY2VzcyB8fFxuICAgIHNob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyB8fFxuICAgIGhhc0ZpbGVFcnJvcnNcblxuICBjb25zdCBoYW5kbGVUb2dnbGVGYXZvcml0ZSA9ICgpID0+IHtcbiAgICBpZiAobW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlkKSB7XG4gICAgICAvLyBFeGlzdGluZyBhZ2VudFxuICAgICAgdG9nZ2xlRmF2b3JpdGUoXG4gICAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQsXG4gICAgICAgIHVwZGF0ZWRBZ2VudCA9PiB7XG4gICAgICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgICAgICBpc19mYXZvcml0ZTogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAvLyBBY3R1YWxpemFyIGVsIGVzdGFkbyBkZSBhZ2VudGVzIHkgb3JkZW5hciBjdWFuZG8gc2UgaGFjZSBkZXNkZSBlbCBtb2RhbCBBQk1cbiAgICAgICAgICB1cGRhdGVBZ2VudEZhdm9yaXRlKHVwZGF0ZWRBZ2VudCwgdHJ1ZSlcbiAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0RmF2b3JpdGUsIHtcbiAgICAgICAgICAgIG9wdGlvbjogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlID8gJ2FkZCcgOiAncmVtb3ZlJyxcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIG1vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgbmV3IGFnZW50XG4gICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgaXNfZmF2b3JpdGU6ICFwcmV2LmdlbmVyYWwuaXNfZmF2b3JpdGUsXG4gICAgICAgIH0sXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBpZiAoIWlzT3BlbiB8fCAoIXVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlICYmICF1c2VyUGVybWlzc2lvbnM/LmVkaXQgJiYgIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlKSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgIDxCYWNrZHJvcCB6SW5kZXg9ezExMTJ9IG9uQ2xpY2s9e2hhbmRsZUJhY2tkcm9wQ2xpY2t9PlxuICAgICAgPFNDQUFNV3JhcHBlciByZWY9e21vZGFsUmVmfSB0YWJJbmRleD17LTF9PlxuICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgIDxTQ0FBTVdyYXBwZXJTcGlubmVyPlxuICAgICAgICAgICAgPFNDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50PlxuICAgICAgICAgICAgICA8U3Bpbm5lckxvdHRpZSBzaXplPVwiODBweFwiIGNvbG9yPVwicHJpbWFyeVwiIC8+XG4gICAgICAgICAgICA8L1NDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50PlxuICAgICAgICAgIDwvU0NBQU1XcmFwcGVyU3Bpbm5lcj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2lzU2hvd1Byb2Nlc3NGaWxlcyAmJiBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA/IChcbiAgICAgICAgICAgICAgPEFibUxvYWRlckZpbGVzXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM9e21vZGFsVmFsdWVzLmtub3dsZWRnZX1cbiAgICAgICAgICAgICAgICBsYWJlbD17dChgcHJvY2Vzc2luZ0tub3dsZWRnZS4ke21vZGFsVmFsdWVzLmlzRWRpdGluZyA/ICdkZXNjcmlwdGlvblVwZGF0ZScgOiAnZGVzY3JpcHRpb25DcmVhdGUnfWApfVxuICAgICAgICAgICAgICAgIG9uVGltZW91dD17aGFuZGxlUHJvY2Vzc0ZpbGVzVGltZW91dH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyTGVmdD5cbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0KCdnZW5lcmFsU2VjdGlvbi5yZW1vdmVGYXZvcml0ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogdCgnZ2VuZXJhbFNlY3Rpb24uYWRkRmF2b3JpdGUnKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FBTUhlYWRlckZhdm9yaXRlIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZUZhdm9yaXRlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e21vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZSA/ICcjRkZDNjI0JyA6ICcjYTZhNmE2J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD17bW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlzX2Zhdm9yaXRlID8gJyNGRkM2MjQnIDogJ25vbmUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29saWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e21vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZSA/ICcnIDogJ3N0YXItZmF2b3JpdGUtaWNvbid9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1IZWFkZXJGYXZvcml0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1IZWFkZXJUaXRsZT57bW9kYWxWYWx1ZXM/LmlzRWRpdGluZyA/IHQoJ2VkaXRBZ2VudCcpIDogdCgnbmV3QWdlbnQnKX08L1NDQUFNSGVhZGVyVGl0bGU+XG4gICAgICAgICAgICAgICAgICA8L1NDQUFNSGVhZGVyTGVmdD5cbiAgICAgICAgICAgICAgICAgIDxTQ0FBTUhlYWRlckNsb3NlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuY2FuY2VsTW9kYWwpXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nIHx8IGlzTG9hZGluZ0tub3dsZWRnZSB8fCBpc0xvYWRpbmdDcmVhdGUgfHwgaXNMb2FkaW5nVXBkYXRlQWNjZXNzfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q3Jvc3MgY29sb3I9XCIjYTZhNmE2XCIgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgPC9TQ0FBTUhlYWRlckNsb3NlQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvU0NBQU1IZWFkZXI+XG4gICAgICAgICAgICAgICAgPFNDQUFNQ29udGVudCBoYXNTY3JvbGw9e3NlY3Rpb24gIT09ICdrbm93bGVkZ2UnfT5cbiAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXI+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdnZW5lcmFsJ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdnZW5lcmFsJyl9XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhYm0tYWdlbnQtbW9kYWwtZ2VuZXJhbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtgJHtzZWN0aW9uID09PSAnZ2VuZXJhbCcgPyAncmdiYSg2MywgNjMsIDYzLCAxKScgOiAncmdiYSgxNjYsIDE2NiwgMTY2LCAxKSd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVRpdGxlIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnZ2VuZXJhbCd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2dlbmVyYWxTZWN0aW9uLnRpdGxlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cblxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzZWN0aW9uID09PSAna25vd2xlZGdlJ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdrbm93bGVkZ2UnKX1cbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFibS1hZ2VudC1tb2RhbC1rbm93bGVkZ2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEJyYWluSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2Ake3NlY3Rpb24gPT09ICdrbm93bGVkZ2UnID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2tub3dsZWRnZSd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2tub3dsZWRnZVNlY3Rpb24udGl0bGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhckl0ZW1UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdhY3Rpb25zJ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdhY3Rpb25zJyl9XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhYm0tYWdlbnQtbW9kYWwtYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtgJHtzZWN0aW9uID09PSAnYWN0aW9ucycgPyAncmdiYSg2MywgNjMsIDYzLCAxKScgOiAncmdiYSgxNjYsIDE2NiwgMTY2LCAxKSd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVRpdGxlIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnYWN0aW9ucyd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2FjdGlvbnNTZWN0aW9uLnRpdGxlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cblxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnYWNjZXNzaWJpbGl0eSd9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VjdGlvbkNoYW5nZSgnYWNjZXNzaWJpbGl0eScpfVxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWJtLWFnZW50LW1vZGFsLWFjY2Vzc2liaWxpdHlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2liaWxpdHlJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YCR7c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi50aXRsZVRhYicpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIHtzaG91bGREaXNhYmxlU2F2ZUZvckNsaWVudHMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNsaWVudHNFcnJvcicpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1FcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWxlcnQgY29sb3I9XCIjQzcwNTA1XCIgd2lkdGg9XCIxNnB4XCIgaGVpZ2h0PVwiMTZweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbUVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFyPlxuICAgICAgICAgICAgICAgICAge1NlY3Rpb25CeUtleVtzZWN0aW9uXSh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogbW9kYWxWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiBoYW5kbGVTZXRBZ2VudFZhbHVlc0J5S2V5cyxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRNb2RlbHMsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0tub3dsZWRnZTogW10sXG4gICAgICAgICAgICAgICAgICAgIG5ld0tub3dsZWRnZTogW10sXG4gICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlRXhpc3RpbmdLbm93bGVkZ2U6ICgpID0+IHt9LFxuICAgICAgICAgICAgICAgICAgICBvblJlbW92ZU5ld0tub3dsZWRnZTogKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgICAgIG9uRmlsZUVycm9yQ2hhbmdlOiBzZXRIYXNGaWxlRXJyb3JzLFxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9TQ0FBTUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPFNDQUFNRm9vdGVyIGlzRWRpdGluZz17ISFtb2RhbFZhbHVlcz8uaXNFZGl0aW5nICYmICEhdXNlclBlcm1pc3Npb25zPy5kZWxldGV9PlxuICAgICAgICAgICAgICAgICAgeyEhbW9kYWxWYWx1ZXM/LmlzRWRpdGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAhIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1EZWxldGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q1VCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbldpdGhJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93TW9kYWxEZWxldGUodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0xvYWRpbmdLbm93bGVkZ2UgfHwgaXNMb2FkaW5nQ3JlYXRlIHx8IGlzTG9hZGluZ1VwZGF0ZUFjY2Vzc31cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFdyYXBwZXJDZW50ZXJJY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUcmFzaCBjb2xvcj1cIiMwOGNcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2RlbGV0ZUFnZW50Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvV3JhcHBlckNlbnRlckljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1EZWxldGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMjRweCcgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNhdmVCdXR0b24gaXNEaXNhYmxlZD17aXNTYXZlQnV0dG9uRGlzYWJsZWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxDVUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbihudWxsLCAnY3JlYXRlJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTYXZlQnV0dG9uRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge21vZGFsVmFsdWVzLmlzRWRpdGluZyA/IHQoJ3NhdmVDaGFuZ2VzJykgOiB0KCdjcmVhdGVBZ2VudExhYmVsQnV0dG9uJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9DVUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNhdmVCdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1NDQUFNRm9vdGVyPlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L1NDQUFNV3JhcHBlcj5cbiAgICAgIHtzaG93TW9kYWxEZWxldGUgJiYgKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNb2RhbERlbGV0ZShmYWxzZSl9XG4gICAgICAgICAgaGFuZGxlcnM9e3tcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb246IChwcm9wczogYW55KSA9PiBoYW5kbGVDb25maXJtQWN0aW9uKHByb3BzLCAnZGVsZXRlJyksXG4gICAgICAgICAgfX1cbiAgICAgICAgICBjaGF0PXt7IHRpdGxlOiBtb2RhbFZhbHVlcy5nZW5lcmFsLm5hbWUsIGlkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkIH19XG4gICAgICAgICAgYWN0aW9uPVwiYWdlbnRcIlxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L0JhY2tkcm9wPixcbiAgICBzZWxlY3RvclxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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
|