@projectcor/maia-components 2.11.32-2 → 2.11.32
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/components/atoms/FeedbackButton/FeedbackButton.styles.js +2 -2
- package/lib/components/atoms/icons/index.js +1 -2
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +10 -41
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +4 -7
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +3 -16
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +178 -165
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +64 -293
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +3 -11
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +9 -10
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +6 -37
- package/lib/components/molecules/Sidebar/Sidebar.js +323 -269
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +22 -17
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +37 -54
- package/lib/dev/Providers.js +2 -2
- package/lib/hooks/useChatManager/useChatManager.js +103 -59
- package/lib/hooks/useChats/useChats.js +4 -12
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +139 -70
- package/lib/hooks/useSmoothStreamText/index.js +2 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +189 -0
- package/lib/hooks/useStreamingMessage/index.js +3 -0
- package/lib/hooks/useStreamingMessage/streamingStore.js +69 -0
- package/lib/hooks/useStreamingMessage/useStreamingMessage.js +22 -0
- package/lib/lang/br/index.js +2 -11
- package/lib/lang/en/index.js +2 -11
- package/lib/lang/es/index.js +2 -11
- package/lib/lang/fr/index.js +2 -11
- package/lib/mocks/mockChats.js +395 -0
- package/lib/mocks/mockedUser.js +169 -0
- package/lib/services/maia/Chats/getChatsByUserId.js +8 -14
- package/lib/services/maia/Chats/index.js +1 -7
- package/lib/services/maia/client.js +9 -44
- package/lib/store/chatsStore.types.js +2 -10
- package/lib/store/useChatsStore.js +37 -75
- package/lib/types/Chat.js +1 -3
- package/package.json +1 -1
- package/lib/components/atoms/icons/ChatConversation.js +0 -40
- package/lib/components/molecules/Sidebar/SidebarChats.styles.js +0 -73
- package/lib/components/molecules/Sidebar/SidebarChatsSection.js +0 -69
- package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +0 -150
- package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +0 -238
- package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +0 -70
- package/lib/components/molecules/Sidebar/sidebarChats.types.js +0 -14
- package/lib/dev/fixtures/devUser.js +0 -173
- package/lib/dev/fixtures/mockedUser.js +0 -169
- package/lib/services/maia/Chats/getChatMessagesV2.js +0 -114
- package/lib/services/maia/Chats/getSessionByAgent.js +0 -66
- package/lib/services/maia/Chats/getSessionsGroupedV2.js +0 -70
|
@@ -26,6 +26,7 @@ import { useTabTaskDefault } from '../useTabTaskDefault';
|
|
|
26
26
|
import { TASK_URL_REGEX_PATTERN } from '../../constants/taskUrls';
|
|
27
27
|
import { fetchAgentDetail } from '../../services/maia/Agents/fetchAgentDetail';
|
|
28
28
|
import { buildHitlActionTypeList, getHitlAnalyticsAgentType } from '../../utils/hitlAnalytics';
|
|
29
|
+
import { streamingStore } from '../useStreamingMessage';
|
|
29
30
|
var normalizeSendMessageArgs = function normalizeSendMessageArgs(attachmentsOrOptions) {
|
|
30
31
|
var _options$attachments;
|
|
31
32
|
if (Array.isArray(attachmentsOrOptions)) {
|
|
@@ -292,6 +293,19 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
292
293
|
var messagesRef = useRef([]);
|
|
293
294
|
var isProcessingRef = useRef(false);
|
|
294
295
|
var firstTimeRef = useRef(false);
|
|
296
|
+
/** Id del placeholder del mensaje en streaming activo (si hay). */
|
|
297
|
+
var streamingPlaceholderIdRef = useRef(null);
|
|
298
|
+
/**
|
|
299
|
+
* Chat al que pertenece el stream actualmente activo. Si cambia el chat
|
|
300
|
+
* mientras un stream está en vuelo, descartamos los tokens residuales
|
|
301
|
+
* que puedan llegar antes de que el abort se complete.
|
|
302
|
+
*/
|
|
303
|
+
var activeStreamChatIdRef = useRef(null);
|
|
304
|
+
/** Setter indirecto para abortar el stream antes de que el hook de
|
|
305
|
+
* orquestador esté inicializado (se linkea más abajo). */
|
|
306
|
+
var abortStreamSilentlyRef = useRef(function () {
|
|
307
|
+
return undefined;
|
|
308
|
+
});
|
|
295
309
|
var _useState = useState({}),
|
|
296
310
|
_useState2 = _slicedToArray(_useState, 2),
|
|
297
311
|
activeLoadings = _useState2[0],
|
|
@@ -327,6 +341,10 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
327
341
|
}, [loadingMessages]);
|
|
328
342
|
useEffect(function () {
|
|
329
343
|
if (initialChatId && initialChatId !== currentChatId.current) {
|
|
344
|
+
// Si hay un stream en curso, abortarlo silenciosamente para que los
|
|
345
|
+
// tokens residuales no se escriban en el chat nuevo.
|
|
346
|
+
abortStreamSilentlyRef.current();
|
|
347
|
+
|
|
330
348
|
// Limpiar contexto global al cambiar de conversación
|
|
331
349
|
setProject(null);
|
|
332
350
|
setClient === null || setClient === void 0 || setClient(null);
|
|
@@ -336,6 +354,9 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
336
354
|
currentUserQuestion.current = null;
|
|
337
355
|
reportedEvent.current = false;
|
|
338
356
|
isProcessingRef.current = false;
|
|
357
|
+
streamingPlaceholderIdRef.current = null;
|
|
358
|
+
activeStreamChatIdRef.current = null;
|
|
359
|
+
streamingStore.clear();
|
|
339
360
|
loadMessages();
|
|
340
361
|
}
|
|
341
362
|
}, [initialChatId, project, setProject, setClient, setChipsProject, loadMessages]);
|
|
@@ -392,6 +413,11 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
392
413
|
});
|
|
393
414
|
}, [messages, client, loadingMessages, setClient]);
|
|
394
415
|
var handleStreamError = useCallback(function (errorMessage) {
|
|
416
|
+
var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
417
|
+
streamingStore.clear();
|
|
418
|
+
streamingPlaceholderIdRef.current = null;
|
|
419
|
+
activeStreamChatIdRef.current = null;
|
|
420
|
+
removeMessage(tempMessageId);
|
|
395
421
|
var message = errorMessage === "Access denied: You don't have permission to access this agent" ? t('chat.errorAccessDenied') : t('chat.error');
|
|
396
422
|
addMessage({
|
|
397
423
|
id: "answer-".concat(currentMessageId.current),
|
|
@@ -405,21 +431,37 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
405
431
|
role: ChatHistoryRole.ASSISTANT
|
|
406
432
|
});
|
|
407
433
|
isProcessingRef.current = false;
|
|
408
|
-
}, [addMessage, t]);
|
|
434
|
+
}, [addMessage, removeMessage, t]);
|
|
409
435
|
var handleStreamUpdate = useCallback(function (content, sources, memorySessionId) {
|
|
436
|
+
// Si el chat cambió mientras el stream estaba en vuelo, descartar el
|
|
437
|
+
// token residual: no debe pintarse en el nuevo chat.
|
|
438
|
+
if (activeStreamChatIdRef.current != null && activeStreamChatIdRef.current !== currentChatId.current) {
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
410
441
|
var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
442
|
+
|
|
443
|
+
// Primera llamada de este stream: insertamos el placeholder en el
|
|
444
|
+
// array de `messages` una única vez. Las llamadas subsiguientes ya no
|
|
445
|
+
// tocan `messages`; el texto vive en el streamingStore (externo), por
|
|
446
|
+
// lo que React no re-renderiza el árbol completo en cada token.
|
|
447
|
+
if (streamingPlaceholderIdRef.current !== tempMessageId) {
|
|
448
|
+
streamingPlaceholderIdRef.current = tempMessageId;
|
|
449
|
+
activeStreamChatIdRef.current = currentChatId.current;
|
|
450
|
+
streamingStore.start(tempMessageId);
|
|
451
|
+
addMessage({
|
|
452
|
+
id: tempMessageId,
|
|
453
|
+
message: '',
|
|
454
|
+
date: new Date(),
|
|
455
|
+
user: {
|
|
456
|
+
id: 'assistant',
|
|
457
|
+
name: 'Assistant'
|
|
458
|
+
},
|
|
459
|
+
role: ChatHistoryRole.ASSISTANT,
|
|
460
|
+
sources: sources,
|
|
461
|
+
memorySessionId: memorySessionId
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
streamingStore.setText(tempMessageId, content);
|
|
423
465
|
}, [addMessage]);
|
|
424
466
|
var handleStreamFinish = useCallback(/*#__PURE__*/function () {
|
|
425
467
|
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId) {
|
|
@@ -429,6 +471,9 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
429
471
|
while (1) switch (_context2.prev = _context2.next) {
|
|
430
472
|
case 0:
|
|
431
473
|
tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
474
|
+
streamingStore.clear();
|
|
475
|
+
streamingPlaceholderIdRef.current = null;
|
|
476
|
+
activeStreamChatIdRef.current = null;
|
|
432
477
|
removeMessage(tempMessageId);
|
|
433
478
|
attachments = normalizeAssistantAttachments(rawAttachments); // Detectar todas las URLs de tareas (.../tasks/123/detail|message|messages|files|history|hours)
|
|
434
479
|
taskUrlRegex = new RegExp(TASK_URL_REGEX_PATTERN, 'g');
|
|
@@ -590,6 +635,11 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
590
635
|
};
|
|
591
636
|
}(), [addMessage, removeMessage, project, getTabTaskDefault, event, agent]);
|
|
592
637
|
var handleStreamStop = useCallback(function () {
|
|
638
|
+
var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
639
|
+
streamingStore.clear();
|
|
640
|
+
streamingPlaceholderIdRef.current = null;
|
|
641
|
+
activeStreamChatIdRef.current = null;
|
|
642
|
+
removeMessage(tempMessageId);
|
|
593
643
|
addMessage({
|
|
594
644
|
id: "answer-".concat(currentMessageId.current, "-cancelled"),
|
|
595
645
|
message: t('chat.cancelled'),
|
|
@@ -606,9 +656,12 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
606
656
|
var customEvent = new CustomEvent('refetch-session');
|
|
607
657
|
document.dispatchEvent(customEvent);
|
|
608
658
|
}, 500);
|
|
609
|
-
}, [addMessage, t]);
|
|
659
|
+
}, [addMessage, removeMessage, t]);
|
|
610
660
|
var handleApprovalRequired = useCallback(function (approval, accumulatedContent) {
|
|
611
661
|
var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
662
|
+
streamingStore.clear();
|
|
663
|
+
streamingPlaceholderIdRef.current = null;
|
|
664
|
+
activeStreamChatIdRef.current = null;
|
|
612
665
|
removeMessage(tempMessageId);
|
|
613
666
|
if (approval.manual_approval_detected) {
|
|
614
667
|
isProcessingRef.current = false;
|
|
@@ -641,7 +694,12 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
641
694
|
waitingResponse = _useOrchestratorStrea.isLoading,
|
|
642
695
|
isWriting = _useOrchestratorStrea.isWriting,
|
|
643
696
|
loadingMessage = _useOrchestratorStrea.loadingMessage,
|
|
644
|
-
stopStreaming = _useOrchestratorStrea.stopStreaming
|
|
697
|
+
stopStreaming = _useOrchestratorStrea.stopStreaming,
|
|
698
|
+
abortStreamSilently = _useOrchestratorStrea.abortStreamSilently;
|
|
699
|
+
|
|
700
|
+
// Mantenemos el setter más reciente en una ref para que pueda usarse desde
|
|
701
|
+
// efectos definidos antes en el archivo (cambio de chat, reset, etc.).
|
|
702
|
+
abortStreamSilentlyRef.current = abortStreamSilently;
|
|
645
703
|
var currentProject = project;
|
|
646
704
|
var sendMessage = useCallback(/*#__PURE__*/function () {
|
|
647
705
|
var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(message, attachmentsOrOptions, faqId, agentSuggestionId) {
|
|
@@ -959,68 +1017,46 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
959
1017
|
};
|
|
960
1018
|
}(), [authUser, agent, addMessage, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired]);
|
|
961
1019
|
var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
962
|
-
var _userInitialMessage$m, _userInitialMessage$a, _project$
|
|
963
|
-
var hasInitialMessage, hasInitialAttachments, hasInitialFaq, hasInitialPayload, history, lastMsgProject, lastMsgClient, toNumberOrNull, resolvedProjectId, resolvedProjectName, resolvedClientId, resolvedClientName;
|
|
1020
|
+
var _userInitialMessage$m, _userInitialMessage$a, _project$client2, _project$client3, hasInitialMessage, hasInitialAttachments, hasInitialFaq, history;
|
|
964
1021
|
return _regeneratorRuntime.wrap(function (_context6) {
|
|
965
1022
|
while (1) switch (_context6.prev = _context6.next) {
|
|
966
1023
|
case 0:
|
|
967
1024
|
if (!firstTimeRef.current) {
|
|
968
1025
|
firstTimeRef.current = true;
|
|
969
1026
|
}
|
|
970
|
-
hasInitialMessage = Boolean(userInitialMessage === null || userInitialMessage === void 0 || (_userInitialMessage$m = userInitialMessage.message) === null || _userInitialMessage$m === void 0 ? void 0 : _userInitialMessage$m.trim());
|
|
971
|
-
hasInitialAttachments = Boolean(userInitialMessage === null || userInitialMessage === void 0 || (_userInitialMessage$a = userInitialMessage.attachments) === null || _userInitialMessage$a === void 0 ? void 0 : _userInitialMessage$a.length);
|
|
972
|
-
hasInitialFaq = Boolean(userInitialMessage === null || userInitialMessage === void 0 ? void 0 : userInitialMessage.faqId);
|
|
973
|
-
hasInitialPayload = hasInitialMessage || hasInitialAttachments || hasInitialFaq; // Si ya hay `initialChatId` (sesión existente), primero cargamos el histórico.
|
|
974
|
-
// Si además viene un `userInitialMessage` (caso: venimos de home con sesión
|
|
975
|
-
// pending y el usuario envía un mensaje/FAQ), seguimos abajo y lo despachamos
|
|
976
|
-
// dentro de esa misma sesión (chatId = currentChatId.current).
|
|
977
1027
|
if (!initialChatId) {
|
|
978
|
-
_context6.next =
|
|
1028
|
+
_context6.next = 2;
|
|
979
1029
|
break;
|
|
980
1030
|
}
|
|
981
1031
|
_context6.next = 1;
|
|
982
1032
|
return loadMessages();
|
|
983
1033
|
case 1:
|
|
984
|
-
if (hasInitialPayload) {
|
|
985
|
-
_context6.next = 2;
|
|
986
|
-
break;
|
|
987
|
-
}
|
|
988
|
-
return _context6.abrupt("return");
|
|
989
|
-
case 2:
|
|
990
1034
|
_context6.next = 4;
|
|
991
1035
|
break;
|
|
992
|
-
case
|
|
993
|
-
if (
|
|
1036
|
+
case 2:
|
|
1037
|
+
if (!userInitialMessage) {
|
|
994
1038
|
_context6.next = 4;
|
|
995
1039
|
break;
|
|
996
1040
|
}
|
|
1041
|
+
hasInitialMessage = Boolean((_userInitialMessage$m = userInitialMessage.message) === null || _userInitialMessage$m === void 0 ? void 0 : _userInitialMessage$m.trim());
|
|
1042
|
+
hasInitialAttachments = Boolean((_userInitialMessage$a = userInitialMessage.attachments) === null || _userInitialMessage$a === void 0 ? void 0 : _userInitialMessage$a.length);
|
|
1043
|
+
hasInitialFaq = Boolean(userInitialMessage.faqId);
|
|
1044
|
+
if (!(!hasInitialMessage && !hasInitialAttachments && !hasInitialFaq)) {
|
|
1045
|
+
_context6.next = 3;
|
|
1046
|
+
break;
|
|
1047
|
+
}
|
|
997
1048
|
return _context6.abrupt("return");
|
|
998
|
-
case
|
|
1049
|
+
case 3:
|
|
999
1050
|
history = messagesRef.current.map(function (historyMessage) {
|
|
1000
1051
|
return {
|
|
1001
1052
|
content: historyMessage.message,
|
|
1002
1053
|
role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
|
|
1003
1054
|
};
|
|
1004
|
-
});
|
|
1005
|
-
// sincronizado todavía al momento de despachar el mensaje. Derivamos del
|
|
1006
|
-
// último mensaje cargado como fallback robusto.
|
|
1007
|
-
lastMsgProject = initialChatId ? messagesRef.current.filter(function (m) {
|
|
1008
|
-
return m.projectId;
|
|
1009
|
-
}).at(-1) : undefined;
|
|
1010
|
-
lastMsgClient = initialChatId ? messagesRef.current.filter(function (m) {
|
|
1011
|
-
return m.clientId != null && m.clientName;
|
|
1012
|
-
}).at(-1) : undefined;
|
|
1013
|
-
toNumberOrNull = function toNumberOrNull(v) {
|
|
1014
|
-
return v == null || v === '' ? null : Number(v);
|
|
1015
|
-
};
|
|
1016
|
-
resolvedProjectId = (_project$id = project === null || project === void 0 ? void 0 : project.id) !== null && _project$id !== void 0 ? _project$id : toNumberOrNull(lastMsgProject === null || lastMsgProject === void 0 ? void 0 : lastMsgProject.projectId);
|
|
1017
|
-
resolvedProjectName = (_ref1 = (_project$name = project === null || project === void 0 ? void 0 : project.name) !== null && _project$name !== void 0 ? _project$name : lastMsgProject === null || lastMsgProject === void 0 ? void 0 : lastMsgProject.projectName) !== null && _ref1 !== void 0 ? _ref1 : null;
|
|
1018
|
-
resolvedClientId = (_ref10 = (_ref11 = (_ref12 = (_client$id = client === null || client === void 0 ? void 0 : client.id) !== null && _client$id !== void 0 ? _client$id : toNumberOrNull(lastMsgProject === null || lastMsgProject === void 0 ? void 0 : lastMsgProject.clientId)) !== null && _ref12 !== void 0 ? _ref12 : toNumberOrNull(lastMsgClient === null || lastMsgClient === void 0 ? void 0 : lastMsgClient.clientId)) !== null && _ref11 !== void 0 ? _ref11 : project === null || project === void 0 || (_project$client2 = project.client) === null || _project$client2 === void 0 ? void 0 : _project$client2.id) !== null && _ref10 !== void 0 ? _ref10 : null;
|
|
1019
|
-
resolvedClientName = (_ref13 = (_ref14 = (_ref15 = (_client$name = client === null || client === void 0 ? void 0 : client.name) !== null && _client$name !== void 0 ? _client$name : lastMsgProject === null || lastMsgProject === void 0 ? void 0 : lastMsgProject.clientName) !== null && _ref15 !== void 0 ? _ref15 : lastMsgClient === null || lastMsgClient === void 0 ? void 0 : lastMsgClient.clientName) !== null && _ref14 !== void 0 ? _ref14 : project === null || project === void 0 || (_project$client3 = project.client) === null || _project$client3 === void 0 ? void 0 : _project$client3.name) !== null && _ref13 !== void 0 ? _ref13 : null;
|
|
1055
|
+
});
|
|
1020
1056
|
askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
1021
1057
|
message: userInitialMessage.message,
|
|
1022
1058
|
history: history,
|
|
1023
|
-
projectId:
|
|
1059
|
+
projectId: (project === null || project === void 0 ? void 0 : project.id) || null,
|
|
1024
1060
|
lang: authUser.lang,
|
|
1025
1061
|
userId: authUser.id.toString(),
|
|
1026
1062
|
firstName: authUser.firstName,
|
|
@@ -1032,12 +1068,16 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1032
1068
|
agentId: agent === null || agent === void 0 ? void 0 : agent.id,
|
|
1033
1069
|
isWebSearchActive: isWebSearchActiveRef.current,
|
|
1034
1070
|
isDeepSearchActive: isDeepSearchActiveRef.current
|
|
1035
|
-
},
|
|
1036
|
-
clientId:
|
|
1037
|
-
} :
|
|
1038
|
-
|
|
1039
|
-
} : {}),
|
|
1040
|
-
|
|
1071
|
+
}, client !== null && client !== void 0 && client.id ? {
|
|
1072
|
+
clientId: client.id
|
|
1073
|
+
} : project !== null && project !== void 0 && (_project$client2 = project.client) !== null && _project$client2 !== void 0 && _project$client2.id ? {
|
|
1074
|
+
clientId: project.client.id
|
|
1075
|
+
} : {}), project !== null && project !== void 0 && project.name ? {
|
|
1076
|
+
projectName: project.name
|
|
1077
|
+
} : {}), project !== null && project !== void 0 && (_project$client3 = project.client) !== null && _project$client3 !== void 0 && _project$client3.name ? {
|
|
1078
|
+
clientName: project.client.name
|
|
1079
|
+
} : client !== null && client !== void 0 && client.name ? {
|
|
1080
|
+
clientName: client.name
|
|
1041
1081
|
} : {}), userInitialMessage.attachments ? {
|
|
1042
1082
|
attachments: userInitialMessage.attachments
|
|
1043
1083
|
} : {}), userInitialMessage.faqId ? {
|
|
@@ -1047,17 +1087,21 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1047
1087
|
} : {}), (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
|
|
1048
1088
|
agentEntity: agent.entity
|
|
1049
1089
|
} : {}));
|
|
1050
|
-
case
|
|
1090
|
+
case 4:
|
|
1051
1091
|
case "end":
|
|
1052
1092
|
return _context6.stop();
|
|
1053
1093
|
}
|
|
1054
1094
|
}, _callee6);
|
|
1055
1095
|
})), [initialChatId, userInitialMessage, project, client, authUser, agent, askMaia, isWebSearchActive, isDeepSearchActive]);
|
|
1056
1096
|
var resetChat = useCallback(function () {
|
|
1097
|
+
abortStreamSilentlyRef.current();
|
|
1057
1098
|
currentMessageId.current = uuidv4();
|
|
1058
1099
|
currentUserQuestion.current = null;
|
|
1059
1100
|
currentChatId.current = uuidv4();
|
|
1060
1101
|
reportedEvent.current = false;
|
|
1102
|
+
streamingPlaceholderIdRef.current = null;
|
|
1103
|
+
activeStreamChatIdRef.current = null;
|
|
1104
|
+
streamingStore.clear();
|
|
1061
1105
|
}, []);
|
|
1062
1106
|
var stopGeneration = useCallback(function () {
|
|
1063
1107
|
stopStreaming();
|
|
@@ -1085,4 +1129,4 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1085
1129
|
isDisabled: waitingResponse || loadingMessages
|
|
1086
1130
|
};
|
|
1087
1131
|
};
|
|
1088
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZmV0Y2hBZ2VudERldGFpbCIsImJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0IiwiZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSIsIm5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiX29wdGlvbnMkYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsIm9wdGlvbnMiLCJub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyIsInJhd0F0dGFjaG1lbnRzIiwiZmlsdGVyIiwiYXR0YWNobWVudCIsIl90eXBlb2YiLCJtYXAiLCJpbmRleCIsIm5hbWUiLCJ0cmltIiwiY29uY2F0IiwidHlwZSIsIm1pbWVUeXBlIiwibWltZV90eXBlIiwiZnVsbEZpbGVOYW1lIiwiaW5jbHVkZXMiLCJudW1lcmljU2l6ZSIsInNpemUiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImZpbGUiLCJGaWxlIiwiaWQiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX2ZpbGUiLCJyb2xlIiwiZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMiLCJwZW5kaW5nQWN0aW9ucyIsImlkcyIsImZvckVhY2giLCJhY3Rpb24iLCJhcmdzIiwidG9vbF9hcmdzIiwicmVjIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkIiwicmF3IiwidGFza19pZCIsIm4iLCJwYXJzZUludCIsIlN0cmluZyIsImlzTmFOIiwicHVzaCIsImxpc3QiLCJ0YXNrX2lkcyIsInRpZCIsImV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zIiwiX3JlYyRhZ2VudF9pZCIsImVkaXRBY3Rpb24iLCJmaW5kIiwiYSIsInRvTG93ZXJDYXNlIiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lIiwidG9vbE5hbWUiLCJfcmVmIiwiX3JlYyRhZ2VudF9pZDIiLCJleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQiLCJ0ZXh0IiwibGFiZWxlZCIsIm1hdGNoIiwiYm9sZCIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJ0b1N0cmluZyIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsIl9saW5lJHNwbGl0Iiwic3BsaXQiLCJfbGluZSRzcGxpdDIiLCJfc2xpY2VkVG9BcnJheSIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwicmVwbGFjZSIsImRhdGFTdHIiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwicGFyc2VFcnJvciIsImNvbnNvbGUiLCJlcnJvciIsInByb2Nlc3NTU0VTdHJlYW0iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJ0aHJlYWRJZCIsImNhbGxiYWNrcyIsIl9yZXNwb25zZSRib2R5IiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImlzU3RyZWFtQ29tcGxldGUiLCJoYW5kbGVMaW5lIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJpIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJfaGFuZGxlTGluZSIsInBhcnNlZCIsImV2ZW50RGF0YSIsImNvbnRlbnQiLCJvblRva2VuIiwibWVzc2FnZSIsIm9uTm9kZSIsIl9ldmVudERhdGEkYWdlbnRfaWQiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJzdWdnZXN0aW9ucyIsInN1Z2dlc3RfcmVwbHkiLCJhZ2VudElkUmF3IiwiY29tcGxldGVkQWdlbnRJZCIsIm9uQ29tcGxldGUiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJjYWxsIiwib25FcnJvciIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwicmVhZCIsInNlbnQiLCJhYnJ1cHQiLCJkZWNvZGUiLCJzdHJlYW0iLCJwb3AiLCJsZW5ndGgiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsInVzZUNoYXRNYW5hZ2VyIiwiX3JlZjMiLCJpbml0aWFsQ2hhdElkIiwiY2hhdElkIiwidXNlckluaXRpYWxNZXNzYWdlIiwiX3JlZjMkYWdlbnRzIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsImNsaWVudCIsInNldENsaWVudCIsImFnZW50IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJjaGlwc1Byb2plY3QiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJjdXJyZW50TWVzc2FnZUlkIiwiY3VycmVudFVzZXJRdWVzdGlvbiIsImN1cnJlbnRDaGF0SWQiLCJyZXBvcnRlZEV2ZW50IiwibWVzc2FnZXNSZWYiLCJpc1Byb2Nlc3NpbmdSZWYiLCJmaXJzdFRpbWVSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiYWN0aXZlTG9hZGluZ3MiLCJzZXRBY3RpdmVMb2FkaW5ncyIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiX3VzZUNoYXRNZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwibG9hZE1lc3NhZ2VzIiwiYWRkTWVzc2FnZSIsInJlbW92ZU1lc3NhZ2UiLCJoYW5kbGVTY3JvbGwiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwibGFzdE1zZ1dpdGhQcm9qZWN0IiwibXNnIiwicHJvamVjdElkIiwiYXQiLCJfcmVmNCIsInByb2plY3ROYW1lIiwidGhlbiIsInByb2plY3RzIiwiZm91bmQiLCJwIiwiX2ZvdW5kJGNsaWVudCIsImNsaWVudE5hbWUiLCJsYXN0TXNnV2l0aENsaWVudCIsImNsaWVudElkIiwiX3JlZjUiLCJtc2dDbGllbnRJZCIsIm1zZ0NsaWVudE5hbWUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImVycm9yTWVzc2FnZSIsImlzRXJyb3IiLCJkYXRlIiwiRGF0ZSIsInVzZXIiLCJBU1NJU1RBTlQiLCJoYW5kbGVTdHJlYW1VcGRhdGUiLCJ0ZW1wTWVzc2FnZUlkIiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjYiLCJfY2FsbGVlMiIsIl9wcmV2aW91c01lc3NhZ2UkYXBwciIsIl9jcmVhdGVBZ2VudEZvbGxvd1VwIiwiX2VkaXRBZ2VudEZvbGxvd1VwIiwidGFza1VybFJlZ2V4IiwibWF0Y2hlcyIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsImhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJ3YXNUYXNrQ3JlYXRpb24iLCJ3YXNUYXNrRWRpdCIsIndhc1Rhc2tEZWxldGUiLCJ3YXNDcmVhdGVBZ2VudEFwcHJvdmVkIiwid2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJjb25maWd1cmVkQWdlbnRJZCIsIndhc0VkaXRBZ2VudEFwcHJvdmVkIiwiZWRpdEFnZW50Rm9sbG93VXAiLCJmcm9tU3RyZWFtIiwiZnJvbUFyZ3MiLCJyZXNvbHZlZEFnZW50SWQiLCJ0YXNrSWRzRnJvbVVybHMiLCJ0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsIiwidGFza0lkc0Zyb21EZWxldGlvblRleHQiLCJ0YXNrSWRzRm9yRGFzaGJvYXJkIiwic2hvdWxkU3luY0Rhc2hib2FyZCIsInRhc2tJZHMiLCJ0YWIiLCJ0YWJTZWdtZW50IiwibGFzdFByb2plY3RNZXNzYWdlIiwiY29udGV4dFByb2plY3RJZFJhdyIsImNvbnRleHRQcm9qZWN0SWQiLCJwYXRoTWF0Y2giLCJyb3V0ZVByb2plY3RJZCIsImlzT25Qcm9qZWN0Um91dGUiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfd2luZG93JG5ld1Byb2plY3REYXMyIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMyIsIl93aW5kb3ckbmV3UHJvamVjdERhczQiLCJfd2luZG93JG5ld1Byb2plY3REYXM1IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNiIsIl9jb250ZXh0MiIsIlJlZ0V4cCIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hdGNoQWxsIiwibSIsImFwcHJvdmFsIiwicGVuZGluZ19hY3Rpb25zIiwic29tZSIsImFwcHJvdmFsU3RhdHVzIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImFpQ2hhdEhpdGxPcHRpb24iLCJfb2JqZWN0U3ByZWFkIiwiYWdlbnRfdHlwZSIsImFjdGlvbl90eXBlIiwiZGVjaXNpb24iLCJvcHRpb24iLCJjcmVhdGVkX2FnZW50X2lkIiwidXJsIiwibG9jYXRpb24iLCJwYXRobmFtZSIsIm5ld1Byb2plY3REYXNoYm9hcmQiLCJhZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJjaGF0QWdlbnQiLCJlcnIiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjciLCJfY2FsbGVlMyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJfbWVzc2FnZXNSZWYkY3VycmVudCIsIl9wcm9qZWN0JGNsaWVudCIsIl9ub3JtYWxpemVTZW5kTWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJoaXN0b3J5IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJwcm9qZWN0VG9SZXF1ZXN0IiwicGF5bG9hZEZhcUlkIiwicGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDMiLCJwbUFpVHlwZWRUZXh0IiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwibGFuZyIsInVzZXJJZCIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY29tcGFueV9pZCIsIm1lc3NhZ2VJZCIsImFnZW50TmFtZSIsImVudGl0eSIsImFnZW50RW50aXR5IiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJjaGFuZ2VQcm9qZWN0IiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmOCIsIl9jYWxsZWU0IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsIl9jb250ZXh0NCIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJ3YXNIZWxwZnVsIiwiX3gxMiIsIl94MTMiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiX3JlZjkiLCJfY2FsbGVlNSIsInRocmVhZElkcyIsImVkaXRlZEFjdGlvbnMiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwibG9hZGluZ0tleSIsImV4aXN0aW5nTWVzc2FnZSIsIm5ld1N0YXR1cyIsIl90IiwiX2NvbnRleHQ1IiwiX20kYXBwcm92YWwiLCJ0aHJlYWRfaWQiLCJfZGVmaW5lUHJvcGVydHkiLCJPcmNoZXN0cmF0b3IiLCJjb250aW51ZVRocmVhZCIsInNlc3Npb25JZCIsInNlc3Npb25faWQiLCJvayIsIm5ld0xvYWRpbmdzIiwiY3VycmVudFRocmVhZElkIiwiZGlzcGxheU1zZyIsImFwcHJvdmFsUGF5bG9hZCIsIl94MTQiLCJfeDE1IiwiX3gxNiIsImluaXRpYWxpemVDaGF0IiwiX2NhbGxlZTYiLCJfdXNlckluaXRpYWxNZXNzYWdlJG0iLCJfdXNlckluaXRpYWxNZXNzYWdlJGEiLCJfcHJvamVjdCRpZCIsIl9yZWYxIiwiX3Byb2plY3QkbmFtZSIsIl9yZWYxMCIsIl9yZWYxMSIsIl9yZWYxMiIsIl9jbGllbnQkaWQiLCJfcHJvamVjdCRjbGllbnQyIiwiX3JlZjEzIiwiX3JlZjE0IiwiX3JlZjE1IiwiX2NsaWVudCRuYW1lIiwiX3Byb2plY3QkY2xpZW50MyIsImhhc0luaXRpYWxNZXNzYWdlIiwiaGFzSW5pdGlhbEF0dGFjaG1lbnRzIiwiaGFzSW5pdGlhbEZhcSIsImhhc0luaXRpYWxQYXlsb2FkIiwibGFzdE1zZ1Byb2plY3QiLCJsYXN0TXNnQ2xpZW50IiwidG9OdW1iZXJPck51bGwiLCJyZXNvbHZlZFByb2plY3RJZCIsInJlc29sdmVkUHJvamVjdE5hbWUiLCJyZXNvbHZlZENsaWVudElkIiwicmVzb2x2ZWRDbGllbnROYW1lIiwiX2NvbnRleHQ2IiwiQm9vbGVhbiIsInYiLCJyZXNldENoYXQiLCJzdG9wR2VuZXJhdGlvbiIsImlzRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0ZWQtb3B0aW9uYWwtY2hhaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyB1c2VDaGF0TWVzc2FnZXMgfSBmcm9tICcuLi91c2VDaGF0TWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0LCBQZW5kaW5nQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0LCBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGl0bEFuYWx5dGljcydcblxudHlwZSBBdHRhY2htZW50c09yT3B0aW9ucyA9IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnNcblxuY29uc3Qgbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzID0gKGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudHNPck9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXR0YWNobWVudHNPck9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHsgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzT3JPcHRpb25zLCBvcHRpb25zOiB7fSBhcyBTZW5kTWVzc2FnZU9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogU2VuZE1lc3NhZ2VPcHRpb25zID0gYXR0YWNobWVudHNPck9wdGlvbnMgPz8ge31cbiAgcmV0dXJuIHsgYXR0YWNobWVudHM6IG9wdGlvbnMuYXR0YWNobWVudHMgPz8gW10sIG9wdGlvbnMgfVxufVxuXG5jb25zdCBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyA9IChyYXdBdHRhY2htZW50czogdW5rbm93bik6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3QXR0YWNobWVudHMpKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gcmF3QXR0YWNobWVudHNcbiAgICAuZmlsdGVyKChhdHRhY2htZW50KTogYXR0YWNobWVudCBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiAhIWF0dGFjaG1lbnQgJiYgdHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnKVxuICAgIC5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQubmFtZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5uYW1lLnRyaW0oKSA/IGF0dGFjaG1lbnQubmFtZS50cmltKCkgOiBgZmlsZS0ke2luZGV4ICsgMX1gXG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGF0dGFjaG1lbnQudHlwZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC50eXBlLnRyaW0oKSA/IGF0dGFjaG1lbnQudHlwZS50cmltKCkgOiAncGRmJ1xuICAgICAgY29uc3QgbWltZVR5cGUgPSB0eXBlb2YgYXR0YWNobWVudC5taW1lX3R5cGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC5taW1lX3R5cGUgOiAnJ1xuICAgICAgY29uc3QgZnVsbEZpbGVOYW1lID0gbmFtZS5pbmNsdWRlcygnLicpID8gbmFtZSA6IGAke25hbWV9LiR7dHlwZX1gXG4gICAgICBjb25zdCBudW1lcmljU2l6ZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50LnNpemUgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBhdHRhY2htZW50LnNpemVcbiAgICAgICAgICA6IE51bWJlci5pc0Zpbml0ZShOdW1iZXIoYXR0YWNobWVudC5zaXplKSlcbiAgICAgICAgICAgID8gTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSlcbiAgICAgICAgICAgIDogMFxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxlOiBuZXcgRmlsZShbXSwgZnVsbEZpbGVOYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pLFxuICAgICAgICBpZDpcbiAgICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5pZCA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5pZC50cmltKClcbiAgICAgICAgICAgID8gYXR0YWNobWVudC5pZFxuICAgICAgICAgICAgOiBgYXNzaXN0YW50LWZpbGUtJHtpbmRleH0tJHtmdWxsRmlsZU5hbWV9YCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2l6ZTogbnVtZXJpY1NpemUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVybF9vcmlnaW5hbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIDogdW5kZWZpbmVkLFxuICAgICAgICB1cmxfdGh1bWJuYWlsOiB0eXBlb2YgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX2ZpbGU6IHR5cGVvZiBhdHRhY2htZW50LnVybF9maWxlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX2ZpbGUgOiB1bmRlZmluZWQsXG4gICAgICAgIHJvbGU6IGF0dGFjaG1lbnQucm9sZSA9PT0gJ2Fzc2lzdGFudCcgPyAnYXNzaXN0YW50JyA6ICd1c2VyJyxcbiAgICAgIH1cbiAgICB9KVxufVxuXG4vKiogdGFza19pZCAvIHRhc2tfaWRzIGVuIHBlbmRpbmdfYWN0aW9ucyBkZSBkZWxldGVfKiAobGEgcmVzcHVlc3RhIHB1ZWRlIG5vIGluY2x1aXIgVVJMcyAvdGFza3Mv4oCmL2RldGFpbCkuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgcGVuZGluZ0FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmICghYWN0aW9uIHx8IHR5cGVvZiBhY3Rpb24gIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLnRvb2xfYXJnc1xuICAgIGlmICghKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSkgcmV0dXJuXG4gICAgY29uc3QgcmVjID0gYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2snKSB7XG4gICAgICBjb25zdCByYXcgPSByZWMudGFza19pZCA/PyByZWMuaWRcbiAgICAgIGlmIChyYXcgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFza3NfYmF0Y2gnKSB7XG4gICAgICBjb25zdCBsaXN0ID0gcmVjLnRhc2tfaWRzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICBsaXN0LmZvckVhY2godGlkID0+IHtcbiAgICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHRpZCksIDEwKVxuICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGVkaXRBY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG4gIGlmIChcbiAgICAhZWRpdEFjdGlvbiB8fFxuICAgICFlZGl0QWN0aW9uLnRvb2xfYXJncyB8fFxuICAgIHR5cGVvZiBlZGl0QWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHxcbiAgICBBcnJheS5pc0FycmF5KGVkaXRBY3Rpb24udG9vbF9hcmdzKVxuICApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGVkaXRBY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10sIHRvb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgYWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gdG9vbE5hbWUudG9Mb3dlckNhc2UoKSlcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi50b29sX2FyZ3MgfHwgdHlwZW9mIGFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYWN0aW9uLnRvb2xfYXJncykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkID8/IHJlYy5pZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuLyoqIMOabHRpbW8gcmVjdXJzbyBzaSBubyBoYXkgbGlua3MgbmkgdG9vbF9hcmdzIHBhcnNlYWJsZXMgKHAuIGVqLiBcIklEICoqNzU5NzEwNioqXCIpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KHRleHQ6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgY29uc3QgbGFiZWxlZCA9IHRleHQubWF0Y2goL1xcYklEXFxzKlxcKlxcKihcXGQrKVxcKlxcKi9pKVxuICBpZiAobGFiZWxlZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChsYWJlbGVkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICBjb25zdCBib2xkID0gdGV4dC5tYXRjaCgvXFwqXFwqKFxcZHs1LH0pXFwqXFwqLylcbiAgaWYgKGJvbGQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQoYm9sZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KHtcbiAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICB9KVxuXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBhdXRoVXNlci5pZC50b1N0cmluZygpIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBhdXRoVXNlci5maXJzdE5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gYXV0aFVzZXIucGljdHVyZVxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0ge1xuICAgICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuY29uc3QgcGFyc2VTU0VMaW5lID0gKGxpbmU6IHN0cmluZyk6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfSB8IG51bGwgPT4ge1xuICBpZiAoIWxpbmUudHJpbSgpKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG4gICAgcmV0dXJuIHsgZXZlbnRUeXBlLCBkYXRhIH1cbiAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NTU0VTdHJlYW0gPSBhc3luYyAoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgY2FsbGJhY2tzOiB7XG4gICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQ29tcGxldGU6IChcbiAgICAgIGZpbmFsQ29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBhZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICkgPT4gdm9pZFxuICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25BcHByb3ZhbFJlcXVpcmVkPzogKGFwcHJvdmFsOiBhbnksIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICB9XG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgaWYgKCFyZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIGxldCBidWZmZXIgPSAnJ1xuICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgbGV0IGlzU3RyZWFtQ29tcGxldGUgPSBmYWxzZVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUxpbmUobGluZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VTU0VMaW5lKGxpbmUpXG4gICAgaWYgKCFwYXJzZWQpIHJldHVyblxuXG4gICAgY29uc3QgeyBldmVudFR5cGUsIGRhdGEgfSA9IHBhcnNlZFxuICAgIGNvbnN0IGV2ZW50RGF0YSA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuICAgIGlmIChldmVudFR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBldmVudERhdGEuY29udGVudCBhcyBzdHJpbmdcbiAgICAgIGFjY3VtdWxhdGVkQ29udGVudCArPSBjb250ZW50XG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdub2RlJykge1xuICAgICAgaWYgKGV2ZW50RGF0YS5tZXNzYWdlICYmIHR5cGVvZiBldmVudERhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2FsbGJhY2tzLm9uTm9kZShldmVudERhdGEubWVzc2FnZSwgdGhyZWFkSWQpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IChldmVudERhdGEuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgY29uc3Qgc291cmNlcyA9IChldmVudERhdGEuc291cmNlcyBhcyB1bmtub3duKSB8fCBudWxsXG4gICAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSAoZXZlbnREYXRhLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuYXR0YWNobWVudHMpID8gZXZlbnREYXRhLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5zdWdnZXN0X3JlcGx5KVxuICAgICAgICA/IChldmVudERhdGEuc3VnZ2VzdF9yZXBseSBhcyBzdHJpbmdbXSlcbiAgICAgICAgOiBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5zdWdnZXN0aW9ucylcbiAgICAgICAgICA/IChldmVudERhdGEuc3VnZ2VzdGlvbnMgYXMgc3RyaW5nW10pXG4gICAgICAgICAgOiBudWxsXG4gICAgICBjb25zdCBhZ2VudElkUmF3ID0gZXZlbnREYXRhLmFnZW50X2lkID8/IGV2ZW50RGF0YS5hZ2VudElkXG4gICAgICBjb25zdCBjb21wbGV0ZWRBZ2VudElkID0gYWdlbnRJZFJhdyAhPSBudWxsICYmIFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgIT09ICcnID8gU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSA6IG51bGxcbiAgICAgIGNhbGxiYWNrcy5vbkNvbXBsZXRlKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkLCB0aHJlYWRJZCwgYXR0YWNobWVudHMsIHN1Z2dlc3Rpb25zLCBjb21wbGV0ZWRBZ2VudElkKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnYXBwcm92YWxfcmVxdWlyZWQnKSB7XG4gICAgICBjYWxsYmFja3Mub25BcHByb3ZhbFJlcXVpcmVkPy4oZXZlbnREYXRhLCBhY2N1bXVsYXRlZENvbnRlbnQsIHRocmVhZElkKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnZXJyb3InKSB7XG4gICAgICBjYWxsYmFja3Mub25FcnJvcihldmVudERhdGEuZXJyb3IsIHRocmVhZElkKVxuICAgIH1cbiAgfVxuXG4gIHdoaWxlICghaXNTdHJlYW1Db21wbGV0ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgIGlmIChkb25lKSB7XG4gICAgICBpc1N0cmVhbUNvbXBsZXRlID0gdHJ1ZVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGhhbmRsZUxpbmUobGluZXNbaV0pXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWFuYWdlciA9ICh7XG4gIGNoYXRJZDogaW5pdGlhbENoYXRJZCxcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBvbkVycm9yLFxuICBhZ2VudHMgPSBbXSxcbn06IFVzZUNoYXRNYW5hZ2VyUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3Qge1xuICAgIHByb2plY3QsXG4gICAgc2V0UHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgc2V0Q2xpZW50LFxuICAgIGFnZW50LFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdXNlU3RhYmxlQ2FsbGJhY2tzKGF1dGhVc2VyKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG4gIGNvbnN0IGN1cnJlbnRNZXNzYWdlSWQgPSB1c2VSZWYodXVpZHY0KCkpXG4gIGNvbnN0IGN1cnJlbnRVc2VyUXVlc3Rpb24gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY3VycmVudENoYXRJZCA9IHVzZVJlZihpbml0aWFsQ2hhdElkIHx8IHV1aWR2NCgpKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG5cbiAgY29uc3QgaXNXZWJTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNXZWJTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc0RlZXBTZWFyY2hBY3RpdmUpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgY29uc3QgeyBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIGxvYWRNZXNzYWdlcywgYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgaGFuZGxlU2Nyb2xsIH0gPVxuICAgIHVzZUNoYXRNZXNzYWdlcyh7XG4gICAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgY3VycmVudFVzZXIsXG4gICAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgICBvbkVycm9yLFxuICAgICAgYWdlbnRzLFxuICAgIH0pXG5cbiAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsQ2hhdElkICYmIGluaXRpYWxDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgLy8gTGltcGlhciBjb250ZXh0byBnbG9iYWwgYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG5cbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuXG4gICAgICBsb2FkTWVzc2FnZXMoKVxuICAgIH1cbiAgfSwgW2luaXRpYWxDaGF0SWQsIHByb2plY3QsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0Q2hpcHNQcm9qZWN0LCBsb2FkTWVzc2FnZXNdKVxuXG4gIC8vIFNpbmNyb25pemFyIGNoaXBzUHJvamVjdCBjdWFuZG8gaGF5IG1lbnNhamVzIGNvbiBwcm9qZWN0SWQgcGVybyBjaGlwc1Byb2plY3Qgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGlwc1Byb2plY3QgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBjb25zdCBsYXN0TXNnV2l0aFByb2plY3QgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgIGNvbnN0IHsgcHJvamVjdElkLCBwcm9qZWN0TmFtZSB9ID0gbGFzdE1zZ1dpdGhQcm9qZWN0IHx8IHt9XG4gICAgaWYgKCFwcm9qZWN0SWQpIHJldHVyblxuXG4gICAgZmV0Y2hQcm9qZWN0cyhwcm9qZWN0SWQpLnRoZW4ocHJvamVjdHMgPT4ge1xuICAgICAgY29uc3QgZm91bmQgPSBwcm9qZWN0cz8uZmluZChwID0+IE51bWJlcihwLmlkKSA9PT0gTnVtYmVyKHByb2plY3RJZCkpXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZTogZm91bmQubmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiBmb3VuZC5jbGllbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoZm91bmQuaWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KGZvdW5kKVxuICAgICAgfSBlbHNlIGlmIChwcm9qZWN0TmFtZSkge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWU6ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZCksXG4gICAgICAgIH0pXG4gICAgICAgIHNldFByb2plY3QoeyBpZDogTnVtYmVyKHByb2plY3RJZCksIG5hbWU6IHByb2plY3ROYW1lIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfSwgW21lc3NhZ2VzLCBjaGlwc1Byb2plY3QsIGxvYWRpbmdNZXNzYWdlcywgZmV0Y2hQcm9qZWN0cywgc2V0Q2hpcHNQcm9qZWN0LCBzZXRQcm9qZWN0XSlcblxuICAvLyBTaW5jcm9uaXphciBjbGllbnQgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gY2xpZW50SWQgcGVybyBjbGllbnQgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjbGllbnQgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBjb25zdCBsYXN0TXNnV2l0aENsaWVudCA9IG1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gbXNnLmNsaWVudElkICE9IG51bGwgJiYgbXNnLmNsaWVudE5hbWUpLmF0KC0xKVxuICAgIGNvbnN0IHsgY2xpZW50SWQ6IG1zZ0NsaWVudElkLCBjbGllbnROYW1lOiBtc2dDbGllbnROYW1lIH0gPSBsYXN0TXNnV2l0aENsaWVudCB8fCB7fVxuICAgIGlmIChtc2dDbGllbnRJZCA9PSBudWxsIHx8ICFtc2dDbGllbnROYW1lKSByZXR1cm5cblxuICAgIHNldENsaWVudD8uKHsgaWQ6IE51bWJlcihtc2dDbGllbnRJZCksIG5hbWU6IG1zZ0NsaWVudE5hbWUgfSlcbiAgfSwgW21lc3NhZ2VzLCBjbGllbnQsIGxvYWRpbmdNZXNzYWdlcywgc2V0Q2xpZW50XSlcblxuICBjb25zdCBoYW5kbGVTdHJlYW1FcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIChlcnJvck1lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgICA6IHQoJ2NoYXQuZXJyb3InKVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IHRlbXBNZXNzYWdlSWQsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnQsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBzb3VyY2VzLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1GaW5pc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIHJhd0F0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBjb21wbGV0ZWRBZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zIHx8IFtdLFxuICAgICAgICAuLi4oY3JlYXRlQWdlbnRGb2xsb3dVcCA/IHsgY3JlYXRlQWdlbnRGb2xsb3dVcCB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgaWYgKGNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChjcmVhdGVBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gYcOxYWRpciBlbCBhZ2VudGUgcmVjacOpbiBjcmVhZG8gYWwgbGlzdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZWRpdEFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChlZGl0QWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyByZWZyZXNjYXIgZWwgYWdlbnRlIGVkaXRhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHQsIGV2ZW50LCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYWRkTWVzc2FnZSh7XG4gICAgICBpZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tY2FuY2VsbGVkYCxcbiAgICAgIG1lc3NhZ2U6IHQoJ2NoYXQuY2FuY2VsbGVkJyksXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogdHJ1ZSxcbiAgICB9KVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICB9LCA1MDApXG4gIH0sIFthZGRNZXNzYWdlLCB0XSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkKSB7XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gIH0pXG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudD8uW21lc3NhZ2VzUmVmLmN1cnJlbnQubGVuZ3RoIC0gMV0/LmFnZW50SWRcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgcXVlc3Rpb24tJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBpZiAobWVzc2FnZSA9PT0gdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJykpIHtcbiAgICAgICAgZmluYWxNZXNzYWdlID0gYEZBUTogJHt0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKX0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtcbiAgICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IHByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgLy8gVmVyaWZpY2FyIGNvbnNpc3RlbmNpYSBlbnRyZSBjb250ZXh0byBnbG9iYWwgeSDDumx0aW1vIG1lbnNhamVcbiAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0Py5pZFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcblxuICAgICAgbGV0IHByb2plY3RUb1JlcXVlc3Q6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgICAgIC8vIFNpIGhheSDDumx0aW1vIG1lbnNhamUgY29uIHByb2plY3RJZCwgdXNhcmxvIChtw6FzIGNvbmZpYWJsZSlcbiAgICAgIGlmIChsYXN0TWVzc2FnZVByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICAgICAgfVxuICAgICAgLy8gU2kgbm8gaGF5IMO6bHRpbW8gbWVuc2FqZSwgdXNhciBlbCBjb250ZXh0byBnbG9iYWxcbiAgICAgIGVsc2UgaWYgKGNvbnRleHRQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gY29udGV4dFByb2plY3RJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG4gICAgICBjb25zdCBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPSBhZ2VudFN1Z2dlc3Rpb25JZCA/PyBvcHRpb25zLmFnZW50U3VnZ2VzdGlvbklkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjbGllbnQ/LmlkXG4gICAgICAgICAgPyB7IGNsaWVudElkOiBjbGllbnQuaWQsIC4uLihjbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnQ/LmlkXG4gICAgICAgICAgICA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkLCAuLi4ocHJvamVjdC5jbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRmFxSWQgPyB7IGZhcUlkOiBwYXlsb2FkRmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICB9XG5cbiAgICAgIGFza01haWEocGF5bG9hZERhdGEpXG4gICAgfSxcbiAgICBbXG4gICAgICBhZGRNZXNzYWdlLFxuICAgICAgZXZlbnQsXG4gICAgICBhc2tNYWlhLFxuICAgICAgcHJvamVjdCxcbiAgICAgIGNsaWVudCxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgXVxuICApXG5cbiAgY29uc3QgY2hhbmdlUHJvamVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGlmICghY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSByZXR1cm5cblxuICAgICAgaWYgKG9wdGlvbi5pZCAhPT0gcHJvamVjdD8uaWQpIHtcbiAgICAgICAgc2V0UHJvamVjdChvcHRpb24pXG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9qZWN0ICYmIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pKVxuXG4gICAgICAgIGFza01haWEoe1xuICAgICAgICAgIG1lc3NhZ2U6IGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIHByb2plY3RJZDogb3B0aW9uLmlkLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwcm9qZWN0LCBzZXRQcm9qZWN0LCBhc2tNYWlhLCBhdXRoVXNlciwgaXNXZWJTZWFyY2hBY3RpdmUsIGFnZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT5cbiAgICApID0+IHtcbiAgICAgIGlmICghdGhyZWFkSWRzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gdGhyZWFkX2lkcyBwcm92aWRlZCBmb3IgYXBwcm92YWwgZGVjaXNpb24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQnVzY2FyIGVsIG1lbnNhamUgcXVlIGNvbnRpZW5lIGFsZ3VubyBkZSBlc3RvcyB0aHJlYWRJZHMgZW4gc3VzIHBlbmRpbmdfYWN0aW9uc1xuICAgICAgY29uc3QgbWVzc2FnZVdpdGhBcHByb3ZhbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+XG4gICAgICAgIG0uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICAgICAgKVxuXG4gICAgICBpZiAoIW1lc3NhZ2VXaXRoQXBwcm92YWwgfHwgIW1lc3NhZ2VXaXRoQXBwcm92YWwuYXBwcm92YWwpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2UgZW5jb250csOzIG1lbnNhamUgY29uIGFwcHJvdmFsIHBhcmEgdGhyZWFkX2lkczonLCB0aHJlYWRJZHMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGFwcHJvdmFsIH0gPSBtZXNzYWdlV2l0aEFwcHJvdmFsXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICAvLyBVc2UgZmlyc3QgdGhyZWFkSWQgYXMgdGhlIGxvYWRpbmcga2V5XG4gICAgICBjb25zdCBsb2FkaW5nS2V5ID0gdGhyZWFkSWRzWzBdXG4gICAgICAvLyBVcGRhdGUgbWVzc2FnZSBzdGF0dXMgaW1tZWRpYXRlbHlcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IG1lc3NhZ2VJZCkge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuXG4gICAgICAvLyBUcmlnZ2VyIHJlLXJlbmRlclxuICAgICAgY29uc3QgZXhpc3RpbmdNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT4gbS5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgaWYgKGV4aXN0aW5nTWVzc2FnZSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgYWRkTWVzc2FnZSh7IC4uLmV4aXN0aW5nTWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9KVxuICAgICAgfVxuXG4gICAgICAvLyBDYWxsIGNvbnRpbnVlLXRocmVhZCBlbmRwb2ludCB3aXRoIEFMTCB0aHJlYWRfaWRzIGluIGEgc2luZ2xlIHJlcXVlc3RcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgLy8gQWRkIGxvYWRpbmdcbiAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW2xvYWRpbmdLZXldOiB0KCdjaGF0LnByb2Nlc3NpbmcnKSxcbiAgICAgIH0pKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkKHtcbiAgICAgICAgICB0aHJlYWRJZHMsIC8vIFNlbmQgYWxsIGFjdGlvbiB0aHJlYWRfaWRzIGF0IG9uY2VcbiAgICAgICAgICBzZXNzaW9uSWQ6IGFwcHJvdmFsLnNlc3Npb25faWQsXG4gICAgICAgICAgZGVjaXNpb246IGVkaXRlZEFjdGlvbnMgPyAnZWRpdCcgOiBkZWNpc2lvbixcbiAgICAgICAgICBlZGl0ZWRBY3Rpb25zLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbbG9hZGluZ0tleV1cbiAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIFNTRSBzdHJlYW1cbiAgICAgICAgYXdhaXQgcHJvY2Vzc1NTRVN0cmVhbShyZXNwb25zZSwgbG9hZGluZ0tleSwge1xuICAgICAgICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZShjb250ZW50LCBudWxsLCAnJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlNc2cgPVxuICAgICAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKCdjcmVhdGVfdGFzaycpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoJ2Nsb25lX3Rhc2snKSA/IG1lc3NhZ2UgOiB0KCdjaGF0LmV4ZWN1dGluZ0FjdGlvbicpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50VGhyZWFkSWRdOiBkaXNwbGF5TXNnLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoXG4gICAgICAgICAgICBmaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICAgICAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgICAgICAgY3VycmVudFRocmVhZElkOiBzdHJpbmcsXG4gICAgICAgICAgICBhdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaChmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgYXR0YWNobWVudHMsIHN1Z2dlc3Rpb25zLCBhZ2VudElkKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkOiBhbnksIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gTmV3IEhJVEwgaW50ZXJydXB0aW9uIGRldGVjdGVkIGFmdGVyIHJlc3VtZSAoY2hhaW5lZCBhY3Rpb25zKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxSZXF1aXJlZChhcHByb3ZhbFBheWxvYWQgYXMgQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2xvYWRpbmdLZXldXG4gICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbYXV0aFVzZXIsIGFnZW50LCBhZGRNZXNzYWdlLCBoYW5kbGVTdHJlYW1FcnJvciwgaGFuZGxlU3RyZWFtVXBkYXRlLCBoYW5kbGVTdHJlYW1GaW5pc2gsIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWRdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlPy5tZXNzYWdlPy50cmltKCkpXG4gICAgY29uc3QgaGFzSW5pdGlhbEF0dGFjaG1lbnRzID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2U/LmF0dGFjaG1lbnRzPy5sZW5ndGgpXG4gICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlPy5mYXFJZClcbiAgICBjb25zdCBoYXNJbml0aWFsUGF5bG9hZCA9IGhhc0luaXRpYWxNZXNzYWdlIHx8IGhhc0luaXRpYWxBdHRhY2htZW50cyB8fCBoYXNJbml0aWFsRmFxXG5cbiAgICAvLyBTaSB5YSBoYXkgYGluaXRpYWxDaGF0SWRgIChzZXNpw7NuIGV4aXN0ZW50ZSksIHByaW1lcm8gY2FyZ2Ftb3MgZWwgaGlzdMOzcmljby5cbiAgICAvLyBTaSBhZGVtw6FzIHZpZW5lIHVuIGB1c2VySW5pdGlhbE1lc3NhZ2VgIChjYXNvOiB2ZW5pbW9zIGRlIGhvbWUgY29uIHNlc2nDs25cbiAgICAvLyBwZW5kaW5nIHkgZWwgdXN1YXJpbyBlbnbDrWEgdW4gbWVuc2FqZS9GQVEpLCBzZWd1aW1vcyBhYmFqbyB5IGxvIGRlc3BhY2hhbW9zXG4gICAgLy8gZGVudHJvIGRlIGVzYSBtaXNtYSBzZXNpw7NuIChjaGF0SWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpLlxuICAgIGlmIChpbml0aWFsQ2hhdElkKSB7XG4gICAgICBhd2FpdCBsb2FkTWVzc2FnZXMoKVxuICAgICAgaWYgKCFoYXNJbml0aWFsUGF5bG9hZCkgcmV0dXJuXG4gICAgfSBlbHNlIGlmICghaGFzSW5pdGlhbFBheWxvYWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgfSkpXG5cbiAgICAvLyBQYXJhIHNlc2lvbmVzIGV4aXN0ZW50ZXMgZWwgY29udGV4dG8gZ2xvYmFsIChwcm9qZWN0L2NsaWVudCkgcHVlZGUgbm8gZXN0YXJcbiAgICAvLyBzaW5jcm9uaXphZG8gdG9kYXbDrWEgYWwgbW9tZW50byBkZSBkZXNwYWNoYXIgZWwgbWVuc2FqZS4gRGVyaXZhbW9zIGRlbFxuICAgIC8vIMO6bHRpbW8gbWVuc2FqZSBjYXJnYWRvIGNvbW8gZmFsbGJhY2sgcm9idXN0by5cbiAgICBjb25zdCBsYXN0TXNnUHJvamVjdCA9IGluaXRpYWxDaGF0SWQgPyBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtID0+IG0ucHJvamVjdElkKS5hdCgtMSkgOiB1bmRlZmluZWRcbiAgICBjb25zdCBsYXN0TXNnQ2xpZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgPyBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtID0+IG0uY2xpZW50SWQgIT0gbnVsbCAmJiBtLmNsaWVudE5hbWUpLmF0KC0xKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGNvbnN0IHRvTnVtYmVyT3JOdWxsID0gKHY6IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIgfCBudWxsID0+XG4gICAgICB2ID09IG51bGwgfHwgdiA9PT0gJycgPyBudWxsIDogTnVtYmVyKHYpXG5cbiAgICBjb25zdCByZXNvbHZlZFByb2plY3RJZDogbnVtYmVyIHwgbnVsbCA9IHByb2plY3Q/LmlkID8/IHRvTnVtYmVyT3JOdWxsKGxhc3RNc2dQcm9qZWN0Py5wcm9qZWN0SWQpXG4gICAgY29uc3QgcmVzb2x2ZWRQcm9qZWN0TmFtZSA9IHByb2plY3Q/Lm5hbWUgPz8gbGFzdE1zZ1Byb2plY3Q/LnByb2plY3ROYW1lID8/IG51bGxcbiAgICBjb25zdCByZXNvbHZlZENsaWVudElkOiBudW1iZXIgfCBudWxsID1cbiAgICAgIGNsaWVudD8uaWQgPz9cbiAgICAgIHRvTnVtYmVyT3JOdWxsKGxhc3RNc2dQcm9qZWN0Py5jbGllbnRJZCkgPz9cbiAgICAgIHRvTnVtYmVyT3JOdWxsKGxhc3RNc2dDbGllbnQ/LmNsaWVudElkKSA/P1xuICAgICAgcHJvamVjdD8uY2xpZW50Py5pZCA/P1xuICAgICAgbnVsbFxuICAgIGNvbnN0IHJlc29sdmVkQ2xpZW50TmFtZSA9XG4gICAgICBjbGllbnQ/Lm5hbWUgPz8gbGFzdE1zZ1Byb2plY3Q/LmNsaWVudE5hbWUgPz8gbGFzdE1zZ0NsaWVudD8uY2xpZW50TmFtZSA/PyBwcm9qZWN0Py5jbGllbnQ/Lm5hbWUgPz8gbnVsbFxuXG4gICAgYXNrTWFpYSh7XG4gICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UhLm1lc3NhZ2UsXG4gICAgICBoaXN0b3J5LFxuICAgICAgcHJvamVjdElkOiByZXNvbHZlZFByb2plY3RJZCxcbiAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkISxcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgIC4uLihyZXNvbHZlZENsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkOiByZXNvbHZlZENsaWVudElkIH0gOiB7fSksXG4gICAgICAuLi4ocmVzb2x2ZWRQcm9qZWN0TmFtZSA/IHsgcHJvamVjdE5hbWU6IHJlc29sdmVkUHJvamVjdE5hbWUgfSA6IHt9KSxcbiAgICAgIC4uLihyZXNvbHZlZENsaWVudE5hbWUgPyB7IGNsaWVudE5hbWU6IHJlc29sdmVkQ2xpZW50TmFtZSB9IDoge30pLFxuICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZSEuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UhLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlIS5mYXFJZCA/IHsgZmFxSWQ6IHVzZXJJbml0aWFsTWVzc2FnZSEuZmFxSWQgfSA6IHt9KSxcbiAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UhLmFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogdXNlckluaXRpYWxNZXNzYWdlIS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgIH0pXG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBhdXRoVXNlcixcbiAgICBhZ2VudCxcbiAgICBhc2tNYWlhLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgXSlcblxuICBjb25zdCByZXNldENoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICB9LCBbXSlcblxuICBjb25zdCBzdG9wR2VuZXJhdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdG9wU3RyZWFtaW5nKClcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtzdG9wU3RyZWFtaW5nXSlcblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBjdXJyZW50UHJvamVjdCxcbiAgICBjdXJyZW50Q2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgY3VycmVudE1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBRzlCLFNBQVNDLE9BQU8sUUFBaUIsd0JBQXdCO0FBQ3pELFNBQVNDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUMvRCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxhQUFhO0FBQzlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFDdEMsU0FBU0MsUUFBUSxRQUFRLDREQUE0RDtBQUNyRixTQUF1Q0MsZUFBZSxRQUF3QyxrQkFBa0I7QUFHaEgsU0FBU0MsV0FBVyxRQUFRLGdCQUFnQjtBQUM1QyxTQUFTQyxpQkFBaUIsUUFBUSxzQkFBc0I7QUFDeEQsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBQ2pFLFNBQVNDLGdCQUFnQixRQUFRLDZDQUE2QztBQUM5RSxTQUFTQyx1QkFBdUIsRUFBRUMseUJBQXlCLFFBQVEsMkJBQTJCO0FBSTlGLElBQU1DLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUlDLG9CQUEyQyxFQUFLO0VBQUEsSUFBQUMsb0JBQUE7RUFDaEYsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENB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
|
|
1132
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZmV0Y2hBZ2VudERldGFpbCIsImJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0IiwiZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSIsInN0cmVhbWluZ1N0b3JlIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJfb3B0aW9ucyRhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dGFjaG1lbnRzIiwib3B0aW9ucyIsIm5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzIiwicmF3QXR0YWNobWVudHMiLCJmaWx0ZXIiLCJhdHRhY2htZW50IiwiX3R5cGVvZiIsIm1hcCIsImluZGV4IiwibmFtZSIsInRyaW0iLCJjb25jYXQiLCJ0eXBlIiwibWltZVR5cGUiLCJtaW1lX3R5cGUiLCJmdWxsRmlsZU5hbWUiLCJpbmNsdWRlcyIsIm51bWVyaWNTaXplIiwic2l6ZSIsIk51bWJlciIsImlzRmluaXRlIiwiZmlsZSIsIkZpbGUiLCJpZCIsInVybF9vcmlnaW5hbCIsInVuZGVmaW5lZCIsInVybF90aHVtYm5haWwiLCJ1cmxfZmlsZSIsInJvbGUiLCJleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwiZm9yRWFjaCIsImFjdGlvbiIsImFyZ3MiLCJ0b29sX2FyZ3MiLCJyZWMiLCJ0b29sX25hbWUiLCJfcmVjJHRhc2tfaWQiLCJyYXciLCJ0YXNrX2lkIiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiaXNOYU4iLCJwdXNoIiwibGlzdCIsInRhc2tfaWRzIiwidGlkIiwiZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMiLCJfcmVjJGFnZW50X2lkIiwiZWRpdEFjdGlvbiIsImZpbmQiLCJhIiwidG9Mb3dlckNhc2UiLCJhZ2VudF9pZCIsImFnZW50SWQiLCJleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUiLCJ0b29sTmFtZSIsIl9yZWYiLCJfcmVjJGFnZW50X2lkMiIsImV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCIsInRleHQiLCJsYWJlbGVkIiwibWF0Y2giLCJib2xkIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJjdXJyZW50VXNlciIsInRvU3RyaW5nIiwiZmlyc3ROYW1lIiwiYXZhdGFyIiwicGljdHVyZSIsImN1cnJlbnQiLCJwYXJzZVNTRUxpbmUiLCJsaW5lIiwiX2xpbmUkc3BsaXQiLCJzcGxpdCIsIl9saW5lJHNwbGl0MiIsIl9zbGljZWRUb0FycmF5IiwiZXZlbnRMaW5lIiwiZGF0YUxpbmUiLCJldmVudFR5cGUiLCJyZXBsYWNlIiwiZGF0YVN0ciIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJwYXJzZUVycm9yIiwiY29uc29sZSIsImVycm9yIiwicHJvY2Vzc1NTRVN0cmVhbSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJyZXNwb25zZSIsInRocmVhZElkIiwiY2FsbGJhY2tzIiwiX3Jlc3BvbnNlJGJvZHkiLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaXNTdHJlYW1Db21wbGV0ZSIsImhhbmRsZUxpbmUiLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJsaW5lcyIsImkiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIl9oYW5kbGVMaW5lIiwicGFyc2VkIiwiZXZlbnREYXRhIiwiY29udGVudCIsIm9uVG9rZW4iLCJtZXNzYWdlIiwib25Ob2RlIiwiX2V2ZW50RGF0YSRhZ2VudF9pZCIsImZpbmFsQ29udGVudCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsInN1Z2dlc3Rpb25zIiwic3VnZ2VzdF9yZXBseSIsImFnZW50SWRSYXciLCJjb21wbGV0ZWRBZ2VudElkIiwib25Db21wbGV0ZSIsIl9jYWxsYmFja3Mkb25BcHByb3ZhbCIsIm9uQXBwcm92YWxSZXF1aXJlZCIsImNhbGwiLCJvbkVycm9yIiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJyZWFkIiwic2VudCIsImFicnVwdCIsImRlY29kZSIsInN0cmVhbSIsInBvcCIsImxlbmd0aCIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwidXNlQ2hhdE1hbmFnZXIiLCJfcmVmMyIsImluaXRpYWxDaGF0SWQiLCJjaGF0SWQiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJfcmVmMyRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInByb2plY3QiLCJzZXRQcm9qZWN0IiwiY2xpZW50Iiwic2V0Q2xpZW50IiwiYWdlbnQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImNoaXBzUHJvamVjdCIsInNldENoaXBzUHJvamVjdCIsImV2ZW50IiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VTdGFibGVDYWxsYmFja3MiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsImN1cnJlbnRNZXNzYWdlSWQiLCJjdXJyZW50VXNlclF1ZXN0aW9uIiwiY3VycmVudENoYXRJZCIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImlzUHJvY2Vzc2luZ1JlZiIsImZpcnN0VGltZVJlZiIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYiLCJhY3RpdmVTdHJlYW1DaGF0SWRSZWYiLCJhYm9ydFN0cmVhbVNpbGVudGx5UmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImNsZWFyIiwibGFzdE1zZ1dpdGhQcm9qZWN0IiwibXNnIiwicHJvamVjdElkIiwiYXQiLCJfcmVmNCIsInByb2plY3ROYW1lIiwidGhlbiIsInByb2plY3RzIiwiZm91bmQiLCJwIiwiX2ZvdW5kJGNsaWVudCIsImNsaWVudE5hbWUiLCJsYXN0TXNnV2l0aENsaWVudCIsImNsaWVudElkIiwiX3JlZjUiLCJtc2dDbGllbnRJZCIsIm1zZ0NsaWVudE5hbWUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImVycm9yTWVzc2FnZSIsInRlbXBNZXNzYWdlSWQiLCJpc0Vycm9yIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwiQVNTSVNUQU5UIiwiaGFuZGxlU3RyZWFtVXBkYXRlIiwic3RhcnQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjYiLCJfY2FsbGVlMiIsIl9wcmV2aW91c01lc3NhZ2UkYXBwciIsIl9jcmVhdGVBZ2VudEZvbGxvd1VwIiwiX2VkaXRBZ2VudEZvbGxvd1VwIiwidGFza1VybFJlZ2V4IiwibWF0Y2hlcyIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsImhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJ3YXNUYXNrQ3JlYXRpb24iLCJ3YXNUYXNrRWRpdCIsIndhc1Rhc2tEZWxldGUiLCJ3YXNDcmVhdGVBZ2VudEFwcHJvdmVkIiwid2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJjb25maWd1cmVkQWdlbnRJZCIsIndhc0VkaXRBZ2VudEFwcHJvdmVkIiwiZWRpdEFnZW50Rm9sbG93VXAiLCJmcm9tU3RyZWFtIiwiZnJvbUFyZ3MiLCJyZXNvbHZlZEFnZW50SWQiLCJ0YXNrSWRzRnJvbVVybHMiLCJ0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsIiwidGFza0lkc0Zyb21EZWxldGlvblRleHQiLCJ0YXNrSWRzRm9yRGFzaGJvYXJkIiwic2hvdWxkU3luY0Rhc2hib2FyZCIsInRhc2tJZHMiLCJ0YWIiLCJ0YWJTZWdtZW50IiwibGFzdFByb2plY3RNZXNzYWdlIiwiY29udGV4dFByb2plY3RJZFJhdyIsImNvbnRleHRQcm9qZWN0SWQiLCJwYXRoTWF0Y2giLCJyb3V0ZVByb2plY3RJZCIsImlzT25Qcm9qZWN0Um91dGUiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfd2luZG93JG5ld1Byb2plY3REYXMyIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMyIsIl93aW5kb3ckbmV3UHJvamVjdERhczQiLCJfd2luZG93JG5ld1Byb2plY3REYXM1IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNiIsIl9jb250ZXh0MiIsIlJlZ0V4cCIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hdGNoQWxsIiwibSIsImFwcHJvdmFsIiwicGVuZGluZ19hY3Rpb25zIiwic29tZSIsImFwcHJvdmFsU3RhdHVzIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImFpQ2hhdEhpdGxPcHRpb24iLCJfb2JqZWN0U3ByZWFkIiwiYWdlbnRfdHlwZSIsImFjdGlvbl90eXBlIiwiZGVjaXNpb24iLCJvcHRpb24iLCJjcmVhdGVkX2FnZW50X2lkIiwidXJsIiwibG9jYXRpb24iLCJwYXRobmFtZSIsIm5ld1Byb2plY3REYXNoYm9hcmQiLCJhZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJjaGF0QWdlbnQiLCJlcnIiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJhYm9ydFN0cmVhbVNpbGVudGx5IiwiY3VycmVudFByb2plY3QiLCJzZW5kTWVzc2FnZSIsIl9yZWY3IiwiX2NhbGxlZTMiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJfcHJvamVjdCRjbGllbnQiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJuZXdNZXNzYWdlSWQiLCJsYXN0TWVzc2FnZVdpdGhQcm9qZWN0IiwiY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInBheWxvYWRGYXFJZCIsInBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQzIiwicG1BaVR5cGVkVGV4dCIsIlVTRVIiLCJwcm9qZWN0Q2hhbmdlZCIsImluY29tZVR5cGUiLCJoaXN0b3J5TWVzc2FnZSIsImxhbmciLCJ1c2VySWQiLCJsYXN0TmFtZSIsImNvbXBhbnlJZCIsImNvbXBhbnlfaWQiLCJtZXNzYWdlSWQiLCJhZ2VudE5hbWUiLCJlbnRpdHkiLCJhZ2VudEVudGl0eSIsIl94MCIsIl94MSIsIl94MTAiLCJfeDExIiwiY2hhbmdlUHJvamVjdCIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjgiLCJfY2FsbGVlNCIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJfY29udGV4dDQiLCJDaGF0cyIsIndhc0hlbHBmdWxDaGF0IiwiVEhVTUJTX1VQIiwid2FzSGVscGZ1bCIsIl94MTIiLCJfeDEzIiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsIl9yZWY5IiwiX2NhbGxlZTUiLCJ0aHJlYWRJZHMiLCJlZGl0ZWRBY3Rpb25zIiwibWVzc2FnZVdpdGhBcHByb3ZhbCIsImxvYWRpbmdLZXkiLCJleGlzdGluZ01lc3NhZ2UiLCJuZXdTdGF0dXMiLCJfdCIsIl9jb250ZXh0NSIsIl9tJGFwcHJvdmFsIiwidGhyZWFkX2lkIiwiX2RlZmluZVByb3BlcnR5IiwiT3JjaGVzdHJhdG9yIiwiY29udGludWVUaHJlYWQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uX2lkIiwib2siLCJuZXdMb2FkaW5ncyIsImN1cnJlbnRUaHJlYWRJZCIsImRpc3BsYXlNc2ciLCJhcHByb3ZhbFBheWxvYWQiLCJfeDE0IiwiX3gxNSIsIl94MTYiLCJpbml0aWFsaXplQ2hhdCIsIl9jYWxsZWU2IiwiX3VzZXJJbml0aWFsTWVzc2FnZSRtIiwiX3VzZXJJbml0aWFsTWVzc2FnZSRhIiwiX3Byb2plY3QkY2xpZW50MiIsIl9wcm9qZWN0JGNsaWVudDMiLCJoYXNJbml0aWFsTWVzc2FnZSIsImhhc0luaXRpYWxBdHRhY2htZW50cyIsImhhc0luaXRpYWxGYXEiLCJfY29udGV4dDYiLCJCb29sZWFuIiwicmVzZXRDaGF0Iiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IFNlbmRNZXNzYWdlT3B0aW9ucywgVXNlQ2hhdE1hbmFnZXJQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi91c2VFdmVudCdcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VVc2VyLCBDaGF0SGlzdG9yeVJvbGUsIEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQgeyBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCwgZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgeyBzdHJlYW1pbmdTdG9yZSB9IGZyb20gJy4uL3VzZVN0cmVhbWluZ01lc3NhZ2UnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMgPSAocmF3QXR0YWNobWVudHM6IHVua25vd24pOiBBdHRhY2htZW50RmlsZVtdID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhd0F0dGFjaG1lbnRzKSkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIHJhd0F0dGFjaG1lbnRzXG4gICAgLmZpbHRlcigoYXR0YWNobWVudCk6IGF0dGFjaG1lbnQgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gISFhdHRhY2htZW50ICYmIHR5cGVvZiBhdHRhY2htZW50ID09PSAnb2JqZWN0JylcbiAgICAubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50Lm5hbWUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQubmFtZS50cmltKCkgPyBhdHRhY2htZW50Lm5hbWUudHJpbSgpIDogYGZpbGUtJHtpbmRleCArIDF9YFxuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhdHRhY2htZW50LnR5cGUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQudHlwZS50cmltKCkgPyBhdHRhY2htZW50LnR5cGUudHJpbSgpIDogJ3BkZidcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gdHlwZW9mIGF0dGFjaG1lbnQubWltZV90eXBlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQubWltZV90eXBlIDogJydcbiAgICAgIGNvbnN0IGZ1bGxGaWxlTmFtZSA9IG5hbWUuaW5jbHVkZXMoJy4nKSA/IG5hbWUgOiBgJHtuYW1lfS4ke3R5cGV9YFxuICAgICAgY29uc3QgbnVtZXJpY1NpemUgPVxuICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5zaXplID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gYXR0YWNobWVudC5zaXplXG4gICAgICAgICAgOiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSkpXG4gICAgICAgICAgICA/IE51bWJlcihhdHRhY2htZW50LnNpemUpXG4gICAgICAgICAgICA6IDBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZTogbmV3IEZpbGUoW10sIGZ1bGxGaWxlTmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSxcbiAgICAgICAgaWQ6XG4gICAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQuaWQgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQuaWQudHJpbSgpXG4gICAgICAgICAgICA/IGF0dGFjaG1lbnQuaWRcbiAgICAgICAgICAgIDogYGFzc2lzdGFudC1maWxlLSR7aW5kZXh9LSR7ZnVsbEZpbGVOYW1lfWAsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNpemU6IG51bWVyaWNTaXplLFxuICAgICAgICB0eXBlLFxuICAgICAgICB1cmxfb3JpZ2luYWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX3RodW1ibmFpbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF90aHVtYm5haWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF9maWxlOiB0eXBlb2YgYXR0YWNobWVudC51cmxfZmlsZSA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9maWxlIDogdW5kZWZpbmVkLFxuICAgICAgICByb2xlOiBhdHRhY2htZW50LnJvbGUgPT09ICdhc3Npc3RhbnQnID8gJ2Fzc2lzdGFudCcgOiAndXNlcicsXG4gICAgICB9XG4gICAgfSlcbn1cblxuLyoqIHRhc2tfaWQgLyB0YXNrX2lkcyBlbiBwZW5kaW5nX2FjdGlvbnMgZGUgZGVsZXRlXyogKGxhIHJlc3B1ZXN0YSBwdWVkZSBubyBpbmNsdWlyIFVSTHMgL3Rhc2tzL+KApi9kZXRhaWwpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdIHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrJykge1xuICAgICAgY29uc3QgcmF3ID0gcmVjLnRhc2tfaWQgPz8gcmVjLmlkXG4gICAgICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2tzX2JhdGNoJykge1xuICAgICAgY29uc3QgbGlzdCA9IHJlYy50YXNrX2lkc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgbGlzdC5mb3JFYWNoKHRpZCA9PiB7XG4gICAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyh0aWQpLCAxMClcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBlZGl0QWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2VkaXRfYWdlbnQnKVxuICBpZiAoXG4gICAgIWVkaXRBY3Rpb24gfHxcbiAgICAhZWRpdEFjdGlvbi50b29sX2FyZ3MgfHxcbiAgICB0eXBlb2YgZWRpdEFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8XG4gICAgQXJyYXkuaXNBcnJheShlZGl0QWN0aW9uLnRvb2xfYXJncylcbiAgKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBlZGl0QWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLCB0b29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09IHRvb2xOYW1lLnRvTG93ZXJDYXNlKCkpXG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24udG9vbF9hcmdzIHx8IHR5cGVvZiBhY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGFjdGlvbi50b29sX2FyZ3MpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBhY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZCA/PyByZWMuaWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbi8qKiDDmmx0aW1vIHJlY3Vyc28gc2kgbm8gaGF5IGxpbmtzIG5pIHRvb2xfYXJncyBwYXJzZWFibGVzIChwLiBlai4gXCJJRCAqKjc1OTcxMDYqKlwiKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCh0ZXh0OiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gIGNvbnN0IGxhYmVsZWQgPSB0ZXh0Lm1hdGNoKC9cXGJJRFxccypcXCpcXCooXFxkKylcXCpcXCovaSlcbiAgaWYgKGxhYmVsZWQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQobGFiZWxlZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgY29uc3QgYm9sZCA9IHRleHQubWF0Y2goL1xcKlxcKihcXGR7NSx9KVxcKlxcKi8pXG4gIGlmIChib2xkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGJvbGRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5jb25zdCB1c2VTdGFibGVDYWxsYmFja3MgPSAoYXV0aFVzZXI6IENPUlVzZXIpID0+IHtcbiAgY29uc3QgY3VycmVudFVzZXIgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VVc2VyPih7XG4gICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgfSlcblxuICBpZiAoXG4gICAgY3VycmVudFVzZXIuY3VycmVudC5pZCAhPT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQubmFtZSAhPT0gYXV0aFVzZXIuZmlyc3ROYW1lIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5hdmF0YXIgIT09IGF1dGhVc2VyLnBpY3R1cmVcbiAgKSB7XG4gICAgY3VycmVudFVzZXIuY3VycmVudCA9IHtcbiAgICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGN1cnJlbnRVc2VyOiBjdXJyZW50VXNlci5jdXJyZW50LFxuICB9XG59XG5cbmNvbnN0IHBhcnNlU1NFTGluZSA9IChsaW5lOiBzdHJpbmcpOiB7IGV2ZW50VHlwZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0gfCBudWxsID0+IHtcbiAgaWYgKCFsaW5lLnRyaW0oKSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIHJldHVybiBudWxsXG5cbiAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuICAgIHJldHVybiB7IGV2ZW50VHlwZSwgZGF0YSB9XG4gIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzU1NFU3RyZWFtID0gYXN5bmMgKFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4gIHRocmVhZElkOiBzdHJpbmcsXG4gIGNhbGxiYWNrczoge1xuICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbk5vZGU6IChtZXNzYWdlOiBzdHJpbmcsIHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkNvbXBsZXRlOiAoXG4gICAgICBmaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgY3VycmVudFRocmVhZElkOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHZvaWRcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZD86IChhcHByb3ZhbDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBpc1N0cmVhbUNvbXBsZXRlID0gZmFsc2VcblxuICBmdW5jdGlvbiBoYW5kbGVMaW5lKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU1NFTGluZShsaW5lKVxuICAgIGlmICghcGFyc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhIH0gPSBwYXJzZWRcbiAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSAndG9rZW4nKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gY29udGVudFxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICAgIGlmIChldmVudERhdGEubWVzc2FnZSAmJiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNhbGxiYWNrcy5vbk5vZGUoZXZlbnREYXRhLm1lc3NhZ2UsIHRocmVhZElkKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAoZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgIGNvbnN0IHNvdXJjZXMgPSAoZXZlbnREYXRhLnNvdXJjZXMgYXMgdW5rbm93bikgfHwgbnVsbFxuICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLmF0dGFjaG1lbnRzKSA/IGV2ZW50RGF0YS5hdHRhY2htZW50cyA6IG51bGxcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdF9yZXBseSlcbiAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW10pXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnRJZFJhdyA9IGV2ZW50RGF0YS5hZ2VudF9pZCA/PyBldmVudERhdGEuYWdlbnRJZFxuICAgICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9IGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICBjYWxsYmFja3Mub25Db21wbGV0ZShmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgdGhyZWFkSWQsIGF0dGFjaG1lbnRzLCBzdWdnZXN0aW9ucywgY29tcGxldGVkQWdlbnRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2FwcHJvdmFsX3JlcXVpcmVkJykge1xuICAgICAgY2FsbGJhY2tzLm9uQXBwcm92YWxSZXF1aXJlZD8uKGV2ZW50RGF0YSwgYWNjdW11bGF0ZWRDb250ZW50LCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXZlbnREYXRhLmVycm9yLCB0aHJlYWRJZClcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoIWlzU3RyZWFtQ29tcGxldGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNTdHJlYW1Db21wbGV0ZSA9IHRydWVcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBoYW5kbGVMaW5lKGxpbmVzW2ldKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICAvKiogSWQgZGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZyBhY3Rpdm8gKHNpIGhheSkuICovXG4gIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgLyoqXG4gICAqIENoYXQgYWwgcXVlIHBlcnRlbmVjZSBlbCBzdHJlYW0gYWN0dWFsbWVudGUgYWN0aXZvLiBTaSBjYW1iaWEgZWwgY2hhdFxuICAgKiBtaWVudHJhcyB1biBzdHJlYW0gZXN0w6EgZW4gdnVlbG8sIGRlc2NhcnRhbW9zIGxvcyB0b2tlbnMgcmVzaWR1YWxlc1xuICAgKiBxdWUgcHVlZGFuIGxsZWdhciBhbnRlcyBkZSBxdWUgZWwgYWJvcnQgc2UgY29tcGxldGUuXG4gICAqL1xuICBjb25zdCBhY3RpdmVTdHJlYW1DaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgLyoqIFNldHRlciBpbmRpcmVjdG8gcGFyYSBhYm9ydGFyIGVsIHN0cmVhbSBhbnRlcyBkZSBxdWUgZWwgaG9vayBkZVxuICAgKiBvcnF1ZXN0YWRvciBlc3TDqSBpbmljaWFsaXphZG8gKHNlIGxpbmtlYSBtw6FzIGFiYWpvKS4gKi9cbiAgY29uc3QgYWJvcnRTdHJlYW1TaWxlbnRseVJlZiA9IHVzZVJlZjwoKSA9PiB2b2lkPigoKSA9PiB1bmRlZmluZWQpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG5cbiAgY29uc3QgaXNXZWJTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNXZWJTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc0RlZXBTZWFyY2hBY3RpdmUpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgY29uc3QgeyBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIGxvYWRNZXNzYWdlcywgYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgaGFuZGxlU2Nyb2xsIH0gPVxuICAgIHVzZUNoYXRNZXNzYWdlcyh7XG4gICAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgY3VycmVudFVzZXIsXG4gICAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgICBvbkVycm9yLFxuICAgICAgYWdlbnRzLFxuICAgIH0pXG5cbiAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsQ2hhdElkICYmIGluaXRpYWxDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgLy8gU2kgaGF5IHVuIHN0cmVhbSBlbiBjdXJzbywgYWJvcnRhcmxvIHNpbGVuY2lvc2FtZW50ZSBwYXJhIHF1ZSBsb3NcbiAgICAgIC8vIHRva2VucyByZXNpZHVhbGVzIG5vIHNlIGVzY3JpYmFuIGVuIGVsIGNoYXQgbnVldm8uXG4gICAgICBhYm9ydFN0cmVhbVNpbGVudGx5UmVmLmN1cnJlbnQoKVxuXG4gICAgICAvLyBMaW1waWFyIGNvbnRleHRvIGdsb2JhbCBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs25cbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcblxuICAgICAgbG9hZE1lc3NhZ2VzKClcbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgbG9hZE1lc3NhZ2VzXSlcblxuICAvLyBTaW5jcm9uaXphciBjaGlwc1Byb2plY3QgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gcHJvamVjdElkIHBlcm8gY2hpcHNQcm9qZWN0IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2hpcHNQcm9qZWN0IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhQcm9qZWN0ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICBjb25zdCB7IHByb2plY3RJZCwgcHJvamVjdE5hbWUgfSA9IGxhc3RNc2dXaXRoUHJvamVjdCB8fCB7fVxuICAgIGlmICghcHJvamVjdElkKSByZXR1cm5cblxuICAgIGZldGNoUHJvamVjdHMocHJvamVjdElkKS50aGVuKHByb2plY3RzID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gcHJvamVjdHM/LmZpbmQocCA9PiBOdW1iZXIocC5pZCkgPT09IE51bWJlcihwcm9qZWN0SWQpKVxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kLm5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogZm91bmQuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGZvdW5kLmlkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdChmb3VuZClcbiAgICAgIH0gZWxzZSBpZiAocHJvamVjdE5hbWUpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwcm9qZWN0SWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KHsgaWQ6IE51bWJlcihwcm9qZWN0SWQpLCBuYW1lOiBwcm9qZWN0TmFtZSB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sIFttZXNzYWdlcywgY2hpcHNQcm9qZWN0LCBsb2FkaW5nTWVzc2FnZXMsIGZldGNoUHJvamVjdHMsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdF0pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2xpZW50IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIGNsaWVudElkIHBlcm8gY2xpZW50IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2xpZW50IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhDbGllbnQgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5jbGllbnRJZCAhPSBudWxsICYmIG1zZy5jbGllbnROYW1lKS5hdCgtMSlcbiAgICBjb25zdCB7IGNsaWVudElkOiBtc2dDbGllbnRJZCwgY2xpZW50TmFtZTogbXNnQ2xpZW50TmFtZSB9ID0gbGFzdE1zZ1dpdGhDbGllbnQgfHwge31cbiAgICBpZiAobXNnQ2xpZW50SWQgPT0gbnVsbCB8fCAhbXNnQ2xpZW50TmFtZSkgcmV0dXJuXG5cbiAgICBzZXRDbGllbnQ/Lih7IGlkOiBOdW1iZXIobXNnQ2xpZW50SWQpLCBuYW1lOiBtc2dDbGllbnROYW1lIH0pXG4gIH0sIFttZXNzYWdlcywgY2xpZW50LCBsb2FkaW5nTWVzc2FnZXMsIHNldENsaWVudF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoZXJyb3JNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgc3RyZWFtaW5nU3RvcmUuY2xlYXIoKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgICA6IHQoJ2NoYXQuZXJyb3InKVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBTaSBlbCBjaGF0IGNhbWJpw7MgbWllbnRyYXMgZWwgc3RyZWFtIGVzdGFiYSBlbiB2dWVsbywgZGVzY2FydGFyIGVsXG4gICAgICAvLyB0b2tlbiByZXNpZHVhbDogbm8gZGViZSBwaW50YXJzZSBlbiBlbCBudWV2byBjaGF0LlxuICAgICAgaWYgKGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ICE9IG51bGwgJiYgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgLy8gUHJpbWVyYSBsbGFtYWRhIGRlIGVzdGUgc3RyZWFtOiBpbnNlcnRhbW9zIGVsIHBsYWNlaG9sZGVyIGVuIGVsXG4gICAgICAvLyBhcnJheSBkZSBgbWVzc2FnZXNgIHVuYSDDum5pY2EgdmV6LiBMYXMgbGxhbWFkYXMgc3Vic2lndWllbnRlcyB5YSBub1xuICAgICAgLy8gdG9jYW4gYG1lc3NhZ2VzYDsgZWwgdGV4dG8gdml2ZSBlbiBlbCBzdHJlYW1pbmdTdG9yZSAoZXh0ZXJubyksIHBvclxuICAgICAgLy8gbG8gcXVlIFJlYWN0IG5vIHJlLXJlbmRlcml6YSBlbCDDoXJib2wgY29tcGxldG8gZW4gY2FkYSB0b2tlbi5cbiAgICAgIGlmIChzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgIT09IHRlbXBNZXNzYWdlSWQpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gdGVtcE1lc3NhZ2VJZFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgICBzdHJlYW1pbmdTdG9yZS5zdGFydCh0ZW1wTWVzc2FnZUlkKVxuICAgICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgICBpZDogdGVtcE1lc3NhZ2VJZCxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbWluZ1N0b3JlLnNldFRleHQodGVtcE1lc3NhZ2VJZCwgY29udGVudClcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICByYXdBdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zIHx8IFtdLFxuICAgICAgICAuLi4oY3JlYXRlQWdlbnRGb2xsb3dVcCA/IHsgY3JlYXRlQWdlbnRGb2xsb3dVcCB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgaWYgKGNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChjcmVhdGVBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gYcOxYWRpciBlbCBhZ2VudGUgcmVjacOpbiBjcmVhZG8gYWwgbGlzdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZWRpdEFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChlZGl0QWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyByZWZyZXNjYXIgZWwgYWdlbnRlIGVkaXRhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHQsIGV2ZW50LCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LWNhbmNlbGxlZGAsXG4gICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgfSlcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgfSwgNTAwKVxuICB9LCBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkKSB7XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgICBhYm9ydFN0cmVhbVNpbGVudGx5LFxuICB9ID0gdXNlT3JjaGVzdHJhdG9yU3RyZWFtKHtcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgfSlcblxuICAvLyBNYW50ZW5lbW9zIGVsIHNldHRlciBtw6FzIHJlY2llbnRlIGVuIHVuYSByZWYgcGFyYSBxdWUgcHVlZGEgdXNhcnNlIGRlc2RlXG4gIC8vIGVmZWN0b3MgZGVmaW5pZG9zIGFudGVzIGVuIGVsIGFyY2hpdm8gKGNhbWJpbyBkZSBjaGF0LCByZXNldCwgZXRjLikuXG4gIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCA9IGFib3J0U3RyZWFtU2lsZW50bHlcblxuICBjb25zdCBjdXJyZW50UHJvamVjdCA9IHByb2plY3RcblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9ucyxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGF0dGFjaG1lbnRzLCBvcHRpb25zIH0gPSBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MoYXR0YWNobWVudHNPck9wdGlvbnMpXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbWVzc2FnZVxuXG4gICAgICBpZiAoIXJlcG9ydGVkRXZlbnQuY3VycmVudCkge1xuICAgICAgICBldmVudChFVkVOVFMucG1BaVR5cGVkVGV4dClcbiAgICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgZWwgY29udGV4dG8gZ2xvYmFsIGVzdMOhIGRlc2FjdHVhbGl6YWRvXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50Py5bbWVzc2FnZXNSZWYuY3VycmVudC5sZW5ndGggLSAxXT8uYWdlbnRJZFxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBxdWVzdGlvbi0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IGF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGlmIChtZXNzYWdlID09PSB0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKSkge1xuICAgICAgICBmaW5hbE1lc3NhZ2UgPSBgRkFROiAke3QoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpfSAtIFRpcG8gZGUgcmVudGFiaWxpZGFkOiAke1xuICAgICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgcHJvamVjdD8uaW5jb21lVHlwZVxuICAgICAgICB9YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICAvLyBWZXJpZmljYXIgY29uc2lzdGVuY2lhIGVudHJlIGNvbnRleHRvIGdsb2JhbCB5IMO6bHRpbW8gbWVuc2FqZVxuICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IHByb2plY3Q/LmlkXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVByb2plY3RJZCA9IGxhc3RNZXNzYWdlV2l0aFByb2plY3Q/LnByb2plY3RJZFxuXG4gICAgICBsZXQgcHJvamVjdFRvUmVxdWVzdDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgICAgLy8gU2kgaGF5IMO6bHRpbW8gbWVuc2FqZSBjb24gcHJvamVjdElkLCB1c2FybG8gKG3DoXMgY29uZmlhYmxlKVxuICAgICAgaWYgKGxhc3RNZXNzYWdlUHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKGxhc3RNZXNzYWdlUHJvamVjdElkKVxuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG4gICAgICB9XG4gICAgICAvLyBTaSBubyBoYXkgw7psdGltbyBtZW5zYWplLCB1c2FyIGVsIGNvbnRleHRvIGdsb2JhbFxuICAgICAgZWxzZSBpZiAoY29udGV4dFByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIHByb2plY3RUb1JlcXVlc3QgPSBjb250ZXh0UHJvamVjdElkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2plY3RzID0gYXdhaXQgZmV0Y2hQcm9qZWN0cyhbcHJvamVjdFRvUmVxdWVzdF0pXG5cbiAgICAgIGNvbnN0IHBheWxvYWRGYXFJZCA9IGZhcUlkID8/IG9wdGlvbnMuZmFxSWRcbiAgICAgIGNvbnN0IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA9IGFnZW50U3VnZ2VzdGlvbklkID8/IG9wdGlvbnMuYWdlbnRTdWdnZXN0aW9uSWRcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGNsaWVudD8uaWRcbiAgICAgICAgICA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCwgLi4uKGNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHByb2plY3Q/LmNsaWVudD8uaWRcbiAgICAgICAgICAgID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQsIC4uLihwcm9qZWN0LmNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0cz8ubGVuZ3RoID8geyBwcm9qZWN0TmFtZTogcHJvamVjdHNbMF0ubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGYXFJZCA/IHsgZmFxSWQ6IHBheWxvYWRGYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKGFzeW5jIChmZWVkYmFja1Byb3A6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuQ2hhdHMud2FzSGVscGZ1bENoYXQoY2hhdE1lc3NhZ2VJZCwgZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVApXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBjaGF0TWVzc2FnZUlkICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCB3YXNIZWxwZnVsOiBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUCB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBCdXNjYXIgZWwgbWVuc2FqZSBxdWUgY29udGllbmUgYWxndW5vIGRlIGVzdG9zIHRocmVhZElkcyBlbiBzdXMgcGVuZGluZ19hY3Rpb25zXG4gICAgICBjb25zdCBtZXNzYWdlV2l0aEFwcHJvdmFsID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT5cbiAgICAgICAgbS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gICAgICApXG5cbiAgICAgIGlmICghbWVzc2FnZVdpdGhBcHByb3ZhbCB8fCAhbWVzc2FnZVdpdGhBcHByb3ZhbC5hcHByb3ZhbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRyw7MgbWVuc2FqZSBjb24gYXBwcm92YWwgcGFyYSB0aHJlYWRfaWRzOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IG1lc3NhZ2VXaXRoQXBwcm92YWwuaWRcbiAgICAgIC8vIFVzZSBmaXJzdCB0aHJlYWRJZCBhcyB0aGUgbG9hZGluZyBrZXlcbiAgICAgIGNvbnN0IGxvYWRpbmdLZXkgPSB0aHJlYWRJZHNbMF1cbiAgICAgIC8vIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyBpbW1lZGlhdGVseVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gbWVzc2FnZUlkKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG5cbiAgICAgIC8vIFRyaWdnZXIgcmUtcmVuZGVyXG4gICAgICBjb25zdCBleGlzdGluZ01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PiBtLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBpZiAoZXhpc3RpbmdNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICBhZGRNZXNzYWdlKHsgLi4uZXhpc3RpbmdNZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgY29udGludWUtdGhyZWFkIGVuZHBvaW50IHdpdGggQUxMIHRocmVhZF9pZHMgaW4gYSBzaW5nbGUgcmVxdWVzdFxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICAvLyBBZGQgbG9hZGluZ1xuICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbbG9hZGluZ0tleV06IHQoJ2NoYXQucHJvY2Vzc2luZycpLFxuICAgICAgfSkpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQoe1xuICAgICAgICAgIHRocmVhZElkcywgLy8gU2VuZCBhbGwgYWN0aW9uIHRocmVhZF9pZHMgYXQgb25jZVxuICAgICAgICAgIHNlc3Npb25JZDogYXBwcm92YWwuc2Vzc2lvbl9pZCxcbiAgICAgICAgICBkZWNpc2lvbjogZWRpdGVkQWN0aW9ucyA/ICdlZGl0JyA6IGRlY2lzaW9uLFxuICAgICAgICAgIGVkaXRlZEFjdGlvbnMsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tsb2FkaW5nS2V5XVxuICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgU1NFIHN0cmVhbVxuICAgICAgICBhd2FpdCBwcm9jZXNzU1NFU3RyZWFtKHJlc3BvbnNlLCBsb2FkaW5nS2V5LCB7XG4gICAgICAgICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtVXBkYXRlKGNvbnRlbnQsIG51bGwsICcnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheU1zZyA9XG4gICAgICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoJ2NyZWF0ZV90YXNrJykgfHwgbWVzc2FnZS5pbmNsdWRlcygnY2xvbmVfdGFzaycpID8gbWVzc2FnZSA6IHQoJ2NoYXQuZXhlY3V0aW5nQWN0aW9uJylcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJlbnRUaHJlYWRJZF06IGRpc3BsYXlNc2csXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQ29tcGxldGU6IChcbiAgICAgICAgICAgIGZpbmFsQ29udGVudDogc3RyaW5nLFxuICAgICAgICAgICAgc291cmNlczogYW55LFxuICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICAgICAgICBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICAgICAgICBhZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkLCBhdHRhY2htZW50cywgc3VnZ2VzdGlvbnMsIGFnZW50SWQpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IChhcHByb3ZhbFBheWxvYWQ6IGFueSwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyBOZXcgSElUTCBpbnRlcnJ1cHRpb24gZGV0ZWN0ZWQgYWZ0ZXIgcmVzdW1lIChjaGFpbmVkIGFjdGlvbnMpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkKGFwcHJvdmFsUGF5bG9hZCBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbbG9hZGluZ0tleV1cbiAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthdXRoVXNlciwgYWdlbnQsIGFkZE1lc3NhZ2UsIGhhbmRsZVN0cmVhbUVycm9yLCBoYW5kbGVTdHJlYW1VcGRhdGUsIGhhbmRsZVN0cmVhbUZpbmlzaCwgaGFuZGxlQXBwcm92YWxSZXF1aXJlZF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuXG4gICAgICBpZiAoIWhhc0luaXRpYWxNZXNzYWdlICYmICFoYXNJbml0aWFsQXR0YWNobWVudHMgJiYgIWhhc0luaXRpYWxGYXEpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGFza01haWEoe1xuICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCB8fCBudWxsLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGNsaWVudD8uaWQgPyB7IGNsaWVudElkOiBjbGllbnQuaWQgfSA6IHByb2plY3Q/LmNsaWVudD8uaWQgPyB7IGNsaWVudElkOiBwcm9qZWN0LmNsaWVudC5pZCB9IDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IHByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8uY2xpZW50Py5uYW1lXG4gICAgICAgICAgPyB7IGNsaWVudE5hbWU6IHByb2plY3QuY2xpZW50Lm5hbWUgfVxuICAgICAgICAgIDogY2xpZW50Py5uYW1lXG4gICAgICAgICAgICA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCA/IHsgZmFxSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogdXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgaW5pdGlhbENoYXRJZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgYXV0aFVzZXIsXG4gICAgYWdlbnQsXG4gICAgYXNrTWFpYSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gIF0pXG5cbiAgY29uc3QgcmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCgpXG4gICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMs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
|