@projectcor/maia-components 2.11.100 → 2.11.101-0
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/CHANGELOG.md +11 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +3 -1
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.js +20 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.styles.js +13 -0
- package/lib/components/atoms/SessionGeneratingDot/index.js +2 -0
- package/lib/components/atoms/icons/MaiaSparkleIcon.js +75 -0
- package/lib/components/atoms/icons/index.js +2 -1
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +46 -7
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +195 -62
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +28 -18
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +9 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +15 -3
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +5 -1
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.js +63 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.styles.js +51 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/index.js +2 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -2
- package/lib/components/molecules/Sidebar/Sidebar.js +104 -61
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +16 -1
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +30 -29
- package/lib/components/organisms/ChatAI/ChatAI.js +6 -2
- package/lib/hooks/useChatManager/useChatManager.js +530 -438
- package/lib/hooks/useChatMessages/useChatMessages.js +414 -236
- package/lib/hooks/useChats/useChats.js +21 -4
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +139 -521
- package/lib/hooks/useStreamingMessage/index.js +2 -3
- package/lib/hooks/useStreamingMessage/useStreamingMessage.js +13 -17
- package/lib/lang/br/index.js +11 -1
- package/lib/lang/en/index.js +11 -1
- package/lib/lang/es/index.js +11 -1
- package/lib/lang/fr/index.js +13 -2
- package/lib/services/maia/Chats/getChatsByUserId.js +6 -4
- package/lib/services/maia/Chats/index.js +3 -1
- package/lib/services/maia/Chats/markSessionAsRead.js +32 -0
- package/lib/store/chatsSidebarOptimistic.js +92 -0
- package/lib/store/chatsStore.types.js +1 -1
- package/lib/store/maiaMinimizedPersistence.js +49 -0
- package/lib/store/sessions/activeView.js +22 -0
- package/lib/store/sessions/index.js +9 -0
- package/lib/store/sessions/sessionHitlContext.js +15 -0
- package/lib/store/sessions/sessionNotificationSound.js +57 -0
- package/lib/store/sessions/sessionNotifications.js +110 -0
- package/lib/store/sessions/sessionNotifications.types.js +2 -0
- package/lib/store/sessions/sessionStreamManager.js +576 -0
- package/lib/store/sessions/sessionStreamingText.js +80 -0
- package/lib/store/sessions/sessions.types.js +35 -0
- package/lib/store/sessions/useSessionMeta.js +39 -0
- package/lib/store/sessions/useSessionStreamingText.js +18 -0
- package/lib/store/sessions/useSessionsStore.js +197 -0
- package/lib/store/useChatsStore.js +149 -12
- package/lib/types/Chat.js +1 -1
- package/lib/utils/formatUnreadCount.js +6 -0
- package/package.json +1 -1
- package/lib/hooks/useStreamingMessage/streamingStore.js +0 -69
|
@@ -36,13 +36,19 @@ import { AbmSkillModal } from '../../organisms/AbmSkillModal/AbmSkillModal';
|
|
|
36
36
|
import { AbmSkillGenerateModal } from '../../organisms/AbmSkillGenerateModal/AbmSkillGenerateModal';
|
|
37
37
|
import { CloseWhileGeneratingModal } from '../../organisms/CloseWhileGeneratingModal';
|
|
38
38
|
import { SECTIONS } from '../../../constants/config';
|
|
39
|
-
import { SCCAIMContent, SCCAIMContentWrapper, SCCAIMWrapper } from './ChatAIModal.styles';
|
|
39
|
+
import { SCCAIMContent, SCCAIMContentWrapper, SCCAIMMinimizedHide, SCCAIMWrapper } from './ChatAIModal.styles';
|
|
40
|
+
import { MaiaMinimizedPill } from './components/MaiaMinimizedPill';
|
|
40
41
|
import { getMaiaFloatingPanelWidthPx, resolveInitialMaiaChatLayoutMode, setStoredMaiaChatLayoutMode } from './layout';
|
|
41
42
|
import { FloatingPanelMotion, useFloatingPanelDragTilt } from './floatingPanelMotion';
|
|
42
43
|
import { ChatAiModalFooter } from './components/ChatAiModalFooter';
|
|
43
44
|
import { validateIsMaia } from '../../../services/utils/validateIsMaia';
|
|
44
45
|
import { isMarketplaceGlobalCloneAgent } from '../../../utils/agentDisplayName';
|
|
45
46
|
import { useFaqsStore } from '../../../store/useFaqsStore';
|
|
47
|
+
import { getChatsStoreState, useChatsStore } from '../../../store/useChatsStore';
|
|
48
|
+
import { sessionStreamManager } from '../../../store/sessions/sessionStreamManager';
|
|
49
|
+
import { readMinimizedState, writeMinimizedState } from '../../../store/maiaMinimizedPersistence';
|
|
50
|
+
import { useSessionsStore } from '../../../store/sessions/useSessionsStore';
|
|
51
|
+
import { isActiveSessionStatus } from '../../../store/sessions/sessions.types';
|
|
46
52
|
import { fetchMaia } from '../../../services/maia/client';
|
|
47
53
|
import { mapCORLang } from '../../../lang/utils';
|
|
48
54
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
@@ -90,85 +96,172 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
90
96
|
_useState2 = _slicedToArray(_useState, 2),
|
|
91
97
|
showCloseWhileGeneratingModal = _useState2[0],
|
|
92
98
|
setShowCloseWhileGeneratingModal = _useState2[1];
|
|
93
|
-
var _useState3 = useState({
|
|
99
|
+
var _useState3 = useState(function () {
|
|
100
|
+
return readMinimizedState(user.id).minimized;
|
|
101
|
+
}),
|
|
102
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
103
|
+
isMinimized = _useState4[0],
|
|
104
|
+
setIsMinimized = _useState4[1];
|
|
105
|
+
var setChatViewVisible = useChatsStore(function (state) {
|
|
106
|
+
return state.setChatViewVisible;
|
|
107
|
+
});
|
|
108
|
+
var unreadCount = useChatsStore(function (state) {
|
|
109
|
+
return state.unreadCount;
|
|
110
|
+
});
|
|
111
|
+
// Los "..." del pill salen del motor, no de isStreaming/isWriting: esos reflejan
|
|
112
|
+
// la sesión activa y quedan stale cuando una respuesta termina en background.
|
|
113
|
+
var hasActiveStream = useSessionsStore(function (state) {
|
|
114
|
+
return Object.values(state.meta).some(function (meta) {
|
|
115
|
+
return isActiveSessionStatus(meta.status);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
/** Chat activo al minimizar: destino de fallback al reabrir si no hay sin leer. */
|
|
120
|
+
var chatIdBeforeMinimizeRef = useRef(readMinimizedState(user.id).chatId);
|
|
121
|
+
/** goToChat se define más abajo; el ref evita depender del orden de declaración. */
|
|
122
|
+
var goToChatRef = useRef(null);
|
|
123
|
+
|
|
124
|
+
// Montó ya minimizado (navegación o refresco): el chat no está a la vista, así que
|
|
125
|
+
// las respuestas que lleguen tienen que quedar como no leídas.
|
|
126
|
+
useEffect(function () {
|
|
127
|
+
if (isMinimized) {
|
|
128
|
+
setChatViewVisible(false);
|
|
129
|
+
}
|
|
130
|
+
// Sólo al montar: después lo manejan minimizar/restaurar.
|
|
131
|
+
}, []);
|
|
132
|
+
var handleMinimize = useCallback(function () {
|
|
133
|
+
var chatId = getChatsStoreState().activeChatId;
|
|
134
|
+
chatIdBeforeMinimizeRef.current = chatId;
|
|
135
|
+
writeMinimizedState(user.id, {
|
|
136
|
+
minimized: true,
|
|
137
|
+
chatId: chatId
|
|
138
|
+
});
|
|
139
|
+
setIsMinimized(true);
|
|
140
|
+
setChatViewVisible(false);
|
|
141
|
+
}, [setChatViewVisible, user.id]);
|
|
142
|
+
var handleRestoreFromMinimized = useCallback(function () {
|
|
143
|
+
setIsMinimized(false);
|
|
144
|
+
setChatViewVisible(true);
|
|
145
|
+
writeMinimizedState(user.id, {
|
|
146
|
+
minimized: false,
|
|
147
|
+
chatId: null
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
// Destino según la US: primer chat sin leer en el orden del sidebar; si no hay,
|
|
151
|
+
// el último chat activo antes de minimizar.
|
|
152
|
+
var _getChatsStoreState = getChatsStoreState(),
|
|
153
|
+
chats = _getChatsStoreState.chats;
|
|
154
|
+
var firstUnread = chats.find(function (chat) {
|
|
155
|
+
return chat.isRead === false;
|
|
156
|
+
});
|
|
157
|
+
var target = firstUnread !== null && firstUnread !== void 0 ? firstUnread : chats.find(function (chat) {
|
|
158
|
+
return chat.sessionExternalId === chatIdBeforeMinimizeRef.current;
|
|
159
|
+
});
|
|
160
|
+
if (target) {
|
|
161
|
+
var _goToChatRef$current;
|
|
162
|
+
(_goToChatRef$current = goToChatRef.current) === null || _goToChatRef$current === void 0 || _goToChatRef$current.call(goToChatRef, target);
|
|
163
|
+
}
|
|
164
|
+
}, [setChatViewVisible, user.id]);
|
|
165
|
+
var handleCloseFromMinimized = useCallback(function () {
|
|
166
|
+
setIsMinimized(false);
|
|
167
|
+
setChatViewVisible(true);
|
|
168
|
+
writeMinimizedState(user.id, {
|
|
169
|
+
minimized: false,
|
|
170
|
+
chatId: null
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
// Con generación en curso hay que confirmar. El overlay del modal se posiciona
|
|
174
|
+
// sobre el panel del chat, que está oculto al minimizar, así que restauramos
|
|
175
|
+
// primero y mostramos el modal sobre la conversación.
|
|
176
|
+
if (sessionStreamManager.getActiveCount() > 0) {
|
|
177
|
+
setShowCloseWhileGeneratingModal(true);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
useFaqsStore.getState().clearFaqs();
|
|
181
|
+
handleClose === null || handleClose === void 0 || handleClose();
|
|
182
|
+
}, [handleClose, setChatViewVisible, user.id]);
|
|
183
|
+
var _useState5 = useState({
|
|
94
184
|
message: '',
|
|
95
185
|
attachments: []
|
|
96
186
|
}),
|
|
97
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
98
|
-
userInitialMessage = _useState4[0],
|
|
99
|
-
setUserInitialMessage = _useState4[1];
|
|
100
|
-
var _useState5 = useState(null),
|
|
101
187
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
var _useState7 = useState(
|
|
188
|
+
userInitialMessage = _useState6[0],
|
|
189
|
+
setUserInitialMessage = _useState6[1];
|
|
190
|
+
var _useState7 = useState(null),
|
|
105
191
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
var _useState9 = useState(
|
|
192
|
+
initialChatId = _useState8[0],
|
|
193
|
+
setInitialChatId = _useState8[1];
|
|
194
|
+
var _useState9 = useState(0),
|
|
109
195
|
_useState0 = _slicedToArray(_useState9, 2),
|
|
110
|
-
|
|
111
|
-
|
|
196
|
+
newChatKey = _useState0[0],
|
|
197
|
+
setNewChatKey = _useState0[1];
|
|
112
198
|
var _useState1 = useState(null),
|
|
113
199
|
_useState10 = _slicedToArray(_useState1, 2),
|
|
114
|
-
|
|
115
|
-
|
|
200
|
+
sessionMeta = _useState10[0],
|
|
201
|
+
setSessionMeta = _useState10[1];
|
|
116
202
|
var _useState11 = useState(null),
|
|
117
203
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
var _useState13 = useState(
|
|
204
|
+
sendMessageFunction = _useState12[0],
|
|
205
|
+
setSendMessageFunction = _useState12[1];
|
|
206
|
+
var _useState13 = useState(null),
|
|
121
207
|
_useState14 = _slicedToArray(_useState13, 2),
|
|
122
|
-
|
|
123
|
-
|
|
208
|
+
stopGenerationFunction = _useState14[0],
|
|
209
|
+
setStopGenerationFunction = _useState14[1];
|
|
124
210
|
var _useState15 = useState(false),
|
|
125
211
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
126
|
-
|
|
127
|
-
|
|
212
|
+
isStreaming = _useState16[0],
|
|
213
|
+
setIsStreaming = _useState16[1];
|
|
214
|
+
var _useState17 = useState(false),
|
|
215
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
216
|
+
isWriting = _useState18[0],
|
|
217
|
+
setIsWriting = _useState18[1];
|
|
128
218
|
var handleCloseModal = useCallback(function () {
|
|
129
|
-
|
|
219
|
+
// El aviso sólo aplica si hay streams realmente en vuelo. isStreaming/isWriting
|
|
220
|
+
// reflejan la sesión activa y quedan stale cuando la respuesta terminó en background.
|
|
221
|
+
if (sessionStreamManager.getActiveCount() > 0) {
|
|
130
222
|
setShowCloseWhileGeneratingModal(true);
|
|
131
223
|
return;
|
|
132
224
|
}
|
|
133
225
|
useFaqsStore.getState().clearFaqs();
|
|
134
226
|
handleClose === null || handleClose === void 0 || handleClose();
|
|
135
|
-
}, [handleClose
|
|
227
|
+
}, [handleClose]);
|
|
136
228
|
var handleDismissCloseWhileGeneratingModal = useCallback(function () {
|
|
137
229
|
setShowCloseWhileGeneratingModal(false);
|
|
138
230
|
}, []);
|
|
139
231
|
var handleConfirmCloseWhileGenerating = useCallback(function () {
|
|
140
|
-
|
|
232
|
+
// Cerrar MAIA corta TODAS las sesiones en vuelo, no sólo la visible.
|
|
233
|
+
sessionStreamManager.abortAll();
|
|
141
234
|
setShowCloseWhileGeneratingModal(false);
|
|
142
235
|
useFaqsStore.getState().clearFaqs();
|
|
143
236
|
handleClose === null || handleClose === void 0 || handleClose();
|
|
144
|
-
}, [handleClose
|
|
145
|
-
var
|
|
146
|
-
_useState18 = _slicedToArray(_useState17, 2),
|
|
147
|
-
refetchChats = _useState18[0],
|
|
148
|
-
setRefetchChats = _useState18[1];
|
|
149
|
-
var _useState19 = useState(options.home),
|
|
237
|
+
}, [handleClose]);
|
|
238
|
+
var _useState19 = useState(false),
|
|
150
239
|
_useState20 = _slicedToArray(_useState19, 2),
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
var _useState21 = useState(
|
|
240
|
+
refetchChats = _useState20[0],
|
|
241
|
+
setRefetchChats = _useState20[1];
|
|
242
|
+
var _useState21 = useState(options.home),
|
|
154
243
|
_useState22 = _slicedToArray(_useState21, 2),
|
|
155
|
-
|
|
156
|
-
|
|
244
|
+
currentOption = _useState22[0],
|
|
245
|
+
setCurrentOption = _useState22[1];
|
|
246
|
+
var _useState23 = useState(false),
|
|
247
|
+
_useState24 = _slicedToArray(_useState23, 2),
|
|
248
|
+
hasError = _useState24[0],
|
|
249
|
+
setHasError = _useState24[1];
|
|
157
250
|
// En project/client/task: el usuario reinició el contexto del orchestrator (lo limpió y pasó por
|
|
158
251
|
// el selector de contextos recientes). Habilita el botón "volver" en el home paso 2 de esas
|
|
159
252
|
// secciones. Se resetea al cerrar/reabrir el modal (el componente se desmonta).
|
|
160
|
-
var
|
|
161
|
-
|
|
162
|
-
didResetContextInSection =
|
|
163
|
-
setDidResetContextInSection =
|
|
253
|
+
var _useState25 = useState(false),
|
|
254
|
+
_useState26 = _slicedToArray(_useState25, 2),
|
|
255
|
+
didResetContextInSection = _useState26[0],
|
|
256
|
+
setDidResetContextInSection = _useState26[1];
|
|
164
257
|
var prevHasPinnedContextRef = useRef(false);
|
|
165
258
|
var handlers = useMemo(function () {
|
|
166
259
|
return buildHandlers(setCurrentOption, setHasError);
|
|
167
260
|
}, []);
|
|
168
|
-
var
|
|
169
|
-
|
|
170
|
-
sidebarHasError =
|
|
171
|
-
setSidebarHasError =
|
|
261
|
+
var _useState27 = useState(false),
|
|
262
|
+
_useState28 = _slicedToArray(_useState27, 2),
|
|
263
|
+
sidebarHasError = _useState28[0],
|
|
264
|
+
setSidebarHasError = _useState28[1];
|
|
172
265
|
var resetSelectedChatRef = useRef(null);
|
|
173
266
|
var lang = i18n.language === 'br' ? 'pt-br' : i18n.language;
|
|
174
267
|
moment.locale(lang);
|
|
@@ -271,15 +364,15 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
271
364
|
|
|
272
365
|
// Task panel, planner y banner de proyecto abren en flotante por default (no tapar el contexto detrás).
|
|
273
366
|
// Fuera de esos contextos se respeta la preferencia guardada en localStorage.
|
|
274
|
-
var
|
|
367
|
+
var _useState29 = useState(function () {
|
|
275
368
|
return resolveInitialMaiaChatLayoutMode({
|
|
276
369
|
section: section,
|
|
277
370
|
bannerEntryFaq: bannerEntryFaq
|
|
278
371
|
});
|
|
279
372
|
}),
|
|
280
|
-
|
|
281
|
-
layoutMode =
|
|
282
|
-
setLayoutMode =
|
|
373
|
+
_useState30 = _slicedToArray(_useState29, 2),
|
|
374
|
+
layoutMode = _useState30[0],
|
|
375
|
+
setLayoutMode = _useState30[1];
|
|
283
376
|
var handleLayoutModeChange = useCallback(function (mode) {
|
|
284
377
|
setStoredMaiaChatLayoutMode(mode);
|
|
285
378
|
setLayoutMode(mode);
|
|
@@ -287,10 +380,10 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
287
380
|
var expanded = layoutMode === 'fullscreen';
|
|
288
381
|
var isFloating = layoutMode === 'floating';
|
|
289
382
|
var contentWrapperRef = useRef(null);
|
|
290
|
-
var
|
|
291
|
-
|
|
292
|
-
dragPosition =
|
|
293
|
-
setDragPosition =
|
|
383
|
+
var _useState31 = useState(null),
|
|
384
|
+
_useState32 = _slicedToArray(_useState31, 2),
|
|
385
|
+
dragPosition = _useState32[0],
|
|
386
|
+
setDragPosition = _useState32[1];
|
|
294
387
|
var _useFloatingPanelDrag = useFloatingPanelDragTilt(isFloating),
|
|
295
388
|
tiltMotion = _useFloatingPanelDrag.tiltMotion,
|
|
296
389
|
startPointerTracking = _useFloatingPanelDrag.startPointerTracking,
|
|
@@ -446,6 +539,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
446
539
|
document.dispatchEvent(new CustomEvent('chat-session-changed'));
|
|
447
540
|
handlers.chat();
|
|
448
541
|
}, [handlers, agents, selectAgent]);
|
|
542
|
+
goToChatRef.current = goToChat;
|
|
449
543
|
var handleSendMessageReady = useCallback(function (sendMessage, stopGeneration, streaming, writing) {
|
|
450
544
|
setSendMessageFunction(function () {
|
|
451
545
|
return sendMessage;
|
|
@@ -469,7 +563,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
469
563
|
var handleGoHome = useCallback(function () {
|
|
470
564
|
// Si estamos en una conversación y vamos a home, resetear initialChatId y incrementar newChatKey
|
|
471
565
|
if (currentOption === options.chat) {
|
|
472
|
-
|
|
566
|
+
// No cortamos la generación: la sesión sigue respondiendo en background.
|
|
473
567
|
setInitialChatId(null);
|
|
474
568
|
setNewChatKey(function (prev) {
|
|
475
569
|
return prev + 1;
|
|
@@ -534,7 +628,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
534
628
|
|
|
535
629
|
// Desde el chat → nueva conversación SIN borrar el contexto pineado, volviendo al home.
|
|
536
630
|
if (computedCurrentOption === options.chat) {
|
|
537
|
-
|
|
631
|
+
// No cortamos la generación: la sesión sigue respondiendo en background.
|
|
538
632
|
setIsWriting(false);
|
|
539
633
|
setUserInitialMessage({
|
|
540
634
|
message: '',
|
|
@@ -630,6 +724,36 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
630
724
|
};
|
|
631
725
|
}, []);
|
|
632
726
|
|
|
727
|
+
/**
|
|
728
|
+
* El ícono de MAIA del header lleva siempre al Home. Si MAIA ya está montada pero
|
|
729
|
+
* minimizada, el host no puede resolverlo cambiando `isOpen` (ya está en true),
|
|
730
|
+
* así que avisa por evento y acá restauramos y vamos al Home.
|
|
731
|
+
*/
|
|
732
|
+
useEffect(function () {
|
|
733
|
+
var openHome = function openHome() {
|
|
734
|
+
setIsMinimized(false);
|
|
735
|
+
setChatViewVisible(true);
|
|
736
|
+
writeMinimizedState(user.id, {
|
|
737
|
+
minimized: false,
|
|
738
|
+
chatId: null
|
|
739
|
+
});
|
|
740
|
+
setHasError(false);
|
|
741
|
+
setInitialChatId(null);
|
|
742
|
+
setNewChatKey(function (prev) {
|
|
743
|
+
return prev + 1;
|
|
744
|
+
});
|
|
745
|
+
setUserInitialMessage({
|
|
746
|
+
message: '',
|
|
747
|
+
attachments: []
|
|
748
|
+
});
|
|
749
|
+
setCurrentOption(options.home);
|
|
750
|
+
};
|
|
751
|
+
document.addEventListener('maia-open-home', openHome);
|
|
752
|
+
return function () {
|
|
753
|
+
document.removeEventListener('maia-open-home', openHome);
|
|
754
|
+
};
|
|
755
|
+
}, [setChatViewVisible, user.id]);
|
|
756
|
+
|
|
633
757
|
/** Mismo flujo que ChatAIMyAgents.handleUseAgent + onBack (handlers.home).
|
|
634
758
|
* El detail puede traer opcionalmente `project`, `client`, `task` para flows que
|
|
635
759
|
* necesitan preservar contexto (ej. selector de agentes desde una tarea). Si no vienen,
|
|
@@ -714,8 +838,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
714
838
|
});
|
|
715
839
|
if (!orchestrator) return;
|
|
716
840
|
|
|
717
|
-
// Reset del chat → conversación nueva
|
|
718
|
-
stopGenerationFunction === null || stopGenerationFunction === void 0 || stopGenerationFunction();
|
|
841
|
+
// Reset del chat → conversación nueva (la anterior sigue en background)
|
|
719
842
|
setIsWriting(false);
|
|
720
843
|
setUserInitialMessage({
|
|
721
844
|
message: '',
|
|
@@ -912,6 +1035,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
912
1035
|
onDragMove: handleDragMove,
|
|
913
1036
|
onDragEnd: handleDragEnd,
|
|
914
1037
|
handleClose: handleCloseModal,
|
|
1038
|
+
handleMinimize: handleMinimize,
|
|
915
1039
|
agents: agents.data,
|
|
916
1040
|
hasError: !!agentError,
|
|
917
1041
|
loading: loading,
|
|
@@ -988,10 +1112,19 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
988
1112
|
layoutMode: layoutMode,
|
|
989
1113
|
dragPosition: resolvedDragPosition,
|
|
990
1114
|
elevated: section === 'task',
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
children:
|
|
1115
|
+
$minimized: isMinimized,
|
|
1116
|
+
children: [/*#__PURE__*/_jsx(SCCAIMMinimizedHide, {
|
|
1117
|
+
$hidden: isMinimized,
|
|
1118
|
+
children: /*#__PURE__*/_jsx(FloatingPanelMotion, {
|
|
1119
|
+
tilt: tiltMotion,
|
|
1120
|
+
expanded: expanded,
|
|
1121
|
+
children: contentWrapper
|
|
1122
|
+
})
|
|
1123
|
+
}), isMinimized && /*#__PURE__*/_jsx(MaiaMinimizedPill, {
|
|
1124
|
+
unreadCount: unreadCount,
|
|
1125
|
+
isStreaming: hasActiveStream,
|
|
1126
|
+
onRestore: handleRestoreFromMinimized,
|
|
1127
|
+
onClose: handleCloseFromMinimized
|
|
995
1128
|
}), userHasPermissions && /*#__PURE__*/_jsx(AbmAgentModal, {
|
|
996
1129
|
addAgent: addAgent,
|
|
997
1130
|
updateAgent: updateAgent,
|
|
@@ -1005,4 +1138,4 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
1005
1138
|
}), userHasPermissions && /*#__PURE__*/_jsx(AbmSkillGenerateModal, {}), /*#__PURE__*/_jsx(Snackbar, {})]
|
|
1006
1139
|
}), selector);
|
|
1007
1140
|
};
|
|
1008
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9DaGF0QUkiLCJNQUlBRXJyb3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdldFNraWxscyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIkFibVNraWxsTW9kYWwiLCJBYm1Ta2lsbEdlbmVyYXRlTW9kYWwiLCJDbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsIiwiU0VDVElPTlMiLCJTQ0NBSU1Db250ZW50IiwiU0NDQUlNQ29udGVudFdyYXBwZXIiLCJTQ0NBSU1XcmFwcGVyIiwiZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4IiwicmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUiLCJzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUiLCJGbG9hdGluZ1BhbmVsTW90aW9uIiwidXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJ2YWxpZGF0ZUlzTWFpYSIsImlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IiwidXNlRmFxc1N0b3JlIiwiZmV0Y2hNYWlhIiwibWFwQ09STGFuZyIsIkVWRU5UUyIsInVzZUV2ZW50IiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiTEVHQUNZX0NPTlRFWFRfRU5USVRJRVMiLCJpc0dsb2JhbE1haWFTZWN0aW9uIiwic2VjdGlvbiIsInJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24iLCJhZ2VudFR5cGUiLCJjdXJyZW50T3B0aW9uIiwiaG9tZU9wdGlvbiIsIklEX01PREFMX0NIQVRfQUdFTlQiLCJ2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSIsInVzZXIiLCJCb29sZWFuIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsIkNoYXRBSU1vZGFsIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwiX3VzZXIkcGVybWlzc2lvbnMyIiwiX3VzZXIkcGVybWlzc2lvbnMzIiwiX2FnZW50cyRkYXRhIiwiaGFuZGxlQ2xvc2UiLCJfdXNlVHJhbnNsYXRpb24iLCJhYm1BZ2VudCIsImkxOG4iLCJhbXBsaXR1ZEV2ZW50IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2hvd0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwiLCJzZXRTaG93Q2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbCIsIl91c2VTdGF0ZTMiLCJtZXNzYWdlIiwiYXR0YWNobWVudHMiLCJfdXNlU3RhdGU0IiwidXNlckluaXRpYWxNZXNzYWdlIiwic2V0VXNlckluaXRpYWxNZXNzYWdlIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpbml0aWFsQ2hhdElkIiwic2V0SW5pdGlhbENoYXRJZCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwibmV3Q2hhdEtleSIsInNldE5ld0NoYXRLZXkiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNlc3Npb25NZXRhIiwic2V0U2Vzc2lvbk1ldGEiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzZW5kTWVzc2FnZUZ1bmN0aW9uIiwic2V0U2VuZE1lc3NhZ2VGdW5jdGlvbiIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uIiwic2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbiIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJpc1N0cmVhbWluZyIsInNldElzU3RyZWFtaW5nIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImlzV3JpdGluZyIsInNldElzV3JpdGluZyIsImhhbmRsZUNsb3NlTW9kYWwiLCJnZXRTdGF0ZSIsImNsZWFyRmFxcyIsImhhbmRsZURpc21pc3NDbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsIiwiaGFuZGxlQ29uZmlybUNsb3NlV2hpbGVHZW5lcmF0aW5nIiwiX3VzZVN0YXRlMTciLCJfdXNlU3RhdGUxOCIsInJlZmV0Y2hDaGF0cyIsInNldFJlZmV0Y2hDaGF0cyIsIl91c2VTdGF0ZTE5IiwiaG9tZSIsIl91c2VTdGF0ZTIwIiwic2V0Q3VycmVudE9wdGlvbiIsIl91c2VTdGF0ZTIxIiwiX3VzZVN0YXRlMjIiLCJoYXNFcnJvciIsInNldEhhc0Vycm9yIiwiX3VzZVN0YXRlMjMiLCJfdXNlU3RhdGUyNCIsImRpZFJlc2V0Q29udGV4dEluU2VjdGlvbiIsInNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbiIsInByZXZIYXNQaW5uZWRDb250ZXh0UmVmIiwiaGFuZGxlcnMiLCJfdXNlU3RhdGUyNSIsIl91c2VTdGF0ZTI2Iiwic2lkZWJhckhhc0Vycm9yIiwic2V0U2lkZWJhckhhc0Vycm9yIiwicmVzZXRTZWxlY3RlZENoYXRSZWYiLCJsYW5nIiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdEFnZW50IiwiY2xlYXJBZ2VudCIsImFnZW50IiwicHJvamVjdCIsImNsaWVudCIsInRhc2siLCJjaGlwc1Byb2plY3QiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInNldENoaXBzUHJvamVjdCIsInNldENsaWVudCIsInNldFByb2plY3QiLCJiYW5uZXJFbnRyeUZhcSIsInNldFRhc2siLCJ0b29sdGlwWkluZGV4IiwiX3VzZUdldEFnZW50cyIsImhhbmRsZUdvSG9tZSIsImFnZW50cyIsImxvYWRpbmciLCJsb2FkaW5nTW9yZSIsImFnZW50RXJyb3IiLCJlcnJvciIsImhhbmRsZUdldEFnZW50cyIsImxvYWRNb3JlQWdlbnRzIiwic2VhcmNoQ3VzdG9tQWdlbnRzIiwic2VhcmNoTG9hZGluZyIsImFkZEFnZW50IiwicmVtb3ZlQWdlbnQiLCJ1cGRhdGVBZ2VudCIsInVwZGF0ZUFnZW50RmF2b3JpdGUiLCJzZWxlY3RGaXJzdEFnZW50Iiwic29ydEFnZW50c0xpc3QiLCJfdXNlR2V0U2tpbGxzIiwic2tpbGxzIiwibG9hZGluZ1NraWxscyIsImhhbmRsZUdldFNraWxscyIsImFkZFNraWxsIiwidXBkYXRlU2tpbGxJbkxpc3QiLCJyZW1vdmVTa2lsbCIsImlzTUFJQSIsInVzZXJIYXNQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY3JlYXRlIiwiZWRpdCIsImNvbXB1dGVkQ3VycmVudE9wdGlvbiIsImlzR2xvYmFsU3BlY2lhbGlzdCIsImVudGl0eSIsImlzUHJvamVjdFNwZWNpYWxpc3QiLCJpc0NsaWVudFNwZWNpYWxpc3QiLCJpc01haWFrZXIiLCJteUFnZW50cyIsIm15U2tpbGxzIiwidHlwZSIsImNoYXQiLCJzaG91bGRTaG93UHJvamVjdFNlbGVjdG9yIiwic2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yIiwicHJvamVjdFNlbGVjdG9yIiwiY2xpZW50U2VsZWN0b3IiLCJuYW1lIiwiaXNNYWlha2VyQWdlbnRTZWxlY3RlZCIsInNpZGViYXJBZ2VudHNOYXZBY3RpdmUiLCJhZ2VudHNGZXRjaGVkUmVmIiwic2VsZWN0b3IiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJjb25jYXQiLCJfdXNlU3RhdGUyNyIsIl91c2VTdGF0ZTI4IiwibGF5b3V0TW9kZSIsInNldExheW91dE1vZGUiLCJoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlIiwibW9kZSIsImV4cGFuZGVkIiwiaXNGbG9hdGluZyIsImNvbnRlbnRXcmFwcGVyUmVmIiwiX3VzZVN0YXRlMjkiLCJfdXNlU3RhdGUzMCIsImRyYWdQb3NpdGlvbiIsInNldERyYWdQb3NpdGlvbiIsIl91c2VGbG9hdGluZ1BhbmVsRHJhZyIsInRpbHRNb3Rpb24iLCJzdGFydFBvaW50ZXJUcmFja2luZyIsInNhbXBsZVBvaW50ZXJNb3ZlIiwiZW5kUG9pbnRlclRyYWNraW5nIiwiZHJhZ1N0YXRlUmVmIiwiY2xhbXBEcmFnUG9zaXRpb24iLCJ4IiwieSIsImNvbnRlbnRXcmFwcGVyIiwiY3VycmVudCIsIl9jb250ZW50V3JhcHBlciRnZXRCbyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiaGVpZ2h0Iiwib2Zmc2V0IiwibWF4WCIsIk1hdGgiLCJtYXgiLCJpbm5lcldpZHRoIiwibWF4WSIsImlubmVySGVpZ2h0IiwibWluIiwicHJldiIsInBhZCIsImhhbmRsZURyYWdFbmQiLCJldmVudCIsIl9kcmFnU3RhdGVSZWYkY3VycmVudCIsInBvaW50ZXJJZCIsImJvZHkiLCJzdHlsZSIsInVzZXJTZWxlY3QiLCJjdXJzb3IiLCJoYW5kbGVEcmFnTW92ZSIsImRyYWdTdGF0ZSIsImNsaWVudFgiLCJjbGllbnRZIiwibmV4dFBvc2l0aW9uIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJyZXNvbHZlZERyYWdQb3NpdGlvbiIsImhhbmRsZURyYWdTdGFydCIsImJ1dHRvbiIsInRhcmdldCIsImNsb3Nlc3QiLCJyZWN0IiwiaW5pdGlhbFBvc2l0aW9uIiwibGVmdCIsInRvcCIsInBvaW50ZXJPZmZzZXRYIiwicG9pbnRlck9mZnNldFkiLCJjdXJyZW50VGFyZ2V0Iiwic2V0UG9pbnRlckNhcHR1cmUiLCJwcmV2ZW50RGVmYXVsdCIsImFpQ2hhdERyYWdnYWJsZSIsInN0YXJ0Q2hhdCIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsImNvbnRleHREYXRhIiwiX29iamVjdFNwcmVhZCIsImxlbmd0aCIsImJhbm5lckZhcUF1dG9TZW50UmVmIiwiX2Jhbm5lckVudHJ5RmFxJGZhcVRpIiwiZW50aXR5UmVhZHkiLCJpZCIsImZhcVRpdGxlIiwidHJpbSIsInVuZGVmaW5lZCIsImdvVG9DaGF0Iiwic2Vzc2lvbkV4dGVybmFsSWQiLCJzZWxlY3RlZEFnZW50IiwiZGF0YSIsImZpbmQiLCJhZ2VudEl0ZW0iLCJhZ2VudElkIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiaGFuZGxlU2VuZE1lc3NhZ2VSZWFkeSIsInNlbmRNZXNzYWdlIiwic3RvcEdlbmVyYXRpb24iLCJzdHJlYW1pbmciLCJ3cml0aW5nIiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJpc19kZWxldGVkIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsImhhc19ub3RfYWNjZXNzIiwicHJvamVjdF9kZWxldGVkIiwiaGFuZGxlUmVzZXRDaGF0IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0Iiwic3RvcCIsImhhbmRsZUJhY2siLCJ0byIsImFpQ2hhdEJhY2siLCJwaW5uZWQiLCJwcm9qZWN0SWQiLCJ3YXNQaW5uZWQiLCJvbk1lcmdlQ3JlYXRlZEFnZW50IiwiZXZ0IiwiX3JlZjMiLCJkZXRhaWwiLCJuZXh0QWdlbnQiLCJuYXZpZ2F0ZUhvbWUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uU3luY0VkaXRlZEFnZW50IiwiX3JlZjQiLCJvcGVuQ2hhdFZpZXciLCJvcGVuTmV3Q2hhdFdpdGhBZ2VudCIsIl9kZXRhaWwkcHJvamVjdCIsIl9kZXRhaWwkY2xpZW50IiwiX3JlZjUiLCJvblNlc3Npb25NZXRhIiwiX3JlZjYiLCJsZWdhY3lDb250ZXh0U2Vzc2lvbiIsImFnZW50RW50aXR5IiwiaW5jbHVkZXMiLCJjb250ZXh0TmFtZSIsInRhc2tOYW1lIiwicHJvamVjdE5hbWUiLCJjbGllbnROYW1lIiwiZW50aXR5VHlwZSIsImlzX2xlZ2FjeV9jb250ZXh0IiwiaGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0IiwicElkIiwicE5hbWUiLCJjSWQiLCJjbGllbnRJZCIsImNOYW1lIiwidElkIiwidGFza0lkIiwidE5hbWUiLCJvcmNoZXN0cmF0b3IiLCJhIiwiU3RyaW5nIiwic2hvd05ld0NoYXQiLCJoaWRlSGVhZGVyQWdlbnRTZWxlY3RvciIsImlzTXlBZ2VudHNTZWN0aW9uIiwiaGFzUGlubmVkQ29udGV4dCIsImlzQ2hhdFZpZXciLCJpc0hvbWVTdGVwMiIsImlzSGVhZGVySG9tZVN0ZXAyIiwiaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIiLCJzaG93QmFja0J1dHRvbiIsImhhbmRsZU9wZW5NYXJrZXRwbGFjZSIsImhhbmRsZU9wZW5Ta2lsbHMiLCJoYW5kbGVHb1RvTWFpYWtlciIsIl9jYWxsZWUyIiwibWFpYWtlckFnZW50IiwicmVzcG9uc2UiLCJfdCIsIl9jb250ZXh0MiIsInBhdGgiLCJtZXRob2QiLCJzZW50IiwianNvbiIsImFicnVwdCIsImhhbmRsZURlbGV0ZUFnZW50RnJvbU15QWdlbnRzIiwiaXNNYWlha2VyQ3JlYXRvckhvbWUiLCJtb2RhbFBhbmVsIiwiY2hpbGRyZW4iLCJvbkdvVG9DaGF0Iiwib25FcnJvciIsImhhbmRsZUdvVG9Ib21lIiwiaGFuZGxlU2V0UmVmZXRjaENoYXRzIiwiYWdlbnRzTmF2QWN0aXZlIiwiaXNMZWdhY3lDb250ZXh0U2Vzc2lvbiIsImZsb2F0aW5nIiwib25MYXlvdXRNb2RlQ2hhbmdlIiwiZHJhZ2dhYmxlIiwib25EcmFnU3RhcnQiLCJvbkRyYWdNb3ZlIiwib25EcmFnRW5kIiwiaGFzTW9yZSIsImhhc19tb3JlIiwib25BZ2VudFVwZGF0ZSIsImlzTWFpYWtlclNlY3Rpb24iLCJoaWRlQWdlbnRTZWxlY3RvciIsIm9uQmFjayIsInJlZnMiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJsb2FkaW5nQWdlbnRzIiwib25EZWxldGVBZ2VudCIsIm9uRmF2b3JpdGVBZ2VudFVwZGF0ZSIsImhhc01vcmVBZ2VudHMiLCJsb2FkaW5nTW9yZUFnZW50cyIsIm9uTG9hZE1vcmVBZ2VudHMiLCJvbkdvVG9NYWlha2VyIiwib25EZWxldGVTa2lsbCIsIm9uU2VhcmNoQWdlbnRzIiwic2VhcmNoTG9hZGluZ0FnZW50cyIsIm9uUmVzdGFydFN1bW1hcnkiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImNoYXRJZCIsIm9uQ29udGludWVJbk5ld0NoYXQiLCJyZWYiLCJvbkNsb3NlIiwib25Db25maXJtIiwiY3JlYXRlUG9ydGFsIiwiZWxldmF0ZWQiLCJ0aWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1vZGFsL0NoYXRBSU1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LW5vLXVzZWxlc3MtZnJhZ21lbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQge1xuICBSZWZPYmplY3QsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VNZW1vLFxuICB1c2VTdGF0ZSxcbiAgdXNlUmVmLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgUG9pbnRlckV2ZW50IGFzIFJlYWN0UG9pbnRlckV2ZW50LFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgY2FuQWNjZXNzVG9DaGF0QUkgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvcGVybWlzc2lvbnMnXG5pbXBvcnQgeyBNQUlBRXJyb3IgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBRXJyb3InXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcblxuaW1wb3J0IHsgQ2hhdEFJQ29udGVudCB9IGZyb20gJy4uL0NoYXRBSUNvbnRlbnQnXG5pbXBvcnQgeyBidWlsZEhhbmRsZXJzLCBvcHRpb25zIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAnLi4vU2lkZWJhcidcbmltcG9ydCB7IHVzZUdldEFnZW50cyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2dldEFnZW50cydcbmltcG9ydCB7IHVzZUdldFNraWxscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2dldFNraWxscydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQsIHR5cGUgU2VjdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBDaGF0QUlNb2RhbEhlYWRlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlcidcbmltcG9ydCB7IFNuYWNrYmFyIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL1NuYWNrQmFyL1NuYWNrYmFyJ1xuaW1wb3J0IHsgUHJvamVjdFN1bW1hcnlDb250ZW50IH0gZnJvbSAnLi4vUHJvamVjdFN1bW1hcnlDb250ZW50J1xuaW1wb3J0IHsgQWJtQWdlbnRNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwnXG5pbXBvcnQgeyBBYm1Ta2lsbE1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibVNraWxsTW9kYWwvQWJtU2tpbGxNb2RhbCdcbmltcG9ydCB7IEFibVNraWxsR2VuZXJhdGVNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwvQWJtU2tpbGxHZW5lcmF0ZU1vZGFsJ1xuaW1wb3J0IHsgQ2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9DbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgU0NDQUlNQ29udGVudCwgU0NDQUlNQ29udGVudFdyYXBwZXIsIFNDQ0FJTVdyYXBwZXIgfSBmcm9tICcuL0NoYXRBSU1vZGFsLnN0eWxlcydcbmltcG9ydCB7XG4gIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCxcbiAgTWFpYUNoYXRNb2RhbExheW91dE1vZGUsXG4gIHJlc29sdmVJbml0aWFsTWFpYUNoYXRMYXlvdXRNb2RlLFxuICBzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUsXG59IGZyb20gJy4vbGF5b3V0J1xuaW1wb3J0IHsgRmxvYXRpbmdQYW5lbE1vdGlvbiwgdXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IH0gZnJvbSAnLi9mbG9hdGluZ1BhbmVsTW90aW9uJ1xuaW1wb3J0IHsgQ2hhdEFpTW9kYWxGb290ZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxGb290ZXInXG5pbXBvcnQgeyB2YWxpZGF0ZUlzTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzL3ZhbGlkYXRlSXNNYWlhJ1xuaW1wb3J0IHsgaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2xpZW50J1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Rhc2snXG5pbXBvcnQgeyB1c2VGYXFzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VGYXFzU3RvcmUnXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL2NsaWVudCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuXG50eXBlIENoYXRBSU1vZGFsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBoYW5kbGVDbG9zZT86ICgpID0+IHZvaWRcbiAgcGFyZW50UmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PlxufVxuXG4vKiogTWV0YWRhdGEgZGUgbGEgc2Vzc2lvbiBhYmllcnRhIChlbWl0aWRhIHBvciB1c2VDaGF0TWVzc2FnZXMgYWwgY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuKS4gKi9cbnR5cGUgU2Vzc2lvbk1ldGEgPSB7XG4gIGNoYXRJZDogc3RyaW5nXG4gIGFnZW50VHlwZT86IHN0cmluZ1xuICBhZ2VudEVudGl0eT86IHN0cmluZ1xuICBwcm9qZWN0SWQ/OiBudW1iZXJcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmdcbiAgY2xpZW50SWQ/OiBudW1iZXJcbiAgY2xpZW50TmFtZT86IHN0cmluZ1xuICB0YXNrSWQ/OiBudW1iZXJcbiAgdGFza05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTEVHQUNZX0NPTlRFWFRfRU5USVRJRVMgPSBbJ3Byb2plY3QnLCAndGFzaycsICdjbGllbnQnXSBhcyBjb25zdFxudHlwZSBMZWdhY3lDb250ZXh0RW50aXR5ID0gKHR5cGVvZiBMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUylbbnVtYmVyXVxuXG50eXBlIEFpQ2hhdEJhY2tEZXN0aW5hdGlvbiA9ICdnbG9iYWxfY29udGV4dF9ob21lJyB8ICd0YXNrX2hvbWUnIHwgJ3BsYW5uZXJfaG9tZScgfCAncHJvamVjdF9ob21lJyB8ICdjbGllbnRfaG9tZSdcblxuLyoqIEhvbWUgZ2xvYmFsIGRlbCBvcmNoZXN0cmF0b3IgKHNvbG8gaGVhZGVyKS4gUGxhbm5lciBlcyBob21lIGRlIEZVQXMsIG5vIGRlIGNvbnRleHRvcy4gKi9cbmNvbnN0IGlzR2xvYmFsTWFpYVNlY3Rpb24gPSAoc2VjdGlvbjogU2VjdGlvbik6IGJvb2xlYW4gPT4gc2VjdGlvbiA9PT0gJ2hlYWRlcidcblxuY29uc3QgcmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbiA9IChcbiAgc2VjdGlvbjogU2VjdGlvbixcbiAgYWdlbnRUeXBlOiBBZ2VudFsndHlwZSddIHwgdW5kZWZpbmVkLFxuICBjdXJyZW50T3B0aW9uOiBzdHJpbmcsXG4gIGhvbWVPcHRpb246IHN0cmluZ1xuKTogQWlDaGF0QmFja0Rlc3RpbmF0aW9uID0+IHtcbiAgaWYgKGlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgYWdlbnRUeXBlID09PSAnb3JjaGVzdHJhdG9yJyAmJiBjdXJyZW50T3B0aW9uID09PSBob21lT3B0aW9uKSB7XG4gICAgcmV0dXJuICdnbG9iYWxfY29udGV4dF9ob21lJ1xuICB9XG4gIGlmIChzZWN0aW9uID09PSAndGFzaycpIHJldHVybiAndGFza19ob21lJ1xuICBpZiAoc2VjdGlvbiA9PT0gJ3BsYW5uZXInKSByZXR1cm4gJ3BsYW5uZXJfaG9tZSdcbiAgaWYgKHNlY3Rpb24gPT09ICdwcm9qZWN0JykgcmV0dXJuICdwcm9qZWN0X2hvbWUnXG4gIGlmIChzZWN0aW9uID09PSAnY2xpZW50JykgcmV0dXJuICdjbGllbnRfaG9tZSdcbiAgcmV0dXJuICdnbG9iYWxfY29udGV4dF9ob21lJ1xufVxuXG5leHBvcnQgY29uc3QgSURfTU9EQUxfQ0hBVF9BR0VOVCA9ICdtb2RhbHMtcG9ydGFsLW1haWEtY2hhdC1hZ2VudCdcblxuY29uc3QgdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUgPSAoc2VjdGlvbjogU2VjdGlvbiB8IG51bGwgfCB1bmRlZmluZWQsIHVzZXI6IFJldHVyblR5cGU8dHlwZW9mIHVzZVVzZXI+KSA9PiB7XG4gIGlmICghc2VjdGlvbiB8fCAhY2FuQWNjZXNzVG9DaGF0QUkodXNlcikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFBsYW5uZXIgeSB0YXNrIGFicmVuIHNpZW1wcmUgZWwgY2hhdCAoaG9tZSBkZSBGVUFzKSwgbnVuY2EgcmVzdW1lbiBkZSBwcm95ZWN0b3MuXG4gIGlmIChzZWN0aW9uID09PSAncGxhbm5lcicgfHwgc2VjdGlvbiA9PT0gJ3Rhc2snKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzZWN0aW9uID09PSAnaGVhZGVyJykge1xuICAgIHJldHVybiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgfHwgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpXG4gIH1cblxuICByZXR1cm4gQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTW9kYWwgPSAoeyBoYW5kbGVDbG9zZSB9OiBDaGF0QUlNb2RhbFByb3BzKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuYWJtQWdlbnRdKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuXG4gIGNvbnN0IFtzaG93Q2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbCwgc2V0U2hvd0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt1c2VySW5pdGlhbE1lc3NhZ2UsIHNldFVzZXJJbml0aWFsTWVzc2FnZV0gPSB1c2VTdGF0ZTx7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICB9Pih7XG4gICAgbWVzc2FnZTogJycsXG4gICAgYXR0YWNobWVudHM6IFtdLFxuICB9KVxuICBjb25zdCBbaW5pdGlhbENoYXRJZCwgc2V0SW5pdGlhbENoYXRJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbbmV3Q2hhdEtleSwgc2V0TmV3Q2hhdEtleV0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBbc2Vzc2lvbk1ldGEsIHNldFNlc3Npb25NZXRhXSA9IHVzZVN0YXRlPFNlc3Npb25NZXRhIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbmRNZXNzYWdlRnVuY3Rpb24sIHNldFNlbmRNZXNzYWdlRnVuY3Rpb25dID0gdXNlU3RhdGU8XG4gICAgfCAoKFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgICBzY0lkPzogc3RyaW5nXG4gICAgICApID0+IHZvaWQpXG4gICAgfCBudWxsXG4gID4obnVsbClcbiAgY29uc3QgW3N0b3BHZW5lcmF0aW9uRnVuY3Rpb24sIHNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb25dID0gdXNlU3RhdGU8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2lzU3RyZWFtaW5nLCBzZXRJc1N0cmVhbWluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzV3JpdGluZywgc2V0SXNXcml0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlTW9kYWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGlzU3RyZWFtaW5nIHx8IGlzV3JpdGluZykge1xuICAgICAgc2V0U2hvd0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVzZUZhcXNTdG9yZS5nZXRTdGF0ZSgpLmNsZWFyRmFxcygpXG4gICAgaGFuZGxlQ2xvc2U/LigpXG4gIH0sIFtoYW5kbGVDbG9zZSwgaXNTdHJlYW1pbmcsIGlzV3JpdGluZ10pXG5cbiAgY29uc3QgaGFuZGxlRGlzbWlzc0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2hvd0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwoZmFsc2UpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1DbG9zZVdoaWxlR2VuZXJhdGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uPy4oKVxuICAgIHNldFNob3dDbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsKGZhbHNlKVxuICAgIHVzZUZhcXNTdG9yZS5nZXRTdGF0ZSgpLmNsZWFyRmFxcygpXG4gICAgaGFuZGxlQ2xvc2U/LigpXG4gIH0sIFtoYW5kbGVDbG9zZSwgc3RvcEdlbmVyYXRpb25GdW5jdGlvbl0pXG5cbiAgY29uc3QgW3JlZmV0Y2hDaGF0cywgc2V0UmVmZXRjaENoYXRzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY3VycmVudE9wdGlvbiwgc2V0Q3VycmVudE9wdGlvbl0gPSB1c2VTdGF0ZShvcHRpb25zLmhvbWUpXG4gIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIC8vIEVuIHByb2plY3QvY2xpZW50L3Rhc2s6IGVsIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIGRlbCBvcmNoZXN0cmF0b3IgKGxvIGxpbXBpw7MgeSBwYXPDsyBwb3JcbiAgLy8gZWwgc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcykuIEhhYmlsaXRhIGVsIGJvdMOzbiBcInZvbHZlclwiIGVuIGVsIGhvbWUgcGFzbyAyIGRlIGVzYXNcbiAgLy8gc2VjY2lvbmVzLiBTZSByZXNldGVhIGFsIGNlcnJhci9yZWFicmlyIGVsIG1vZGFsIChlbCBjb21wb25lbnRlIHNlIGRlc21vbnRhKS5cbiAgY29uc3QgW2RpZFJlc2V0Q29udGV4dEluU2VjdGlvbiwgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBwcmV2SGFzUGlubmVkQ29udGV4dFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaGFuZGxlcnMgPSB1c2VNZW1vKCgpID0+IGJ1aWxkSGFuZGxlcnMoc2V0Q3VycmVudE9wdGlvbiwgc2V0SGFzRXJyb3IpLCBbXSlcbiAgY29uc3QgW3NpZGViYXJIYXNFcnJvciwgc2V0U2lkZWJhckhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCByZXNldFNlbGVjdGVkQ2hhdFJlZiA9IHVzZVJlZjwoKCkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBsYW5nID0gaTE4bi5sYW5ndWFnZSA9PT0gJ2JyJyA/ICdwdC1icicgOiBpMThuLmxhbmd1YWdlXG5cbiAgbW9tZW50LmxvY2FsZShsYW5nKVxuXG4gIGNvbnN0IHtcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBjbGVhckFnZW50LFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBiYW5uZXJFbnRyeUZhcSxcbiAgICBzZXRUYXNrLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgLy8gWi1pbmRleCBwYXJhIHRvb2x0aXBzIGVuIHNlY3Rpb24gJ3Rhc2snIChtb2RhbCBmbG90YW50ZSBlbGV2YWRvKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3Qge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yOiBhZ2VudEVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBzZWFyY2hDdXN0b21BZ2VudHMsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH0gPSB1c2VHZXRBZ2VudHMoeyBzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGhhbmRsZUdvSG9tZTogaGFuZGxlcnMuaG9tZSB9KVxuXG4gIGNvbnN0IHsgc2tpbGxzLCBsb2FkaW5nOiBsb2FkaW5nU2tpbGxzLCBoYW5kbGVHZXRTa2lsbHMsIGFkZFNraWxsLCB1cGRhdGVTa2lsbEluTGlzdCwgcmVtb3ZlU2tpbGwgfSA9IHVzZUdldFNraWxscygpXG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG5cbiAgY29uc3QgdXNlckhhc1Blcm1pc3Npb25zID1cbiAgICAodXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uY3JlYXRlIHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5lZGl0IHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5kZWxldGUpICYmXG4gICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcblxuICBjb25zdCBjb21wdXRlZEN1cnJlbnRPcHRpb24gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBpc0dsb2JhbFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCdcbiAgICBjb25zdCBpc1Byb2plY3RTcGVjaWFsaXN0ID0gaXNNQUlBICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PSBudWxsKVxuICAgIGNvbnN0IGlzQ2xpZW50U3BlY2lhbGlzdCA9IGlzTUFJQSAmJiBhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50J1xuICAgIGNvbnN0IGlzTWFpYWtlciA9IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGFnZW50KVxuXG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHMgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm15QWdlbnRzXG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHMgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm15U2tpbGxzXG4gICAgfVxuXG4gICAgLy8gRWwgb3JjaGVzdHJhdG9yIChNQUlBKSBtdWVzdHJhIHN1IGhvbWUgY29uIEZBUXMvYWNjaW9uZXMgZnJlY3VlbnRlczsgZWwgcmVzdG8gZGVcbiAgICAvLyBsb3MgZ2xvYmFsIHNwZWNpYWxpc3RzIChjbG9uZXMgZ2xvYmFsZXMgbm8tbWFpYWtlcikgc2lndWVuIHllbmRvIGRpcmVjdG8gYWwgY2hhdC5cbiAgICBpZiAoaXNHbG9iYWxTcGVjaWFsaXN0ICYmICFpc01haWFrZXIgJiYgYWdlbnQ/LnR5cGUgIT09ICdvcmNoZXN0cmF0b3InICYmIGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY2hhdFxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IgPSBjdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQgJiYgaXNQcm9qZWN0U3BlY2lhbGlzdCAmJiAhcHJvamVjdFxuICAgIGNvbnN0IHNob3VsZFNob3dDbGllbnRTZWxlY3RvciA9IGN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCAmJiBpc0NsaWVudFNwZWNpYWxpc3QgJiYgIWNsaWVudFxuXG4gICAgaWYgKHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnByb2plY3RTZWxlY3RvclxuICAgIH1cbiAgICBpZiAoc2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5jbGllbnRTZWxlY3RvclxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudE9wdGlvblxuICB9LCBbY3VycmVudE9wdGlvbiwgcHJvamVjdCwgY2xpZW50LCBpc01BSUEsIGFnZW50Py5lbnRpdHksIGFnZW50Py5uYW1lLCBhZ2VudD8udHlwZV0pXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oKCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpLCBbYWdlbnRdKVxuXG4gIGNvbnN0IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUgPSB1c2VNZW1vKCgpOiAnbWFpYWtlcicgfCAnbXlBZ2VudHMnIHwgJ215U2tpbGxzJyB8IG51bGwgPT4ge1xuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHMpIHJldHVybiAnbXlTa2lsbHMnXG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cykgcmV0dXJuICdteUFnZW50cydcbiAgICBpZiAoaXNNYWlha2VyQWdlbnRTZWxlY3RlZCkgcmV0dXJuICdtYWlha2VyJ1xuICAgIHJldHVybiBudWxsXG4gIH0sIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRdKVxuXG4gIC8qIFJlYWN0aXZhciBjb24gbGEgZmlsYSDigJxNaXMgYWdlbnRlc+KAnSBlbiBTaWRlYmFyOiBteUFnZW50c0NvdW50IHByb3BcbiAgY29uc3Qgc2lkZWJhck15QWdlbnRzQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWdlbnRzLmRhdGEuZmlsdGVyKFxuICAgICAgYSA9PiAhKGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgKGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYS5uYW1lIHx8ICcnKSkpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgLy8gVGFzayBwYW5lbCwgcGxhbm5lciB5IGJhbm5lciBkZSBwcm95ZWN0byBhYnJlbiBlbiBmbG90YW50ZSBwb3IgZGVmYXVsdCAobm8gdGFwYXIgZWwgY29udGV4dG8gZGV0csOhcykuXG4gIC8vIEZ1ZXJhIGRlIGVzb3MgY29udGV4dG9zIHNlIHJlc3BldGEgbGEgcHJlZmVyZW5jaWEgZ3VhcmRhZGEgZW4gbG9jYWxTdG9yYWdlLlxuICBjb25zdCBbbGF5b3V0TW9kZSwgc2V0TGF5b3V0TW9kZV0gPSB1c2VTdGF0ZTxNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZT4oKCkgPT5cbiAgICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7IHNlY3Rpb24sIGJhbm5lckVudHJ5RmFxIH0pXG4gIClcblxuICBjb25zdCBoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlKG1vZGUpXG4gICAgc2V0TGF5b3V0TW9kZShtb2RlKVxuICB9LCBbXSlcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcbiAgY29uc3QgaXNGbG9hdGluZyA9IGxheW91dE1vZGUgPT09ICdmbG9hdGluZydcbiAgY29uc3QgY29udGVudFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtkcmFnUG9zaXRpb24sIHNldERyYWdQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsPihudWxsKVxuICBjb25zdCB7IHRpbHRNb3Rpb24sIHN0YXJ0UG9pbnRlclRyYWNraW5nLCBzYW1wbGVQb2ludGVyTW92ZSwgZW5kUG9pbnRlclRyYWNraW5nIH0gPVxuICAgIHVzZUZsb2F0aW5nUGFuZWxEcmFnVGlsdChpc0Zsb2F0aW5nKVxuICBjb25zdCBkcmFnU3RhdGVSZWYgPSB1c2VSZWY8e1xuICAgIHBvaW50ZXJJZDogbnVtYmVyXG4gICAgb2Zmc2V0WDogbnVtYmVyXG4gICAgb2Zmc2V0WTogbnVtYmVyXG4gIH0gfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGNsYW1wRHJhZ1Bvc2l0aW9uID0gdXNlQ2FsbGJhY2soKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250ZW50V3JhcHBlcikge1xuICAgICAgcmV0dXJuIHsgeCwgeSB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBjb250ZW50V3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IG9mZnNldCA9IDE2XG4gICAgY29uc3QgbWF4WCA9IE1hdGgubWF4KG9mZnNldCwgd2luZG93LmlubmVyV2lkdGggLSB3aWR0aCAtIG9mZnNldClcbiAgICBjb25zdCBtYXhZID0gTWF0aC5tYXgob2Zmc2V0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBoZWlnaHQgLSBvZmZzZXQpXG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogTWF0aC5taW4oTWF0aC5tYXgoeCwgb2Zmc2V0KSwgbWF4WCksXG4gICAgICB5OiBNYXRoLm1pbihNYXRoLm1heCh5LCBvZmZzZXQpLCBtYXhZKSxcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxheW91dE1vZGUgIT09ICdmbG9hdGluZycpIHtcbiAgICAgIHNldERyYWdQb3NpdGlvbihudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0RHJhZ1Bvc2l0aW9uKHByZXYgPT4ge1xuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgcmV0dXJuIGNsYW1wRHJhZ1Bvc2l0aW9uKHByZXYueCwgcHJldi55KVxuICAgICAgfVxuICAgICAgY29uc3QgcGFkID0gMTZcbiAgICAgIGNvbnN0IHggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpIC0gcGFkXG4gICAgICByZXR1cm4gY2xhbXBEcmFnUG9zaXRpb24oeCwgcGFkKVxuICAgIH0pXG4gIH0sIFtsYXlvdXRNb2RlLCBjbGFtcERyYWdQb3NpdGlvbl0pXG5cbiAgY29uc3QgaGFuZGxlRHJhZ0VuZCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBlbmRQb2ludGVyVHJhY2tpbmcoKVxuICAgICAgaWYgKGRyYWdTdGF0ZVJlZi5jdXJyZW50Py5wb2ludGVySWQgIT09IGV2ZW50LnBvaW50ZXJJZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZHJhZ1N0YXRlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnJ1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnJ1xuICAgIH0sXG4gICAgW2VuZFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdTdGF0ZSA9IGRyYWdTdGF0ZVJlZi5jdXJyZW50XG4gICAgICBpZiAoIWRyYWdTdGF0ZSB8fCBkcmFnU3RhdGUucG9pbnRlcklkICE9PSBldmVudC5wb2ludGVySWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNhbXBsZVBvaW50ZXJNb3ZlKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG5cbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGNsYW1wRHJhZ1Bvc2l0aW9uKGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUub2Zmc2V0WCwgZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5vZmZzZXRZKVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiB7XG4gICAgICAgIGlmIChwcmV2ICYmIHByZXYueCA9PT0gbmV4dFBvc2l0aW9uLnggJiYgcHJldi55ID09PSBuZXh0UG9zaXRpb24ueSkge1xuICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHRQb3NpdGlvblxuICAgICAgfSlcbiAgICB9LFxuICAgIFtjbGFtcERyYWdQb3NpdGlvbiwgc2FtcGxlUG9pbnRlck1vdmVdXG4gIClcblxuICBjb25zdCByZXNvbHZlZERyYWdQb3NpdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChsYXlvdXRNb2RlICE9PSAnZmxvYXRpbmcnKSB7XG4gICAgICByZXR1cm4gZHJhZ1Bvc2l0aW9uXG4gICAgfVxuICAgIGlmIChkcmFnUG9zaXRpb24pIHtcbiAgICAgIHJldHVybiBkcmFnUG9zaXRpb25cbiAgICB9XG4gICAgY29uc3QgcGFkID0gMTZcbiAgICBjb25zdCB4ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCAtIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpIC0gcGFkIDogcGFkXG4gICAgcmV0dXJuIGNsYW1wRHJhZ1Bvc2l0aW9uKHgsIHBhZClcbiAgfSwgW2xheW91dE1vZGUsIGRyYWdQb3NpdGlvbiwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIWlzRmxvYXRpbmcgfHwgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICAgIGlmICh0YXJnZXQuY2xvc2VzdCgnYnV0dG9uLCBhLCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgW3JvbGU9XCJidXR0b25cIl0sIFtkYXRhLW5vLWRyYWc9XCJ0cnVlXCJdJykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgICAgaWYgKCFjb250ZW50V3JhcHBlcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVjdCA9IGNvbnRlbnRXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCBpbml0aWFsUG9zaXRpb24gPSByZXNvbHZlZERyYWdQb3NpdGlvbiA/PyBjbGFtcERyYWdQb3NpdGlvbihyZWN0LmxlZnQsIHJlY3QudG9wKVxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFggPSBldmVudC5jbGllbnRYIC0gaW5pdGlhbFBvc2l0aW9uLnhcbiAgICAgIGNvbnN0IHBvaW50ZXJPZmZzZXRZID0gZXZlbnQuY2xpZW50WSAtIGluaXRpYWxQb3NpdGlvbi55XG5cbiAgICAgIHNldERyYWdQb3NpdGlvbihpbml0aWFsUG9zaXRpb24pXG4gICAgICBkcmFnU3RhdGVSZWYuY3VycmVudCA9IHtcbiAgICAgICAgcG9pbnRlcklkOiBldmVudC5wb2ludGVySWQsXG4gICAgICAgIG9mZnNldFg6IHBvaW50ZXJPZmZzZXRYLFxuICAgICAgICBvZmZzZXRZOiBwb2ludGVyT2Zmc2V0WSxcbiAgICAgIH1cblxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICdub25lJ1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnZ3JhYmJpbmcnXG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXREcmFnZ2FibGUpXG4gICAgICBzdGFydFBvaW50ZXJUcmFja2luZyhldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBpc0Zsb2F0aW5nLCByZXNvbHZlZERyYWdQb3NpdGlvbiwgc3RhcnRQb2ludGVyVHJhY2tpbmddXG4gIClcblxuICBjb25zdCBzdGFydENoYXQgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZyxcbiAgICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApID0+IHtcbiAgICAgIGlmIChzaWRlYmFySGFzRXJyb3IpIHtcbiAgICAgICAgc2V0U2lkZWJhckhhc0Vycm9yKGZhbHNlKVxuICAgICAgfVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCAnJyxcbiAgICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzIHx8IFtdLFxuICAgICAgICAuLi4oZmFxSWQgPyB7IGZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKG1lbnRpb25zICYmIG1lbnRpb25zLmxlbmd0aCA+IDAgPyB7IG1lbnRpb25zIH0gOiB7fSksXG4gICAgICAgIC4uLihmdWFJZCA/IHsgZnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHNjSWQgPyB7IHNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNvbnRleHREYXRhID8geyBjb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIGhhbmRsZXJzLmNoYXQoKVxuICAgIH0sXG4gICAgW2hhbmRsZXJzLCBzaWRlYmFySGFzRXJyb3JdXG4gIClcblxuICBjb25zdCBiYW5uZXJGYXFBdXRvU2VudFJlZiA9IHVzZVJlZihmYWxzZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVudGl0eVJlYWR5ID0gc2VjdGlvbiA9PT0gJ3Byb2plY3QnID8gQm9vbGVhbihwcm9qZWN0Py5pZCkgOiBzZWN0aW9uID09PSAnY2xpZW50JyA/IEJvb2xlYW4oY2xpZW50Py5pZCkgOiB0cnVlXG5cbiAgICBpZiAoIWJhbm5lckVudHJ5RmFxPy5mYXFUaXRsZT8udHJpbSgpIHx8IGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQgfHwgbG9hZGluZyB8fCAhYWdlbnQ/LmlkIHx8ICFlbnRpdHlSZWFkeSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IHRydWVcbiAgICBzdGFydENoYXQoXG4gICAgICBiYW5uZXJFbnRyeUZhcS5mYXFUaXRsZSxcbiAgICAgIFtdLFxuICAgICAgYmFubmVyRW50cnlGYXEuZmFxSWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBiYW5uZXJFbnRyeUZhcS5jb250ZXh0RGF0YVxuICAgIClcbiAgfSwgW1xuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFJZCxcbiAgICBiYW5uZXJFbnRyeUZhcT8uZmFxVGl0bGUsXG4gICAgYmFubmVyRW50cnlGYXE/LmNvbnRleHREYXRhLFxuICAgIGxvYWRpbmcsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGFnZW50Py5lbnRpdHksXG4gICAgcHJvamVjdD8uaWQsXG4gICAgY2xpZW50Py5pZCxcbiAgICBzZWN0aW9uLFxuICAgIHN0YXJ0Q2hhdCxcbiAgXSlcblxuICBjb25zdCBnb1RvQ2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGF0OiBhbnkpID0+IHtcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQoY2hhdC5zZXNzaW9uRXh0ZXJuYWxJZClcbiAgICAgIGNvbnN0IHNlbGVjdGVkQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKGFnZW50SXRlbSA9PiBhZ2VudEl0ZW0uaWQgPT09IGNoYXQuYWdlbnRJZClcbiAgICAgIGlmIChzZWxlY3RlZEFnZW50KSB7XG4gICAgICAgIHNlbGVjdEFnZW50KHNlbGVjdGVkQWdlbnQpXG4gICAgICB9XG4gICAgICAvLyBEaXNwYXRjaCBldmVudCB0byBjbGVhciB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIGFnZW50cywgc2VsZWN0QWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTZW5kTWVzc2FnZVJlYWR5ID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgc2VuZE1lc3NhZ2U6IChcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgICAgc2NJZD86IHN0cmluZ1xuICAgICAgKSA9PiB2b2lkLFxuICAgICAgc3RvcEdlbmVyYXRpb246ICgpID0+IHZvaWQsXG4gICAgICBzdHJlYW1pbmc6IGJvb2xlYW4sXG4gICAgICB3cml0aW5nOiBib29sZWFuXG4gICAgKSA9PiB7XG4gICAgICBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uKCgpID0+IHNlbmRNZXNzYWdlKVxuICAgICAgc2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbigoKSA9PiBzdG9wR2VuZXJhdGlvbilcbiAgICAgIHNldElzU3RyZWFtaW5nKHN0cmVhbWluZylcbiAgICAgIHNldElzV3JpdGluZyh3cml0aW5nKVxuICAgIH0sXG4gICAgW11cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAoc2VuZE1lc3NhZ2VGdW5jdGlvbiAmJiBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgICBzZW5kTWVzc2FnZUZ1bmN0aW9uKG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0Q2hhdChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbc2VuZE1lc3NhZ2VGdW5jdGlvbiwgc3RhcnRDaGF0LCBjb21wdXRlZEN1cnJlbnRPcHRpb24sIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUdvSG9tZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBTaSBlc3RhbW9zIGVuIHVuYSBjb252ZXJzYWNpw7NuIHkgdmFtb3MgYSBob21lLCByZXNldGVhciBpbml0aWFsQ2hhdElkIHkgaW5jcmVtZW50YXIgbmV3Q2hhdEtleVxuICAgIGlmIChjdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpIHtcbiAgICAgIHN0b3BHZW5lcmF0aW9uRnVuY3Rpb24/LigpXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAvLyBObyBib3JyYXIgZWwgY2xpZW50ZSBzaSBlcyBhZ2VudGUgZGUgY2xpZW50ZXMgKGlndWFsIHF1ZSBlbCBwcm95ZWN0byBzZSBtYW50aWVuZSlcbiAgICAgIGlmIChhZ2VudD8uZW50aXR5ICE9PSAnY2xpZW50Jykge1xuICAgICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgfVxuICAgICAgaWYgKHNlY3Rpb24gIT09ICd0YXNrJykge1xuICAgICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgKCFhZ2VudCB8fCBhZ2VudD8uaXNfZGVsZXRlZCB8fCBhZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyB8fCBhZ2VudD8uaGFzX25vdF9hY2Nlc3MgfHwgYWdlbnQ/LnByb2plY3RfZGVsZXRlZCkgJiZcbiAgICAgIGFnZW50cy5kYXRhLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHNlbGVjdEFnZW50KGFnZW50cy5kYXRhWzBdKVxuICAgIH1cbiAgICAvLyBPcmNoZXN0cmF0b3IgZW4gaG9tZSBnbG9iYWwgKGhlYWRlci9wbGFubmVyKTogYWwgaW5pY2lhciB1biBjaGF0IG51ZXZvIHNlIGRlYmUgdm9sdmVyIGFsIHBhc28gMVxuICAgIC8vIChsaXN0YSBkZSBjb250ZXh0b3MgcmVjaWVudGVzKSwgcG9yIGxvIHF1ZSBoYXkgcXVlIGxpbXBpYXIgdG9kbyBlbCBjb250ZXh0byBwaW5lYWRvLlxuICAgIGlmIChpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJykge1xuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2s/LihudWxsKVxuICAgIH1cbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSAmJiB0b2dnbGVXZWJTZWFyY2goKVxuICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50KClcbiAgICB9XG4gIH0sIFtcbiAgICBvcHRpb25zLmhvbWUsXG4gICAgb3B0aW9ucy5jaGF0LFxuICAgIGN1cnJlbnRPcHRpb24sXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGFnZW50LFxuICAgIGFnZW50cyxcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRUYXNrLFxuICAgIHN0b3BHZW5lcmF0aW9uRnVuY3Rpb24sXG4gICAgc2VjdGlvbixcbiAgXSlcblxuICBjb25zdCBoYW5kbGVSZXNldENoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAvLyBEaXNwYXRjaCBldmVudCB0byBjbGVhciB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbaGFuZGxlR29Ib21lXSlcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIiBkZWwgaGVhZGVyIChzb2xvIG9yY2hlc3RyYXRvcik6XG4gIC8vIC0gRGVzZGUgZWwgY2hhdCAoaGVhZGVyIG8gcHJvamVjdC9jbGllbnQvdGFzayk6IGluaWNpYSB1bmEgY29udmVyc2FjacOzbiBudWV2YSBjb25zZXJ2YW5kbyBlbFxuICAvLyAgIGNvbnRleHRvIHBpbmVhZG8geSB2dWVsdmUgYWwgaG9tZSAocGFzbyAyIGNvbiBGQVFzL0ZVQXMpLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvKTogbGltcGlhIGVsIGNvbnRleHRvIHBpbmVhZG8geSB2dWVsdmUgYWwgcGFzbyAxXG4gIC8vICAgKHNlbGVjdG9yIGRlIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBoZWFkZXIgc2llbXByZTsgZW4gcHJvamVjdC9jbGllbnQvdGFzayBzb2xvIHNpIGVsXG4gIC8vICAgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbikuXG4gIGNvbnN0IGhhbmRsZUJhY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdG8gPSByZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uKHNlY3Rpb24sIGFnZW50Py50eXBlLCBjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuaG9tZSlcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRCYWNrLCB7IHRvIH0pXG5cbiAgICAvLyBEZXNkZSBlbCBjaGF0IOKGkiBudWV2YSBjb252ZXJzYWNpw7NuIFNJTiBib3JyYXIgZWwgY29udGV4dG8gcGluZWFkbywgdm9sdmllbmRvIGFsIGhvbWUuXG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSB7XG4gICAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uPy4oKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSAmJiB0b2dnbGVXZWJTZWFyY2goKVxuICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gICAgICB9XG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSG9tZSBwYXNvIDIgKGNvbnRleHRvIHBpbmVhZG8pIOKGkiBsaW1waWFyIGVsIGNvbnRleHRvIHkgdm9sdmVyIGFsIHBhc28gMSAoY29udGV4dG9zIHJlY2llbnRlcykuXG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIChpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pIHx8IGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbikpIHtcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgIH1cbiAgfSwgW1xuICAgIGNvbXB1dGVkQ3VycmVudE9wdGlvbixcbiAgICBzZWN0aW9uLFxuICAgIGFnZW50Py50eXBlLFxuICAgIGFtcGxpdHVkRXZlbnQsXG4gICAgb3B0aW9ucy5ob21lLFxuICAgIHN0b3BHZW5lcmF0aW9uRnVuY3Rpb24sXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbixcbiAgICBzZXRQcm9qZWN0LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRUYXNrLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgXSlcblxuICAvLyBEZXRlY3RhIGVsIHJlaW5pY2lvIGRlIGNvbnRleHRvIGVuIHByb2plY3QvY2xpZW50L3Rhc2s6IGNvbnRleHRvIHBpbmVhZG8g4oaSIHZhY8OtbyBjb24gZWxcbiAgLy8gb3JjaGVzdHJhdG9yIChwLiBlai4gYWwgcmVzZWxlY2Npb25hciBNQUlBIGVuIGVsIGxpc3RhZG8pLiBTb2xvIGxhIHRyYW5zaWNpw7NuIGN1ZW50YSwgYXPDrSB1bmFcbiAgLy8gYXBlcnR1cmEgZnJlc2NhIChjb250ZXh0byBwaW5lYWRvIGRlc2RlIGxhIHNlY2Npw7NuKSBubyBsbyBhY3RpdmEuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcGlubmVkID0gISEodGFzaz8uaWQgfHwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgfHwgY2xpZW50Py5pZCB8fCBwcm9qZWN0Py5pZClcbiAgICBjb25zdCB3YXNQaW5uZWQgPSBwcmV2SGFzUGlubmVkQ29udGV4dFJlZi5jdXJyZW50XG4gICAgcHJldkhhc1Bpbm5lZENvbnRleHRSZWYuY3VycmVudCA9IHBpbm5lZFxuICAgIGlmICghaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiYgd2FzUGlubmVkICYmICFwaW5uZWQpIHtcbiAgICAgIHNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbih0cnVlKVxuICAgIH1cbiAgfSwgW3Rhc2s/LmlkLCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCwgY2xpZW50Py5pZCwgcHJvamVjdD8uaWQsIHNlY3Rpb24sIGFnZW50Py50eXBlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghYWdlbnRzRmV0Y2hlZFJlZi5jdXJyZW50KSB7XG4gICAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBoYW5kbGVHZXRBZ2VudHMoKVxuICAgIH1cbiAgfSwgW2hhbmRsZUdldEFnZW50c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvbk1lcmdlQ3JlYXRlZEFnZW50ID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnQ6IG5leHRBZ2VudCB9ID0gKGV2dCBhcyBDdXN0b21FdmVudDx7IGFnZW50OiBBZ2VudCB9PikuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAobmV4dEFnZW50Py5pZCkge1xuICAgICAgICBhZGRBZ2VudChuZXh0QWdlbnQsIHsgbmF2aWdhdGVIb21lOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIG9uTWVyZ2VDcmVhdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbYWRkQWdlbnRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TeW5jRWRpdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmICghbmV4dEFnZW50Py5pZCkgcmV0dXJuXG4gICAgICB1cGRhdGVBZ2VudChuZXh0QWdlbnQpXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSBuZXh0QWdlbnQuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIH1cbiAgfSwgW3VwZGF0ZUFnZW50LCBzZWxlY3RBZ2VudCwgYWdlbnQ/LmlkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5DaGF0VmlldyA9ICgpID0+IHtcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmNoYXQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKiBNaXNtbyBmbHVqbyBxdWUgQ2hhdEFJTXlBZ2VudHMuaGFuZGxlVXNlQWdlbnQgKyBvbkJhY2sgKGhhbmRsZXJzLmhvbWUpLlxuICAgKiAgRWwgZGV0YWlsIHB1ZWRlIHRyYWVyIG9wY2lvbmFsbWVudGUgYHByb2plY3RgLCBgY2xpZW50YCwgYHRhc2tgIHBhcmEgZmxvd3MgcXVlXG4gICAqICBuZWNlc2l0YW4gcHJlc2VydmFyIGNvbnRleHRvIChlai4gc2VsZWN0b3IgZGUgYWdlbnRlcyBkZXNkZSB1bmEgdGFyZWEpLiBTaSBubyB2aWVuZW4sXG4gICAqICBzZSBtYW50aWVuZSBlbCBjb21wb3J0YW1pZW50byBvcmlnaW5hbCBkZSBsaW1waWFyIHByb2plY3QvY2xpZW50LiAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5OZXdDaGF0V2l0aEFnZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PHtcbiAgICAgICAgYWdlbnQ6IEFnZW50XG4gICAgICAgIHByb2plY3Q/OiBQcm9qZWN0IHwgbnVsbFxuICAgICAgICBjbGllbnQ/OiBDbGllbnQgfCBudWxsXG4gICAgICAgIHRhc2s/OiBUYXNrIHwgbnVsbFxuICAgICAgfT5cbiAgICAgIGNvbnN0IG5leHRBZ2VudCA9IGRldGFpbD8uYWdlbnRcbiAgICAgIGlmICghbmV4dEFnZW50KSByZXR1cm5cblxuICAgICAgc2V0UHJvamVjdChkZXRhaWw/LnByb2plY3QgPz8gbnVsbClcbiAgICAgIHNldENsaWVudD8uKGRldGFpbD8uY2xpZW50ID8/IG51bGwpXG4gICAgICBpZiAoZGV0YWlsPy50YXNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0VGFzaz8uKGRldGFpbC50YXNrKVxuICAgICAgfVxuICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIH1cbiAgfSwgW3NlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdKVxuXG4gIC8vIE1ldGFkYXRhIGRlIGxhIHNlc3Npb24gYWJpZXJ0YSAoYWdlbnRfdHlwZS9hZ2VudF9lbnRpdHkgKyBjb250ZXh0byksIGVtaXRpZGEgcG9yIHVzZUNoYXRNZXNzYWdlcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblNlc3Npb25NZXRhID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldnQgYXMgQ3VzdG9tRXZlbnQ8U2Vzc2lvbk1ldGE+XG4gICAgICBpZiAoZGV0YWlsKSBzZXRTZXNzaW9uTWV0YShkZXRhaWwpXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtY2hhdC1zZXNzaW9uLW1ldGEnLCBvblNlc3Npb25NZXRhKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLWNoYXQtc2Vzc2lvbi1tZXRhJywgb25TZXNzaW9uTWV0YSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIEFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzbiBsaW1waWFtb3MgbGEgbWV0YWRhdGE7IGVsIGxvYWQgZGUgbGEgbnVldmEgc2Vzc2lvbiBsYSB2dWVsdmUgYSBlbWl0aXIuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2Vzc2lvbk1ldGEobnVsbClcbiAgfSwgW2luaXRpYWxDaGF0SWRdKVxuXG4gIC8vIENhcnRlbCBcImNvbnRpbnVhciBlbiB1biBjaGF0IG51ZXZvXCI6IHNlIG11ZXN0cmEgYWwgYWJyaXIgdW5hIGNvbnZlcnNhY2nDs24gZGUgdW4gY2xvbmUgbGVnYWN5XG4gIC8vIChhZ2VudF90eXBlID09PSAnY2xvbmUnIGNvbiBlbnRpdHkgcHJvamVjdC90YXNrL2NsaWVudCkuIEVsIGlucHV0IHNlIHJlZW1wbGF6YSBwb3IgZWwgY2FydGVsLlxuICBjb25zdCBsZWdhY3lDb250ZXh0U2Vzc2lvbiA9IHVzZU1lbW88eyBlbnRpdHlUeXBlOiBMZWdhY3lDb250ZXh0RW50aXR5OyBjb250ZXh0TmFtZTogc3RyaW5nIH0gfCBudWxsPigoKSA9PiB7XG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiAhPT0gb3B0aW9ucy5jaGF0KSByZXR1cm4gbnVsbFxuICAgIGlmICghc2Vzc2lvbk1ldGEgfHwgc2Vzc2lvbk1ldGEuYWdlbnRUeXBlICE9PSAnY2xvbmUnKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IGVudGl0eSA9IHNlc3Npb25NZXRhLmFnZW50RW50aXR5XG4gICAgaWYgKCFlbnRpdHkgfHwgIUxFR0FDWV9DT05URVhUX0VOVElUSUVTLmluY2x1ZGVzKGVudGl0eSBhcyBMZWdhY3lDb250ZXh0RW50aXR5KSkgcmV0dXJuIG51bGxcbiAgICBjb25zdCBjb250ZXh0TmFtZSA9XG4gICAgICBlbnRpdHkgPT09ICd0YXNrJyA/IHNlc3Npb25NZXRhLnRhc2tOYW1lIDogZW50aXR5ID09PSAncHJvamVjdCcgPyBzZXNzaW9uTWV0YS5wcm9qZWN0TmFtZSA6IHNlc3Npb25NZXRhLmNsaWVudE5hbWVcbiAgICByZXR1cm4geyBlbnRpdHlUeXBlOiBlbnRpdHkgYXMgTGVnYWN5Q29udGV4dEVudGl0eSwgY29udGV4dE5hbWU6IGNvbnRleHROYW1lIHx8ICcnIH1cbiAgfSwgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgc2Vzc2lvbk1ldGFdKVxuXG4gIC8vIE1hcmNhIGVsIGFnZW50ZSBkZSBsYSBjb252ZXJzYWNpw7NuIGxlZ2FjeSBwYXJhIHF1ZSBoZWFkZXIsIHNlbGVjdG9yIHkgYXZhdGFyIG11ZXN0cmVuIGVsIGxvZ29cbiAgLy8gTUFJQSB5IGVsIG5vbWJyZSB0YWNoYWRvIChhZ2VudGUgb2Jzb2xldG8pLCBzaW4gZGVwZW5kZXIgZGVsIGB0eXBlYCByZXN1ZWx0byBkZSBsYSBzZXNpw7NuIHZpZWphLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsZWdhY3lDb250ZXh0U2Vzc2lvbiAmJiBhZ2VudCAmJiAhYWdlbnQuaXNfbGVnYWN5X2NvbnRleHQpIHtcbiAgICAgIHNlbGVjdEFnZW50KHsgLi4uYWdlbnQsIGlzX2xlZ2FjeV9jb250ZXh0OiB0cnVlIH0pXG4gICAgfVxuICB9LCBbbGVnYWN5Q29udGV4dFNlc3Npb24sIGFnZW50LCBzZWxlY3RBZ2VudF0pXG5cbiAgLy8gQWJyZSB1biBjaGF0IG51ZXZvIGNvbiBlbCBvcmNoZXN0cmF0b3Igc2V0ZWFuZG8gZWwgY29udGV4dG8gZGVsIGNsb25lIGxlZ2FjeSAobWlzbW8gY3JpdGVyaW9cbiAgLy8gcXVlIGNsaWNrZWFyIHVuIGNvbnRleHRvIHJlY2llbnRlIGVuIGVsIGhvbWUg4oaSIHBhc28gMiBjb24gRkFRcy9hY2Npb25lcyBkZSBlc2UgY29udGV4dG8pLlxuICBjb25zdCBoYW5kbGVDb250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzZXNzaW9uTWV0YSkgcmV0dXJuXG4gICAgY29uc3Qge1xuICAgICAgYWdlbnRFbnRpdHksXG4gICAgICBwcm9qZWN0SWQ6IHBJZCxcbiAgICAgIHByb2plY3ROYW1lOiBwTmFtZSxcbiAgICAgIGNsaWVudElkOiBjSWQsXG4gICAgICBjbGllbnROYW1lOiBjTmFtZSxcbiAgICAgIHRhc2tJZDogdElkLFxuICAgICAgdGFza05hbWU6IHROYW1lLFxuICAgIH0gPSBzZXNzaW9uTWV0YVxuXG4gICAgY29uc3Qgb3JjaGVzdHJhdG9yID0gYWdlbnRzLmRhdGEuZmluZCgoYTogQWdlbnQpID0+IGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicpXG4gICAgaWYgKCFvcmNoZXN0cmF0b3IpIHJldHVyblxuXG4gICAgLy8gUmVzZXQgZGVsIGNoYXQg4oaSIGNvbnZlcnNhY2nDs24gbnVldmFcbiAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uPy4oKVxuICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcblxuICAgIC8vIFNldGVhciBjb250ZXh0byAobWlzbW8gY3JpdGVyaW8gcXVlIGhhbmRsZVNlbGVjdFJlY2VudENvbnRleHQgZGVsIGhvbWUpXG4gICAgc2V0VGFzaz8uKG51bGwpXG4gICAgc2V0UHJvamVjdChudWxsKVxuICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG5cbiAgICBpZiAoYWdlbnRFbnRpdHkgPT09ICdjbGllbnQnICYmIGNJZCAhPSBudWxsKSB7XG4gICAgICBzZXRDbGllbnQ/Lih7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0pXG4gICAgfSBlbHNlIGlmIChhZ2VudEVudGl0eSA9PT0gJ3Byb2plY3QnICYmIHBJZCAhPSBudWxsKSB7XG4gICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgaWQ6IHBJZCxcbiAgICAgICAgbmFtZTogcE5hbWUgfHwgJycsXG4gICAgICAgIC4uLihjSWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IGNJZCwgY2xpZW50OiB7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0gfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBzZXRDaGlwc1Byb2plY3QoeyBwcm9qZWN0SWQ6IFN0cmluZyhwSWQpLCBwcm9qZWN0TmFtZTogcE5hbWUgfHwgJycsIGNsaWVudE5hbWU6IGNOYW1lIHx8ICcnIH0pXG4gICAgfSBlbHNlIGlmIChhZ2VudEVudGl0eSA9PT0gJ3Rhc2snICYmIHRJZCAhPSBudWxsKSB7XG4gICAgICBzZXRUYXNrPy4oe1xuICAgICAgICBpZDogdElkLFxuICAgICAgICBuYW1lOiB0TmFtZSB8fCAnJyxcbiAgICAgICAgLi4uKHBJZCAhPSBudWxsID8geyBwcm9qZWN0SWQ6IHBJZCB9IDoge30pLFxuICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBpZiAoY0lkICE9IG51bGwpIHNldENsaWVudD8uKHsgaWQ6IGNJZCwgbmFtZTogY05hbWUgfHwgJycgfSlcbiAgICAgIGlmIChwSWQgIT0gbnVsbCkge1xuICAgICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgICBpZDogcElkLFxuICAgICAgICAgIG5hbWU6IHBOYW1lIHx8ICcnLFxuICAgICAgICAgIC4uLihjSWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IGNJZCwgY2xpZW50OiB7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0gfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHsgcHJvamVjdElkOiBTdHJpbmcocElkKSwgcHJvamVjdE5hbWU6IHBOYW1lIHx8ICcnLCBjbGllbnROYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEFnZW50KG9yY2hlc3RyYXRvcilcbiAgICBzZXRTZXNzaW9uTWV0YShudWxsKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICB9LCBbc2Vzc2lvbk1ldGEsIGFnZW50cy5kYXRhLCBzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCBzZXRDaGlwc1Byb2plY3QsIHN0b3BHZW5lcmF0aW9uRnVuY3Rpb25dKVxuXG4gIGNvbnN0IHNob3dOZXdDaGF0ID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXRcbiAgY29uc3QgaGlkZUhlYWRlckFnZW50U2VsZWN0b3IgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHNcbiAgY29uc3QgaXNNeUFnZW50c1NlY3Rpb24gPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHNcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIjogc29sbyBwYXJhIGVsIG9yY2hlc3RyYXRvci5cbiAgLy8gLSBFbiBlbCBjaGF0OiBkaXNwb25pYmxlIGVuIHRvZGFzIGxhcyBzZWNjaW9uZXMgKGhlYWRlciB5IHByb2plY3QvY2xpZW50L3Rhc2spLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvIHBpbmVhZG8pOiBlbiBlbCBoZWFkZXIgc2llbXByZTsgZW5cbiAgLy8gICBwcm9qZWN0L2NsaWVudC90YXNrIHNvbG8gc2kgZWwgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKHBhc8OzIHBvciBlbCBzZWxlY3RvciBkZVxuICAvLyAgIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBlbCBwYXNvIDEgKHNpbiBjb250ZXh0bykgTk8gc2UgbXVlc3RyYS5cbiAgY29uc3QgaGFzUGlubmVkQ29udGV4dCA9ICEhKHRhc2s/LmlkIHx8IGNoaXBzUHJvamVjdD8ucHJvamVjdElkIHx8IGNsaWVudD8uaWQgfHwgcHJvamVjdD8uaWQpXG4gIGNvbnN0IGlzQ2hhdFZpZXcgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdFxuICBjb25zdCBpc0hvbWVTdGVwMiA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGhhc1Bpbm5lZENvbnRleHRcbiAgY29uc3QgaXNIZWFkZXJIb21lU3RlcDIgPSBpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGlzSG9tZVN0ZXAyXG4gIGNvbnN0IGlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyID0gIWlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgaXNIb21lU3RlcDIgJiYgZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uXG4gIGNvbnN0IHNob3dCYWNrQnV0dG9uID1cbiAgICBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiZcbiAgICAhaGFzRXJyb3IgJiZcbiAgICAhbG9hZGluZyAmJlxuICAgIChpc0NoYXRWaWV3IHx8IGlzSGVhZGVySG9tZVN0ZXAyIHx8IGlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyKVxuICBjb25zdCBoYW5kbGVPcGVuTWFya2V0cGxhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNsZWFyQWdlbnQoKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teUFnZW50cylcbiAgfSwgW2NsZWFyQWdlbnRdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Ta2lsbHMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teVNraWxscylcbiAgICBoYW5kbGVHZXRTa2lsbHMoKVxuICB9LCBbaGFuZGxlR2V0U2tpbGxzXSlcblxuICBjb25zdCBoYW5kbGVHb1RvTWFpYWtlciA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBsZXQgbWFpYWtlckFnZW50ID0gYWdlbnRzLmRhdGEuZmluZCgoYTogQWdlbnQpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGEpKVxuICAgIGlmICghbWFpYWtlckFnZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPWNsb25lJmVudGl0eT1nbG9iYWwmbGFuZz0ke21hcENPUkxhbmcoaTE4bi5sYW5ndWFnZSl9YCxcbiAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgIG1haWFrZXJBZ2VudCA9IChkYXRhLmRhdGEgfHwgW10pLmZpbmQoKGE6IEFnZW50KSA9PiBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudChhKSlcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICBzZXRUYXNrPy4obnVsbClcbiAgICBzZWxlY3RBZ2VudChtYWlha2VyQWdlbnQpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQoKVxuICAgIH1cbiAgfSwgW2FnZW50cy5kYXRhLCBpMThuLmxhbmd1YWdlLCBzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrXSlcbiAgY29uc3QgaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMgPSB1c2VDYWxsYmFjayhcbiAgICAoYWdlbnRJZDogc3RyaW5nKSA9PiB7XG4gICAgICByZW1vdmVBZ2VudChhZ2VudElkKVxuICAgICAgaWYgKGFnZW50Py5pZCA9PT0gYWdlbnRJZCkge1xuICAgICAgICBzZWxlY3RGaXJzdEFnZW50KGFnZW50SWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWdlbnQ/LmlkLCByZW1vdmVBZ2VudCwgc2VsZWN0Rmlyc3RBZ2VudF1cbiAgKVxuXG4gIC8vIEVsIGZvb3RlciAoaW5wdXQpIHNlIG9jdWx0YSBzb2xvIGVuIGVsIGhvbWUgbWFya2V0cGxhY2UgZGUgTWFpYWtlciAoYnJvd3NlIGRlIGFnZW50ZXMpLlxuICAvLyBFbCBob21lIGRlbCBvcmNoZXN0cmF0b3Igc8OtIHBlcm1pdGUgZXNjcmliaXIsIGFzw60gcXVlIG1hbnRpZW5lIGVsIGZvb3Rlci5cbiAgY29uc3QgaXNNYWlha2VyQ3JlYXRvckhvbWUgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiBpc01haWFrZXJBZ2VudFNlbGVjdGVkXG5cbiAgY29uc3QgbW9kYWxQYW5lbCA9IChcbiAgICA8PlxuICAgICAge3ZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24sIHVzZXIpICYmICFpc0Zsb2F0aW5nID8gKFxuICAgICAgICA8U2lkZWJhclxuICAgICAgICAgIG9uR29Ub0NoYXQ9e2dvVG9DaGF0fVxuICAgICAgICAgIG9uRXJyb3I9eygpID0+IHNldFNpZGViYXJIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICBoYW5kbGVHb1RvSG9tZT17aGFuZGxlR29Ib21lfVxuICAgICAgICAgIGhhbmRsZU9wZW5NYXJrZXRwbGFjZT17aGFuZGxlT3Blbk1hcmtldHBsYWNlfVxuICAgICAgICAgIHNob3dOZXdDaGF0PXtzaG93TmV3Q2hhdH1cbiAgICAgICAgICByZWZldGNoQ2hhdHM9e3JlZmV0Y2hDaGF0c31cbiAgICAgICAgICBoYW5kbGVTZXRSZWZldGNoQ2hhdHM9e3NldFJlZmV0Y2hDaGF0c31cbiAgICAgICAgICBoYXNFcnJvcj17c2lkZWJhckhhc0Vycm9yfVxuICAgICAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmPXtyZXNldFNlbGVjdGVkQ2hhdFJlZn1cbiAgICAgICAgICBhZ2VudHNOYXZBY3RpdmU9e3NpZGViYXJBZ2VudHNOYXZBY3RpdmV9XG4gICAgICAgICAgaGFuZGxlT3BlblNraWxscz17aGFuZGxlT3BlblNraWxsc31cbiAgICAgICAgICBpc0xlZ2FjeUNvbnRleHRTZXNzaW9uPXshIWxlZ2FjeUNvbnRleHRTZXNzaW9ufVxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8U0NDQUlNQ29udGVudCBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfT5cbiAgICAgICAgPENoYXRBSU1vZGFsSGVhZGVyXG4gICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICBvbkxheW91dE1vZGVDaGFuZ2U9e2hhbmRsZUxheW91dE1vZGVDaGFuZ2V9XG4gICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgIGRyYWdnYWJsZT17aXNGbG9hdGluZ31cbiAgICAgICAgICBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuICAgICAgICAgIG9uRHJhZ01vdmU9e2hhbmRsZURyYWdNb3ZlfVxuICAgICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgICBoYW5kbGVDbG9zZT17aGFuZGxlQ2xvc2VNb2RhbH1cbiAgICAgICAgICBhZ2VudHM9e2FnZW50cy5kYXRhfVxuICAgICAgICAgIGhhc0Vycm9yPXshIWFnZW50RXJyb3J9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBsb2FkaW5nTW9yZT17bG9hZGluZ01vcmV9XG4gICAgICAgICAgaGFzTW9yZT17YWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgIGhhbmRsZVJlc2V0Q2hhdD17aGFuZGxlUmVzZXRDaGF0fVxuICAgICAgICAgIG9uQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgbG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgIHNvcnRBZ2VudHNMaXN0PXtzb3J0QWdlbnRzTGlzdH1cbiAgICAgICAgICBpc015QWdlbnRzU2VjdGlvbj17aXNNeUFnZW50c1NlY3Rpb259XG4gICAgICAgICAgaXNNYWlha2VyU2VjdGlvbj17aXNNYWlha2VyQ3JlYXRvckhvbWV9XG4gICAgICAgICAgaGlkZUFnZW50U2VsZWN0b3I9e2hpZGVIZWFkZXJBZ2VudFNlbGVjdG9yfVxuICAgICAgICAgIHNob3dCYWNrQnV0dG9uPXtzaG93QmFja0J1dHRvbn1cbiAgICAgICAgICBvbkJhY2s9e2hhbmRsZUJhY2t9XG4gICAgICAgIC8+XG4gICAgICAgIHtoYXNFcnJvciA/IChcbiAgICAgICAgICA8TUFJQUVycm9yIC8+XG4gICAgICAgICkgOiB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uLCB1c2VyKSA/IChcbiAgICAgICAgICA8Q2hhdEFJQ29udGVudFxuICAgICAgICAgICAgY3VycmVudE9wdGlvbj17Y29tcHV0ZWRDdXJyZW50T3B0aW9ufVxuICAgICAgICAgICAgaGFuZGxlcnM9e3sgLi4uaGFuZGxlcnMsIGNoYXQ6IHN0YXJ0Q2hhdCwgaG9tZTogaGFuZGxlcnMuaG9tZSwgaGFuZGxlR29Ib21lIH19XG4gICAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICAgIHJlZnM9e3sgdXNlckluaXRpYWxNZXNzYWdlLCBpbml0aWFsQ2hhdElkIH19XG4gICAgICAgICAgICBvblNlbmRNZXNzYWdlUmVhZHk9e2hhbmRsZVNlbmRNZXNzYWdlUmVhZHl9XG4gICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICBmbG9hdGluZz17aXNGbG9hdGluZ31cbiAgICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgICBsb2FkaW5nQWdlbnRzPXtsb2FkaW5nfVxuICAgICAgICAgICAgb25EZWxldGVBZ2VudD17aGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHN9XG4gICAgICAgICAgICBvbkZhdm9yaXRlQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgICBoYXNNb3JlQWdlbnRzPXshIWFnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICAgIG9uTG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgICAgb25Hb1RvTWFpYWtlcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgICBza2lsbHM9e3NraWxsc31cbiAgICAgICAgICAgIGxvYWRpbmdTa2lsbHM9e2xvYWRpbmdTa2lsbHN9XG4gICAgICAgICAgICBvbkRlbGV0ZVNraWxsPXtyZW1vdmVTa2lsbH1cbiAgICAgICAgICAgIG9uU2VhcmNoQWdlbnRzPXtzZWFyY2hDdXN0b21BZ2VudHN9XG4gICAgICAgICAgICBzZWFyY2hMb2FkaW5nQWdlbnRzPXtzZWFyY2hMb2FkaW5nfVxuICAgICAgICAgICAgYWdlbnRFcnJvcj17YWdlbnRFcnJvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxQcm9qZWN0U3VtbWFyeUNvbnRlbnQgb25SZXN0YXJ0U3VtbWFyeT17aGFuZGxlcnMuaG9tZX0gLz5cbiAgICAgICAgKX1cbiAgICAgICAgeygoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgISFhZ2VudHM/LmRhdGE/Lmxlbmd0aCkgfHxcbiAgICAgICAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkgJiZcbiAgICAgICAgICAhaXNNYWlha2VyQ3JlYXRvckhvbWUgJiZcbiAgICAgICAgICAhaGFzRXJyb3IgJiZcbiAgICAgICAgICAhbG9hZGluZyAmJlxuICAgICAgICAgIHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24sIHVzZXIpICYmIChcbiAgICAgICAgICAgIDxDaGF0QWlNb2RhbEZvb3RlclxuICAgICAgICAgICAgICBhZ2VudD17YWdlbnR9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbmRNZXNzYWdlPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgICAgaGFuZGxlU3RvcEdlbmVyYXRpb249e3N0b3BHZW5lcmF0aW9uRnVuY3Rpb259XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgaXNXcml0aW5nPXtpc1dyaXRpbmd9XG4gICAgICAgICAgICAgIGNoYXRJZD17aW5pdGlhbENoYXRJZH1cbiAgICAgICAgICAgICAgbmV3Q2hhdEtleT17bmV3Q2hhdEtleX1cbiAgICAgICAgICAgICAgdG9vbHRpcFpJbmRleD17dG9vbHRpcFpJbmRleH1cbiAgICAgICAgICAgICAgbGVnYWN5Q29udGV4dFNlc3Npb249e2xlZ2FjeUNvbnRleHRTZXNzaW9ufVxuICAgICAgICAgICAgICBvbkNvbnRpbnVlSW5OZXdDaGF0PXtoYW5kbGVDb250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXR9XG4gICAgICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8L1NDQ0FJTUNvbnRlbnQ+XG4gICAgPC8+XG4gIClcblxuICBjb25zdCBjb250ZW50V3JhcHBlciA9IChcbiAgICA8U0NDQUlNQ29udGVudFdyYXBwZXIgZXhwYW5kZWQ9e2V4cGFuZGVkfSBmbG9hdGluZz17aXNGbG9hdGluZ30gcmVmPXtjb250ZW50V3JhcHBlclJlZn0+XG4gICAgICB7bW9kYWxQYW5lbH1cbiAgICAgIHtzaG93Q2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbCAmJiAoXG4gICAgICAgIDxDbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsXG4gICAgICAgICAgb25DbG9zZT17aGFuZGxlRGlzbWlzc0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWx9XG4gICAgICAgICAgb25Db25maXJtPXtoYW5kbGVDb25maXJtQ2xvc2VXaGlsZUdlbmVyYXRpbmd9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvU0NDQUlNQ29udGVudFdyYXBwZXI+XG4gIClcblxuICByZXR1cm4gKFxuICAgIHNlbGVjdG9yICYmXG4gICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFNDQ0FJTVdyYXBwZXJcbiAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICBkcmFnUG9zaXRpb249e3Jlc29sdmVkRHJhZ1Bvc2l0aW9ufVxuICAgICAgICBlbGV2YXRlZD17c2VjdGlvbiA9PT0gJ3Rhc2snfVxuICAgICAgPlxuICAgICAgICA8RmxvYXRpbmdQYW5lbE1vdGlvbiB0aWx0PXt0aWx0TW90aW9ufSBleHBhbmRlZD17ZXhwYW5kZWR9PlxuICAgICAgICAgIHtjb250ZW50V3JhcHBlcn1cbiAgICAgICAgPC9GbG9hdGluZ1BhbmVsTW90aW9uPlxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIChcbiAgICAgICAgICA8QWJtQWdlbnRNb2RhbFxuICAgICAgICAgICAgYWRkQWdlbnQ9e2FkZEFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnQ9e3VwZGF0ZUFnZW50fVxuICAgICAgICAgICAgcmVtb3ZlQWdlbnQ9e3JlbW92ZUFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIHNlbGVjdEZpcnN0QWdlbnQ9e3NlbGVjdEZpcnN0QWdlbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNQZXJtaXNzaW9ucyAmJiAoXG4gICAgICAgICAgPEFibVNraWxsTW9kYWwgYWRkU2tpbGw9e2FkZFNraWxsfSB1cGRhdGVTa2lsbEluTGlzdD17dXBkYXRlU2tpbGxJbkxpc3R9IHJlbW92ZVNraWxsPXtyZW1vdmVTa2lsbH0gLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNQZXJtaXNzaW9ucyAmJiA8QWJtU2tpbGxHZW5lcmF0ZU1vZGFsIC8+fVxuICAgICAgICA8U25hY2tiYXIgLz5cbiAgICAgIDwvU0NDQUlNV3JhcHBlcj4sXG4gICAgICBzZWxlY3RvclxuICAgIClcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBRUVBLFdBQVcsRUFDWEMsT0FBTyxFQUNQQyxRQUFRLEVBQ1JDLE1BQU0sRUFDTkMsU0FBUyxFQUNUQyxlQUFlLFFBRVYsT0FBTztBQUNkLE9BQU9DLFFBQVEsTUFBTSxXQUFXO0FBQ2hDLE9B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
|
|
1141
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9DaGF0QUkiLCJNQUlBRXJyb3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdldFNraWxscyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIkFibVNraWxsTW9kYWwiLCJBYm1Ta2lsbEdlbmVyYXRlTW9kYWwiLCJDbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsIiwiU0VDVElPTlMiLCJTQ0NBSU1Db250ZW50IiwiU0NDQUlNQ29udGVudFdyYXBwZXIiLCJTQ0NBSU1NaW5pbWl6ZWRIaWRlIiwiU0NDQUlNV3JhcHBlciIsIk1haWFNaW5pbWl6ZWRQaWxsIiwiZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4IiwicmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUiLCJzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUiLCJGbG9hdGluZ1BhbmVsTW90aW9uIiwidXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJ2YWxpZGF0ZUlzTWFpYSIsImlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IiwidXNlRmFxc1N0b3JlIiwiZ2V0Q2hhdHNTdG9yZVN0YXRlIiwidXNlQ2hhdHNTdG9yZSIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwicmVhZE1pbmltaXplZFN0YXRlIiwid3JpdGVNaW5pbWl6ZWRTdGF0ZSIsInVzZVNlc3Npb25zU3RvcmUiLCJpc0FjdGl2ZVNlc3Npb25TdGF0dXMiLCJmZXRjaE1haWEiLCJtYXBDT1JMYW5nIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUyIsImlzR2xvYmFsTWFpYVNlY3Rpb24iLCJzZWN0aW9uIiwicmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbiIsImFnZW50VHlwZSIsImN1cnJlbnRPcHRpb24iLCJob21lT3B0aW9uIiwiSURfTU9EQUxfQ0hBVF9BR0VOVCIsInZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlIiwidXNlciIsIkJvb2xlYW4iLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiQ2hhdEFJTW9kYWwiLCJfcmVmIiwiX3VzZXIkcGVybWlzc2lvbnMiLCJfdXNlciRwZXJtaXNzaW9uczIiLCJfdXNlciRwZXJtaXNzaW9uczMiLCJfYWdlbnRzJGRhdGEiLCJoYW5kbGVDbG9zZSIsIl91c2VUcmFuc2xhdGlvbiIsImFibUFnZW50IiwiaTE4biIsImFtcGxpdHVkRXZlbnQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzaG93Q2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbCIsInNldFNob3dDbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsIiwiX3VzZVN0YXRlMyIsImlkIiwibWluaW1pemVkIiwiX3VzZVN0YXRlNCIsImlzTWluaW1pemVkIiwic2V0SXNNaW5pbWl6ZWQiLCJzZXRDaGF0Vmlld1Zpc2libGUiLCJzdGF0ZSIsInVucmVhZENvdW50IiwiaGFzQWN0aXZlU3RyZWFtIiwiT2JqZWN0IiwidmFsdWVzIiwibWV0YSIsInNvbWUiLCJzdGF0dXMiLCJjaGF0SWRCZWZvcmVNaW5pbWl6ZVJlZiIsImNoYXRJZCIsImdvVG9DaGF0UmVmIiwiaGFuZGxlTWluaW1pemUiLCJhY3RpdmVDaGF0SWQiLCJjdXJyZW50IiwiaGFuZGxlUmVzdG9yZUZyb21NaW5pbWl6ZWQiLCJfZ2V0Q2hhdHNTdG9yZVN0YXRlIiwiY2hhdHMiLCJmaXJzdFVucmVhZCIsImZpbmQiLCJjaGF0IiwiaXNSZWFkIiwidGFyZ2V0Iiwic2Vzc2lvbkV4dGVybmFsSWQiLCJfZ29Ub0NoYXRSZWYkY3VycmVudCIsImNhbGwiLCJoYW5kbGVDbG9zZUZyb21NaW5pbWl6ZWQiLCJnZXRBY3RpdmVDb3VudCIsImdldFN0YXRlIiwiY2xlYXJGYXFzIiwiX3VzZVN0YXRlNSIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsIl91c2VTdGF0ZTYiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJzZXRVc2VySW5pdGlhbE1lc3NhZ2UiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImluaXRpYWxDaGF0SWQiLCJzZXRJbml0aWFsQ2hhdElkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJuZXdDaGF0S2V5Iiwic2V0TmV3Q2hhdEtleSIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlc3Npb25NZXRhIiwic2V0U2Vzc2lvbk1ldGEiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwic2VuZE1lc3NhZ2VGdW5jdGlvbiIsInNldFNlbmRNZXNzYWdlRnVuY3Rpb24iLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0Iiwic3RvcEdlbmVyYXRpb25GdW5jdGlvbiIsInNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb24iLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwiaXNTdHJlYW1pbmciLCJzZXRJc1N0cmVhbWluZyIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJpc1dyaXRpbmciLCJzZXRJc1dyaXRpbmciLCJoYW5kbGVDbG9zZU1vZGFsIiwiaGFuZGxlRGlzbWlzc0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwiLCJoYW5kbGVDb25maXJtQ2xvc2VXaGlsZUdlbmVyYXRpbmciLCJhYm9ydEFsbCIsIl91c2VTdGF0ZTE5IiwiX3VzZVN0YXRlMjAiLCJyZWZldGNoQ2hhdHMiLCJzZXRSZWZldGNoQ2hhdHMiLCJfdXNlU3RhdGUyMSIsImhvbWUiLCJfdXNlU3RhdGUyMiIsInNldEN1cnJlbnRPcHRpb24iLCJfdXNlU3RhdGUyMyIsIl91c2VTdGF0ZTI0IiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIl91c2VTdGF0ZTI1IiwiX3VzZVN0YXRlMjYiLCJkaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJwcmV2SGFzUGlubmVkQ29udGV4dFJlZiIsImhhbmRsZXJzIiwiX3VzZVN0YXRlMjciLCJfdXNlU3RhdGUyOCIsInNpZGViYXJIYXNFcnJvciIsInNldFNpZGViYXJIYXNFcnJvciIsInJlc2V0U2VsZWN0ZWRDaGF0UmVmIiwibGFuZyIsImxhbmd1YWdlIiwibG9jYWxlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RBZ2VudCIsImNsZWFyQWdlbnQiLCJhZ2VudCIsInByb2plY3QiLCJjbGllbnQiLCJ0YXNrIiwiY2hpcHNQcm9qZWN0IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0IiwiYmFubmVyRW50cnlGYXEiLCJzZXRUYXNrIiwidG9vbHRpcFpJbmRleCIsIl91c2VHZXRBZ2VudHMiLCJoYW5kbGVHb0hvbWUiLCJhZ2VudHMiLCJsb2FkaW5nIiwibG9hZGluZ01vcmUiLCJhZ2VudEVycm9yIiwiZXJyb3IiLCJoYW5kbGVHZXRBZ2VudHMiLCJsb2FkTW9yZUFnZW50cyIsInNlYXJjaEN1c3RvbUFnZW50cyIsInNlYXJjaExvYWRpbmciLCJhZGRBZ2VudCIsInJlbW92ZUFnZW50IiwidXBkYXRlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInNvcnRBZ2VudHNMaXN0IiwiX3VzZUdldFNraWxscyIsInNraWxscyIsImxvYWRpbmdTa2lsbHMiLCJoYW5kbGVHZXRTa2lsbHMiLCJhZGRTa2lsbCIsInVwZGF0ZVNraWxsSW5MaXN0IiwicmVtb3ZlU2tpbGwiLCJpc01BSUEiLCJ1c2VySGFzUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNyZWF0ZSIsImVkaXQiLCJjb21wdXRlZEN1cnJlbnRPcHRpb24iLCJpc0dsb2JhbFNwZWNpYWxpc3QiLCJlbnRpdHkiLCJpc1Byb2plY3RTcGVjaWFsaXN0IiwiaXNDbGllbnRTcGVjaWFsaXN0IiwiaXNNYWlha2VyIiwibXlBZ2VudHMiLCJteVNraWxscyIsInR5cGUiLCJzaG91bGRTaG93UHJvamVjdFNlbGVjdG9yIiwic2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yIiwicHJvamVjdFNlbGVjdG9yIiwiY2xpZW50U2VsZWN0b3IiLCJuYW1lIiwiaXNNYWlha2VyQWdlbnRTZWxlY3RlZCIsInNpZGViYXJBZ2VudHNOYXZBY3RpdmUiLCJhZ2VudHNGZXRjaGVkUmVmIiwic2VsZWN0b3IiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJjb25jYXQiLCJfdXNlU3RhdGUyOSIsIl91c2VTdGF0ZTMwIiwibGF5b3V0TW9kZSIsInNldExheW91dE1vZGUiLCJoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlIiwibW9kZSIsImV4cGFuZGVkIiwiaXNGbG9hdGluZyIsImNvbnRlbnRXcmFwcGVyUmVmIiwiX3VzZVN0YXRlMzEiLCJfdXNlU3RhdGUzMiIsImRyYWdQb3NpdGlvbiIsInNldERyYWdQb3NpdGlvbiIsIl91c2VGbG9hdGluZ1BhbmVsRHJhZyIsInRpbHRNb3Rpb24iLCJzdGFydFBvaW50ZXJUcmFja2luZyIsInNhbXBsZVBvaW50ZXJNb3ZlIiwiZW5kUG9pbnRlclRyYWNraW5nIiwiZHJhZ1N0YXRlUmVmIiwiY2xhbXBEcmFnUG9zaXRpb24iLCJ4IiwieSIsImNvbnRlbnRXcmFwcGVyIiwiX2NvbnRlbnRXcmFwcGVyJGdldEJvIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJvZmZzZXQiLCJtYXhYIiwiTWF0aCIsIm1heCIsImlubmVyV2lkdGgiLCJtYXhZIiwiaW5uZXJIZWlnaHQiLCJtaW4iLCJwcmV2IiwicGFkIiwiaGFuZGxlRHJhZ0VuZCIsImV2ZW50IiwiX2RyYWdTdGF0ZVJlZiRjdXJyZW50IiwicG9pbnRlcklkIiwiYm9keSIsInN0eWxlIiwidXNlclNlbGVjdCIsImN1cnNvciIsImhhbmRsZURyYWdNb3ZlIiwiZHJhZ1N0YXRlIiwiY2xpZW50WCIsImNsaWVudFkiLCJuZXh0UG9zaXRpb24iLCJvZmZzZXRYIiwib2Zmc2V0WSIsInJlc29sdmVkRHJhZ1Bvc2l0aW9uIiwiaGFuZGxlRHJhZ1N0YXJ0IiwiYnV0dG9uIiwiY2xvc2VzdCIsInJlY3QiLCJpbml0aWFsUG9zaXRpb24iLCJsZWZ0IiwidG9wIiwicG9pbnRlck9mZnNldFgiLCJwb2ludGVyT2Zmc2V0WSIsImN1cnJlbnRUYXJnZXQiLCJzZXRQb2ludGVyQ2FwdHVyZSIsInByZXZlbnREZWZhdWx0IiwiYWlDaGF0RHJhZ2dhYmxlIiwic3RhcnRDaGF0IiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiY29udGV4dERhdGEiLCJfb2JqZWN0U3ByZWFkIiwibGVuZ3RoIiwiYmFubmVyRmFxQXV0b1NlbnRSZWYiLCJfYmFubmVyRW50cnlGYXEkZmFxVGkiLCJlbnRpdHlSZWFkeSIsImZhcVRpdGxlIiwidHJpbSIsInVuZGVmaW5lZCIsImdvVG9DaGF0Iiwic2VsZWN0ZWRBZ2VudCIsImRhdGEiLCJhZ2VudEl0ZW0iLCJhZ2VudElkIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiaGFuZGxlU2VuZE1lc3NhZ2VSZWFkeSIsInNlbmRNZXNzYWdlIiwic3RvcEdlbmVyYXRpb24iLCJzdHJlYW1pbmciLCJ3cml0aW5nIiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJpc19kZWxldGVkIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsImhhc19ub3RfYWNjZXNzIiwicHJvamVjdF9kZWxldGVkIiwiaGFuZGxlUmVzZXRDaGF0IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0Iiwic3RvcCIsImhhbmRsZUJhY2siLCJ0byIsImFpQ2hhdEJhY2siLCJwaW5uZWQiLCJwcm9qZWN0SWQiLCJ3YXNQaW5uZWQiLCJvbk1lcmdlQ3JlYXRlZEFnZW50IiwiZXZ0IiwiX3JlZjMiLCJkZXRhaWwiLCJuZXh0QWdlbnQiLCJuYXZpZ2F0ZUhvbWUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uU3luY0VkaXRlZEFnZW50IiwiX3JlZjQiLCJvcGVuQ2hhdFZpZXciLCJvcGVuSG9tZSIsIm9wZW5OZXdDaGF0V2l0aEFnZW50IiwiX2RldGFpbCRwcm9qZWN0IiwiX2RldGFpbCRjbGllbnQiLCJfcmVmNSIsIm9uU2Vzc2lvbk1ldGEiLCJfcmVmNiIsImxlZ2FjeUNvbnRleHRTZXNzaW9uIiwiYWdlbnRFbnRpdHkiLCJpbmNsdWRlcyIsImNvbnRleHROYW1lIiwidGFza05hbWUiLCJwcm9qZWN0TmFtZSIsImNsaWVudE5hbWUiLCJlbnRpdHlUeXBlIiwiaXNfbGVnYWN5X2NvbnRleHQiLCJoYW5kbGVDb250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQiLCJwSWQiLCJwTmFtZSIsImNJZCIsImNsaWVudElkIiwiY05hbWUiLCJ0SWQiLCJ0YXNrSWQiLCJ0TmFtZSIsIm9yY2hlc3RyYXRvciIsImEiLCJTdHJpbmciLCJzaG93TmV3Q2hhdCIsImhpZGVIZWFkZXJBZ2VudFNlbGVjdG9yIiwiaXNNeUFnZW50c1NlY3Rpb24iLCJoYXNQaW5uZWRDb250ZXh0IiwiaXNDaGF0VmlldyIsImlzSG9tZVN0ZXAyIiwiaXNIZWFkZXJIb21lU3RlcDIiLCJpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiIsInNob3dCYWNrQnV0dG9uIiwiaGFuZGxlT3Blbk1hcmtldHBsYWNlIiwiaGFuZGxlT3BlblNraWxscyIsImhhbmRsZUdvVG9NYWlha2VyIiwiX2NhbGxlZTIiLCJtYWlha2VyQWdlbnQiLCJyZXNwb25zZSIsIl90IiwiX2NvbnRleHQyIiwicGF0aCIsIm1ldGhvZCIsInNlbnQiLCJqc29uIiwiYWJydXB0IiwiaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMiLCJpc01haWFrZXJDcmVhdG9ySG9tZSIsIm1vZGFsUGFuZWwiLCJjaGlsZHJlbiIsIm9uR29Ub0NoYXQiLCJvbkVycm9yIiwiaGFuZGxlR29Ub0hvbWUiLCJoYW5kbGVTZXRSZWZldGNoQ2hhdHMiLCJhZ2VudHNOYXZBY3RpdmUiLCJpc0xlZ2FjeUNvbnRleHRTZXNzaW9uIiwiZmxvYXRpbmciLCJvbkxheW91dE1vZGVDaGFuZ2UiLCJkcmFnZ2FibGUiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJoYXNNb3JlIiwiaGFzX21vcmUiLCJvbkFnZW50VXBkYXRlIiwiaXNNYWlha2VyU2VjdGlvbiIsImhpZGVBZ2VudFNlbGVjdG9yIiwib25CYWNrIiwicmVmcyIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsImxvYWRpbmdBZ2VudHMiLCJvbkRlbGV0ZUFnZW50Iiwib25GYXZvcml0ZUFnZW50VXBkYXRlIiwiaGFzTW9yZUFnZW50cyIsImxvYWRpbmdNb3JlQWdlbnRzIiwib25Mb2FkTW9yZUFnZW50cyIsIm9uR29Ub01haWFrZXIiLCJvbkRlbGV0ZVNraWxsIiwib25TZWFyY2hBZ2VudHMiLCJzZWFyY2hMb2FkaW5nQWdlbnRzIiwib25SZXN0YXJ0U3VtbWFyeSIsImhhbmRsZVN0b3BHZW5lcmF0aW9uIiwib25Db250aW51ZUluTmV3Q2hhdCIsInJlZiIsIm9uQ2xvc2UiLCJvbkNvbmZpcm0iLCJjcmVhdGVQb3J0YWwiLCJlbGV2YXRlZCIsIiRtaW5pbWl6ZWQiLCIkaGlkZGVuIiwidGlsdCIsIm9uUmVzdG9yZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNb2RhbC9DaGF0QUlNb2RhbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1uby11c2VsZXNzLWZyYWdtZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHtcbiAgUmVmT2JqZWN0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHVzZVJlZixcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IGNhbkFjY2Vzc1RvQ2hhdEFJIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Blcm1pc3Npb25zJ1xuaW1wb3J0IHsgTUFJQUVycm9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQUVycm9yJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5cbmltcG9ydCB7IENoYXRBSUNvbnRlbnQgfSBmcm9tICcuLi9DaGF0QUlDb250ZW50J1xuaW1wb3J0IHsgYnVpbGRIYW5kbGVycywgb3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJy4uL1NpZGViYXInXG5pbXBvcnQgeyB1c2VHZXRBZ2VudHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9nZXRBZ2VudHMnXG5pbXBvcnQgeyB1c2VHZXRTa2lsbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9nZXRTa2lsbHMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0LCB0eXBlIFNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgQ2hhdEFJTW9kYWxIZWFkZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxIZWFkZXIvQ2hhdEFpTW9kYWxIZWFkZXInXG5pbXBvcnQgeyBTbmFja2JhciB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9TbmFja0Jhci9TbmFja2JhcidcbmltcG9ydCB7IFByb2plY3RTdW1tYXJ5Q29udGVudCB9IGZyb20gJy4uL1Byb2plY3RTdW1tYXJ5Q29udGVudCdcbmltcG9ydCB7IEFibUFnZW50TW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtQWdlbnRNb2RhbC9BYm1BZ2VudE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1Ta2lsbE1vZGFsL0FibVNraWxsTW9kYWwnXG5pbXBvcnQgeyBBYm1Ta2lsbEdlbmVyYXRlTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtU2tpbGxHZW5lcmF0ZU1vZGFsL0FibVNraWxsR2VuZXJhdGVNb2RhbCdcbmltcG9ydCB7IENsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQ2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IFNDQ0FJTUNvbnRlbnQsIFNDQ0FJTUNvbnRlbnRXcmFwcGVyLCBTQ0NBSU1NaW5pbWl6ZWRIaWRlLCBTQ0NBSU1XcmFwcGVyIH0gZnJvbSAnLi9DaGF0QUlNb2RhbC5zdHlsZXMnXG5pbXBvcnQgeyBNYWlhTWluaW1pemVkUGlsbCB9IGZyb20gJy4vY29tcG9uZW50cy9NYWlhTWluaW1pemVkUGlsbCdcbmltcG9ydCB7XG4gIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCxcbiAgTWFpYUNoYXRNb2RhbExheW91dE1vZGUsXG4gIHJlc29sdmVJbml0aWFsTWFpYUNoYXRMYXlvdXRNb2RlLFxuICBzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUsXG59IGZyb20gJy4vbGF5b3V0J1xuaW1wb3J0IHsgRmxvYXRpbmdQYW5lbE1vdGlvbiwgdXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IH0gZnJvbSAnLi9mbG9hdGluZ1BhbmVsTW90aW9uJ1xuaW1wb3J0IHsgQ2hhdEFpTW9kYWxGb290ZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxGb290ZXInXG5pbXBvcnQgeyB2YWxpZGF0ZUlzTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzL3ZhbGlkYXRlSXNNYWlhJ1xuaW1wb3J0IHsgaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2xpZW50J1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Rhc2snXG5pbXBvcnQgeyB1c2VGYXFzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VGYXFzU3RvcmUnXG5pbXBvcnQgeyBnZXRDaGF0c1N0b3JlU3RhdGUsIHVzZUNoYXRzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VDaGF0c1N0b3JlJ1xuaW1wb3J0IHR5cGUgeyBDaGF0TGlzdEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9jaGF0c1N0b3JlLnR5cGVzJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbU1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtTWFuYWdlcidcbmltcG9ydCB7IHJlYWRNaW5pbWl6ZWRTdGF0ZSwgd3JpdGVNaW5pbWl6ZWRTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL21haWFNaW5pbWl6ZWRQZXJzaXN0ZW5jZSdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgaXNBY3RpdmVTZXNzaW9uU3RhdHVzIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvbnMudHlwZXMnXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL2NsaWVudCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuXG50eXBlIENoYXRBSU1vZGFsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBoYW5kbGVDbG9zZT86ICgpID0+IHZvaWRcbiAgcGFyZW50UmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PlxufVxuXG4vKiogTWV0YWRhdGEgZGUgbGEgc2Vzc2lvbiBhYmllcnRhIChlbWl0aWRhIHBvciB1c2VDaGF0TWVzc2FnZXMgYWwgY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuKS4gKi9cbnR5cGUgU2Vzc2lvbk1ldGEgPSB7XG4gIGNoYXRJZDogc3RyaW5nXG4gIGFnZW50VHlwZT86IHN0cmluZ1xuICBhZ2VudEVudGl0eT86IHN0cmluZ1xuICBwcm9qZWN0SWQ/OiBudW1iZXJcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmdcbiAgY2xpZW50SWQ/OiBudW1iZXJcbiAgY2xpZW50TmFtZT86IHN0cmluZ1xuICB0YXNrSWQ/OiBudW1iZXJcbiAgdGFza05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTEVHQUNZX0NPTlRFWFRfRU5USVRJRVMgPSBbJ3Byb2plY3QnLCAndGFzaycsICdjbGllbnQnXSBhcyBjb25zdFxudHlwZSBMZWdhY3lDb250ZXh0RW50aXR5ID0gKHR5cGVvZiBMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUylbbnVtYmVyXVxuXG50eXBlIEFpQ2hhdEJhY2tEZXN0aW5hdGlvbiA9ICdnbG9iYWxfY29udGV4dF9ob21lJyB8ICd0YXNrX2hvbWUnIHwgJ3BsYW5uZXJfaG9tZScgfCAncHJvamVjdF9ob21lJyB8ICdjbGllbnRfaG9tZSdcblxuLyoqIEhvbWUgZ2xvYmFsIGRlbCBvcmNoZXN0cmF0b3IgKHNvbG8gaGVhZGVyKS4gUGxhbm5lciBlcyBob21lIGRlIEZVQXMsIG5vIGRlIGNvbnRleHRvcy4gKi9cbmNvbnN0IGlzR2xvYmFsTWFpYVNlY3Rpb24gPSAoc2VjdGlvbjogU2VjdGlvbik6IGJvb2xlYW4gPT4gc2VjdGlvbiA9PT0gJ2hlYWRlcidcblxuY29uc3QgcmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbiA9IChcbiAgc2VjdGlvbjogU2VjdGlvbixcbiAgYWdlbnRUeXBlOiBBZ2VudFsndHlwZSddIHwgdW5kZWZpbmVkLFxuICBjdXJyZW50T3B0aW9uOiBzdHJpbmcsXG4gIGhvbWVPcHRpb246IHN0cmluZ1xuKTogQWlDaGF0QmFja0Rlc3RpbmF0aW9uID0+IHtcbiAgaWYgKGlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgYWdlbnRUeXBlID09PSAnb3JjaGVzdHJhdG9yJyAmJiBjdXJyZW50T3B0aW9uID09PSBob21lT3B0aW9uKSB7XG4gICAgcmV0dXJuICdnbG9iYWxfY29udGV4dF9ob21lJ1xuICB9XG4gIGlmIChzZWN0aW9uID09PSAndGFzaycpIHJldHVybiAndGFza19ob21lJ1xuICBpZiAoc2VjdGlvbiA9PT0gJ3BsYW5uZXInKSByZXR1cm4gJ3BsYW5uZXJfaG9tZSdcbiAgaWYgKHNlY3Rpb24gPT09ICdwcm9qZWN0JykgcmV0dXJuICdwcm9qZWN0X2hvbWUnXG4gIGlmIChzZWN0aW9uID09PSAnY2xpZW50JykgcmV0dXJuICdjbGllbnRfaG9tZSdcbiAgcmV0dXJuICdnbG9iYWxfY29udGV4dF9ob21lJ1xufVxuXG5leHBvcnQgY29uc3QgSURfTU9EQUxfQ0hBVF9BR0VOVCA9ICdtb2RhbHMtcG9ydGFsLW1haWEtY2hhdC1hZ2VudCdcblxuY29uc3QgdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUgPSAoc2VjdGlvbjogU2VjdGlvbiB8IG51bGwgfCB1bmRlZmluZWQsIHVzZXI6IFJldHVyblR5cGU8dHlwZW9mIHVzZVVzZXI+KSA9PiB7XG4gIGlmICghc2VjdGlvbiB8fCAhY2FuQWNjZXNzVG9DaGF0QUkodXNlcikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFBsYW5uZXIgeSB0YXNrIGFicmVuIHNpZW1wcmUgZWwgY2hhdCAoaG9tZSBkZSBGVUFzKSwgbnVuY2EgcmVzdW1lbiBkZSBwcm95ZWN0b3MuXG4gIGlmIChzZWN0aW9uID09PSAncGxhbm5lcicgfHwgc2VjdGlvbiA9PT0gJ3Rhc2snKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzZWN0aW9uID09PSAnaGVhZGVyJykge1xuICAgIHJldHVybiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgfHwgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpXG4gIH1cblxuICByZXR1cm4gQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTW9kYWwgPSAoeyBoYW5kbGVDbG9zZSB9OiBDaGF0QUlNb2RhbFByb3BzKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuYWJtQWdlbnRdKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuXG4gIGNvbnN0IFtzaG93Q2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbCwgc2V0U2hvd0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWxdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc01pbmltaXplZCwgc2V0SXNNaW5pbWl6ZWRdID0gdXNlU3RhdGUoKCkgPT4gcmVhZE1pbmltaXplZFN0YXRlKHVzZXIuaWQpLm1pbmltaXplZClcbiAgY29uc3Qgc2V0Q2hhdFZpZXdWaXNpYmxlID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRDaGF0Vmlld1Zpc2libGUpXG4gIGNvbnN0IHVucmVhZENvdW50ID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS51bnJlYWRDb3VudClcbiAgLy8gTG9zIFwiLi4uXCIgZGVsIHBpbGwgc2FsZW4gZGVsIG1vdG9yLCBubyBkZSBpc1N0cmVhbWluZy9pc1dyaXRpbmc6IGVzb3MgcmVmbGVqYW5cbiAgLy8gbGEgc2VzacOzbiBhY3RpdmEgeSBxdWVkYW4gc3RhbGUgY3VhbmRvIHVuYSByZXNwdWVzdGEgdGVybWluYSBlbiBiYWNrZ3JvdW5kLlxuICBjb25zdCBoYXNBY3RpdmVTdHJlYW0gPSB1c2VTZXNzaW9uc1N0b3JlKHN0YXRlID0+XG4gICAgT2JqZWN0LnZhbHVlcyhzdGF0ZS5tZXRhKS5zb21lKG1ldGEgPT4gaXNBY3RpdmVTZXNzaW9uU3RhdHVzKG1ldGEuc3RhdHVzKSlcbiAgKVxuXG4gIC8qKiBDaGF0IGFjdGl2byBhbCBtaW5pbWl6YXI6IGRlc3Rpbm8gZGUgZmFsbGJhY2sgYWwgcmVhYnJpciBzaSBubyBoYXkgc2luIGxlZXIuICovXG4gIGNvbnN0IGNoYXRJZEJlZm9yZU1pbmltaXplUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KHJlYWRNaW5pbWl6ZWRTdGF0ZSh1c2VyLmlkKS5jaGF0SWQpXG4gIC8qKiBnb1RvQ2hhdCBzZSBkZWZpbmUgbcOhcyBhYmFqbzsgZWwgcmVmIGV2aXRhIGRlcGVuZGVyIGRlbCBvcmRlbiBkZSBkZWNsYXJhY2nDs24uICovXG4gIGNvbnN0IGdvVG9DaGF0UmVmID0gdXNlUmVmPCgoY2hhdDogQ2hhdExpc3RJdGVtKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG5cbiAgLy8gTW9udMOzIHlhIG1pbmltaXphZG8gKG5hdmVnYWNpw7NuIG8gcmVmcmVzY28pOiBlbCBjaGF0IG5vIGVzdMOhIGEgbGEgdmlzdGEsIGFzw60gcXVlXG4gIC8vIGxhcyByZXNwdWVzdGFzIHF1ZSBsbGVndWVuIHRpZW5lbiBxdWUgcXVlZGFyIGNvbW8gbm8gbGXDrWRhcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNNaW5pbWl6ZWQpIHtcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICB9XG4gICAgLy8gU8OzbG8gYWwgbW9udGFyOiBkZXNwdcOpcyBsbyBtYW5lamFuIG1pbmltaXphci9yZXN0YXVyYXIuXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZU1pbmltaXplID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGNoYXRJZCA9IGdldENoYXRzU3RvcmVTdGF0ZSgpLmFjdGl2ZUNoYXRJZFxuICAgIGNoYXRJZEJlZm9yZU1pbmltaXplUmVmLmN1cnJlbnQgPSBjaGF0SWRcbiAgICB3cml0ZU1pbmltaXplZFN0YXRlKHVzZXIuaWQsIHsgbWluaW1pemVkOiB0cnVlLCBjaGF0SWQgfSlcbiAgICBzZXRJc01pbmltaXplZCh0cnVlKVxuICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgfSwgW3NldENoYXRWaWV3VmlzaWJsZSwgdXNlci5pZF0pXG5cbiAgY29uc3QgaGFuZGxlUmVzdG9yZUZyb21NaW5pbWl6ZWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNNaW5pbWl6ZWQoZmFsc2UpXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG4gICAgd3JpdGVNaW5pbWl6ZWRTdGF0ZSh1c2VyLmlkLCB7IG1pbmltaXplZDogZmFsc2UsIGNoYXRJZDogbnVsbCB9KVxuXG4gICAgLy8gRGVzdGlubyBzZWfDum4gbGEgVVM6IHByaW1lciBjaGF0IHNpbiBsZWVyIGVuIGVsIG9yZGVuIGRlbCBzaWRlYmFyOyBzaSBubyBoYXksXG4gICAgLy8gZWwgw7psdGltbyBjaGF0IGFjdGl2byBhbnRlcyBkZSBtaW5pbWl6YXIuXG4gICAgY29uc3QgeyBjaGF0cyB9ID0gZ2V0Q2hhdHNTdG9yZVN0YXRlKClcbiAgICBjb25zdCBmaXJzdFVucmVhZCA9IGNoYXRzLmZpbmQoY2hhdCA9PiBjaGF0LmlzUmVhZCA9PT0gZmFsc2UpXG4gICAgY29uc3QgdGFyZ2V0ID0gZmlyc3RVbnJlYWQgPz8gY2hhdHMuZmluZChjaGF0ID0+IGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQgPT09IGNoYXRJZEJlZm9yZU1pbmltaXplUmVmLmN1cnJlbnQpXG5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBnb1RvQ2hhdFJlZi5jdXJyZW50Py4odGFyZ2V0KVxuICAgIH1cbiAgfSwgW3NldENoYXRWaWV3VmlzaWJsZSwgdXNlci5pZF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VGcm9tTWluaW1pemVkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzTWluaW1pemVkKGZhbHNlKVxuICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuICAgIHdyaXRlTWluaW1pemVkU3RhdGUodXNlci5pZCwgeyBtaW5pbWl6ZWQ6IGZhbHNlLCBjaGF0SWQ6IG51bGwgfSlcblxuICAgIC8vIENvbiBnZW5lcmFjacOzbiBlbiBjdXJzbyBoYXkgcXVlIGNvbmZpcm1hci4gRWwgb3ZlcmxheSBkZWwgbW9kYWwgc2UgcG9zaWNpb25hXG4gICAgLy8gc29icmUgZWwgcGFuZWwgZGVsIGNoYXQsIHF1ZSBlc3TDoSBvY3VsdG8gYWwgbWluaW1pemFyLCBhc8OtIHF1ZSByZXN0YXVyYW1vc1xuICAgIC8vIHByaW1lcm8geSBtb3N0cmFtb3MgZWwgbW9kYWwgc29icmUgbGEgY29udmVyc2FjacOzbi5cbiAgICBpZiAoc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSA+IDApIHtcbiAgICAgIHNldFNob3dDbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsKHRydWUpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB1c2VGYXFzU3RvcmUuZ2V0U3RhdGUoKS5jbGVhckZhcXMoKVxuICAgIGhhbmRsZUNsb3NlPy4oKVxuICB9LCBbaGFuZGxlQ2xvc2UsIHNldENoYXRWaWV3VmlzaWJsZSwgdXNlci5pZF0pXG4gIGNvbnN0IFt1c2VySW5pdGlhbE1lc3NhZ2UsIHNldFVzZXJJbml0aWFsTWVzc2FnZV0gPSB1c2VTdGF0ZTx7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICB9Pih7XG4gICAgbWVzc2FnZTogJycsXG4gICAgYXR0YWNobWVudHM6IFtdLFxuICB9KVxuICBjb25zdCBbaW5pdGlhbENoYXRJZCwgc2V0SW5pdGlhbENoYXRJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbbmV3Q2hhdEtleSwgc2V0TmV3Q2hhdEtleV0gPSB1c2VTdGF0ZSgwKVxuICBjb25zdCBbc2Vzc2lvbk1ldGEsIHNldFNlc3Npb25NZXRhXSA9IHVzZVN0YXRlPFNlc3Npb25NZXRhIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbmRNZXNzYWdlRnVuY3Rpb24sIHNldFNlbmRNZXNzYWdlRnVuY3Rpb25dID0gdXNlU3RhdGU8XG4gICAgfCAoKFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgICBzY0lkPzogc3RyaW5nXG4gICAgICApID0+IHZvaWQpXG4gICAgfCBudWxsXG4gID4obnVsbClcbiAgY29uc3QgW3N0b3BHZW5lcmF0aW9uRnVuY3Rpb24sIHNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb25dID0gdXNlU3RhdGU8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2lzU3RyZWFtaW5nLCBzZXRJc1N0cmVhbWluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzV3JpdGluZywgc2V0SXNXcml0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlTW9kYWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gRWwgYXZpc28gc8OzbG8gYXBsaWNhIHNpIGhheSBzdHJlYW1zIHJlYWxtZW50ZSBlbiB2dWVsby4gaXNTdHJlYW1pbmcvaXNXcml0aW5nXG4gICAgLy8gcmVmbGVqYW4gbGEgc2VzacOzbiBhY3RpdmEgeSBxdWVkYW4gc3RhbGUgY3VhbmRvIGxhIHJlc3B1ZXN0YSB0ZXJtaW7DsyBlbiBiYWNrZ3JvdW5kLlxuICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID4gMCkge1xuICAgICAgc2V0U2hvd0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVzZUZhcXNTdG9yZS5nZXRTdGF0ZSgpLmNsZWFyRmFxcygpXG4gICAgaGFuZGxlQ2xvc2U/LigpXG4gIH0sIFtoYW5kbGVDbG9zZV0pXG5cbiAgY29uc3QgaGFuZGxlRGlzbWlzc0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2hvd0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwoZmFsc2UpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1DbG9zZVdoaWxlR2VuZXJhdGluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBDZXJyYXIgTUFJQSBjb3J0YSBUT0RBUyBsYXMgc2VzaW9uZXMgZW4gdnVlbG8sIG5vIHPDs2xvIGxhIHZpc2libGUuXG4gICAgc2Vzc2lvblN0cmVhbU1hbmFnZXIuYWJvcnRBbGwoKVxuICAgIHNldFNob3dDbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsKGZhbHNlKVxuICAgIHVzZUZhcXNTdG9yZS5nZXRTdGF0ZSgpLmNsZWFyRmFxcygpXG4gICAgaGFuZGxlQ2xvc2U/LigpXG4gIH0sIFtoYW5kbGVDbG9zZV0pXG5cbiAgY29uc3QgW3JlZmV0Y2hDaGF0cywgc2V0UmVmZXRjaENoYXRzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY3VycmVudE9wdGlvbiwgc2V0Q3VycmVudE9wdGlvbl0gPSB1c2VTdGF0ZShvcHRpb25zLmhvbWUpXG4gIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIC8vIEVuIHByb2plY3QvY2xpZW50L3Rhc2s6IGVsIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIGRlbCBvcmNoZXN0cmF0b3IgKGxvIGxpbXBpw7MgeSBwYXPDsyBwb3JcbiAgLy8gZWwgc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcykuIEhhYmlsaXRhIGVsIGJvdMOzbiBcInZvbHZlclwiIGVuIGVsIGhvbWUgcGFzbyAyIGRlIGVzYXNcbiAgLy8gc2VjY2lvbmVzLiBTZSByZXNldGVhIGFsIGNlcnJhci9yZWFicmlyIGVsIG1vZGFsIChlbCBjb21wb25lbnRlIHNlIGRlc21vbnRhKS5cbiAgY29uc3QgW2RpZFJlc2V0Q29udGV4dEluU2VjdGlvbiwgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBwcmV2SGFzUGlubmVkQ29udGV4dFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaGFuZGxlcnMgPSB1c2VNZW1vKCgpID0+IGJ1aWxkSGFuZGxlcnMoc2V0Q3VycmVudE9wdGlvbiwgc2V0SGFzRXJyb3IpLCBbXSlcbiAgY29uc3QgW3NpZGViYXJIYXNFcnJvciwgc2V0U2lkZWJhckhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCByZXNldFNlbGVjdGVkQ2hhdFJlZiA9IHVzZVJlZjwoKCkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBsYW5nID0gaTE4bi5sYW5ndWFnZSA9PT0gJ2JyJyA/ICdwdC1icicgOiBpMThuLmxhbmd1YWdlXG5cbiAgbW9tZW50LmxvY2FsZShsYW5nKVxuXG4gIGNvbnN0IHtcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBjbGVhckFnZW50LFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBiYW5uZXJFbnRyeUZhcSxcbiAgICBzZXRUYXNrLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgLy8gWi1pbmRleCBwYXJhIHRvb2x0aXBzIGVuIHNlY3Rpb24gJ3Rhc2snIChtb2RhbCBmbG90YW50ZSBlbGV2YWRvKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3Qge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yOiBhZ2VudEVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBzZWFyY2hDdXN0b21BZ2VudHMsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH0gPSB1c2VHZXRBZ2VudHMoeyBzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGhhbmRsZUdvSG9tZTogaGFuZGxlcnMuaG9tZSB9KVxuXG4gIGNvbnN0IHsgc2tpbGxzLCBsb2FkaW5nOiBsb2FkaW5nU2tpbGxzLCBoYW5kbGVHZXRTa2lsbHMsIGFkZFNraWxsLCB1cGRhdGVTa2lsbEluTGlzdCwgcmVtb3ZlU2tpbGwgfSA9IHVzZUdldFNraWxscygpXG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG5cbiAgY29uc3QgdXNlckhhc1Blcm1pc3Npb25zID1cbiAgICAodXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uY3JlYXRlIHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5lZGl0IHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5kZWxldGUpICYmXG4gICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcblxuICBjb25zdCBjb21wdXRlZEN1cnJlbnRPcHRpb24gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBpc0dsb2JhbFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCdcbiAgICBjb25zdCBpc1Byb2plY3RTcGVjaWFsaXN0ID0gaXNNQUlBICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PSBudWxsKVxuICAgIGNvbnN0IGlzQ2xpZW50U3BlY2lhbGlzdCA9IGlzTUFJQSAmJiBhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50J1xuICAgIGNvbnN0IGlzTWFpYWtlciA9IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGFnZW50KVxuXG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHMgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm15QWdlbnRzXG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHMgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm15U2tpbGxzXG4gICAgfVxuXG4gICAgLy8gRWwgb3JjaGVzdHJhdG9yIChNQUlBKSBtdWVzdHJhIHN1IGhvbWUgY29uIEZBUXMvYWNjaW9uZXMgZnJlY3VlbnRlczsgZWwgcmVzdG8gZGVcbiAgICAvLyBsb3MgZ2xvYmFsIHNwZWNpYWxpc3RzIChjbG9uZXMgZ2xvYmFsZXMgbm8tbWFpYWtlcikgc2lndWVuIHllbmRvIGRpcmVjdG8gYWwgY2hhdC5cbiAgICBpZiAoaXNHbG9iYWxTcGVjaWFsaXN0ICYmICFpc01haWFrZXIgJiYgYWdlbnQ/LnR5cGUgIT09ICdvcmNoZXN0cmF0b3InICYmIGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY2hhdFxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IgPSBjdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQgJiYgaXNQcm9qZWN0U3BlY2lhbGlzdCAmJiAhcHJvamVjdFxuICAgIGNvbnN0IHNob3VsZFNob3dDbGllbnRTZWxlY3RvciA9IGN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCAmJiBpc0NsaWVudFNwZWNpYWxpc3QgJiYgIWNsaWVudFxuXG4gICAgaWYgKHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnByb2plY3RTZWxlY3RvclxuICAgIH1cbiAgICBpZiAoc2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5jbGllbnRTZWxlY3RvclxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudE9wdGlvblxuICB9LCBbY3VycmVudE9wdGlvbiwgcHJvamVjdCwgY2xpZW50LCBpc01BSUEsIGFnZW50Py5lbnRpdHksIGFnZW50Py5uYW1lLCBhZ2VudD8udHlwZV0pXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oKCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpLCBbYWdlbnRdKVxuXG4gIGNvbnN0IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUgPSB1c2VNZW1vKCgpOiAnbWFpYWtlcicgfCAnbXlBZ2VudHMnIHwgJ215U2tpbGxzJyB8IG51bGwgPT4ge1xuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHMpIHJldHVybiAnbXlTa2lsbHMnXG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cykgcmV0dXJuICdteUFnZW50cydcbiAgICBpZiAoaXNNYWlha2VyQWdlbnRTZWxlY3RlZCkgcmV0dXJuICdtYWlha2VyJ1xuICAgIHJldHVybiBudWxsXG4gIH0sIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRdKVxuXG4gIC8qIFJlYWN0aXZhciBjb24gbGEgZmlsYSDigJxNaXMgYWdlbnRlc+KAnSBlbiBTaWRlYmFyOiBteUFnZW50c0NvdW50IHByb3BcbiAgY29uc3Qgc2lkZWJhck15QWdlbnRzQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWdlbnRzLmRhdGEuZmlsdGVyKFxuICAgICAgYSA9PiAhKGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgKGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYS5uYW1lIHx8ICcnKSkpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgLy8gVGFzayBwYW5lbCwgcGxhbm5lciB5IGJhbm5lciBkZSBwcm95ZWN0byBhYnJlbiBlbiBmbG90YW50ZSBwb3IgZGVmYXVsdCAobm8gdGFwYXIgZWwgY29udGV4dG8gZGV0csOhcykuXG4gIC8vIEZ1ZXJhIGRlIGVzb3MgY29udGV4dG9zIHNlIHJlc3BldGEgbGEgcHJlZmVyZW5jaWEgZ3VhcmRhZGEgZW4gbG9jYWxTdG9yYWdlLlxuICBjb25zdCBbbGF5b3V0TW9kZSwgc2V0TGF5b3V0TW9kZV0gPSB1c2VTdGF0ZTxNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZT4oKCkgPT5cbiAgICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7IHNlY3Rpb24sIGJhbm5lckVudHJ5RmFxIH0pXG4gIClcblxuICBjb25zdCBoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlKG1vZGUpXG4gICAgc2V0TGF5b3V0TW9kZShtb2RlKVxuICB9LCBbXSlcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcbiAgY29uc3QgaXNGbG9hdGluZyA9IGxheW91dE1vZGUgPT09ICdmbG9hdGluZydcbiAgY29uc3QgY29udGVudFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtkcmFnUG9zaXRpb24sIHNldERyYWdQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsPihudWxsKVxuICBjb25zdCB7IHRpbHRNb3Rpb24sIHN0YXJ0UG9pbnRlclRyYWNraW5nLCBzYW1wbGVQb2ludGVyTW92ZSwgZW5kUG9pbnRlclRyYWNraW5nIH0gPVxuICAgIHVzZUZsb2F0aW5nUGFuZWxEcmFnVGlsdChpc0Zsb2F0aW5nKVxuICBjb25zdCBkcmFnU3RhdGVSZWYgPSB1c2VSZWY8e1xuICAgIHBvaW50ZXJJZDogbnVtYmVyXG4gICAgb2Zmc2V0WDogbnVtYmVyXG4gICAgb2Zmc2V0WTogbnVtYmVyXG4gIH0gfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGNsYW1wRHJhZ1Bvc2l0aW9uID0gdXNlQ2FsbGJhY2soKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250ZW50V3JhcHBlcikge1xuICAgICAgcmV0dXJuIHsgeCwgeSB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBjb250ZW50V3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IG9mZnNldCA9IDE2XG4gICAgY29uc3QgbWF4WCA9IE1hdGgubWF4KG9mZnNldCwgd2luZG93LmlubmVyV2lkdGggLSB3aWR0aCAtIG9mZnNldClcbiAgICBjb25zdCBtYXhZID0gTWF0aC5tYXgob2Zmc2V0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBoZWlnaHQgLSBvZmZzZXQpXG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogTWF0aC5taW4oTWF0aC5tYXgoeCwgb2Zmc2V0KSwgbWF4WCksXG4gICAgICB5OiBNYXRoLm1pbihNYXRoLm1heCh5LCBvZmZzZXQpLCBtYXhZKSxcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxheW91dE1vZGUgIT09ICdmbG9hdGluZycpIHtcbiAgICAgIHNldERyYWdQb3NpdGlvbihudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0RHJhZ1Bvc2l0aW9uKHByZXYgPT4ge1xuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgcmV0dXJuIGNsYW1wRHJhZ1Bvc2l0aW9uKHByZXYueCwgcHJldi55KVxuICAgICAgfVxuICAgICAgY29uc3QgcGFkID0gMTZcbiAgICAgIGNvbnN0IHggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpIC0gcGFkXG4gICAgICByZXR1cm4gY2xhbXBEcmFnUG9zaXRpb24oeCwgcGFkKVxuICAgIH0pXG4gIH0sIFtsYXlvdXRNb2RlLCBjbGFtcERyYWdQb3NpdGlvbl0pXG5cbiAgY29uc3QgaGFuZGxlRHJhZ0VuZCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBlbmRQb2ludGVyVHJhY2tpbmcoKVxuICAgICAgaWYgKGRyYWdTdGF0ZVJlZi5jdXJyZW50Py5wb2ludGVySWQgIT09IGV2ZW50LnBvaW50ZXJJZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZHJhZ1N0YXRlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnJ1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnJ1xuICAgIH0sXG4gICAgW2VuZFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdTdGF0ZSA9IGRyYWdTdGF0ZVJlZi5jdXJyZW50XG4gICAgICBpZiAoIWRyYWdTdGF0ZSB8fCBkcmFnU3RhdGUucG9pbnRlcklkICE9PSBldmVudC5wb2ludGVySWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNhbXBsZVBvaW50ZXJNb3ZlKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG5cbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGNsYW1wRHJhZ1Bvc2l0aW9uKGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUub2Zmc2V0WCwgZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5vZmZzZXRZKVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiB7XG4gICAgICAgIGlmIChwcmV2ICYmIHByZXYueCA9PT0gbmV4dFBvc2l0aW9uLnggJiYgcHJldi55ID09PSBuZXh0UG9zaXRpb24ueSkge1xuICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHRQb3NpdGlvblxuICAgICAgfSlcbiAgICB9LFxuICAgIFtjbGFtcERyYWdQb3NpdGlvbiwgc2FtcGxlUG9pbnRlck1vdmVdXG4gIClcblxuICBjb25zdCByZXNvbHZlZERyYWdQb3NpdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChsYXlvdXRNb2RlICE9PSAnZmxvYXRpbmcnKSB7XG4gICAgICByZXR1cm4gZHJhZ1Bvc2l0aW9uXG4gICAgfVxuICAgIGlmIChkcmFnUG9zaXRpb24pIHtcbiAgICAgIHJldHVybiBkcmFnUG9zaXRpb25cbiAgICB9XG4gICAgY29uc3QgcGFkID0gMTZcbiAgICBjb25zdCB4ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCAtIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpIC0gcGFkIDogcGFkXG4gICAgcmV0dXJuIGNsYW1wRHJhZ1Bvc2l0aW9uKHgsIHBhZClcbiAgfSwgW2xheW91dE1vZGUsIGRyYWdQb3NpdGlvbiwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIWlzRmxvYXRpbmcgfHwgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICAgIGlmICh0YXJnZXQuY2xvc2VzdCgnYnV0dG9uLCBhLCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgW3JvbGU9XCJidXR0b25cIl0sIFtkYXRhLW5vLWRyYWc9XCJ0cnVlXCJdJykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgICAgaWYgKCFjb250ZW50V3JhcHBlcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVjdCA9IGNvbnRlbnRXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCBpbml0aWFsUG9zaXRpb24gPSByZXNvbHZlZERyYWdQb3NpdGlvbiA/PyBjbGFtcERyYWdQb3NpdGlvbihyZWN0LmxlZnQsIHJlY3QudG9wKVxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFggPSBldmVudC5jbGllbnRYIC0gaW5pdGlhbFBvc2l0aW9uLnhcbiAgICAgIGNvbnN0IHBvaW50ZXJPZmZzZXRZID0gZXZlbnQuY2xpZW50WSAtIGluaXRpYWxQb3NpdGlvbi55XG5cbiAgICAgIHNldERyYWdQb3NpdGlvbihpbml0aWFsUG9zaXRpb24pXG4gICAgICBkcmFnU3RhdGVSZWYuY3VycmVudCA9IHtcbiAgICAgICAgcG9pbnRlcklkOiBldmVudC5wb2ludGVySWQsXG4gICAgICAgIG9mZnNldFg6IHBvaW50ZXJPZmZzZXRYLFxuICAgICAgICBvZmZzZXRZOiBwb2ludGVyT2Zmc2V0WSxcbiAgICAgIH1cblxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICdub25lJ1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnZ3JhYmJpbmcnXG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXREcmFnZ2FibGUpXG4gICAgICBzdGFydFBvaW50ZXJUcmFja2luZyhldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBpc0Zsb2F0aW5nLCByZXNvbHZlZERyYWdQb3NpdGlvbiwgc3RhcnRQb2ludGVyVHJhY2tpbmddXG4gIClcblxuICBjb25zdCBzdGFydENoYXQgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZyxcbiAgICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApID0+IHtcbiAgICAgIGlmIChzaWRlYmFySGFzRXJyb3IpIHtcbiAgICAgICAgc2V0U2lkZWJhckhhc0Vycm9yKGZhbHNlKVxuICAgICAgfVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCAnJyxcbiAgICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzIHx8IFtdLFxuICAgICAgICAuLi4oZmFxSWQgPyB7IGZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKG1lbnRpb25zICYmIG1lbnRpb25zLmxlbmd0aCA+IDAgPyB7IG1lbnRpb25zIH0gOiB7fSksXG4gICAgICAgIC4uLihmdWFJZCA/IHsgZnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHNjSWQgPyB7IHNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNvbnRleHREYXRhID8geyBjb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIGhhbmRsZXJzLmNoYXQoKVxuICAgIH0sXG4gICAgW2hhbmRsZXJzLCBzaWRlYmFySGFzRXJyb3JdXG4gIClcblxuICBjb25zdCBiYW5uZXJGYXFBdXRvU2VudFJlZiA9IHVzZVJlZihmYWxzZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVudGl0eVJlYWR5ID0gc2VjdGlvbiA9PT0gJ3Byb2plY3QnID8gQm9vbGVhbihwcm9qZWN0Py5pZCkgOiBzZWN0aW9uID09PSAnY2xpZW50JyA/IEJvb2xlYW4oY2xpZW50Py5pZCkgOiB0cnVlXG5cbiAgICBpZiAoIWJhbm5lckVudHJ5RmFxPy5mYXFUaXRsZT8udHJpbSgpIHx8IGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQgfHwgbG9hZGluZyB8fCAhYWdlbnQ/LmlkIHx8ICFlbnRpdHlSZWFkeSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IHRydWVcbiAgICBzdGFydENoYXQoXG4gICAgICBiYW5uZXJFbnRyeUZhcS5mYXFUaXRsZSxcbiAgICAgIFtdLFxuICAgICAgYmFubmVyRW50cnlGYXEuZmFxSWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBiYW5uZXJFbnRyeUZhcS5jb250ZXh0RGF0YVxuICAgIClcbiAgfSwgW1xuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFJZCxcbiAgICBiYW5uZXJFbnRyeUZhcT8uZmFxVGl0bGUsXG4gICAgYmFubmVyRW50cnlGYXE/LmNvbnRleHREYXRhLFxuICAgIGxvYWRpbmcsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGFnZW50Py5lbnRpdHksXG4gICAgcHJvamVjdD8uaWQsXG4gICAgY2xpZW50Py5pZCxcbiAgICBzZWN0aW9uLFxuICAgIHN0YXJ0Q2hhdCxcbiAgXSlcblxuICBjb25zdCBnb1RvQ2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGF0OiBhbnkpID0+IHtcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQoY2hhdC5zZXNzaW9uRXh0ZXJuYWxJZClcbiAgICAgIGNvbnN0IHNlbGVjdGVkQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKGFnZW50SXRlbSA9PiBhZ2VudEl0ZW0uaWQgPT09IGNoYXQuYWdlbnRJZClcbiAgICAgIGlmIChzZWxlY3RlZEFnZW50KSB7XG4gICAgICAgIHNlbGVjdEFnZW50KHNlbGVjdGVkQWdlbnQpXG4gICAgICB9XG4gICAgICAvLyBEaXNwYXRjaCBldmVudCB0byBjbGVhciB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIGFnZW50cywgc2VsZWN0QWdlbnRdXG4gIClcblxuICBnb1RvQ2hhdFJlZi5jdXJyZW50ID0gZ29Ub0NoYXRcblxuICBjb25zdCBoYW5kbGVTZW5kTWVzc2FnZVJlYWR5ID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgc2VuZE1lc3NhZ2U6IChcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgICAgc2NJZD86IHN0cmluZ1xuICAgICAgKSA9PiB2b2lkLFxuICAgICAgc3RvcEdlbmVyYXRpb246ICgpID0+IHZvaWQsXG4gICAgICBzdHJlYW1pbmc6IGJvb2xlYW4sXG4gICAgICB3cml0aW5nOiBib29sZWFuXG4gICAgKSA9PiB7XG4gICAgICBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uKCgpID0+IHNlbmRNZXNzYWdlKVxuICAgICAgc2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbigoKSA9PiBzdG9wR2VuZXJhdGlvbilcbiAgICAgIHNldElzU3RyZWFtaW5nKHN0cmVhbWluZylcbiAgICAgIHNldElzV3JpdGluZyh3cml0aW5nKVxuICAgIH0sXG4gICAgW11cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAoc2VuZE1lc3NhZ2VGdW5jdGlvbiAmJiBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgICBzZW5kTWVzc2FnZUZ1bmN0aW9uKG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0Q2hhdChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbc2VuZE1lc3NhZ2VGdW5jdGlvbiwgc3RhcnRDaGF0LCBjb21wdXRlZEN1cnJlbnRPcHRpb24sIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUdvSG9tZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBTaSBlc3RhbW9zIGVuIHVuYSBjb252ZXJzYWNpw7NuIHkgdmFtb3MgYSBob21lLCByZXNldGVhciBpbml0aWFsQ2hhdElkIHkgaW5jcmVtZW50YXIgbmV3Q2hhdEtleVxuICAgIGlmIChjdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpIHtcbiAgICAgIC8vIE5vIGNvcnRhbW9zIGxhIGdlbmVyYWNpw7NuOiBsYSBzZXNpw7NuIHNpZ3VlIHJlc3BvbmRpZW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgLy8gTm8gYm9ycmFyIGVsIGNsaWVudGUgc2kgZXMgYWdlbnRlIGRlIGNsaWVudGVzIChpZ3VhbCBxdWUgZWwgcHJveWVjdG8gc2UgbWFudGllbmUpXG4gICAgICBpZiAoYWdlbnQ/LmVudGl0eSAhPT0gJ2NsaWVudCcpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH1cbiAgICAgIGlmIChzZWN0aW9uICE9PSAndGFzaycpIHtcbiAgICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgICghYWdlbnQgfHwgYWdlbnQ/LmlzX2RlbGV0ZWQgfHwgYWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgfHwgYWdlbnQ/Lmhhc19ub3RfYWNjZXNzIHx8IGFnZW50Py5wcm9qZWN0X2RlbGV0ZWQpICYmXG4gICAgICBhZ2VudHMuZGF0YS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBzZWxlY3RBZ2VudChhZ2VudHMuZGF0YVswXSlcbiAgICB9XG4gICAgLy8gT3JjaGVzdHJhdG9yIGVuIGhvbWUgZ2xvYmFsIChoZWFkZXIvcGxhbm5lcik6IGFsIGluaWNpYXIgdW4gY2hhdCBudWV2byBzZSBkZWJlIHZvbHZlciBhbCBwYXNvIDFcbiAgICAvLyAobGlzdGEgZGUgY29udGV4dG9zIHJlY2llbnRlcyksIHBvciBsbyBxdWUgaGF5IHF1ZSBsaW1waWFyIHRvZG8gZWwgY29udGV4dG8gcGluZWFkby5cbiAgICBpZiAoaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicpIHtcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrPy4obnVsbClcbiAgICB9XG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUgJiYgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gICAgfVxuICB9LCBbXG4gICAgb3B0aW9ucy5ob21lLFxuICAgIG9wdGlvbnMuY2hhdCxcbiAgICBjdXJyZW50T3B0aW9uLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBhZ2VudCxcbiAgICBhZ2VudHMsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0VGFzayxcbiAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLFxuICAgIHNlY3Rpb24sXG4gIF0pXG5cbiAgY29uc3QgaGFuZGxlUmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgLy8gRGlzcGF0Y2ggZXZlbnQgdG8gY2xlYXIgdGhlIGlucHV0IHRleHRhcmVhXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgaGFuZGxlR29Ib21lKClcbiAgfSwgW2hhbmRsZUdvSG9tZV0pXG5cbiAgLy8gQm90w7NuIFwidm9sdmVyXCIgZGVsIGhlYWRlciAoc29sbyBvcmNoZXN0cmF0b3IpOlxuICAvLyAtIERlc2RlIGVsIGNoYXQgKGhlYWRlciBvIHByb2plY3QvY2xpZW50L3Rhc2spOiBpbmljaWEgdW5hIGNvbnZlcnNhY2nDs24gbnVldmEgY29uc2VydmFuZG8gZWxcbiAgLy8gICBjb250ZXh0byBwaW5lYWRvIHkgdnVlbHZlIGFsIGhvbWUgKHBhc28gMiBjb24gRkFRcy9GVUFzKS5cbiAgLy8gLSBFbiBlbCBob21lIHBhc28gMiAoRkFRcy9GVUFzIGNvbiBjb250ZXh0byk6IGxpbXBpYSBlbCBjb250ZXh0byBwaW5lYWRvIHkgdnVlbHZlIGFsIHBhc28gMVxuICAvLyAgIChzZWxlY3RvciBkZSBjb250ZXh0b3MgcmVjaWVudGVzKS4gRW4gaGVhZGVyIHNpZW1wcmU7IGVuIHByb2plY3QvY2xpZW50L3Rhc2sgc29sbyBzaSBlbFxuICAvLyAgIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIChkaWRSZXNldENvbnRleHRJblNlY3Rpb24pLlxuICBjb25zdCBoYW5kbGVCYWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRvID0gcmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbihzZWN0aW9uLCBhZ2VudD8udHlwZSwgY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLmhvbWUpXG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0QmFjaywgeyB0byB9KVxuXG4gICAgLy8gRGVzZGUgZWwgY2hhdCDihpIgbnVldmEgY29udmVyc2FjacOzbiBTSU4gYm9ycmFyIGVsIGNvbnRleHRvIHBpbmVhZG8sIHZvbHZpZW5kbyBhbCBob21lLlxuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgLy8gTm8gY29ydGFtb3MgbGEgZ2VuZXJhY2nDs246IGxhIHNlc2nDs24gc2lndWUgcmVzcG9uZGllbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlICYmIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCkge1xuICAgICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50KClcbiAgICAgIH1cbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBIb21lIHBhc28gMiAoY29udGV4dG8gcGluZWFkbykg4oaSIGxpbXBpYXIgZWwgY29udGV4dG8geSB2b2x2ZXIgYWwgcGFzbyAxIChjb250ZXh0b3MgcmVjaWVudGVzKS5cbiAgICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgKGlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgfHwgZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKSkge1xuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgfVxuICB9LCBbXG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQ/LnR5cGUsXG4gICAgYW1wbGl0dWRFdmVudCxcbiAgICBvcHRpb25zLmhvbWUsXG4gICAgc3RvcEdlbmVyYXRpb25GdW5jdGlvbixcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uLFxuICAgIHNldFByb2plY3QsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFRhc2ssXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICBdKVxuXG4gIC8vIERldGVjdGEgZWwgcmVpbmljaW8gZGUgY29udGV4dG8gZW4gcHJvamVjdC9jbGllbnQvdGFzazogY29udGV4dG8gcGluZWFkbyDihpIgdmFjw61vIGNvbiBlbFxuICAvLyBvcmNoZXN0cmF0b3IgKHAuIGVqLiBhbCByZXNlbGVjY2lvbmFyIE1BSUEgZW4gZWwgbGlzdGFkbykuIFNvbG8gbGEgdHJhbnNpY2nDs24gY3VlbnRhLCBhc8OtIHVuYVxuICAvLyBhcGVydHVyYSBmcmVzY2EgKGNvbnRleHRvIHBpbmVhZG8gZGVzZGUgbGEgc2VjY2nDs24pIG5vIGxvIGFjdGl2YS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwaW5uZWQgPSAhISh0YXNrPy5pZCB8fCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCB8fCBjbGllbnQ/LmlkIHx8IHByb2plY3Q/LmlkKVxuICAgIGNvbnN0IHdhc1Bpbm5lZCA9IHByZXZIYXNQaW5uZWRDb250ZXh0UmVmLmN1cnJlbnRcbiAgICBwcmV2SGFzUGlubmVkQ29udGV4dFJlZi5jdXJyZW50ID0gcGlubmVkXG4gICAgaWYgKCFpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJyAmJiB3YXNQaW5uZWQgJiYgIXBpbm5lZCkge1xuICAgICAgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKHRydWUpXG4gICAgfVxuICB9LCBbdGFzaz8uaWQsIGNoaXBzUHJvamVjdD8ucHJvamVjdElkLCBjbGllbnQ/LmlkLCBwcm9qZWN0Py5pZCwgc2VjdGlvbiwgYWdlbnQ/LnR5cGVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGhhbmRsZUdldEFnZW50cygpXG4gICAgfVxuICB9LCBbaGFuZGxlR2V0QWdlbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uTWVyZ2VDcmVhdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmIChuZXh0QWdlbnQ/LmlkKSB7XG4gICAgICAgIGFkZEFnZW50KG5leHRBZ2VudCwgeyBuYXZpZ2F0ZUhvbWU6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCBvbk1lcmdlQ3JlYXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICB9XG4gIH0sIFthZGRBZ2VudF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblN5bmNFZGl0ZWRBZ2VudCA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGFnZW50OiBuZXh0QWdlbnQgfSA9IChldnQgYXMgQ3VzdG9tRXZlbnQ8eyBhZ2VudDogQWdlbnQgfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFuZXh0QWdlbnQ/LmlkKSByZXR1cm5cbiAgICAgIHVwZGF0ZUFnZW50KG5leHRBZ2VudClcbiAgICAgIGlmIChhZ2VudD8uaWQgPT09IG5leHRBZ2VudC5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChuZXh0QWdlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywgb25TeW5jRWRpdGVkQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywgb25TeW5jRWRpdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbdXBkYXRlQWdlbnQsIHNlbGVjdEFnZW50LCBhZ2VudD8uaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkNoYXRWaWV3ID0gKCkgPT4ge1xuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuY2hhdClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIEVsIMOtY29ubyBkZSBNQUlBIGRlbCBoZWFkZXIgbGxldmEgc2llbXByZSBhbCBIb21lLiBTaSBNQUlBIHlhIGVzdMOhIG1vbnRhZGEgcGVyb1xuICAgKiBtaW5pbWl6YWRhLCBlbCBob3N0IG5vIHB1ZWRlIHJlc29sdmVybG8gY2FtYmlhbmRvIGBpc09wZW5gICh5YSBlc3TDoSBlbiB0cnVlKSxcbiAgICogYXPDrSBxdWUgYXZpc2EgcG9yIGV2ZW50byB5IGFjw6EgcmVzdGF1cmFtb3MgeSB2YW1vcyBhbCBIb21lLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuSG9tZSA9ICgpID0+IHtcbiAgICAgIHNldElzTWluaW1pemVkKGZhbHNlKVxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG4gICAgICB3cml0ZU1pbmltaXplZFN0YXRlKHVzZXIuaWQsIHsgbWluaW1pemVkOiBmYWxzZSwgY2hhdElkOiBudWxsIH0pXG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4taG9tZScsIG9wZW5Ib21lKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4taG9tZScsIG9wZW5Ib21lKVxuICAgIH1cbiAgfSwgW3NldENoYXRWaWV3VmlzaWJsZSwgdXNlci5pZF0pXG5cbiAgLyoqIE1pc21vIGZsdWpvIHF1ZSBDaGF0QUlNeUFnZW50cy5oYW5kbGVVc2VBZ2VudCArIG9uQmFjayAoaGFuZGxlcnMuaG9tZSkuXG4gICAqICBFbCBkZXRhaWwgcHVlZGUgdHJhZXIgb3BjaW9uYWxtZW50ZSBgcHJvamVjdGAsIGBjbGllbnRgLCBgdGFza2AgcGFyYSBmbG93cyBxdWVcbiAgICogIG5lY2VzaXRhbiBwcmVzZXJ2YXIgY29udGV4dG8gKGVqLiBzZWxlY3RvciBkZSBhZ2VudGVzIGRlc2RlIHVuYSB0YXJlYSkuIFNpIG5vIHZpZW5lbixcbiAgICogIHNlIG1hbnRpZW5lIGVsIGNvbXBvcnRhbWllbnRvIG9yaWdpbmFsIGRlIGxpbXBpYXIgcHJvamVjdC9jbGllbnQuICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3Blbk5ld0NoYXRXaXRoQWdlbnQgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8e1xuICAgICAgICBhZ2VudDogQWdlbnRcbiAgICAgICAgcHJvamVjdD86IFByb2plY3QgfCBudWxsXG4gICAgICAgIGNsaWVudD86IENsaWVudCB8IG51bGxcbiAgICAgICAgdGFzaz86IFRhc2sgfCBudWxsXG4gICAgICB9PlxuICAgICAgY29uc3QgbmV4dEFnZW50ID0gZGV0YWlsPy5hZ2VudFxuICAgICAgaWYgKCFuZXh0QWdlbnQpIHJldHVyblxuXG4gICAgICBzZXRQcm9qZWN0KGRldGFpbD8ucHJvamVjdCA/PyBudWxsKVxuICAgICAgc2V0Q2xpZW50Py4oZGV0YWlsPy5jbGllbnQgPz8gbnVsbClcbiAgICAgIGlmIChkZXRhaWw/LnRhc2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRUYXNrPy4oZGV0YWlsLnRhc2spXG4gICAgICB9XG4gICAgICBzZWxlY3RBZ2VudChuZXh0QWdlbnQpXG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1uZXctY2hhdC13aXRoLWFnZW50Jywgb3Blbk5ld0NoYXRXaXRoQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1uZXctY2hhdC13aXRoLWFnZW50Jywgb3Blbk5ld0NoYXRXaXRoQWdlbnQpXG4gICAgfVxuICB9LCBbc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFza10pXG5cbiAgLy8gTWV0YWRhdGEgZGUgbGEgc2Vzc2lvbiBhYmllcnRhIChhZ2VudF90eXBlL2FnZW50X2VudGl0eSArIGNvbnRleHRvKSwgZW1pdGlkYSBwb3IgdXNlQ2hhdE1lc3NhZ2VzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uU2Vzc2lvbk1ldGEgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2dCBhcyBDdXN0b21FdmVudDxTZXNzaW9uTWV0YT5cbiAgICAgIGlmIChkZXRhaWwpIHNldFNlc3Npb25NZXRhKGRldGFpbClcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1jaGF0LXNlc3Npb24tbWV0YScsIG9uU2Vzc2lvbk1ldGEpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtY2hhdC1zZXNzaW9uLW1ldGEnLCBvblNlc3Npb25NZXRhKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gQWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuIGxpbXBpYW1vcyBsYSBtZXRhZGF0YTsgZWwgbG9hZCBkZSBsYSBudWV2YSBzZXNzaW9uIGxhIHZ1ZWx2ZSBhIGVtaXRpci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTZXNzaW9uTWV0YShudWxsKVxuICB9LCBbaW5pdGlhbENoYXRJZF0pXG5cbiAgLy8gQ2FydGVsIFwiY29udGludWFyIGVuIHVuIGNoYXQgbnVldm9cIjogc2UgbXVlc3RyYSBhbCBhYnJpciB1bmEgY29udmVyc2FjacOzbiBkZSB1biBjbG9uZSBsZWdhY3lcbiAgLy8gKGFnZW50X3R5cGUgPT09ICdjbG9uZScgY29uIGVudGl0eSBwcm9qZWN0L3Rhc2svY2xpZW50KS4gRWwgaW5wdXQgc2UgcmVlbXBsYXphIHBvciBlbCBjYXJ0ZWwuXG4gIGNvbnN0IGxlZ2FjeUNvbnRleHRTZXNzaW9uID0gdXNlTWVtbzx7IGVudGl0eVR5cGU6IExlZ2FjeUNvbnRleHRFbnRpdHk7IGNvbnRleHROYW1lOiBzdHJpbmcgfSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQpIHJldHVybiBudWxsXG4gICAgaWYgKCFzZXNzaW9uTWV0YSB8fCBzZXNzaW9uTWV0YS5hZ2VudFR5cGUgIT09ICdjbG9uZScpIHJldHVybiBudWxsXG4gICAgY29uc3QgZW50aXR5ID0gc2Vzc2lvbk1ldGEuYWdlbnRFbnRpdHlcbiAgICBpZiAoIWVudGl0eSB8fCAhTEVHQUNZX0NPTlRFWFRfRU5USVRJRVMuaW5jbHVkZXMoZW50aXR5IGFzIExlZ2FjeUNvbnRleHRFbnRpdHkpKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IGNvbnRleHROYW1lID1cbiAgICAgIGVudGl0eSA9PT0gJ3Rhc2snID8gc2Vzc2lvbk1ldGEudGFza05hbWUgOiBlbnRpdHkgPT09ICdwcm9qZWN0JyA/IHNlc3Npb25NZXRhLnByb2plY3ROYW1lIDogc2Vzc2lvbk1ldGEuY2xpZW50TmFtZVxuICAgIHJldHVybiB7IGVudGl0eVR5cGU6IGVudGl0eSBhcyBMZWdhY3lDb250ZXh0RW50aXR5LCBjb250ZXh0TmFtZTogY29udGV4dE5hbWUgfHwgJycgfVxuICB9LCBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBzZXNzaW9uTWV0YV0pXG5cbiAgLy8gTWFyY2EgZWwgYWdlbnRlIGRlIGxhIGNvbnZlcnNhY2nDs24gbGVnYWN5IHBhcmEgcXVlIGhlYWRlciwgc2VsZWN0b3IgeSBhdmF0YXIgbXVlc3RyZW4gZWwgbG9nb1xuICAvLyBNQUlBIHkgZWwgbm9tYnJlIHRhY2hhZG8gKGFnZW50ZSBvYnNvbGV0byksIHNpbiBkZXBlbmRlciBkZWwgYHR5cGVgIHJlc3VlbHRvIGRlIGxhIHNlc2nDs24gdmllamEuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxlZ2FjeUNvbnRleHRTZXNzaW9uICYmIGFnZW50ICYmICFhZ2VudC5pc19sZWdhY3lfY29udGV4dCkge1xuICAgICAgc2VsZWN0QWdlbnQoeyAuLi5hZ2VudCwgaXNfbGVnYWN5X2NvbnRleHQ6IHRydWUgfSlcbiAgICB9XG4gIH0sIFtsZWdhY3lDb250ZXh0U2Vzc2lvbiwgYWdlbnQsIHNlbGVjdEFnZW50XSlcblxuICAvLyBBYnJlIHVuIGNoYXQgbnVldm8gY29uIGVsIG9yY2hlc3RyYXRvciBzZXRlYW5kbyBlbCBjb250ZXh0byBkZWwgY2xvbmUgbGVnYWN5IChtaXNtbyBjcml0ZXJpb1xuICAvLyBxdWUgY2xpY2tlYXIgdW4gY29udGV4dG8gcmVjaWVudGUgZW4gZWwgaG9tZSDihpIgcGFzbyAyIGNvbiBGQVFzL2FjY2lvbmVzIGRlIGVzZSBjb250ZXh0bykuXG4gIGNvbnN0IGhhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXNlc3Npb25NZXRhKSByZXR1cm5cbiAgICBjb25zdCB7XG4gICAgICBhZ2VudEVudGl0eSxcbiAgICAgIHByb2plY3RJZDogcElkLFxuICAgICAgcHJvamVjdE5hbWU6IHBOYW1lLFxuICAgICAgY2xpZW50SWQ6IGNJZCxcbiAgICAgIGNsaWVudE5hbWU6IGNOYW1lLFxuICAgICAgdGFza0lkOiB0SWQsXG4gICAgICB0YXNrTmFtZTogdE5hbWUsXG4gICAgfSA9IHNlc3Npb25NZXRhXG5cbiAgICBjb25zdCBvcmNoZXN0cmF0b3IgPSBhZ2VudHMuZGF0YS5maW5kKChhOiBBZ2VudCkgPT4gYS50eXBlID09PSAnb3JjaGVzdHJhdG9yJylcbiAgICBpZiAoIW9yY2hlc3RyYXRvcikgcmV0dXJuXG5cbiAgICAvLyBSZXNldCBkZWwgY2hhdCDihpIgY29udmVyc2FjacOzbiBudWV2YSAobGEgYW50ZXJpb3Igc2lndWUgZW4gYmFja2dyb3VuZClcbiAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG5cbiAgICAvLyBTZXRlYXIgY29udGV4dG8gKG1pc21vIGNyaXRlcmlvIHF1ZSBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0IGRlbCBob21lKVxuICAgIHNldFRhc2s/LihudWxsKVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgaWYgKGFnZW50RW50aXR5ID09PSAnY2xpZW50JyAmJiBjSWQgIT0gbnVsbCkge1xuICAgICAgc2V0Q2xpZW50Py4oeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgIH0gZWxzZSBpZiAoYWdlbnRFbnRpdHkgPT09ICdwcm9qZWN0JyAmJiBwSWQgIT0gbnVsbCkge1xuICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgIGlkOiBwSWQsXG4gICAgICAgIG5hbWU6IHBOYW1lIHx8ICcnLFxuICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQsIGNsaWVudDogeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9IH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KHsgcHJvamVjdElkOiBTdHJpbmcocElkKSwgcHJvamVjdE5hbWU6IHBOYW1lIHx8ICcnLCBjbGllbnROYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgIH0gZWxzZSBpZiAoYWdlbnRFbnRpdHkgPT09ICd0YXNrJyAmJiB0SWQgIT0gbnVsbCkge1xuICAgICAgc2V0VGFzaz8uKHtcbiAgICAgICAgaWQ6IHRJZCxcbiAgICAgICAgbmFtZTogdE5hbWUgfHwgJycsXG4gICAgICAgIC4uLihwSWQgIT0gbnVsbCA/IHsgcHJvamVjdElkOiBwSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNJZCAhPSBudWxsID8geyBjbGllbnRJZDogY0lkIH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgaWYgKGNJZCAhPSBudWxsKSBzZXRDbGllbnQ/Lih7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0pXG4gICAgICBpZiAocElkICE9IG51bGwpIHtcbiAgICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgICAgaWQ6IHBJZCxcbiAgICAgICAgICBuYW1lOiBwTmFtZSB8fCAnJyxcbiAgICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQsIGNsaWVudDogeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7IHByb2plY3RJZDogU3RyaW5nKHBJZCksIHByb2plY3ROYW1lOiBwTmFtZSB8fCAnJywgY2xpZW50TmFtZTogY05hbWUgfHwgJycgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RBZ2VudChvcmNoZXN0cmF0b3IpXG4gICAgc2V0U2Vzc2lvbk1ldGEobnVsbClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgfSwgW3Nlc3Npb25NZXRhLCBhZ2VudHMuZGF0YSwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0LCBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSlcblxuICBjb25zdCBzaG93TmV3Q2hhdCA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiAhPT0gb3B0aW9ucy5jaGF0XG4gIGNvbnN0IGhpZGVIZWFkZXJBZ2VudFNlbGVjdG9yID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15U2tpbGxzXG4gIGNvbnN0IGlzTXlBZ2VudHNTZWN0aW9uID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15QWdlbnRzXG5cbiAgLy8gQm90w7NuIFwidm9sdmVyXCI6IHNvbG8gcGFyYSBlbCBvcmNoZXN0cmF0b3IuXG4gIC8vIC0gRW4gZWwgY2hhdDogZGlzcG9uaWJsZSBlbiB0b2RhcyBsYXMgc2VjY2lvbmVzIChoZWFkZXIgeSBwcm9qZWN0L2NsaWVudC90YXNrKS5cbiAgLy8gLSBFbiBlbCBob21lIHBhc28gMiAoRkFRcy9GVUFzIGNvbiBjb250ZXh0byBwaW5lYWRvKTogZW4gZWwgaGVhZGVyIHNpZW1wcmU7IGVuXG4gIC8vICAgcHJvamVjdC9jbGllbnQvdGFzayBzb2xvIHNpIGVsIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIChwYXPDsyBwb3IgZWwgc2VsZWN0b3IgZGVcbiAgLy8gICBjb250ZXh0b3MgcmVjaWVudGVzKS4gRW4gZWwgcGFzbyAxIChzaW4gY29udGV4dG8pIE5PIHNlIG11ZXN0cmEuXG4gIGNvbnN0IGhhc1Bpbm5lZENvbnRleHQgPSAhISh0YXNrPy5pZCB8fCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCB8fCBjbGllbnQ/LmlkIHx8IHByb2plY3Q/LmlkKVxuICBjb25zdCBpc0NoYXRWaWV3ID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXRcbiAgY29uc3QgaXNIb21lU3RlcDIgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiBoYXNQaW5uZWRDb250ZXh0XG4gIGNvbnN0IGlzSGVhZGVySG9tZVN0ZXAyID0gaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBpc0hvbWVTdGVwMlxuICBjb25zdCBpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiA9ICFpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGlzSG9tZVN0ZXAyICYmIGRpZFJlc2V0Q29udGV4dEluU2VjdGlvblxuICBjb25zdCBzaG93QmFja0J1dHRvbiA9XG4gICAgYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InICYmXG4gICAgIWhhc0Vycm9yICYmXG4gICAgIWxvYWRpbmcgJiZcbiAgICAoaXNDaGF0VmlldyB8fCBpc0hlYWRlckhvbWVTdGVwMiB8fCBpc1NlY3Rpb25SZXNldEhvbWVTdGVwMilcbiAgY29uc3QgaGFuZGxlT3Blbk1hcmtldHBsYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjbGVhckFnZW50KClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMubXlBZ2VudHMpXG4gIH0sIFtjbGVhckFnZW50XSlcblxuICBjb25zdCBoYW5kbGVPcGVuU2tpbGxzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMubXlTa2lsbHMpXG4gICAgaGFuZGxlR2V0U2tpbGxzKClcbiAgfSwgW2hhbmRsZUdldFNraWxsc10pXG5cbiAgY29uc3QgaGFuZGxlR29Ub01haWFrZXIgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgbGV0IG1haWFrZXJBZ2VudCA9IGFnZW50cy5kYXRhLmZpbmQoKGE6IEFnZW50KSA9PiBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudChhKSlcbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgICAgICAgIHBhdGg6IGBhZ2VudHM/YWdlbnRfdHlwZT1jbG9uZSZlbnRpdHk9Z2xvYmFsJmxhbmc9JHttYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpfWAsXG4gICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgICBtYWlha2VyQWdlbnQgPSAoZGF0YS5kYXRhIHx8IFtdKS5maW5kKChhOiBBZ2VudCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYSkpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbWFpYWtlckFnZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0UHJvamVjdChudWxsKVxuICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgc2V0VGFzaz8uKG51bGwpXG4gICAgc2VsZWN0QWdlbnQobWFpYWtlckFnZW50KVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50KClcbiAgICB9XG4gIH0sIFthZ2VudHMuZGF0YSwgaTE4bi5sYW5ndWFnZSwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFza10pXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUFnZW50RnJvbU15QWdlbnRzID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50SWQ6IHN0cmluZykgPT4ge1xuICAgICAgcmVtb3ZlQWdlbnQoYWdlbnRJZClcbiAgICAgIGlmIChhZ2VudD8uaWQgPT09IGFnZW50SWQpIHtcbiAgICAgICAgc2VsZWN0Rmlyc3RBZ2VudChhZ2VudElkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50Py5pZCwgcmVtb3ZlQWdlbnQsIHNlbGVjdEZpcnN0QWdlbnRdXG4gIClcblxuICAvLyBFbCBmb290ZXIgKGlucHV0KSBzZSBvY3VsdGEgc29sbyBlbiBlbCBob21lIG1hcmtldHBsYWNlIGRlIE1haWFrZXIgKGJyb3dzZSBkZSBhZ2VudGVzKS5cbiAgLy8gRWwgaG9tZSBkZWwgb3JjaGVzdHJhdG9yIHPDrSBwZXJtaXRlIGVzY3JpYmlyLCBhc8OtIHF1ZSBtYW50aWVuZSBlbCBmb290ZXIuXG4gIGNvbnN0IGlzTWFpYWtlckNyZWF0b3JIb21lID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgaXNNYWlha2VyQWdlbnRTZWxlY3RlZFxuXG4gIGNvbnN0IG1vZGFsUGFuZWwgPSAoXG4gICAgPD5cbiAgICAgIHt2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uLCB1c2VyKSAmJiAhaXNGbG9hdGluZyA/IChcbiAgICAgICAgPFNpZGViYXJcbiAgICAgICAgICBvbkdvVG9DaGF0PXtnb1RvQ2hhdH1cbiAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRTaWRlYmFySGFzRXJyb3IodHJ1ZSl9XG4gICAgICAgICAgaGFuZGxlR29Ub0hvbWU9e2hhbmRsZUdvSG9tZX1cbiAgICAgICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2U9e2hhbmRsZU9wZW5NYXJrZXRwbGFjZX1cbiAgICAgICAgICBzaG93TmV3Q2hhdD17c2hvd05ld0NoYXR9XG4gICAgICAgICAgcmVmZXRjaENoYXRzPXtyZWZldGNoQ2hhdHN9XG4gICAgICAgICAgaGFuZGxlU2V0UmVmZXRjaENoYXRzPXtzZXRSZWZldGNoQ2hhdHN9XG4gICAgICAgICAgaGFzRXJyb3I9e3NpZGViYXJIYXNFcnJvcn1cbiAgICAgICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZj17cmVzZXRTZWxlY3RlZENoYXRSZWZ9XG4gICAgICAgICAgYWdlbnRzTmF2QWN0aXZlPXtzaWRlYmFyQWdlbnRzTmF2QWN0aXZlfVxuICAgICAgICAgIGhhbmRsZU9wZW5Ta2lsbHM9e2hhbmRsZU9wZW5Ta2lsbHN9XG4gICAgICAgICAgaXNMZWdhY3lDb250ZXh0U2Vzc2lvbj17ISFsZWdhY3lDb250ZXh0U2Vzc2lvbn1cbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPFNDQ0FJTUNvbnRlbnQgZXhwYW5kZWQ9e2V4cGFuZGVkfSBmbG9hdGluZz17aXNGbG9hdGluZ30+XG4gICAgICAgIDxDaGF0QUlNb2RhbEhlYWRlclxuICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgb25MYXlvdXRNb2RlQ2hhbmdlPXtoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlfVxuICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICBkcmFnZ2FibGU9e2lzRmxvYXRpbmd9XG4gICAgICAgICAgb25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cbiAgICAgICAgICBvbkRyYWdNb3ZlPXtoYW5kbGVEcmFnTW92ZX1cbiAgICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG4gICAgICAgICAgaGFuZGxlQ2xvc2U9e2hhbmRsZUNsb3NlTW9kYWx9XG4gICAgICAgICAgaGFuZGxlTWluaW1pemU9e2hhbmRsZU1pbmltaXplfVxuICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgaGFzRXJyb3I9eyEhYWdlbnRFcnJvcn1cbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgIGxvYWRpbmdNb3JlPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICBoYXNNb3JlPXthZ2VudHMuaGFzX21vcmV9XG4gICAgICAgICAgaGFuZGxlUmVzZXRDaGF0PXtoYW5kbGVSZXNldENoYXR9XG4gICAgICAgICAgb25BZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICBsb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgc29ydEFnZW50c0xpc3Q9e3NvcnRBZ2VudHNMaXN0fVxuICAgICAgICAgIGlzTXlBZ2VudHNTZWN0aW9uPXtpc015QWdlbnRzU2VjdGlvbn1cbiAgICAgICAgICBpc01haWFrZXJTZWN0aW9uPXtpc01haWFrZXJDcmVhdG9ySG9tZX1cbiAgICAgICAgICBoaWRlQWdlbnRTZWxlY3Rvcj17aGlkZUhlYWRlckFnZW50U2VsZWN0b3J9XG4gICAgICAgICAgc2hvd0JhY2tCdXR0b249e3Nob3dCYWNrQnV0dG9ufVxuICAgICAgICAgIG9uQmFjaz17aGFuZGxlQmFja31cbiAgICAgICAgLz5cbiAgICAgICAge2hhc0Vycm9yID8gKFxuICAgICAgICAgIDxNQUlBRXJyb3IgLz5cbiAgICAgICAgKSA6IHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24sIHVzZXIpID8gKFxuICAgICAgICAgIDxDaGF0QUlDb250ZW50XG4gICAgICAgICAgICBjdXJyZW50T3B0aW9uPXtjb21wdXRlZEN1cnJlbnRPcHRpb259XG4gICAgICAgICAgICBoYW5kbGVycz17eyAuLi5oYW5kbGVycywgY2hhdDogc3RhcnRDaGF0LCBob21lOiBoYW5kbGVycy5ob21lLCBoYW5kbGVHb0hvbWUgfX1cbiAgICAgICAgICAgIG9uRXJyb3I9eygpID0+IHNldEhhc0Vycm9yKHRydWUpfVxuICAgICAgICAgICAgcmVmcz17eyB1c2VySW5pdGlhbE1lc3NhZ2UsIGluaXRpYWxDaGF0SWQgfX1cbiAgICAgICAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeT17aGFuZGxlU2VuZE1lc3NhZ2VSZWFkeX1cbiAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgIGZsb2F0aW5nPXtpc0Zsb2F0aW5nfVxuICAgICAgICAgICAgYWdlbnRzPXthZ2VudHMuZGF0YX1cbiAgICAgICAgICAgIGxvYWRpbmdBZ2VudHM9e2xvYWRpbmd9XG4gICAgICAgICAgICBvbkRlbGV0ZUFnZW50PXtoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50c31cbiAgICAgICAgICAgIG9uRmF2b3JpdGVBZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIGhhc01vcmVBZ2VudHM9eyEhYWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgICAgbG9hZGluZ01vcmVBZ2VudHM9e2xvYWRpbmdNb3JlfVxuICAgICAgICAgICAgb25Mb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgICBvbkdvVG9NYWlha2VyPXtoYW5kbGVHb1RvTWFpYWtlcn1cbiAgICAgICAgICAgIHNraWxscz17c2tpbGxzfVxuICAgICAgICAgICAgbG9hZGluZ1NraWxscz17bG9hZGluZ1NraWxsc31cbiAgICAgICAgICAgIG9uRGVsZXRlU2tpbGw9e3JlbW92ZVNraWxsfVxuICAgICAgICAgICAgb25TZWFyY2hBZ2VudHM9e3NlYXJjaEN1c3RvbUFnZW50c31cbiAgICAgICAgICAgIHNlYXJjaExvYWRpbmdBZ2VudHM9e3NlYXJjaExvYWRpbmd9XG4gICAgICAgICAgICBhZ2VudEVycm9yPXthZ2VudEVycm9yfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFByb2plY3RTdW1tYXJ5Q29udGVudCBvblJlc3RhcnRTdW1tYXJ5PXtoYW5kbGVycy5ob21lfSAvPlxuICAgICAgICApfVxuICAgICAgICB7KChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiAhIWFnZW50cz8uZGF0YT8ubGVuZ3RoKSB8fFxuICAgICAgICAgIGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSAmJlxuICAgICAgICAgICFpc01haWFrZXJDcmVhdG9ySG9tZSAmJlxuICAgICAgICAgICFoYXNFcnJvciAmJlxuICAgICAgICAgICFsb2FkaW5nICYmXG4gICAgICAgICAgdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUoc2VjdGlvbiwgdXNlcikgJiYgKFxuICAgICAgICAgICAgPENoYXRBaU1vZGFsRm9vdGVyXG4gICAgICAgICAgICAgIGFnZW50PXthZ2VudH1cbiAgICAgICAgICAgICAgaGFuZGxlU2VuZE1lc3NhZ2U9e2hhbmRsZVNlbmRNZXNzYWdlfVxuICAgICAgICAgICAgICBoYW5kbGVTdG9wR2VuZXJhdGlvbj17c3RvcEdlbmVyYXRpb25GdW5jdGlvbn1cbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBpc1dyaXRpbmc9e2lzV3JpdGluZ31cbiAgICAgICAgICAgICAgY2hhdElkPXtpbml0aWFsQ2hhdElkfVxuICAgICAgICAgICAgICBuZXdDaGF0S2V5PXtuZXdDaGF0S2V5fVxuICAgICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgICAgICBsZWdhY3lDb250ZXh0U2Vzc2lvbj17bGVnYWN5Q29udGV4dFNlc3Npb259XG4gICAgICAgICAgICAgIG9uQ29udGludWVJbk5ld0NoYXQ9e2hhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdH1cbiAgICAgICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlNQ29udGVudD5cbiAgICA8Lz5cbiAgKVxuXG4gIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gKFxuICAgIDxTQ0NBSU1Db250ZW50V3JhcHBlciBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfSByZWY9e2NvbnRlbnRXcmFwcGVyUmVmfT5cbiAgICAgIHttb2RhbFBhbmVsfVxuICAgICAge3Nob3dDbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsICYmIChcbiAgICAgICAgPENsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWxcbiAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVEaXNtaXNzQ2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbH1cbiAgICAgICAgICBvbkNvbmZpcm09e2hhbmRsZUNvbmZpcm1DbG9zZVdoaWxlR2VuZXJhdGluZ31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9TQ0NBSU1Db250ZW50V3JhcHBlcj5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgc2VsZWN0b3IgJiZcbiAgICBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICA8U0NDQUlNV3JhcHBlclxuICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgIGRyYWdQb3NpdGlvbj17cmVzb2x2ZWREcmFnUG9zaXRpb259XG4gICAgICAgIGVsZXZhdGVkPXtzZWN0aW9uID09PSAndGFzayd9XG4gICAgICAgICRtaW5pbWl6ZWQ9e2lzTWluaW1pemVkfVxuICAgICAgPlxuICAgICAgICA8U0NDQUlNTWluaW1pemVkSGlkZSAkaGlkZGVuPXtpc01pbmltaXplZH0+XG4gICAgICAgICAgPEZsb2F0aW5nUGFuZWxNb3Rpb24gdGlsdD17dGlsdE1vdGlvbn0gZXhwYW5kZWQ9e2V4cGFuZGVkfT5cbiAgICAgICAgICAgIHtjb250ZW50V3JhcHBlcn1cbiAgICAgICAgICA8L0Zsb2F0aW5nUGFuZWxNb3Rpb24+XG4gICAgICAgIDwvU0NDQUlNTWluaW1pemVkSGlkZT5cbiAgICAgICAge2lzTWluaW1pemVkICYmIChcbiAgICAgICAgICA8TWFpYU1pbmltaXplZFBpbGxcbiAgICAgICAgICAgIHVucmVhZENvdW50PXt1bnJlYWRDb3VudH1cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtoYXNBY3RpdmVTdHJlYW19XG4gICAgICAgICAgICBvblJlc3RvcmU9e2hhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkfVxuICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VGcm9tTWluaW1pemVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHt1c2VySGFzUGVybWlzc2lvbnMgJiYgKFxuICAgICAgICAgIDxBYm1BZ2VudE1vZGFsXG4gICAgICAgICAgICBhZGRBZ2VudD17YWRkQWdlbnR9XG4gICAgICAgICAgICB1cGRhdGVBZ2VudD17dXBkYXRlQWdlbnR9XG4gICAgICAgICAgICByZW1vdmVBZ2VudD17cmVtb3ZlQWdlbnR9XG4gICAgICAgICAgICB1cGRhdGVBZ2VudEZhdm9yaXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgICAgc2VsZWN0Rmlyc3RBZ2VudD17c2VsZWN0Rmlyc3RBZ2VudH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIChcbiAgICAgICAgICA8QWJtU2tpbGxNb2RhbCBhZGRTa2lsbD17YWRkU2tpbGx9IHVwZGF0ZVNraWxsSW5MaXN0PXt1cGRhdGVTa2lsbEluTGlzdH0gcmVtb3ZlU2tpbGw9e3JlbW92ZVNraWxsfSAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIDxBYm1Ta2lsbEdlbmVyYXRlTW9kYWwgLz59XG4gICAgICAgIDxTbmFja2JhciAvPlxuICAgICAgPC9TQ0NBSU1XcmFwcGVyPixcbiAgICAgIHNlbGVjdG9yXG4gICAgKVxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FFRUEsV0FBVyxFQUNYQyxPQUFPLEVBQ1BDLFFBQVEsRUFDUkMsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLGVBQWUsUUFFVixPQUFPO0FBQ2QsT0FBT0MsUUFBUSxNQUFNLFdBQVc7QUFDaEMsT0FBT0MsTUFBTSxNQUFNLFFBQVE7QUFDM0IsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsT0FBTyxRQUFRLDJCQUEyQjtBQUNuRCxTQUFTQyxpQkFBaUIsUUFBUSxnQ0FBZ0M7QUFDbEUsU0FBU0MsU0FBUyxRQUFRLHVCQUF1QjtBQUNqRCxTQUFTQyxzQkFBc0IsUUFBUSx1Q0FBdUM7QUFFOUUsU0FBU0MsYUFBYSxRQUFRLGtCQUFrQjtBQUNoRCxTQUFTQyxhQUFhLEVBQUVDLE9BQU8sUUFBUSxhQUFhO0FBQ3BELFNBQVNDLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLFlBQVksUUFBUSx5Q0FBeUM7QUFDdEUsU0FBU0MsWUFBWSxRQUFRLHlDQUF5QztBQUN0RSxTQUFTQyxnQkFBZ0IsUUFBc0IsaUNBQWlDO0FBR2hGLFNBQVNDLGlCQUFpQixRQUFRLGtEQUFrRDtBQUNwRixTQUFTQyxRQUFRLFFBQVEsbUNBQW1DO0FBQzVELFNBQVNDLHFCQUFxQixRQUFRLDBCQUEwQjtBQUNoRSxTQUFTQyxhQUFhLFFBQVEsNkNBQTZDO0FBQzNFLFNBQVNDLGFBQWEsUUFBUSw2Q0FBNkM7QUFDM0UsU0FBU0MscUJBQXFCLFFBQVEsNkRBQTZEO0FBQ25HLFNBQVNDLHlCQUF5QixRQUFRLDJDQUEyQztBQUNyRixTQUFTQyxRQUFRLFFBQVEsMkJBQTJCO0FBQ3BELFNBQVNDLGFBQWEsRUFBRUMs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
|