@projectcor/maia-components 2.11.109-3 → 2.11.110-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.
Files changed (86) hide show
  1. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +12 -1
  2. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +127 -5
  3. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +2 -29
  4. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +24 -33
  5. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +2 -19
  6. package/lib/components/atoms/IconButton.js +2 -2
  7. package/lib/components/atoms/MAIAInput/MAIAInput.js +203 -88
  8. package/lib/components/atoms/MAIAInput/styles.js +15 -11
  9. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +188 -0
  10. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +69 -0
  11. package/lib/components/atoms/SkillsDropdown/index.js +2 -0
  12. package/lib/components/atoms/icons/PlusIcon.js +29 -0
  13. package/lib/components/atoms/icons/RetryIcon.js +34 -0
  14. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +23 -0
  15. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +23 -0
  16. package/lib/components/atoms/icons/SkillsNavIcon.js +4 -7
  17. package/lib/components/atoms/icons/index.js +4 -1
  18. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +5 -3
  19. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +135 -380
  20. package/lib/components/molecules/ChatAIMessages/newStyles.js +18 -50
  21. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +198 -198
  22. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +11 -16
  23. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.js +8 -26
  24. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.styles.js +7 -24
  25. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +259 -232
  26. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +124 -104
  27. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +1 -3
  28. package/lib/components/molecules/MessageFeedback/MessageFeedback.js +14 -2
  29. package/lib/components/molecules/MessageFeedback/styles.js +2 -6
  30. package/lib/components/molecules/Sidebar/Sidebar.js +5 -4
  31. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -2
  32. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +8 -1
  33. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +285 -167
  34. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +86 -66
  35. package/lib/components/organisms/ChatAI/ChatAI.js +3 -22
  36. package/lib/components/organisms/ClientAIButton/ClientAIButton.js +1 -4
  37. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.js +1 -4
  38. package/lib/constants/config.js +1 -4
  39. package/lib/constants/permissions/utils.js +3 -3
  40. package/lib/context/global-context.js +1 -1
  41. package/lib/dev/DevChatAI.js +1 -4
  42. package/lib/hooks/useChatManager/useChatManager.js +401 -146
  43. package/lib/hooks/useChatMessages/useChatMessages.js +27 -25
  44. package/lib/hooks/useContextMentions.js +93 -56
  45. package/lib/hooks/useEntitySearch.js +92 -278
  46. package/lib/hooks/useMentionAllowedTypes.js +9 -25
  47. package/lib/hooks/useMentionPopover.js +9 -33
  48. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  49. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +80 -6
  50. package/lib/hooks/useProjectSummaryConfig.js +17 -36
  51. package/lib/hooks/useSkillsCatalog.js +66 -0
  52. package/lib/lang/br/index.js +61 -251
  53. package/lib/lang/en/index.js +61 -251
  54. package/lib/lang/es/index.js +62 -252
  55. package/lib/lang/fr/index.js +61 -251
  56. package/lib/services/maia/Orchestrator/index.js +4 -3
  57. package/lib/services/maia/Orchestrator/orchestrator.js +84 -23
  58. package/lib/services/maia/Skills/createSkill.js +1 -1
  59. package/lib/services/maia/Skills/getSkills.js +70 -40
  60. package/lib/services/maia/Skills/updateSkill.js +1 -1
  61. package/lib/services/utils/mapChatMessages.js +26 -25
  62. package/lib/store/maiaLastChatPersistence.js +35 -0
  63. package/lib/store/sessions/sessionStreamManager.js +191 -99
  64. package/lib/store/sessions/sessions.types.js +1 -1
  65. package/lib/types/Chat.js +1 -1
  66. package/lib/types/skill.js +1 -1
  67. package/lib/utils/contextMentionTriggers.js +2 -5
  68. package/lib/utils/hitlAnalytics.js +3 -4
  69. package/lib/utils/maiaHostOpen.js +1 -10
  70. package/lib/utils/renderContextMentions.js +39 -18
  71. package/lib/utils/retryCompletion.js +85 -0
  72. package/lib/utils/streamActivityMessages.js +41 -106
  73. package/package.json +1 -1
  74. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +0 -136
  75. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +0 -73
  76. package/lib/components/atoms/ReasoningBlock/index.js +0 -2
  77. package/lib/components/organisms/CloseWhileGeneratingModal/CloseWhileGeneratingModal.js +0 -56
  78. package/lib/components/organisms/CloseWhileGeneratingModal/CloseWhileGeneratingModal.styles.js +0 -35
  79. package/lib/components/organisms/CloseWhileGeneratingModal/index.js +0 -2
  80. package/lib/hooks/useReasoningTrace/index.js +0 -3
  81. package/lib/hooks/useReasoningTrace/reasoningStore.js +0 -142
  82. package/lib/hooks/useReasoningTrace/useReasoningTrace.js +0 -14
  83. package/lib/store/maiaMinimizedPersistence.js +0 -49
  84. package/lib/types/reasoning.js +0 -2
  85. package/lib/utils/autoApproveStorage.js +0 -26
  86. package/lib/utils/reasoningMappers.js +0 -62
@@ -19,7 +19,7 @@ import ReactDOM from 'react-dom';
19
19
  import moment from 'moment';
20
20
  import { useTranslation } from 'react-i18next';
21
21
  import { useUser } from '../../../context/cor-user';
22
- import { canAccessToChatAI } from '../../../constants/permissions';
22
+ import { canAccessToChatAI, canAccessToSkills } from '../../../constants/permissions';
23
23
  import { MAIAError } from '../../atoms/MAIAError';
24
24
  import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
25
25
  import { ChatAIContent } from '../ChatAIContent';
@@ -32,9 +32,8 @@ import { ChatAIModalHeader } from './components/ChatAiModalHeader/ChatAiModalHea
32
32
  import { Snackbar } from '../../organisms/SnackBar/Snackbar';
33
33
  import { ProjectSummaryContent } from '../ProjectSummaryContent';
34
34
  import { AbmAgentModal } from '../../organisms/AbmAgentModal/AbmAgentModal';
35
- import { AbmSkillModal } from '../../organisms/AbmSkillModal/AbmSkillModal';
35
+ import { AbmSkillModal, SKILL_USE_AFTER_SAVE_EVENT } from '../../organisms/AbmSkillModal/AbmSkillModal';
36
36
  import { AbmSkillGenerateModal } from '../../organisms/AbmSkillGenerateModal/AbmSkillGenerateModal';
37
- import { CloseWhileGeneratingModal } from '../../organisms/CloseWhileGeneratingModal';
38
37
  import { SECTIONS } from '../../../constants/config';
39
38
  import { SCCAIMContent, SCCAIMContentWrapper, SCCAIMMinimizedHide, SCCAIMWrapper } from './ChatAIModal.styles';
40
39
  import { MaiaMinimizedPill } from './components/MaiaMinimizedPill';
@@ -45,8 +44,7 @@ import { validateIsMaia } from '../../../services/utils/validateIsMaia';
45
44
  import { isMarketplaceGlobalCloneAgent } from '../../../utils/agentDisplayName';
46
45
  import { useFaqsStore } from '../../../store/useFaqsStore';
47
46
  import { getChatsStoreState, useChatsStore } from '../../../store/useChatsStore';
48
- import { sessionStreamManager } from '../../../store/sessions/sessionStreamManager';
49
- import { readMinimizedState, writeMinimizedState } from '../../../store/maiaMinimizedPersistence';
47
+ import { readLastActiveChatId, writeLastActiveChatId } from '../../../store/maiaLastChatPersistence';
50
48
  import { useSessionsStore } from '../../../store/sessions/useSessionsStore';
51
49
  import { isActiveSessionStatus } from '../../../store/sessions/sessions.types';
52
50
  import { fetchMaia } from '../../../services/maia/client';
@@ -86,29 +84,28 @@ var validateAccessByFeature = function validateAccessByFeature(section, user) {
86
84
  }
87
85
  return Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS);
88
86
  };
89
- export var ChatAIModal = function ChatAIModal(_ref) {
87
+ export var ChatAIModal = function ChatAIModal() {
90
88
  var _user$permissions, _user$permissions2, _user$permissions3, _agents$data;
91
- var handleClose = _ref.handleClose;
92
89
  var user = useUser();
93
90
  var _useTranslation = useTranslation([SECTIONS.abmAgent]),
94
91
  i18n = _useTranslation.i18n;
95
92
  var amplitudEvent = useEvent();
96
- var _useState = useState(false),
93
+
94
+ // MAIA vive montada en todas las pantallas: el panel arranca siempre cerrado (pill visible)
95
+ // y sólo se abre por acción del usuario — navegar o refrescar no lo reabre.
96
+ var _useState = useState(true),
97
97
  _useState2 = _slicedToArray(_useState, 2),
98
- showCloseWhileGeneratingModal = _useState2[0],
99
- setShowCloseWhileGeneratingModal = _useState2[1];
100
- var _useState3 = useState(function () {
101
- return readMinimizedState(user.id).minimized;
102
- }),
103
- _useState4 = _slicedToArray(_useState3, 2),
104
- isMinimized = _useState4[0],
105
- setIsMinimized = _useState4[1];
98
+ isMinimized = _useState2[0],
99
+ setIsMinimized = _useState2[1];
106
100
  var setChatViewVisible = useChatsStore(function (state) {
107
101
  return state.setChatViewVisible;
108
102
  });
109
103
  var unreadCount = useChatsStore(function (state) {
110
104
  return state.unreadCount;
111
105
  });
106
+ var activeChatId = useChatsStore(function (state) {
107
+ return state.activeChatId;
108
+ });
112
109
  // Los "..." del pill salen del motor, no de isStreaming/isWriting: esos reflejan
113
110
  // la sesión activa y quedan stale cuando una respuesta termina en background.
114
111
  var hasActiveStream = useSessionsStore(function (state) {
@@ -117,164 +114,96 @@ export var ChatAIModal = function ChatAIModal(_ref) {
117
114
  });
118
115
  });
119
116
 
120
- /** Chat activo al minimizar: destino de fallback al reabrir si no hay sin leer. */
121
- var chatIdBeforeMinimizeRef = useRef(readMinimizedState(user.id).chatId);
122
- /** goToChat se define más abajo; el ref evita depender del orden de declaración. */
117
+ /** goToChat / handleGoHome se definen más abajo; los refs evitan depender del orden de declaración. */
123
118
  var goToChatRef = useRef(null);
119
+ var goHomeRef = useRef(null);
124
120
 
125
- // Montó ya minimizado (navegación o refresco): el chat no está a la vista, así que
126
- // las respuestas que lleguen tienen que quedar como no leídas.
121
+ // Monta cerrada: el chat no está a la vista, así que las respuestas que lleguen
122
+ // tienen que quedar como no leídas.
127
123
  useEffect(function () {
128
- if (isMinimized) {
129
- setChatViewVisible(false);
130
- }
124
+ setChatViewVisible(false);
131
125
  // Sólo al montar: después lo manejan minimizar/restaurar.
132
126
  }, []);
127
+
128
+ // Persistimos la conversación abierta para poder volver a ella desde el pill después
129
+ // de navegar o refrescar. El takeover desde un host la limpia (va al Home).
130
+ useEffect(function () {
131
+ if (activeChatId) {
132
+ writeLastActiveChatId(user.id, activeChatId);
133
+ }
134
+ }, [activeChatId, user.id]);
133
135
  var handleMinimize = useCallback(function () {
134
- var chatId = getChatsStoreState().activeChatId;
135
- chatIdBeforeMinimizeRef.current = chatId;
136
- writeMinimizedState(user.id, {
137
- minimized: true,
138
- chatId: chatId
139
- });
140
136
  amplitudEvent(EVENTS.aiChatMinimize);
141
137
  setIsMinimized(true);
142
138
  setChatViewVisible(false);
143
- }, [amplitudEvent, setChatViewVisible, user.id]);
139
+ }, [amplitudEvent, setChatViewVisible]);
144
140
  var focusChatInput = useCallback(function () {
145
141
  window.setTimeout(function () {
146
142
  document.dispatchEvent(new CustomEvent('maia-input-refocus'));
147
143
  }, 100);
148
144
  }, []);
149
- var handleRestoreFromMinimized = useCallback(function () {
150
- setIsMinimized(false);
151
- setChatViewVisible(true);
152
- writeMinimizedState(user.id, {
153
- minimized: false,
154
- chatId: null
155
- });
156
- amplitudEvent(EVENTS.aiChatOpen, {
157
- option: 'minimize'
158
- });
159
-
160
- // El pill restaura donde el usuario dejó la vista al minimizar. Si otra sesión
161
- // terminó en background y quedó sin leer, no redirigimos: el contador del pill
162
- // avisa; el fallback a sin-leer es solo si no había chat activo al minimizar.
163
- var _getChatsStoreState = getChatsStoreState(),
164
- chats = _getChatsStoreState.chats;
165
- var chatBeforeMinimize = chatIdBeforeMinimizeRef.current ? chats.find(function (chat) {
166
- return chat.sessionExternalId === chatIdBeforeMinimizeRef.current;
167
- }) : undefined;
168
- var firstUnread = chats.find(function (chat) {
169
- return chat.isRead === false;
170
- });
171
- var target = chatBeforeMinimize !== null && chatBeforeMinimize !== void 0 ? chatBeforeMinimize : firstUnread;
172
- if (target) {
173
- var _goToChatRef$current;
174
- (_goToChatRef$current = goToChatRef.current) === null || _goToChatRef$current === void 0 || _goToChatRef$current.call(goToChatRef, target);
175
- }
176
- focusChatInput();
177
- }, [amplitudEvent, focusChatInput, setChatViewVisible, user.id]);
178
- var handleCloseFromMinimized = useCallback(function () {
179
- setIsMinimized(false);
180
- setChatViewVisible(true);
181
- writeMinimizedState(user.id, {
182
- minimized: false,
183
- chatId: null
184
- });
185
-
186
- // Con generación en curso hay que confirmar. El overlay del modal se posiciona
187
- // sobre el panel del chat, que está oculto al minimizar, así que restauramos
188
- // primero y mostramos el modal sobre la conversación.
189
- if (sessionStreamManager.getActiveCount() > 0) {
190
- setShowCloseWhileGeneratingModal(true);
191
- return;
192
- }
193
- useFaqsStore.getState().clearFaqs();
194
- handleClose === null || handleClose === void 0 || handleClose();
195
- }, [handleClose, setChatViewVisible, user.id]);
196
- var _useState5 = useState({
145
+ var _useState3 = useState({
197
146
  message: '',
198
147
  attachments: []
199
148
  }),
149
+ _useState4 = _slicedToArray(_useState3, 2),
150
+ userInitialMessage = _useState4[0],
151
+ setUserInitialMessage = _useState4[1];
152
+ var _useState5 = useState(null),
200
153
  _useState6 = _slicedToArray(_useState5, 2),
201
- userInitialMessage = _useState6[0],
202
- setUserInitialMessage = _useState6[1];
203
- var _useState7 = useState(null),
154
+ initialChatId = _useState6[0],
155
+ setInitialChatId = _useState6[1];
156
+ var _useState7 = useState(0),
204
157
  _useState8 = _slicedToArray(_useState7, 2),
205
- initialChatId = _useState8[0],
206
- setInitialChatId = _useState8[1];
207
- var _useState9 = useState(0),
158
+ newChatKey = _useState8[0],
159
+ setNewChatKey = _useState8[1];
160
+ var _useState9 = useState(null),
208
161
  _useState0 = _slicedToArray(_useState9, 2),
209
- newChatKey = _useState0[0],
210
- setNewChatKey = _useState0[1];
162
+ sessionMeta = _useState0[0],
163
+ setSessionMeta = _useState0[1];
211
164
  var _useState1 = useState(null),
212
165
  _useState10 = _slicedToArray(_useState1, 2),
213
- sessionMeta = _useState10[0],
214
- setSessionMeta = _useState10[1];
166
+ sendMessageFunction = _useState10[0],
167
+ setSendMessageFunction = _useState10[1];
215
168
  var _useState11 = useState(null),
216
169
  _useState12 = _slicedToArray(_useState11, 2),
217
- sendMessageFunction = _useState12[0],
218
- setSendMessageFunction = _useState12[1];
219
- var _useState13 = useState(null),
170
+ stopGenerationFunction = _useState12[0],
171
+ setStopGenerationFunction = _useState12[1];
172
+ var _useState13 = useState(false),
220
173
  _useState14 = _slicedToArray(_useState13, 2),
221
- stopGenerationFunction = _useState14[0],
222
- setStopGenerationFunction = _useState14[1];
174
+ isStreaming = _useState14[0],
175
+ setIsStreaming = _useState14[1];
223
176
  var _useState15 = useState(false),
224
177
  _useState16 = _slicedToArray(_useState15, 2),
225
- isStreaming = _useState16[0],
226
- setIsStreaming = _useState16[1];
178
+ isWriting = _useState16[0],
179
+ setIsWriting = _useState16[1];
227
180
  var _useState17 = useState(false),
228
181
  _useState18 = _slicedToArray(_useState17, 2),
229
- isWriting = _useState18[0],
230
- setIsWriting = _useState18[1];
231
- var handleCloseModal = useCallback(function () {
232
- // El aviso sólo aplica si hay streams realmente en vuelo. isStreaming/isWriting
233
- // reflejan la sesión activa y quedan stale cuando la respuesta terminó en background.
234
- if (sessionStreamManager.getActiveCount() > 0) {
235
- setShowCloseWhileGeneratingModal(true);
236
- return;
237
- }
238
- useFaqsStore.getState().clearFaqs();
239
- handleClose === null || handleClose === void 0 || handleClose();
240
- }, [handleClose]);
241
- var handleDismissCloseWhileGeneratingModal = useCallback(function () {
242
- setShowCloseWhileGeneratingModal(false);
243
- }, []);
244
- var handleConfirmCloseWhileGenerating = useCallback(function () {
245
- // Cerrar MAIA corta TODAS las sesiones en vuelo, no sólo la visible.
246
- sessionStreamManager.abortAll();
247
- setShowCloseWhileGeneratingModal(false);
248
- useFaqsStore.getState().clearFaqs();
249
- handleClose === null || handleClose === void 0 || handleClose();
250
- }, [handleClose]);
251
- var _useState19 = useState(false),
182
+ refetchChats = _useState18[0],
183
+ setRefetchChats = _useState18[1];
184
+ var _useState19 = useState(options.home),
252
185
  _useState20 = _slicedToArray(_useState19, 2),
253
- refetchChats = _useState20[0],
254
- setRefetchChats = _useState20[1];
255
- var _useState21 = useState(options.home),
186
+ currentOption = _useState20[0],
187
+ setCurrentOption = _useState20[1];
188
+ var _useState21 = useState(false),
256
189
  _useState22 = _slicedToArray(_useState21, 2),
257
- currentOption = _useState22[0],
258
- setCurrentOption = _useState22[1];
259
- var _useState23 = useState(false),
260
- _useState24 = _slicedToArray(_useState23, 2),
261
- hasError = _useState24[0],
262
- setHasError = _useState24[1];
190
+ hasError = _useState22[0],
191
+ setHasError = _useState22[1];
263
192
  // En project/client/task: el usuario reinició el contexto del orchestrator (lo limpió y pasó por
264
193
  // el selector de contextos recientes). Habilita el botón "volver" en el home paso 2 de esas
265
194
  // secciones. Se resetea al cerrar/reabrir el modal (el componente se desmonta).
266
- var _useState25 = useState(false),
267
- _useState26 = _slicedToArray(_useState25, 2),
268
- didResetContextInSection = _useState26[0],
269
- setDidResetContextInSection = _useState26[1];
195
+ var _useState23 = useState(false),
196
+ _useState24 = _slicedToArray(_useState23, 2),
197
+ didResetContextInSection = _useState24[0],
198
+ setDidResetContextInSection = _useState24[1];
270
199
  var prevHasPinnedContextRef = useRef(false);
271
200
  var handlers = useMemo(function () {
272
201
  return buildHandlers(setCurrentOption, setHasError);
273
202
  }, []);
274
- var _useState27 = useState(false),
275
- _useState28 = _slicedToArray(_useState27, 2),
276
- sidebarHasError = _useState28[0],
277
- setSidebarHasError = _useState28[1];
203
+ var _useState25 = useState(false),
204
+ _useState26 = _slicedToArray(_useState25, 2),
205
+ sidebarHasError = _useState26[0],
206
+ setSidebarHasError = _useState26[1];
278
207
  var resetSelectedChatRef = useRef(null);
279
208
  var lang = i18n.language === 'br' ? 'pt-br' : i18n.language;
280
209
  moment.locale(lang);
@@ -318,7 +247,8 @@ export var ChatAIModal = function ChatAIModal(_ref) {
318
247
  selectFirstAgent = _useGetAgents.selectFirstAgent,
319
248
  sortAgentsList = _useGetAgents.sortAgentsList;
320
249
  var _useGetSkills = useGetSkills(),
321
- skills = _useGetSkills.skills,
250
+ mySkills = _useGetSkills.mySkills,
251
+ sharedSkills = _useGetSkills.sharedSkills,
322
252
  loadingSkills = _useGetSkills.loading,
323
253
  handleGetSkills = _useGetSkills.handleGetSkills,
324
254
  addSkill = _useGetSkills.addSkill,
@@ -334,7 +264,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
334
264
  if (currentOption === options.myAgents && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
335
265
  return options.myAgents;
336
266
  }
337
- if (currentOption === options.mySkills && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
267
+ if (currentOption === options.mySkills && canAccessToSkills(user)) {
338
268
  return options.mySkills;
339
269
  }
340
270
 
@@ -352,7 +282,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
352
282
  return options.clientSelector;
353
283
  }
354
284
  return currentOption;
355
- }, [currentOption, project, client, isMAIA, agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.name, agent === null || agent === void 0 ? void 0 : agent.type]);
285
+ }, [currentOption, project, client, isMAIA, agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.name, agent === null || agent === void 0 ? void 0 : agent.type, user]);
356
286
  var isMaiakerAgentSelected = useMemo(function () {
357
287
  return isMarketplaceGlobalCloneAgent(agent);
358
288
  }, [agent]);
@@ -377,15 +307,15 @@ export var ChatAIModal = function ChatAIModal(_ref) {
377
307
 
378
308
  // Task panel, planner y banner de proyecto abren en flotante por default (no tapar el contexto detrás).
379
309
  // Fuera de esos contextos se respeta la preferencia guardada en localStorage.
380
- var _useState29 = useState(function () {
310
+ var _useState27 = useState(function () {
381
311
  return resolveInitialMaiaChatLayoutMode({
382
312
  section: section,
383
313
  bannerEntryFaq: bannerEntryFaq
384
314
  });
385
315
  }),
386
- _useState30 = _slicedToArray(_useState29, 2),
387
- layoutMode = _useState30[0],
388
- setLayoutMode = _useState30[1];
316
+ _useState28 = _slicedToArray(_useState27, 2),
317
+ layoutMode = _useState28[0],
318
+ setLayoutMode = _useState28[1];
389
319
  var handleLayoutModeChange = useCallback(function (mode) {
390
320
  setStoredMaiaChatLayoutMode(mode);
391
321
  setLayoutMode(mode);
@@ -393,10 +323,10 @@ export var ChatAIModal = function ChatAIModal(_ref) {
393
323
  var expanded = layoutMode === 'fullscreen';
394
324
  var isFloating = layoutMode === 'floating';
395
325
  var contentWrapperRef = useRef(null);
396
- var _useState31 = useState(null),
397
- _useState32 = _slicedToArray(_useState31, 2),
398
- dragPosition = _useState32[0],
399
- setDragPosition = _useState32[1];
326
+ var _useState29 = useState(null),
327
+ _useState30 = _slicedToArray(_useState29, 2),
328
+ dragPosition = _useState30[0],
329
+ setDragPosition = _useState30[1];
400
330
  var _useFloatingPanelDrag = useFloatingPanelDragTilt(isFloating),
401
331
  tiltMotion = _useFloatingPanelDrag.tiltMotion,
402
332
  startPointerTracking = _useFloatingPanelDrag.startPointerTracking,
@@ -554,19 +484,67 @@ export var ChatAIModal = function ChatAIModal(_ref) {
554
484
  }, [handlers, agents, selectAgent]);
555
485
  goToChatRef.current = goToChat;
556
486
 
487
+ /** Los agentes se piden recién al abrir el panel: en modo pill no hace falta ninguna request. */
488
+ var ensureAgentsLoaded = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
489
+ return _regeneratorRuntime.wrap(function (_context) {
490
+ while (1) switch (_context.prev = _context.next) {
491
+ case 0:
492
+ if (!agentsFetchedRef.current) {
493
+ _context.next = 1;
494
+ break;
495
+ }
496
+ return _context.abrupt("return");
497
+ case 1:
498
+ agentsFetchedRef.current = true;
499
+ _context.next = 2;
500
+ return handleGetAgents();
501
+ case 2:
502
+ case "end":
503
+ return _context.stop();
504
+ }
505
+ }, _callee);
506
+ })), [handleGetAgents]);
507
+ var handleRestoreFromMinimized = useCallback(function () {
508
+ setIsMinimized(false);
509
+ setChatViewVisible(true);
510
+ amplitudEvent(EVENTS.aiChatOpen, {
511
+ option: 'minimize'
512
+ });
513
+
514
+ // goToChat necesita la lista de agentes para seleccionar el de la conversación.
515
+ ensureAgentsLoaded().then(function () {
516
+ var _chats$find;
517
+ // Prioridad al reabrir: primer chat sin leer → última conversación abierta → Home.
518
+ var _getChatsStoreState = getChatsStoreState(),
519
+ chats = _getChatsStoreState.chats;
520
+ var lastActiveChatId = readLastActiveChatId(user.id);
521
+ var target = (_chats$find = chats.find(function (chat) {
522
+ return chat.isRead === false;
523
+ })) !== null && _chats$find !== void 0 ? _chats$find : lastActiveChatId ? chats.find(function (chat) {
524
+ return chat.sessionExternalId === lastActiveChatId;
525
+ }) : undefined;
526
+ if (target) {
527
+ var _goToChatRef$current;
528
+ (_goToChatRef$current = goToChatRef.current) === null || _goToChatRef$current === void 0 || _goToChatRef$current.call(goToChatRef, target);
529
+ } else {
530
+ var _goHomeRef$current;
531
+ (_goHomeRef$current = goHomeRef.current) === null || _goHomeRef$current === void 0 || _goHomeRef$current.call(goHomeRef);
532
+ }
533
+ focusChatInput();
534
+ });
535
+ }, [amplitudEvent, ensureAgentsLoaded, focusChatInput, setChatViewVisible, user.id]);
536
+
557
537
  /**
558
- * Toma control desde un host (header, proyecto, cliente…): expande si estaba minimizado,
559
- * descarta la conversación abierta y aplica el contexto del host. NO restaura la sesión
560
- * guardada al minimizar — eso sólo lo hace el pill (`handleRestoreFromMinimized`).
538
+ * Toma control desde un host (header, proyecto, cliente…): abre el panel, descarta la
539
+ * conversación abierta y aplica el contexto del host. NO vuelve a la última conversación
540
+ * — eso sólo lo hace el pill (`handleRestoreFromMinimized`).
561
541
  */
562
542
  var applyExpandedHostTakeover = useCallback(function (detail) {
563
543
  var _resetSelectedChatRef;
564
544
  setIsMinimized(false);
565
545
  setChatViewVisible(true);
566
- writeMinimizedState(user.id, {
567
- minimized: false,
568
- chatId: null
569
- });
546
+ writeLastActiveChatId(user.id, null);
547
+ ensureAgentsLoaded();
570
548
  setInitialChatId(null);
571
549
  setNewChatKey(function (prev) {
572
550
  return prev + 1;
@@ -612,7 +590,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
612
590
  setLayoutMode(nextLayout);
613
591
  setDragPosition(null);
614
592
  focusChatInput();
615
- }, [focusChatInput, setChatViewVisible, setChipsProject, setClient, setProject, setTask, user.id]);
593
+ }, [ensureAgentsLoaded, focusChatInput, setChatViewVisible, setChipsProject, setClient, setProject, setTask, user.id]);
616
594
  var handleSendMessageReady = useCallback(function (sendMessage, stopGeneration, streaming, writing) {
617
595
  setSendMessageFunction(function () {
618
596
  return sendMessage;
@@ -668,6 +646,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
668
646
  resetSelectedChatRef.current();
669
647
  }
670
648
  }, [options.home, options.chat, currentOption, isWebSearchActive, toggleWebSearch, agent, agents, selectAgent, setProject, setClient, setTask, stopGenerationFunction, section]);
649
+ goHomeRef.current = handleGoHome;
671
650
  var handleStartNewChat = useCallback(function () {
672
651
  var fromMyAgents = computedCurrentOption === options.myAgents;
673
652
  var fromMaiakerHome = computedCurrentOption === options.home && isMaiakerAgentSelected;
@@ -694,9 +673,9 @@ export var ChatAIModal = function ChatAIModal(_ref) {
694
673
  }
695
674
  handleGoHome();
696
675
  }, [agents.data, computedCurrentOption, handleGoHome, isMaiakerAgentSelected, isWebSearchActive, selectAgent, setClient, setProject, setTask, toggleWebSearch]);
697
- var handleResetChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
698
- return _regeneratorRuntime.wrap(function (_context) {
699
- while (1) switch (_context.prev = _context.next) {
676
+ var handleResetChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
677
+ return _regeneratorRuntime.wrap(function (_context2) {
678
+ while (1) switch (_context2.prev = _context2.next) {
700
679
  case 0:
701
680
  setUserInitialMessage({
702
681
  message: '',
@@ -708,9 +687,9 @@ export var ChatAIModal = function ChatAIModal(_ref) {
708
687
  handleGoHome();
709
688
  case 1:
710
689
  case "end":
711
- return _context.stop();
690
+ return _context2.stop();
712
691
  }
713
- }, _callee);
692
+ }, _callee2);
714
693
  })), [handleGoHome]);
715
694
 
716
695
  // Botón "volver" del header (solo orchestrator):
@@ -767,12 +746,6 @@ export var ChatAIModal = function ChatAIModal(_ref) {
767
746
  setDidResetContextInSection(true);
768
747
  }
769
748
  }, [task === null || task === void 0 ? void 0 : task.id, chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId, client === null || client === void 0 ? void 0 : client.id, project === null || project === void 0 ? void 0 : project.id, section, agent === null || agent === void 0 ? void 0 : agent.type]);
770
- useEffect(function () {
771
- if (!agentsFetchedRef.current) {
772
- agentsFetchedRef.current = true;
773
- handleGetAgents();
774
- }
775
- }, [handleGetAgents]);
776
749
  useEffect(function () {
777
750
  var onMergeCreatedAgent = function onMergeCreatedAgent(evt) {
778
751
  var _ref3 = evt.detail || {},
@@ -887,12 +860,42 @@ export var ChatAIModal = function ChatAIModal(_ref) {
887
860
  document.removeEventListener('maia-open-new-chat-with-agent', openNewChatWithAgent);
888
861
  };
889
862
  }, [selectAgent, setClient, setProject, setTask]);
863
+ useEffect(function () {
864
+ var handleUseSkillAfterSave = function handleUseSkillAfterSave(event) {
865
+ var _ref7 = event.detail || {},
866
+ skill = _ref7.skill;
867
+ if (!skill) return;
868
+ setHasError(false);
869
+ setInitialChatId(null);
870
+ setNewChatKey(function (prev) {
871
+ return prev + 1;
872
+ });
873
+ setUserInitialMessage({
874
+ message: '',
875
+ attachments: []
876
+ });
877
+ setCurrentOption(options.home);
878
+ document.dispatchEvent(new CustomEvent('chat-session-changed'));
879
+ requestAnimationFrame(function () {
880
+ document.dispatchEvent(new CustomEvent('maia-insert-skill-mention', {
881
+ detail: {
882
+ skill: skill
883
+ }
884
+ }));
885
+ document.dispatchEvent(new CustomEvent('maia-input-refocus'));
886
+ });
887
+ };
888
+ document.addEventListener(SKILL_USE_AFTER_SAVE_EVENT, handleUseSkillAfterSave);
889
+ return function () {
890
+ document.removeEventListener(SKILL_USE_AFTER_SAVE_EVENT, handleUseSkillAfterSave);
891
+ };
892
+ }, []);
890
893
 
891
894
  // Metadata de la session abierta (agent_type/agent_entity + contexto), emitida por useChatMessages.
892
895
  useEffect(function () {
893
896
  var onSessionMeta = function onSessionMeta(evt) {
894
- var _ref7 = evt,
895
- detail = _ref7.detail;
897
+ var _ref8 = evt,
898
+ detail = _ref8.detail;
896
899
  if (detail) setSessionMeta(detail);
897
900
  };
898
901
  document.addEventListener('maia-chat-session-meta', onSessionMeta);
@@ -1021,8 +1024,8 @@ export var ChatAIModal = function ChatAIModal(_ref) {
1021
1024
  document.dispatchEvent(new CustomEvent('chat-session-changed'));
1022
1025
  }, [sessionMeta, agents.data, selectAgent, setClient, setProject, setTask, setChipsProject, stopGenerationFunction]);
1023
1026
  var showNewChat = computedCurrentOption !== options.chat;
1024
- var hideHeaderAgentSelector = computedCurrentOption === options.mySkills;
1025
1027
  var isMyAgentsSection = computedCurrentOption === options.myAgents;
1028
+ var isMySkillsSection = computedCurrentOption === options.mySkills;
1026
1029
 
1027
1030
  // Botón "volver": solo para el orchestrator.
1028
1031
  // - En el chat: disponible en todas las secciones (header y project/client/task).
@@ -1046,50 +1049,51 @@ export var ChatAIModal = function ChatAIModal(_ref) {
1046
1049
  if (!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
1047
1050
  return;
1048
1051
  }
1052
+ clearAgent();
1049
1053
  setHasError(false);
1050
1054
  setCurrentOption(options.mySkills);
1051
1055
  handleGetSkills();
1052
- }, [handleGetSkills]);
1053
- var handleGoToMaiaker = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
1056
+ }, [clearAgent, handleGetSkills]);
1057
+ var handleGoToMaiaker = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1054
1058
  var maiakerAgent, response, data, _t;
1055
- return _regeneratorRuntime.wrap(function (_context2) {
1056
- while (1) switch (_context2.prev = _context2.next) {
1059
+ return _regeneratorRuntime.wrap(function (_context3) {
1060
+ while (1) switch (_context3.prev = _context3.next) {
1057
1061
  case 0:
1058
1062
  setHasError(false);
1059
1063
  maiakerAgent = agents.data.find(function (a) {
1060
1064
  return isMarketplaceGlobalCloneAgent(a);
1061
1065
  });
1062
1066
  if (maiakerAgent) {
1063
- _context2.next = 5;
1067
+ _context3.next = 5;
1064
1068
  break;
1065
1069
  }
1066
- _context2.prev = 1;
1067
- _context2.next = 2;
1070
+ _context3.prev = 1;
1071
+ _context3.next = 2;
1068
1072
  return fetchMaia({
1069
1073
  path: "agents?agent_type=clone&entity=global&lang=".concat(mapCORLang(i18n.language)),
1070
1074
  method: 'GET'
1071
1075
  });
1072
1076
  case 2:
1073
- response = _context2.sent;
1074
- _context2.next = 3;
1077
+ response = _context3.sent;
1078
+ _context3.next = 3;
1075
1079
  return response.json();
1076
1080
  case 3:
1077
- data = _context2.sent;
1081
+ data = _context3.sent;
1078
1082
  maiakerAgent = (data.data || []).find(function (a) {
1079
1083
  return isMarketplaceGlobalCloneAgent(a);
1080
1084
  });
1081
- _context2.next = 5;
1085
+ _context3.next = 5;
1082
1086
  break;
1083
1087
  case 4:
1084
- _context2.prev = 4;
1085
- _t = _context2["catch"](1);
1086
- return _context2.abrupt("return");
1088
+ _context3.prev = 4;
1089
+ _t = _context3["catch"](1);
1090
+ return _context3.abrupt("return");
1087
1091
  case 5:
1088
1092
  if (maiakerAgent) {
1089
- _context2.next = 6;
1093
+ _context3.next = 6;
1090
1094
  break;
1091
1095
  }
1092
- return _context2.abrupt("return");
1096
+ return _context3.abrupt("return");
1093
1097
  case 6:
1094
1098
  setProject(null);
1095
1099
  setClient === null || setClient === void 0 || setClient(null);
@@ -1101,9 +1105,9 @@ export var ChatAIModal = function ChatAIModal(_ref) {
1101
1105
  }
1102
1106
  case 7:
1103
1107
  case "end":
1104
- return _context2.stop();
1108
+ return _context3.stop();
1105
1109
  }
1106
- }, _callee2, null, [[1, 4]]);
1110
+ }, _callee3, null, [[1, 4]]);
1107
1111
  })), [agents.data, i18n.language, selectAgent, setClient, setProject, setTask]);
1108
1112
  var handleDeleteAgentFromMyAgents = useCallback(function (agentId) {
1109
1113
  removeAgent(agentId);
@@ -1143,7 +1147,6 @@ export var ChatAIModal = function ChatAIModal(_ref) {
1143
1147
  onDragStart: handleDragStart,
1144
1148
  onDragMove: handleDragMove,
1145
1149
  onDragEnd: handleDragEnd,
1146
- handleClose: handleCloseModal,
1147
1150
  handleMinimize: handleMinimize,
1148
1151
  agents: agents.data,
1149
1152
  hasError: !!agentError,
@@ -1155,8 +1158,8 @@ export var ChatAIModal = function ChatAIModal(_ref) {
1155
1158
  loadMoreAgents: loadMoreAgents,
1156
1159
  sortAgentsList: sortAgentsList,
1157
1160
  isMyAgentsSection: isMyAgentsSection,
1161
+ isMySkillsSection: isMySkillsSection,
1158
1162
  isMaiakerSection: isMaiakerCreatorHome,
1159
- hideAgentSelector: hideHeaderAgentSelector,
1160
1163
  showBackButton: showBackButton,
1161
1164
  onBack: handleBack
1162
1165
  }), hasError ? /*#__PURE__*/_jsx(MAIAError, {}) : validateAccessByFeature(section, user) ? /*#__PURE__*/_jsx(ChatAIContent, {
@@ -1184,7 +1187,8 @@ export var ChatAIModal = function ChatAIModal(_ref) {
1184
1187
  loadingMoreAgents: loadingMore,
1185
1188
  onLoadMoreAgents: loadMoreAgents,
1186
1189
  onGoToMaiaker: handleGoToMaiaker,
1187
- skills: skills,
1190
+ mySkills: mySkills,
1191
+ sharedSkills: sharedSkills,
1188
1192
  loadingSkills: loadingSkills,
1189
1193
  onDeleteSkill: removeSkill,
1190
1194
  onSearchAgents: searchCustomAgents,
@@ -1207,14 +1211,11 @@ export var ChatAIModal = function ChatAIModal(_ref) {
1207
1211
  })]
1208
1212
  })]
1209
1213
  });
1210
- var contentWrapper = /*#__PURE__*/_jsxs(SCCAIMContentWrapper, {
1214
+ var contentWrapper = /*#__PURE__*/_jsx(SCCAIMContentWrapper, {
1211
1215
  expanded: expanded,
1212
1216
  floating: isFloating,
1213
1217
  ref: contentWrapperRef,
1214
- children: [modalPanel, showCloseWhileGeneratingModal && /*#__PURE__*/_jsx(CloseWhileGeneratingModal, {
1215
- onClose: handleDismissCloseWhileGeneratingModal,
1216
- onConfirm: handleConfirmCloseWhileGenerating
1217
- })]
1218
+ children: modalPanel
1218
1219
  });
1219
1220
  return selector && /*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/_jsxs(SCCAIMWrapper, {
1220
1221
  expanded: expanded,
@@ -1232,8 +1233,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
1232
1233
  }), isMinimized && /*#__PURE__*/_jsx(MaiaMinimizedPill, {
1233
1234
  unreadCount: unreadCount,
1234
1235
  isStreaming: hasActiveStream,
1235
- onRestore: handleRestoreFromMinimized,
1236
- onClose: handleCloseFromMinimized
1236
+ onRestore: handleRestoreFromMinimized
1237
1237
  }), userHasPermissions && /*#__PURE__*/_jsx(AbmAgentModal, {
1238
1238
  addAgent: addAgent,
1239
1239
  updateAgent: updateAgent,
@@ -1247,4 +1247,4 @@ export var ChatAIModal = function ChatAIModal(_ref) {
1247
1247
  }), userHasPermissions && /*#__PURE__*/_jsx(AbmSkillGenerateModal, {}), /*#__PURE__*/_jsx(Snackbar, {})]
1248
1248
  }), selector);
1249
1249
  };
1250
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9DaGF0QUkiLCJNQUlBRXJyb3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdldFNraWxscyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIkFibVNraWxsTW9kYWwiLCJBYm1Ta2lsbEdlbmVyYXRlTW9kYWwiLCJDbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsIiwiU0VDVElPTlMiLCJTQ0NBSU1Db250ZW50IiwiU0NDQUlNQ29udGVudFdyYXBwZXIiLCJTQ0NBSU1NaW5pbWl6ZWRIaWRlIiwiU0NDQUlNV3JhcHBlciIsIk1haWFNaW5pbWl6ZWRQaWxsIiwiZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4IiwicmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUiLCJzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUiLCJGbG9hdGluZ1BhbmVsTW90aW9uIiwidXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJ2YWxpZGF0ZUlzTWFpYSIsImlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IiwidXNlRmFxc1N0b3JlIiwiZ2V0Q2hhdHNTdG9yZVN0YXRlIiwidXNlQ2hhdHNTdG9yZSIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwicmVhZE1pbmltaXplZFN0YXRlIiwid3JpdGVNaW5pbWl6ZWRTdGF0ZSIsInVzZVNlc3Npb25zU3RvcmUiLCJpc0FjdGl2ZVNlc3Npb25TdGF0dXMiLCJmZXRjaE1haWEiLCJtYXBDT1JMYW5nIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5UIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiTEVHQUNZX0NPTlRFWFRfRU5USVRJRVMiLCJpc0dsb2JhbE1haWFTZWN0aW9uIiwic2VjdGlvbiIsInJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24iLCJhZ2VudFR5cGUiLCJjdXJyZW50T3B0aW9uIiwiaG9tZU9wdGlvbiIsIklEX01PREFMX0NIQVRfQUdFTlQiLCJ2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSIsInVzZXIiLCJCb29sZWFuIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsIkNoYXRBSU1vZGFsIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwiX3VzZXIkcGVybWlzc2lvbnMyIiwiX3VzZXIkcGVybWlzc2lvbnMzIiwiX2FnZW50cyRkYXRhIiwiaGFuZGxlQ2xvc2UiLCJfdXNlVHJhbnNsYXRpb24iLCJhYm1BZ2VudCIsImkxOG4iLCJhbXBsaXR1ZEV2ZW50IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2hvd0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwiLCJzZXRTaG93Q2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbCIsIl91c2VTdGF0ZTMiLCJpZCIsIm1pbmltaXplZCIsIl91c2VTdGF0ZTQiLCJpc01pbmltaXplZCIsInNldElzTWluaW1pemVkIiwic2V0Q2hhdFZpZXdWaXNpYmxlIiwic3RhdGUiLCJ1bnJlYWRDb3VudCIsImhhc0FjdGl2ZVN0cmVhbSIsIk9iamVjdCIsInZhbHVlcyIsIm1ldGEiLCJzb21lIiwic3RhdHVzIiwiY2hhdElkQmVmb3JlTWluaW1pemVSZWYiLCJjaGF0SWQiLCJnb1RvQ2hhdFJlZiIsImhhbmRsZU1pbmltaXplIiwiYWN0aXZlQ2hhdElkIiwiY3VycmVudCIsImFpQ2hhdE1pbmltaXplIiwiZm9jdXNDaGF0SW5wdXQiLCJzZXRUaW1lb3V0IiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZCIsImFpQ2hhdE9wZW4iLCJvcHRpb24iLCJfZ2V0Q2hhdHNTdG9yZVN0YXRlIiwiY2hhdHMiLCJjaGF0QmVmb3JlTWluaW1pemUiLCJmaW5kIiwiY2hhdCIsInNlc3Npb25FeHRlcm5hbElkIiwidW5kZWZpbmVkIiwiZmlyc3RVbnJlYWQiLCJpc1JlYWQiLCJ0YXJnZXQiLCJfZ29Ub0NoYXRSZWYkY3VycmVudCIsImNhbGwiLCJoYW5kbGVDbG9zZUZyb21NaW5pbWl6ZWQiLCJnZXRBY3RpdmVDb3VudCIsImdldFN0YXRlIiwiY2xlYXJGYXFzIiwiX3VzZVN0YXRlNSIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsIl91c2VTdGF0ZTYiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJzZXRVc2VySW5pdGlhbE1lc3NhZ2UiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImluaXRpYWxDaGF0SWQiLCJzZXRJbml0aWFsQ2hhdElkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJuZXdDaGF0S2V5Iiwic2V0TmV3Q2hhdEtleSIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlc3Npb25NZXRhIiwic2V0U2Vzc2lvbk1ldGEiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwic2VuZE1lc3NhZ2VGdW5jdGlvbiIsInNldFNlbmRNZXNzYWdlRnVuY3Rpb24iLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0Iiwic3RvcEdlbmVyYXRpb25GdW5jdGlvbiIsInNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb24iLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwiaXNTdHJlYW1pbmciLCJzZXRJc1N0cmVhbWluZyIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJpc1dyaXRpbmciLCJzZXRJc1dyaXRpbmciLCJoYW5kbGVDbG9zZU1vZGFsIiwiaGFuZGxlRGlzbWlzc0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwiLCJoYW5kbGVDb25maXJtQ2xvc2VXaGlsZUdlbmVyYXRpbmciLCJhYm9ydEFsbCIsIl91c2VTdGF0ZTE5IiwiX3VzZVN0YXRlMjAiLCJyZWZldGNoQ2hhdHMiLCJzZXRSZWZldGNoQ2hhdHMiLCJfdXNlU3RhdGUyMSIsImhvbWUiLCJfdXNlU3RhdGUyMiIsInNldEN1cnJlbnRPcHRpb24iLCJfdXNlU3RhdGUyMyIsIl91c2VTdGF0ZTI0IiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIl91c2VTdGF0ZTI1IiwiX3VzZVN0YXRlMjYiLCJkaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJwcmV2SGFzUGlubmVkQ29udGV4dFJlZiIsImhhbmRsZXJzIiwiX3VzZVN0YXRlMjciLCJfdXNlU3RhdGUyOCIsInNpZGViYXJIYXNFcnJvciIsInNldFNpZGViYXJIYXNFcnJvciIsInJlc2V0U2VsZWN0ZWRDaGF0UmVmIiwibGFuZyIsImxhbmd1YWdlIiwibG9jYWxlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RBZ2VudCIsImNsZWFyQWdlbnQiLCJhZ2VudCIsInByb2plY3QiLCJjbGllbnQiLCJ0YXNrIiwiY2hpcHNQcm9qZWN0IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0IiwiYmFubmVyRW50cnlGYXEiLCJzZXRUYXNrIiwidG9vbHRpcFpJbmRleCIsIl91c2VHZXRBZ2VudHMiLCJoYW5kbGVHb0hvbWUiLCJhZ2VudHMiLCJsb2FkaW5nIiwibG9hZGluZ01vcmUiLCJhZ2VudEVycm9yIiwiZXJyb3IiLCJoYW5kbGVHZXRBZ2VudHMiLCJsb2FkTW9yZUFnZW50cyIsInNlYXJjaEN1c3RvbUFnZW50cyIsInNlYXJjaExvYWRpbmciLCJhZGRBZ2VudCIsInJlbW92ZUFnZW50IiwidXBkYXRlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInNvcnRBZ2VudHNMaXN0IiwiX3VzZUdldFNraWxscyIsInNraWxscyIsImxvYWRpbmdTa2lsbHMiLCJoYW5kbGVHZXRTa2lsbHMiLCJhZGRTa2lsbCIsInVwZGF0ZVNraWxsSW5MaXN0IiwicmVtb3ZlU2tpbGwiLCJpc01BSUEiLCJ1c2VySGFzUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNyZWF0ZSIsImVkaXQiLCJjb21wdXRlZEN1cnJlbnRPcHRpb24iLCJpc0dsb2JhbFNwZWNpYWxpc3QiLCJlbnRpdHkiLCJpc1Byb2plY3RTcGVjaWFsaXN0IiwiaXNDbGllbnRTcGVjaWFsaXN0IiwiaXNNYWlha2VyIiwibXlBZ2VudHMiLCJteVNraWxscyIsInR5cGUiLCJzaG91bGRTaG93UHJvamVjdFNlbGVjdG9yIiwic2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yIiwicHJvamVjdFNlbGVjdG9yIiwiY2xpZW50U2VsZWN0b3IiLCJuYW1lIiwiaXNNYWlha2VyQWdlbnRTZWxlY3RlZCIsInNpZGViYXJBZ2VudHNOYXZBY3RpdmUiLCJhZ2VudHNGZXRjaGVkUmVmIiwic2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiY29uY2F0IiwiX3VzZVN0YXRlMjkiLCJfdXNlU3RhdGUzMCIsImxheW91dE1vZGUiLCJzZXRMYXlvdXRNb2RlIiwiaGFuZGxlTGF5b3V0TW9kZUNoYW5nZSIsIm1vZGUiLCJleHBhbmRlZCIsImlzRmxvYXRpbmciLCJjb250ZW50V3JhcHBlclJlZiIsIl91c2VTdGF0ZTMxIiwiX3VzZVN0YXRlMzIiLCJkcmFnUG9zaXRpb24iLCJzZXREcmFnUG9zaXRpb24iLCJfdXNlRmxvYXRpbmdQYW5lbERyYWciLCJ0aWx0TW90aW9uIiwic3RhcnRQb2ludGVyVHJhY2tpbmciLCJzYW1wbGVQb2ludGVyTW92ZSIsImVuZFBvaW50ZXJUcmFja2luZyIsImRyYWdTdGF0ZVJlZiIsImNsYW1wRHJhZ1Bvc2l0aW9uIiwieCIsInkiLCJjb250ZW50V3JhcHBlciIsIl9jb250ZW50V3JhcHBlciRnZXRCbyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiaGVpZ2h0Iiwib2Zmc2V0IiwibWF4WCIsIk1hdGgiLCJtYXgiLCJpbm5lcldpZHRoIiwibWF4WSIsImlubmVySGVpZ2h0IiwibWluIiwicHJldiIsInBhZCIsImhhbmRsZURyYWdFbmQiLCJldmVudCIsIl9kcmFnU3RhdGVSZWYkY3VycmVudCIsInBvaW50ZXJJZCIsImJvZHkiLCJzdHlsZSIsInVzZXJTZWxlY3QiLCJjdXJzb3IiLCJoYW5kbGVEcmFnTW92ZSIsImRyYWdTdGF0ZSIsImNsaWVudFgiLCJjbGllbnRZIiwibmV4dFBvc2l0aW9uIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJyZXNvbHZlZERyYWdQb3NpdGlvbiIsImhhbmRsZURyYWdTdGFydCIsImJ1dHRvbiIsImNsb3Nlc3QiLCJyZWN0IiwiaW5pdGlhbFBvc2l0aW9uIiwibGVmdCIsInRvcCIsInBvaW50ZXJPZmZzZXRYIiwicG9pbnRlck9mZnNldFkiLCJjdXJyZW50VGFyZ2V0Iiwic2V0UG9pbnRlckNhcHR1cmUiLCJwcmV2ZW50RGVmYXVsdCIsImFpQ2hhdERyYWdnYWJsZSIsInN0YXJ0Q2hhdCIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsImNvbnRleHREYXRhIiwiX29iamVjdFNwcmVhZCIsImxlbmd0aCIsImJhbm5lckZhcUF1dG9TZW50UmVmIiwiX2Jhbm5lckVudHJ5RmFxJGZhcVRpIiwiZW50aXR5UmVhZHkiLCJmYXFUaXRsZSIsInRyaW0iLCJnb1RvQ2hhdCIsInNlbGVjdGVkQWdlbnQiLCJkYXRhIiwiYWdlbnRJdGVtIiwiYWdlbnRJZCIsImFwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXIiLCJkZXRhaWwiLCJfcmVzZXRTZWxlY3RlZENoYXRSZWYiLCJzZXRBY3RpdmVDaGF0SWQiLCJfZGV0YWlsJHByb2plY3QiLCJfZGV0YWlsJGNsaWVudCIsIl9kZXRhaWwkdGFzayIsIm5leHRMYXlvdXQiLCJmYXEiLCJoYW5kbGVTZW5kTWVzc2FnZVJlYWR5Iiwic2VuZE1lc3NhZ2UiLCJzdG9wR2VuZXJhdGlvbiIsInN0cmVhbWluZyIsIndyaXRpbmciLCJoYW5kbGVTZW5kTWVzc2FnZSIsImlzX2RlbGV0ZWQiLCJoYXNfbm90X3Blcm1pc3Npb25zIiwiaGFzX25vdF9hY2Nlc3MiLCJwcm9qZWN0X2RlbGV0ZWQiLCJoYW5kbGVTdGFydE5ld0NoYXQiLCJmcm9tTXlBZ2VudHMiLCJmcm9tTWFpYWtlckhvbWUiLCJfcmVzZXRTZWxlY3RlZENoYXRSZWYyIiwiZmlyc3RBZ2VudCIsImhhbmRsZVJlc2V0Q2hhdCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwid3JhcCIsIl9jb250ZXh0IiwibmV4dCIsInN0b3AiLCJoYW5kbGVCYWNrIiwidG8iLCJhaUNoYXRCYWNrIiwicGlubmVkIiwicHJvamVjdElkIiwid2FzUGlubmVkIiwib25NZXJnZUNyZWF0ZWRBZ2VudCIsImV2dCIsIl9yZWYzIiwibmV4dEFnZW50IiwibmF2aWdhdGVIb21lIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvblN5bmNFZGl0ZWRBZ2VudCIsIl9yZWY0Iiwib3BlbkNoYXRWaWV3Iiwib3BlbkhvbWUiLCJjbGllbnRJZCIsIm9wZW5Gcm9tSG9zdCIsIl9yZWY1Iiwib3Blbk5ld0NoYXRXaXRoQWdlbnQiLCJfZGV0YWlsJHByb2plY3QyIiwiX2RldGFpbCRjbGllbnQyIiwiX3JlZjYiLCJvblNlc3Npb25NZXRhIiwiX3JlZjciLCJsZWdhY3lDb250ZXh0U2Vzc2lvbiIsImFnZW50RW50aXR5IiwiaW5jbHVkZXMiLCJjb250ZXh0TmFtZSIsInRhc2tOYW1lIiwicHJvamVjdE5hbWUiLCJjbGllbnROYW1lIiwiZW50aXR5VHlwZSIsImlzX2xlZ2FjeV9jb250ZXh0IiwiaGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0IiwicElkIiwicE5hbWUiLCJjSWQiLCJjTmFtZSIsInRJZCIsInRhc2tJZCIsInROYW1lIiwib3JjaGVzdHJhdG9yIiwiYSIsIlN0cmluZyIsInNob3dOZXdDaGF0IiwiaGlkZUhlYWRlckFnZW50U2VsZWN0b3IiLCJpc015QWdlbnRzU2VjdGlvbiIsImhhc1Bpbm5lZENvbnRleHQiLCJpc0NoYXRWaWV3IiwiaXNIb21lU3RlcDIiLCJpc0hlYWRlckhvbWVTdGVwMiIsImlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyIiwic2hvd0JhY2tCdXR0b24iLCJoYW5kbGVPcGVuTWFya2V0cGxhY2UiLCJoYW5kbGVPcGVuU2tpbGxzIiwiaGFuZGxlR29Ub01haWFrZXIiLCJfY2FsbGVlMiIsIm1haWFrZXJBZ2VudCIsInJlc3BvbnNlIiwiX3QiLCJfY29udGV4dDIiLCJwYXRoIiwibWV0aG9kIiwic2VudCIsImpzb24iLCJhYnJ1cHQiLCJoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50cyIsImlzTWFpYWtlckNyZWF0b3JIb21lIiwibW9kYWxQYW5lbCIsImNoaWxkcmVuIiwib25Hb1RvQ2hhdCIsIm9uRXJyb3IiLCJoYW5kbGVHb1RvSG9tZSIsImhhbmRsZVNldFJlZmV0Y2hDaGF0cyIsImFnZW50c05hdkFjdGl2ZSIsImlzTGVnYWN5Q29udGV4dFNlc3Npb24iLCJmbG9hdGluZyIsIm9uTGF5b3V0TW9kZUNoYW5nZSIsImRyYWdnYWJsZSIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnTW92ZSIsIm9uRHJhZ0VuZCIsImhhc01vcmUiLCJoYXNfbW9yZSIsIm9uQWdlbnRVcGRhdGUiLCJpc01haWFrZXJTZWN0aW9uIiwiaGlkZUFnZW50U2VsZWN0b3IiLCJvbkJhY2siLCJyZWZzIiwib25TZW5kTWVzc2FnZVJlYWR5IiwibG9hZGluZ0FnZW50cyIsIm9uRGVsZXRlQWdlbnQiLCJvbkZhdm9yaXRlQWdlbnRVcGRhdGUiLCJoYXNNb3JlQWdlbnRzIiwibG9hZGluZ01vcmVBZ2VudHMiLCJvbkxvYWRNb3JlQWdlbnRzIiwib25Hb1RvTWFpYWtlciIsIm9uRGVsZXRlU2tpbGwiLCJvblNlYXJjaEFnZW50cyIsInNlYXJjaExvYWRpbmdBZ2VudHMiLCJvblJlc3RhcnRTdW1tYXJ5IiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJvbkNvbnRpbnVlSW5OZXdDaGF0IiwicmVmIiwib25DbG9zZSIsIm9uQ29uZmlybSIsImNyZWF0ZVBvcnRhbCIsImVsZXZhdGVkIiwiJG1pbmltaXplZCIsIiRoaWRkZW4iLCJ0aWx0Iiwib25SZXN0b3JlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1vZGFsL0NoYXRBSU1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LW5vLXVzZWxlc3MtZnJhZ21lbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQge1xuICBSZWZPYmplY3QsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VNZW1vLFxuICB1c2VTdGF0ZSxcbiAgdXNlUmVmLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgUG9pbnRlckV2ZW50IGFzIFJlYWN0UG9pbnRlckV2ZW50LFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgY2FuQWNjZXNzVG9DaGF0QUkgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvcGVybWlzc2lvbnMnXG5pbXBvcnQgeyBNQUlBRXJyb3IgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBRXJyb3InXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcblxuaW1wb3J0IHsgQ2hhdEFJQ29udGVudCB9IGZyb20gJy4uL0NoYXRBSUNvbnRlbnQnXG5pbXBvcnQgeyBidWlsZEhhbmRsZXJzLCBvcHRpb25zIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAnLi4vU2lkZWJhcidcbmltcG9ydCB7IHVzZUdldEFnZW50cyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2dldEFnZW50cydcbmltcG9ydCB7IHVzZUdldFNraWxscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2dldFNraWxscydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQsIHR5cGUgU2VjdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBDaGF0QUlNb2RhbEhlYWRlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlcidcbmltcG9ydCB7IFNuYWNrYmFyIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL1NuYWNrQmFyL1NuYWNrYmFyJ1xuaW1wb3J0IHsgUHJvamVjdFN1bW1hcnlDb250ZW50IH0gZnJvbSAnLi4vUHJvamVjdFN1bW1hcnlDb250ZW50J1xuaW1wb3J0IHsgQWJtQWdlbnRNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwnXG5pbXBvcnQgeyBBYm1Ta2lsbE1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibVNraWxsTW9kYWwvQWJtU2tpbGxNb2RhbCdcbmltcG9ydCB7IEFibVNraWxsR2VuZXJhdGVNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwvQWJtU2tpbGxHZW5lcmF0ZU1vZGFsJ1xuaW1wb3J0IHsgQ2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9DbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgU0NDQUlNQ29udGVudCwgU0NDQUlNQ29udGVudFdyYXBwZXIsIFNDQ0FJTU1pbmltaXplZEhpZGUsIFNDQ0FJTVdyYXBwZXIgfSBmcm9tICcuL0NoYXRBSU1vZGFsLnN0eWxlcydcbmltcG9ydCB7IE1haWFNaW5pbWl6ZWRQaWxsIH0gZnJvbSAnLi9jb21wb25lbnRzL01haWFNaW5pbWl6ZWRQaWxsJ1xuaW1wb3J0IHtcbiAgZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4LFxuICBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSxcbiAgcmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUsXG4gIHNldFN0b3JlZE1haWFDaGF0TGF5b3V0TW9kZSxcbn0gZnJvbSAnLi9sYXlvdXQnXG5pbXBvcnQgeyBGbG9hdGluZ1BhbmVsTW90aW9uLCB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQgfSBmcm9tICcuL2Zsb2F0aW5nUGFuZWxNb3Rpb24nXG5pbXBvcnQgeyBDaGF0QWlNb2RhbEZvb3RlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEZvb3RlcidcbmltcG9ydCB7IHZhbGlkYXRlSXNNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMvdmFsaWRhdGVJc01haWEnXG5pbXBvcnQgeyBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DbGllbnQnXG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvVGFzaydcbmltcG9ydCB7IHVzZUZhcXNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZUZhcXNTdG9yZSdcbmltcG9ydCB7IGdldENoYXRzU3RvcmVTdGF0ZSwgdXNlQ2hhdHNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZUNoYXRzU3RvcmUnXG5pbXBvcnQgdHlwZSB7IENoYXRMaXN0SXRlbSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2NoYXRzU3RvcmUudHlwZXMnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1NYW5hZ2VyJ1xuaW1wb3J0IHsgcmVhZE1pbmltaXplZFN0YXRlLCB3cml0ZU1pbmltaXplZFN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYU1pbmltaXplZFBlcnNpc3RlbmNlJ1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25zU3RvcmUnXG5pbXBvcnQgeyBpc0FjdGl2ZVNlc3Npb25TdGF0dXMgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9ucy50eXBlcydcbmltcG9ydCB7IGZldGNoTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvY2xpZW50J1xuaW1wb3J0IHsgbWFwQ09STGFuZyB9IGZyb20gJy4uLy4uLy4uL2xhbmcvdXRpbHMnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5ULCB0eXBlIE1haWFIb3N0T3BlbkRldGFpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL21haWFIb3N0T3BlbidcblxudHlwZSBDaGF0QUlNb2RhbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgaGFuZGxlQ2xvc2U/OiAoKSA9PiB2b2lkXG4gIHBhcmVudFJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD5cbn1cblxuLyoqIE1ldGFkYXRhIGRlIGxhIHNlc3Npb24gYWJpZXJ0YSAoZW1pdGlkYSBwb3IgdXNlQ2hhdE1lc3NhZ2VzIGFsIGNhcmdhciB1bmEgY29udmVyc2FjacOzbikuICovXG50eXBlIFNlc3Npb25NZXRhID0ge1xuICBjaGF0SWQ6IHN0cmluZ1xuICBhZ2VudFR5cGU/OiBzdHJpbmdcbiAgYWdlbnRFbnRpdHk/OiBzdHJpbmdcbiAgcHJvamVjdElkPzogbnVtYmVyXG4gIHByb2plY3ROYW1lPzogc3RyaW5nXG4gIGNsaWVudElkPzogbnVtYmVyXG4gIGNsaWVudE5hbWU/OiBzdHJpbmdcbiAgdGFza0lkPzogbnVtYmVyXG4gIHRhc2tOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IExFR0FDWV9DT05URVhUX0VOVElUSUVTID0gWydwcm9qZWN0JywgJ3Rhc2snLCAnY2xpZW50J10gYXMgY29uc3RcbnR5cGUgTGVnYWN5Q29udGV4dEVudGl0eSA9ICh0eXBlb2YgTEVHQUNZX0NPTlRFWFRfRU5USVRJRVMpW251bWJlcl1cblxudHlwZSBBaUNoYXRCYWNrRGVzdGluYXRpb24gPSAnZ2xvYmFsX2NvbnRleHRfaG9tZScgfCAndGFza19ob21lJyB8ICdwbGFubmVyX2hvbWUnIHwgJ3Byb2plY3RfaG9tZScgfCAnY2xpZW50X2hvbWUnXG5cbi8qKiBIb21lIGdsb2JhbCBkZWwgb3JjaGVzdHJhdG9yIChzb2xvIGhlYWRlcikuIFBsYW5uZXIgZXMgaG9tZSBkZSBGVUFzLCBubyBkZSBjb250ZXh0b3MuICovXG5jb25zdCBpc0dsb2JhbE1haWFTZWN0aW9uID0gKHNlY3Rpb246IFNlY3Rpb24pOiBib29sZWFuID0+IHNlY3Rpb24gPT09ICdoZWFkZXInXG5cbmNvbnN0IHJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24gPSAoXG4gIHNlY3Rpb246IFNlY3Rpb24sXG4gIGFnZW50VHlwZTogQWdlbnRbJ3R5cGUnXSB8IHVuZGVmaW5lZCxcbiAgY3VycmVudE9wdGlvbjogc3RyaW5nLFxuICBob21lT3B0aW9uOiBzdHJpbmdcbik6IEFpQ2hhdEJhY2tEZXN0aW5hdGlvbiA9PiB7XG4gIGlmIChpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGFnZW50VHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiYgY3VycmVudE9wdGlvbiA9PT0gaG9tZU9wdGlvbikge1xuICAgIHJldHVybiAnZ2xvYmFsX2NvbnRleHRfaG9tZSdcbiAgfVxuICBpZiAoc2VjdGlvbiA9PT0gJ3Rhc2snKSByZXR1cm4gJ3Rhc2tfaG9tZSdcbiAgaWYgKHNlY3Rpb24gPT09ICdwbGFubmVyJykgcmV0dXJuICdwbGFubmVyX2hvbWUnXG4gIGlmIChzZWN0aW9uID09PSAncHJvamVjdCcpIHJldHVybiAncHJvamVjdF9ob21lJ1xuICBpZiAoc2VjdGlvbiA9PT0gJ2NsaWVudCcpIHJldHVybiAnY2xpZW50X2hvbWUnXG4gIHJldHVybiAnZ2xvYmFsX2NvbnRleHRfaG9tZSdcbn1cblxuZXhwb3J0IGNvbnN0IElEX01PREFMX0NIQVRfQUdFTlQgPSAnbW9kYWxzLXBvcnRhbC1tYWlhLWNoYXQtYWdlbnQnXG5cbmNvbnN0IHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlID0gKHNlY3Rpb246IFNlY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkLCB1c2VyOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VVc2VyPikgPT4ge1xuICBpZiAoIXNlY3Rpb24gfHwgIWNhbkFjY2Vzc1RvQ2hhdEFJKHVzZXIpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBQbGFubmVyIHkgdGFzayBhYnJlbiBzaWVtcHJlIGVsIGNoYXQgKGhvbWUgZGUgRlVBcyksIG51bmNhIHJlc3VtZW4gZGUgcHJveWVjdG9zLlxuICBpZiAoc2VjdGlvbiA9PT0gJ3BsYW5uZXInIHx8IHNlY3Rpb24gPT09ICd0YXNrJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoc2VjdGlvbiA9PT0gJ2hlYWRlcicpIHtcbiAgICByZXR1cm4gQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTIHx8IHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKVxuICB9XG5cbiAgcmV0dXJuIEJvb2xlYW4od2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUylcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1vZGFsID0gKHsgaGFuZGxlQ2xvc2UgfTogQ2hhdEFJTW9kYWxQcm9wcykgPT4ge1xuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmFibUFnZW50XSlcbiAgY29uc3QgYW1wbGl0dWRFdmVudCA9IHVzZUV2ZW50KClcblxuICBjb25zdCBbc2hvd0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwsIHNldFNob3dDbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNNaW5pbWl6ZWQsIHNldElzTWluaW1pemVkXSA9IHVzZVN0YXRlKCgpID0+IHJlYWRNaW5pbWl6ZWRTdGF0ZSh1c2VyLmlkKS5taW5pbWl6ZWQpXG4gIGNvbnN0IHNldENoYXRWaWV3VmlzaWJsZSA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0Q2hhdFZpZXdWaXNpYmxlKVxuICBjb25zdCB1bnJlYWRDb3VudCA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUudW5yZWFkQ291bnQpXG4gIC8vIExvcyBcIi4uLlwiIGRlbCBwaWxsIHNhbGVuIGRlbCBtb3Rvciwgbm8gZGUgaXNTdHJlYW1pbmcvaXNXcml0aW5nOiBlc29zIHJlZmxlamFuXG4gIC8vIGxhIHNlc2nDs24gYWN0aXZhIHkgcXVlZGFuIHN0YWxlIGN1YW5kbyB1bmEgcmVzcHVlc3RhIHRlcm1pbmEgZW4gYmFja2dyb3VuZC5cbiAgY29uc3QgaGFzQWN0aXZlU3RyZWFtID0gdXNlU2Vzc2lvbnNTdG9yZShzdGF0ZSA9PlxuICAgIE9iamVjdC52YWx1ZXMoc3RhdGUubWV0YSkuc29tZShtZXRhID0+IGlzQWN0aXZlU2Vzc2lvblN0YXR1cyhtZXRhLnN0YXR1cykpXG4gIClcblxuICAvKiogQ2hhdCBhY3Rpdm8gYWwgbWluaW1pemFyOiBkZXN0aW5vIGRlIGZhbGxiYWNrIGFsIHJlYWJyaXIgc2kgbm8gaGF5IHNpbiBsZWVyLiAqL1xuICBjb25zdCBjaGF0SWRCZWZvcmVNaW5pbWl6ZVJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihyZWFkTWluaW1pemVkU3RhdGUodXNlci5pZCkuY2hhdElkKVxuICAvKiogZ29Ub0NoYXQgc2UgZGVmaW5lIG3DoXMgYWJham87IGVsIHJlZiBldml0YSBkZXBlbmRlciBkZWwgb3JkZW4gZGUgZGVjbGFyYWNpw7NuLiAqL1xuICBjb25zdCBnb1RvQ2hhdFJlZiA9IHVzZVJlZjwoKGNoYXQ6IENoYXRMaXN0SXRlbSkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuXG4gIC8vIE1vbnTDsyB5YSBtaW5pbWl6YWRvIChuYXZlZ2FjacOzbiBvIHJlZnJlc2NvKTogZWwgY2hhdCBubyBlc3TDoSBhIGxhIHZpc3RhLCBhc8OtIHF1ZVxuICAvLyBsYXMgcmVzcHVlc3RhcyBxdWUgbGxlZ3VlbiB0aWVuZW4gcXVlIHF1ZWRhciBjb21vIG5vIGxlw61kYXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzTWluaW1pemVkKSB7XG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUoZmFsc2UpXG4gICAgfVxuICAgIC8vIFPDs2xvIGFsIG1vbnRhcjogZGVzcHXDqXMgbG8gbWFuZWphbiBtaW5pbWl6YXIvcmVzdGF1cmFyLlxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVNaW5pbWl6ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBjaGF0SWQgPSBnZXRDaGF0c1N0b3JlU3RhdGUoKS5hY3RpdmVDaGF0SWRcbiAgICBjaGF0SWRCZWZvcmVNaW5pbWl6ZVJlZi5jdXJyZW50ID0gY2hhdElkXG4gICAgd3JpdGVNaW5pbWl6ZWRTdGF0ZSh1c2VyLmlkLCB7IG1pbmltaXplZDogdHJ1ZSwgY2hhdElkIH0pXG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0TWluaW1pemUpXG4gICAgc2V0SXNNaW5pbWl6ZWQodHJ1ZSlcbiAgICBzZXRDaGF0Vmlld1Zpc2libGUoZmFsc2UpXG4gIH0sIFthbXBsaXR1ZEV2ZW50LCBzZXRDaGF0Vmlld1Zpc2libGUsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGZvY3VzQ2hhdElucHV0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdtYWlhLWlucHV0LXJlZm9jdXMnKSlcbiAgICB9LCAxMDApXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzTWluaW1pemVkKGZhbHNlKVxuICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuICAgIHdyaXRlTWluaW1pemVkU3RhdGUodXNlci5pZCwgeyBtaW5pbWl6ZWQ6IGZhbHNlLCBjaGF0SWQ6IG51bGwgfSlcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRPcGVuLCB7IG9wdGlvbjogJ21pbmltaXplJyB9KVxuXG4gICAgLy8gRWwgcGlsbCByZXN0YXVyYSBkb25kZSBlbCB1c3VhcmlvIGRlasOzIGxhIHZpc3RhIGFsIG1pbmltaXphci4gU2kgb3RyYSBzZXNpw7NuXG4gICAgLy8gdGVybWluw7MgZW4gYmFja2dyb3VuZCB5IHF1ZWTDsyBzaW4gbGVlciwgbm8gcmVkaXJpZ2ltb3M6IGVsIGNvbnRhZG9yIGRlbCBwaWxsXG4gICAgLy8gYXZpc2E7IGVsIGZhbGxiYWNrIGEgc2luLWxlZXIgZXMgc29sbyBzaSBubyBoYWLDrWEgY2hhdCBhY3Rpdm8gYWwgbWluaW1pemFyLlxuICAgIGNvbnN0IHsgY2hhdHMgfSA9IGdldENoYXRzU3RvcmVTdGF0ZSgpXG4gICAgY29uc3QgY2hhdEJlZm9yZU1pbmltaXplID0gY2hhdElkQmVmb3JlTWluaW1pemVSZWYuY3VycmVudFxuICAgICAgPyBjaGF0cy5maW5kKGNoYXQgPT4gY2hhdC5zZXNzaW9uRXh0ZXJuYWxJZCA9PT0gY2hhdElkQmVmb3JlTWluaW1pemVSZWYuY3VycmVudClcbiAgICAgIDogdW5kZWZpbmVkXG4gICAgY29uc3QgZmlyc3RVbnJlYWQgPSBjaGF0cy5maW5kKGNoYXQgPT4gY2hhdC5pc1JlYWQgPT09IGZhbHNlKVxuICAgIGNvbnN0IHRhcmdldCA9IGNoYXRCZWZvcmVNaW5pbWl6ZSA/PyBmaXJzdFVucmVhZFxuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgZ29Ub0NoYXRSZWYuY3VycmVudD8uKHRhcmdldClcbiAgICB9XG5cbiAgICBmb2N1c0NoYXRJbnB1dCgpXG4gIH0sIFthbXBsaXR1ZEV2ZW50LCBmb2N1c0NoYXRJbnB1dCwgc2V0Q2hhdFZpZXdWaXNpYmxlLCB1c2VyLmlkXSlcblxuICBjb25zdCBoYW5kbGVDbG9zZUZyb21NaW5pbWl6ZWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNNaW5pbWl6ZWQoZmFsc2UpXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG4gICAgd3JpdGVNaW5pbWl6ZWRTdGF0ZSh1c2VyLmlkLCB7IG1pbmltaXplZDogZmFsc2UsIGNoYXRJZDogbnVsbCB9KVxuXG4gICAgLy8gQ29uIGdlbmVyYWNpw7NuIGVuIGN1cnNvIGhheSBxdWUgY29uZmlybWFyLiBFbCBvdmVybGF5IGRlbCBtb2RhbCBzZSBwb3NpY2lvbmFcbiAgICAvLyBzb2JyZSBlbCBwYW5lbCBkZWwgY2hhdCwgcXVlIGVzdMOhIG9jdWx0byBhbCBtaW5pbWl6YXIsIGFzw60gcXVlIHJlc3RhdXJhbW9zXG4gICAgLy8gcHJpbWVybyB5IG1vc3RyYW1vcyBlbCBtb2RhbCBzb2JyZSBsYSBjb252ZXJzYWNpw7NuLlxuICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID4gMCkge1xuICAgICAgc2V0U2hvd0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVzZUZhcXNTdG9yZS5nZXRTdGF0ZSgpLmNsZWFyRmFxcygpXG4gICAgaGFuZGxlQ2xvc2U/LigpXG4gIH0sIFtoYW5kbGVDbG9zZSwgc2V0Q2hhdFZpZXdWaXNpYmxlLCB1c2VyLmlkXSlcbiAgY29uc3QgW3VzZXJJbml0aWFsTWVzc2FnZSwgc2V0VXNlckluaXRpYWxNZXNzYWdlXSA9IHVzZVN0YXRlPHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgICBjb250ZXh0RGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIH0+KHtcbiAgICBtZXNzYWdlOiAnJyxcbiAgICBhdHRhY2htZW50czogW10sXG4gIH0pXG4gIGNvbnN0IFtpbml0aWFsQ2hhdElkLCBzZXRJbml0aWFsQ2hhdElkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtuZXdDaGF0S2V5LCBzZXROZXdDaGF0S2V5XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtzZXNzaW9uTWV0YSwgc2V0U2Vzc2lvbk1ldGFdID0gdXNlU3RhdGU8U2Vzc2lvbk1ldGEgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2VuZE1lc3NhZ2VGdW5jdGlvbiwgc2V0U2VuZE1lc3NhZ2VGdW5jdGlvbl0gPSB1c2VTdGF0ZTxcbiAgICB8ICgoXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICAgICkgPT4gdm9pZClcbiAgICB8IG51bGxcbiAgPihudWxsKVxuICBjb25zdCBbc3RvcEdlbmVyYXRpb25GdW5jdGlvbiwgc2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbl0gPSB1c2VTdGF0ZTwoKCkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBbaXNTdHJlYW1pbmcsIHNldElzU3RyZWFtaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNXcml0aW5nLCBzZXRJc1dyaXRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VNb2RhbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBFbCBhdmlzbyBzw7NsbyBhcGxpY2Egc2kgaGF5IHN0cmVhbXMgcmVhbG1lbnRlIGVuIHZ1ZWxvLiBpc1N0cmVhbWluZy9pc1dyaXRpbmdcbiAgICAvLyByZWZsZWphbiBsYSBzZXNpw7NuIGFjdGl2YSB5IHF1ZWRhbiBzdGFsZSBjdWFuZG8gbGEgcmVzcHVlc3RhIHRlcm1pbsOzIGVuIGJhY2tncm91bmQuXG4gICAgaWYgKHNlc3Npb25TdHJlYW1NYW5hZ2VyLmdldEFjdGl2ZUNvdW50KCkgPiAwKSB7XG4gICAgICBzZXRTaG93Q2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXNlRmFxc1N0b3JlLmdldFN0YXRlKCkuY2xlYXJGYXFzKClcbiAgICBoYW5kbGVDbG9zZT8uKClcbiAgfSwgW2hhbmRsZUNsb3NlXSlcblxuICBjb25zdCBoYW5kbGVEaXNtaXNzQ2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTaG93Q2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbChmYWxzZSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybUNsb3NlV2hpbGVHZW5lcmF0aW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIC8vIENlcnJhciBNQUlBIGNvcnRhIFRPREFTIGxhcyBzZXNpb25lcyBlbiB2dWVsbywgbm8gc8OzbG8gbGEgdmlzaWJsZS5cbiAgICBzZXNzaW9uU3RyZWFtTWFuYWdlci5hYm9ydEFsbCgpXG4gICAgc2V0U2hvd0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWwoZmFsc2UpXG4gICAgdXNlRmFxc1N0b3JlLmdldFN0YXRlKCkuY2xlYXJGYXFzKClcbiAgICBoYW5kbGVDbG9zZT8uKClcbiAgfSwgW2hhbmRsZUNsb3NlXSlcblxuICBjb25zdCBbcmVmZXRjaENoYXRzLCBzZXRSZWZldGNoQ2hhdHNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtjdXJyZW50T3B0aW9uLCBzZXRDdXJyZW50T3B0aW9uXSA9IHVzZVN0YXRlKG9wdGlvbnMuaG9tZSlcbiAgY29uc3QgW2hhc0Vycm9yLCBzZXRIYXNFcnJvcl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgLy8gRW4gcHJvamVjdC9jbGllbnQvdGFzazogZWwgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gZGVsIG9yY2hlc3RyYXRvciAobG8gbGltcGnDsyB5IHBhc8OzIHBvclxuICAvLyBlbCBzZWxlY3RvciBkZSBjb250ZXh0b3MgcmVjaWVudGVzKS4gSGFiaWxpdGEgZWwgYm90w7NuIFwidm9sdmVyXCIgZW4gZWwgaG9tZSBwYXNvIDIgZGUgZXNhc1xuICAvLyBzZWNjaW9uZXMuIFNlIHJlc2V0ZWEgYWwgY2VycmFyL3JlYWJyaXIgZWwgbW9kYWwgKGVsIGNvbXBvbmVudGUgc2UgZGVzbW9udGEpLlxuICBjb25zdCBbZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uLCBzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb25dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHByZXZIYXNQaW5uZWRDb250ZXh0UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBoYW5kbGVycyA9IHVzZU1lbW8oKCkgPT4gYnVpbGRIYW5kbGVycyhzZXRDdXJyZW50T3B0aW9uLCBzZXRIYXNFcnJvciksIFtdKVxuICBjb25zdCBbc2lkZWJhckhhc0Vycm9yLCBzZXRTaWRlYmFySGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHJlc2V0U2VsZWN0ZWRDaGF0UmVmID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhbmcgPSBpMThuLmxhbmd1YWdlID09PSAnYnInID8gJ3B0LWJyJyA6IGkxOG4ubGFuZ3VhZ2VcblxuICBtb21lbnQubG9jYWxlKGxhbmcpXG5cbiAgY29uc3Qge1xuICAgIHNlbGVjdEFnZW50LFxuICAgIGNsZWFyQWdlbnQsXG4gICAgc2VjdGlvbixcbiAgICBhZ2VudCxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGJhbm5lckVudHJ5RmFxLFxuICAgIHNldFRhc2ssXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICAvLyBaLWluZGV4IHBhcmEgdG9vbHRpcHMgZW4gc2VjdGlvbiAndGFzaycgKG1vZGFsIGZsb3RhbnRlIGVsZXZhZG8pXG4gIGNvbnN0IHRvb2x0aXBaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDE1MDAsICdvdmVybGF5JylcblxuICBjb25zdCB7XG4gICAgYWdlbnRzLFxuICAgIGxvYWRpbmcsXG4gICAgbG9hZGluZ01vcmUsXG4gICAgZXJyb3I6IGFnZW50RXJyb3IsXG4gICAgaGFuZGxlR2V0QWdlbnRzLFxuICAgIGxvYWRNb3JlQWdlbnRzLFxuICAgIHNlYXJjaEN1c3RvbUFnZW50cyxcbiAgICBzZWFyY2hMb2FkaW5nLFxuICAgIGFkZEFnZW50LFxuICAgIHJlbW92ZUFnZW50LFxuICAgIHVwZGF0ZUFnZW50LFxuICAgIHVwZGF0ZUFnZW50RmF2b3JpdGUsXG4gICAgc2VsZWN0Rmlyc3RBZ2VudCxcbiAgICBzb3J0QWdlbnRzTGlzdCxcbiAgfSA9IHVzZUdldEFnZW50cyh7IHNlbGVjdEFnZW50LCBzZWN0aW9uLCBhZ2VudCwgaGFuZGxlR29Ib21lOiBoYW5kbGVycy5ob21lIH0pXG5cbiAgY29uc3QgeyBza2lsbHMsIGxvYWRpbmc6IGxvYWRpbmdTa2lsbHMsIGhhbmRsZUdldFNraWxscywgYWRkU2tpbGwsIHVwZGF0ZVNraWxsSW5MaXN0LCByZW1vdmVTa2lsbCB9ID0gdXNlR2V0U2tpbGxzKClcblxuICBjb25zdCBpc01BSUEgPSB2YWxpZGF0ZUlzTWFpYShhZ2VudCBhcyBBZ2VudClcblxuICBjb25zdCB1c2VySGFzUGVybWlzc2lvbnMgPVxuICAgICh1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5jcmVhdGUgfHxcbiAgICAgIHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHM/LmVkaXQgfHxcbiAgICAgIHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHM/LmRlbGV0ZSkgJiZcbiAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuXG4gIGNvbnN0IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGlzR2xvYmFsU3BlY2lhbGlzdCA9IGlzTUFJQSAmJiBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJ1xuICAgIGNvbnN0IGlzUHJvamVjdFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgKGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0JyB8fCBhZ2VudD8uZW50aXR5ID09IG51bGwpXG4gICAgY29uc3QgaXNDbGllbnRTcGVjaWFsaXN0ID0gaXNNQUlBICYmIGFnZW50Py5lbnRpdHkgPT09ICdjbGllbnQnXG4gICAgY29uc3QgaXNNYWlha2VyID0gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpXG5cbiAgICBpZiAoY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cyAmJiB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubXlBZ2VudHNcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teVNraWxscyAmJiB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubXlTa2lsbHNcbiAgICB9XG5cbiAgICAvLyBFbCBvcmNoZXN0cmF0b3IgKE1BSUEpIG11ZXN0cmEgc3UgaG9tZSBjb24gRkFRcy9hY2Npb25lcyBmcmVjdWVudGVzOyBlbCByZXN0byBkZVxuICAgIC8vIGxvcyBnbG9iYWwgc3BlY2lhbGlzdHMgKGNsb25lcyBnbG9iYWxlcyBuby1tYWlha2VyKSBzaWd1ZW4geWVuZG8gZGlyZWN0byBhbCBjaGF0LlxuICAgIGlmIChpc0dsb2JhbFNwZWNpYWxpc3QgJiYgIWlzTWFpYWtlciAmJiBhZ2VudD8udHlwZSAhPT0gJ29yY2hlc3RyYXRvcicgJiYgY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5jaGF0XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkU2hvd1Byb2plY3RTZWxlY3RvciA9IGN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCAmJiBpc1Byb2plY3RTcGVjaWFsaXN0ICYmICFwcm9qZWN0XG4gICAgY29uc3Qgc2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yID0gY3VycmVudE9wdGlvbiAhPT0gb3B0aW9ucy5jaGF0ICYmIGlzQ2xpZW50U3BlY2lhbGlzdCAmJiAhY2xpZW50XG5cbiAgICBpZiAoc2hvdWxkU2hvd1Byb2plY3RTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucHJvamVjdFNlbGVjdG9yXG4gICAgfVxuICAgIGlmIChzaG91bGRTaG93Q2xpZW50U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmNsaWVudFNlbGVjdG9yXG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50T3B0aW9uXG4gIH0sIFtjdXJyZW50T3B0aW9uLCBwcm9qZWN0LCBjbGllbnQsIGlzTUFJQSwgYWdlbnQ/LmVudGl0eSwgYWdlbnQ/Lm5hbWUsIGFnZW50Py50eXBlXSlcblxuICBjb25zdCBpc01haWFrZXJBZ2VudFNlbGVjdGVkID0gdXNlTWVtbygoKSA9PiBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudChhZ2VudCksIFthZ2VudF0pXG5cbiAgY29uc3Qgc2lkZWJhckFnZW50c05hdkFjdGl2ZSA9IHVzZU1lbW8oKCk6ICdtYWlha2VyJyB8ICdteUFnZW50cycgfCAnbXlTa2lsbHMnIHwgbnVsbCA9PiB7XG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teVNraWxscykgcmV0dXJuICdteVNraWxscydcbiAgICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15QWdlbnRzKSByZXR1cm4gJ215QWdlbnRzJ1xuICAgIGlmIChpc01haWFrZXJBZ2VudFNlbGVjdGVkKSByZXR1cm4gJ21haWFrZXInXG4gICAgcmV0dXJuIG51bGxcbiAgfSwgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZF0pXG5cbiAgLyogUmVhY3RpdmFyIGNvbiBsYSBmaWxhIOKAnE1pcyBhZ2VudGVz4oCdIGVuIFNpZGViYXI6IG15QWdlbnRzQ291bnQgcHJvcFxuICBjb25zdCBzaWRlYmFyTXlBZ2VudHNDb3VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBhZ2VudHMuZGF0YS5maWx0ZXIoXG4gICAgICBhID0+ICEoYS50eXBlID09PSAnb3JjaGVzdHJhdG9yJyB8fCAoYS50eXBlID09PSAnY2xvbmUnICYmIGEuZW50aXR5ID09PSAnZ2xvYmFsJyAmJiAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhLm5hbWUgfHwgJycpKSlcbiAgICApXG4gICAgICAubGVuZ3RoXG4gIH0sIFthZ2VudHMuZGF0YV0pXG4gICovXG5cbiAgY29uc3QgYWdlbnRzRmV0Y2hlZFJlZiA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCBzZWxlY3RvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke0lEX01PREFMX0NIQVRfQUdFTlR9YClcblxuICAvLyBUYXNrIHBhbmVsLCBwbGFubmVyIHkgYmFubmVyIGRlIHByb3llY3RvIGFicmVuIGVuIGZsb3RhbnRlIHBvciBkZWZhdWx0IChubyB0YXBhciBlbCBjb250ZXh0byBkZXRyw6FzKS5cbiAgLy8gRnVlcmEgZGUgZXNvcyBjb250ZXh0b3Mgc2UgcmVzcGV0YSBsYSBwcmVmZXJlbmNpYSBndWFyZGFkYSBlbiBsb2NhbFN0b3JhZ2UuXG4gIGNvbnN0IFtsYXlvdXRNb2RlLCBzZXRMYXlvdXRNb2RlXSA9IHVzZVN0YXRlPE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlPigoKSA9PlxuICAgIHJlc29sdmVJbml0aWFsTWFpYUNoYXRMYXlvdXRNb2RlKHsgc2VjdGlvbiwgYmFubmVyRW50cnlGYXEgfSlcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUxheW91dE1vZGVDaGFuZ2UgPSB1c2VDYWxsYmFjaygobW9kZTogTWFpYUNoYXRNb2RhbExheW91dE1vZGUpID0+IHtcbiAgICBzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUobW9kZSlcbiAgICBzZXRMYXlvdXRNb2RlKG1vZGUpXG4gIH0sIFtdKVxuICBjb25zdCBleHBhbmRlZCA9IGxheW91dE1vZGUgPT09ICdmdWxsc2NyZWVuJ1xuICBjb25zdCBpc0Zsb2F0aW5nID0gbGF5b3V0TW9kZSA9PT0gJ2Zsb2F0aW5nJ1xuICBjb25zdCBjb250ZW50V3JhcHBlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgW2RyYWdQb3NpdGlvbiwgc2V0RHJhZ1Bvc2l0aW9uXSA9IHVzZVN0YXRlPHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHsgdGlsdE1vdGlvbiwgc3RhcnRQb2ludGVyVHJhY2tpbmcsIHNhbXBsZVBvaW50ZXJNb3ZlLCBlbmRQb2ludGVyVHJhY2tpbmcgfSA9XG4gICAgdXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0KGlzRmxvYXRpbmcpXG4gIGNvbnN0IGRyYWdTdGF0ZVJlZiA9IHVzZVJlZjx7XG4gICAgcG9pbnRlcklkOiBudW1iZXJcbiAgICBvZmZzZXRYOiBudW1iZXJcbiAgICBvZmZzZXRZOiBudW1iZXJcbiAgfSB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgY2xhbXBEcmFnUG9zaXRpb24gPSB1c2VDYWxsYmFjaygoeDogbnVtYmVyLCB5OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBjb250ZW50V3JhcHBlciA9IGNvbnRlbnRXcmFwcGVyUmVmLmN1cnJlbnRcbiAgICBpZiAoIWNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICByZXR1cm4geyB4LCB5IH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGNvbnRlbnRXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgY29uc3Qgb2Zmc2V0ID0gMTZcbiAgICBjb25zdCBtYXhYID0gTWF0aC5tYXgob2Zmc2V0LCB3aW5kb3cuaW5uZXJXaWR0aCAtIHdpZHRoIC0gb2Zmc2V0KVxuICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heChvZmZzZXQsIHdpbmRvdy5pbm5lckhlaWdodCAtIGhlaWdodCAtIG9mZnNldClcblxuICAgIHJldHVybiB7XG4gICAgICB4OiBNYXRoLm1pbihNYXRoLm1heCh4LCBvZmZzZXQpLCBtYXhYKSxcbiAgICAgIHk6IE1hdGgubWluKE1hdGgubWF4KHksIG9mZnNldCksIG1heFkpLFxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGF5b3V0TW9kZSAhPT0gJ2Zsb2F0aW5nJykge1xuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKG51bGwpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiB7XG4gICAgICBpZiAocHJldikge1xuICAgICAgICByZXR1cm4gY2xhbXBEcmFnUG9zaXRpb24ocHJldi54LCBwcmV2LnkpXG4gICAgICB9XG4gICAgICBjb25zdCBwYWQgPSAxNlxuICAgICAgY29uc3QgeCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4KCkgLSBwYWRcbiAgICAgIHJldHVybiBjbGFtcERyYWdQb3NpdGlvbih4LCBwYWQpXG4gICAgfSlcbiAgfSwgW2xheW91dE1vZGUsIGNsYW1wRHJhZ1Bvc2l0aW9uXSlcblxuICBjb25zdCBoYW5kbGVEcmFnRW5kID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGVuZFBvaW50ZXJUcmFja2luZygpXG4gICAgICBpZiAoZHJhZ1N0YXRlUmVmLmN1cnJlbnQ/LnBvaW50ZXJJZCAhPT0gZXZlbnQucG9pbnRlcklkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBkcmFnU3RhdGVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICcnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICcnXG4gICAgfSxcbiAgICBbZW5kUG9pbnRlclRyYWNraW5nXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRHJhZ01vdmUgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgZHJhZ1N0YXRlID0gZHJhZ1N0YXRlUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZHJhZ1N0YXRlIHx8IGRyYWdTdGF0ZS5wb2ludGVySWQgIT09IGV2ZW50LnBvaW50ZXJJZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2FtcGxlUG9pbnRlck1vdmUoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSlcblxuICAgICAgY29uc3QgbmV4dFBvc2l0aW9uID0gY2xhbXBEcmFnUG9zaXRpb24oZXZlbnQuY2xpZW50WCAtIGRyYWdTdGF0ZS5vZmZzZXRYLCBldmVudC5jbGllbnRZIC0gZHJhZ1N0YXRlLm9mZnNldFkpXG5cbiAgICAgIHNldERyYWdQb3NpdGlvbihwcmV2ID0+IHtcbiAgICAgICAgaWYgKHByZXYgJiYgcHJldi54ID09PSBuZXh0UG9zaXRpb24ueCAmJiBwcmV2LnkgPT09IG5leHRQb3NpdGlvbi55KSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dFBvc2l0aW9uXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBzYW1wbGVQb2ludGVyTW92ZV1cbiAgKVxuXG4gIGNvbnN0IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGxheW91dE1vZGUgIT09ICdmbG9hdGluZycpIHtcbiAgICAgIHJldHVybiBkcmFnUG9zaXRpb25cbiAgICB9XG4gICAgaWYgKGRyYWdQb3NpdGlvbikge1xuICAgICAgcmV0dXJuIGRyYWdQb3NpdGlvblxuICAgIH1cbiAgICBjb25zdCBwYWQgPSAxNlxuICAgIGNvbnN0IHggPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIC0gZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4KCkgLSBwYWQgOiBwYWRcbiAgICByZXR1cm4gY2xhbXBEcmFnUG9zaXRpb24oeCwgcGFkKVxuICB9LCBbbGF5b3V0TW9kZSwgZHJhZ1Bvc2l0aW9uLCBjbGFtcERyYWdQb3NpdGlvbl0pXG5cbiAgY29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmICghaXNGbG9hdGluZyB8fCBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KCdidXR0b24sIGEsIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBbcm9sZT1cImJ1dHRvblwiXSwgW2RhdGEtbm8tZHJhZz1cInRydWVcIl0nKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoIWNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGluaXRpYWxQb3NpdGlvbiA9IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID8/IGNsYW1wRHJhZ1Bvc2l0aW9uKHJlY3QubGVmdCwgcmVjdC50b3ApXG4gICAgICBjb25zdCBwb2ludGVyT2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggLSBpbml0aWFsUG9zaXRpb24ueFxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFkgPSBldmVudC5jbGllbnRZIC0gaW5pdGlhbFBvc2l0aW9uLnlcblxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKGluaXRpYWxQb3NpdGlvbilcbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0ge1xuICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCxcbiAgICAgICAgb2Zmc2V0WDogcG9pbnRlck9mZnNldFgsXG4gICAgICAgIG9mZnNldFk6IHBvaW50ZXJPZmZzZXRZLFxuICAgICAgfVxuXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZClcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZydcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdERyYWdnYWJsZSlcbiAgICAgIHN0YXJ0UG9pbnRlclRyYWNraW5nKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG4gICAgfSxcbiAgICBbY2xhbXBEcmFnUG9zaXRpb24sIGlzRmxvYXRpbmcsIHJlc29sdmVkRHJhZ1Bvc2l0aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IHN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2Uoe1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8ICcnLFxuICAgICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMgfHwgW10sXG4gICAgICAgIC4uLihmYXFJZCA/IHsgZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4obWVudGlvbnMgJiYgbWVudGlvbnMubGVuZ3RoID4gMCA/IHsgbWVudGlvbnMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGZ1YUlkID8geyBmdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4oc2NJZCA/IHsgc2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhIH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGJhbm5lckZhcUF1dG9TZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZW50aXR5UmVhZHkgPSBzZWN0aW9uID09PSAncHJvamVjdCcgPyBCb29sZWFuKHByb2plY3Q/LmlkKSA6IHNlY3Rpb24gPT09ICdjbGllbnQnID8gQm9vbGVhbihjbGllbnQ/LmlkKSA6IHRydWVcblxuICAgIGlmICghYmFubmVyRW50cnlGYXE/LmZhcVRpdGxlPy50cmltKCkgfHwgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCB8fCBsb2FkaW5nIHx8ICFhZ2VudD8uaWQgfHwgIWVudGl0eVJlYWR5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBiYW5uZXJGYXFBdXRvU2VudFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHN0YXJ0Q2hhdChcbiAgICAgIGJhbm5lckVudHJ5RmFxLmZhcVRpdGxlLFxuICAgICAgW10sXG4gICAgICBiYW5uZXJFbnRyeUZhcS5mYXFJZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGJhbm5lckVudHJ5RmFxLmNvbnRleHREYXRhXG4gICAgKVxuICB9LCBbXG4gICAgYmFubmVyRW50cnlGYXE/LmZhcUlkLFxuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFUaXRsZSxcbiAgICBiYW5uZXJFbnRyeUZhcT8uY29udGV4dERhdGEsXG4gICAgbG9hZGluZyxcbiAgICBhZ2VudD8uaWQsXG4gICAgYWdlbnQ/LmVudGl0eSxcbiAgICBwcm9qZWN0Py5pZCxcbiAgICBjbGllbnQ/LmlkLFxuICAgIHNlY3Rpb24sXG4gICAgc3RhcnRDaGF0LFxuICBdKVxuXG4gIGNvbnN0IGdvVG9DaGF0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGNoYXQ6IGFueSkgPT4ge1xuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICAgICAgY29uc3Qgc2VsZWN0ZWRBZ2VudCA9IGFnZW50cy5kYXRhLmZpbmQoYWdlbnRJdGVtID0+IGFnZW50SXRlbS5pZCA9PT0gY2hhdC5hZ2VudElkKVxuICAgICAgaWYgKHNlbGVjdGVkQWdlbnQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc2VsZWN0ZWRBZ2VudClcbiAgICAgIH1cbiAgICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgYWdlbnRzLCBzZWxlY3RBZ2VudF1cbiAgKVxuXG4gIGdvVG9DaGF0UmVmLmN1cnJlbnQgPSBnb1RvQ2hhdFxuXG4gIC8qKlxuICAgKiBUb21hIGNvbnRyb2wgZGVzZGUgdW4gaG9zdCAoaGVhZGVyLCBwcm95ZWN0bywgY2xpZW50ZeKApik6IGV4cGFuZGUgc2kgZXN0YWJhIG1pbmltaXphZG8sXG4gICAqIGRlc2NhcnRhIGxhIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSB5IGFwbGljYSBlbCBjb250ZXh0byBkZWwgaG9zdC4gTk8gcmVzdGF1cmEgbGEgc2VzacOzblxuICAgKiBndWFyZGFkYSBhbCBtaW5pbWl6YXIg4oCUIGVzbyBzw7NsbyBsbyBoYWNlIGVsIHBpbGwgKGBoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZGApLlxuICAgKi9cbiAgY29uc3QgYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3ZlciA9IHVzZUNhbGxiYWNrKFxuICAgIChkZXRhaWw6IE1haWFIb3N0T3BlbkRldGFpbCkgPT4ge1xuICAgICAgc2V0SXNNaW5pbWl6ZWQoZmFsc2UpXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUodHJ1ZSlcbiAgICAgIHdyaXRlTWluaW1pemVkU3RhdGUodXNlci5pZCwgeyBtaW5pbWl6ZWQ6IGZhbHNlLCBjaGF0SWQ6IG51bGwgfSlcblxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgICBzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24oZmFsc2UpXG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHVzZUZhcXNTdG9yZS5nZXRTdGF0ZSgpLmNsZWFyRmFxcygpXG4gICAgICBiYW5uZXJGYXFBdXRvU2VudFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQ/LigpXG4gICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5zZXRBY3RpdmVDaGF0SWQobnVsbClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuXG4gICAgICBpZiAoZGV0YWlsLnNlY3Rpb24gPT09ICdwcm9qZWN0JyB8fCBkZXRhaWwuc2VjdGlvbiA9PT0gJ3Rhc2snKSB7XG4gICAgICAgIHNldFByb2plY3Q/LihkZXRhaWwucHJvamVjdCA/PyBudWxsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0UHJvamVjdD8uKG51bGwpXG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRhaWwuc2VjdGlvbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4oZGV0YWlsLmNsaWVudCA/PyBudWxsKVxuICAgICAgfSBlbHNlIGlmIChkZXRhaWwuc2VjdGlvbiA9PT0gJ2hlYWRlcicgfHwgZGV0YWlsLnNlY3Rpb24gPT09ICdwbGFubmVyJykge1xuICAgICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgfVxuXG4gICAgICBpZiAoZGV0YWlsLnNlY3Rpb24gPT09ICd0YXNrJykge1xuICAgICAgICBzZXRUYXNrPy4oZGV0YWlsLnRhc2sgPz8gbnVsbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgfVxuXG4gICAgICBpZiAoZGV0YWlsLnNlY3Rpb24gPT09ICdoZWFkZXInIHx8IGRldGFpbC5zZWN0aW9uID09PSAncGxhbm5lcicpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRMYXlvdXQgPSByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7XG4gICAgICAgIHNlY3Rpb246IGRldGFpbC5zZWN0aW9uIGFzIFNlY3Rpb24sXG4gICAgICAgIGJhbm5lckVudHJ5RmFxOiBkZXRhaWwuZmFxLFxuICAgICAgfSlcbiAgICAgIHNldExheW91dE1vZGUobmV4dExheW91dClcbiAgICAgIHNldERyYWdQb3NpdGlvbihudWxsKVxuXG4gICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgfSxcbiAgICBbZm9jdXNDaGF0SW5wdXQsIHNldENoYXRWaWV3VmlzaWJsZSwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2ssIHVzZXIuaWRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTZW5kTWVzc2FnZVJlYWR5ID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgc2VuZE1lc3NhZ2U6IChcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgICAgc2NJZD86IHN0cmluZ1xuICAgICAgKSA9PiB2b2lkLFxuICAgICAgc3RvcEdlbmVyYXRpb246ICgpID0+IHZvaWQsXG4gICAgICBzdHJlYW1pbmc6IGJvb2xlYW4sXG4gICAgICB3cml0aW5nOiBib29sZWFuXG4gICAgKSA9PiB7XG4gICAgICBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uKCgpID0+IHNlbmRNZXNzYWdlKVxuICAgICAgc2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbigoKSA9PiBzdG9wR2VuZXJhdGlvbilcbiAgICAgIHNldElzU3RyZWFtaW5nKHN0cmVhbWluZylcbiAgICAgIHNldElzV3JpdGluZyh3cml0aW5nKVxuICAgIH0sXG4gICAgW11cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAoc2VuZE1lc3NhZ2VGdW5jdGlvbiAmJiBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgICBzZW5kTWVzc2FnZUZ1bmN0aW9uKG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0Q2hhdChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbc2VuZE1lc3NhZ2VGdW5jdGlvbiwgc3RhcnRDaGF0LCBjb21wdXRlZEN1cnJlbnRPcHRpb24sIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUdvSG9tZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBTaSBlc3RhbW9zIGVuIHVuYSBjb252ZXJzYWNpw7NuIHkgdmFtb3MgYSBob21lLCByZXNldGVhciBpbml0aWFsQ2hhdElkIHkgaW5jcmVtZW50YXIgbmV3Q2hhdEtleVxuICAgIGlmIChjdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpIHtcbiAgICAgIC8vIE5vIGNvcnRhbW9zIGxhIGdlbmVyYWNpw7NuOiBsYSBzZXNpw7NuIHNpZ3VlIHJlc3BvbmRpZW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgLy8gTm8gYm9ycmFyIGVsIGNsaWVudGUgc2kgZXMgYWdlbnRlIGRlIGNsaWVudGVzIChpZ3VhbCBxdWUgZWwgcHJveWVjdG8gc2UgbWFudGllbmUpXG4gICAgICBpZiAoYWdlbnQ/LmVudGl0eSAhPT0gJ2NsaWVudCcpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH1cbiAgICAgIGlmIChzZWN0aW9uICE9PSAndGFzaycpIHtcbiAgICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgICghYWdlbnQgfHwgYWdlbnQ/LmlzX2RlbGV0ZWQgfHwgYWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgfHwgYWdlbnQ/Lmhhc19ub3RfYWNjZXNzIHx8IGFnZW50Py5wcm9qZWN0X2RlbGV0ZWQpICYmXG4gICAgICBhZ2VudHMuZGF0YS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBzZWxlY3RBZ2VudChhZ2VudHMuZGF0YVswXSlcbiAgICB9XG4gICAgLy8gT3JjaGVzdHJhdG9yIGVuIGhvbWUgZ2xvYmFsIChoZWFkZXIvcGxhbm5lcik6IGFsIGluaWNpYXIgdW4gY2hhdCBudWV2byBzZSBkZWJlIHZvbHZlciBhbCBwYXNvIDFcbiAgICAvLyAobGlzdGEgZGUgY29udGV4dG9zIHJlY2llbnRlcyksIHBvciBsbyBxdWUgaGF5IHF1ZSBsaW1waWFyIHRvZG8gZWwgY29udGV4dG8gcGluZWFkby5cbiAgICBpZiAoaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicpIHtcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrPy4obnVsbClcbiAgICB9XG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUgJiYgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gICAgfVxuICB9LCBbXG4gICAgb3B0aW9ucy5ob21lLFxuICAgIG9wdGlvbnMuY2hhdCxcbiAgICBjdXJyZW50T3B0aW9uLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBhZ2VudCxcbiAgICBhZ2VudHMsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0VGFzayxcbiAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLFxuICAgIHNlY3Rpb24sXG4gIF0pXG5cbiAgY29uc3QgaGFuZGxlU3RhcnROZXdDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGZyb21NeUFnZW50cyA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50c1xuICAgIGNvbnN0IGZyb21NYWlha2VySG9tZSA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRcblxuICAgIGlmIChmcm9tTXlBZ2VudHMgfHwgZnJvbU1haWFrZXJIb21lKSB7XG4gICAgICBjb25zdCBmaXJzdEFnZW50ID0gYWdlbnRzLmRhdGFbMF1cbiAgICAgIGlmIChmaXJzdEFnZW50KSB7XG4gICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICAgIHNlbGVjdEFnZW50KGZpcnN0QWdlbnQpXG4gICAgICB9XG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50Py4oKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbXG4gICAgYWdlbnRzLmRhdGEsXG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIGhhbmRsZUdvSG9tZSxcbiAgICBpc01haWFrZXJBZ2VudFNlbGVjdGVkLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNlbGVjdEFnZW50LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIHNldFRhc2ssXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICBdKVxuXG4gIGNvbnN0IGhhbmRsZVJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgIGhhbmRsZUdvSG9tZSgpXG4gIH0sIFtoYW5kbGVHb0hvbWVdKVxuXG4gIC8vIEJvdMOzbiBcInZvbHZlclwiIGRlbCBoZWFkZXIgKHNvbG8gb3JjaGVzdHJhdG9yKTpcbiAgLy8gLSBEZXNkZSBlbCBjaGF0IChoZWFkZXIgbyBwcm9qZWN0L2NsaWVudC90YXNrKTogaW5pY2lhIHVuYSBjb252ZXJzYWNpw7NuIG51ZXZhIGNvbnNlcnZhbmRvIGVsXG4gIC8vICAgY29udGV4dG8gcGluZWFkbyB5IHZ1ZWx2ZSBhbCBob21lIChwYXNvIDIgY29uIEZBUXMvRlVBcykuXG4gIC8vIC0gRW4gZWwgaG9tZSBwYXNvIDIgKEZBUXMvRlVBcyBjb24gY29udGV4dG8pOiBsaW1waWEgZWwgY29udGV4dG8gcGluZWFkbyB5IHZ1ZWx2ZSBhbCBwYXNvIDFcbiAgLy8gICAoc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcykuIEVuIGhlYWRlciBzaWVtcHJlOyBlbiBwcm9qZWN0L2NsaWVudC90YXNrIHNvbG8gc2kgZWxcbiAgLy8gICB1c3VhcmlvIHJlaW5pY2nDsyBlbCBjb250ZXh0byAoZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKS5cbiAgY29uc3QgaGFuZGxlQmFjayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB0byA9IHJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24oc2VjdGlvbiwgYWdlbnQ/LnR5cGUsIGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgb3B0aW9ucy5ob21lKVxuICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdEJhY2ssIHsgdG8gfSlcblxuICAgIC8vIERlc2RlIGVsIGNoYXQg4oaSIG51ZXZhIGNvbnZlcnNhY2nDs24gU0lOIGJvcnJhciBlbCBjb250ZXh0byBwaW5lYWRvLCB2b2x2aWVuZG8gYWwgaG9tZS5cbiAgICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpIHtcbiAgICAgIC8vIE5vIGNvcnRhbW9zIGxhIGdlbmVyYWNpw7NuOiBsYSBzZXNpw7NuIHNpZ3VlIHJlc3BvbmRpZW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSAmJiB0b2dnbGVXZWJTZWFyY2goKVxuICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gICAgICB9XG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSG9tZSBwYXNvIDIgKGNvbnRleHRvIHBpbmVhZG8pIOKGkiBsaW1waWFyIGVsIGNvbnRleHRvIHkgdm9sdmVyIGFsIHBhc28gMSAoY29udGV4dG9zIHJlY2llbnRlcykuXG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIChpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pIHx8IGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbikpIHtcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgIH1cbiAgfSwgW1xuICAgIGNvbXB1dGVkQ3VycmVudE9wdGlvbixcbiAgICBzZWN0aW9uLFxuICAgIGFnZW50Py50eXBlLFxuICAgIGFtcGxpdHVkRXZlbnQsXG4gICAgb3B0aW9ucy5ob21lLFxuICAgIHN0b3BHZW5lcmF0aW9uRnVuY3Rpb24sXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbixcbiAgICBzZXRQcm9qZWN0LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRUYXNrLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgXSlcblxuICAvLyBEZXRlY3RhIGVsIHJlaW5pY2lvIGRlIGNvbnRleHRvIGVuIHByb2plY3QvY2xpZW50L3Rhc2s6IGNvbnRleHRvIHBpbmVhZG8g4oaSIHZhY8OtbyBjb24gZWxcbiAgLy8gb3JjaGVzdHJhdG9yIChwLiBlai4gYWwgcmVzZWxlY2Npb25hciBNQUlBIGVuIGVsIGxpc3RhZG8pLiBTb2xvIGxhIHRyYW5zaWNpw7NuIGN1ZW50YSwgYXPDrSB1bmFcbiAgLy8gYXBlcnR1cmEgZnJlc2NhIChjb250ZXh0byBwaW5lYWRvIGRlc2RlIGxhIHNlY2Npw7NuKSBubyBsbyBhY3RpdmEuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcGlubmVkID0gISEodGFzaz8uaWQgfHwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgfHwgY2xpZW50Py5pZCB8fCBwcm9qZWN0Py5pZClcbiAgICBjb25zdCB3YXNQaW5uZWQgPSBwcmV2SGFzUGlubmVkQ29udGV4dFJlZi5jdXJyZW50XG4gICAgcHJldkhhc1Bpbm5lZENvbnRleHRSZWYuY3VycmVudCA9IHBpbm5lZFxuICAgIGlmICghaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiYgd2FzUGlubmVkICYmICFwaW5uZWQpIHtcbiAgICAgIHNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbih0cnVlKVxuICAgIH1cbiAgfSwgW3Rhc2s/LmlkLCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCwgY2xpZW50Py5pZCwgcHJvamVjdD8uaWQsIHNlY3Rpb24sIGFnZW50Py50eXBlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghYWdlbnRzRmV0Y2hlZFJlZi5jdXJyZW50KSB7XG4gICAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBoYW5kbGVHZXRBZ2VudHMoKVxuICAgIH1cbiAgfSwgW2hhbmRsZUdldEFnZW50c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvbk1lcmdlQ3JlYXRlZEFnZW50ID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnQ6IG5leHRBZ2VudCB9ID0gKGV2dCBhcyBDdXN0b21FdmVudDx7IGFnZW50OiBBZ2VudCB9PikuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAobmV4dEFnZW50Py5pZCkge1xuICAgICAgICBhZGRBZ2VudChuZXh0QWdlbnQsIHsgbmF2aWdhdGVIb21lOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIG9uTWVyZ2VDcmVhdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbYWRkQWdlbnRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TeW5jRWRpdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmICghbmV4dEFnZW50Py5pZCkgcmV0dXJuXG4gICAgICB1cGRhdGVBZ2VudChuZXh0QWdlbnQpXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSBuZXh0QWdlbnQuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIH1cbiAgfSwgW3VwZGF0ZUFnZW50LCBzZWxlY3RBZ2VudCwgYWdlbnQ/LmlkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5DaGF0VmlldyA9ICgpID0+IHtcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmNoYXQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBFbCDDrWNvbm8gZGUgTUFJQSBkZWwgaGVhZGVyIGxsZXZhIHNpZW1wcmUgYWwgSG9tZS4gU2kgTUFJQSB5YSBlc3TDoSBtb250YWRhIHBlcm9cbiAgICogbWluaW1pemFkYSwgZWwgaG9zdCBubyBwdWVkZSByZXNvbHZlcmxvIGNhbWJpYW5kbyBgaXNPcGVuYCAoeWEgZXN0w6EgZW4gdHJ1ZSksXG4gICAqIGFzw60gcXVlIGF2aXNhIHBvciBldmVudG8geSBhY8OhIHJlc3RhdXJhbW9zIHkgdmFtb3MgYWwgSG9tZS5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkhvbWUgPSAoKSA9PiB7XG4gICAgICBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyKHtcbiAgICAgICAgc2VjdGlvbjogJ2hlYWRlcicsXG4gICAgICAgIGVudGl0eTogeyBwcm9qZWN0SWQ6IG51bGwsIGNsaWVudElkOiBudWxsIH0sXG4gICAgICB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4taG9tZScsIG9wZW5Ib21lKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4taG9tZScsIG9wZW5Ib21lKVxuICAgIH1cbiAgfSwgW2FwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXJdKVxuXG4gIC8qKlxuICAgKiBPdHJvIGhvc3QgKHByb3llY3RvLCBjbGllbnRlLCBiYW5uZXIsIGhlYWRlcuKApikgcGlkZSBhYnJpciBNQUlBIG1pZW50cmFzIHlhIGhheSB1bmFcbiAgICogaW5zdGFuY2lhIG1vbnRhZGEuIEV4cGFuZGUgc2kgZXN0YWJhIG1pbmltaXphZG8sIGFwbGljYSBlbCBjb250ZXh0byBkZWwgaG9zdCBudWV2b1xuICAgKiB5IHZhIGFsIGhvbWUg4oCUIHNpbiByZXN0YXVyYXIgbGEgY29udmVyc2FjacOzbiBwcmV2aWEgKGVzbyBsbyBoYWNlIGVsIHBpbGwpLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuRnJvbUhvc3QgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8TWFpYUhvc3RPcGVuRGV0YWlsPlxuICAgICAgaWYgKCFkZXRhaWwpIHJldHVyblxuICAgICAgYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3ZlcihkZXRhaWwpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5ULCBvcGVuRnJvbUhvc3QpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgb3BlbkZyb21Ib3N0KVxuICAgIH1cbiAgfSwgW2FwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXJdKVxuXG4gIC8qKiBNaXNtbyBmbHVqbyBxdWUgQ2hhdEFJTXlBZ2VudHMuaGFuZGxlVXNlQWdlbnQgKyBvbkJhY2sgKGhhbmRsZXJzLmhvbWUpLlxuICAgKiAgRWwgZGV0YWlsIHB1ZWRlIHRyYWVyIG9wY2lvbmFsbWVudGUgYHByb2plY3RgLCBgY2xpZW50YCwgYHRhc2tgIHBhcmEgZmxvd3MgcXVlXG4gICAqICBuZWNlc2l0YW4gcHJlc2VydmFyIGNvbnRleHRvIChlai4gc2VsZWN0b3IgZGUgYWdlbnRlcyBkZXNkZSB1bmEgdGFyZWEpLiBTaSBubyB2aWVuZW4sXG4gICAqICBzZSBtYW50aWVuZSBlbCBjb21wb3J0YW1pZW50byBvcmlnaW5hbCBkZSBsaW1waWFyIHByb2plY3QvY2xpZW50LiAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5OZXdDaGF0V2l0aEFnZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PHtcbiAgICAgICAgYWdlbnQ6IEFnZW50XG4gICAgICAgIHByb2plY3Q/OiBQcm9qZWN0IHwgbnVsbFxuICAgICAgICBjbGllbnQ/OiBDbGllbnQgfCBudWxsXG4gICAgICAgIHRhc2s/OiBUYXNrIHwgbnVsbFxuICAgICAgfT5cbiAgICAgIGNvbnN0IG5leHRBZ2VudCA9IGRldGFpbD8uYWdlbnRcbiAgICAgIGlmICghbmV4dEFnZW50KSByZXR1cm5cblxuICAgICAgc2V0UHJvamVjdChkZXRhaWw/LnByb2plY3QgPz8gbnVsbClcbiAgICAgIHNldENsaWVudD8uKGRldGFpbD8uY2xpZW50ID8/IG51bGwpXG4gICAgICBpZiAoZGV0YWlsPy50YXNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0VGFzaz8uKGRldGFpbC50YXNrKVxuICAgICAgfVxuICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9wZW5OZXdDaGF0V2l0aEFnZW50KVxuICAgIH1cbiAgfSwgW3NlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdKVxuXG4gIC8vIE1ldGFkYXRhIGRlIGxhIHNlc3Npb24gYWJpZXJ0YSAoYWdlbnRfdHlwZS9hZ2VudF9lbnRpdHkgKyBjb250ZXh0byksIGVtaXRpZGEgcG9yIHVzZUNoYXRNZXNzYWdlcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblNlc3Npb25NZXRhID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldnQgYXMgQ3VzdG9tRXZlbnQ8U2Vzc2lvbk1ldGE+XG4gICAgICBpZiAoZGV0YWlsKSBzZXRTZXNzaW9uTWV0YShkZXRhaWwpXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtY2hhdC1zZXNzaW9uLW1ldGEnLCBvblNlc3Npb25NZXRhKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLWNoYXQtc2Vzc2lvbi1tZXRhJywgb25TZXNzaW9uTWV0YSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIEFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzbiBsaW1waWFtb3MgbGEgbWV0YWRhdGE7IGVsIGxvYWQgZGUgbGEgbnVldmEgc2Vzc2lvbiBsYSB2dWVsdmUgYSBlbWl0aXIuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2Vzc2lvbk1ldGEobnVsbClcbiAgfSwgW2luaXRpYWxDaGF0SWRdKVxuXG4gIC8vIENhcnRlbCBcImNvbnRpbnVhciBlbiB1biBjaGF0IG51ZXZvXCI6IHNlIG11ZXN0cmEgYWwgYWJyaXIgdW5hIGNvbnZlcnNhY2nDs24gZGUgdW4gY2xvbmUgbGVnYWN5XG4gIC8vIChhZ2VudF90eXBlID09PSAnY2xvbmUnIGNvbiBlbnRpdHkgcHJvamVjdC90YXNrL2NsaWVudCkuIEVsIGlucHV0IHNlIHJlZW1wbGF6YSBwb3IgZWwgY2FydGVsLlxuICBjb25zdCBsZWdhY3lDb250ZXh0U2Vzc2lvbiA9IHVzZU1lbW88eyBlbnRpdHlUeXBlOiBMZWdhY3lDb250ZXh0RW50aXR5OyBjb250ZXh0TmFtZTogc3RyaW5nIH0gfCBudWxsPigoKSA9PiB7XG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiAhPT0gb3B0aW9ucy5jaGF0KSByZXR1cm4gbnVsbFxuICAgIGlmICghc2Vzc2lvbk1ldGEgfHwgc2Vzc2lvbk1ldGEuYWdlbnRUeXBlICE9PSAnY2xvbmUnKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IGVudGl0eSA9IHNlc3Npb25NZXRhLmFnZW50RW50aXR5XG4gICAgaWYgKCFlbnRpdHkgfHwgIUxFR0FDWV9DT05URVhUX0VOVElUSUVTLmluY2x1ZGVzKGVudGl0eSBhcyBMZWdhY3lDb250ZXh0RW50aXR5KSkgcmV0dXJuIG51bGxcbiAgICBjb25zdCBjb250ZXh0TmFtZSA9XG4gICAgICBlbnRpdHkgPT09ICd0YXNrJyA/IHNlc3Npb25NZXRhLnRhc2tOYW1lIDogZW50aXR5ID09PSAncHJvamVjdCcgPyBzZXNzaW9uTWV0YS5wcm9qZWN0TmFtZSA6IHNlc3Npb25NZXRhLmNsaWVudE5hbWVcbiAgICByZXR1cm4geyBlbnRpdHlUeXBlOiBlbnRpdHkgYXMgTGVnYWN5Q29udGV4dEVudGl0eSwgY29udGV4dE5hbWU6IGNvbnRleHROYW1lIHx8ICcnIH1cbiAgfSwgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgc2Vzc2lvbk1ldGFdKVxuXG4gIC8vIE1hcmNhIGVsIGFnZW50ZSBkZSBsYSBjb252ZXJzYWNpw7NuIGxlZ2FjeSBwYXJhIHF1ZSBoZWFkZXIsIHNlbGVjdG9yIHkgYXZhdGFyIG11ZXN0cmVuIGVsIGxvZ29cbiAgLy8gTUFJQSB5IGVsIG5vbWJyZSB0YWNoYWRvIChhZ2VudGUgb2Jzb2xldG8pLCBzaW4gZGVwZW5kZXIgZGVsIGB0eXBlYCByZXN1ZWx0byBkZSBsYSBzZXNpw7NuIHZpZWphLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsZWdhY3lDb250ZXh0U2Vzc2lvbiAmJiBhZ2VudCAmJiAhYWdlbnQuaXNfbGVnYWN5X2NvbnRleHQpIHtcbiAgICAgIHNlbGVjdEFnZW50KHsgLi4uYWdlbnQsIGlzX2xlZ2FjeV9jb250ZXh0OiB0cnVlIH0pXG4gICAgfVxuICB9LCBbbGVnYWN5Q29udGV4dFNlc3Npb24sIGFnZW50LCBzZWxlY3RBZ2VudF0pXG5cbiAgLy8gQWJyZSB1biBjaGF0IG51ZXZvIGNvbiBlbCBvcmNoZXN0cmF0b3Igc2V0ZWFuZG8gZWwgY29udGV4dG8gZGVsIGNsb25lIGxlZ2FjeSAobWlzbW8gY3JpdGVyaW9cbiAgLy8gcXVlIGNsaWNrZWFyIHVuIGNvbnRleHRvIHJlY2llbnRlIGVuIGVsIGhvbWUg4oaSIHBhc28gMiBjb24gRkFRcy9hY2Npb25lcyBkZSBlc2UgY29udGV4dG8pLlxuICBjb25zdCBoYW5kbGVDb250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzZXNzaW9uTWV0YSkgcmV0dXJuXG4gICAgY29uc3Qge1xuICAgICAgYWdlbnRFbnRpdHksXG4gICAgICBwcm9qZWN0SWQ6IHBJZCxcbiAgICAgIHByb2plY3ROYW1lOiBwTmFtZSxcbiAgICAgIGNsaWVudElkOiBjSWQsXG4gICAgICBjbGllbnROYW1lOiBjTmFtZSxcbiAgICAgIHRhc2tJZDogdElkLFxuICAgICAgdGFza05hbWU6IHROYW1lLFxuICAgIH0gPSBzZXNzaW9uTWV0YVxuXG4gICAgY29uc3Qgb3JjaGVzdHJhdG9yID0gYWdlbnRzLmRhdGEuZmluZCgoYTogQWdlbnQpID0+IGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicpXG4gICAgaWYgKCFvcmNoZXN0cmF0b3IpIHJldHVyblxuXG4gICAgLy8gUmVzZXQgZGVsIGNoYXQg4oaSIGNvbnZlcnNhY2nDs24gbnVldmEgKGxhIGFudGVyaW9yIHNpZ3VlIGVuIGJhY2tncm91bmQpXG4gICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuXG4gICAgLy8gU2V0ZWFyIGNvbnRleHRvIChtaXNtbyBjcml0ZXJpbyBxdWUgaGFuZGxlU2VsZWN0UmVjZW50Q29udGV4dCBkZWwgaG9tZSlcbiAgICBzZXRUYXNrPy4obnVsbClcbiAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgIGlmIChhZ2VudEVudGl0eSA9PT0gJ2NsaWVudCcgJiYgY0lkICE9IG51bGwpIHtcbiAgICAgIHNldENsaWVudD8uKHsgaWQ6IGNJZCwgbmFtZTogY05hbWUgfHwgJycgfSlcbiAgICB9IGVsc2UgaWYgKGFnZW50RW50aXR5ID09PSAncHJvamVjdCcgJiYgcElkICE9IG51bGwpIHtcbiAgICAgIHNldFByb2plY3Qoe1xuICAgICAgICBpZDogcElkLFxuICAgICAgICBuYW1lOiBwTmFtZSB8fCAnJyxcbiAgICAgICAgLi4uKGNJZCAhPSBudWxsID8geyBjbGllbnRJZDogY0lkLCBjbGllbnQ6IHsgaWQ6IGNJZCwgbmFtZTogY05hbWUgfHwgJycgfSB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIHNldENoaXBzUHJvamVjdCh7IHByb2plY3RJZDogU3RyaW5nKHBJZCksIHByb2plY3ROYW1lOiBwTmFtZSB8fCAnJywgY2xpZW50TmFtZTogY05hbWUgfHwgJycgfSlcbiAgICB9IGVsc2UgaWYgKGFnZW50RW50aXR5ID09PSAndGFzaycgJiYgdElkICE9IG51bGwpIHtcbiAgICAgIHNldFRhc2s/Lih7XG4gICAgICAgIGlkOiB0SWQsXG4gICAgICAgIG5hbWU6IHROYW1lIHx8ICcnLFxuICAgICAgICAuLi4ocElkICE9IG51bGwgPyB7IHByb2plY3RJZDogcElkIH0gOiB7fSksXG4gICAgICAgIC4uLihjSWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IGNJZCB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIGlmIChjSWQgIT0gbnVsbCkgc2V0Q2xpZW50Py4oeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgICAgaWYgKHBJZCAhPSBudWxsKSB7XG4gICAgICAgIHNldFByb2plY3Qoe1xuICAgICAgICAgIGlkOiBwSWQsXG4gICAgICAgICAgbmFtZTogcE5hbWUgfHwgJycsXG4gICAgICAgICAgLi4uKGNJZCAhPSBudWxsID8geyBjbGllbnRJZDogY0lkLCBjbGllbnQ6IHsgaWQ6IGNJZCwgbmFtZTogY05hbWUgfHwgJycgfSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgICBzZXRDaGlwc1Byb2plY3QoeyBwcm9qZWN0SWQ6IFN0cmluZyhwSWQpLCBwcm9qZWN0TmFtZTogcE5hbWUgfHwgJycsIGNsaWVudE5hbWU6IGNOYW1lIHx8ICcnIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0QWdlbnQob3JjaGVzdHJhdG9yKVxuICAgIHNldFNlc3Npb25NZXRhKG51bGwpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gIH0sIFtzZXNzaW9uTWV0YSwgYWdlbnRzLmRhdGEsIHNlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2ssIHNldENoaXBzUHJvamVjdCwgc3RvcEdlbmVyYXRpb25GdW5jdGlvbl0pXG5cbiAgY29uc3Qgc2hvd05ld0NoYXQgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdFxuICBjb25zdCBoaWRlSGVhZGVyQWdlbnRTZWxlY3RvciA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teVNraWxsc1xuICBjb25zdCBpc015QWdlbnRzU2VjdGlvbiA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50c1xuXG4gIC8vIEJvdMOzbiBcInZvbHZlclwiOiBzb2xvIHBhcmEgZWwgb3JjaGVzdHJhdG9yLlxuICAvLyAtIEVuIGVsIGNoYXQ6IGRpc3BvbmlibGUgZW4gdG9kYXMgbGFzIHNlY2Npb25lcyAoaGVhZGVyIHkgcHJvamVjdC9jbGllbnQvdGFzaykuXG4gIC8vIC0gRW4gZWwgaG9tZSBwYXNvIDIgKEZBUXMvRlVBcyBjb24gY29udGV4dG8gcGluZWFkbyk6IGVuIGVsIGhlYWRlciBzaWVtcHJlOyBlblxuICAvLyAgIHByb2plY3QvY2xpZW50L3Rhc2sgc29sbyBzaSBlbCB1c3VhcmlvIHJlaW5pY2nDsyBlbCBjb250ZXh0byAocGFzw7MgcG9yIGVsIHNlbGVjdG9yIGRlXG4gIC8vICAgY29udGV4dG9zIHJlY2llbnRlcykuIEVuIGVsIHBhc28gMSAoc2luIGNvbnRleHRvKSBOTyBzZSBtdWVzdHJhLlxuICBjb25zdCBoYXNQaW5uZWRDb250ZXh0ID0gISEodGFzaz8uaWQgfHwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgfHwgY2xpZW50Py5pZCB8fCBwcm9qZWN0Py5pZClcbiAgY29uc3QgaXNDaGF0VmlldyA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0XG4gIGNvbnN0IGlzSG9tZVN0ZXAyID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgaGFzUGlubmVkQ29udGV4dFxuICBjb25zdCBpc0hlYWRlckhvbWVTdGVwMiA9IGlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgaXNIb21lU3RlcDJcbiAgY29uc3QgaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIgPSAhaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBpc0hvbWVTdGVwMiAmJiBkaWRSZXNldENvbnRleHRJblNlY3Rpb25cbiAgY29uc3Qgc2hvd0JhY2tCdXR0b24gPVxuICAgIGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJyAmJlxuICAgICFoYXNFcnJvciAmJlxuICAgICFsb2FkaW5nICYmXG4gICAgKGlzQ2hhdFZpZXcgfHwgaXNIZWFkZXJIb21lU3RlcDIgfHwgaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIpXG4gIGNvbnN0IGhhbmRsZU9wZW5NYXJrZXRwbGFjZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2xlYXJBZ2VudCgpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLm15QWdlbnRzKVxuICB9LCBbY2xlYXJBZ2VudF0pXG5cbiAgY29uc3QgaGFuZGxlT3BlblNraWxscyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLm15U2tpbGxzKVxuICAgIGhhbmRsZUdldFNraWxscygpXG4gIH0sIFtoYW5kbGVHZXRTa2lsbHNdKVxuXG4gIGNvbnN0IGhhbmRsZUdvVG9NYWlha2VyID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGxldCBtYWlha2VyQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKChhOiBBZ2VudCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYSkpXG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmZW50aXR5PWdsb2JhbCZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgbWFpYWtlckFnZW50ID0gKGRhdGEuZGF0YSB8fCBbXSkuZmluZCgoYTogQWdlbnQpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGEpKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldFRhc2s/LihudWxsKVxuICAgIHNlbGVjdEFnZW50KG1haWFrZXJBZ2VudClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gICAgfVxuICB9LCBbYWdlbnRzLmRhdGEsIGkxOG4ubGFuZ3VhZ2UsIHNlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdKVxuICBjb25zdCBoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50cyA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudElkOiBzdHJpbmcpID0+IHtcbiAgICAgIHJlbW92ZUFnZW50KGFnZW50SWQpXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSBhZ2VudElkKSB7XG4gICAgICAgIHNlbGVjdEZpcnN0QWdlbnQoYWdlbnRJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudD8uaWQsIHJlbW92ZUFnZW50LCBzZWxlY3RGaXJzdEFnZW50XVxuICApXG5cbiAgLy8gRWwgZm9vdGVyIChpbnB1dCkgc2Ugb2N1bHRhIHNvbG8gZW4gZWwgaG9tZSBtYXJrZXRwbGFjZSBkZSBNYWlha2VyIChicm93c2UgZGUgYWdlbnRlcykuXG4gIC8vIEVsIGhvbWUgZGVsIG9yY2hlc3RyYXRvciBzw60gcGVybWl0ZSBlc2NyaWJpciwgYXPDrSBxdWUgbWFudGllbmUgZWwgZm9vdGVyLlxuICBjb25zdCBpc01haWFrZXJDcmVhdG9ySG9tZSA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRcblxuICBjb25zdCBtb2RhbFBhbmVsID0gKFxuICAgIDw+XG4gICAgICB7dmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUoc2VjdGlvbiwgdXNlcikgJiYgIWlzRmxvYXRpbmcgPyAoXG4gICAgICAgIDxTaWRlYmFyXG4gICAgICAgICAgb25Hb1RvQ2hhdD17Z29Ub0NoYXR9XG4gICAgICAgICAgb25FcnJvcj17KCkgPT4gc2V0U2lkZWJhckhhc0Vycm9yKHRydWUpfVxuICAgICAgICAgIGhhbmRsZUdvVG9Ib21lPXtoYW5kbGVHb0hvbWV9XG4gICAgICAgICAgaGFuZGxlU3RhcnROZXdDaGF0PXtoYW5kbGVTdGFydE5ld0NoYXR9XG4gICAgICAgICAgaGFuZGxlT3Blbk1hcmtldHBsYWNlPXtoYW5kbGVPcGVuTWFya2V0cGxhY2V9XG4gICAgICAgICAgc2hvd05ld0NoYXQ9e3Nob3dOZXdDaGF0fVxuICAgICAgICAgIHJlZmV0Y2hDaGF0cz17cmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhbmRsZVNldFJlZmV0Y2hDaGF0cz17c2V0UmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhc0Vycm9yPXtzaWRlYmFySGFzRXJyb3J9XG4gICAgICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWY9e3Jlc2V0U2VsZWN0ZWRDaGF0UmVmfVxuICAgICAgICAgIGFnZW50c05hdkFjdGl2ZT17c2lkZWJhckFnZW50c05hdkFjdGl2ZX1cbiAgICAgICAgICBoYW5kbGVPcGVuU2tpbGxzPXtoYW5kbGVPcGVuU2tpbGxzfVxuICAgICAgICAgIGlzTGVnYWN5Q29udGV4dFNlc3Npb249eyEhbGVnYWN5Q29udGV4dFNlc3Npb259XG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxTQ0NBSU1Db250ZW50IGV4cGFuZGVkPXtleHBhbmRlZH0gZmxvYXRpbmc9e2lzRmxvYXRpbmd9PlxuICAgICAgICA8Q2hhdEFJTW9kYWxIZWFkZXJcbiAgICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICAgIG9uTGF5b3V0TW9kZUNoYW5nZT17aGFuZGxlTGF5b3V0TW9kZUNoYW5nZX1cbiAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgZHJhZ2dhYmxlPXtpc0Zsb2F0aW5nfVxuICAgICAgICAgIG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG4gICAgICAgICAgb25EcmFnTW92ZT17aGFuZGxlRHJhZ01vdmV9XG4gICAgICAgICAgb25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuICAgICAgICAgIGhhbmRsZUNsb3NlPXtoYW5kbGVDbG9zZU1vZGFsfVxuICAgICAgICAgIGhhbmRsZU1pbmltaXplPXtoYW5kbGVNaW5pbWl6ZX1cbiAgICAgICAgICBhZ2VudHM9e2FnZW50cy5kYXRhfVxuICAgICAgICAgIGhhc0Vycm9yPXshIWFnZW50RXJyb3J9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBsb2FkaW5nTW9yZT17bG9hZGluZ01vcmV9XG4gICAgICAgICAgaGFzTW9yZT17YWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgIGhhbmRsZVJlc2V0Q2hhdD17aGFuZGxlUmVzZXRDaGF0fVxuICAgICAgICAgIG9uQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgbG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgIHNvcnRBZ2VudHNMaXN0PXtzb3J0QWdlbnRzTGlzdH1cbiAgICAgICAgICBpc015QWdlbnRzU2VjdGlvbj17aXNNeUFnZW50c1NlY3Rpb259XG4gICAgICAgICAgaXNNYWlha2VyU2VjdGlvbj17aXNNYWlha2VyQ3JlYXRvckhvbWV9XG4gICAgICAgICAgaGlkZUFnZW50U2VsZWN0b3I9e2hpZGVIZWFkZXJBZ2VudFNlbGVjdG9yfVxuICAgICAgICAgIHNob3dCYWNrQnV0dG9uPXtzaG93QmFja0J1dHRvbn1cbiAgICAgICAgICBvbkJhY2s9e2hhbmRsZUJhY2t9XG4gICAgICAgIC8+XG4gICAgICAgIHtoYXNFcnJvciA/IChcbiAgICAgICAgICA8TUFJQUVycm9yIC8+XG4gICAgICAgICkgOiB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uLCB1c2VyKSA/IChcbiAgICAgICAgICA8Q2hhdEFJQ29udGVudFxuICAgICAgICAgICAgY3VycmVudE9wdGlvbj17Y29tcHV0ZWRDdXJyZW50T3B0aW9ufVxuICAgICAgICAgICAgaGFuZGxlcnM9e3sgLi4uaGFuZGxlcnMsIGNoYXQ6IHN0YXJ0Q2hhdCwgaG9tZTogaGFuZGxlcnMuaG9tZSwgaGFuZGxlR29Ib21lIH19XG4gICAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICAgIHJlZnM9e3sgdXNlckluaXRpYWxNZXNzYWdlLCBpbml0aWFsQ2hhdElkIH19XG4gICAgICAgICAgICBvblNlbmRNZXNzYWdlUmVhZHk9e2hhbmRsZVNlbmRNZXNzYWdlUmVhZHl9XG4gICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICBmbG9hdGluZz17aXNGbG9hdGluZ31cbiAgICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgICBsb2FkaW5nQWdlbnRzPXtsb2FkaW5nfVxuICAgICAgICAgICAgb25EZWxldGVBZ2VudD17aGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHN9XG4gICAgICAgICAgICBvbkZhdm9yaXRlQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgICBoYXNNb3JlQWdlbnRzPXshIWFnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICAgIG9uTG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgICAgb25Hb1RvTWFpYWtlcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgICBza2lsbHM9e3NraWxsc31cbiAgICAgICAgICAgIGxvYWRpbmdTa2lsbHM9e2xvYWRpbmdTa2lsbHN9XG4gICAgICAgICAgICBvbkRlbGV0ZVNraWxsPXtyZW1vdmVTa2lsbH1cbiAgICAgICAgICAgIG9uU2VhcmNoQWdlbnRzPXtzZWFyY2hDdXN0b21BZ2VudHN9XG4gICAgICAgICAgICBzZWFyY2hMb2FkaW5nQWdlbnRzPXtzZWFyY2hMb2FkaW5nfVxuICAgICAgICAgICAgYWdlbnRFcnJvcj17YWdlbnRFcnJvcn1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxQcm9qZWN0U3VtbWFyeUNvbnRlbnQgb25SZXN0YXJ0U3VtbWFyeT17aGFuZGxlcnMuaG9tZX0gLz5cbiAgICAgICAgKX1cbiAgICAgICAgeygoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgISFhZ2VudHM/LmRhdGE/Lmxlbmd0aCkgfHxcbiAgICAgICAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkgJiZcbiAgICAgICAgICAhaXNNYWlha2VyQ3JlYXRvckhvbWUgJiZcbiAgICAgICAgICAhaGFzRXJyb3IgJiZcbiAgICAgICAgICAhbG9hZGluZyAmJlxuICAgICAgICAgIHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24sIHVzZXIpICYmIChcbiAgICAgICAgICAgIDxDaGF0QWlNb2RhbEZvb3RlclxuICAgICAgICAgICAgICBhZ2VudD17YWdlbnR9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbmRNZXNzYWdlPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgICAgaGFuZGxlU3RvcEdlbmVyYXRpb249e3N0b3BHZW5lcmF0aW9uRnVuY3Rpb259XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgaXNXcml0aW5nPXtpc1dyaXRpbmd9XG4gICAgICAgICAgICAgIGNoYXRJZD17aW5pdGlhbENoYXRJZH1cbiAgICAgICAgICAgICAgbmV3Q2hhdEtleT17bmV3Q2hhdEtleX1cbiAgICAgICAgICAgICAgdG9vbHRpcFpJbmRleD17dG9vbHRpcFpJbmRleH1cbiAgICAgICAgICAgICAgbGVnYWN5Q29udGV4dFNlc3Npb249e2xlZ2FjeUNvbnRleHRTZXNzaW9ufVxuICAgICAgICAgICAgICBvbkNvbnRpbnVlSW5OZXdDaGF0PXtoYW5kbGVDb250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXR9XG4gICAgICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8L1NDQ0FJTUNvbnRlbnQ+XG4gICAgPC8+XG4gIClcblxuICBjb25zdCBjb250ZW50V3JhcHBlciA9IChcbiAgICA8U0NDQUlNQ29udGVudFdyYXBwZXIgZXhwYW5kZWQ9e2V4cGFuZGVkfSBmbG9hdGluZz17aXNGbG9hdGluZ30gcmVmPXtjb250ZW50V3JhcHBlclJlZn0+XG4gICAgICB7bW9kYWxQYW5lbH1cbiAgICAgIHtzaG93Q2xvc2VXaGlsZUdlbmVyYXRpbmdNb2RhbCAmJiAoXG4gICAgICAgIDxDbG9zZVdoaWxlR2VuZXJhdGluZ01vZGFsXG4gICAgICAgICAgb25DbG9zZT17aGFuZGxlRGlzbWlzc0Nsb3NlV2hpbGVHZW5lcmF0aW5nTW9kYWx9XG4gICAgICAgICAgb25Db25maXJtPXtoYW5kbGVDb25maXJtQ2xvc2VXaGlsZUdlbmVyYXRpbmd9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvU0NDQUlNQ29udGVudFdyYXBwZXI+XG4gIClcblxuICByZXR1cm4gKFxuICAgIHNlbGVjdG9yICYmXG4gICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFNDQ0FJTVdyYXBwZXJcbiAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICBkcmFnUG9zaXRpb249e3Jlc29sdmVkRHJhZ1Bvc2l0aW9ufVxuICAgICAgICBlbGV2YXRlZD17c2VjdGlvbiA9PT0gJ3Rhc2snfVxuICAgICAgICAkbWluaW1pemVkPXtpc01pbmltaXplZH1cbiAgICAgID5cbiAgICAgICAgPFNDQ0FJTU1pbmltaXplZEhpZGUgJGhpZGRlbj17aXNNaW5pbWl6ZWR9PlxuICAgICAgICAgIDxGbG9hdGluZ1BhbmVsTW90aW9uIHRpbHQ9e3RpbHRNb3Rpb259IGV4cGFuZGVkPXtleHBhbmRlZH0+XG4gICAgICAgICAgICB7Y29udGVudFdyYXBwZXJ9XG4gICAgICAgICAgPC9GbG9hdGluZ1BhbmVsTW90aW9uPlxuICAgICAgICA8L1NDQ0FJTU1pbmltaXplZEhpZGU+XG4gICAgICAgIHtpc01pbmltaXplZCAmJiAoXG4gICAgICAgICAgPE1haWFNaW5pbWl6ZWRQaWxsXG4gICAgICAgICAgICB1bnJlYWRDb3VudD17dW5yZWFkQ291bnR9XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17aGFzQWN0aXZlU3RyZWFtfVxuICAgICAgICAgICAgb25SZXN0b3JlPXtoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZH1cbiAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlRnJvbU1pbmltaXplZH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIChcbiAgICAgICAgICA8QWJtQWdlbnRNb2RhbFxuICAgICAgICAgICAgYWRkQWdlbnQ9e2FkZEFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnQ9e3VwZGF0ZUFnZW50fVxuICAgICAgICAgICAgcmVtb3ZlQWdlbnQ9e3JlbW92ZUFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIHNlbGVjdEZpcnN0QWdlbnQ9e3NlbGVjdEZpcnN0QWdlbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNQZXJtaXNzaW9ucyAmJiAoXG4gICAgICAgICAgPEFibVNraWxsTW9kYWwgYWRkU2tpbGw9e2FkZFNraWxsfSB1cGRhdGVTa2lsbEluTGlzdD17dXBkYXRlU2tpbGxJbkxpc3R9IHJlbW92ZVNraWxsPXtyZW1vdmVTa2lsbH0gLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNQZXJtaXNzaW9ucyAmJiA8QWJtU2tpbGxHZW5lcmF0ZU1vZGFsIC8+fVxuICAgICAgICA8U25hY2tiYXIgLz5cbiAgICAgIDwvU0NDQUlNV3JhcHBlcj4sXG4gICAgICBzZWxlY3RvclxuICAgIClcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBRUVBLFdBQVcsRUFDWEMsT0FBTyxFQUNQQyxRQUFRLEVBQ1JDLE1BQU0sRUFDTkMsU0FBUyxFQUNUQyxlQUFlLFFBRVYsT0FBTztBQUNkLE9BQU9DLFFBQVEsTUFBTSxXQUFXO0FBQ2hDLE9BQU9DLE1BQU0sTUFBTSxRQUFRO0FBQzNCLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLE9BQU8sUUFBUSwyQkFBMkI7QUFDbkQsU0FBU0MsaUJBQWlCLFFBQVEsZ0NBQWdDO0FBQ2xFLFNBQVNDLFNBQVMsUUFBUSx1QkFBdUI7QUFDakQsU0FBU0Msc0JBQXNCLFFBQVEsdUNBQXVDO0FBRTlFLFNBQVNDLGFBQWEsUUFBUSxrQkFBa0I7QUFDaEQsU0FBU0MsYUFBYSxFQUFFQyxPQUFPLFFBQVEsYUFBYTtBQUNwRCxTQUFTQyxPQUFPLFFBQVEsWUFBWTtBQUNwQyxTQUFTQyxZQUFZLFFBQVEseUNBQXlDO0FBQ3RFLFNBQVNDLFlBQVksUUFBUSx5Q0FBeUM7QUFDdEUsU0FBU0MsZ0JBQWdCLFFBQXNCLGlDQUFpQztBQUdoRixTQUFTQyxpQkFBaUIsUUFBUSxrREFBa0Q7QUFDcEYsU0FBU0MsUUFBUSxRQUFRLG1DQUFtQztBQUM1RCxTQUFTQyxxQkFBcUIsUUFBUSwwQkFBMEI7QUFDaEUsU0FBU0MsYUFBYSxRQUFRLDZDQUE2QztB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
1250
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9DaGF0QUkiLCJjYW5BY2Nlc3NUb1NraWxscyIsIk1BSUFFcnJvciIsInVzZU1haWFUYXNrUGFuZWxaSW5kZXgiLCJDaGF0QUlDb250ZW50IiwiYnVpbGRIYW5kbGVycyIsIm9wdGlvbnMiLCJTaWRlYmFyIiwidXNlR2V0QWdlbnRzIiwidXNlR2V0U2tpbGxzIiwidXNlR2xvYmFsQ29udGV4dCIsIkNoYXRBSU1vZGFsSGVhZGVyIiwiU25hY2tiYXIiLCJQcm9qZWN0U3VtbWFyeUNvbnRlbnQiLCJBYm1BZ2VudE1vZGFsIiwiQWJtU2tpbGxNb2RhbCIsIlNLSUxMX1VTRV9BRlRFUl9TQVZFX0VWRU5UIiwiQWJtU2tpbGxHZW5lcmF0ZU1vZGFsIiwiU0VDVElPTlMiLCJTQ0NBSU1Db250ZW50IiwiU0NDQUlNQ29udGVudFdyYXBwZXIiLCJTQ0NBSU1NaW5pbWl6ZWRIaWRlIiwiU0NDQUlNV3JhcHBlciIsIk1haWFNaW5pbWl6ZWRQaWxsIiwiZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4IiwicmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUiLCJzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUiLCJGbG9hdGluZ1BhbmVsTW90aW9uIiwidXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJ2YWxpZGF0ZUlzTWFpYSIsImlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IiwidXNlRmFxc1N0b3JlIiwiZ2V0Q2hhdHNTdG9yZVN0YXRlIiwidXNlQ2hhdHNTdG9yZSIsInJlYWRMYXN0QWN0aXZlQ2hhdElkIiwid3JpdGVMYXN0QWN0aXZlQ2hhdElkIiwidXNlU2Vzc2lvbnNTdG9yZSIsImlzQWN0aXZlU2Vzc2lvblN0YXR1cyIsImZldGNoTWFpYSIsIm1hcENPUkxhbmciLCJFVkVOVFMiLCJ1c2VFdmVudCIsIk1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUyIsImlzR2xvYmFsTWFpYVNlY3Rpb24iLCJzZWN0aW9uIiwicmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbiIsImFnZW50VHlwZSIsImN1cnJlbnRPcHRpb24iLCJob21lT3B0aW9uIiwiSURfTU9EQUxfQ0hBVF9BR0VOVCIsInZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlIiwidXNlciIsIkJvb2xlYW4iLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiQ2hhdEFJTW9kYWwiLCJfdXNlciRwZXJtaXNzaW9ucyIsIl91c2VyJHBlcm1pc3Npb25zMiIsIl91c2VyJHBlcm1pc3Npb25zMyIsIl9hZ2VudHMkZGF0YSIsIl91c2VUcmFuc2xhdGlvbiIsImFibUFnZW50IiwiaTE4biIsImFtcGxpdHVkRXZlbnQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc01pbmltaXplZCIsInNldElzTWluaW1pemVkIiwic2V0Q2hhdFZpZXdWaXNpYmxlIiwic3RhdGUiLCJ1bnJlYWRDb3VudCIsImFjdGl2ZUNoYXRJZCIsImhhc0FjdGl2ZVN0cmVhbSIsIk9iamVjdCIsInZhbHVlcyIsIm1ldGEiLCJzb21lIiwic3RhdHVzIiwiZ29Ub0NoYXRSZWYiLCJnb0hvbWVSZWYiLCJpZCIsImhhbmRsZU1pbmltaXplIiwiYWlDaGF0TWluaW1pemUiLCJmb2N1c0NoYXRJbnB1dCIsInNldFRpbWVvdXQiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsIl91c2VTdGF0ZTMiLCJtZXNzYWdlIiwiYXR0YWNobWVudHMiLCJfdXNlU3RhdGU0IiwidXNlckluaXRpYWxNZXNzYWdlIiwic2V0VXNlckluaXRpYWxNZXNzYWdlIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpbml0aWFsQ2hhdElkIiwic2V0SW5pdGlhbENoYXRJZCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwibmV3Q2hhdEtleSIsInNldE5ld0NoYXRLZXkiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNlc3Npb25NZXRhIiwic2V0U2Vzc2lvbk1ldGEiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzZW5kTWVzc2FnZUZ1bmN0aW9uIiwic2V0U2VuZE1lc3NhZ2VGdW5jdGlvbiIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uIiwic2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbiIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJpc1N0cmVhbWluZyIsInNldElzU3RyZWFtaW5nIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImlzV3JpdGluZyIsInNldElzV3JpdGluZyIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJyZWZldGNoQ2hhdHMiLCJzZXRSZWZldGNoQ2hhdHMiLCJfdXNlU3RhdGUxOSIsImhvbWUiLCJfdXNlU3RhdGUyMCIsInNldEN1cnJlbnRPcHRpb24iLCJfdXNlU3RhdGUyMSIsIl91c2VTdGF0ZTIyIiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIl91c2VTdGF0ZTIzIiwiX3VzZVN0YXRlMjQiLCJkaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJwcmV2SGFzUGlubmVkQ29udGV4dFJlZiIsImhhbmRsZXJzIiwiX3VzZVN0YXRlMjUiLCJfdXNlU3RhdGUyNiIsInNpZGViYXJIYXNFcnJvciIsInNldFNpZGViYXJIYXNFcnJvciIsInJlc2V0U2VsZWN0ZWRDaGF0UmVmIiwibGFuZyIsImxhbmd1YWdlIiwibG9jYWxlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RBZ2VudCIsImNsZWFyQWdlbnQiLCJhZ2VudCIsInByb2plY3QiLCJjbGllbnQiLCJ0YXNrIiwiY2hpcHNQcm9qZWN0IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0IiwiYmFubmVyRW50cnlGYXEiLCJzZXRUYXNrIiwidG9vbHRpcFpJbmRleCIsIl91c2VHZXRBZ2VudHMiLCJoYW5kbGVHb0hvbWUiLCJhZ2VudHMiLCJsb2FkaW5nIiwibG9hZGluZ01vcmUiLCJhZ2VudEVycm9yIiwiZXJyb3IiLCJoYW5kbGVHZXRBZ2VudHMiLCJsb2FkTW9yZUFnZW50cyIsInNlYXJjaEN1c3RvbUFnZW50cyIsInNlYXJjaExvYWRpbmciLCJhZGRBZ2VudCIsInJlbW92ZUFnZW50IiwidXBkYXRlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInNvcnRBZ2VudHNMaXN0IiwiX3VzZUdldFNraWxscyIsIm15U2tpbGxzIiwic2hhcmVkU2tpbGxzIiwibG9hZGluZ1NraWxscyIsImhhbmRsZUdldFNraWxscyIsImFkZFNraWxsIiwidXBkYXRlU2tpbGxJbkxpc3QiLCJyZW1vdmVTa2lsbCIsImlzTUFJQSIsInVzZXJIYXNQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY3JlYXRlIiwiZWRpdCIsImNvbXB1dGVkQ3VycmVudE9wdGlvbiIsImlzR2xvYmFsU3BlY2lhbGlzdCIsImVudGl0eSIsImlzUHJvamVjdFNwZWNpYWxpc3QiLCJpc0NsaWVudFNwZWNpYWxpc3QiLCJpc01haWFrZXIiLCJteUFnZW50cyIsInR5cGUiLCJjaGF0Iiwic2hvdWxkU2hvd1Byb2plY3RTZWxlY3RvciIsInNob3VsZFNob3dDbGllbnRTZWxlY3RvciIsInByb2plY3RTZWxlY3RvciIsImNsaWVudFNlbGVjdG9yIiwibmFtZSIsImlzTWFpYWtlckFnZW50U2VsZWN0ZWQiLCJzaWRlYmFyQWdlbnRzTmF2QWN0aXZlIiwiYWdlbnRzRmV0Y2hlZFJlZiIsInNlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImNvbmNhdCIsIl91c2VTdGF0ZTI3IiwiX3VzZVN0YXRlMjgiLCJsYXlvdXRNb2RlIiwic2V0TGF5b3V0TW9kZSIsImhhbmRsZUxheW91dE1vZGVDaGFuZ2UiLCJtb2RlIiwiZXhwYW5kZWQiLCJpc0Zsb2F0aW5nIiwiY29udGVudFdyYXBwZXJSZWYiLCJfdXNlU3RhdGUyOSIsIl91c2VTdGF0ZTMwIiwiZHJhZ1Bvc2l0aW9uIiwic2V0RHJhZ1Bvc2l0aW9uIiwiX3VzZUZsb2F0aW5nUGFuZWxEcmFnIiwidGlsdE1vdGlvbiIsInN0YXJ0UG9pbnRlclRyYWNraW5nIiwic2FtcGxlUG9pbnRlck1vdmUiLCJlbmRQb2ludGVyVHJhY2tpbmciLCJkcmFnU3RhdGVSZWYiLCJjbGFtcERyYWdQb3NpdGlvbiIsIngiLCJ5IiwiY29udGVudFdyYXBwZXIiLCJjdXJyZW50IiwiX2NvbnRlbnRXcmFwcGVyJGdldEJvIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJvZmZzZXQiLCJtYXhYIiwiTWF0aCIsIm1heCIsImlubmVyV2lkdGgiLCJtYXhZIiwiaW5uZXJIZWlnaHQiLCJtaW4iLCJwcmV2IiwicGFkIiwiaGFuZGxlRHJhZ0VuZCIsImV2ZW50IiwiX2RyYWdTdGF0ZVJlZiRjdXJyZW50IiwicG9pbnRlcklkIiwiYm9keSIsInN0eWxlIiwidXNlclNlbGVjdCIsImN1cnNvciIsImhhbmRsZURyYWdNb3ZlIiwiZHJhZ1N0YXRlIiwiY2xpZW50WCIsImNsaWVudFkiLCJuZXh0UG9zaXRpb24iLCJvZmZzZXRYIiwib2Zmc2V0WSIsInJlc29sdmVkRHJhZ1Bvc2l0aW9uIiwiaGFuZGxlRHJhZ1N0YXJ0IiwiYnV0dG9uIiwidGFyZ2V0IiwiY2xvc2VzdCIsInJlY3QiLCJpbml0aWFsUG9zaXRpb24iLCJsZWZ0IiwidG9wIiwicG9pbnRlck9mZnNldFgiLCJwb2ludGVyT2Zmc2V0WSIsImN1cnJlbnRUYXJnZXQiLCJzZXRQb2ludGVyQ2FwdHVyZSIsInByZXZlbnREZWZhdWx0IiwiYWlDaGF0RHJhZ2dhYmxlIiwic3RhcnRDaGF0IiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiY29udGV4dERhdGEiLCJfb2JqZWN0U3ByZWFkIiwibGVuZ3RoIiwiYmFubmVyRmFxQXV0b1NlbnRSZWYiLCJfYmFubmVyRW50cnlGYXEkZmFxVGkiLCJlbnRpdHlSZWFkeSIsImZhcVRpdGxlIiwidHJpbSIsInVuZGVmaW5lZCIsImdvVG9DaGF0Iiwic2Vzc2lvbkV4dGVybmFsSWQiLCJzZWxlY3RlZEFnZW50IiwiZGF0YSIsImZpbmQiLCJhZ2VudEl0ZW0iLCJhZ2VudElkIiwiZW5zdXJlQWdlbnRzTG9hZGVkIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiYWJydXB0Iiwic3RvcCIsImhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkIiwiYWlDaGF0T3BlbiIsIm9wdGlvbiIsInRoZW4iLCJfY2hhdHMkZmluZCIsIl9nZXRDaGF0c1N0b3JlU3RhdGUiLCJjaGF0cyIsImxhc3RBY3RpdmVDaGF0SWQiLCJpc1JlYWQiLCJfZ29Ub0NoYXRSZWYkY3VycmVudCIsImNhbGwiLCJfZ29Ib21lUmVmJGN1cnJlbnQiLCJhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyIiwiZGV0YWlsIiwiX3Jlc2V0U2VsZWN0ZWRDaGF0UmVmIiwiZ2V0U3RhdGUiLCJjbGVhckZhcXMiLCJzZXRBY3RpdmVDaGF0SWQiLCJfZGV0YWlsJHByb2plY3QiLCJfZGV0YWlsJGNsaWVudCIsIl9kZXRhaWwkdGFzayIsIm5leHRMYXlvdXQiLCJmYXEiLCJoYW5kbGVTZW5kTWVzc2FnZVJlYWR5Iiwic2VuZE1lc3NhZ2UiLCJzdG9wR2VuZXJhdGlvbiIsInN0cmVhbWluZyIsIndyaXRpbmciLCJoYW5kbGVTZW5kTWVzc2FnZSIsImlzX2RlbGV0ZWQiLCJoYXNfbm90X3Blcm1pc3Npb25zIiwiaGFzX25vdF9hY2Nlc3MiLCJwcm9qZWN0X2RlbGV0ZWQiLCJoYW5kbGVTdGFydE5ld0NoYXQiLCJmcm9tTXlBZ2VudHMiLCJmcm9tTWFpYWtlckhvbWUiLCJfcmVzZXRTZWxlY3RlZENoYXRSZWYyIiwiZmlyc3RBZ2VudCIsImhhbmRsZVJlc2V0Q2hhdCIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiaGFuZGxlQmFjayIsInRvIiwiYWlDaGF0QmFjayIsInBpbm5lZCIsInByb2plY3RJZCIsIndhc1Bpbm5lZCIsIm9uTWVyZ2VDcmVhdGVkQWdlbnQiLCJldnQiLCJfcmVmMyIsIm5leHRBZ2VudCIsIm5hdmlnYXRlSG9tZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25TeW5jRWRpdGVkQWdlbnQiLCJfcmVmNCIsIm9wZW5DaGF0VmlldyIsIm9wZW5Ib21lIiwiY2xpZW50SWQiLCJvcGVuRnJvbUhvc3QiLCJfcmVmNSIsIm9wZW5OZXdDaGF0V2l0aEFnZW50IiwiX2RldGFpbCRwcm9qZWN0MiIsIl9kZXRhaWwkY2xpZW50MiIsIl9yZWY2IiwiaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUiLCJfcmVmNyIsInNraWxsIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwib25TZXNzaW9uTWV0YSIsIl9yZWY4IiwibGVnYWN5Q29udGV4dFNlc3Npb24iLCJhZ2VudEVudGl0eSIsImluY2x1ZGVzIiwiY29udGV4dE5hbWUiLCJ0YXNrTmFtZSIsInByb2plY3ROYW1lIiwiY2xpZW50TmFtZSIsImVudGl0eVR5cGUiLCJpc19sZWdhY3lfY29udGV4dCIsImhhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdCIsInBJZCIsInBOYW1lIiwiY0lkIiwiY05hbWUiLCJ0SWQiLCJ0YXNrSWQiLCJ0TmFtZSIsIm9yY2hlc3RyYXRvciIsImEiLCJTdHJpbmciLCJzaG93TmV3Q2hhdCIsImlzTXlBZ2VudHNTZWN0aW9uIiwiaXNNeVNraWxsc1NlY3Rpb24iLCJoYXNQaW5uZWRDb250ZXh0IiwiaXNDaGF0VmlldyIsImlzSG9tZVN0ZXAyIiwiaXNIZWFkZXJIb21lU3RlcDIiLCJpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiIsInNob3dCYWNrQnV0dG9uIiwiaGFuZGxlT3Blbk1hcmtldHBsYWNlIiwiaGFuZGxlT3BlblNraWxscyIsImhhbmRsZUdvVG9NYWlha2VyIiwiX2NhbGxlZTMiLCJtYWlha2VyQWdlbnQiLCJyZXNwb25zZSIsIl90IiwiX2NvbnRleHQzIiwicGF0aCIsIm1ldGhvZCIsInNlbnQiLCJqc29uIiwiaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMiLCJpc01haWFrZXJDcmVhdG9ySG9tZSIsIm1vZGFsUGFuZWwiLCJjaGlsZHJlbiIsIm9uR29Ub0NoYXQiLCJvbkVycm9yIiwiaGFuZGxlR29Ub0hvbWUiLCJoYW5kbGVTZXRSZWZldGNoQ2hhdHMiLCJhZ2VudHNOYXZBY3RpdmUiLCJpc0xlZ2FjeUNvbnRleHRTZXNzaW9uIiwiZmxvYXRpbmciLCJvbkxheW91dE1vZGVDaGFuZ2UiLCJkcmFnZ2FibGUiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJoYXNNb3JlIiwiaGFzX21vcmUiLCJvbkFnZW50VXBkYXRlIiwiaXNNYWlha2VyU2VjdGlvbiIsIm9uQmFjayIsInJlZnMiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJsb2FkaW5nQWdlbnRzIiwib25EZWxldGVBZ2VudCIsIm9uRmF2b3JpdGVBZ2VudFVwZGF0ZSIsImhhc01vcmVBZ2VudHMiLCJsb2FkaW5nTW9yZUFnZW50cyIsIm9uTG9hZE1vcmVBZ2VudHMiLCJvbkdvVG9NYWlha2VyIiwib25EZWxldGVTa2lsbCIsIm9uU2VhcmNoQWdlbnRzIiwic2VhcmNoTG9hZGluZ0FnZW50cyIsIm9uUmVzdGFydFN1bW1hcnkiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImNoYXRJZCIsIm9uQ29udGludWVJbk5ld0NoYXQiLCJyZWYiLCJjcmVhdGVQb3J0YWwiLCJlbGV2YXRlZCIsIiRtaW5pbWl6ZWQiLCIkaGlkZGVuIiwidGlsdCIsIm9uUmVzdG9yZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNb2RhbC9DaGF0QUlNb2RhbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1uby11c2VsZXNzLWZyYWdtZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VSZWYsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICBQb2ludGVyRXZlbnQgYXMgUmVhY3RQb2ludGVyRXZlbnQsXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBjYW5BY2Nlc3NUb0NoYXRBSSwgY2FuQWNjZXNzVG9Ta2lsbHMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvcGVybWlzc2lvbnMnXG5pbXBvcnQgeyBNQUlBRXJyb3IgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBRXJyb3InXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcblxuaW1wb3J0IHsgQ2hhdEFJQ29udGVudCB9IGZyb20gJy4uL0NoYXRBSUNvbnRlbnQnXG5pbXBvcnQgeyBidWlsZEhhbmRsZXJzLCBvcHRpb25zIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAnLi4vU2lkZWJhcidcbmltcG9ydCB7IHVzZUdldEFnZW50cyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2dldEFnZW50cydcbmltcG9ydCB7IHVzZUdldFNraWxscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2dldFNraWxscydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQsIHR5cGUgU2VjdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBDaGF0QUlNb2RhbEhlYWRlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlcidcbmltcG9ydCB7IFNuYWNrYmFyIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL1NuYWNrQmFyL1NuYWNrYmFyJ1xuaW1wb3J0IHsgUHJvamVjdFN1bW1hcnlDb250ZW50IH0gZnJvbSAnLi4vUHJvamVjdFN1bW1hcnlDb250ZW50J1xuaW1wb3J0IHsgQWJtQWdlbnRNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwnXG5pbXBvcnQgeyBBYm1Ta2lsbE1vZGFsLCBTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1Ta2lsbE1vZGFsL0FibVNraWxsTW9kYWwnXG5pbXBvcnQgeyBBYm1Ta2lsbEdlbmVyYXRlTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtU2tpbGxHZW5lcmF0ZU1vZGFsL0FibVNraWxsR2VuZXJhdGVNb2RhbCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IFNDQ0FJTUNvbnRlbnQsIFNDQ0FJTUNvbnRlbnRXcmFwcGVyLCBTQ0NBSU1NaW5pbWl6ZWRIaWRlLCBTQ0NBSU1XcmFwcGVyIH0gZnJvbSAnLi9DaGF0QUlNb2RhbC5zdHlsZXMnXG5pbXBvcnQgeyBNYWlhTWluaW1pemVkUGlsbCB9IGZyb20gJy4vY29tcG9uZW50cy9NYWlhTWluaW1pemVkUGlsbCdcbmltcG9ydCB7XG4gIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCxcbiAgTWFpYUNoYXRNb2RhbExheW91dE1vZGUsXG4gIHJlc29sdmVJbml0aWFsTWFpYUNoYXRMYXlvdXRNb2RlLFxuICBzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUsXG59IGZyb20gJy4vbGF5b3V0J1xuaW1wb3J0IHsgRmxvYXRpbmdQYW5lbE1vdGlvbiwgdXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IH0gZnJvbSAnLi9mbG9hdGluZ1BhbmVsTW90aW9uJ1xuaW1wb3J0IHsgQ2hhdEFpTW9kYWxGb290ZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxGb290ZXInXG5pbXBvcnQgeyB2YWxpZGF0ZUlzTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzL3ZhbGlkYXRlSXNNYWlhJ1xuaW1wb3J0IHsgaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IFNraWxsIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc2tpbGwnXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IENsaWVudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NsaWVudCdcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9UYXNrJ1xuaW1wb3J0IHsgdXNlRmFxc1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlRmFxc1N0b3JlJ1xuaW1wb3J0IHsgZ2V0Q2hhdHNTdG9yZVN0YXRlLCB1c2VDaGF0c1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlQ2hhdHNTdG9yZSdcbmltcG9ydCB0eXBlIHsgQ2hhdExpc3RJdGVtIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvY2hhdHNTdG9yZS50eXBlcydcbmltcG9ydCB7IHJlYWRMYXN0QWN0aXZlQ2hhdElkLCB3cml0ZUxhc3RBY3RpdmVDaGF0SWQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9tYWlhTGFzdENoYXRQZXJzaXN0ZW5jZSdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgaXNBY3RpdmVTZXNzaW9uU3RhdHVzIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvbnMudHlwZXMnXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL2NsaWVudCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgdHlwZSBNYWlhSG9zdE9wZW5EZXRhaWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tYWlhSG9zdE9wZW4nXG5cbi8qKiBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGVtaXRpZGEgcG9yIHVzZUNoYXRNZXNzYWdlcyBhbCBjYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24pLiAqL1xudHlwZSBTZXNzaW9uTWV0YSA9IHtcbiAgY2hhdElkOiBzdHJpbmdcbiAgYWdlbnRUeXBlPzogc3RyaW5nXG4gIGFnZW50RW50aXR5Pzogc3RyaW5nXG4gIHByb2plY3RJZD86IG51bWJlclxuICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICBjbGllbnRJZD86IG51bWJlclxuICBjbGllbnROYW1lPzogc3RyaW5nXG4gIHRhc2tJZD86IG51bWJlclxuICB0YXNrTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUyA9IFsncHJvamVjdCcsICd0YXNrJywgJ2NsaWVudCddIGFzIGNvbnN0XG50eXBlIExlZ2FjeUNvbnRleHRFbnRpdHkgPSAodHlwZW9mIExFR0FDWV9DT05URVhUX0VOVElUSUVTKVtudW1iZXJdXG5cbnR5cGUgQWlDaGF0QmFja0Rlc3RpbmF0aW9uID0gJ2dsb2JhbF9jb250ZXh0X2hvbWUnIHwgJ3Rhc2tfaG9tZScgfCAncGxhbm5lcl9ob21lJyB8ICdwcm9qZWN0X2hvbWUnIHwgJ2NsaWVudF9ob21lJ1xuXG4vKiogSG9tZSBnbG9iYWwgZGVsIG9yY2hlc3RyYXRvciAoc29sbyBoZWFkZXIpLiBQbGFubmVyIGVzIGhvbWUgZGUgRlVBcywgbm8gZGUgY29udGV4dG9zLiAqL1xuY29uc3QgaXNHbG9iYWxNYWlhU2VjdGlvbiA9IChzZWN0aW9uOiBTZWN0aW9uKTogYm9vbGVhbiA9PiBzZWN0aW9uID09PSAnaGVhZGVyJ1xuXG5jb25zdCByZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uID0gKFxuICBzZWN0aW9uOiBTZWN0aW9uLFxuICBhZ2VudFR5cGU6IEFnZW50Wyd0eXBlJ10gfCB1bmRlZmluZWQsXG4gIGN1cnJlbnRPcHRpb246IHN0cmluZyxcbiAgaG9tZU9wdGlvbjogc3RyaW5nXG4pOiBBaUNoYXRCYWNrRGVzdGluYXRpb24gPT4ge1xuICBpZiAoaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBhZ2VudFR5cGUgPT09ICdvcmNoZXN0cmF0b3InICYmIGN1cnJlbnRPcHRpb24gPT09IGhvbWVPcHRpb24pIHtcbiAgICByZXR1cm4gJ2dsb2JhbF9jb250ZXh0X2hvbWUnXG4gIH1cbiAgaWYgKHNlY3Rpb24gPT09ICd0YXNrJykgcmV0dXJuICd0YXNrX2hvbWUnXG4gIGlmIChzZWN0aW9uID09PSAncGxhbm5lcicpIHJldHVybiAncGxhbm5lcl9ob21lJ1xuICBpZiAoc2VjdGlvbiA9PT0gJ3Byb2plY3QnKSByZXR1cm4gJ3Byb2plY3RfaG9tZSdcbiAgaWYgKHNlY3Rpb24gPT09ICdjbGllbnQnKSByZXR1cm4gJ2NsaWVudF9ob21lJ1xuICByZXR1cm4gJ2dsb2JhbF9jb250ZXh0X2hvbWUnXG59XG5cbmV4cG9ydCBjb25zdCBJRF9NT0RBTF9DSEFUX0FHRU5UID0gJ21vZGFscy1wb3J0YWwtbWFpYS1jaGF0LWFnZW50J1xuXG5jb25zdCB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSA9IChzZWN0aW9uOiBTZWN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCwgdXNlcjogUmV0dXJuVHlwZTx0eXBlb2YgdXNlVXNlcj4pID0+IHtcbiAgaWYgKCFzZWN0aW9uIHx8ICFjYW5BY2Nlc3NUb0NoYXRBSSh1c2VyKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gUGxhbm5lciB5IHRhc2sgYWJyZW4gc2llbXByZSBlbCBjaGF0IChob21lIGRlIEZVQXMpLCBudW5jYSByZXN1bWVuIGRlIHByb3llY3Rvcy5cbiAgaWYgKHNlY3Rpb24gPT09ICdwbGFubmVyJyB8fCBzZWN0aW9uID09PSAndGFzaycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHNlY3Rpb24gPT09ICdoZWFkZXInKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4od2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyB8fCB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUylcbiAgfVxuXG4gIHJldHVybiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MpXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNb2RhbCA9ICgpID0+IHtcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5hYm1BZ2VudF0pXG4gIGNvbnN0IGFtcGxpdHVkRXZlbnQgPSB1c2VFdmVudCgpXG5cbiAgLy8gTUFJQSB2aXZlIG1vbnRhZGEgZW4gdG9kYXMgbGFzIHBhbnRhbGxhczogZWwgcGFuZWwgYXJyYW5jYSBzaWVtcHJlIGNlcnJhZG8gKHBpbGwgdmlzaWJsZSlcbiAgLy8geSBzw7NsbyBzZSBhYnJlIHBvciBhY2Npw7NuIGRlbCB1c3VhcmlvIOKAlCBuYXZlZ2FyIG8gcmVmcmVzY2FyIG5vIGxvIHJlYWJyZS5cbiAgY29uc3QgW2lzTWluaW1pemVkLCBzZXRJc01pbmltaXplZF0gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBzZXRDaGF0Vmlld1Zpc2libGUgPSB1c2VDaGF0c1N0b3JlKHN0YXRlID0+IHN0YXRlLnNldENoYXRWaWV3VmlzaWJsZSlcbiAgY29uc3QgdW5yZWFkQ291bnQgPSB1c2VDaGF0c1N0b3JlKHN0YXRlID0+IHN0YXRlLnVucmVhZENvdW50KVxuICBjb25zdCBhY3RpdmVDaGF0SWQgPSB1c2VDaGF0c1N0b3JlKHN0YXRlID0+IHN0YXRlLmFjdGl2ZUNoYXRJZClcbiAgLy8gTG9zIFwiLi4uXCIgZGVsIHBpbGwgc2FsZW4gZGVsIG1vdG9yLCBubyBkZSBpc1N0cmVhbWluZy9pc1dyaXRpbmc6IGVzb3MgcmVmbGVqYW5cbiAgLy8gbGEgc2VzacOzbiBhY3RpdmEgeSBxdWVkYW4gc3RhbGUgY3VhbmRvIHVuYSByZXNwdWVzdGEgdGVybWluYSBlbiBiYWNrZ3JvdW5kLlxuICBjb25zdCBoYXNBY3RpdmVTdHJlYW0gPSB1c2VTZXNzaW9uc1N0b3JlKHN0YXRlID0+XG4gICAgT2JqZWN0LnZhbHVlcyhzdGF0ZS5tZXRhKS5zb21lKG1ldGEgPT4gaXNBY3RpdmVTZXNzaW9uU3RhdHVzKG1ldGEuc3RhdHVzKSlcbiAgKVxuXG4gIC8qKiBnb1RvQ2hhdCAvIGhhbmRsZUdvSG9tZSBzZSBkZWZpbmVuIG3DoXMgYWJham87IGxvcyByZWZzIGV2aXRhbiBkZXBlbmRlciBkZWwgb3JkZW4gZGUgZGVjbGFyYWNpw7NuLiAqL1xuICBjb25zdCBnb1RvQ2hhdFJlZiA9IHVzZVJlZjwoKGNoYXQ6IENoYXRMaXN0SXRlbSkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBnb0hvbWVSZWYgPSB1c2VSZWY8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcblxuICAvLyBNb250YSBjZXJyYWRhOiBlbCBjaGF0IG5vIGVzdMOhIGEgbGEgdmlzdGEsIGFzw60gcXVlIGxhcyByZXNwdWVzdGFzIHF1ZSBsbGVndWVuXG4gIC8vIHRpZW5lbiBxdWUgcXVlZGFyIGNvbW8gbm8gbGXDrWRhcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRDaGF0Vmlld1Zpc2libGUoZmFsc2UpXG4gICAgLy8gU8OzbG8gYWwgbW9udGFyOiBkZXNwdcOpcyBsbyBtYW5lamFuIG1pbmltaXphci9yZXN0YXVyYXIuXG4gIH0sIFtdKVxuXG4gIC8vIFBlcnNpc3RpbW9zIGxhIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSBwYXJhIHBvZGVyIHZvbHZlciBhIGVsbGEgZGVzZGUgZWwgcGlsbCBkZXNwdcOpc1xuICAvLyBkZSBuYXZlZ2FyIG8gcmVmcmVzY2FyLiBFbCB0YWtlb3ZlciBkZXNkZSB1biBob3N0IGxhIGxpbXBpYSAodmEgYWwgSG9tZSkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGFjdGl2ZUNoYXRJZCkge1xuICAgICAgd3JpdGVMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQsIGFjdGl2ZUNoYXRJZClcbiAgICB9XG4gIH0sIFthY3RpdmVDaGF0SWQsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGhhbmRsZU1pbmltaXplID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE1pbmltaXplKVxuICAgIHNldElzTWluaW1pemVkKHRydWUpXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKGZhbHNlKVxuICB9LCBbYW1wbGl0dWRFdmVudCwgc2V0Q2hhdFZpZXdWaXNpYmxlXSlcblxuICBjb25zdCBmb2N1c0NoYXRJbnB1dCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbWFpYS1pbnB1dC1yZWZvY3VzJykpXG4gICAgfSwgMTAwKVxuICB9LCBbXSlcblxuICBjb25zdCBbdXNlckluaXRpYWxNZXNzYWdlLCBzZXRVc2VySW5pdGlhbE1lc3NhZ2VdID0gdXNlU3RhdGU8e1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgfT4oe1xuICAgIG1lc3NhZ2U6ICcnLFxuICAgIGF0dGFjaG1lbnRzOiBbXSxcbiAgfSlcbiAgY29uc3QgW2luaXRpYWxDaGF0SWQsIHNldEluaXRpYWxDaGF0SWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW25ld0NoYXRLZXksIHNldE5ld0NoYXRLZXldID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW3Nlc3Npb25NZXRhLCBzZXRTZXNzaW9uTWV0YV0gPSB1c2VTdGF0ZTxTZXNzaW9uTWV0YSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uXSA9IHVzZVN0YXRlPFxuICAgIHwgKChcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgICAgc2NJZD86IHN0cmluZ1xuICAgICAgKSA9PiB2b2lkKVxuICAgIHwgbnVsbFxuICA+KG51bGwpXG4gIGNvbnN0IFtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLCBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSA9IHVzZVN0YXRlPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc1N0cmVhbWluZywgc2V0SXNTdHJlYW1pbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBbcmVmZXRjaENoYXRzLCBzZXRSZWZldGNoQ2hhdHNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtjdXJyZW50T3B0aW9uLCBzZXRDdXJyZW50T3B0aW9uXSA9IHVzZVN0YXRlKG9wdGlvbnMuaG9tZSlcbiAgY29uc3QgW2hhc0Vycm9yLCBzZXRIYXNFcnJvcl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgLy8gRW4gcHJvamVjdC9jbGllbnQvdGFzazogZWwgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gZGVsIG9yY2hlc3RyYXRvciAobG8gbGltcGnDsyB5IHBhc8OzIHBvclxuICAvLyBlbCBzZWxlY3RvciBkZSBjb250ZXh0b3MgcmVjaWVudGVzKS4gSGFiaWxpdGEgZWwgYm90w7NuIFwidm9sdmVyXCIgZW4gZWwgaG9tZSBwYXNvIDIgZGUgZXNhc1xuICAvLyBzZWNjaW9uZXMuIFNlIHJlc2V0ZWEgYWwgY2VycmFyL3JlYWJyaXIgZWwgbW9kYWwgKGVsIGNvbXBvbmVudGUgc2UgZGVzbW9udGEpLlxuICBjb25zdCBbZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uLCBzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb25dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHByZXZIYXNQaW5uZWRDb250ZXh0UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBoYW5kbGVycyA9IHVzZU1lbW8oKCkgPT4gYnVpbGRIYW5kbGVycyhzZXRDdXJyZW50T3B0aW9uLCBzZXRIYXNFcnJvciksIFtdKVxuICBjb25zdCBbc2lkZWJhckhhc0Vycm9yLCBzZXRTaWRlYmFySGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHJlc2V0U2VsZWN0ZWRDaGF0UmVmID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhbmcgPSBpMThuLmxhbmd1YWdlID09PSAnYnInID8gJ3B0LWJyJyA6IGkxOG4ubGFuZ3VhZ2VcblxuICBtb21lbnQubG9jYWxlKGxhbmcpXG5cbiAgY29uc3Qge1xuICAgIHNlbGVjdEFnZW50LFxuICAgIGNsZWFyQWdlbnQsXG4gICAgc2VjdGlvbixcbiAgICBhZ2VudCxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGJhbm5lckVudHJ5RmFxLFxuICAgIHNldFRhc2ssXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICAvLyBaLWluZGV4IHBhcmEgdG9vbHRpcHMgZW4gc2VjdGlvbiAndGFzaycgKG1vZGFsIGZsb3RhbnRlIGVsZXZhZG8pXG4gIGNvbnN0IHRvb2x0aXBaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDE1MDAsICdvdmVybGF5JylcblxuICBjb25zdCB7XG4gICAgYWdlbnRzLFxuICAgIGxvYWRpbmcsXG4gICAgbG9hZGluZ01vcmUsXG4gICAgZXJyb3I6IGFnZW50RXJyb3IsXG4gICAgaGFuZGxlR2V0QWdlbnRzLFxuICAgIGxvYWRNb3JlQWdlbnRzLFxuICAgIHNlYXJjaEN1c3RvbUFnZW50cyxcbiAgICBzZWFyY2hMb2FkaW5nLFxuICAgIGFkZEFnZW50LFxuICAgIHJlbW92ZUFnZW50LFxuICAgIHVwZGF0ZUFnZW50LFxuICAgIHVwZGF0ZUFnZW50RmF2b3JpdGUsXG4gICAgc2VsZWN0Rmlyc3RBZ2VudCxcbiAgICBzb3J0QWdlbnRzTGlzdCxcbiAgfSA9IHVzZUdldEFnZW50cyh7IHNlbGVjdEFnZW50LCBzZWN0aW9uLCBhZ2VudCwgaGFuZGxlR29Ib21lOiBoYW5kbGVycy5ob21lIH0pXG5cbiAgY29uc3Qge1xuICAgIG15U2tpbGxzLFxuICAgIHNoYXJlZFNraWxscyxcbiAgICBsb2FkaW5nOiBsb2FkaW5nU2tpbGxzLFxuICAgIGhhbmRsZUdldFNraWxscyxcbiAgICBhZGRTa2lsbCxcbiAgICB1cGRhdGVTa2lsbEluTGlzdCxcbiAgICByZW1vdmVTa2lsbCxcbiAgfSA9IHVzZUdldFNraWxscygpXG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG5cbiAgY29uc3QgdXNlckhhc1Blcm1pc3Npb25zID1cbiAgICAodXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uY3JlYXRlIHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5lZGl0IHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5kZWxldGUpICYmXG4gICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcblxuICBjb25zdCBjb21wdXRlZEN1cnJlbnRPcHRpb24gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBpc0dsb2JhbFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCdcbiAgICBjb25zdCBpc1Byb2plY3RTcGVjaWFsaXN0ID0gaXNNQUlBICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PSBudWxsKVxuICAgIGNvbnN0IGlzQ2xpZW50U3BlY2lhbGlzdCA9IGlzTUFJQSAmJiBhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50J1xuICAgIGNvbnN0IGlzTWFpYWtlciA9IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGFnZW50KVxuXG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHMgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm15QWdlbnRzXG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHMgJiYgY2FuQWNjZXNzVG9Ta2lsbHModXNlcikpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm15U2tpbGxzXG4gICAgfVxuXG4gICAgLy8gRWwgb3JjaGVzdHJhdG9yIChNQUlBKSBtdWVzdHJhIHN1IGhvbWUgY29uIEZBUXMvYWNjaW9uZXMgZnJlY3VlbnRlczsgZWwgcmVzdG8gZGVcbiAgICAvLyBsb3MgZ2xvYmFsIHNwZWNpYWxpc3RzIChjbG9uZXMgZ2xvYmFsZXMgbm8tbWFpYWtlcikgc2lndWVuIHllbmRvIGRpcmVjdG8gYWwgY2hhdC5cbiAgICBpZiAoaXNHbG9iYWxTcGVjaWFsaXN0ICYmICFpc01haWFrZXIgJiYgYWdlbnQ/LnR5cGUgIT09ICdvcmNoZXN0cmF0b3InICYmIGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY2hhdFxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IgPSBjdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQgJiYgaXNQcm9qZWN0U3BlY2lhbGlzdCAmJiAhcHJvamVjdFxuICAgIGNvbnN0IHNob3VsZFNob3dDbGllbnRTZWxlY3RvciA9IGN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCAmJiBpc0NsaWVudFNwZWNpYWxpc3QgJiYgIWNsaWVudFxuXG4gICAgaWYgKHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnByb2plY3RTZWxlY3RvclxuICAgIH1cbiAgICBpZiAoc2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5jbGllbnRTZWxlY3RvclxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudE9wdGlvblxuICB9LCBbY3VycmVudE9wdGlvbiwgcHJvamVjdCwgY2xpZW50LCBpc01BSUEsIGFnZW50Py5lbnRpdHksIGFnZW50Py5uYW1lLCBhZ2VudD8udHlwZSwgdXNlcl0pXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oKCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpLCBbYWdlbnRdKVxuXG4gIGNvbnN0IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUgPSB1c2VNZW1vKCgpOiAnbWFpYWtlcicgfCAnbXlBZ2VudHMnIHwgJ215U2tpbGxzJyB8IG51bGwgPT4ge1xuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlTa2lsbHMpIHJldHVybiAnbXlTa2lsbHMnXG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cykgcmV0dXJuICdteUFnZW50cydcbiAgICBpZiAoaXNNYWlha2VyQWdlbnRTZWxlY3RlZCkgcmV0dXJuICdtYWlha2VyJ1xuICAgIHJldHVybiBudWxsXG4gIH0sIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRdKVxuXG4gIC8qIFJlYWN0aXZhciBjb24gbGEgZmlsYSDigJxNaXMgYWdlbnRlc+KAnSBlbiBTaWRlYmFyOiBteUFnZW50c0NvdW50IHByb3BcbiAgY29uc3Qgc2lkZWJhck15QWdlbnRzQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWdlbnRzLmRhdGEuZmlsdGVyKFxuICAgICAgYSA9PiAhKGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgKGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYS5uYW1lIHx8ICcnKSkpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgLy8gVGFzayBwYW5lbCwgcGxhbm5lciB5IGJhbm5lciBkZSBwcm95ZWN0byBhYnJlbiBlbiBmbG90YW50ZSBwb3IgZGVmYXVsdCAobm8gdGFwYXIgZWwgY29udGV4dG8gZGV0csOhcykuXG4gIC8vIEZ1ZXJhIGRlIGVzb3MgY29udGV4dG9zIHNlIHJlc3BldGEgbGEgcHJlZmVyZW5jaWEgZ3VhcmRhZGEgZW4gbG9jYWxTdG9yYWdlLlxuICBjb25zdCBbbGF5b3V0TW9kZSwgc2V0TGF5b3V0TW9kZV0gPSB1c2VTdGF0ZTxNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZT4oKCkgPT5cbiAgICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7IHNlY3Rpb24sIGJhbm5lckVudHJ5RmFxIH0pXG4gIClcblxuICBjb25zdCBoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlKG1vZGUpXG4gICAgc2V0TGF5b3V0TW9kZShtb2RlKVxuICB9LCBbXSlcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcbiAgY29uc3QgaXNGbG9hdGluZyA9IGxheW91dE1vZGUgPT09ICdmbG9hdGluZydcbiAgY29uc3QgY29udGVudFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtkcmFnUG9zaXRpb24sIHNldERyYWdQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsPihudWxsKVxuICBjb25zdCB7IHRpbHRNb3Rpb24sIHN0YXJ0UG9pbnRlclRyYWNraW5nLCBzYW1wbGVQb2ludGVyTW92ZSwgZW5kUG9pbnRlclRyYWNraW5nIH0gPVxuICAgIHVzZUZsb2F0aW5nUGFuZWxEcmFnVGlsdChpc0Zsb2F0aW5nKVxuICBjb25zdCBkcmFnU3RhdGVSZWYgPSB1c2VSZWY8e1xuICAgIHBvaW50ZXJJZDogbnVtYmVyXG4gICAgb2Zmc2V0WDogbnVtYmVyXG4gICAgb2Zmc2V0WTogbnVtYmVyXG4gIH0gfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGNsYW1wRHJhZ1Bvc2l0aW9uID0gdXNlQ2FsbGJhY2soKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250ZW50V3JhcHBlcikge1xuICAgICAgcmV0dXJuIHsgeCwgeSB9XG4gICAgfVxuXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBjb250ZW50V3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIGNvbnN0IG9mZnNldCA9IDE2XG4gICAgY29uc3QgbWF4WCA9IE1hdGgubWF4KG9mZnNldCwgd2luZG93LmlubmVyV2lkdGggLSB3aWR0aCAtIG9mZnNldClcbiAgICBjb25zdCBtYXhZID0gTWF0aC5tYXgob2Zmc2V0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBoZWlnaHQgLSBvZmZzZXQpXG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogTWF0aC5taW4oTWF0aC5tYXgoeCwgb2Zmc2V0KSwgbWF4WCksXG4gICAgICB5OiBNYXRoLm1pbihNYXRoLm1heCh5LCBvZmZzZXQpLCBtYXhZKSxcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxheW91dE1vZGUgIT09ICdmbG9hdGluZycpIHtcbiAgICAgIHNldERyYWdQb3NpdGlvbihudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0RHJhZ1Bvc2l0aW9uKHByZXYgPT4ge1xuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgcmV0dXJuIGNsYW1wRHJhZ1Bvc2l0aW9uKHByZXYueCwgcHJldi55KVxuICAgICAgfVxuICAgICAgY29uc3QgcGFkID0gMTZcbiAgICAgIGNvbnN0IHggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpIC0gcGFkXG4gICAgICByZXR1cm4gY2xhbXBEcmFnUG9zaXRpb24oeCwgcGFkKVxuICAgIH0pXG4gIH0sIFtsYXlvdXRNb2RlLCBjbGFtcERyYWdQb3NpdGlvbl0pXG5cbiAgY29uc3QgaGFuZGxlRHJhZ0VuZCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBlbmRQb2ludGVyVHJhY2tpbmcoKVxuICAgICAgaWYgKGRyYWdTdGF0ZVJlZi5jdXJyZW50Py5wb2ludGVySWQgIT09IGV2ZW50LnBvaW50ZXJJZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZHJhZ1N0YXRlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnJ1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnJ1xuICAgIH0sXG4gICAgW2VuZFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdTdGF0ZSA9IGRyYWdTdGF0ZVJlZi5jdXJyZW50XG4gICAgICBpZiAoIWRyYWdTdGF0ZSB8fCBkcmFnU3RhdGUucG9pbnRlcklkICE9PSBldmVudC5wb2ludGVySWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNhbXBsZVBvaW50ZXJNb3ZlKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG5cbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGNsYW1wRHJhZ1Bvc2l0aW9uKGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUub2Zmc2V0WCwgZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5vZmZzZXRZKVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiB7XG4gICAgICAgIGlmIChwcmV2ICYmIHByZXYueCA9PT0gbmV4dFBvc2l0aW9uLnggJiYgcHJldi55ID09PSBuZXh0UG9zaXRpb24ueSkge1xuICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHRQb3NpdGlvblxuICAgICAgfSlcbiAgICB9LFxuICAgIFtjbGFtcERyYWdQb3NpdGlvbiwgc2FtcGxlUG9pbnRlck1vdmVdXG4gIClcblxuICBjb25zdCByZXNvbHZlZERyYWdQb3NpdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChsYXlvdXRNb2RlICE9PSAnZmxvYXRpbmcnKSB7XG4gICAgICByZXR1cm4gZHJhZ1Bvc2l0aW9uXG4gICAgfVxuICAgIGlmIChkcmFnUG9zaXRpb24pIHtcbiAgICAgIHJldHVybiBkcmFnUG9zaXRpb25cbiAgICB9XG4gICAgY29uc3QgcGFkID0gMTZcbiAgICBjb25zdCB4ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCAtIGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpIC0gcGFkIDogcGFkXG4gICAgcmV0dXJuIGNsYW1wRHJhZ1Bvc2l0aW9uKHgsIHBhZClcbiAgfSwgW2xheW91dE1vZGUsIGRyYWdQb3NpdGlvbiwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoIWlzRmxvYXRpbmcgfHwgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICAgIGlmICh0YXJnZXQuY2xvc2VzdCgnYnV0dG9uLCBhLCBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgW3JvbGU9XCJidXR0b25cIl0sIFtkYXRhLW5vLWRyYWc9XCJ0cnVlXCJdJykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgICAgaWYgKCFjb250ZW50V3JhcHBlcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVjdCA9IGNvbnRlbnRXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCBpbml0aWFsUG9zaXRpb24gPSByZXNvbHZlZERyYWdQb3NpdGlvbiA/PyBjbGFtcERyYWdQb3NpdGlvbihyZWN0LmxlZnQsIHJlY3QudG9wKVxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFggPSBldmVudC5jbGllbnRYIC0gaW5pdGlhbFBvc2l0aW9uLnhcbiAgICAgIGNvbnN0IHBvaW50ZXJPZmZzZXRZID0gZXZlbnQuY2xpZW50WSAtIGluaXRpYWxQb3NpdGlvbi55XG5cbiAgICAgIHNldERyYWdQb3NpdGlvbihpbml0aWFsUG9zaXRpb24pXG4gICAgICBkcmFnU3RhdGVSZWYuY3VycmVudCA9IHtcbiAgICAgICAgcG9pbnRlcklkOiBldmVudC5wb2ludGVySWQsXG4gICAgICAgIG9mZnNldFg6IHBvaW50ZXJPZmZzZXRYLFxuICAgICAgICBvZmZzZXRZOiBwb2ludGVyT2Zmc2V0WSxcbiAgICAgIH1cblxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICdub25lJ1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnZ3JhYmJpbmcnXG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXREcmFnZ2FibGUpXG4gICAgICBzdGFydFBvaW50ZXJUcmFja2luZyhldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBpc0Zsb2F0aW5nLCByZXNvbHZlZERyYWdQb3NpdGlvbiwgc3RhcnRQb2ludGVyVHJhY2tpbmddXG4gIClcblxuICBjb25zdCBzdGFydENoYXQgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZyxcbiAgICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApID0+IHtcbiAgICAgIGlmIChzaWRlYmFySGFzRXJyb3IpIHtcbiAgICAgICAgc2V0U2lkZWJhckhhc0Vycm9yKGZhbHNlKVxuICAgICAgfVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHtcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSB8fCAnJyxcbiAgICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzIHx8IFtdLFxuICAgICAgICAuLi4oZmFxSWQgPyB7IGZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKG1lbnRpb25zICYmIG1lbnRpb25zLmxlbmd0aCA+IDAgPyB7IG1lbnRpb25zIH0gOiB7fSksXG4gICAgICAgIC4uLihmdWFJZCA/IHsgZnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHNjSWQgPyB7IHNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNvbnRleHREYXRhID8geyBjb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIGhhbmRsZXJzLmNoYXQoKVxuICAgIH0sXG4gICAgW2hhbmRsZXJzLCBzaWRlYmFySGFzRXJyb3JdXG4gIClcblxuICBjb25zdCBiYW5uZXJGYXFBdXRvU2VudFJlZiA9IHVzZVJlZihmYWxzZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGVudGl0eVJlYWR5ID0gc2VjdGlvbiA9PT0gJ3Byb2plY3QnID8gQm9vbGVhbihwcm9qZWN0Py5pZCkgOiBzZWN0aW9uID09PSAnY2xpZW50JyA/IEJvb2xlYW4oY2xpZW50Py5pZCkgOiB0cnVlXG5cbiAgICBpZiAoIWJhbm5lckVudHJ5RmFxPy5mYXFUaXRsZT8udHJpbSgpIHx8IGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQgfHwgbG9hZGluZyB8fCAhYWdlbnQ/LmlkIHx8ICFlbnRpdHlSZWFkeSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IHRydWVcbiAgICBzdGFydENoYXQoXG4gICAgICBiYW5uZXJFbnRyeUZhcS5mYXFUaXRsZSxcbiAgICAgIFtdLFxuICAgICAgYmFubmVyRW50cnlGYXEuZmFxSWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBiYW5uZXJFbnRyeUZhcS5jb250ZXh0RGF0YVxuICAgIClcbiAgfSwgW1xuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFJZCxcbiAgICBiYW5uZXJFbnRyeUZhcT8uZmFxVGl0bGUsXG4gICAgYmFubmVyRW50cnlGYXE/LmNvbnRleHREYXRhLFxuICAgIGxvYWRpbmcsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGFnZW50Py5lbnRpdHksXG4gICAgcHJvamVjdD8uaWQsXG4gICAgY2xpZW50Py5pZCxcbiAgICBzZWN0aW9uLFxuICAgIHN0YXJ0Q2hhdCxcbiAgXSlcblxuICBjb25zdCBnb1RvQ2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGF0OiBhbnkpID0+IHtcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQoY2hhdC5zZXNzaW9uRXh0ZXJuYWxJZClcbiAgICAgIGNvbnN0IHNlbGVjdGVkQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKGFnZW50SXRlbSA9PiBhZ2VudEl0ZW0uaWQgPT09IGNoYXQuYWdlbnRJZClcbiAgICAgIGlmIChzZWxlY3RlZEFnZW50KSB7XG4gICAgICAgIHNlbGVjdEFnZW50KHNlbGVjdGVkQWdlbnQpXG4gICAgICB9XG4gICAgICAvLyBEaXNwYXRjaCBldmVudCB0byBjbGVhciB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIGFnZW50cywgc2VsZWN0QWdlbnRdXG4gIClcblxuICBnb1RvQ2hhdFJlZi5jdXJyZW50ID0gZ29Ub0NoYXRcblxuICAvKiogTG9zIGFnZW50ZXMgc2UgcGlkZW4gcmVjacOpbiBhbCBhYnJpciBlbCBwYW5lbDogZW4gbW9kbyBwaWxsIG5vIGhhY2UgZmFsdGEgbmluZ3VuYSByZXF1ZXN0LiAqL1xuICBjb25zdCBlbnN1cmVBZ2VudHNMb2FkZWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgYWdlbnRzRmV0Y2hlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIGF3YWl0IGhhbmRsZUdldEFnZW50cygpXG4gIH0sIFtoYW5kbGVHZXRBZ2VudHNdKVxuXG4gIGNvbnN0IGhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzTWluaW1pemVkKGZhbHNlKVxuICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE9wZW4sIHsgb3B0aW9uOiAnbWluaW1pemUnIH0pXG5cbiAgICAvLyBnb1RvQ2hhdCBuZWNlc2l0YSBsYSBsaXN0YSBkZSBhZ2VudGVzIHBhcmEgc2VsZWNjaW9uYXIgZWwgZGUgbGEgY29udmVyc2FjacOzbi5cbiAgICBlbnN1cmVBZ2VudHNMb2FkZWQoKS50aGVuKCgpID0+IHtcbiAgICAgIC8vIFByaW9yaWRhZCBhbCByZWFicmlyOiBwcmltZXIgY2hhdCBzaW4gbGVlciDihpIgw7psdGltYSBjb252ZXJzYWNpw7NuIGFiaWVydGEg4oaSIEhvbWUuXG4gICAgICBjb25zdCB7IGNoYXRzIH0gPSBnZXRDaGF0c1N0b3JlU3RhdGUoKVxuICAgICAgY29uc3QgbGFzdEFjdGl2ZUNoYXRJZCA9IHJlYWRMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQpXG4gICAgICBjb25zdCB0YXJnZXQgPVxuICAgICAgICBjaGF0cy5maW5kKGNoYXQgPT4gY2hhdC5pc1JlYWQgPT09IGZhbHNlKSA/P1xuICAgICAgICAobGFzdEFjdGl2ZUNoYXRJZCA/IGNoYXRzLmZpbmQoY2hhdCA9PiBjaGF0LnNlc3Npb25FeHRlcm5hbElkID09PSBsYXN0QWN0aXZlQ2hhdElkKSA6IHVuZGVmaW5lZClcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBnb1RvQ2hhdFJlZi5jdXJyZW50Py4odGFyZ2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ29Ib21lUmVmLmN1cnJlbnQ/LigpXG4gICAgICB9XG5cbiAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICB9KVxuICB9LCBbYW1wbGl0dWRFdmVudCwgZW5zdXJlQWdlbnRzTG9hZGVkLCBmb2N1c0NoYXRJbnB1dCwgc2V0Q2hhdFZpZXdWaXNpYmxlLCB1c2VyLmlkXSlcblxuICAvKipcbiAgICogVG9tYSBjb250cm9sIGRlc2RlIHVuIGhvc3QgKGhlYWRlciwgcHJveWVjdG8sIGNsaWVudGXigKYpOiBhYnJlIGVsIHBhbmVsLCBkZXNjYXJ0YSBsYVxuICAgKiBjb252ZXJzYWNpw7NuIGFiaWVydGEgeSBhcGxpY2EgZWwgY29udGV4dG8gZGVsIGhvc3QuIE5PIHZ1ZWx2ZSBhIGxhIMO6bHRpbWEgY29udmVyc2FjacOzblxuICAgKiDigJQgZXNvIHPDs2xvIGxvIGhhY2UgZWwgcGlsbCAoYGhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkYCkuXG4gICAqL1xuICBjb25zdCBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGRldGFpbDogTWFpYUhvc3RPcGVuRGV0YWlsKSA9PiB7XG4gICAgICBzZXRJc01pbmltaXplZChmYWxzZSlcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZSh0cnVlKVxuICAgICAgd3JpdGVMYXN0QWN0aXZlQ2hhdElkKHVzZXIuaWQsIG51bGwpXG4gICAgICBlbnN1cmVBZ2VudHNMb2FkZWQoKVxuXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICAgIHNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbihmYWxzZSlcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgdXNlRmFxc1N0b3JlLmdldFN0YXRlKCkuY2xlYXJGYXFzKClcbiAgICAgIGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudD8uKClcbiAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLnNldEFjdGl2ZUNoYXRJZChudWxsKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG5cbiAgICAgIGlmIChkZXRhaWwuc2VjdGlvbiA9PT0gJ3Byb2plY3QnIHx8IGRldGFpbC5zZWN0aW9uID09PSAndGFzaycpIHtcbiAgICAgICAgc2V0UHJvamVjdD8uKGRldGFpbC5wcm9qZWN0ID8/IG51bGwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRQcm9qZWN0Py4obnVsbClcbiAgICAgIH1cblxuICAgICAgaWYgKGRldGFpbC5zZWN0aW9uID09PSAnY2xpZW50Jykge1xuICAgICAgICBzZXRDbGllbnQ/LihkZXRhaWwuY2xpZW50ID8/IG51bGwpXG4gICAgICB9IGVsc2UgaWYgKGRldGFpbC5zZWN0aW9uID09PSAnaGVhZGVyJyB8fCBkZXRhaWwuc2VjdGlvbiA9PT0gJ3BsYW5uZXInKSB7XG4gICAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRhaWwuc2VjdGlvbiA9PT0gJ3Rhc2snKSB7XG4gICAgICAgIHNldFRhc2s/LihkZXRhaWwudGFzayA/PyBudWxsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRhaWwuc2VjdGlvbiA9PT0gJ2hlYWRlcicgfHwgZGV0YWlsLnNlY3Rpb24gPT09ICdwbGFubmVyJykge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dExheW91dCA9IHJlc29sdmVJbml0aWFsTWFpYUNoYXRMYXlvdXRNb2RlKHtcbiAgICAgICAgc2VjdGlvbjogZGV0YWlsLnNlY3Rpb24gYXMgU2VjdGlvbixcbiAgICAgICAgYmFubmVyRW50cnlGYXE6IGRldGFpbC5mYXEsXG4gICAgICB9KVxuICAgICAgc2V0TGF5b3V0TW9kZShuZXh0TGF5b3V0KVxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKG51bGwpXG5cbiAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICB9LFxuICAgIFtlbnN1cmVBZ2VudHNMb2FkZWQsIGZvY3VzQ2hhdElucHV0LCBzZXRDaGF0Vmlld1Zpc2libGUsIHNldENoaXBzUHJvamVjdCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB1c2VyLmlkXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2VSZWFkeSA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICAgICkgPT4gdm9pZCxcbiAgICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgICAgc3RyZWFtaW5nOiBib29sZWFuLFxuICAgICAgd3JpdGluZzogYm9vbGVhblxuICAgICkgPT4ge1xuICAgICAgc2V0U2VuZE1lc3NhZ2VGdW5jdGlvbigoKSA9PiBzZW5kTWVzc2FnZSlcbiAgICAgIHNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb24oKCkgPT4gc3RvcEdlbmVyYXRpb24pXG4gICAgICBzZXRJc1N0cmVhbWluZyhzdHJlYW1pbmcpXG4gICAgICBzZXRJc1dyaXRpbmcod3JpdGluZylcbiAgICB9LFxuICAgIFtdXG4gIClcblxuICBjb25zdCBoYW5kbGVTZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChzaWRlYmFySGFzRXJyb3IpIHtcbiAgICAgICAgc2V0U2lkZWJhckhhc0Vycm9yKGZhbHNlKVxuICAgICAgfVxuICAgICAgaWYgKHNlbmRNZXNzYWdlRnVuY3Rpb24gJiYgY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpIHtcbiAgICAgICAgc2VuZE1lc3NhZ2VGdW5jdGlvbihtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlbmRNZXNzYWdlRnVuY3Rpb24sIHN0YXJ0Q2hhdCwgY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBzaWRlYmFySGFzRXJyb3JdXG4gIClcblxuICBjb25zdCBoYW5kbGVHb0hvbWUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gU2kgZXN0YW1vcyBlbiB1bmEgY29udmVyc2FjacOzbiB5IHZhbW9zIGEgaG9tZSwgcmVzZXRlYXIgaW5pdGlhbENoYXRJZCB5IGluY3JlbWVudGFyIG5ld0NoYXRLZXlcbiAgICBpZiAoY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSB7XG4gICAgICAvLyBObyBjb3J0YW1vcyBsYSBnZW5lcmFjacOzbjogbGEgc2VzacOzbiBzaWd1ZSByZXNwb25kaWVuZG8gZW4gYmFja2dyb3VuZC5cbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIC8vIE5vIGJvcnJhciBlbCBjbGllbnRlIHNpIGVzIGFnZW50ZSBkZSBjbGllbnRlcyAoaWd1YWwgcXVlIGVsIHByb3llY3RvIHNlIG1hbnRpZW5lKVxuICAgICAgaWYgKGFnZW50Py5lbnRpdHkgIT09ICdjbGllbnQnKSB7XG4gICAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICB9XG4gICAgICBpZiAoc2VjdGlvbiAhPT0gJ3Rhc2snKSB7XG4gICAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICAoIWFnZW50IHx8IGFnZW50Py5pc19kZWxldGVkIHx8IGFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zIHx8IGFnZW50Py5oYXNfbm90X2FjY2VzcyB8fCBhZ2VudD8ucHJvamVjdF9kZWxldGVkKSAmJlxuICAgICAgYWdlbnRzLmRhdGEubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgc2VsZWN0QWdlbnQoYWdlbnRzLmRhdGFbMF0pXG4gICAgfVxuICAgIC8vIE9yY2hlc3RyYXRvciBlbiBob21lIGdsb2JhbCAoaGVhZGVyL3BsYW5uZXIpOiBhbCBpbmljaWFyIHVuIGNoYXQgbnVldm8gc2UgZGViZSB2b2x2ZXIgYWwgcGFzbyAxXG4gICAgLy8gKGxpc3RhIGRlIGNvbnRleHRvcyByZWNpZW50ZXMpLCBwb3IgbG8gcXVlIGhheSBxdWUgbGltcGlhciB0b2RvIGVsIGNvbnRleHRvIHBpbmVhZG8uXG4gICAgaWYgKGlzR2xvYmFsTWFpYVNlY3Rpb24oc2VjdGlvbikgJiYgYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InKSB7XG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgfVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGlzV2ViU2VhcmNoQWN0aXZlICYmIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQoKVxuICAgIH1cbiAgfSwgW1xuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBvcHRpb25zLmNoYXQsXG4gICAgY3VycmVudE9wdGlvbixcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgYWdlbnQsXG4gICAgYWdlbnRzLFxuICAgIHNlbGVjdEFnZW50LFxuICAgIHNldFByb2plY3QsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFRhc2ssXG4gICAgc3RvcEdlbmVyYXRpb25GdW5jdGlvbixcbiAgICBzZWN0aW9uLFxuICBdKVxuXG4gIGdvSG9tZVJlZi5jdXJyZW50ID0gaGFuZGxlR29Ib21lXG5cbiAgY29uc3QgaGFuZGxlU3RhcnROZXdDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGZyb21NeUFnZW50cyA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50c1xuICAgIGNvbnN0IGZyb21NYWlha2VySG9tZSA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRcblxuICAgIGlmIChmcm9tTXlBZ2VudHMgfHwgZnJvbU1haWFrZXJIb21lKSB7XG4gICAgICBjb25zdCBmaXJzdEFnZW50ID0gYWdlbnRzLmRhdGFbMF1cbiAgICAgIGlmIChmaXJzdEFnZW50KSB7XG4gICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICAgIHNlbGVjdEFnZW50KGZpcnN0QWdlbnQpXG4gICAgICB9XG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50Py4oKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbXG4gICAgYWdlbnRzLmRhdGEsXG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIGhhbmRsZUdvSG9tZSxcbiAgICBpc01haWFrZXJBZ2VudFNlbGVjdGVkLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNlbGVjdEFnZW50LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIHNldFRhc2ssXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICBdKVxuXG4gIGNvbnN0IGhhbmRsZVJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgIGhhbmRsZUdvSG9tZSgpXG4gIH0sIFtoYW5kbGVHb0hvbWVdKVxuXG4gIC8vIEJvdMOzbiBcInZvbHZlclwiIGRlbCBoZWFkZXIgKHNvbG8gb3JjaGVzdHJhdG9yKTpcbiAgLy8gLSBEZXNkZSBlbCBjaGF0IChoZWFkZXIgbyBwcm9qZWN0L2NsaWVudC90YXNrKTogaW5pY2lhIHVuYSBjb252ZXJzYWNpw7NuIG51ZXZhIGNvbnNlcnZhbmRvIGVsXG4gIC8vICAgY29udGV4dG8gcGluZWFkbyB5IHZ1ZWx2ZSBhbCBob21lIChwYXNvIDIgY29uIEZBUXMvRlVBcykuXG4gIC8vIC0gRW4gZWwgaG9tZSBwYXNvIDIgKEZBUXMvRlVBcyBjb24gY29udGV4dG8pOiBsaW1waWEgZWwgY29udGV4dG8gcGluZWFkbyB5IHZ1ZWx2ZSBhbCBwYXNvIDFcbiAgLy8gICAoc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcykuIEVuIGhlYWRlciBzaWVtcHJlOyBlbiBwcm9qZWN0L2NsaWVudC90YXNrIHNvbG8gc2kgZWxcbiAgLy8gICB1c3VhcmlvIHJlaW5pY2nDsyBlbCBjb250ZXh0byAoZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKS5cbiAgY29uc3QgaGFuZGxlQmFjayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB0byA9IHJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24oc2VjdGlvbiwgYWdlbnQ/LnR5cGUsIGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgb3B0aW9ucy5ob21lKVxuICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdEJhY2ssIHsgdG8gfSlcblxuICAgIC8vIERlc2RlIGVsIGNoYXQg4oaSIG51ZXZhIGNvbnZlcnNhY2nDs24gU0lOIGJvcnJhciBlbCBjb250ZXh0byBwaW5lYWRvLCB2b2x2aWVuZG8gYWwgaG9tZS5cbiAgICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpIHtcbiAgICAgIC8vIE5vIGNvcnRhbW9zIGxhIGdlbmVyYWNpw7NuOiBsYSBzZXNpw7NuIHNpZ3VlIHJlc3BvbmRpZW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSAmJiB0b2dnbGVXZWJTZWFyY2goKVxuICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gICAgICB9XG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSG9tZSBwYXNvIDIgKGNvbnRleHRvIHBpbmVhZG8pIOKGkiBsaW1waWFyIGVsIGNvbnRleHRvIHkgdm9sdmVyIGFsIHBhc28gMSAoY29udGV4dG9zIHJlY2llbnRlcykuXG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIChpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pIHx8IGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbikpIHtcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgIH1cbiAgfSwgW1xuICAgIGNvbXB1dGVkQ3VycmVudE9wdGlvbixcbiAgICBzZWN0aW9uLFxuICAgIGFnZW50Py50eXBlLFxuICAgIGFtcGxpdHVkRXZlbnQsXG4gICAgb3B0aW9ucy5ob21lLFxuICAgIHN0b3BHZW5lcmF0aW9uRnVuY3Rpb24sXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbixcbiAgICBzZXRQcm9qZWN0LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRUYXNrLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgXSlcblxuICAvLyBEZXRlY3RhIGVsIHJlaW5pY2lvIGRlIGNvbnRleHRvIGVuIHByb2plY3QvY2xpZW50L3Rhc2s6IGNvbnRleHRvIHBpbmVhZG8g4oaSIHZhY8OtbyBjb24gZWxcbiAgLy8gb3JjaGVzdHJhdG9yIChwLiBlai4gYWwgcmVzZWxlY2Npb25hciBNQUlBIGVuIGVsIGxpc3RhZG8pLiBTb2xvIGxhIHRyYW5zaWNpw7NuIGN1ZW50YSwgYXPDrSB1bmFcbiAgLy8gYXBlcnR1cmEgZnJlc2NhIChjb250ZXh0byBwaW5lYWRvIGRlc2RlIGxhIHNlY2Npw7NuKSBubyBsbyBhY3RpdmEuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcGlubmVkID0gISEodGFzaz8uaWQgfHwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgfHwgY2xpZW50Py5pZCB8fCBwcm9qZWN0Py5pZClcbiAgICBjb25zdCB3YXNQaW5uZWQgPSBwcmV2SGFzUGlubmVkQ29udGV4dFJlZi5jdXJyZW50XG4gICAgcHJldkhhc1Bpbm5lZENvbnRleHRSZWYuY3VycmVudCA9IHBpbm5lZFxuICAgIGlmICghaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiYgd2FzUGlubmVkICYmICFwaW5uZWQpIHtcbiAgICAgIHNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbih0cnVlKVxuICAgIH1cbiAgfSwgW3Rhc2s/LmlkLCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCwgY2xpZW50Py5pZCwgcHJvamVjdD8uaWQsIHNlY3Rpb24sIGFnZW50Py50eXBlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uTWVyZ2VDcmVhdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmIChuZXh0QWdlbnQ/LmlkKSB7XG4gICAgICAgIGFkZEFnZW50KG5leHRBZ2VudCwgeyBuYXZpZ2F0ZUhvbWU6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCBvbk1lcmdlQ3JlYXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICB9XG4gIH0sIFthZGRBZ2VudF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblN5bmNFZGl0ZWRBZ2VudCA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGFnZW50OiBuZXh0QWdlbnQgfSA9IChldnQgYXMgQ3VzdG9tRXZlbnQ8eyBhZ2VudDogQWdlbnQgfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFuZXh0QWdlbnQ/LmlkKSByZXR1cm5cbiAgICAgIHVwZGF0ZUFnZW50KG5leHRBZ2VudClcbiAgICAgIGlmIChhZ2VudD8uaWQgPT09IG5leHRBZ2VudC5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChuZXh0QWdlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywgb25TeW5jRWRpdGVkQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywgb25TeW5jRWRpdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbdXBkYXRlQWdlbnQsIHNlbGVjdEFnZW50LCBhZ2VudD8uaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkNoYXRWaWV3ID0gKCkgPT4ge1xuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuY2hhdClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIEVsIMOtY29ubyBkZSBNQUlBIGRlbCBoZWFkZXIgbGxldmEgc2llbXByZSBhbCBIb21lLiBTaSBNQUlBIHlhIGVzdMOhIG1vbnRhZGEgcGVyb1xuICAgKiBtaW5pbWl6YWRhLCBlbCBob3N0IG5vIHB1ZWRlIHJlc29sdmVybG8gY2FtYmlhbmRvIGBpc09wZW5gICh5YSBlc3TDoSBlbiB0cnVlKSxcbiAgICogYXPDrSBxdWUgYXZpc2EgcG9yIGV2ZW50byB5IGFjw6EgcmVzdGF1cmFtb3MgeSB2YW1vcyBhbCBIb21lLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuSG9tZSA9ICgpID0+IHtcbiAgICAgIGFwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXIoe1xuICAgICAgICBzZWN0aW9uOiAnaGVhZGVyJyxcbiAgICAgICAgZW50aXR5OiB7IHByb2plY3RJZDogbnVsbCwgY2xpZW50SWQ6IG51bGwgfSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1ob21lJywgb3BlbkhvbWUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1ob21lJywgb3BlbkhvbWUpXG4gICAgfVxuICB9LCBbYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3Zlcl0pXG5cbiAgLyoqXG4gICAqIE90cm8gaG9zdCAocHJveWVjdG8sIGNsaWVudGUsIGJhbm5lciwgaGVhZGVy4oCmKSBwaWRlIGFicmlyIE1BSUEgbWllbnRyYXMgeWEgaGF5IHVuYVxuICAgKiBpbnN0YW5jaWEgbW9udGFkYS4gRXhwYW5kZSBzaSBlc3RhYmEgbWluaW1pemFkbywgYXBsaWNhIGVsIGNvbnRleHRvIGRlbCBob3N0IG51ZXZvXG4gICAqIHkgdmEgYWwgaG9tZSDigJQgc2luIHJlc3RhdXJhciBsYSBjb252ZXJzYWNpw7NuIHByZXZpYSAoZXNvIGxvIGhhY2UgZWwgcGlsbCkuXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5Gcm9tSG9zdCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldmVudCBhcyBDdXN0b21FdmVudDxNYWlhSG9zdE9wZW5EZXRhaWw+XG4gICAgICBpZiAoIWRldGFpbCkgcmV0dXJuXG4gICAgICBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyKGRldGFpbClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKE1BSUFfT1BFTl9GUk9NX0hPU1RfRVZFTlQsIG9wZW5Gcm9tSG9zdClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5ULCBvcGVuRnJvbUhvc3QpXG4gICAgfVxuICB9LCBbYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3Zlcl0pXG5cbiAgLyoqIE1pc21vIGZsdWpvIHF1ZSBDaGF0QUlNeUFnZW50cy5oYW5kbGVVc2VBZ2VudCArIG9uQmFjayAoaGFuZGxlcnMuaG9tZSkuXG4gICAqICBFbCBkZXRhaWwgcHVlZGUgdHJhZXIgb3BjaW9uYWxtZW50ZSBgcHJvamVjdGAsIGBjbGllbnRgLCBgdGFza2AgcGFyYSBmbG93cyBxdWVcbiAgICogIG5lY2VzaXRhbiBwcmVzZXJ2YXIgY29udGV4dG8gKGVqLiBzZWxlY3RvciBkZSBhZ2VudGVzIGRlc2RlIHVuYSB0YXJlYSkuIFNpIG5vIHZpZW5lbixcbiAgICogIHNlIG1hbnRpZW5lIGVsIGNvbXBvcnRhbWllbnRvIG9yaWdpbmFsIGRlIGxpbXBpYXIgcHJvamVjdC9jbGllbnQuICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3Blbk5ld0NoYXRXaXRoQWdlbnQgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8e1xuICAgICAgICBhZ2VudDogQWdlbnRcbiAgICAgICAgcHJvamVjdD86IFByb2plY3QgfCBudWxsXG4gICAgICAgIGNsaWVudD86IENsaWVudCB8IG51bGxcbiAgICAgICAgdGFzaz86IFRhc2sgfCBudWxsXG4gICAgICB9PlxuICAgICAgY29uc3QgbmV4dEFnZW50ID0gZGV0YWlsPy5hZ2VudFxuICAgICAgaWYgKCFuZXh0QWdlbnQpIHJldHVyblxuXG4gICAgICBzZXRQcm9qZWN0KGRldGFpbD8ucHJvamVjdCA/PyBudWxsKVxuICAgICAgc2V0Q2xpZW50Py4oZGV0YWlsPy5jbGllbnQgPz8gbnVsbClcbiAgICAgIGlmIChkZXRhaWw/LnRhc2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRUYXNrPy4oZGV0YWlsLnRhc2spXG4gICAgICB9XG4gICAgICBzZWxlY3RBZ2VudChuZXh0QWdlbnQpXG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1uZXctY2hhdC13aXRoLWFnZW50Jywgb3Blbk5ld0NoYXRXaXRoQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1uZXctY2hhdC13aXRoLWFnZW50Jywgb3Blbk5ld0NoYXRXaXRoQWdlbnQpXG4gICAgfVxuICB9LCBbc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFza10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVVc2VTa2lsbEFmdGVyU2F2ZSA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgc2tpbGwgfSA9IChldmVudCBhcyBDdXN0b21FdmVudDx7IHNraWxsOiBTa2lsbCB9PikuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAoIXNraWxsKSByZXR1cm5cblxuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbWFpYS1pbnNlcnQtc2tpbGwtbWVudGlvbicsIHsgZGV0YWlsOiB7IHNraWxsIH0gfSkpXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdtYWlhLWlucHV0LXJlZm9jdXMnKSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCwgaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIGhhbmRsZVVzZVNraWxsQWZ0ZXJTYXZlKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gTWV0YWRhdGEgZGUgbGEgc2Vzc2lvbiBhYmllcnRhIChhZ2VudF90eXBlL2FnZW50X2VudGl0eSArIGNvbnRleHRvKSwgZW1pdGlkYSBwb3IgdXNlQ2hhdE1lc3NhZ2VzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uU2Vzc2lvbk1ldGEgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2dCBhcyBDdXN0b21FdmVudDxTZXNzaW9uTWV0YT5cbiAgICAgIGlmIChkZXRhaWwpIHNldFNlc3Npb25NZXRhKGRldGFpbClcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1jaGF0LXNlc3Npb24tbWV0YScsIG9uU2Vzc2lvbk1ldGEpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtY2hhdC1zZXNzaW9uLW1ldGEnLCBvblNlc3Npb25NZXRhKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gQWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuIGxpbXBpYW1vcyBsYSBtZXRhZGF0YTsgZWwgbG9hZCBkZSBsYSBudWV2YSBzZXNzaW9uIGxhIHZ1ZWx2ZSBhIGVtaXRpci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTZXNzaW9uTWV0YShudWxsKVxuICB9LCBbaW5pdGlhbENoYXRJZF0pXG5cbiAgLy8gQ2FydGVsIFwiY29udGludWFyIGVuIHVuIGNoYXQgbnVldm9cIjogc2UgbXVlc3RyYSBhbCBhYnJpciB1bmEgY29udmVyc2FjacOzbiBkZSB1biBjbG9uZSBsZWdhY3lcbiAgLy8gKGFnZW50X3R5cGUgPT09ICdjbG9uZScgY29uIGVudGl0eSBwcm9qZWN0L3Rhc2svY2xpZW50KS4gRWwgaW5wdXQgc2UgcmVlbXBsYXphIHBvciBlbCBjYXJ0ZWwuXG4gIGNvbnN0IGxlZ2FjeUNvbnRleHRTZXNzaW9uID0gdXNlTWVtbzx7IGVudGl0eVR5cGU6IExlZ2FjeUNvbnRleHRFbnRpdHk7IGNvbnRleHROYW1lOiBzdHJpbmcgfSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQpIHJldHVybiBudWxsXG4gICAgaWYgKCFzZXNzaW9uTWV0YSB8fCBzZXNzaW9uTWV0YS5hZ2VudFR5cGUgIT09ICdjbG9uZScpIHJldHVybiBudWxsXG4gICAgY29uc3QgZW50aXR5ID0gc2Vzc2lvbk1ldGEuYWdlbnRFbnRpdHlcbiAgICBpZiAoIWVudGl0eSB8fCAhTEVHQUNZX0NPTlRFWFRfRU5USVRJRVMuaW5jbHVkZXMoZW50aXR5IGFzIExlZ2FjeUNvbnRleHRFbnRpdHkpKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IGNvbnRleHROYW1lID1cbiAgICAgIGVudGl0eSA9PT0gJ3Rhc2snID8gc2Vzc2lvbk1ldGEudGFza05hbWUgOiBlbnRpdHkgPT09ICdwcm9qZWN0JyA/IHNlc3Npb25NZXRhLnByb2plY3ROYW1lIDogc2Vzc2lvbk1ldGEuY2xpZW50TmFtZVxuICAgIHJldHVybiB7IGVudGl0eVR5cGU6IGVudGl0eSBhcyBMZWdhY3lDb250ZXh0RW50aXR5LCBjb250ZXh0TmFtZTogY29udGV4dE5hbWUgfHwgJycgfVxuICB9LCBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBzZXNzaW9uTWV0YV0pXG5cbiAgLy8gTWFyY2EgZWwgYWdlbnRlIGRlIGxhIGNvbnZlcnNhY2nDs24gbGVnYWN5IHBhcmEgcXVlIGhlYWRlciwgc2VsZWN0b3IgeSBhdmF0YXIgbXVlc3RyZW4gZWwgbG9nb1xuICAvLyBNQUlBIHkgZWwgbm9tYnJlIHRhY2hhZG8gKGFnZW50ZSBvYnNvbGV0byksIHNpbiBkZXBlbmRlciBkZWwgYHR5cGVgIHJlc3VlbHRvIGRlIGxhIHNlc2nDs24gdmllamEuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxlZ2FjeUNvbnRleHRTZXNzaW9uICYmIGFnZW50ICYmICFhZ2VudC5pc19sZWdhY3lfY29udGV4dCkge1xuICAgICAgc2VsZWN0QWdlbnQoeyAuLi5hZ2VudCwgaXNfbGVnYWN5X2NvbnRleHQ6IHRydWUgfSlcbiAgICB9XG4gIH0sIFtsZWdhY3lDb250ZXh0U2Vzc2lvbiwgYWdlbnQsIHNlbGVjdEFnZW50XSlcblxuICAvLyBBYnJlIHVuIGNoYXQgbnVldm8gY29uIGVsIG9yY2hlc3RyYXRvciBzZXRlYW5kbyBlbCBjb250ZXh0byBkZWwgY2xvbmUgbGVnYWN5IChtaXNtbyBjcml0ZXJpb1xuICAvLyBxdWUgY2xpY2tlYXIgdW4gY29udGV4dG8gcmVjaWVudGUgZW4gZWwgaG9tZSDihpIgcGFzbyAyIGNvbiBGQVFzL2FjY2lvbmVzIGRlIGVzZSBjb250ZXh0bykuXG4gIGNvbnN0IGhhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXNlc3Npb25NZXRhKSByZXR1cm5cbiAgICBjb25zdCB7XG4gICAgICBhZ2VudEVudGl0eSxcbiAgICAgIHByb2plY3RJZDogcElkLFxuICAgICAgcHJvamVjdE5hbWU6IHBOYW1lLFxuICAgICAgY2xpZW50SWQ6IGNJZCxcbiAgICAgIGNsaWVudE5hbWU6IGNOYW1lLFxuICAgICAgdGFza0lkOiB0SWQsXG4gICAgICB0YXNrTmFtZTogdE5hbWUsXG4gICAgfSA9IHNlc3Npb25NZXRhXG5cbiAgICBjb25zdCBvcmNoZXN0cmF0b3IgPSBhZ2VudHMuZGF0YS5maW5kKChhOiBBZ2VudCkgPT4gYS50eXBlID09PSAnb3JjaGVzdHJhdG9yJylcbiAgICBpZiAoIW9yY2hlc3RyYXRvcikgcmV0dXJuXG5cbiAgICAvLyBSZXNldCBkZWwgY2hhdCDihpIgY29udmVyc2FjacOzbiBudWV2YSAobGEgYW50ZXJpb3Igc2lndWUgZW4gYmFja2dyb3VuZClcbiAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG5cbiAgICAvLyBTZXRlYXIgY29udGV4dG8gKG1pc21vIGNyaXRlcmlvIHF1ZSBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0IGRlbCBob21lKVxuICAgIHNldFRhc2s/LihudWxsKVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgaWYgKGFnZW50RW50aXR5ID09PSAnY2xpZW50JyAmJiBjSWQgIT0gbnVsbCkge1xuICAgICAgc2V0Q2xpZW50Py4oeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgIH0gZWxzZSBpZiAoYWdlbnRFbnRpdHkgPT09ICdwcm9qZWN0JyAmJiBwSWQgIT0gbnVsbCkge1xuICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgIGlkOiBwSWQsXG4gICAgICAgIG5hbWU6IHBOYW1lIHx8ICcnLFxuICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQsIGNsaWVudDogeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9IH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KHsgcHJvamVjdElkOiBTdHJpbmcocElkKSwgcHJvamVjdE5hbWU6IHBOYW1lIHx8ICcnLCBjbGllbnROYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgIH0gZWxzZSBpZiAoYWdlbnRFbnRpdHkgPT09ICd0YXNrJyAmJiB0SWQgIT0gbnVsbCkge1xuICAgICAgc2V0VGFzaz8uKHtcbiAgICAgICAgaWQ6IHRJZCxcbiAgICAgICAgbmFtZTogdE5hbWUgfHwgJycsXG4gICAgICAgIC4uLihwSWQgIT0gbnVsbCA/IHsgcHJvamVjdElkOiBwSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNJZCAhPSBudWxsID8geyBjbGllbnRJZDogY0lkIH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgaWYgKGNJZCAhPSBudWxsKSBzZXRDbGllbnQ/Lih7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0pXG4gICAgICBpZiAocElkICE9IG51bGwpIHtcbiAgICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgICAgaWQ6IHBJZCxcbiAgICAgICAgICBuYW1lOiBwTmFtZSB8fCAnJyxcbiAgICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQsIGNsaWVudDogeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7IHByb2plY3RJZDogU3RyaW5nKHBJZCksIHByb2plY3ROYW1lOiBwTmFtZSB8fCAnJywgY2xpZW50TmFtZTogY05hbWUgfHwgJycgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RBZ2VudChvcmNoZXN0cmF0b3IpXG4gICAgc2V0U2Vzc2lvbk1ldGEobnVsbClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgfSwgW3Nlc3Npb25NZXRhLCBhZ2VudHMuZGF0YSwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0LCBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSlcblxuICBjb25zdCBzaG93TmV3Q2hhdCA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiAhPT0gb3B0aW9ucy5jaGF0XG4gIGNvbnN0IGlzTXlBZ2VudHNTZWN0aW9uID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15QWdlbnRzXG4gIGNvbnN0IGlzTXlTa2lsbHNTZWN0aW9uID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15U2tpbGxzXG5cbiAgLy8gQm90w7NuIFwidm9sdmVyXCI6IHNvbG8gcGFyYSBlbCBvcmNoZXN0cmF0b3IuXG4gIC8vIC0gRW4gZWwgY2hhdDogZGlzcG9uaWJsZSBlbiB0b2RhcyBsYXMgc2VjY2lvbmVzIChoZWFkZXIgeSBwcm9qZWN0L2NsaWVudC90YXNrKS5cbiAgLy8gLSBFbiBlbCBob21lIHBhc28gMiAoRkFRcy9GVUFzIGNvbiBjb250ZXh0byBwaW5lYWRvKTogZW4gZWwgaGVhZGVyIHNpZW1wcmU7IGVuXG4gIC8vICAgcHJvamVjdC9jbGllbnQvdGFzayBzb2xvIHNpIGVsIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIChwYXPDsyBwb3IgZWwgc2VsZWN0b3IgZGVcbiAgLy8gICBjb250ZXh0b3MgcmVjaWVudGVzKS4gRW4gZWwgcGFzbyAxIChzaW4gY29udGV4dG8pIE5PIHNlIG11ZXN0cmEuXG4gIGNvbnN0IGhhc1Bpbm5lZENvbnRleHQgPSAhISh0YXNrPy5pZCB8fCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCB8fCBjbGllbnQ/LmlkIHx8IHByb2plY3Q/LmlkKVxuICBjb25zdCBpc0NoYXRWaWV3ID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXRcbiAgY29uc3QgaXNIb21lU3RlcDIgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiBoYXNQaW5uZWRDb250ZXh0XG4gIGNvbnN0IGlzSGVhZGVySG9tZVN0ZXAyID0gaXNHbG9iYWxNYWlhU2VjdGlvbihzZWN0aW9uKSAmJiBpc0hvbWVTdGVwMlxuICBjb25zdCBpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiA9ICFpc0dsb2JhbE1haWFTZWN0aW9uKHNlY3Rpb24pICYmIGlzSG9tZVN0ZXAyICYmIGRpZFJlc2V0Q29udGV4dEluU2VjdGlvblxuICBjb25zdCBzaG93QmFja0J1dHRvbiA9XG4gICAgYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InICYmXG4gICAgIWhhc0Vycm9yICYmXG4gICAgIWxvYWRpbmcgJiZcbiAgICAoaXNDaGF0VmlldyB8fCBpc0hlYWRlckhvbWVTdGVwMiB8fCBpc1NlY3Rpb25SZXNldEhvbWVTdGVwMilcbiAgY29uc3QgaGFuZGxlT3Blbk1hcmtldHBsYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjbGVhckFnZW50KClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMubXlBZ2VudHMpXG4gIH0sIFtjbGVhckFnZW50XSlcblxuICBjb25zdCBoYW5kbGVPcGVuU2tpbGxzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjbGVhckFnZW50KClcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMubXlTa2lsbHMpXG4gICAgaGFuZGxlR2V0U2tpbGxzKClcbiAgfSwgW2NsZWFyQWdlbnQsIGhhbmRsZUdldFNraWxsc10pXG5cbiAgY29uc3QgaGFuZGxlR29Ub01haWFrZXIgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgbGV0IG1haWFrZXJBZ2VudCA9IGFnZW50cy5kYXRhLmZpbmQoKGE6IEFnZW50KSA9PiBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudChhKSlcbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgICAgICAgIHBhdGg6IGBhZ2VudHM/YWdlbnRfdHlwZT1jbG9uZSZlbnRpdHk9Z2xvYmFsJmxhbmc9JHttYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpfWAsXG4gICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgICBtYWlha2VyQWdlbnQgPSAoZGF0YS5kYXRhIHx8IFtdKS5maW5kKChhOiBBZ2VudCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYSkpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbWFpYWtlckFnZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0UHJvamVjdChudWxsKVxuICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgc2V0VGFzaz8uKG51bGwpXG4gICAgc2VsZWN0QWdlbnQobWFpYWtlckFnZW50KVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50KSB7XG4gICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50KClcbiAgICB9XG4gIH0sIFthZ2VudHMuZGF0YSwgaTE4bi5sYW5ndWFnZSwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFza10pXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUFnZW50RnJvbU15QWdlbnRzID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50SWQ6IHN0cmluZykgPT4ge1xuICAgICAgcmVtb3ZlQWdlbnQoYWdlbnRJZClcbiAgICAgIGlmIChhZ2VudD8uaWQgPT09IGFnZW50SWQpIHtcbiAgICAgICAgc2VsZWN0Rmlyc3RBZ2VudChhZ2VudElkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50Py5pZCwgcmVtb3ZlQWdlbnQsIHNlbGVjdEZpcnN0QWdlbnRdXG4gIClcblxuICAvLyBFbCBmb290ZXIgKGlucHV0KSBzZSBvY3VsdGEgc29sbyBlbiBlbCBob21lIG1hcmtldHBsYWNlIGRlIE1haWFrZXIgKGJyb3dzZSBkZSBhZ2VudGVzKS5cbiAgLy8gRWwgaG9tZSBkZWwgb3JjaGVzdHJhdG9yIHPDrSBwZXJtaXRlIGVzY3JpYmlyLCBhc8OtIHF1ZSBtYW50aWVuZSBlbCBmb290ZXIuXG4gIGNvbnN0IGlzTWFpYWtlckNyZWF0b3JIb21lID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgaXNNYWlha2VyQWdlbnRTZWxlY3RlZFxuXG4gIGNvbnN0IG1vZGFsUGFuZWwgPSAoXG4gICAgPD5cbiAgICAgIHt2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uLCB1c2VyKSAmJiAhaXNGbG9hdGluZyA/IChcbiAgICAgICAgPFNpZGViYXJcbiAgICAgICAgICBvbkdvVG9DaGF0PXtnb1RvQ2hhdH1cbiAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRTaWRlYmFySGFzRXJyb3IodHJ1ZSl9XG4gICAgICAgICAgaGFuZGxlR29Ub0hvbWU9e2hhbmRsZUdvSG9tZX1cbiAgICAgICAgICBoYW5kbGVTdGFydE5ld0NoYXQ9e2hhbmRsZVN0YXJ0TmV3Q2hhdH1cbiAgICAgICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2U9e2hhbmRsZU9wZW5NYXJrZXRwbGFjZX1cbiAgICAgICAgICBzaG93TmV3Q2hhdD17c2hvd05ld0NoYXR9XG4gICAgICAgICAgcmVmZXRjaENoYXRzPXtyZWZldGNoQ2hhdHN9XG4gICAgICAgICAgaGFuZGxlU2V0UmVmZXRjaENoYXRzPXtzZXRSZWZldGNoQ2hhdHN9XG4gICAgICAgICAgaGFzRXJyb3I9e3NpZGViYXJIYXNFcnJvcn1cbiAgICAgICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZj17cmVzZXRTZWxlY3RlZENoYXRSZWZ9XG4gICAgICAgICAgYWdlbnRzTmF2QWN0aXZlPXtzaWRlYmFyQWdlbnRzTmF2QWN0aXZlfVxuICAgICAgICAgIGhhbmRsZU9wZW5Ta2lsbHM9e2hhbmRsZU9wZW5Ta2lsbHN9XG4gICAgICAgICAgaXNMZWdhY3lDb250ZXh0U2Vzc2lvbj17ISFsZWdhY3lDb250ZXh0U2Vzc2lvbn1cbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPFNDQ0FJTUNvbnRlbnQgZXhwYW5kZWQ9e2V4cGFuZGVkfSBmbG9hdGluZz17aXNGbG9hdGluZ30+XG4gICAgICAgIDxDaGF0QUlNb2RhbEhlYWRlclxuICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgb25MYXlvdXRNb2RlQ2hhbmdlPXtoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlfVxuICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICBkcmFnZ2FibGU9e2lzRmxvYXRpbmd9XG4gICAgICAgICAgb25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cbiAgICAgICAgICBvbkRyYWdNb3ZlPXtoYW5kbGVEcmFnTW92ZX1cbiAgICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG4gICAgICAgICAgaGFuZGxlTWluaW1pemU9e2hhbmRsZU1pbmltaXplfVxuICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgaGFzRXJyb3I9eyEhYWdlbnRFcnJvcn1cbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgIGxvYWRpbmdNb3JlPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICBoYXNNb3JlPXthZ2VudHMuaGFzX21vcmV9XG4gICAgICAgICAgaGFuZGxlUmVzZXRDaGF0PXtoYW5kbGVSZXNldENoYXR9XG4gICAgICAgICAgb25BZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICBsb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgc29ydEFnZW50c0xpc3Q9e3NvcnRBZ2VudHNMaXN0fVxuICAgICAgICAgIGlzTXlBZ2VudHNTZWN0aW9uPXtpc015QWdlbnRzU2VjdGlvbn1cbiAgICAgICAgICBpc015U2tpbGxzU2VjdGlvbj17aXNNeVNraWxsc1NlY3Rpb259XG4gICAgICAgICAgaXNNYWlha2VyU2VjdGlvbj17aXNNYWlha2VyQ3JlYXRvckhvbWV9XG4gICAgICAgICAgc2hvd0JhY2tCdXR0b249e3Nob3dCYWNrQnV0dG9ufVxuICAgICAgICAgIG9uQmFjaz17aGFuZGxlQmFja31cbiAgICAgICAgLz5cbiAgICAgICAge2hhc0Vycm9yID8gKFxuICAgICAgICAgIDxNQUlBRXJyb3IgLz5cbiAgICAgICAgKSA6IHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24sIHVzZXIpID8gKFxuICAgICAgICAgIDxDaGF0QUlDb250ZW50XG4gICAgICAgICAgICBjdXJyZW50T3B0aW9uPXtjb21wdXRlZEN1cnJlbnRPcHRpb259XG4gICAgICAgICAgICBoYW5kbGVycz17eyAuLi5oYW5kbGVycywgY2hhdDogc3RhcnRDaGF0LCBob21lOiBoYW5kbGVycy5ob21lLCBoYW5kbGVHb0hvbWUgfX1cbiAgICAgICAgICAgIG9uRXJyb3I9eygpID0+IHNldEhhc0Vycm9yKHRydWUpfVxuICAgICAgICAgICAgcmVmcz17eyB1c2VySW5pdGlhbE1lc3NhZ2UsIGluaXRpYWxDaGF0SWQgfX1cbiAgICAgICAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeT17aGFuZGxlU2VuZE1lc3NhZ2VSZWFkeX1cbiAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgIGZsb2F0aW5nPXtpc0Zsb2F0aW5nfVxuICAgICAgICAgICAgYWdlbnRzPXthZ2VudHMuZGF0YX1cbiAgICAgICAgICAgIGxvYWRpbmdBZ2VudHM9e2xvYWRpbmd9XG4gICAgICAgICAgICBvbkRlbGV0ZUFnZW50PXtoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50c31cbiAgICAgICAgICAgIG9uRmF2b3JpdGVBZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIGhhc01vcmVBZ2VudHM9eyEhYWdlbnRzLmhhc19tb3JlfVxuICAgICAgICAgICAgbG9hZGluZ01vcmVBZ2VudHM9e2xvYWRpbmdNb3JlfVxuICAgICAgICAgICAgb25Mb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgICBvbkdvVG9NYWlha2VyPXtoYW5kbGVHb1RvTWFpYWtlcn1cbiAgICAgICAgICAgIG15U2tpbGxzPXtteVNraWxsc31cbiAgICAgICAgICAgIHNoYXJlZFNraWxscz17c2hhcmVkU2tpbGxzfVxuICAgICAgICAgICAgbG9hZGluZ1NraWxscz17bG9hZGluZ1NraWxsc31cbiAgICAgICAgICAgIG9uRGVsZXRlU2tpbGw9e3JlbW92ZVNraWxsfVxuICAgICAgICAgICAgb25TZWFyY2hBZ2VudHM9e3NlYXJjaEN1c3RvbUFnZW50c31cbiAgICAgICAgICAgIHNlYXJjaExvYWRpbmdBZ2VudHM9e3NlYXJjaExvYWRpbmd9XG4gICAgICAgICAgICBhZ2VudEVycm9yPXthZ2VudEVycm9yfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFByb2plY3RTdW1tYXJ5Q29udGVudCBvblJlc3RhcnRTdW1tYXJ5PXtoYW5kbGVycy5ob21lfSAvPlxuICAgICAgICApfVxuICAgICAgICB7KChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiAhIWFnZW50cz8uZGF0YT8ubGVuZ3RoKSB8fFxuICAgICAgICAgIGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSAmJlxuICAgICAgICAgICFpc01haWFrZXJDcmVhdG9ySG9tZSAmJlxuICAgICAgICAgICFoYXNFcnJvciAmJlxuICAgICAgICAgICFsb2FkaW5nICYmXG4gICAgICAgICAgdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUoc2VjdGlvbiwgdXNlcikgJiYgKFxuICAgICAgICAgICAgPENoYXRBaU1vZGFsRm9vdGVyXG4gICAgICAgICAgICAgIGFnZW50PXthZ2VudH1cbiAgICAgICAgICAgICAgaGFuZGxlU2VuZE1lc3NhZ2U9e2hhbmRsZVNlbmRNZXNzYWdlfVxuICAgICAgICAgICAgICBoYW5kbGVTdG9wR2VuZXJhdGlvbj17c3RvcEdlbmVyYXRpb25GdW5jdGlvbn1cbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBpc1dyaXRpbmc9e2lzV3JpdGluZ31cbiAgICAgICAgICAgICAgY2hhdElkPXtpbml0aWFsQ2hhdElkfVxuICAgICAgICAgICAgICBuZXdDaGF0S2V5PXtuZXdDaGF0S2V5fVxuICAgICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgICAgICBsZWdhY3lDb250ZXh0U2Vzc2lvbj17bGVnYWN5Q29udGV4dFNlc3Npb259XG4gICAgICAgICAgICAgIG9uQ29udGludWVJbk5ld0NoYXQ9e2hhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdH1cbiAgICAgICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlNQ29udGVudD5cbiAgICA8Lz5cbiAgKVxuXG4gIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gKFxuICAgIDxTQ0NBSU1Db250ZW50V3JhcHBlciBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfSByZWY9e2NvbnRlbnRXcmFwcGVyUmVmfT5cbiAgICAgIHttb2RhbFBhbmVsfVxuICAgIDwvU0NDQUlNQ29udGVudFdyYXBwZXI+XG4gIClcblxuICByZXR1cm4gKFxuICAgIHNlbGVjdG9yICYmXG4gICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFNDQ0FJTVdyYXBwZXJcbiAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICBkcmFnUG9zaXRpb249e3Jlc29sdmVkRHJhZ1Bvc2l0aW9ufVxuICAgICAgICBlbGV2YXRlZD17c2VjdGlvbiA9PT0gJ3Rhc2snfVxuICAgICAgICAkbWluaW1pemVkPXtpc01pbmltaXplZH1cbiAgICAgID5cbiAgICAgICAgPFNDQ0FJTU1pbmltaXplZEhpZGUgJGhpZGRlbj17aXNNaW5pbWl6ZWR9PlxuICAgICAgICAgIDxGbG9hdGluZ1BhbmVsTW90aW9uIHRpbHQ9e3RpbHRNb3Rpb259IGV4cGFuZGVkPXtleHBhbmRlZH0+XG4gICAgICAgICAgICB7Y29udGVudFdyYXBwZXJ9XG4gICAgICAgICAgPC9GbG9hdGluZ1BhbmVsTW90aW9uPlxuICAgICAgICA8L1NDQ0FJTU1pbmltaXplZEhpZGU+XG4gICAgICAgIHtpc01pbmltaXplZCAmJiAoXG4gICAgICAgICAgPE1haWFNaW5pbWl6ZWRQaWxsXG4gICAgICAgICAgICB1bnJlYWRDb3VudD17dW5yZWFkQ291bnR9XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17aGFzQWN0aXZlU3RyZWFtfVxuICAgICAgICAgICAgb25SZXN0b3JlPXtoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIChcbiAgICAgICAgICA8QWJtQWdlbnRNb2RhbFxuICAgICAgICAgICAgYWRkQWdlbnQ9e2FkZEFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnQ9e3VwZGF0ZUFnZW50fVxuICAgICAgICAgICAgcmVtb3ZlQWdlbnQ9e3JlbW92ZUFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIHNlbGVjdEZpcnN0QWdlbnQ9e3NlbGVjdEZpcnN0QWdlbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNQZXJtaXNzaW9ucyAmJiAoXG4gICAgICAgICAgPEFibVNraWxsTW9kYWwgYWRkU2tpbGw9e2FkZFNraWxsfSB1cGRhdGVTa2lsbEluTGlzdD17dXBkYXRlU2tpbGxJbkxpc3R9IHJlbW92ZVNraWxsPXtyZW1vdmVTa2lsbH0gLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNQZXJtaXNzaW9ucyAmJiA8QWJtU2tpbGxHZW5lcmF0ZU1vZGFsIC8+fVxuICAgICAgICA8U25hY2tiYXIgLz5cbiAgICAgIDwvU0ND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