@projectcor/maia-components 2.11.31-1 → 2.11.31-3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +2 -2
- package/lib/components/atoms/icons/ChatConversation.js +40 -0
- package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +33 -0
- package/lib/components/atoms/icons/index.js +3 -1
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +41 -10
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -4
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +16 -3
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +54 -44
- package/lib/components/molecules/ChatAIHome/styles.js +43 -35
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +204 -198
- package/lib/components/molecules/ChatAIMessages/ChatDaySeparator.js +43 -0
- package/lib/components/molecules/ChatAIMessages/ChatDaySeparator.styles.js +11 -0
- package/lib/components/molecules/ChatAIMessages/chatMessageUtils.js +5 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +343 -100
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +28 -15
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +91 -18
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +17 -2
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +13 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +9 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +13 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +3 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +57 -0
- package/lib/components/molecules/ChatAIModal/layout.js +35 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +10 -9
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +37 -6
- package/lib/components/molecules/Sidebar/Sidebar.js +269 -323
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +18 -23
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +54 -37
- package/lib/components/molecules/Sidebar/SidebarChats.styles.js +73 -0
- package/lib/components/molecules/Sidebar/SidebarChatsSection.js +69 -0
- package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +150 -0
- package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +238 -0
- package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +70 -0
- package/lib/components/molecules/Sidebar/sidebarChats.types.js +14 -0
- package/lib/dev/Providers.js +2 -2
- package/lib/dev/fixtures/devUser.js +173 -0
- package/lib/dev/fixtures/mockedUser.js +169 -0
- package/lib/hooks/useChatManager/useChatManager.js +35 -85
- package/lib/hooks/useChats/useChats.js +12 -4
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +76 -142
- package/lib/hooks/useProjectSearch.js +11 -4
- package/lib/lang/br/index.js +19 -2
- package/lib/lang/en/index.js +19 -2
- package/lib/lang/es/index.js +19 -2
- package/lib/lang/fr/index.js +19 -2
- package/lib/services/maia/Chats/getChatMessagesV2.js +114 -0
- package/lib/services/maia/Chats/getChatsByUserId.js +14 -8
- package/lib/services/maia/Chats/getSessionByAgent.js +66 -0
- package/lib/services/maia/Chats/getSessionsGroupedV2.js +70 -0
- package/lib/services/maia/Chats/index.js +7 -1
- package/lib/services/maia/Orchestrator/orchestrator.js +6 -4
- package/lib/services/maia/client.js +44 -9
- package/lib/services/query/projectSearchByValueQuery.js +2 -2
- package/lib/store/chatsStore.types.js +10 -2
- package/lib/store/useChatsStore.js +75 -37
- package/lib/types/Chat.js +3 -1
- package/lib/types/Project.js +1 -1
- package/package.json +1 -1
- package/lib/hooks/useSmoothStreamText/index.js +0 -2
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +0 -292
- package/lib/hooks/useStreamingMessage/index.js +0 -3
- package/lib/hooks/useStreamingMessage/streamingStore.js +0 -69
- package/lib/hooks/useStreamingMessage/useStreamingMessage.js +0 -22
- package/lib/mocks/mockChats.js +0 -395
- package/lib/mocks/mockedUser.js +0 -169
|
@@ -19,7 +19,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
19
19
|
/* eslint-disable react/require-default-props */
|
|
20
20
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
21
21
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
22
|
-
import React, { memo, useCallback, useEffect, useLayoutEffect, useRef, useState
|
|
22
|
+
import React, { Fragment, memo, useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
23
23
|
import { Streamdown } from 'streamdown';
|
|
24
24
|
import { createCodePlugin } from '@streamdown/code';
|
|
25
25
|
import { ArrowSmallDown } from '@projectcor/icons/lib/components/ArrowSmallDown';
|
|
@@ -32,8 +32,6 @@ import { useUser } from '../../../context/cor-user';
|
|
|
32
32
|
import { useT } from '../../../hooks/useT';
|
|
33
33
|
import { useChatManager } from '../../../hooks/useChatManager/useChatManager';
|
|
34
34
|
import { useTaskPanel } from '../../../hooks/useTaskPanel';
|
|
35
|
-
import { useSmoothStreamText } from '../../../hooks/useSmoothStreamText';
|
|
36
|
-
import { useStreamingMessage } from '../../../hooks/useStreamingMessage';
|
|
37
35
|
import { LoadingText } from '../../atoms/LoadingText';
|
|
38
36
|
import { Loader } from '../../atoms/Loader';
|
|
39
37
|
import { MessageFromUser, MessageFromOther, MessageContentFromUser, MessageContentFromOther } from './styles';
|
|
@@ -46,8 +44,13 @@ import { TASK_URL_REGEX_PATTERN } from '../../../constants/taskUrls';
|
|
|
46
44
|
import { ChatAISuggestions } from './ChatAISuggestions';
|
|
47
45
|
import { ChatAICreateAgentActions } from './ChatAICreateAgentActions';
|
|
48
46
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
47
|
+
import { ChatDaySeparator, formatChatDaySeparatorLabel, getLocalDayKey } from './ChatDaySeparator';
|
|
48
|
+
import { isRenderableChatMessage } from './chatMessageUtils';
|
|
49
49
|
import { downloadFileFromUrl } from '../../../utils/fileDownloadHelper';
|
|
50
|
+
|
|
51
|
+
/** Contexto con el texto del mensaje en streaming. Solo el componente que lo consume re-renderiza cuando cambia. */
|
|
50
52
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
53
|
+
var StreamingMessageContext = /*#__PURE__*/React.createContext('');
|
|
51
54
|
var code = createCodePlugin({
|
|
52
55
|
themes: ['github-light', 'github-light']
|
|
53
56
|
});
|
|
@@ -210,36 +213,9 @@ var CustomLink = function CustomLink(_ref5) {
|
|
|
210
213
|
|
|
211
214
|
/** Solo este componente re-renderiza cuando cambia el texto en streaming (lee del context). */
|
|
212
215
|
var StreamingMessageBody = /*#__PURE__*/memo(function (props) {
|
|
213
|
-
var
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
// este componente, sin tocar el resto del árbol.
|
|
217
|
-
var streamingText = useStreamingMessage(props.isStreaming ? props.messageId : null);
|
|
218
|
-
var rawText = props.isStreaming ? streamingText : props.message;
|
|
219
|
-
// Smooth streaming: desacopla la cadencia del backend del render.
|
|
220
|
-
// Durante el streaming libera chars a ritmo constante vía rAF; cuando
|
|
221
|
-
// termina, muestra el texto final al instante (sin animación residual).
|
|
222
|
-
// Flags de tuning leídas desde window para iterar sin recompilar.
|
|
223
|
-
// Uso (consola):
|
|
224
|
-
// window.streamDebug = true // activa logs de métricas
|
|
225
|
-
// window.streamAdapt = true // activa adaptación a la tasa del backend
|
|
226
|
-
// window.streamBufferMs = 400 // colchón objetivo (ms) del controlador
|
|
227
|
-
// window.streamLagMs = 300 // lag máximo base (ms)
|
|
228
|
-
// window.streamMinBuffer = 40 // piso del colchón en chars
|
|
229
|
-
// window.streamWarmupMs = 250 // warmup inicial (ms) antes de animar
|
|
230
|
-
var winFlags = typeof window !== 'undefined' ? window : {};
|
|
231
|
-
var displayText = useSmoothStreamText(rawText, {
|
|
232
|
-
enabled: !!props.isStreaming,
|
|
233
|
-
targetLagMs: (_winFlags$streamLagMs = winFlags.streamLagMs) !== null && _winFlags$streamLagMs !== void 0 ? _winFlags$streamLagMs : 300,
|
|
234
|
-
maxCharsPerFrame: 24,
|
|
235
|
-
snapToWordBoundary: true,
|
|
236
|
-
debug: !!winFlags.streamDebug,
|
|
237
|
-
debugLabel: "smoothStream:".concat((_props$messageId = props.messageId) !== null && _props$messageId !== void 0 ? _props$messageId : 'unknown'),
|
|
238
|
-
adaptToBackendRate: winFlags.streamAdapt !== false,
|
|
239
|
-
targetBufferMs: (_winFlags$streamBuffe = winFlags.streamBufferMs) !== null && _winFlags$streamBuffe !== void 0 ? _winFlags$streamBuffe : 400,
|
|
240
|
-
minBufferChars: (_winFlags$streamMinBu = winFlags.streamMinBuffer) !== null && _winFlags$streamMinBu !== void 0 ? _winFlags$streamMinBu : 40,
|
|
241
|
-
warmupMs: (_winFlags$streamWarmu = winFlags.streamWarmupMs) !== null && _winFlags$streamWarmu !== void 0 ? _winFlags$streamWarmu : 250
|
|
242
|
-
});
|
|
216
|
+
var _props$createAgentFol;
|
|
217
|
+
var fromContext = React.useContext(StreamingMessageContext);
|
|
218
|
+
var displayText = props.isStreaming ? fromContext : props.message;
|
|
243
219
|
var createAgentActionsAgentId = (_props$createAgentFol = props.createAgentFollowUp) === null || _props$createAgentFol === void 0 ? void 0 : _props$createAgentFol.agentId;
|
|
244
220
|
if (!displayText && !props.isStreaming) return null;
|
|
245
221
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
@@ -480,6 +456,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
480
456
|
});
|
|
481
457
|
});
|
|
482
458
|
var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
459
|
+
var _lastMsg$user, _lastMsg$message;
|
|
483
460
|
var userInitialMessage = _ref7.userInitialMessage,
|
|
484
461
|
initialChatId = _ref7.initialChatId,
|
|
485
462
|
onError = _ref7.onError,
|
|
@@ -489,7 +466,8 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
489
466
|
agents = _ref7.agents,
|
|
490
467
|
expanded = _ref7.expanded;
|
|
491
468
|
var _useT = useT(),
|
|
492
|
-
t = _useT.t
|
|
469
|
+
t = _useT.t,
|
|
470
|
+
i18n = _useT.i18n;
|
|
493
471
|
var _useGlobalContext3 = useGlobalContext(),
|
|
494
472
|
isWebSearchActive = _useGlobalContext3.isWebSearchActive,
|
|
495
473
|
isDeepSearchActive = _useGlobalContext3.isDeepSearchActive,
|
|
@@ -512,6 +490,8 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
512
490
|
_useState0 = _slicedToArray(_useState9, 2),
|
|
513
491
|
selectedSuggestionMessageIds = _useState0[0],
|
|
514
492
|
setSelectedSuggestionMessageIds = _useState0[1];
|
|
493
|
+
var streamingMessagePropsRef = useRef({});
|
|
494
|
+
var streamingMessageIdRef = useRef(null);
|
|
515
495
|
var _useChatManager = useChatManager({
|
|
516
496
|
chatId: initialChatId || undefined,
|
|
517
497
|
userInitialMessage: userInitialMessage,
|
|
@@ -548,57 +528,27 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
548
528
|
});
|
|
549
529
|
sendMessage(suggestion);
|
|
550
530
|
}, [sendMessage, selectedSuggestionMessageIds, event, agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.name, agent === null || agent === void 0 ? void 0 : agent.type]);
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
531
|
+
var handleClickScrollToBottom = useCallback(function () {
|
|
532
|
+
if (messagesRef.current) {
|
|
533
|
+
messagesRef.current.scrollTo({
|
|
534
|
+
top: messagesRef.current.scrollHeight,
|
|
535
|
+
behavior: 'smooth'
|
|
536
|
+
});
|
|
537
|
+
// Actualizar estado después de un breve delay para permitir que el scroll se complete
|
|
538
|
+
setTimeout(function () {
|
|
539
|
+
if (messagesRef.current) {
|
|
540
|
+
var _messagesRef$current = messagesRef.current,
|
|
541
|
+
scrollTop = _messagesRef$current.scrollTop,
|
|
542
|
+
scrollHeight = _messagesRef$current.scrollHeight,
|
|
543
|
+
clientHeight = _messagesRef$current.clientHeight;
|
|
544
|
+
var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
|
|
545
|
+
var shouldShow = distanceFromBottom > 50;
|
|
546
|
+
showScrollToBottomRef.current = shouldShow;
|
|
547
|
+
setShowScrollToBottom(shouldShow);
|
|
548
|
+
}
|
|
549
|
+
}, 500);
|
|
568
550
|
}
|
|
569
551
|
}, []);
|
|
570
|
-
|
|
571
|
-
/**
|
|
572
|
-
* Scroll inmediato al fondo (dentro de rAF para coordinar con el paint)
|
|
573
|
-
* y actualiza la visibilidad del botón. Respeta `skipIfUserScrolling` para
|
|
574
|
-
* no sobrescribir el scroll manual del usuario durante el streaming.
|
|
575
|
-
*/
|
|
576
|
-
var scrollToBottomRaf = useCallback(function () {
|
|
577
|
-
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
578
|
-
var _opts$skipIfUserScrol = opts.skipIfUserScrolling,
|
|
579
|
-
skipIfUserScrolling = _opts$skipIfUserScrol === void 0 ? false : _opts$skipIfUserScrol,
|
|
580
|
-
_opts$delayMs = opts.delayMs,
|
|
581
|
-
delayMs = _opts$delayMs === void 0 ? 0 : _opts$delayMs;
|
|
582
|
-
var run = function run() {
|
|
583
|
-
requestAnimationFrame(function () {
|
|
584
|
-
var el = messagesRef.current;
|
|
585
|
-
if (!el) return;
|
|
586
|
-
if (skipIfUserScrolling && userScrollingRef.current) return;
|
|
587
|
-
el.scrollTop = el.scrollHeight;
|
|
588
|
-
updateScrollBottomVisibility();
|
|
589
|
-
});
|
|
590
|
-
};
|
|
591
|
-
if (delayMs > 0) setTimeout(run, delayMs);else run();
|
|
592
|
-
}, [updateScrollBottomVisibility]);
|
|
593
|
-
var handleClickScrollToBottom = useCallback(function () {
|
|
594
|
-
if (!messagesRef.current) return;
|
|
595
|
-
messagesRef.current.scrollTo({
|
|
596
|
-
top: messagesRef.current.scrollHeight,
|
|
597
|
-
behavior: 'smooth'
|
|
598
|
-
});
|
|
599
|
-
// Dar tiempo al smooth-scroll antes de recalcular la visibilidad del botón.
|
|
600
|
-
setTimeout(updateScrollBottomVisibility, 500);
|
|
601
|
-
}, [updateScrollBottomVisibility]);
|
|
602
552
|
var handleScrollToBottom = useCallback(function (e) {
|
|
603
553
|
var container = e.currentTarget;
|
|
604
554
|
if (scrollRafRef.current !== null) {
|
|
@@ -619,13 +569,19 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
619
569
|
}
|
|
620
570
|
userScrollingRef.current = !isNearBottom;
|
|
621
571
|
lastScrollTopRef.current = scrollTop;
|
|
622
|
-
|
|
572
|
+
var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
|
|
573
|
+
var shouldShow = distanceFromBottom > 50;
|
|
574
|
+
var didSetState = showScrollToBottomRef.current !== shouldShow;
|
|
575
|
+
if (didSetState) {
|
|
576
|
+
showScrollToBottomRef.current = shouldShow;
|
|
577
|
+
setShowScrollToBottom(shouldShow);
|
|
578
|
+
}
|
|
623
579
|
if (isNearBottom && onScrollToBottom) {
|
|
624
580
|
onScrollToBottom();
|
|
625
581
|
}
|
|
626
582
|
handleScroll(container);
|
|
627
583
|
});
|
|
628
|
-
}, [onScrollToBottom, handleScroll
|
|
584
|
+
}, [onScrollToBottom, handleScroll]);
|
|
629
585
|
|
|
630
586
|
// refs to stabilize functions and avoid unnecessary re-renders
|
|
631
587
|
var sendMessageRef = useRef(sendMessage);
|
|
@@ -659,110 +615,124 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
659
615
|
}
|
|
660
616
|
}, []);
|
|
661
617
|
|
|
662
|
-
//
|
|
663
|
-
//
|
|
664
|
-
//
|
|
665
|
-
// contra el último valor observado y ajusta solo cuando cambia. Así el
|
|
666
|
-
// scroll queda perfectamente sincronizado con la animación del texto sin
|
|
667
|
-
// depender de la cadencia del streamingStore.
|
|
618
|
+
// Scroll cuando llega un mensaje de aprobación (ApprovalBox). Sin ResizeObserver en el
|
|
619
|
+
// contenedor: observarlo disparaba callbacks al cambiar el layout/scrollbar y cada uno
|
|
620
|
+
// llamaba scrollToBottom(), provocando tirones al scrollear.
|
|
668
621
|
useEffect(function () {
|
|
669
|
-
if (!
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
var
|
|
673
|
-
var
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
updateScrollBottomVisibility();
|
|
622
|
+
if (!messagesRef.current || loadingMessages || isLoadingMoreMessages) {
|
|
623
|
+
return undefined;
|
|
624
|
+
}
|
|
625
|
+
var lastMessage = messages[messages.length - 1];
|
|
626
|
+
var hasApproval = lastMessage && (lastMessage.id.startsWith('approval-') || !!lastMessage.approval);
|
|
627
|
+
if (!hasApproval) {
|
|
628
|
+
return undefined;
|
|
629
|
+
}
|
|
630
|
+
var container = messagesRef.current;
|
|
631
|
+
var isAtBottom = container.scrollHeight - container.scrollTop <= container.clientHeight + 100;
|
|
632
|
+
if (!(isAtBottom || !userScrollingRef.current)) {
|
|
633
|
+
return undefined;
|
|
634
|
+
}
|
|
635
|
+
var scrollToBottom = function scrollToBottom() {
|
|
636
|
+
if (messagesRef.current) {
|
|
637
|
+
messagesRef.current.scrollTop = messagesRef.current.scrollHeight;
|
|
686
638
|
}
|
|
687
|
-
rafId = requestAnimationFrame(_tick);
|
|
688
|
-
};
|
|
689
|
-
rafId = requestAnimationFrame(_tick);
|
|
690
|
-
return function () {
|
|
691
|
-
if (rafId != null) cancelAnimationFrame(rafId);
|
|
692
639
|
};
|
|
693
|
-
}, [waitingResponse, isWriting, updateScrollBottomVisibility]);
|
|
694
640
|
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
641
|
+
// Secuencia inicial de scroll para cuando el ApprovalBox acaba de renderizarse
|
|
642
|
+
requestAnimationFrame(function () {
|
|
643
|
+
scrollToBottom();
|
|
644
|
+
requestAnimationFrame(function () {
|
|
645
|
+
scrollToBottom();
|
|
646
|
+
setTimeout(scrollToBottom, 100);
|
|
700
647
|
});
|
|
701
|
-
}
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
// Scroll cuando cambian los mensajes: distingue "nuevo mensaje" (agregado)
|
|
705
|
-
// de "reemplazo" (mismo id/length, ej. feedback o approvalStatus). En
|
|
706
|
-
// reemplazos solo se recalcula la visibilidad del botón sin forzar scroll.
|
|
707
|
-
var lastMessageIdRef = useRef(null);
|
|
708
|
-
var lastMessagesLengthRef = useRef(0);
|
|
648
|
+
});
|
|
649
|
+
return undefined;
|
|
650
|
+
}, [messages, loadingMessages, isLoadingMoreMessages]);
|
|
709
651
|
useEffect(function () {
|
|
710
|
-
|
|
711
|
-
if (
|
|
652
|
+
// Si el usuario está scrolleando manualmente, no hacer auto scroll
|
|
653
|
+
if (userScrollingRef.current && waitingResponse) {
|
|
712
654
|
return;
|
|
713
655
|
}
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
656
|
+
if (waitingResponse && messagesRef.current) {
|
|
657
|
+
requestAnimationFrame(function () {
|
|
658
|
+
if (messagesRef.current) {
|
|
659
|
+
messagesRef.current.scrollTop = messagesRef.current.scrollHeight;
|
|
660
|
+
var _messagesRef$current2 = messagesRef.current,
|
|
661
|
+
scrollTop = _messagesRef$current2.scrollTop,
|
|
662
|
+
scrollHeight = _messagesRef$current2.scrollHeight,
|
|
663
|
+
clientHeight = _messagesRef$current2.clientHeight;
|
|
664
|
+
var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
|
|
665
|
+
var shouldShow = distanceFromBottom > 50;
|
|
666
|
+
showScrollToBottomRef.current = shouldShow;
|
|
667
|
+
setShowScrollToBottom(shouldShow);
|
|
668
|
+
}
|
|
669
|
+
});
|
|
723
670
|
return;
|
|
724
671
|
}
|
|
672
|
+
if (!messagesRef.current || loadingMessages || isLoadingMoreMessages || isLoadingMoreRef.current) return;
|
|
725
673
|
var container = messagesRef.current;
|
|
674
|
+
var lastMessage = messages[messages.length - 1];
|
|
675
|
+
var isNewAnswerMessage = lastMessage && lastMessage.id.startsWith('answer-');
|
|
676
|
+
var isNewUserMessage = lastMessage && lastMessage.id.startsWith('question-');
|
|
677
|
+
var isNewApprovalMessage = lastMessage && (lastMessage.id.startsWith('approval-') || !!lastMessage.approval);
|
|
726
678
|
var isAtBottom = container.scrollHeight - container.scrollTop <= container.clientHeight + 100;
|
|
727
|
-
var
|
|
679
|
+
var hasMessages = !!messages.length;
|
|
680
|
+
var isNotInitialMessage = !messages.some(function (msg) {
|
|
728
681
|
return msg.id === 'user-initial-message';
|
|
729
682
|
});
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
683
|
+
if ((isNewAnswerMessage || isNewUserMessage || isNewApprovalMessage) && isAtBottom) {
|
|
684
|
+
// Para mensajes de aprobación, usar un pequeño delay para asegurar que el ApprovalBox se haya renderizado
|
|
685
|
+
var scrollDelay = isNewApprovalMessage ? 100 : 0;
|
|
686
|
+
var doScroll = function doScroll() {
|
|
687
|
+
requestAnimationFrame(function () {
|
|
688
|
+
if (messagesRef.current) {
|
|
689
|
+
messagesRef.current.scrollTop = messagesRef.current.scrollHeight;
|
|
690
|
+
var _messagesRef$current3 = messagesRef.current,
|
|
691
|
+
scrollTop = _messagesRef$current3.scrollTop,
|
|
692
|
+
scrollHeight = _messagesRef$current3.scrollHeight,
|
|
693
|
+
clientHeight = _messagesRef$current3.clientHeight;
|
|
694
|
+
var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
|
|
695
|
+
var shouldShow = distanceFromBottom > 50;
|
|
696
|
+
showScrollToBottomRef.current = shouldShow;
|
|
697
|
+
setShowScrollToBottom(shouldShow);
|
|
698
|
+
}
|
|
699
|
+
});
|
|
700
|
+
};
|
|
701
|
+
if (scrollDelay > 0) {
|
|
702
|
+
setTimeout(doScroll, scrollDelay);
|
|
703
|
+
} else {
|
|
704
|
+
doScroll();
|
|
705
|
+
}
|
|
706
|
+
} else if (hasMessages && isNotInitialMessage && !isNewAnswerMessage && !isNewUserMessage && !isNewApprovalMessage) {
|
|
707
|
+
requestAnimationFrame(function () {
|
|
708
|
+
if (messagesRef.current) {
|
|
709
|
+
messagesRef.current.scrollTop = messagesRef.current.scrollHeight;
|
|
710
|
+
var _messagesRef$current4 = messagesRef.current,
|
|
711
|
+
scrollTop = _messagesRef$current4.scrollTop,
|
|
712
|
+
scrollHeight = _messagesRef$current4.scrollHeight,
|
|
713
|
+
clientHeight = _messagesRef$current4.clientHeight;
|
|
714
|
+
var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
|
|
715
|
+
var shouldShow = distanceFromBottom > 50;
|
|
716
|
+
showScrollToBottomRef.current = shouldShow;
|
|
717
|
+
setShowScrollToBottom(shouldShow);
|
|
718
|
+
}
|
|
741
719
|
});
|
|
742
|
-
return;
|
|
743
|
-
}
|
|
744
|
-
|
|
745
|
-
// Nuevos answer/question: scroll si el usuario ya estaba al fondo.
|
|
746
|
-
if (isAnswerOrQuestion && isAtBottom) {
|
|
747
|
-
scrollToBottomRaf();
|
|
748
|
-
return;
|
|
749
720
|
}
|
|
721
|
+
}, [messages, loadingMessages, isLoadingMoreMessages, waitingResponse]);
|
|
750
722
|
|
|
751
|
-
|
|
752
|
-
// pero sí un mensaje nuevo (no el "user-initial-message"). Scrollea.
|
|
753
|
-
if (!isAnswerOrQuestion && !isApproval && !hasInitialMessage && messages.length > prevLen) {
|
|
754
|
-
scrollToBottomRaf();
|
|
755
|
-
return;
|
|
756
|
-
}
|
|
757
|
-
updateScrollBottomVisibility();
|
|
758
|
-
}, [messages, loadingMessages, isLoadingMoreMessages, scrollToBottomRaf, updateScrollBottomVisibility]);
|
|
759
|
-
|
|
760
|
-
// Estado inicial del botón scroll-to-bottom al terminar loadingMessages.
|
|
723
|
+
// Verificar el estado inicial del scroll
|
|
761
724
|
useEffect(function () {
|
|
762
|
-
if (!loadingMessages) {
|
|
763
|
-
|
|
725
|
+
if (messagesRef.current && !loadingMessages) {
|
|
726
|
+
var container = messagesRef.current;
|
|
727
|
+
var scrollTop = container.scrollTop,
|
|
728
|
+
scrollHeight = container.scrollHeight,
|
|
729
|
+
clientHeight = container.clientHeight;
|
|
730
|
+
var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
|
|
731
|
+
var shouldShow = distanceFromBottom > 50;
|
|
732
|
+
showScrollToBottomRef.current = shouldShow;
|
|
733
|
+
setShowScrollToBottom(shouldShow);
|
|
764
734
|
}
|
|
765
|
-
}, [loadingMessages, messages.length
|
|
735
|
+
}, [loadingMessages, messages.length]);
|
|
766
736
|
|
|
767
737
|
// Obtener el último mensaje del usuario para verificar si tiene attachments
|
|
768
738
|
var lastUserMessage = messages.filter(function (msg) {
|
|
@@ -784,40 +754,76 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
784
754
|
expandedRef.current = expanded;
|
|
785
755
|
}
|
|
786
756
|
}, [expanded]);
|
|
757
|
+
var lastMsg = messages[messages.length - 1];
|
|
758
|
+
var isStreamingActive = (waitingResponse || isWriting) && lastMsg && (lastMsg.role === ChatHistoryRole.ASSISTANT || ((_lastMsg$user = lastMsg.user) === null || _lastMsg$user === void 0 ? void 0 : _lastMsg$user.id) === 'assistant');
|
|
759
|
+
var streamingText = isStreamingActive ? (_lastMsg$message = lastMsg.message) !== null && _lastMsg$message !== void 0 ? _lastMsg$message : '' : '';
|
|
787
760
|
if (loadingMessages) {
|
|
788
761
|
return /*#__PURE__*/_jsx(Loader, {});
|
|
789
762
|
}
|
|
790
763
|
var messagesContent = /*#__PURE__*/_jsxs(_Fragment, {
|
|
791
764
|
children: [isLoadingMoreMessages && /*#__PURE__*/_jsx(LoadingText, {
|
|
792
765
|
text: t('chat.loadingMore')
|
|
793
|
-
}), /*#__PURE__*/_jsx(
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
var
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
766
|
+
}), /*#__PURE__*/_jsx(StreamingMessageContext.Provider, {
|
|
767
|
+
value: streamingText,
|
|
768
|
+
children: function () {
|
|
769
|
+
var lastRenderedDayKey = null;
|
|
770
|
+
return messages.map(function (message, index) {
|
|
771
|
+
var _message$id;
|
|
772
|
+
if (!isRenderableChatMessage(message)) return null;
|
|
773
|
+
var dayKey = getLocalDayKey(message.date);
|
|
774
|
+
var showDaySeparator = dayKey !== null && (lastRenderedDayKey === null || dayKey !== lastRenderedDayKey);
|
|
775
|
+
if (dayKey !== null) lastRenderedDayKey = dayKey;
|
|
776
|
+
var messageFeedback = (message === null || message === void 0 ? void 0 : message.wasHelpful) === undefined || message.wasHelpful === null ? null : message.wasHelpful ? Feedback.THUMBS_UP : Feedback.THUMBS_DOWN;
|
|
777
|
+
var isAssistantMessage = message.role === ChatHistoryRole.ASSISTANT || message.user.id === 'assistant';
|
|
778
|
+
var isLastMessage = index === messages.length - 1;
|
|
779
|
+
var isStreaming = isAssistantMessage && isLastMessage && (waitingResponse || isWriting);
|
|
804
780
|
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
781
|
+
// Key estable: solo message.id para evitar remount durante streaming (message.date puede cambiar)
|
|
782
|
+
var messageKey = (_message$id = message.id) !== null && _message$id !== void 0 ? _message$id : "msg-".concat(index);
|
|
783
|
+
if (isStreaming) {
|
|
784
|
+
if (streamingMessageIdRef.current !== message.id) {
|
|
785
|
+
var _message$id2;
|
|
786
|
+
streamingMessageIdRef.current = (_message$id2 = message.id) !== null && _message$id2 !== void 0 ? _message$id2 : null;
|
|
787
|
+
Object.assign(streamingMessagePropsRef.current, message, {
|
|
788
|
+
message: undefined
|
|
789
|
+
}, {
|
|
790
|
+
authUser: authUser,
|
|
791
|
+
handleSelectOption: handleSelectOption,
|
|
792
|
+
handleFeedback: handleFeedback,
|
|
793
|
+
handleApprovalDecision: handleApprovalDecision,
|
|
794
|
+
handleSuggestionClick: handleSuggestionClick,
|
|
795
|
+
hasSelectedSuggestion: !!selectedSuggestionMessageIds[message.id],
|
|
796
|
+
disableFeedback: messageFeedback,
|
|
797
|
+
isStreaming: true,
|
|
798
|
+
isLastMessage: isLastMessage,
|
|
799
|
+
expanded: expanded
|
|
800
|
+
});
|
|
801
|
+
}
|
|
802
|
+
return /*#__PURE__*/_jsxs(Fragment, {
|
|
803
|
+
children: [showDaySeparator && /*#__PURE__*/_jsx(ChatDaySeparator, {
|
|
804
|
+
label: formatChatDaySeparatorLabel(message.date, t, i18n.language)
|
|
805
|
+
}), /*#__PURE__*/_jsx(MessageItem, _objectSpread({}, streamingMessagePropsRef.current))]
|
|
806
|
+
}, messageKey);
|
|
807
|
+
}
|
|
808
|
+
streamingMessageIdRef.current = null;
|
|
809
|
+
return /*#__PURE__*/_jsxs(Fragment, {
|
|
810
|
+
children: [showDaySeparator && /*#__PURE__*/_jsx(ChatDaySeparator, {
|
|
811
|
+
label: formatChatDaySeparatorLabel(message.date, t, i18n.language)
|
|
812
|
+
}), /*#__PURE__*/_jsx(MessageItem, _objectSpread(_objectSpread({}, message), {}, {
|
|
813
|
+
authUser: authUser,
|
|
814
|
+
handleSelectOption: handleSelectOption,
|
|
815
|
+
handleFeedback: handleFeedback,
|
|
816
|
+
handleApprovalDecision: handleApprovalDecision,
|
|
817
|
+
handleSuggestionClick: handleSuggestionClick,
|
|
818
|
+
hasSelectedSuggestion: !!selectedSuggestionMessageIds[message.id],
|
|
819
|
+
disableFeedback: messageFeedback,
|
|
820
|
+
isStreaming: false,
|
|
821
|
+
isLastMessage: isLastMessage,
|
|
822
|
+
expanded: expanded
|
|
823
|
+
}))]
|
|
824
|
+
}, messageKey);
|
|
825
|
+
});
|
|
826
|
+
}()
|
|
821
827
|
}), (waitingResponse || loadingMessage || Object.keys(activeLoadings || {}).length > 0) && /*#__PURE__*/_jsx(SCLoadingMessagesColumn, {
|
|
822
828
|
children: Object.keys(activeLoadings || {}).length > 0 ? /*#__PURE__*/_jsx(LoadingText, {
|
|
823
829
|
text: Object.values(activeLoadings || {}).find(function (msg) {
|
|
@@ -856,4 +862,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
856
862
|
});
|
|
857
863
|
};
|
|
858
864
|
export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
|
|
859
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiU3RyZWFtZG93biIsImNyZWF0ZUNvZGVQbHVnaW4iLCJBcnJvd1NtYWxsRG93biIsIkF0dGFjaG1lbnRDYXJkIiwiQXBwcm92YWxCb3giLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiQXR0YWNobWVudENhcmRBdWRpbyIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVVzZXIiLCJ1c2VUIiwidXNlQ2hhdE1hbmFnZXIiLCJ1c2VUYXNrUGFuZWwiLCJ1c2VTbW9vdGhTdHJlYW1UZXh0IiwidXNlU3RyZWFtaW5nTWVzc2FnZSIsIkxvYWRpbmdUZXh0IiwiTG9hZGVyIiwiTWVzc2FnZUZyb21Vc2VyIiwiTWVzc2FnZUZyb21PdGhlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNZXNzYWdlQ29udGVudEZyb21PdGhlciIsIk1lc3NhZ2VGZWVkYmFjayIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTY3JvbGxUb0JvdHRvbUJ1dHRvbiIsIlNDTWVzc2FnZXNPdXRlciIsIlNDTWVzc2FnZXNTY3JvbGwiLCJTQ01lc3NhZ2VzSW5uZXIiLCJTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbiIsIlNDT3B0aW9uc0xpc3QiLCJTQ09wdGlvbkl0ZW0iLCJTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXIiLCJTQ0Fzc2lzdGFudE5hbWUiLCJTQ0Fzc2lzdGFudEF2YXRhciIsIlNDVGFza0xpbmsiLCJTQ01lc3NhZ2VJdGVtV3JhcHBlciIsIlNDTWVzc2FnZUl0ZW1Jbm5lciIsIlNDQXR0YWNobWVudHNSb3ciLCJTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbiIsIkZlZWRiYWNrIiwidXNlR2xvYmFsQ29udGV4dCIsIk1BSUFJY29uIiwiVEFTS19VUkxfUkVHRVhfUEFUVEVSTiIsIkNoYXRBSVN1Z2dlc3Rpb25zIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJkb3dubG9hZEZpbGVGcm9tVXJsIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiY29kZSIsInRoZW1lcyIsIkFzc2lzdGFudEF2YXRhcklubmVyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsImNoaWxkcmVuIiwidHlwZSIsIndpZHRoIiwiaGVpZ2h0IiwiZW1vamkiLCJBc3Npc3RhbnRBdmF0YXIiLCJNZXNzYWdlV3JhcHBlciIsIl9yZWYiLCJpc0N1cnJlbnRVc2VyIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiQXNzaXN0YW50TWVzc2FnZUhlYWRlciIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibG9jYWxBZ2VudCIsInNldExvY2FsQWdlbnQiLCJfdXNlR2xvYmFsQ29udGV4dDIiLCJnZXRUYWJTZWdtZW50RnJvbUhyZWYiLCJocmVmIiwibWF0Y2giLCJ0ZXN0IiwiZXh0cmFjdFRhc2tzRnJvbU1lc3NhZ2UiLCJtZXNzYWdlIiwidGFza1VybFJlZ2V4IiwiUmVnRXhwIiwidGFza3MiLCJzZWVuSWRzIiwiU2V0IiwiZXhlYyIsInRhc2tJZCIsInVybCIsImhhcyIsImFkZCIsImVzY2FwZWRVcmwiLCJyZXBsYWNlIiwibWFya2Rvd25MaW5rUmVnZXgiLCJjb25jYXQiLCJsaW5rTWF0Y2giLCJ0aXRsZSIsInB1c2giLCJoYXNUYXNrTGlua3MiLCJ0ZXh0IiwibGVuZ3RoIiwiVGFza0xpbmsiLCJfcmVmNCIsInRhYlNlZ21lbnQiLCJfdXNlVGFza1BhbmVsIiwiYnVpbGRPcGVuVGFzayIsIm9wZW5UYXNrIiwiaGFuZGxlQ2xpY2siLCJlIiwibWV0YUtleSIsImN0cmxLZXkiLCJwcmV2ZW50RGVmYXVsdCIsIkN1c3RvbUxpbmsiLCJfcmVmNSIsInJlc3QiLCJfZXhjbHVkZWQzIiwidGFza01hdGNoIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfd2luRmxhZ3Mkc3RyZWFtTGFnTXMiLCJfcHJvcHMkbWVzc2FnZUlkIiwiX3dpbkZsYWdzJHN0cmVhbUJ1ZmZlIiwiX3dpbkZsYWdzJHN0cmVhbU1pbkJ1IiwiX3dpbkZsYWdzJHN0cmVhbVdhcm11IiwiX3Byb3BzJGNyZWF0ZUFnZW50Rm9sIiwic3RyZWFtaW5nVGV4dCIsImlzU3RyZWFtaW5nIiwibWVzc2FnZUlkIiwicmF3VGV4dCIsIndpbkZsYWdzIiwid2luZG93IiwiZGlzcGxheVRleHQiLCJlbmFibGVkIiwidGFyZ2V0TGFnTXMiLCJzdHJlYW1MYWdNcyIsIm1heENoYXJzUGVyRnJhbWUiLCJzbmFwVG9Xb3JkQm91bmRhcnkiLCJkZWJ1ZyIsInN0cmVhbURlYnVnIiwiZGVidWdMYWJlbCIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsInN0cmVhbUFkYXB0IiwidGFyZ2V0QnVmZmVyTXMiLCJzdHJlYW1CdWZmZXJNcyIsIm1pbkJ1ZmZlckNoYXJzIiwic3RyZWFtTWluQnVmZmVyIiwid2FybXVwTXMiLCJzdHJlYW1XYXJtdXBNcyIsImNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiYWdlbnRJZCIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJpc0Fzc2lzdGFudCIsInBsdWdpbnMiLCJjb21wb25lbnRzIiwiYSIsImxpbmtTYWZldHkiLCJpc0FuaW1hdGluZyIsInNoaWtpVGhlbWUiLCJjb250cm9scyIsInRhYmxlIiwiaXNFcnJvciIsImFwcHJvdmFsIiwiY29udGVudCIsInNvdXJjZXMiLCJoYW5kbGVGZWVkYmFjayIsImhhbmRsZUZlZWRiYWNrQ2xpY2siLCJkaXNhYmxlRmVlZGJhY2siLCJzdWdnZXN0aW9ucyIsIm9uU2VsZWN0U3VnZ2VzdGlvbiIsInN1Z2dlc3Rpb24iLCJoYW5kbGVTdWdnZXN0aW9uQ2xpY2siLCJkaXNhYmxlZCIsInN1Z2dlc3Rpb25zRGlzYWJsZWQiLCJoaWRkZW4iLCJpc0xhc3RNZXNzYWdlIiwiTWVzc2FnZUl0ZW0iLCJfcHJvcHMkcHJvamVjdE1ldGFkYXQiLCJ1c2VyIiwiYXV0aFVzZXIiLCJpc0NoYW5nZVByb2plY3QiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwicm9sZSIsImF0dGFjaG1lbnRzIiwiYXBwcm92YWxTdGF0dXMiLCJoYXNTZWxlY3RlZFN1Z2dlc3Rpb24iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInByZXZpZXdBdHRhY2htZW50Iiwic2V0UHJldmlld0F0dGFjaG1lbnQiLCJVU0VSIiwidG9TdHJpbmciLCJBU1NJU1RBTlQiLCJtZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbmNsdWRlcyIsInNlbnQiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJhYnJ1cHQiLCJkb2N1bWVudCIsImRvd25sb2FkIiwic3R5bGUiLCJkaXNwbGF5IiwiYm9keSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJzZXRUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJjb25zb2xlIiwiZXJyb3IiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhc0ZlZWRiYWNrIiwiJGlzQXNzaXN0YW50IiwibWVzc2FnZUV4dHJhQ29udGVudCIsImZlZWRiYWNrIiwic2Vzc2lvbklkIiwic3BsaXQiLCJmaWx0ZXIiLCJxdWVzdGlvbklkIiwiam9pbiIsImluZGV4IiwiX2F0dGFjaG1lbnQkdHlwZSIsIl9hdHRhY2htZW50JG5hbWUiLCJhdHRhY2htZW50VHlwZSIsInRvTG93ZXJDYXNlIiwiYXR0YWNobWVudE5hbWUiLCJpc0F1ZGlvRmlsZSIsInN0YXJ0c1dpdGgiLCJzb21lIiwiZXh0IiwiZW5kc1dpdGgiLCJwb3NpdGlvbkluZGV4Iiwib25Eb3dubG9hZCIsInBlbmRpbmdfYWN0aW9ucyIsImFjdGlvbnMiLCJzdGF0dXMiLCJvbkFwcHJvdmUiLCJ0aHJlYWRJZHMiLCJvblJlamVjdCIsImlzUHJvamVjdERlbGV0ZWQiLCJwcm9qZWN0TWV0YWRhdGEiLCJpc19kZWxldGVkIiwiaXNFeHBhbmRlZCIsImV4cGFuZGVkIiwiaGl0bEluc3RhbmNlSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdfbWVzc2FnZSIsIm1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJpc09wZW4iLCJvbkNsb3NlIiwiQ2hhdEFJTWVzc2FnZXNJbm5lciIsIl9yZWY3IiwidXNlckluaXRpYWxNZXNzYWdlIiwiaW5pdGlhbENoYXRJZCIsIm9uRXJyb3IiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvblNjcm9sbFRvQm90dG9tIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQzIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJldmVudCIsIm1lc3NhZ2VzUmVmIiwiY2hhdEluaXRpYWxpemVkUmVmIiwiaXNMb2FkaW5nTW9yZVJlZiIsInVzZXJTY3JvbGxpbmdSZWYiLCJzY3JvbGxUaHJlc2hvbGRSZWYiLCJsYXN0U2Nyb2xsVG9wUmVmIiwic2hvd1Njcm9sbFRvQm90dG9tUmVmIiwic2Nyb2xsUmFmUmVmIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93U2Nyb2xsVG9Cb3R0b20iLCJzZXRTaG93U2Nyb2xsVG9Cb3R0b20iLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwiX3VzZUNoYXRNYW5hZ2VyIiwiY2hhdElkIiwidW5kZWZpbmVkIiwibWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsInRyaW0iLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJlbnRpdHkiLCJhaUNoYXRTdWdnZXN0ZWRBbnN3ZXIiLCJhZ2VudF90eXBlIiwiX2RlZmluZVByb3BlcnR5IiwidXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSIsImVsIiwiY3VycmVudCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImRpc3RhbmNlRnJvbUJvdHRvbSIsInNob3VsZFNob3ciLCJzY3JvbGxUb0JvdHRvbVJhZiIsIm9wdHMiLCJfb3B0cyRza2lwSWZVc2VyU2Nyb2wiLCJza2lwSWZVc2VyU2Nyb2xsaW5nIiwiX29wdHMkZGVsYXlNcyIsImRlbGF5TXMiLCJydW4iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tIiwic2Nyb2xsVG8iLCJ0b3AiLCJiZWhhdmlvciIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaXNTY3JvbGxpbmdVcCIsImlzTmVhckJvdHRvbSIsInNlbmRNZXNzYWdlUmVmIiwic3RvcEdlbmVyYXRpb25SZWYiLCJvblNlbmRNZXNzYWdlUmVhZHlSZWYiLCJyYWZJZCIsImxhc3RIZWlnaHQiLCJ0aWNrIiwiY3VycmVudEhlaWdodCIsImxhc3RNZXNzYWdlSWRSZWYiLCJsYXN0TWVzc2FnZXNMZW5ndGhSZWYiLCJfbGFzdE1lc3NhZ2UkaWQiLCJsYXN0TWVzc2FnZSIsImxhc3RJZCIsInByZXZJZCIsInByZXZMZW4iLCJpc05ld01lc3NhZ2UiLCJpc0F0Qm90dG9tIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJtc2ciLCJpc0FwcHJvdmFsIiwiaXNBbnN3ZXJPclF1ZXN0aW9uIiwibGFzdFVzZXJNZXNzYWdlIiwiYXQiLCJoYXNBdHRhY2htZW50cyIsImlzU2Nyb2xsT25QYXJlbnQiLCJleHBhbmRlZFJlZiIsInNhdmVkU2Nyb2xsVG9wIiwibWVzc2FnZXNDb250ZW50IiwiX21lc3NhZ2UkYXR0YWNobWVudHMiLCJfbWVzc2FnZSRzb3VyY2VzIiwiX21lc3NhZ2UkcHJvamVjdCIsIl9tZXNzYWdlJGlkIiwiaXNBc3Npc3RhbnRNZXNzYWdlIiwicHJvamVjdCIsIm1lc3NhZ2VGZWVkYmFjayIsIndhc0hlbHBmdWwiLCJUSFVNQlNfVVAiLCJUSFVNQlNfRE9XTiIsIm1lc3NhZ2VLZXkiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwidmFsdWVzIiwiZmluZCIsIiRzY3JvbGxPblBhcmVudCIsInJlZiIsIm9uU2Nyb2xsIiwiJGlzTWFya2V0cGxhY2VHbG9iYWwiLCJjb2xvciIsIkNoYXRBSU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSU1lc3NhZ2VzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVuc3RhYmxlLW5lc3RlZC1jb21wb25lbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IFJlYWN0LCB7IEZDLCBtZW1vLCBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU3RyZWFtZG93biB9IGZyb20gJ3N0cmVhbWRvd24nXG5pbXBvcnQgeyBjcmVhdGVDb2RlUGx1Z2luIH0gZnJvbSAnQHN0cmVhbWRvd24vY29kZSdcbmltcG9ydCB7IEFycm93U21hbGxEb3duIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQXJyb3dTbWFsbERvd24nXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSwgVGFza0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DaGF0J1xuXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlVGFza1BhbmVsIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVGFza1BhbmVsJ1xuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZSdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5cbmltcG9ydCB7IE1lc3NhZ2VGcm9tVXNlciwgTWVzc2FnZUZyb21PdGhlciwgTWVzc2FnZUNvbnRlbnRGcm9tVXNlciwgTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIgfSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7XG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNjcm9sbFRvQm90dG9tQnV0dG9uLFxuICBTQ01lc3NhZ2VzT3V0ZXIsXG4gIFNDTWVzc2FnZXNTY3JvbGwsXG4gIFNDTWVzc2FnZXNJbm5lcixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDT3B0aW9uc0xpc3QsXG4gIFNDT3B0aW9uSXRlbSxcbiAgU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyLFxuICBTQ0Fzc2lzdGFudE5hbWUsXG4gIFNDQXNzaXN0YW50QXZhdGFyLFxuICBTQ1Rhc2tMaW5rLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbn0gZnJvbSAnLi9uZXdTdHlsZXMnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IE1BSUFJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgQ2hhdEFJU3VnZ2VzdGlvbnMgfSBmcm9tICcuL0NoYXRBSVN1Z2dlc3Rpb25zJ1xuaW1wb3J0IHsgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBkb3dubG9hZEZpbGVGcm9tVXJsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsZURvd25sb2FkSGVscGVyJ1xuXG5jb25zdCBjb2RlID0gY3JlYXRlQ29kZVBsdWdpbih7IHRoZW1lczogWydnaXRodWItbGlnaHQnLCAnZ2l0aHViLWxpZ2h0J10gfSlcblxuY29uc3QgQXNzaXN0YW50QXZhdGFySW5uZXI6IEZDID0gKCkgPT4ge1xuICBjb25zdCB7IGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgcmV0dXJuIChcbiAgICA8U0NBc3Npc3RhbnRBdmF0YXI+XG4gICAgICB7YWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgPyA8TUFJQUljb24gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPiA6IGFnZW50Py5lbW9qaX1cbiAgICA8L1NDQXNzaXN0YW50QXZhdGFyPlxuICApXG59XG5cbmNvbnN0IEFzc2lzdGFudEF2YXRhciA9IG1lbW8oQXNzaXN0YW50QXZhdGFySW5uZXIpXG5cbnR5cGUgQ2hhdEFJTWVzc2FnZXNQcm9wcyA9IHtcbiAgdXNlckluaXRpYWxNZXNzYWdlOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gIH1cbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeT86IChcbiAgICBzZW5kTWVzc2FnZTogKG1lc3NhZ2U6IHN0cmluZywgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLCBmYXFJZD86IHN0cmluZywgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcpID0+IHZvaWQsXG4gICAgc3RvcEdlbmVyYXRpb246ICgpID0+IHZvaWQsXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW4sXG4gICAgaXNXcml0aW5nOiBib29sZWFuXG4gICkgPT4gdm9pZFxuICBpc0Rpc2FibGVkPzogYm9vbGVhblxuICBvblNjcm9sbFRvQm90dG9tPzogKCkgPT4gdm9pZFxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgYWdlbnRzPzogQWdlbnRbXVxuICBleHBhbmRlZD86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlSXRlbVByb3BzID0gQ2hhdE1lc3NhZ2UgJiB7XG4gIGF1dGhVc2VyOiBDT1JVc2VyXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxuICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj86IGJvb2xlYW5cbiAgaGFuZGxlRmVlZGJhY2s6IChmZWVkYmFjazogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uOiAodGhyZWFkSWRzOiBzdHJpbmdbXSwgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSByZXR1cm5cbiAgICBzZXRTZWxlY3RlZE9wdGlvbihvcHRpb24pXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uKG9wdGlvbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDT3B0aW9uc0xpc3Q+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4gKFxuICAgICAgICA8U0NPcHRpb25JdGVtXG4gICAgICAgICAgJGhhc1NlbGVjdGlvbj17ISFzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICAkZGltbWVkPXshIXNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uPy5pZCAhPT0gb3B0aW9uLmlkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdChvcHRpb24pfVxuICAgICAgICAgIGtleT17b3B0aW9uLmlkfVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbi5uYW1lfVxuICAgICAgICA8L1NDT3B0aW9uSXRlbT5cbiAgICAgICkpfVxuICAgIDwvU0NPcHRpb25zTGlzdD5cbiAgKVxufVxuXG5jb25zdCBBc3Npc3RhbnRNZXNzYWdlSGVhZGVyID0gKCkgPT4ge1xuICBjb25zdCBbbG9jYWxBZ2VudCwgc2V0TG9jYWxBZ2VudF0gPSB1c2VTdGF0ZTxBZ2VudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TG9jYWxBZ2VudChhZ2VudClcbiAgfSwgW2FnZW50XSlcblxuICByZXR1cm4gKFxuICAgIDxTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXI+XG4gICAgICA8QXNzaXN0YW50QXZhdGFyIC8+XG4gICAgICB7bG9jYWxBZ2VudD8ubmFtZSAmJiAoXG4gICAgICAgIDxTQ0Fzc2lzdGFudE5hbWU+e2xvY2FsQWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgPyAnTUFJQScgOiBsb2NhbEFnZW50Py5uYW1lfTwvU0NBc3Npc3RhbnROYW1lPlxuICAgICAgKX1cbiAgICA8L1NDQXNzaXN0YW50TWVzc2FnZUhlYWRlcj5cbiAgKVxufVxuXG4vLyBFeHRyYWUgZWwgc2VnbWVudG8gZGUgdGFiIChkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKSBkZWwgaHJlZiBwYXJhIGFicmlyIGVsIG1vZGFsIGNvbiBlbCB0YWIgY29ycmVjdG9cbmNvbnN0IGdldFRhYlNlZ21lbnRGcm9tSHJlZiA9IChocmVmOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBtYXRjaCA9IGhyZWYubWF0Y2goL1xcL3Rhc2tzXFwvXFxkK1xcLyhbXi8/XSspLylcbiAgcmV0dXJuIG1hdGNoICYmIC9eKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpJC8udGVzdChtYXRjaFsxXSkgPyBtYXRjaFsxXSA6ICdkZXRhaWwnXG59XG5cbi8qKiBFeHRyYWUgbGFzIHRhcmVhcyBlbmxhemFkYXMgZW4gZWwgdGV4dG8gKFVSTHMgcXVlIGNvaW5jaWRlbiBjb24gVEFTS19VUkxfUkVHRVhfUEFUVEVSTikuICovXG5jb25zdCBleHRyYWN0VGFza3NGcm9tTWVzc2FnZSA9IChtZXNzYWdlOiBzdHJpbmcpOiBUYXNrSW5mb1tdID0+IHtcbiAgaWYgKCFtZXNzYWdlKSByZXR1cm4gW11cbiAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gIGNvbnN0IHRhc2tzOiBUYXNrSW5mb1tdID0gW11cbiAgY29uc3Qgc2VlbklkcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbCA9IG51bGxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduXG4gIHdoaWxlICgobWF0Y2ggPSB0YXNrVXJsUmVnZXguZXhlYyhtZXNzYWdlKSkgIT09IG51bGwpIHtcbiAgICBjb25zdCB0YXNrSWQgPSBtYXRjaFsxXVxuICAgIGNvbnN0IHVybCA9IG1hdGNoWzBdXG4gICAgaWYgKCFzZWVuSWRzLmhhcyh0YXNrSWQpKSB7XG4gICAgICBzZWVuSWRzLmFkZCh0YXNrSWQpXG4gICAgICBjb25zdCBlc2NhcGVkVXJsID0gdXJsLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJylcbiAgICAgIGNvbnN0IG1hcmtkb3duTGlua1JlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXFsoW15cXFxcXV0rKVxcXFxdXFxcXCgke2VzY2FwZWRVcmx9XFxcXClgKVxuICAgICAgY29uc3QgbGlua01hdGNoID0gbWVzc2FnZS5tYXRjaChtYXJrZG93bkxpbmtSZWdleClcbiAgICAgIGNvbnN0IHRpdGxlID0gbGlua01hdGNoID8gbGlua01hdGNoWzFdIDogYFRhcmVhICMke3Rhc2tJZH1gXG4gICAgICB0YXNrcy5wdXNoKHsgaWQ6IHRhc2tJZCwgdGl0bGUsIHVybCB9KVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFza3Ncbn1cblxuY29uc3QgaGFzVGFza0xpbmtzID0gKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4gPT4gZXh0cmFjdFRhc2tzRnJvbU1lc3NhZ2UodGV4dCkubGVuZ3RoID4gMFxuXG4vLyBDb21wb25lbnQgZm9yIHRhc2sgbGlua3MgdGhhdCB1c2VzIHRoZSB1c2VUYXNrUGFuZWwgaG9va1xuY29uc3QgVGFza0xpbms6IEZDPHsgaHJlZjogc3RyaW5nOyB0YXNrSWQ6IHN0cmluZzsgY2hpbGRyZW46IFJlYWN0Tm9kZSB9PiA9ICh7IGhyZWYsIHRhc2tJZCwgY2hpbGRyZW4gfSkgPT4ge1xuICBjb25zdCB0YWJTZWdtZW50ID0gZ2V0VGFiU2VnbWVudEZyb21IcmVmKGhyZWYpXG4gIGNvbnN0IHsgYnVpbGRPcGVuVGFzayB9ID0gdXNlVGFza1BhbmVsKHRhc2tJZCwgdGFiU2VnbWVudClcbiAgY29uc3Qgb3BlblRhc2sgPSBidWlsZE9wZW5UYXNrKClcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50PikgPT4ge1xuICAgIC8vIFNpIGVzIENtZC9DdHJsICsgY2xpY2ssIGRlamFyIHF1ZSBzZSBhYnJhIGVuIG51ZXZhIHBlc3Rhw7FhIChjb21wb3J0YW1pZW50byBwb3IgZGVmZWN0bylcbiAgICBpZiAoZS5tZXRhS2V5IHx8IGUuY3RybEtleSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgb3BlblRhc2soKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NUYXNrTGluayBocmVmPXtocmVmfSBvbkNsaWNrPXtoYW5kbGVDbGlja30+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TQ1Rhc2tMaW5rPlxuICApXG59XG5cbi8vIEN1c3RvbSBsaW5rIGNvbXBvbmVudCBmb3IgU3RyZWFtZG93bjogdGFzayBVUkxzIG9wZW4gdGhlIHRhc2sgcGFuZWwsIG90aGVyIGxpbmtzIHJlbmRlciBub3JtYWxseVxudHlwZSBDdXN0b21MaW5rUHJvcHMgPSBSZWFjdC5BbmNob3JIVE1MQXR0cmlidXRlczxIVE1MQW5jaG9yRWxlbWVudD4gJiB7IG5vZGU/OiB1bmtub3duIH1cbmNvbnN0IEN1c3RvbUxpbms6IEZDPEN1c3RvbUxpbmtQcm9wcz4gPSAoeyBocmVmLCBjaGlsZHJlbiwgLi4ucmVzdCB9KSA9PiB7XG4gIGlmICghaHJlZiB8fCB0eXBlb2YgaHJlZiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGEgaHJlZj17aHJlZn0gey4uLnJlc3R9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2E+XG4gICAgKVxuICB9XG4gIGNvbnN0IHRhc2tNYXRjaCA9IGhyZWYubWF0Y2gobmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOKSlcbiAgaWYgKHRhc2tNYXRjaCkge1xuICAgIGNvbnN0IHRhc2tJZCA9IHRhc2tNYXRjaFsxXVxuICAgIHJldHVybiAoXG4gICAgICA8VGFza0xpbmsgaHJlZj17aHJlZn0gdGFza0lkPXt0YXNrSWR9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L1Rhc2tMaW5rPlxuICAgIClcbiAgfVxuICByZXR1cm4gKFxuICAgIDxhIGhyZWY9e2hyZWZ9IHsuLi5yZXN0fT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2E+XG4gIClcbn1cblxuLyoqIFNvbG8gZXN0ZSBjb21wb25lbnRlIHJlLXJlbmRlcml6YSBjdWFuZG8gY2FtYmlhIGVsIHRleHRvIGVuIHN0cmVhbWluZyAobGVlIGRlbCBjb250ZXh0KS4gKi9cbmNvbnN0IFN0cmVhbWluZ01lc3NhZ2VCb2R5ID0gbWVtbyhcbiAgKHByb3BzOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gICAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPzogYm9vbGVhblxuICAgIGFwcHJvdmFsPzogTWVzc2FnZUl0ZW1Qcm9wc1snYXBwcm92YWwnXVxuICAgIGlzRXJyb3I/OiBib29sZWFuXG4gICAgc291cmNlcz86IE1lc3NhZ2VJdGVtUHJvcHNbJ3NvdXJjZXMnXVxuICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcD86IHsgYWdlbnRJZDogc3RyaW5nIH0gfCBudWxsXG4gICAgaGFuZGxlRmVlZGJhY2tDbGljazogKGY6IEZlZWRiYWNrKSA9PiB2b2lkXG4gICAgZGlzYWJsZUZlZWRiYWNrOiBGZWVkYmFjayB8IG51bGxcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD86IGJvb2xlYW5cbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICAvLyBUZXh0byBkZWwgc3RyZWFtOiBzb2xvIHNlIGxlZSBkZWwgc3RvcmUgY3VhbmRvIGVzdGUgbWVuc2FqZSBlcyBlbFxuICAgIC8vIHF1ZSBlc3TDoSBlbiBzdHJlYW1pbmcuIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGHDrXNsYSBlbCByZS1yZW5kZXIgYVxuICAgIC8vIGVzdGUgY29tcG9uZW50ZSwgc2luIHRvY2FyIGVsIHJlc3RvIGRlbCDDoXJib2wuXG4gICAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UocHJvcHMuaXNTdHJlYW1pbmcgPyBwcm9wcy5tZXNzYWdlSWQgOiBudWxsKVxuICAgIGNvbnN0IHJhd1RleHQgPSBwcm9wcy5pc1N0cmVhbWluZyA/IHN0cmVhbWluZ1RleHQgOiBwcm9wcy5tZXNzYWdlXG4gICAgLy8gU21vb3RoIHN0cmVhbWluZzogZGVzYWNvcGxhIGxhIGNhZGVuY2lhIGRlbCBiYWNrZW5kIGRlbCByZW5kZXIuXG4gICAgLy8gRHVyYW50ZSBlbCBzdHJlYW1pbmcgbGliZXJhIGNoYXJzIGEgcml0bW8gY29uc3RhbnRlIHbDrWEgckFGOyBjdWFuZG9cbiAgICAvLyB0ZXJtaW5hLCBtdWVzdHJhIGVsIHRleHRvIGZpbmFsIGFsIGluc3RhbnRlIChzaW4gYW5pbWFjacOzbiByZXNpZHVhbCkuXG4gICAgLy8gRmxhZ3MgZGUgdHVuaW5nIGxlw61kYXMgZGVzZGUgd2luZG93IHBhcmEgaXRlcmFyIHNpbiByZWNvbXBpbGFyLlxuICAgIC8vIFVzbyAoY29uc29sYSk6XG4gICAgLy8gICB3aW5kb3cuc3RyZWFtRGVidWcgPSB0cnVlICAgICAgIC8vIGFjdGl2YSBsb2dzIGRlIG3DqXRyaWNhc1xuICAgIC8vICAgd2luZG93LnN0cmVhbUFkYXB0ID0gdHJ1ZSAgICAgICAvLyBhY3RpdmEgYWRhcHRhY2nDs24gYSBsYSB0YXNhIGRlbCBiYWNrZW5kXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQnVmZmVyTXMgPSA0MDAgICAgIC8vIGNvbGNow7NuIG9iamV0aXZvIChtcykgZGVsIGNvbnRyb2xhZG9yXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTGFnTXMgPSAzMDAgICAgICAgIC8vIGxhZyBtw6F4aW1vIGJhc2UgKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbU1pbkJ1ZmZlciA9IDQwICAgICAvLyBwaXNvIGRlbCBjb2xjaMOzbiBlbiBjaGFyc1xuICAgIC8vICAgd2luZG93LnN0cmVhbVdhcm11cE1zID0gMjUwICAgICAvLyB3YXJtdXAgaW5pY2lhbCAobXMpIGFudGVzIGRlIGFuaW1hclxuICAgIGNvbnN0IHdpbkZsYWdzID1cbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gKHdpbmRvdyBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgICAgIHN0cmVhbURlYnVnPzogYm9vbGVhblxuICAgICAgICAgICAgc3RyZWFtQWRhcHQ/OiBib29sZWFuXG4gICAgICAgICAgICBzdHJlYW1CdWZmZXJNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbU1pbkJ1ZmZlcj86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtV2FybXVwTXM/OiBudW1iZXJcbiAgICAgICAgICB9KVxuICAgICAgICA6IHt9XG4gICAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VTbW9vdGhTdHJlYW1UZXh0KHJhd1RleHQsIHtcbiAgICAgIGVuYWJsZWQ6ICEhcHJvcHMuaXNTdHJlYW1pbmcsXG4gICAgICB0YXJnZXRMYWdNczogd2luRmxhZ3Muc3RyZWFtTGFnTXMgPz8gMzAwLFxuICAgICAgbWF4Q2hhcnNQZXJGcmFtZTogMjQsXG4gICAgICBzbmFwVG9Xb3JkQm91bmRhcnk6IHRydWUsXG4gICAgICBkZWJ1ZzogISF3aW5GbGFncy5zdHJlYW1EZWJ1ZyxcbiAgICAgIGRlYnVnTGFiZWw6IGBzbW9vdGhTdHJlYW06JHtwcm9wcy5tZXNzYWdlSWQgPz8gJ3Vua25vd24nfWAsXG4gICAgICBhZGFwdFRvQmFja2VuZFJhdGU6IHdpbkZsYWdzLnN0cmVhbUFkYXB0ICE9PSBmYWxzZSxcbiAgICAgIHRhcmdldEJ1ZmZlck1zOiB3aW5GbGFncy5zdHJlYW1CdWZmZXJNcyA/PyA0MDAsXG4gICAgICBtaW5CdWZmZXJDaGFyczogd2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyID8/IDQwLFxuICAgICAgd2FybXVwTXM6IHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zID8/IDI1MCxcbiAgICB9KVxuICAgIGNvbnN0IGNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSBwcm9wcy5jcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkXG4gICAgaWYgKCFkaXNwbGF5VGV4dCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcpIHJldHVybiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuaXNBc3Npc3RhbnQgJiYgaGFzVGFza0xpbmtzKGRpc3BsYXlUZXh0KSA/ICdoYXMtdGFzay1saW5rcycgOiAnJ31cbiAgICAgICAgPlxuICAgICAgICAgIDxTdHJlYW1kb3duXG4gICAgICAgICAgICBwbHVnaW5zPXt7IGNvZGUgfX1cbiAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogQ3VzdG9tTGluayB9IGFzIFBhcmFtZXRlcnM8dHlwZW9mIFN0cmVhbWRvd24+WzBdWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICBsaW5rU2FmZXR5PXt7IGVuYWJsZWQ6IGZhbHNlIH19XG4gICAgICAgICAgICBpc0FuaW1hdGluZz17ISFwcm9wcy5pc1N0cmVhbWluZ31cbiAgICAgICAgICAgIHNoaWtpVGhlbWU9e1snZ2l0aHViLWxpZ2h0JywgJ2dpdGh1Yi1saWdodCddfVxuICAgICAgICAgICAgY29udHJvbHM9e3sgdGFibGU6IGZhbHNlLCBjb2RlOiBmYWxzZSB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtkaXNwbGF5VGV4dH1cbiAgICAgICAgICA8L1N0cmVhbWRvd24+XG4gICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmICFwcm9wcy5pc0Vycm9yICYmICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwcm9wcy5hcHByb3ZhbCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgc291cmNlcz17cHJvcHMuc291cmNlc31cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtwcm9wcy5oYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtwcm9wcy5kaXNhYmxlRmVlZGJhY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmICFwcm9wcy5pc0Vycm9yICYmICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwcm9wcy5hcHByb3ZhbCAmJiAoXG4gICAgICAgICAgPENoYXRBSVN1Z2dlc3Rpb25zXG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17cHJvcHMuc3VnZ2VzdGlvbnMgfHwgW119XG4gICAgICAgICAgICBvblNlbGVjdFN1Z2dlc3Rpb249e3N1Z2dlc3Rpb24gPT4gcHJvcHMuaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKHByb3BzLm1lc3NhZ2VJZCwgc3VnZ2VzdGlvbil9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICEhY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zXG4gICAgICAgICAgICAgIGFnZW50SWQ9e2NyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbmNvbnN0IE1lc3NhZ2VJdGVtID0gbWVtbygocHJvcHM6IE1lc3NhZ2VJdGVtUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHVzZXIsXG4gICAgbWVzc2FnZSxcbiAgICBpc1N0cmVhbWluZyxcbiAgICBpc0Vycm9yLFxuICAgIGF1dGhVc2VyLFxuICAgIG9wdGlvbnMsXG4gICAgaXNDaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbixcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBkaXNhYmxlRmVlZGJhY2ssXG4gICAgcm9sZSxcbiAgICBzb3VyY2VzLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFwcHJvdmFsLFxuICAgIGFwcHJvdmFsU3RhdHVzLFxuICAgIHN1Z2dlc3Rpb25zLFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAsXG4gICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uLFxuICAgIGlzTGFzdE1lc3NhZ2UsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtwcmV2aWV3QXR0YWNobWVudCwgc2V0UHJldmlld0F0dGFjaG1lbnRdID0gdXNlU3RhdGU8QXR0YWNobWVudEZpbGUgfCBudWxsPihudWxsKVxuICBjb25zdCBpc0N1cnJlbnRVc2VyID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgdXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKVxuICBjb25zdCBpc0Fzc2lzdGFudCA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgdXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICBhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGF0dGFjaG1lbnRzXG4gICAgICA6ICFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICAgID8gKHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXSlcbiAgICAgICAgOiBbXVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbiAgICBjb25zdCBmaWxlVXJsID0gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSB8fCBhdHRhY2htZW50LnVybF90aHVtYm5haWxcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYmxvYlVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAge2lzQXNzaXN0YW50ICYmIDxBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIC8+fVxuICAgICAgICAgIDxNZXNzYWdlQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgIGlzQ2hhbmdlUHJvamVjdD17aXNDaGFuZ2VQcm9qZWN0fVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgbWVzc2FnZUV4dHJhQ29udGVudD17PE1lc3NhZ2VPcHRpb25zIG9wdGlvbnM9e29wdGlvbnMgYXMgYW55fSBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn0gLz59XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgICAgIDwvTWVzc2FnZVdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2tDbGljayA9IChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBpZFxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5maWx0ZXIocXVlc3Rpb25JZCA9PiBxdWVzdGlvbklkICE9PSAnYW5zd2VyJylcbiAgICAgIC5qb2luKCctJylcbiAgICBoYW5kbGVGZWVkYmFjaz8uKGZlZWRiYWNrLCBzZXNzaW9uSWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgIHtpc0Fzc2lzdGFudCAmJiA8QXNzaXN0YW50TWVzc2FnZUhlYWRlciAvPn1cbiAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgIHshIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93ICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VBdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHthcHByb3ZhbCAmJiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgICAgIDxBcHByb3ZhbEJveFxuICAgICAgICAgICAgICBhY3Rpb25zPXthcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnN9XG4gICAgICAgICAgICAgIHN0YXR1cz17YXBwcm92YWxTdGF0dXN9XG4gICAgICAgICAgICAgIG9uQXBwcm92ZT17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAnYXBwcm92ZScpfVxuICAgICAgICAgICAgICBvblJlamVjdD17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAncmVqZWN0Jyl9XG4gICAgICAgICAgICAgIGlzUHJvamVjdERlbGV0ZWQ9e3Byb3BzLnByb2plY3RNZXRhZGF0YT8uaXNfZGVsZXRlZCA9PT0gdHJ1ZX1cbiAgICAgICAgICAgICAgaXNFeHBhbmRlZD17cHJvcHMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgIGhpdGxJbnN0YW5jZUlkPXthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9XG4gICAgICAgICAgICAgIHdhcm5pbmdNZXNzYWdlPXthcHByb3ZhbC53YXJuaW5nX21lc3NhZ2V9XG4gICAgICAgICAgICAgIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQ9e2FwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgKX1cbiAgICAgICAgeyghIW1lc3NhZ2UgfHwgaXNTdHJlYW1pbmcpICYmICFhcHByb3ZhbCAmJiAhKGlzQXNzaXN0YW50ICYmICEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXshIWlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH1cbiAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICBhcHByb3ZhbD17YXBwcm92YWx9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgc291cmNlcz17c291cmNlc31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA9e2NyZWF0ZUFnZW50Rm9sbG93VXB9XG4gICAgICAgICAgICBoYW5kbGVGZWVkYmFja0NsaWNrPXtoYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtkaXNhYmxlRmVlZGJhY2sgPz8gbnVsbH1cbiAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhIWhhc1NlbGVjdGVkU3VnZ2VzdGlvbn1cbiAgICAgICAgICAgIG1lc3NhZ2VJZD17aWR9XG4gICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L1NDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgIDxBdHRhY2htZW50UHJldmlld01vZGFsXG4gICAgICAgIGlzT3Blbj17ISFwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VQcmV2aWV3fVxuICAgICAgICBhdHRhY2htZW50PXtwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgIC8+XG4gICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgKVxufSlcblxuY29uc3QgQ2hhdEFJTWVzc2FnZXNJbm5lciA9ICh7XG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgaW5pdGlhbENoYXRJZCxcbiAgb25FcnJvcixcbiAgb25TZW5kTWVzc2FnZVJlYWR5LFxuICBvblNjcm9sbFRvQm90dG9tLFxuICBhdHRhY2htZW50cyxcbiAgYWdlbnRzLFxuICBleHBhbmRlZCxcbn06IENoYXRBSU1lc3NhZ2VzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgeyBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgY2hhdEluaXRpYWxpemVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBpc0xvYWRpbmdNb3JlUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCB1c2VyU2Nyb2xsaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaHJlc2hvbGRSZWYgPSB1c2VSZWYoMzkpXG4gIGNvbnN0IGxhc3RTY3JvbGxUb3BSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc2hvd1Njcm9sbFRvQm90dG9tUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxSYWZSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dTY3JvbGxUb0JvdHRvbSwgc2V0U2hvd1Njcm9sbFRvQm90dG9tXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcywgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGNoYW5nZVByb2plY3Qob3B0aW9uKVxuICAgIH0sXG4gICAgW2NoYW5nZVByb2plY3RdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uPy50cmltKCkpIHJldHVyblxuICAgICAgaWYgKHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZUlkXSkgcmV0dXJuXG4gICAgICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJyAmJiAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhZ2VudD8ubmFtZSB8fCAnJylcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRTdWdnZXN0ZWRBbnN3ZXIsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID8gJ21hcmtldHBsYWNlJyA6IGFnZW50Py50eXBlLFxuICAgICAgfSlcbiAgICAgIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMocHJldiA9PiAoeyAuLi5wcmV2LCBbbWVzc2FnZUlkXTogdHJ1ZSB9KSlcbiAgICAgIHNlbmRNZXNzYWdlKHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbc2VuZE1lc3NhZ2UsIHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIGV2ZW50LCBhZ2VudD8uZW50aXR5LCBhZ2VudD8ubmFtZSwgYWdlbnQ/LnR5cGVdXG4gIClcblxuICAvKipcbiAgICogQWN0dWFsaXphIGVsIGVzdGFkbyBkZWwgYm90w7NuIFwic2Nyb2xsIHRvIGJvdHRvbVwiIGNvbXBhcmFuZG8gbGEgcG9zaWNpw7NuXG4gICAqIGFjdHVhbCBkZWwgc2Nyb2xsIGNvbiBlbCBmb25kby4gVXNhIHVuIHJlZiBwYXJhIGV2aXRhciBgc2V0U3RhdGVgIGN1YW5kb1xuICAgKiBlbCB2YWxvciBubyBjYW1iaWEuXG4gICAqL1xuICBjb25zdCB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwpIHJldHVyblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gZWxcbiAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICBpZiAoc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgIT09IHNob3VsZFNob3cpIHtcbiAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGlubWVkaWF0byBhbCBmb25kbyAoZGVudHJvIGRlIHJBRiBwYXJhIGNvb3JkaW5hciBjb24gZWwgcGFpbnQpXG4gICAqIHkgYWN0dWFsaXphIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uIFJlc3BldGEgYHNraXBJZlVzZXJTY3JvbGxpbmdgIHBhcmFcbiAgICogbm8gc29icmVzY3JpYmlyIGVsIHNjcm9sbCBtYW51YWwgZGVsIHVzdWFyaW8gZHVyYW50ZSBlbCBzdHJlYW1pbmcuXG4gICAqL1xuICBjb25zdCBzY3JvbGxUb0JvdHRvbVJhZiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRzOiB7IHNraXBJZlVzZXJTY3JvbGxpbmc/OiBib29sZWFuOyBkZWxheU1zPzogbnVtYmVyIH0gPSB7fSkgPT4ge1xuICAgICAgY29uc3QgeyBza2lwSWZVc2VyU2Nyb2xsaW5nID0gZmFsc2UsIGRlbGF5TXMgPSAwIH0gPSBvcHRzXG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICAgICAgaWYgKHNraXBJZlVzZXJTY3JvbGxpbmcgJiYgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChkZWxheU1zID4gMCkgc2V0VGltZW91dChydW4sIGRlbGF5TXMpXG4gICAgICBlbHNlIHJ1bigpXG4gICAgfSxcbiAgICBbdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50KSByZXR1cm5cbiAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvKHtcbiAgICAgIHRvcDogbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHQsXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgfSlcbiAgICAvLyBEYXIgdGllbXBvIGFsIHNtb290aC1zY3JvbGwgYW50ZXMgZGUgcmVjYWxjdWxhciBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLlxuICAgIHNldFRpbWVvdXQodXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSwgNTAwKVxuICB9LCBbdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdVcCA9IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc1Njcm9sbGluZ1VwKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAxNVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgICB9XG5cbiAgICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gIWlzTmVhckJvdHRvbVxuICAgICAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBzY3JvbGxUb3BcblxuICAgICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tICYmIG9uU2Nyb2xsVG9Cb3R0b20pIHtcbiAgICAgICAgICBvblNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVNjcm9sbChjb250YWluZXIpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uU2Nyb2xsVG9Cb3R0b20sIGhhbmRsZVNjcm9sbCwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV1cbiAgKVxuXG4gIC8vIHJlZnMgdG8gc3RhYmlsaXplIGZ1bmN0aW9ucyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICBjb25zdCBzZW5kTWVzc2FnZVJlZiA9IHVzZVJlZihzZW5kTWVzc2FnZSlcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25SZWYgPSB1c2VSZWYoc3RvcEdlbmVyYXRpb24pXG4gIGNvbnN0IG9uU2VuZE1lc3NhZ2VSZWFkeVJlZiA9IHVzZVJlZihvblNlbmRNZXNzYWdlUmVhZHkpXG5cbiAgLy8gdXBkYXRlIHJlZnMgd2hlbiBmdW5jdGlvbnMgY2hhbmdlXG4gIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQgPSBzZW5kTWVzc2FnZVxuICBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50ID0gc3RvcEdlbmVyYXRpb25cbiAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQgPSBvblNlbmRNZXNzYWdlUmVhZHlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoc2VuZE1lc3NhZ2VSZWYuY3VycmVudCwgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCwgd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcpXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50ID0gaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXG4gIH0sIFtpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIC8vIEN1YW5kbyBlbCBhZ2VudGUgZW1waWV6YSBhIHJlc3BvbmRlciwgcmVzZXRlYXIgZWwgZmxhZyB5IGVsIHVtYnJhbCBwYXJhIGFjdGl2YXIgZWwgYXV0by1zY3JvbGxcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2FpdGluZ1Jlc3BvbnNlKSB7XG4gICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGluaXRpYWxpemVDaGF0KClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIEF1dG9zY3JvbGwgbWllbnRyYXMgZWwgdGV4dG8gZGVsIHN0cmVhbSBjcmVjZS4gRWwgdGV4dG8gc2UgcGludGEgYWwgcml0bW9cbiAgLy8gZGUgYHVzZVNtb290aFN0cmVhbVRleHRgICh+NjBmcHMpLCBubyBhbCByaXRtbyBkZSBsbGVnYWRhIGRlIHRva2VucyBkZWxcbiAgLy8gYmFja2VuZDogcG9yIGVzbyBhY8OhIHVzYW1vcyB1biBsb29wIGRlIHJBRiBxdWUgY29tcGFyYSBgc2Nyb2xsSGVpZ2h0YFxuICAvLyBjb250cmEgZWwgw7psdGltbyB2YWxvciBvYnNlcnZhZG8geSBhanVzdGEgc29sbyBjdWFuZG8gY2FtYmlhLiBBc8OtIGVsXG4gIC8vIHNjcm9sbCBxdWVkYSBwZXJmZWN0YW1lbnRlIHNpbmNyb25pemFkbyBjb24gbGEgYW5pbWFjacOzbiBkZWwgdGV4dG8gc2luXG4gIC8vIGRlcGVuZGVyIGRlIGxhIGNhZGVuY2lhIGRlbCBzdHJlYW1pbmdTdG9yZS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXdhaXRpbmdSZXNwb25zZSAmJiAhaXNXcml0aW5nKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBsZXQgcmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsXG4gICAgbGV0IGxhc3RIZWlnaHQgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuXG4gICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByYWZJZCA9IG51bGxcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICBpZiAoY3VycmVudEhlaWdodCAhPT0gbGFzdEhlaWdodCkge1xuICAgICAgICBsYXN0SGVpZ2h0ID0gY3VycmVudEhlaWdodFxuICAgICAgICBpZiAoIXVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkge1xuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgICAgIH1cbiAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgfVxuXG4gICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJhZklkICE9IG51bGwpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nLCB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5XSlcblxuICAvLyBBbCBjb21lbnphciBhIGVzcGVyYXIgbGEgcmVzcHVlc3RhIGRlbCBiYWNrZW5kLCBzY3JvbGwgaW5pY2lhbCBhbCBmb25kby5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2FpdGluZ1Jlc3BvbnNlICYmIG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgc2tpcElmVXNlclNjcm9sbGluZzogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIC8vIFNjcm9sbCBjdWFuZG8gY2FtYmlhbiBsb3MgbWVuc2FqZXM6IGRpc3Rpbmd1ZSBcIm51ZXZvIG1lbnNhamVcIiAoYWdyZWdhZG8pXG4gIC8vIGRlIFwicmVlbXBsYXpvXCIgKG1pc21vIGlkL2xlbmd0aCwgZWouIGZlZWRiYWNrIG8gYXBwcm92YWxTdGF0dXMpLiBFblxuICAvLyByZWVtcGxhem9zIHNvbG8gc2UgcmVjYWxjdWxhIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24gc2luIGZvcnphciBzY3JvbGwuXG4gIGNvbnN0IGxhc3RNZXNzYWdlSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmID0gdXNlUmVmPG51bWJlcj4oMClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBsYXN0SWQgPSBsYXN0TWVzc2FnZT8uaWQgPz8gbnVsbFxuICAgIGNvbnN0IHByZXZJZCA9IGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudFxuICAgIGNvbnN0IHByZXZMZW4gPSBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IGxhc3RJZFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBjb25zdCBpc05ld01lc3NhZ2UgPSBsYXN0SWQgIT09IHByZXZJZCB8fCBtZXNzYWdlcy5sZW5ndGggIT09IHByZXZMZW5cbiAgICBpZiAoIWlzTmV3TWVzc2FnZSkge1xuICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcbiAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IG1lc3NhZ2VzLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gJ3VzZXItaW5pdGlhbC1tZXNzYWdlJylcbiAgICBjb25zdCBpc0FwcHJvdmFsID0gISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcbiAgICBjb25zdCBpc0Fuc3dlck9yUXVlc3Rpb24gPVxuICAgICAgISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYW5zd2VyLScpIHx8IGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpKVxuXG4gICAgLy8gQXBwcm92YWw6IHNlY3VlbmNpYSBkZSBzY3JvbGxzIGNvbiBkZWxheSBwb3JxdWUgZWwgQXBwcm92YWxCb3ggbmVjZXNpdGFcbiAgICAvLyB1biB0aWNrIHBhcmEgbWVkaXJzZS4gU2Nyb2xsZWEgYXVucXVlIGVsIHVzdWFyaW8gbm8gZXN0w6kgYWwgZm9uZG8gc2kgbm9cbiAgICAvLyBlc3TDoSBzY3JvbGxlYW5kbyBtYW51YWxtZW50ZS5cbiAgICBpZiAoaXNBcHByb3ZhbCAmJiAoaXNBdEJvdHRvbSB8fCAhdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIE51ZXZvcyBhbnN3ZXIvcXVlc3Rpb246IHNjcm9sbCBzaSBlbCB1c3VhcmlvIHlhIGVzdGFiYSBhbCBmb25kby5cbiAgICBpZiAoaXNBbnN3ZXJPclF1ZXN0aW9uICYmIGlzQXRCb3R0b20pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENhc28gYm9yZGU6IGNhbWJpb3MgZGUgbWVuc2FqZXMgc2luIHNlciBudWV2byBhbnN3ZXIvdXNlci9hcHByb3ZhbFxuICAgIC8vIHBlcm8gc8OtIHVuIG1lbnNhamUgbnVldm8gKG5vIGVsIFwidXNlci1pbml0aWFsLW1lc3NhZ2VcIikuIFNjcm9sbGVhLlxuICAgIGlmICghaXNBbnN3ZXJPclF1ZXN0aW9uICYmICFpc0FwcHJvdmFsICYmICFoYXNJbml0aWFsTWVzc2FnZSAmJiBtZXNzYWdlcy5sZW5ndGggPiBwcmV2TGVuKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgfSwgW21lc3NhZ2VzLCBsb2FkaW5nTWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgc2Nyb2xsVG9Cb3R0b21SYWYsIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldKVxuXG4gIC8vIEVzdGFkbyBpbmljaWFsIGRlbCBib3TDs24gc2Nyb2xsLXRvLWJvdHRvbSBhbCB0ZXJtaW5hciBsb2FkaW5nTWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICAgIH1cbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5XSlcblxuICAvLyBPYnRlbmVyIGVsIMO6bHRpbW8gbWVuc2FqZSBkZWwgdXN1YXJpbyBwYXJhIHZlcmlmaWNhciBzaSB0aWVuZSBhdHRhY2htZW50c1xuICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAuYXQoLTEpXG5cbiAgY29uc3QgaGFzQXR0YWNobWVudHMgPVxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uYXR0YWNobWVudHMpICYmIGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGgpIHx8XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5zb3VyY2VzKSAmJiBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGgpXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcbiAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYWdlbnQ/Lm5hbWUgfHwgJycpXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIDxMb2FkZXIgLz5cbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGVudCA9IChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiA8TG9hZGluZ1RleHQgdGV4dD17dCgnY2hhdC5sb2FkaW5nTW9yZScpfSAvPn1cbiAgICAgIDw+XG4gICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IGlzQXNzaXN0YW50TWVzc2FnZSAmJiBpc0xhc3RNZXNzYWdlICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmVhbWluZyAmJlxuICAgICAgICAgICAgIShtZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGggfHwgbWVzc2FnZS5zb3VyY2VzPy5sZW5ndGgpICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5wcm9qZWN0Py5uYW1lICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5hcHByb3ZhbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBudWxsXG5cbiAgICAgICAgICBjb25zdCBtZXNzYWdlRmVlZGJhY2sgPVxuICAgICAgICAgICAgbWVzc2FnZT8ud2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2Uud2FzSGVscGZ1bCA9PT0gbnVsbFxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiBtZXNzYWdlLndhc0hlbHBmdWxcbiAgICAgICAgICAgICAgICA/IEZlZWRiYWNrLlRIVU1CU19VUFxuICAgICAgICAgICAgICAgIDogRmVlZGJhY2suVEhVTUJTX0RPV05cblxuICAgICAgICAgIC8vIEtleSBlc3RhYmxlOiBzb2xvIG1lc3NhZ2UuaWQgcGFyYSBldml0YXIgcmVtb3VudCBkdXJhbnRlIHN0cmVhbWluZyAobWVzc2FnZS5kYXRlIHB1ZWRlIGNhbWJpYXIpXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUtleSA9IG1lc3NhZ2UuaWQgPz8gYG1zZy0ke2luZGV4fWBcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgICAgey4uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgIGtleT17bWVzc2FnZUtleX1cbiAgICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9ufVxuICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPXshIXNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZS5pZF19XG4gICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17bWVzc2FnZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvPlxuICAgICAgeyh3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2UgfHwgT2JqZWN0LmtleXMoYWN0aXZlTG9hZGluZ3MgfHwge30pLmxlbmd0aCA+IDApICYmIChcbiAgICAgICAgPFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgICAgIHtPYmplY3Qua2V5cyhhY3RpdmVMb2FkaW5ncyB8fCB7fSkubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgIDxMb2FkaW5nVGV4dFxuICAgICAgICAgICAgICBrZXk9XCJsb2FkaW5nLWFjdGl2ZVwiXG4gICAgICAgICAgICAgIHRleHQ9e1xuICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoYWN0aXZlTG9hZGluZ3MgfHwge30pLmZpbmQobXNnID0+IG1zZyAhPT0gdCgnY2hhdC5wcm9jZXNzaW5nJykpIHx8IHQoJ2NoYXQucHJvY2Vzc2luZycpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICh3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2UpICYmIChcbiAgICAgICAgICAgICAgPExvYWRpbmdUZXh0XG4gICAgICAgICAgICAgICAgdGV4dD17XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nTWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgKGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgID8gJ0J1c2NhbmRvIGVuIGxhIHdlYidcbiAgICAgICAgICAgICAgICAgICAgOiBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICA/IHQoJ2NoYXQuZ2VuZXJhdGluZ0RlZXBTZWFyY2gnKVxuICAgICAgICAgICAgICAgICAgICAgIDogaGFzQXR0YWNobWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdCgnY2hhdC5nZW5lcmF0aW5nQXR0YWNobWVudCcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHQoJ2NoYXQuZ2VuZXJhdGluZycpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApfVxuICAgICAgICA8L1NDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZXNPdXRlciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9PlxuICAgICAge2lzU2Nyb2xsT25QYXJlbnQgPyAoXG4gICAgICAgIDxTQ01lc3NhZ2VzU2Nyb2xsIHJlZj17bWVzc2FnZXNSZWZ9IG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDTWVzc2FnZXNJbm5lciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9ICRpc01hcmtldHBsYWNlR2xvYmFsPXtpc01hcmtldHBsYWNlR2xvYmFsQWdlbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VzQ29udGVudH1cbiAgICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICAgPC9TQ01lc3NhZ2VzU2Nyb2xsPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNDTWVzc2FnZXNJbm5lclxuICAgICAgICAgIHJlZj17bWVzc2FnZXNSZWZ9XG4gICAgICAgICAgb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfVxuICAgICAgICAgICRzY3JvbGxPblBhcmVudD17ZmFsc2V9XG4gICAgICAgICAgJGlzTWFya2V0cGxhY2VHbG9iYWw9e2lzTWFya2V0cGxhY2VHbG9iYWxBZ2VudH1cbiAgICAgICAgPlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAge3Nob3dTY3JvbGxUb0JvdHRvbSAmJiAoXG4gICAgICAgIDxTY3JvbGxUb0JvdHRvbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPEFycm93U21hbGxEb3duIGNvbG9yPVwiIzY2NlwiIHdpZHRoPVwiMjBweFwiIGhlaWdodD1cIjIwcHhcIiAvPlxuICAgICAgICA8L1Njcm9sbFRvQm90dG9tQnV0dG9uPlxuICAgICAgKX1cbiAgICA8L1NDTWVzc2FnZXNPdXRlcj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTWVzc2FnZXMgPSBSZWFjdC5tZW1vKENoYXRBSU1lc3NhZ2VzSW5uZXIpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsS0FBSyxJQUFRQyxJQUFJLEVBQWFDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxlQUFlLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFBQyxhQUFBLElBQUFDLGNBQUEsUUFBUSxPQUFPO0FBQzdHLFNBQVNDLFVBQVUsUUFBUSxZQUFZO0FBQ3ZDLFNBQVNDLGdCQUFnQixRQUFRLGtCQUFrQjtBQUNuRCxTQUFTQyxjQUFjLFFBQVEsaURBQWlEO0FBRWhGLFNBQVNDLGNBQWMsUUFBUSwyQ0FBMkM7QUFDMUUsU0FBU0MsV0FBVyxRQUFRLHFDQUFxQztBQUNqRSxTQUFTQyxzQkFBc0IsUUFBUSxvQ0FBb0M7QUFDM0UsU0FBU0MsbUJBQW1CLFFBQVEsZ0RBQWdEO0FBRXBGLFNBQXNCQyxlQUFlLFFBQWtCLHFCQUFxQjtBQUU1RSxTQUFrQkMsT0FBTyxRQUFRLDJCQUEyQjtBQUU1RCxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLGNBQWMsUUFBUSw4Q0FBOEM7QUFDN0UsU0FBU0MsWUFBWSxRQUFRLDZCQUE2QjtBQUMxRCxTQUFTQyxtQkFBbUIsUUFBUSxvQ0FBb0M7QUFDeEUsU0FBU0MsbUJBQW1CLFFBQVEsb0NBQW9DO0FBRXhFLFNBQVNDLFdBQVcsUUFBUSx5QkFBeUI7QUFDckQsU0FBU0MsTUFBTSxRQUFRLG9CQUFvQjtBQUkzQyxTQUFTQyxlQUFlLEVBQUVDLGdCQUFn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
|
|
865
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkZyYWdtZW50IiwibWVtbyIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJTdHJlYW1kb3duIiwiY3JlYXRlQ29kZVBsdWdpbiIsIkFycm93U21hbGxEb3duIiwiQXR0YWNobWVudENhcmQiLCJBcHByb3ZhbEJveCIsIkF0dGFjaG1lbnRQcmV2aWV3TW9kYWwiLCJBdHRhY2htZW50Q2FyZEF1ZGlvIiwiQ2hhdEhpc3RvcnlSb2xlIiwidXNlVXNlciIsInVzZVQiLCJ1c2VDaGF0TWFuYWdlciIsInVzZVRhc2tQYW5lbCIsIkxvYWRpbmdUZXh0IiwiTG9hZGVyIiwiTWVzc2FnZUZyb21Vc2VyIiwiTWVzc2FnZUZyb21PdGhlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNZXNzYWdlQ29udGVudEZyb21PdGhlciIsIk1lc3NhZ2VGZWVkYmFjayIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTY3JvbGxUb0JvdHRvbUJ1dHRvbiIsIlNDTWVzc2FnZXNPdXRlciIsIlNDTWVzc2FnZXNTY3JvbGwiLCJTQ01lc3NhZ2VzSW5uZXIiLCJTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbiIsIlNDT3B0aW9uc0xpc3QiLCJTQ09wdGlvbkl0ZW0iLCJTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXIiLCJTQ0Fzc2lzdGFudE5hbWUiLCJTQ0Fzc2lzdGFudEF2YXRhciIsIlNDVGFza0xpbmsiLCJTQ01lc3NhZ2VJdGVtV3JhcHBlciIsIlNDTWVzc2FnZUl0ZW1Jbm5lciIsIlNDQXR0YWNobWVudHNSb3ciLCJTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbiIsIkZlZWRiYWNrIiwidXNlR2xvYmFsQ29udGV4dCIsIk1BSUFJY29uIiwiVEFTS19VUkxfUkVHRVhfUEFUVEVSTiIsIkNoYXRBSVN1Z2dlc3Rpb25zIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJDaGF0RGF5U2VwYXJhdG9yIiwiZm9ybWF0Q2hhdERheVNlcGFyYXRvckxhYmVsIiwiZ2V0TG9jYWxEYXlLZXkiLCJpc1JlbmRlcmFibGVDaGF0TWVzc2FnZSIsImRvd25sb2FkRmlsZUZyb21VcmwiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiX0ZyYWdtZW50IiwiU3RyZWFtaW5nTWVzc2FnZUNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiY29kZSIsInRoZW1lcyIsIkFzc2lzdGFudEF2YXRhcklubmVyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsImNoaWxkcmVuIiwidHlwZSIsIndpZHRoIiwiaGVpZ2h0IiwiZW1vamkiLCJBc3Npc3RhbnRBdmF0YXIiLCJNZXNzYWdlV3JhcHBlciIsIl9yZWYiLCJpc0N1cnJlbnRVc2VyIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiQXNzaXN0YW50TWVzc2FnZUhlYWRlciIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibG9jYWxBZ2VudCIsInNldExvY2FsQWdlbnQiLCJfdXNlR2xvYmFsQ29udGV4dDIiLCJnZXRUYWJTZWdtZW50RnJvbUhyZWYiLCJocmVmIiwibWF0Y2giLCJ0ZXN0IiwiZXh0cmFjdFRhc2tzRnJvbU1lc3NhZ2UiLCJtZXNzYWdlIiwidGFza1VybFJlZ2V4IiwiUmVnRXhwIiwidGFza3MiLCJzZWVuSWRzIiwiU2V0IiwiZXhlYyIsInRhc2tJZCIsInVybCIsImhhcyIsImFkZCIsImVzY2FwZWRVcmwiLCJyZXBsYWNlIiwibWFya2Rvd25MaW5rUmVnZXgiLCJjb25jYXQiLCJsaW5rTWF0Y2giLCJ0aXRsZSIsInB1c2giLCJoYXNUYXNrTGlua3MiLCJ0ZXh0IiwibGVuZ3RoIiwiVGFza0xpbmsiLCJfcmVmNCIsInRhYlNlZ21lbnQiLCJfdXNlVGFza1BhbmVsIiwiYnVpbGRPcGVuVGFzayIsIm9wZW5UYXNrIiwiaGFuZGxlQ2xpY2siLCJlIiwibWV0YUtleSIsImN0cmxLZXkiLCJwcmV2ZW50RGVmYXVsdCIsIkN1c3RvbUxpbmsiLCJfcmVmNSIsInJlc3QiLCJfZXhjbHVkZWQzIiwidGFza01hdGNoIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfcHJvcHMkY3JlYXRlQWdlbnRGb2wiLCJmcm9tQ29udGV4dCIsInVzZUNvbnRleHQiLCJkaXNwbGF5VGV4dCIsImlzU3RyZWFtaW5nIiwiY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJhZ2VudElkIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImNsYXNzTmFtZSIsImlzQXNzaXN0YW50IiwicGx1Z2lucyIsImNvbXBvbmVudHMiLCJhIiwibGlua1NhZmV0eSIsImVuYWJsZWQiLCJpc0FuaW1hdGluZyIsInNoaWtpVGhlbWUiLCJjb250cm9scyIsInRhYmxlIiwiaXNFcnJvciIsImFwcHJvdmFsIiwiY29udGVudCIsInNvdXJjZXMiLCJoYW5kbGVGZWVkYmFjayIsImhhbmRsZUZlZWRiYWNrQ2xpY2siLCJkaXNhYmxlRmVlZGJhY2siLCJzdWdnZXN0aW9ucyIsIm9uU2VsZWN0U3VnZ2VzdGlvbiIsInN1Z2dlc3Rpb24iLCJoYW5kbGVTdWdnZXN0aW9uQ2xpY2siLCJtZXNzYWdlSWQiLCJkaXNhYmxlZCIsInN1Z2dlc3Rpb25zRGlzYWJsZWQiLCJoaWRkZW4iLCJpc0xhc3RNZXNzYWdlIiwiTWVzc2FnZUl0ZW0iLCJfcHJvcHMkcHJvamVjdE1ldGFkYXQiLCJ1c2VyIiwiYXV0aFVzZXIiLCJpc0NoYW5nZVByb2plY3QiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwicm9sZSIsImF0dGFjaG1lbnRzIiwiYXBwcm92YWxTdGF0dXMiLCJoYXNTZWxlY3RlZFN1Z2dlc3Rpb24iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInByZXZpZXdBdHRhY2htZW50Iiwic2V0UHJldmlld0F0dGFjaG1lbnQiLCJVU0VSIiwidG9TdHJpbmciLCJBU1NJU1RBTlQiLCJtZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbmNsdWRlcyIsInNlbnQiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJhYnJ1cHQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJkb3dubG9hZCIsInN0eWxlIiwiZGlzcGxheSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwic2V0VGltZW91dCIsInJlbW92ZUNoaWxkIiwicmV2b2tlT2JqZWN0VVJMIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYXNGZWVkYmFjayIsIiRpc0Fzc2lzdGFudCIsIm1lc3NhZ2VFeHRyYUNvbnRlbnQiLCJmZWVkYmFjayIsInNlc3Npb25JZCIsInNwbGl0IiwiZmlsdGVyIiwicXVlc3Rpb25JZCIsImpvaW4iLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmNyIsIl9sYXN0TXNnJHVzZXIiLCJfbGFzdE1zZyRtZXNzYWdlIiwidXNlckluaXRpYWxNZXNzYWdlIiwiaW5pdGlhbENoYXRJZCIsIm9uRXJyb3IiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvblNjcm9sbFRvQm90dG9tIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiaTE4biIsIl91c2VHbG9iYWxDb250ZXh0MyIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiZXZlbnQiLCJtZXNzYWdlc1JlZiIsImNoYXRJbml0aWFsaXplZFJlZiIsImlzTG9hZGluZ01vcmVSZWYiLCJ1c2VyU2Nyb2xsaW5nUmVmIiwic2Nyb2xsVGhyZXNob2xkUmVmIiwibGFzdFNjcm9sbFRvcFJlZiIsInNob3dTY3JvbGxUb0JvdHRvbVJlZiIsInNjcm9sbFJhZlJlZiIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwic2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsInN0cmVhbWluZ01lc3NhZ2VQcm9wc1JlZiIsInN0cmVhbWluZ01lc3NhZ2VJZFJlZiIsIl91c2VDaGF0TWFuYWdlciIsImNoYXRJZCIsInVuZGVmaW5lZCIsIm1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJhY3RpdmVMb2FkaW5ncyIsInNlbmRNZXNzYWdlIiwiY2hhbmdlUHJvamVjdCIsImluaXRpYWxpemVDaGF0IiwiaGFuZGxlU2Nyb2xsIiwic3RvcEdlbmVyYXRpb24iLCJ0cmltIiwiaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50IiwiZW50aXR5IiwiYWlDaGF0U3VnZ2VzdGVkQW5zd2VyIiwiYWdlbnRfdHlwZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20iLCJjdXJyZW50Iiwic2Nyb2xsVG8iLCJ0b3AiLCJzY3JvbGxIZWlnaHQiLCJiZWhhdmlvciIsIl9tZXNzYWdlc1JlZiRjdXJyZW50Iiwic2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaXNTY3JvbGxpbmdVcCIsImlzTmVhckJvdHRvbSIsImRpZFNldFN0YXRlIiwic2VuZE1lc3NhZ2VSZWYiLCJzdG9wR2VuZXJhdGlvblJlZiIsIm9uU2VuZE1lc3NhZ2VSZWFkeVJlZiIsImxhc3RNZXNzYWdlIiwiaGFzQXBwcm92YWwiLCJpc0F0Qm90dG9tIiwic2Nyb2xsVG9Cb3R0b20iLCJfbWVzc2FnZXNSZWYkY3VycmVudDIiLCJpc05ld0Fuc3dlck1lc3NhZ2UiLCJpc05ld1VzZXJNZXNzYWdlIiwiaXNOZXdBcHByb3ZhbE1lc3NhZ2UiLCJoYXNNZXNzYWdlcyIsImlzTm90SW5pdGlhbE1lc3NhZ2UiLCJtc2ciLCJzY3JvbGxEZWxheSIsImRvU2Nyb2xsIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQzIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQ0IiwibGFzdFVzZXJNZXNzYWdlIiwiYXQiLCJoYXNBdHRhY2htZW50cyIsImlzU2Nyb2xsT25QYXJlbnQiLCJleHBhbmRlZFJlZiIsInNhdmVkU2Nyb2xsVG9wIiwibGFzdE1zZyIsImlzU3RyZWFtaW5nQWN0aXZlIiwic3RyZWFtaW5nVGV4dCIsIm1lc3NhZ2VzQ29udGVudCIsIlByb3ZpZGVyIiwidmFsdWUiLCJsYXN0UmVuZGVyZWREYXlLZXkiLCJfbWVzc2FnZSRpZCIsImRheUtleSIsImRhdGUiLCJzaG93RGF5U2VwYXJhdG9yIiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwiaXNBc3Npc3RhbnRNZXNzYWdlIiwibWVzc2FnZUtleSIsIl9tZXNzYWdlJGlkMiIsIk9iamVjdCIsImFzc2lnbiIsImxhYmVsIiwibGFuZ3VhZ2UiLCJrZXlzIiwidmFsdWVzIiwiZmluZCIsIiRzY3JvbGxPblBhcmVudCIsInJlZiIsIm9uU2Nyb2xsIiwiJGlzTWFya2V0cGxhY2VHbG9iYWwiLCJjb2xvciIsIkNoYXRBSU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSU1lc3NhZ2VzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVuc3RhYmxlLW5lc3RlZC1jb21wb25lbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IFJlYWN0LCB7IEZDLCBGcmFnbWVudCwgbWVtbywgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFN0cmVhbWRvd24gfSBmcm9tICdzdHJlYW1kb3duJ1xuaW1wb3J0IHsgY3JlYXRlQ29kZVBsdWdpbiB9IGZyb20gJ0BzdHJlYW1kb3duL2NvZGUnXG5pbXBvcnQgeyBBcnJvd1NtYWxsRG93biB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Fycm93U21hbGxEb3duJ1xuXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkJ1xuaW1wb3J0IHsgQXBwcm92YWxCb3ggfSBmcm9tICcuLi8uLi9hdG9tcy9BcHByb3ZhbEJveC9BcHByb3ZhbEJveCdcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3TW9kYWwgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50UHJldmlld01vZGFsJ1xuaW1wb3J0IHsgQXR0YWNobWVudENhcmRBdWRpbyB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkQXVkaW8nXG5pbXBvcnQgeyBNQUlBTWVzc2FnZVByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQU1lc3NhZ2UvTUFJQU1lc3NhZ2UuaW50ZXJmYWNlcydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0SGlzdG9yeVJvbGUsIFRhc2tJbmZvIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVRhc2tQYW5lbCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVRhc2tQYW5lbCdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5cbmltcG9ydCB7IE1lc3NhZ2VGcm9tVXNlciwgTWVzc2FnZUZyb21PdGhlciwgTWVzc2FnZUNvbnRlbnRGcm9tVXNlciwgTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIgfSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7XG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNjcm9sbFRvQm90dG9tQnV0dG9uLFxuICBTQ01lc3NhZ2VzT3V0ZXIsXG4gIFNDTWVzc2FnZXNTY3JvbGwsXG4gIFNDTWVzc2FnZXNJbm5lcixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDT3B0aW9uc0xpc3QsXG4gIFNDT3B0aW9uSXRlbSxcbiAgU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyLFxuICBTQ0Fzc2lzdGFudE5hbWUsXG4gIFNDQXNzaXN0YW50QXZhdGFyLFxuICBTQ1Rhc2tMaW5rLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbn0gZnJvbSAnLi9uZXdTdHlsZXMnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IE1BSUFJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgQ2hhdEFJU3VnZ2VzdGlvbnMgfSBmcm9tICcuL0NoYXRBSVN1Z2dlc3Rpb25zJ1xuaW1wb3J0IHsgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBDaGF0RGF5U2VwYXJhdG9yLCBmb3JtYXRDaGF0RGF5U2VwYXJhdG9yTGFiZWwsIGdldExvY2FsRGF5S2V5IH0gZnJvbSAnLi9DaGF0RGF5U2VwYXJhdG9yJ1xuaW1wb3J0IHsgaXNSZW5kZXJhYmxlQ2hhdE1lc3NhZ2UgfSBmcm9tICcuL2NoYXRNZXNzYWdlVXRpbHMnXG5pbXBvcnQgeyBkb3dubG9hZEZpbGVGcm9tVXJsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsZURvd25sb2FkSGVscGVyJ1xuXG4vKiogQ29udGV4dG8gY29uIGVsIHRleHRvIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZy4gU29sbyBlbCBjb21wb25lbnRlIHF1ZSBsbyBjb25zdW1lIHJlLXJlbmRlcml6YSBjdWFuZG8gY2FtYmlhLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PHN0cmluZz4oJycpXG5cbmNvbnN0IGNvZGUgPSBjcmVhdGVDb2RlUGx1Z2luKHsgdGhlbWVzOiBbJ2dpdGh1Yi1saWdodCcsICdnaXRodWItbGlnaHQnXSB9KVxuXG5jb25zdCBBc3Npc3RhbnRBdmF0YXJJbm5lcjogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICByZXR1cm4gKFxuICAgIDxTQ0Fzc2lzdGFudEF2YXRhcj5cbiAgICAgIHthZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/IDxNQUlBSWNvbiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+IDogYWdlbnQ/LmVtb2ppfVxuICAgIDwvU0NBc3Npc3RhbnRBdmF0YXI+XG4gIClcbn1cblxuY29uc3QgQXNzaXN0YW50QXZhdGFyID0gbWVtbyhBc3Npc3RhbnRBdmF0YXJJbm5lcilcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sIGZhcUlkPzogc3RyaW5nLCBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZykgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VJdGVtUHJvcHMgPSBDaGF0TWVzc2FnZSAmIHtcbiAgYXV0aFVzZXI6IENPUlVzZXJcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPzogYm9vbGVhblxuICBoYW5kbGVGZWVkYmFjazogKGZlZWRiYWNrOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGhhbmRsZUFwcHJvdmFsRGVjaXNpb246ICh0aHJlYWRJZHM6IHN0cmluZ1tdLCBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcpID0+IHZvaWRcbiAgZGlzYWJsZUZlZWRiYWNrPzogRmVlZGJhY2sgfCBudWxsXG4gIHNvdXJjZXM/OiBhbnlcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICBleHBhbmRlZD86IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIE1lc3NhZ2VXcmFwcGVyUHJvcHMge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgJ2RhdGEtbWVzc2FnZS1pZCc/OiBzdHJpbmdcbiAgaGFzRmVlZGJhY2s/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHMgPSBNQUlBTWVzc2FnZVByb3BzICYge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGlzQ2hhbmdlUHJvamVjdD86IGJvb2xlYW5cbn1cblxuY29uc3QgTWVzc2FnZVdyYXBwZXI6IEZDPE1lc3NhZ2VXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlRnJvbVVzZXIgOiBNZXNzYWdlRnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbXBvbmVudCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L01lc3NhZ2VDb21wb25lbnQ+XG59XG5cbmNvbnN0IE1lc3NhZ2VDb250ZW50V3JhcHBlcjogRkM8TWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29udGVudENvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlQ29udGVudEZyb21Vc2VyIDogTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29udGVudENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIE1lc3NhZ2VPcHRpb25zKHtcbiAgb3B0aW9ucyxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uLFxufToge1xuICBvcHRpb25zOiBQcm9qZWN0W10gfCBudWxsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxufSkge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGVkT3B0aW9uXSA9IHVzZVN0YXRlPFByb2plY3QgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHJldHVyblxuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbilcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NPcHRpb25zTGlzdD5cbiAgICAgIHsob3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgIDxTQ09wdGlvbkl0ZW1cbiAgICAgICAgICAkaGFzU2VsZWN0aW9uPXshIXNlbGVjdGVkT3B0aW9ufVxuICAgICAgICAgICRkaW1tZWQ9eyEhc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAga2V5PXtvcHRpb24uaWR9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgIDwvU0NPcHRpb25JdGVtPlxuICAgICAgKSl9XG4gICAgPC9TQ09wdGlvbnNMaXN0PlxuICApXG59XG5cbmNvbnN0IEFzc2lzdGFudE1lc3NhZ2VIZWFkZXIgPSAoKSA9PiB7XG4gIGNvbnN0IFtsb2NhbEFnZW50LCBzZXRMb2NhbEFnZW50XSA9IHVzZVN0YXRlPEFnZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRMb2NhbEFnZW50KGFnZW50KVxuICB9LCBbYWdlbnRdKVxuXG4gIHJldHVybiAoXG4gICAgPFNDQXNzaXN0YW50TWVzc2FnZUhlYWRlcj5cbiAgICAgIDxBc3Npc3RhbnRBdmF0YXIgLz5cbiAgICAgIHtsb2NhbEFnZW50Py5uYW1lICYmIChcbiAgICAgICAgPFNDQXNzaXN0YW50TmFtZT57bG9jYWxBZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/ICdNQUlBJyA6IGxvY2FsQWdlbnQ/Lm5hbWV9PC9TQ0Fzc2lzdGFudE5hbWU+XG4gICAgICApfVxuICAgIDwvU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyPlxuICApXG59XG5cbi8vIEV4dHJhZSBlbCBzZWdtZW50byBkZSB0YWIgKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpIGRlbCBocmVmIHBhcmEgYWJyaXIgZWwgbW9kYWwgY29uIGVsIHRhYiBjb3JyZWN0b1xuY29uc3QgZ2V0VGFiU2VnbWVudEZyb21IcmVmID0gKGhyZWY6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG1hdGNoID0gaHJlZi5tYXRjaCgvXFwvdGFza3NcXC9cXGQrXFwvKFteLz9dKykvKVxuICByZXR1cm4gbWF0Y2ggJiYgL14oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykkLy50ZXN0KG1hdGNoWzFdKSA/IG1hdGNoWzFdIDogJ2RldGFpbCdcbn1cblxuLyoqIEV4dHJhZSBsYXMgdGFyZWFzIGVubGF6YWRhcyBlbiBlbCB0ZXh0byAoVVJMcyBxdWUgY29pbmNpZGVuIGNvbiBUQVNLX1VSTF9SRUdFWF9QQVRURVJOKS4gKi9cbmNvbnN0IGV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlID0gKG1lc3NhZ2U6IHN0cmluZyk6IFRhc2tJbmZvW10gPT4ge1xuICBpZiAoIW1lc3NhZ2UpIHJldHVybiBbXVxuICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgY29uc3QgdGFza3M6IFRhc2tJbmZvW10gPSBbXVxuICBjb25zdCBzZWVuSWRzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gbnVsbFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgd2hpbGUgKChtYXRjaCA9IHRhc2tVcmxSZWdleC5leGVjKG1lc3NhZ2UpKSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRhc2tJZCA9IG1hdGNoWzFdXG4gICAgY29uc3QgdXJsID0gbWF0Y2hbMF1cbiAgICBpZiAoIXNlZW5JZHMuaGFzKHRhc2tJZCkpIHtcbiAgICAgIHNlZW5JZHMuYWRkKHRhc2tJZClcbiAgICAgIGNvbnN0IGVzY2FwZWRVcmwgPSB1cmwucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxuICAgICAgY29uc3QgbWFya2Rvd25MaW5rUmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcWyhbXlxcXFxdXSspXFxcXF1cXFxcKCR7ZXNjYXBlZFVybH1cXFxcKWApXG4gICAgICBjb25zdCBsaW5rTWF0Y2ggPSBtZXNzYWdlLm1hdGNoKG1hcmtkb3duTGlua1JlZ2V4KVxuICAgICAgY29uc3QgdGl0bGUgPSBsaW5rTWF0Y2ggPyBsaW5rTWF0Y2hbMV0gOiBgVGFyZWEgIyR7dGFza0lkfWBcbiAgICAgIHRhc2tzLnB1c2goeyBpZDogdGFza0lkLCB0aXRsZSwgdXJsIH0pXG4gICAgfVxuICB9XG4gIHJldHVybiB0YXNrc1xufVxuXG5jb25zdCBoYXNUYXNrTGlua3MgPSAodGV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiBleHRyYWN0VGFza3NGcm9tTWVzc2FnZSh0ZXh0KS5sZW5ndGggPiAwXG5cbi8vIENvbXBvbmVudCBmb3IgdGFzayBsaW5rcyB0aGF0IHVzZXMgdGhlIHVzZVRhc2tQYW5lbCBob29rXG5jb25zdCBUYXNrTGluazogRkM8eyBocmVmOiBzdHJpbmc7IHRhc2tJZDogc3RyaW5nOyBjaGlsZHJlbjogUmVhY3ROb2RlIH0+ID0gKHsgaHJlZiwgdGFza0lkLCBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IHRhYlNlZ21lbnQgPSBnZXRUYWJTZWdtZW50RnJvbUhyZWYoaHJlZilcbiAgY29uc3QgeyBidWlsZE9wZW5UYXNrIH0gPSB1c2VUYXNrUGFuZWwodGFza0lkLCB0YWJTZWdtZW50KVxuICBjb25zdCBvcGVuVGFzayA9IGJ1aWxkT3BlblRhc2soKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQ+KSA9PiB7XG4gICAgLy8gU2kgZXMgQ21kL0N0cmwgKyBjbGljaywgZGVqYXIgcXVlIHNlIGFicmEgZW4gbnVldmEgcGVzdGHDsWEgKGNvbXBvcnRhbWllbnRvIHBvciBkZWZlY3RvKVxuICAgIGlmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBvcGVuVGFzaygpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ1Rhc2tMaW5rIGhyZWY9e2hyZWZ9IG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NDVGFza0xpbms+XG4gIClcbn1cblxuLy8gQ3VzdG9tIGxpbmsgY29tcG9uZW50IGZvciBTdHJlYW1kb3duOiB0YXNrIFVSTHMgb3BlbiB0aGUgdGFzayBwYW5lbCwgb3RoZXIgbGlua3MgcmVuZGVyIG5vcm1hbGx5XG50eXBlIEN1c3RvbUxpbmtQcm9wcyA9IFJlYWN0LkFuY2hvckhUTUxBdHRyaWJ1dGVzPEhUTUxBbmNob3JFbGVtZW50PiAmIHsgbm9kZT86IHVua25vd24gfVxuY29uc3QgQ3VzdG9tTGluazogRkM8Q3VzdG9tTGlua1Byb3BzPiA9ICh7IGhyZWYsIGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgaWYgKCFocmVmIHx8IHR5cGVvZiBocmVmICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8YSBocmVmPXtocmVmfSB7Li4ucmVzdH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYT5cbiAgICApXG4gIH1cbiAgY29uc3QgdGFza01hdGNoID0gaHJlZi5tYXRjaChuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4pKVxuICBpZiAodGFza01hdGNoKSB7XG4gICAgY29uc3QgdGFza0lkID0gdGFza01hdGNoWzFdXG4gICAgcmV0dXJuIChcbiAgICAgIDxUYXNrTGluayBocmVmPXtocmVmfSB0YXNrSWQ9e3Rhc2tJZH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvVGFza0xpbms+XG4gICAgKVxuICB9XG4gIHJldHVybiAoXG4gICAgPGEgaHJlZj17aHJlZn0gey4uLnJlc3R9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYT5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgICBoYW5kbGVGZWVkYmFja0NsaWNrOiAoZjogRmVlZGJhY2spID0+IHZvaWRcbiAgICBkaXNhYmxlRmVlZGJhY2s6IEZlZWRiYWNrIHwgbnVsbFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIGNvbnN0IGZyb21Db250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTdHJlYW1pbmdNZXNzYWdlQ29udGV4dClcbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHByb3BzLmlzU3RyZWFtaW5nID8gZnJvbUNvbnRleHQgOiBwcm9wcy5tZXNzYWdlXG4gICAgY29uc3QgY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCA9IHByb3BzLmNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWRcbiAgICBpZiAoIWRpc3BsYXlUZXh0ICYmICFwcm9wcy5pc1N0cmVhbWluZykgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFNDQ0FJTWVzc2FnZVdyYXBwZXJcbiAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5pc0Fzc2lzdGFudCAmJiBoYXNUYXNrTGlua3MoZGlzcGxheVRleHQpID8gJ2hhcy10YXNrLWxpbmtzJyA6ICcnfVxuICAgICAgICA+XG4gICAgICAgICAgPFN0cmVhbWRvd25cbiAgICAgICAgICAgIHBsdWdpbnM9e3sgY29kZSB9fVxuICAgICAgICAgICAgY29tcG9uZW50cz17eyBhOiBDdXN0b21MaW5rIH0gYXMgUGFyYW1ldGVyczx0eXBlb2YgU3RyZWFtZG93bj5bMF1bJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgIGxpbmtTYWZldHk9e3sgZW5hYmxlZDogZmFsc2UgfX1cbiAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgc2hpa2lUaGVtZT17WydnaXRodWItbGlnaHQnLCAnZ2l0aHViLWxpZ2h0J119XG4gICAgICAgICAgICBjb250cm9scz17eyB0YWJsZTogZmFsc2UsIGNvZGU6IGZhbHNlIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Rpc3BsYXlUZXh0fVxuICAgICAgICAgIDwvU3RyZWFtZG93bj5cbiAgICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiYgIXByb3BzLmlzRXJyb3IgJiYgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIXByb3BzLmFwcHJvdmFsICYmICFwcm9wcy5pc1N0cmVhbWluZyAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2VGZWVkYmFja1xuICAgICAgICAgICAgY29udGVudD17ZGlzcGxheVRleHR9XG4gICAgICAgICAgICBzb3VyY2VzPXtwcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e3Byb3BzLmhhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e3Byb3BzLmRpc2FibGVGZWVkYmFja31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiYgIXByb3BzLmlzRXJyb3IgJiYgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIXByb3BzLmFwcHJvdmFsICYmIChcbiAgICAgICAgICA8Q2hhdEFJU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtwcm9wcy5zdWdnZXN0aW9ucyB8fCBbXX1cbiAgICAgICAgICAgIG9uU2VsZWN0U3VnZ2VzdGlvbj17c3VnZ2VzdGlvbiA9PiBwcm9wcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2socHJvcHMubWVzc2FnZUlkLCBzdWdnZXN0aW9uKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNFcnJvciAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgISFjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNcbiAgICAgICAgICAgICAgYWdlbnRJZD17Y3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cbilcblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzU3RyZWFtaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljayxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24sXG4gICAgaXNMYXN0TWVzc2FnZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICBjb25zdCBtZXNzYWdlQXR0YWNobWVudHMgPVxuICAgIGF0dGFjaG1lbnRzICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcbiAgICAgID8gYXR0YWNobWVudHNcbiAgICAgIDogIWlzQXNzaXN0YW50ICYmIEFycmF5LmlzQXJyYXkoc291cmNlcylcbiAgICAgICAgPyAoc291cmNlcyBhcyBBdHRhY2htZW50RmlsZVtdKVxuICAgICAgICA6IFtdXG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudENsaWNrID0gKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgLy8gUGVybWl0aXIgcHJldmlzdWFsaXphY2nDs24gc2kgdGllbmUgYXJjaGl2byBsb2NhbCBvIFVSTHMgZGVsIGJhY2tlbmRcbiAgICBpZiAoXG4gICAgICBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX2ZpbGVcbiAgICApIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQgPSBhc3luYyAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBhdHRhY2htZW50Lm5hbWUuaW5jbHVkZXMoJy4nKSA/ICcnIDogYC4ke2F0dGFjaG1lbnQudHlwZX1gXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHthdHRhY2htZW50Lm5hbWV9JHtleHRlbnNpb259YFxuICAgIGNvbnN0IGZpbGVVcmwgPSBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fCBhdHRhY2htZW50LnVybF9maWxlIHx8IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbFxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBibG9iVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuXG4gICAgICBpZiAoZmlsZVVybCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoZmlsZVVybCwgZmlsZU5hbWUsIGF0dGFjaG1lbnQudHlwZSlcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZG93bmxvYWRlZEZpbGUpXG4gICAgICB9IGVsc2UgaWYgKGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYXR0YWNobWVudC5maWxlKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWJsb2JVcmwpIHJldHVyblxuXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBsaW5rLmhyZWYgPSBibG9iVXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWVcbiAgICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKVxuICAgICAgbGluay5jbGljaygpXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspXG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybClcbiAgICAgIH0sIDEwMClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRvd25sb2FkIGF0dGFjaG1lbnQnLCBlcnJvcilcbiAgICB9XG4gIH1cblxuICBpZiAoaXNDaGFuZ2VQcm9qZWN0ICYmIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VXcmFwcGVyIGtleT17aWR9IGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9IGRhdGEtbWVzc2FnZS1pZD17aWR9IGhhc0ZlZWRiYWNrPXtmYWxzZX0+XG4gICAgICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICB7aXNBc3Npc3RhbnQgJiYgPEFzc2lzdGFudE1lc3NhZ2VIZWFkZXIgLz59XG4gICAgICAgICAgPE1lc3NhZ2VDb250ZW50V3JhcHBlclxuICAgICAgICAgICAgaXNDaGFuZ2VQcm9qZWN0PXtpc0NoYW5nZVByb2plY3R9XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBtZXNzYWdlRXh0cmFDb250ZW50PXs8TWVzc2FnZU9wdGlvbnMgb3B0aW9ucz17b3B0aW9ucyBhcyBhbnl9IGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufSAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAge2lzQXNzaXN0YW50ICYmIDxBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIC8+fVxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgeyEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3cgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgICB7bWVzc2FnZUF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGV0ZWN0YXIgc2kgZXMgdW4gYXJjaGl2byBkZSBhdWRpb1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50VHlwZSA9IGF0dGFjaG1lbnQ/LnR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudE5hbWUgPSBhdHRhY2htZW50Py5uYW1lPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGlzQXVkaW9GaWxlID1cbiAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZS5zdGFydHNXaXRoKCdhdWRpby8nKSB8fFxuICAgICAgICAgICAgICAgIFsnZmxhYycsICdtNGEnLCAnbXAzJywgJ21wNCcsICdvZ2EnLCAnb2dnJywgJ3dhdicsICd3ZWJtJ10uaW5jbHVkZXMoYXR0YWNobWVudFR5cGUpIHx8XG4gICAgICAgICAgICAgICAgWycuZmxhYycsICcubTRhJywgJy5tcDMnLCAnLm1wNCcsICcub2dhJywgJy5vZ2cnLCAnLndhdicsICcud2VibSddLnNvbWUoZXh0ID0+XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50TmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGlmIChpc0F1ZGlvRmlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiA8QXR0YWNobWVudENhcmRBdWRpbyBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9IGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9IC8+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxBdHRhY2htZW50Q2FyZFxuICAgICAgICAgICAgICAgICAga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfVxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudD17YXR0YWNobWVudH1cbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgb25Eb3dubG9hZD17KCkgPT4gaGFuZGxlQXR0YWNobWVudERvd25sb2FkKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQXR0YWNobWVudENsaWNrKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvU0NBdHRhY2htZW50c1Jvdz5cbiAgICAgICAgKX1cbiAgICAgICAge2FwcHJvdmFsICYmIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJyl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgICB7KCEhbWVzc2FnZSB8fCBpc1N0cmVhbWluZykgJiYgIWFwcHJvdmFsICYmICEoaXNBc3Npc3RhbnQgJiYgISFtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgPFN0cmVhbWluZ01lc3NhZ2VCb2R5XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlID8/ICcnfVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9eyEhaXNTdHJlYW1pbmd9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fVxuICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgIGFwcHJvdmFsPXthcHByb3ZhbH1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcD17Y3JlYXRlQWdlbnRGb2xsb3dVcH1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFjayA/PyBudWxsfVxuICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICApXG59KVxuXG5jb25zdCBDaGF0QUlNZXNzYWdlc0lubmVyID0gKHtcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBpbml0aWFsQ2hhdElkLFxuICBvbkVycm9yLFxuICBvblNlbmRNZXNzYWdlUmVhZHksXG4gIG9uU2Nyb2xsVG9Cb3R0b20sXG4gIGF0dGFjaG1lbnRzLFxuICBhZ2VudHMsXG4gIGV4cGFuZGVkLFxufTogQ2hhdEFJTWVzc2FnZXNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQsIGkxOG4gfSA9IHVzZVQoKVxuICBjb25zdCB7IGlzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGF0SW5pdGlhbGl6ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGlzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHVzZXJTY3JvbGxpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRocmVzaG9sZFJlZiA9IHVzZVJlZigzOSlcbiAgY29uc3QgbGFzdFNjcm9sbFRvcFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzaG93U2Nyb2xsVG9Cb3R0b21SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzLCBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSlcbiAgY29uc3Qgc3RyZWFtaW5nTWVzc2FnZVByb3BzUmVmID0gdXNlUmVmPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7fSlcbiAgY29uc3Qgc3RyZWFtaW5nTWVzc2FnZUlkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGNoYW5nZVByb2plY3Qob3B0aW9uKVxuICAgIH0sXG4gICAgW2NoYW5nZVByb2plY3RdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uPy50cmltKCkpIHJldHVyblxuICAgICAgaWYgKHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZUlkXSkgcmV0dXJuXG4gICAgICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJyAmJiAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhZ2VudD8ubmFtZSB8fCAnJylcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRTdWdnZXN0ZWRBbnN3ZXIsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID8gJ21hcmtldHBsYWNlJyA6IGFnZW50Py50eXBlLFxuICAgICAgfSlcbiAgICAgIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMocHJldiA9PiAoeyAuLi5wcmV2LCBbbWVzc2FnZUlkXTogdHJ1ZSB9KSlcbiAgICAgIHNlbmRNZXNzYWdlKHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbc2VuZE1lc3NhZ2UsIHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIGV2ZW50LCBhZ2VudD8uZW50aXR5LCBhZ2VudD8ubmFtZSwgYWdlbnQ/LnR5cGVdXG4gIClcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvKHtcbiAgICAgICAgdG9wOiBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodCxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgfSlcbiAgICAgIC8vIEFjdHVhbGl6YXIgZXN0YWRvIGRlc3B1w6lzIGRlIHVuIGJyZXZlIGRlbGF5IHBhcmEgcGVybWl0aXIgcXVlIGVsIHNjcm9sbCBzZSBjb21wbGV0ZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cbiAgICAgIH0sIDUwMClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNTY3JvbGxpbmdVcCkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMTVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgICAgfVxuXG4gICAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9ICFpc05lYXJCb3R0b21cbiAgICAgICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gc2Nyb2xsVG9wXG5cbiAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgICAgICBjb25zdCBkaWRTZXRTdGF0ZSA9IHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ICE9PSBzaG91bGRTaG93XG4gICAgICAgIGlmIChkaWRTZXRTdGF0ZSkge1xuICAgICAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvblNjcm9sbFRvQm90dG9tLCBoYW5kbGVTY3JvbGxdXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQsIHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQsIHdhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICAvLyBDdWFuZG8gZWwgYWdlbnRlIGVtcGllemEgYSByZXNwb25kZXIsIHJlc2V0ZWFyIGVsIGZsYWcgeSBlbCB1bWJyYWwgcGFyYSBhY3RpdmFyIGVsIGF1dG8tc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBTY3JvbGwgY3VhbmRvIGxsZWdhIHVuIG1lbnNhamUgZGUgYXByb2JhY2nDs24gKEFwcHJvdmFsQm94KS4gU2luIFJlc2l6ZU9ic2VydmVyIGVuIGVsXG4gIC8vIGNvbnRlbmVkb3I6IG9ic2VydmFybG8gZGlzcGFyYWJhIGNhbGxiYWNrcyBhbCBjYW1iaWFyIGVsIGxheW91dC9zY3JvbGxiYXIgeSBjYWRhIHVub1xuICAvLyBsbGFtYWJhIHNjcm9sbFRvQm90dG9tKCksIHByb3ZvY2FuZG8gdGlyb25lcyBhbCBzY3JvbGxlYXIuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50IHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gICAgY29uc3QgaGFzQXBwcm92YWwgPSBsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcblxuICAgIGlmICghaGFzQXBwcm92YWwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcblxuICAgIGlmICghKGlzQXRCb3R0b20gfHwgIXVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxUb0JvdHRvbSA9ICgpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZWN1ZW5jaWEgaW5pY2lhbCBkZSBzY3JvbGwgcGFyYSBjdWFuZG8gZWwgQXBwcm92YWxCb3ggYWNhYmEgZGUgcmVuZGVyaXphcnNlXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHNjcm9sbFRvQm90dG9tKClcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgc2V0VGltZW91dChzY3JvbGxUb0JvdHRvbSwgMTAwKVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFNpIGVsIHVzdWFyaW8gZXN0w6Egc2Nyb2xsZWFuZG8gbWFudWFsbWVudGUsIG5vIGhhY2VyIGF1dG8gc2Nyb2xsXG4gICAgaWYgKHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCAmJiB3YWl0aW5nUmVzcG9uc2UpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UgJiYgbWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHJldHVyblxuXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cblxuICAgIGNvbnN0IGlzTmV3QW5zd2VyTWVzc2FnZSA9IGxhc3RNZXNzYWdlICYmIGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKVxuICAgIGNvbnN0IGlzTmV3VXNlck1lc3NhZ2UgPSBsYXN0TWVzc2FnZSAmJiBsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKVxuICAgIGNvbnN0IGlzTmV3QXBwcm92YWxNZXNzYWdlID0gbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8ICEhbGFzdE1lc3NhZ2UuYXBwcm92YWwpXG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcbiAgICBjb25zdCBoYXNNZXNzYWdlcyA9ICEhbWVzc2FnZXMubGVuZ3RoXG4gICAgY29uc3QgaXNOb3RJbml0aWFsTWVzc2FnZSA9ICFtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG5cbiAgICBpZiAoKGlzTmV3QW5zd2VyTWVzc2FnZSB8fCBpc05ld1VzZXJNZXNzYWdlIHx8IGlzTmV3QXBwcm92YWxNZXNzYWdlKSAmJiBpc0F0Qm90dG9tKSB7XG4gICAgICAvLyBQYXJhIG1lbnNhamVzIGRlIGFwcm9iYWNpw7NuLCB1c2FyIHVuIHBlcXVlw7FvIGRlbGF5IHBhcmEgYXNlZ3VyYXIgcXVlIGVsIEFwcHJvdmFsQm94IHNlIGhheWEgcmVuZGVyaXphZG9cbiAgICAgIGNvbnN0IHNjcm9sbERlbGF5ID0gaXNOZXdBcHByb3ZhbE1lc3NhZ2UgPyAxMDAgOiAwXG4gICAgICBjb25zdCBkb1Njcm9sbCA9ICgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuICAgICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc2Nyb2xsRGVsYXkgPiAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZG9TY3JvbGwsIHNjcm9sbERlbGF5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9TY3JvbGwoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBoYXNNZXNzYWdlcyAmJlxuICAgICAgaXNOb3RJbml0aWFsTWVzc2FnZSAmJlxuICAgICAgIWlzTmV3QW5zd2VyTWVzc2FnZSAmJlxuICAgICAgIWlzTmV3VXNlck1lc3NhZ2UgJiZcbiAgICAgICFpc05ld0FwcHJvdmFsTWVzc2FnZVxuICAgICkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCB3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIC8vIFZlcmlmaWNhciBlbCBlc3RhZG8gaW5pY2lhbCBkZWwgc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjb250YWluZXJcbiAgICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgIH1cbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoXSlcblxuICAvLyBPYnRlbmVyIGVsIMO6bHRpbW8gbWVuc2FqZSBkZWwgdXN1YXJpbyBwYXJhIHZlcmlmaWNhciBzaSB0aWVuZSBhdHRhY2htZW50c1xuICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAuYXQoLTEpXG5cbiAgY29uc3QgaGFzQXR0YWNobWVudHMgPVxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uYXR0YWNobWVudHMpICYmIGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGgpIHx8XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5zb3VyY2VzKSAmJiBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGgpXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcbiAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYWdlbnQ/Lm5hbWUgfHwgJycpXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBjb25zdCBsYXN0TXNnID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgY29uc3QgaXNTdHJlYW1pbmdBY3RpdmUgPVxuICAgICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKSAmJlxuICAgIGxhc3RNc2cgJiZcbiAgICAobGFzdE1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IGxhc3RNc2cudXNlcj8uaWQgPT09ICdhc3Npc3RhbnQnKVxuICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gaXNTdHJlYW1pbmdBY3RpdmUgPyAobGFzdE1zZy5tZXNzYWdlID8/ICcnKSA6ICcnXG5cbiAgaWYgKGxvYWRpbmdNZXNzYWdlcykge1xuICAgIHJldHVybiA8TG9hZGVyIC8+XG4gIH1cblxuICBjb25zdCBtZXNzYWdlc0NvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmdNb3JlTWVzc2FnZXMgJiYgPExvYWRpbmdUZXh0IHRleHQ9e3QoJ2NoYXQubG9hZGluZ01vcmUnKX0gLz59XG4gICAgICA8U3RyZWFtaW5nTWVzc2FnZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N0cmVhbWluZ1RleHR9PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBsZXQgbGFzdFJlbmRlcmVkRGF5S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICAgICAgICAgIHJldHVybiBtZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzUmVuZGVyYWJsZUNoYXRNZXNzYWdlKG1lc3NhZ2UpKSByZXR1cm4gbnVsbFxuXG4gICAgICAgICAgICBjb25zdCBkYXlLZXkgPSBnZXRMb2NhbERheUtleShtZXNzYWdlLmRhdGUpXG4gICAgICAgICAgICBjb25zdCBzaG93RGF5U2VwYXJhdG9yID0gZGF5S2V5ICE9PSBudWxsICYmIChsYXN0UmVuZGVyZWREYXlLZXkgPT09IG51bGwgfHwgZGF5S2V5ICE9PSBsYXN0UmVuZGVyZWREYXlLZXkpXG4gICAgICAgICAgICBpZiAoZGF5S2V5ICE9PSBudWxsKSBsYXN0UmVuZGVyZWREYXlLZXkgPSBkYXlLZXlcblxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZUZlZWRiYWNrID1cbiAgICAgICAgICAgICAgbWVzc2FnZT8ud2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2Uud2FzSGVscGZ1bCA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgIDogbWVzc2FnZS53YXNIZWxwZnVsXG4gICAgICAgICAgICAgICAgICA/IEZlZWRiYWNrLlRIVU1CU19VUFxuICAgICAgICAgICAgICAgICAgOiBGZWVkYmFjay5USFVNQlNfRE9XTlxuXG4gICAgICAgICAgICBjb25zdCBpc0Fzc2lzdGFudE1lc3NhZ2UgPSBtZXNzYWdlLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgbWVzc2FnZS51c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICAgICAgICAgICAgY29uc3QgaXNMYXN0TWVzc2FnZSA9IGluZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gICAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IGlzQXNzaXN0YW50TWVzc2FnZSAmJiBpc0xhc3RNZXNzYWdlICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgICAvLyBLZXkgZXN0YWJsZTogc29sbyBtZXNzYWdlLmlkIHBhcmEgZXZpdGFyIHJlbW91bnQgZHVyYW50ZSBzdHJlYW1pbmcgKG1lc3NhZ2UuZGF0ZSBwdWVkZSBjYW1iaWFyKVxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZUtleSA9IG1lc3NhZ2UuaWQgPz8gYG1zZy0ke2luZGV4fWBcblxuICAgICAgICAgICAgaWYgKGlzU3RyZWFtaW5nKSB7XG4gICAgICAgICAgICAgIGlmIChzdHJlYW1pbmdNZXNzYWdlSWRSZWYuY3VycmVudCAhPT0gbWVzc2FnZS5pZCkge1xuICAgICAgICAgICAgICAgIHN0cmVhbWluZ01lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZS5pZCA/PyBudWxsXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICAgIHN0cmVhbWluZ01lc3NhZ2VQcm9wc1JlZi5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgIHsgbWVzc2FnZTogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGF1dGhVc2VyLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgICAgICAgICAgICAgICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbjogISFzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2UuaWRdLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s6IG1lc3NhZ2VGZWVkYmFjayxcbiAgICAgICAgICAgICAgICAgICAgaXNTdHJlYW1pbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxGcmFnbWVudCBrZXk9e21lc3NhZ2VLZXl9PlxuICAgICAgICAgICAgICAgICAge3Nob3dEYXlTZXBhcmF0b3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8Q2hhdERheVNlcGFyYXRvciBsYWJlbD17Zm9ybWF0Q2hhdERheVNlcGFyYXRvckxhYmVsKG1lc3NhZ2UuZGF0ZSwgdCwgaTE4bi5sYW5ndWFnZSl9IC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPE1lc3NhZ2VJdGVtIHsuLi4oc3RyZWFtaW5nTWVzc2FnZVByb3BzUmVmLmN1cnJlbnQgYXMgTWVzc2FnZUl0ZW1Qcm9wcyl9IC8+XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyZWFtaW5nTWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXttZXNzYWdlS2V5fT5cbiAgICAgICAgICAgICAgICB7c2hvd0RheVNlcGFyYXRvciAmJiAoXG4gICAgICAgICAgICAgICAgICA8Q2hhdERheVNlcGFyYXRvciBsYWJlbD17Zm9ybWF0Q2hhdERheVNlcGFyYXRvckxhYmVsKG1lc3NhZ2UuZGF0ZSwgdCwgaTE4bi5sYW5ndWFnZSl9IC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgICAgICAgIHsuLi5tZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259XG4gICAgICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17aGFuZGxlRmVlZGJhY2t9XG4gICAgICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9ufVxuICAgICAgICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb249eyEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17bWVzc2FnZUZlZWRiYWNrfVxuICAgICAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pKCl9XG4gICAgICA8L1N0cmVhbWluZ01lc3NhZ2VDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgeyh3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2UgfHwgT2JqZWN0LmtleXMoYWN0aXZlTG9hZGluZ3MgfHwge30pLmxlbmd0aCA+IDApICYmIChcbiAgICAgICAgPFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgICAgIHtPYmplY3Qua2V5cyhhY3RpdmVMb2FkaW5ncyB8fCB7fSkubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgIDxMb2FkaW5nVGV4dFxuICAgICAgICAgICAgICBrZXk9XCJsb2FkaW5nLWFjdGl2ZVwiXG4gICAgICAgICAgICAgIHRleHQ9e1xuICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoYWN0aXZlTG9hZGluZ3MgfHwge30pLmZpbmQobXNnID0+IG1zZyAhPT0gdCgnY2hhdC5wcm9jZXNzaW5nJykpIHx8IHQoJ2NoYXQucHJvY2Vzc2luZycpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICh3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2UpICYmIChcbiAgICAgICAgICAgICAgPExvYWRpbmdUZXh0XG4gICAgICAgICAgICAgICAgdGV4dD17XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nTWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgKGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgID8gJ0J1c2NhbmRvIGVuIGxhIHdlYidcbiAgICAgICAgICAgICAgICAgICAgOiBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICA/IHQoJ2NoYXQuZ2VuZXJhdGluZ0RlZXBTZWFyY2gnKVxuICAgICAgICAgICAgICAgICAgICAgIDogaGFzQXR0YWNobWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdCgnY2hhdC5nZW5lcmF0aW5nQXR0YWNobWVudCcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHQoJ2NoYXQuZ2VuZXJhdGluZycpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApfVxuICAgICAgICA8L1NDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZXNPdXRlciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9PlxuICAgICAge2lzU2Nyb2xsT25QYXJlbnQgPyAoXG4gICAgICAgIDxTQ01lc3NhZ2VzU2Nyb2xsIHJlZj17bWVzc2FnZXNSZWZ9IG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDTWVzc2FnZXNJbm5lciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9ICRpc01hcmtldHBsYWNlR2xvYmFsPXtpc01hcmtldHBsYWNlR2xvYmFsQWdlbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VzQ29udGVudH1cbiAgICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICAgPC9TQ01lc3NhZ2VzU2Nyb2xsPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNDTWVzc2FnZXNJbm5lclxuICAgICAgICAgIHJlZj17bWVzc2FnZXNSZWZ9XG4gICAgICAgICAgb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfVxuICAgICAgICAgICRzY3JvbGxPblBhcmVudD17ZmFsc2V9XG4gICAgICAgICAgJGlzTWFya2V0cGxhY2VHbG9iYWw9e2lzTWFya2V0cGxhY2VHbG9iYWxBZ2VudH1cbiAgICAgICAgPlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAge3Nob3dTY3JvbGxUb0JvdHRvbSAmJiAoXG4gICAgICAgIDxTY3JvbGxUb0JvdHRvbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPEFycm93U21hbGxEb3duIGNvbG9yPVwiIzY2NlwiIHdpZHRoPVwiMjBweFwiIGhlaWdodD1cIjIwcHhcIiAvPlxuICAgICAgICA8L1Njcm9sbFRvQm90dG9tQnV0dG9uPlxuICAgICAgKX1cbiAgICA8L1NDTWVzc2FnZXNPdXRlcj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTWVzc2FnZXMgPSBSZWFjdC5tZW1vKENoYXRBSU1lc3NhZ2VzSW5uZXIpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsS0FBSyxJQUFRQyxRQUFRLEVBQUVDLElBQUksRUFBYUMsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUN2SCxTQUFTQyxVQUFVLFFBQVEsWUFBWTtBQUN2QyxTQUFTQyxnQkFBZ0IsUUFBUSxrQkFBa0I7QUFDbkQsU0FBU0MsY0FBYyxRQUFRLGlEQUFpRDtBQUVoRixTQUFTQyxjQUFjLFFBQVEsMkNBQTJDO0FBQzFFLFNBQVNDLFdBQVcsUUFBUSxxQ0FBcUM7QUFDakUsU0FBU0Msc0JBQXNCLFFBQVEsb0NBQW9DO0FBQzNFLFNBQVNDLG1CQUFtQixRQUFRLGdEQUFnRDtBQUVwRixTQUFzQkMsZUFBZSxRQUFrQixxQkFBcUI7QUFFNUUsU0FBa0JDLE9BQU8sUUFBUSwyQkFBMkI7QUFFNUQsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUMxQyxTQUFTQyxjQUFjLFFBQVEsOENBQThDO0FBQzdFLFNBQVNDLFlBQVksUUFBUSw2QkFBNkI7QUFFMUQsU0FBU0MsV0FBVyxRQUFRLHlCQUF5QjtBQUNyRCxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBSTNDLFNBQVNDLGVBQWUsRUFBRUMsZ0JBQWdCLEVBQUVDLHNCQUFzQixFQUFFQyx1QkFBdUIsUUFBUSxVQUFV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
|