@projectcor/maia-components 2.11.100-3 → 2.11.100-5

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 (63) hide show
  1. package/lib/App.js +4 -2
  2. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +212 -14
  3. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +99 -9
  4. package/lib/components/atoms/Chip/Chip.js +5 -12
  5. package/lib/components/atoms/Chip/styles.js +6 -6
  6. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +28 -121
  7. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +2 -6
  8. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +5 -12
  9. package/lib/components/atoms/MAIAInput/MAIAInput.js +270 -390
  10. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -5
  11. package/lib/components/atoms/MAIAInput/styles.js +86 -102
  12. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +41 -54
  13. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.styles.js +12 -25
  14. package/lib/components/atoms/icons/index.js +1 -10
  15. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +91 -4
  16. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +7 -18
  17. package/lib/components/molecules/ChatAIHome/styles.js +38 -54
  18. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +191 -44
  19. package/lib/components/molecules/ChatAIMessages/newStyles.js +26 -10
  20. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +2 -1
  21. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +4 -1
  22. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +8 -1
  23. package/lib/components/molecules/ChatFooter/ChatFooter.js +62 -23
  24. package/lib/components/molecules/Sidebar/Sidebar.js +3 -14
  25. package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.js +91 -0
  26. package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.styles.js +19 -0
  27. package/lib/components/molecules/StreamAssistantTurnTimeline/index.js +2 -0
  28. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +34 -5
  29. package/lib/dev/DevStreamTimelineDemo.js +614 -0
  30. package/lib/dev/mockStreamTimelineDemo.js +417 -0
  31. package/lib/dev/mockStreamTimelineRunner.js +298 -0
  32. package/lib/hooks/useAgentModel/useCreateAgent.js +40 -14
  33. package/lib/hooks/useAgentModel/useUpdateAgent.js +37 -11
  34. package/lib/hooks/useChatManager/useChatManager.js +132 -46
  35. package/lib/hooks/useEvent.js +2 -1
  36. package/lib/hooks/useMentionPopover.js +2 -4
  37. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +183 -23
  38. package/lib/hooks/useStreamTimeline/index.js +7 -0
  39. package/lib/hooks/useStreamTimeline/streamTimelineStore.js +37 -0
  40. package/lib/lang/br/index.js +16 -7
  41. package/lib/lang/en/index.js +16 -7
  42. package/lib/lang/es/index.js +16 -7
  43. package/lib/lang/fr/index.js +15 -9
  44. package/lib/services/maia/Agents/connectors.js +124 -0
  45. package/lib/styles/config.js +2 -2
  46. package/lib/types/agentModal.js +1 -1
  47. package/lib/types/streamActivity.js +1 -1
  48. package/lib/types/streamTimeline.js +2 -0
  49. package/lib/utils/normalizeAgentConnectors.js +28 -3
  50. package/lib/utils/streamDebugLog.js +170 -0
  51. package/lib/utils/streamExecutionSteps.js +136 -0
  52. package/lib/utils/streamTimeline.js +177 -0
  53. package/package.json +1 -1
  54. package/lib/components/atoms/MAIAInput/maiaInputLayout.js +0 -25
  55. package/lib/components/atoms/icons/MaiaInputAddIcon.js +0 -42
  56. package/lib/components/atoms/icons/MaiaInputAttachIcon.js +0 -29
  57. package/lib/components/atoms/icons/MaiaInputAttachmentImageIcon.js +0 -33
  58. package/lib/components/atoms/icons/MaiaInputDeepSearchIcon.js +0 -35
  59. package/lib/components/atoms/icons/MaiaInputMentionIcon.js +0 -44
  60. package/lib/components/atoms/icons/MaiaInputRobotIcon.js +0 -29
  61. package/lib/components/atoms/icons/MaiaInputSendIcon.js +0 -29
  62. package/lib/components/atoms/icons/MaiaInputSlashIcon.js +0 -29
  63. package/lib/components/atoms/icons/MaiaInputWebSearchIcon.js +0 -35
@@ -1,12 +1,13 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
4
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
5
  import _regeneratorRuntime from "@babel/runtime/regenerator";
7
6
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
8
7
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
9
8
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
9
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
10
11
  /* eslint-disable no-console */
11
12
  /* eslint-disable @typescript-eslint/no-shadow */
12
13
  /* eslint-disable no-constant-condition */
@@ -20,7 +21,11 @@ import { useTranslation } from 'react-i18next';
20
21
  import maia from '../../services/maia';
21
22
  import { SECTIONS } from '../../constants/config';
22
23
  import { ACTIVITY_MESSAGE_ROTATE_MS, advanceStreamActivityMessage, canAdvanceStreamActivityMessage, canRotateStreamActivityPhase, getInitialStreamActivity, getThinkingLoadingMessage, getWritingStreamActivity, resolveHitlNodeStreamActivity, resolveInitialHitlStreamActivity } from '../../utils/streamActivityMessages';
24
+ import { completeAllExecutionSteps, getActiveExecutionStep, mergeActivityWithExecutionSteps, resetExecutionStepCounter } from '../../utils/streamExecutionSteps';
25
+ import { appendContentToStreamTimeline, appendNodeToStreamTimeline, finalizeStreamTimeline, startStreamTimelineTurn } from '../../utils/streamTimeline';
26
+ import { streamTimelineStore } from '../useStreamTimeline/streamTimelineStore';
23
27
  import { isCompleteLikeSsePayload, mergeStreamChunk } from '../../utils/sseStreamContent';
28
+ import { streamDebugActivity, streamDebugApproval, streamDebugLog, streamDebugLogHitlUiOverlap, streamDebugNode, streamDebugSse, summarizeHitlContext, summarizeTimelineSnapshot } from '../../utils/streamDebugLog';
24
29
  export var useOrchestratorStream = function useOrchestratorStream(_ref) {
25
30
  var onStreamUpdate = _ref.onStreamUpdate,
26
31
  onFinishStream = _ref.onFinishStream,
@@ -55,6 +60,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
55
60
  var isStoppedRef = useRef(false);
56
61
  var activityMessageIndexRef = useRef(0);
57
62
  var streamActivityRef = useRef(null);
63
+ var executionStepsRef = useRef([]);
64
+ var accumulatedContentRef = useRef('');
58
65
  var onStreamUpdateRef = useRef(onStreamUpdate);
59
66
  var onFinishStreamRef = useRef(onFinishStream);
60
67
  var onStartWritingRef = useRef(onStartWriting);
@@ -68,10 +75,32 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
68
75
  onErrorRef.current = onError;
69
76
  onApprovalRequiredRef.current = onApprovalRequired;
70
77
  var clearStreamLoadingState = useCallback(function () {
78
+ streamDebugLog('orchestrator', 'clearStreamLoadingState', {
79
+ previousTurnId: streamTimelineStore.getSnapshot().turnId,
80
+ executionStepCount: executionStepsRef.current.length
81
+ });
71
82
  activityMessageIndexRef.current = 0;
72
83
  streamActivityRef.current = null;
84
+ executionStepsRef.current = [];
85
+ accumulatedContentRef.current = '';
86
+ resetExecutionStepCounter();
87
+ streamTimelineStore.clear();
73
88
  setStreamActivity(null);
74
89
  setLoadingMessage(null);
90
+ setIsWriting(false);
91
+ }, []);
92
+ var beginStreamTimelineTurn = useCallback(function (turnId) {
93
+ streamDebugLog('orchestrator', 'beginStreamTimelineTurn', {
94
+ turnId: turnId
95
+ });
96
+ accumulatedContentRef.current = '';
97
+ executionStepsRef.current = [];
98
+ resetExecutionStepCounter();
99
+ streamTimelineStore.replace(startStreamTimelineTurn(turnId));
100
+ }, []);
101
+ var syncStreamTimelineContent = useCallback(function (accumulatedText) {
102
+ var next = appendContentToStreamTimeline(streamTimelineStore.getSnapshot(), accumulatedText);
103
+ streamTimelineStore.replace(next);
75
104
  }, []);
76
105
  var applyStreamActivity = useCallback(function (activity) {
77
106
  var prev = streamActivityRef.current;
@@ -84,7 +113,91 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
84
113
  streamActivityRef.current = activity;
85
114
  setStreamActivity(activity);
86
115
  setLoadingMessage(activity.message);
116
+ streamDebugActivity('orchestrator', 'applyStreamActivity', activity, {
117
+ preservedSteps: executionStepsRef.current.length
118
+ });
87
119
  }, []);
120
+ var applyStreamActivityPreservingSteps = useCallback(function (activity) {
121
+ var steps = executionStepsRef.current;
122
+ if (steps.length > 0) {
123
+ applyStreamActivity(mergeActivityWithExecutionSteps(activity, steps));
124
+ return;
125
+ }
126
+ applyStreamActivity(activity);
127
+ }, [applyStreamActivity]);
128
+ var resetStreamExecutionTrace = useCallback(function () {
129
+ executionStepsRef.current = [];
130
+ resetExecutionStepCounter();
131
+ }, []);
132
+
133
+ /** Marca el rastro como completado y lo mantiene visible (no limpia hasta el próximo turno). */
134
+ var finalizeStreamExecutionTrace = useCallback(function () {
135
+ var _activeStep$message;
136
+ var completedSteps = completeAllExecutionSteps(executionStepsRef.current);
137
+ executionStepsRef.current = completedSteps;
138
+ if (completedSteps.length === 0) {
139
+ clearStreamLoadingState();
140
+ return;
141
+ }
142
+ var activeStep = getActiveExecutionStep(completedSteps);
143
+ var activity = mergeActivityWithExecutionSteps({
144
+ phase: 'writing',
145
+ message: (_activeStep$message = activeStep === null || activeStep === void 0 ? void 0 : activeStep.message) !== null && _activeStep$message !== void 0 ? _activeStep$message : getWritingStreamActivity(t).message
146
+ }, completedSteps);
147
+ streamActivityRef.current = activity;
148
+ setStreamActivity(activity);
149
+ setLoadingMessage(null);
150
+ }, [clearStreamLoadingState, t]);
151
+ var handleStreamNodeEvent = useCallback(function (payload, accumulatedText) {
152
+ if (payload.node === 'agent_transfer') {
153
+ streamDebugNode('orchestrator', payload, {
154
+ skipped: 'agent_transfer'
155
+ });
156
+ setLoading(true);
157
+ return;
158
+ }
159
+ if (!payload.message || typeof payload.message !== 'string') {
160
+ streamDebugNode('orchestrator', payload, {
161
+ skipped: 'missing_message'
162
+ });
163
+ return;
164
+ }
165
+ setLoading(true);
166
+ var threadId = typeof payload.thread_id === 'string' ? payload.thread_id : undefined;
167
+ var hitlContext = hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current;
168
+ streamDebugNode('orchestrator', payload, {
169
+ threadId: threadId,
170
+ hitlContext: hitlContext ? summarizeHitlContext(hitlContext) : null
171
+ });
172
+ var timelineNext = appendNodeToStreamTimeline(streamTimelineStore.getSnapshot(), payload, accumulatedText !== null && accumulatedText !== void 0 ? accumulatedText : accumulatedContentRef.current, t, hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current, threadId);
173
+ streamTimelineStore.replace(timelineNext);
174
+ var lastExecution = _toConsumableArray(timelineNext.segments).reverse().find(function (segment) {
175
+ return segment.type === 'execution';
176
+ });
177
+ if ((lastExecution === null || lastExecution === void 0 ? void 0 : lastExecution.type) === 'execution') {
178
+ executionStepsRef.current = lastExecution.steps;
179
+ var activity = resolveHitlNodeStreamActivity(payload.message, t, hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current, threadId, payload.node === 'resuming' ? {
180
+ useResumingFallback: true
181
+ } : undefined);
182
+ applyStreamActivity(mergeActivityWithExecutionSteps(activity, lastExecution.steps));
183
+ streamDebugActivity('orchestrator', 'node:activity', activity, {
184
+ executionStepCount: lastExecution.steps.length
185
+ });
186
+ streamDebugLogHitlUiOverlap({
187
+ scope: 'orchestrator',
188
+ source: 'node',
189
+ nodePayload: payload,
190
+ activityMessage: activity.message,
191
+ hitlContext: hitlContext,
192
+ uiSurfaces: ['streamActivity', 'streamTimeline']
193
+ });
194
+ }
195
+ }, [applyStreamActivity, hitlExecutionContextRef, t]);
196
+ var handleStreamWritingStarted = useCallback(function () {
197
+ setIsWriting(true);
198
+ syncStreamTimelineContent(accumulatedContentRef.current);
199
+ applyStreamActivityPreservingSteps(getWritingStreamActivity(t));
200
+ }, [applyStreamActivityPreservingSteps, syncStreamTimelineContent, t]);
88
201
  useEffect(function () {
89
202
  streamActivityRef.current = streamActivity;
90
203
  }, [streamActivity]);
@@ -96,6 +209,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
96
209
  return undefined;
97
210
  }
98
211
  var intervalId = window.setInterval(function () {
212
+ var _prev$executionSteps;
99
213
  var prev = streamActivityRef.current;
100
214
  if (!prev || !canRotateStreamActivityPhase(prev.phase)) {
101
215
  return;
@@ -108,9 +222,12 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
108
222
  return;
109
223
  }
110
224
  activityMessageIndexRef.current = advanced.nextIndex;
111
- streamActivityRef.current = advanced.activity;
112
- setStreamActivity(advanced.activity);
113
- setLoadingMessage(advanced.activity.message);
225
+ var mergedActivity = _objectSpread(_objectSpread({}, advanced.activity), (_prev$executionSteps = prev.executionSteps) !== null && _prev$executionSteps !== void 0 && _prev$executionSteps.length ? {
226
+ executionSteps: prev.executionSteps
227
+ } : {});
228
+ streamActivityRef.current = mergedActivity;
229
+ setStreamActivity(mergedActivity);
230
+ setLoadingMessage(mergedActivity.message);
114
231
  }, ACTIVITY_MESSAGE_ROTATE_MS);
115
232
  return function () {
116
233
  return window.clearInterval(intervalId);
@@ -119,7 +236,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
119
236
  var handleSSEStream = useCallback(/*#__PURE__*/function () {
120
237
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response) {
121
238
  var _onErrorRef$current, _data$error, _data$error2;
122
- var pendingContent, throttleTimer, streamSettled, emitThrottled, flushPending, _response$body, reader, decoder, buffer, accumulatedContent, hasStartedWriting, ensureWritingStarted, applyStreamChunk, applyStreamComplete, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, _data, chunk, _chunk, _onApprovalRequiredRe, isManualApproval, _onErrorRef$current2, _t, _t2, _t3, _t4;
239
+ var pendingContent, throttleTimer, streamSettled, emitThrottled, flushPending, _response$body, reader, decoder, buffer, accumulatedContent, hasStartedWriting, ensureWritingStarted, applyStreamChunk, applyStreamComplete, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, _data, chunk, _chunk, _onApprovalRequiredRe, isManualApproval, manualActivity, _onErrorRef$current2, _t, _t2, _t3, _t4;
123
240
  return _regeneratorRuntime.wrap(function (_context) {
124
241
  while (1) switch (_context.prev = _context.next) {
125
242
  case 0:
@@ -176,13 +293,18 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
176
293
  var _onStartWritingRef$cu;
177
294
  if (hasStartedWriting) return;
178
295
  hasStartedWriting = true;
296
+ streamDebugSse('askMaia', 'writing:started', {
297
+ accumulatedLength: accumulatedContent.length
298
+ });
179
299
  setIsWriting(true);
180
- applyStreamActivity(getWritingStreamActivity(t));
300
+ handleStreamWritingStarted();
181
301
  (_onStartWritingRef$cu = onStartWritingRef.current) === null || _onStartWritingRef$cu === void 0 || _onStartWritingRef$cu.call(onStartWritingRef);
182
302
  };
183
303
  applyStreamChunk = function applyStreamChunk(chunk) {
184
304
  if (!chunk) return;
185
305
  accumulatedContent = mergeStreamChunk(accumulatedContent, chunk);
306
+ accumulatedContentRef.current = accumulatedContent;
307
+ syncStreamTimelineContent(accumulatedContent);
186
308
  emitThrottled(accumulatedContent);
187
309
  };
188
310
  applyStreamComplete = function applyStreamComplete(payload) {
@@ -190,6 +312,13 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
190
312
  if (streamSettled) return;
191
313
  streamSettled = true;
192
314
  var finalContent = payload.content || accumulatedContent;
315
+ streamDebugSse('askMaia', 'complete', {
316
+ finalContentLength: finalContent.length,
317
+ timeline: summarizeTimelineSnapshot(streamTimelineStore.getSnapshot())
318
+ });
319
+ accumulatedContentRef.current = finalContent;
320
+ syncStreamTimelineContent(finalContent);
321
+ streamTimelineStore.replace(finalizeStreamTimeline(streamTimelineStore.getSnapshot()));
193
322
  var sources = payload.sources || null;
194
323
  var memorySessionId = payload.memory_session_id || '';
195
324
  var attachments = Array.isArray(payload.attachments) ? payload.attachments : null;
@@ -207,7 +336,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
207
336
  setData(finalContent);
208
337
  setLoading(false);
209
338
  setIsWriting(false);
210
- clearStreamLoadingState();
339
+ setStreamActivity(null);
340
+ setLoadingMessage(null);
211
341
  (_onFinishStreamRef$cu = onFinishStreamRef.current) === null || _onFinishStreamRef$cu === void 0 || _onFinishStreamRef$cu.call(onFinishStreamRef, finalContent, sources, memorySessionId, attachments, suggestions, completedAgentId, resolvedContext);
212
342
  };
213
343
  case 3:
@@ -278,13 +408,26 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
278
408
  }
279
409
  return _context.abrupt("continue", 24);
280
410
  case 13:
411
+ streamDebugSse('askMaia', eventType, _objectSpread(_objectSpread({
412
+ hasStartedWriting: hasStartedWriting,
413
+ accumulatedLength: accumulatedContent.length
414
+ }, eventType === 'node' ? {
415
+ node: _data.node,
416
+ tool_name: _data.tool_name,
417
+ messagePreview: typeof _data.message === 'string' ? _data.message.slice(0, 80) : undefined
418
+ } : {}), eventType === 'approval_required' ? {
419
+ manualApprovalDetected: _data.manual_approval_detected === true,
420
+ pendingTools: Array.isArray(_data.pending_actions) ? _data.pending_actions.map(function (a) {
421
+ return a.tool_name;
422
+ }) : undefined
423
+ } : {}));
281
424
  _t = eventType;
282
425
  _context.next = _t === 'thinking' ? 14 : _t === 'token' ? 15 : _t === 'content' ? 16 : _t === 'node' ? 17 : _t === 'complete' ? 18 : _t === 'approval_required' ? 19 : _t === 'error' ? 20 : 21;
283
426
  break;
284
427
  case 14:
285
428
  if (!hasStartedWriting) {
286
429
  setLoading(true);
287
- applyStreamActivity({
430
+ applyStreamActivityPreservingSteps({
288
431
  phase: 'thinking',
289
432
  message: getThinkingLoadingMessage(0, t)
290
433
  });
@@ -304,15 +447,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
304
447
  }
305
448
  return _context.abrupt("continue", 22);
306
449
  case 17:
307
- // El orchestrator delegó a un subagente: NO lo exponemos. Mantenemos
308
- // el indicador de actividad genérico de MAIA, sin anunciar la
309
- // transferencia ni el nombre del subagente.
310
- if (_data.node === 'agent_transfer') {
311
- setLoading(true);
312
- } else if (_data.message && typeof _data.message === 'string') {
313
- setLoading(true);
314
- applyStreamActivity(resolveHitlNodeStreamActivity(_data.message, t, hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current, typeof _data.thread_id === 'string' ? _data.thread_id : undefined));
315
- }
450
+ handleStreamNodeEvent(_data);
316
451
  return _context.abrupt("continue", 22);
317
452
  case 18:
318
453
  applyStreamComplete(_data);
@@ -324,6 +459,10 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
324
459
  flushPending();
325
460
  setIsWriting(false);
326
461
  isManualApproval = _data.manual_approval_detected === true;
462
+ streamDebugApproval('orchestrator', 'approval_required', _data, {
463
+ isManualApproval: isManualApproval,
464
+ willClearLoadingState: !isManualApproval
465
+ });
327
466
  if (!isManualApproval) {
328
467
  streamSettled = true;
329
468
  setLoading(false);
@@ -332,7 +471,15 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
332
471
  (_onApprovalRequiredRe = onApprovalRequiredRef.current) === null || _onApprovalRequiredRe === void 0 || _onApprovalRequiredRe.call(onApprovalRequiredRef, _data, accumulatedContent);
333
472
  if (isManualApproval && Array.isArray(_data.pending_actions) && _data.pending_actions.length > 0) {
334
473
  setLoading(true);
335
- applyStreamActivity(resolveInitialHitlStreamActivity(t, hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current));
474
+ manualActivity = resolveInitialHitlStreamActivity(t, hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current);
475
+ applyStreamActivity(manualActivity);
476
+ streamDebugLogHitlUiOverlap({
477
+ scope: 'orchestrator',
478
+ source: 'initialActivity',
479
+ activityMessage: manualActivity.message,
480
+ hitlContext: hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current,
481
+ uiSurfaces: ['streamActivity', 'approvalBox']
482
+ });
336
483
  }
337
484
  return _context.abrupt("continue", 22);
338
485
  case 20:
@@ -403,7 +550,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
403
550
  return function (_x) {
404
551
  return _ref2.apply(this, arguments);
405
552
  };
406
- }(), [applyStreamActivity, clearStreamLoadingState, hitlExecutionContextRef, t]);
553
+ }(), [applyStreamActivityPreservingSteps, clearStreamLoadingState, handleStreamNodeEvent, handleStreamWritingStarted, syncStreamTimelineContent, t]);
407
554
  var askMaia = /*#__PURE__*/function () {
408
555
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref3) {
409
556
  var message, history, projectId, lang, userId, firstName, lastName, companyId, chatId, messageId, clientId, clientName, feeId, agentName, agentId, isWebSearchActive, isDeepSearchActive, attachments, projectName, taskId, taskName, faqId, agentSuggestionId, fuaId, scId, agentEntity, agentType, contextMessage, contextData, _attachments$length, _abortControllerRef$c, initialActivity, response, _onErrorRef$current3, _t5;
@@ -416,6 +563,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
416
563
  setIsWriting(false);
417
564
  setData(null);
418
565
  activityMessageIndexRef.current = 0;
566
+ clearStreamLoadingState();
567
+ beginStreamTimelineTurn(messageId);
419
568
  initialActivity = getInitialStreamActivity(t, {
420
569
  isWebSearchActive: isWebSearchActive,
421
570
  isDeepSearchActive: isDeepSearchActive,
@@ -425,6 +574,10 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
425
574
  applyStreamActivity(initialActivity);
426
575
  isStoppedRef.current = false; // Resetear flag al iniciar nueva petición
427
576
 
577
+ streamDebugLog('orchestrator', 'askMaia:start', {
578
+ messageId: messageId,
579
+ chatId: chatId
580
+ });
428
581
  abortControllerRef.current = new AbortController();
429
582
  _context2.next = 2;
430
583
  return maia.Orchestrator.orchestrator(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
@@ -570,7 +723,14 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
570
723
  reset: reset,
571
724
  stopStreaming: stopStreaming,
572
725
  abortStreamSilently: abortStreamSilently,
573
- handleSSEStream: handleSSEStream // Exponer para poder usarlo en continue-thread
726
+ handleSSEStream: handleSSEStream,
727
+ // Exponer para poder usarlo en continue-thread
728
+ handleStreamNodeEvent: handleStreamNodeEvent,
729
+ handleStreamWritingStarted: handleStreamWritingStarted,
730
+ beginStreamTimelineTurn: beginStreamTimelineTurn,
731
+ syncStreamTimelineContent: syncStreamTimelineContent,
732
+ finalizeStreamExecutionTrace: finalizeStreamExecutionTrace,
733
+ resetStreamExecutionTrace: resetStreamExecutionTrace
574
734
  };
575
735
  };
576
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJBQ1RJVklUWV9NRVNTQUdFX1JPVEFURV9NUyIsImFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UiLCJjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlIiwiY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZSIsImdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSIsImdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UiLCJnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInVzZU9yY2hlc3RyYXRvclN0cmVhbSIsIl9yZWYiLCJvblN0cmVhbVVwZGF0ZSIsIm9uRmluaXNoU3RyZWFtIiwib25TdGFydFdyaXRpbmciLCJvblN0b3AiLCJvbkVycm9yIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJ0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZGF0YSIsInNldERhdGEiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzTG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzV3JpdGluZyIsInNldElzV3JpdGluZyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwibG9hZGluZ01lc3NhZ2UiLCJzZXRMb2FkaW5nTWVzc2FnZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic3RyZWFtQWN0aXZpdHkiLCJzZXRTdHJlYW1BY3Rpdml0eSIsImFib3J0Q29udHJvbGxlclJlZiIsImlzU3RvcHBlZFJlZiIsImFjdGl2aXR5TWVzc2FnZUluZGV4UmVmIiwic3RyZWFtQWN0aXZpdHlSZWYiLCJvblN0cmVhbVVwZGF0ZVJlZiIsIm9uRmluaXNoU3RyZWFtUmVmIiwib25TdGFydFdyaXRpbmdSZWYiLCJvblN0b3BSZWYiLCJvbkVycm9yUmVmIiwib25BcHByb3ZhbFJlcXVpcmVkUmVmIiwiY3VycmVudCIsImNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlIiwiYXBwbHlTdHJlYW1BY3Rpdml0eSIsImFjdGl2aXR5IiwicHJldiIsInBoYXNlIiwibWVzc2FnZSIsInVuZGVmaW5lZCIsImludGVydmFsSWQiLCJ3aW5kb3ciLCJzZXRJbnRlcnZhbCIsImFkdmFuY2VkIiwibmV4dEluZGV4IiwiY2xlYXJJbnRlcnZhbCIsImhhbmRsZVNTRVN0cmVhbSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJyZXNwb25zZSIsIl9vbkVycm9yUmVmJGN1cnJlbnQiLCJfZGF0YSRlcnJvciIsIl9kYXRhJGVycm9yMiIsInBlbmRpbmdDb250ZW50IiwidGhyb3R0bGVUaW1lciIsInN0cmVhbVNldHRsZWQiLCJlbWl0VGhyb3R0bGVkIiwiZmx1c2hQZW5kaW5nIiwiX3Jlc3BvbnNlJGJvZHkiLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaGFzU3RhcnRlZFdyaXRpbmciLCJlbnN1cmVXcml0aW5nU3RhcnRlZCIsImFwcGx5U3RyZWFtQ2h1bmsiLCJhcHBseVN0cmVhbUNvbXBsZXRlIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpbmUiLCJfbGluZSRzcGxpdCIsIl9saW5lJHNwbGl0MiIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwiZGF0YVN0ciIsIl9kYXRhIiwiY2h1bmsiLCJfY2h1bmsiLCJfb25BcHByb3ZhbFJlcXVpcmVkUmUiLCJpc01hbnVhbEFwcHJvdmFsIiwiX29uRXJyb3JSZWYkY3VycmVudDIiLCJfdCIsIl90MiIsIl90MyIsIl90NCIsIndyYXAiLCJfY29udGV4dCIsIm5leHQiLCJjb250ZW50Iiwic2V0VGltZW91dCIsIl9vblN0cmVhbVVwZGF0ZVJlZiRjdSIsInRvRW1pdCIsImNhbGwiLCJjbGVhclRpbWVvdXQiLCJfb25TdHJlYW1VcGRhdGVSZWYkY3UyIiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfb25TdGFydFdyaXRpbmdSZWYkY3UiLCJwYXlsb2FkIiwiX3BheWxvYWQkYWdlbnRfaWQiLCJfc3ViYWdlbnRSYXckcmVzb2x2ZWQiLCJfb25GaW5pc2hTdHJlYW1SZWYkY3UiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsInN1Z2dlc3Rpb25zIiwic3VnZ2VzdF9yZXBseSIsImFnZW50SWRSYXciLCJhZ2VudF9pZCIsImFnZW50SWQiLCJjb21wbGV0ZWRBZ2VudElkIiwiU3RyaW5nIiwidHJpbSIsInN1YmFnZW50UmF3Iiwic3ViYWdlbnQiLCJyZXNvbHZlZENvbnRleHQiLCJyZXNvbHZlZF9jb250ZXh0IiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJzcGxpdCIsInBvcCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJyZXBsYWNlIiwiSlNPTiIsInBhcnNlIiwibm9kZSIsInRocmVhZF9pZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsInBlbmRpbmdfYWN0aW9ucyIsImxlbmd0aCIsImNvbnNvbGUiLCJlcnJvciIsInR5cGUiLCJ3YXJuIiwiZSIsImYiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImFza01haWEiLCJfcmVmNCIsIl9jYWxsZWUyIiwiX3JlZjMiLCJoaXN0b3J5IiwicHJvamVjdElkIiwibGFuZyIsInVzZXJJZCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY2hhdElkIiwibWVzc2FnZUlkIiwiY2xpZW50SWQiLCJjbGllbnROYW1lIiwiZmVlSWQiLCJhZ2VudE5hbWUiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsInByb2plY3ROYW1lIiwidGFza0lkIiwidGFza05hbWUiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiZnVhSWQiLCJzY0lkIiwiYWdlbnRFbnRpdHkiLCJhZ2VudFR5cGUiLCJjb250ZXh0TWVzc2FnZSIsImNvbnRleHREYXRhIiwiX2F0dGFjaG1lbnRzJGxlbmd0aCIsIl9hYm9ydENvbnRyb2xsZXJSZWYkYyIsImluaXRpYWxBY3Rpdml0eSIsIl9vbkVycm9yUmVmJGN1cnJlbnQzIiwiX3Q1IiwiX2NvbnRleHQyIiwiaGFzQXR0YWNobWVudHMiLCJCb29sZWFuIiwiYXR0YWNobWVudHNDb3VudCIsIkFib3J0Q29udHJvbGxlciIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsIl9vYmplY3RTcHJlYWQiLCJpbnB1dCIsInNpZ25hbCIsIl94MiIsInN0b3BTdHJlYW1pbmciLCJfb25TdG9wUmVmJGN1cnJlbnQiLCJhYm9ydCIsImFib3J0U3RyZWFtU2lsZW50bHkiLCJ1cGRhdGVTdHJlYW1BY3Rpdml0eSIsInJlc2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZU9yY2hlc3RyYXRvclN0cmVhbS91c2VPcmNoZXN0cmF0b3JTdHJlYW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3RhbnQtY29uZGl0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBDaGF0SGlzdG9yeSB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBBZ2VudEVudGl0eSwgQWdlbnRUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBDb250ZXh0TWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgVXNlT3JjaGVzdHJhdG9yU3RyZWFtUHJvcHMsIFJlc29sdmVkQ29udGV4dCB9IGZyb20gJy4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtLmludGVyZmFjZSdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHkgfSBmcm9tICcuLi8uLi90eXBlcy9zdHJlYW1BY3Rpdml0eSdcbmltcG9ydCB7XG4gIEFDVElWSVRZX01FU1NBR0VfUk9UQVRFX01TLFxuICBhZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlLFxuICBjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlLFxuICBjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlLFxuICBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHksXG4gIGdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UsXG4gIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5LFxufSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkLCBtZXJnZVN0cmVhbUNodW5rIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3NlU3RyZWFtQ29udGVudCdcblxudHlwZSBTdWJhZ2VudFJhdyA9IHsgbmFtZT86IHN0cmluZzsgcmVzb2x2ZWRfY29udGV4dD86IFJlc29sdmVkQ29udGV4dCB8IG51bGwgfSB8IG51bGwgfCB1bmRlZmluZWRcblxuZXhwb3J0IGNvbnN0IHVzZU9yY2hlc3RyYXRvclN0cmVhbSA9ICh7XG4gIG9uU3RyZWFtVXBkYXRlLFxuICBvbkZpbmlzaFN0cmVhbSxcbiAgb25TdGFydFdyaXRpbmcsXG4gIG9uU3RvcCxcbiAgb25FcnJvcixcbiAgb25BcHByb3ZhbFJlcXVpcmVkLFxuICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbn06IFVzZU9yY2hlc3RyYXRvclN0cmVhbVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmNoYXRBSV0pXG4gIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2xvYWRpbmdNZXNzYWdlLCBzZXRMb2FkaW5nTWVzc2FnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc3RyZWFtQWN0aXZpdHksIHNldFN0cmVhbUFjdGl2aXR5XSA9IHVzZVN0YXRlPFN0cmVhbUFjdGl2aXR5IHwgbnVsbD4obnVsbClcbiAgY29uc3QgYWJvcnRDb250cm9sbGVyUmVmID0gdXNlUmVmPEFib3J0Q29udHJvbGxlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzU3RvcHBlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc3RyZWFtQWN0aXZpdHlSZWYgPSB1c2VSZWY8U3RyZWFtQWN0aXZpdHkgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IG9uU3RyZWFtVXBkYXRlUmVmID0gdXNlUmVmKG9uU3RyZWFtVXBkYXRlKVxuICBjb25zdCBvbkZpbmlzaFN0cmVhbVJlZiA9IHVzZVJlZihvbkZpbmlzaFN0cmVhbSlcbiAgY29uc3Qgb25TdGFydFdyaXRpbmdSZWYgPSB1c2VSZWYob25TdGFydFdyaXRpbmcpXG4gIGNvbnN0IG9uU3RvcFJlZiA9IHVzZVJlZihvblN0b3ApXG4gIGNvbnN0IG9uRXJyb3JSZWYgPSB1c2VSZWYob25FcnJvcilcbiAgY29uc3Qgb25BcHByb3ZhbFJlcXVpcmVkUmVmID0gdXNlUmVmKG9uQXBwcm92YWxSZXF1aXJlZClcblxuICBvblN0cmVhbVVwZGF0ZVJlZi5jdXJyZW50ID0gb25TdHJlYW1VcGRhdGVcbiAgb25GaW5pc2hTdHJlYW1SZWYuY3VycmVudCA9IG9uRmluaXNoU3RyZWFtXG4gIG9uU3RhcnRXcml0aW5nUmVmLmN1cnJlbnQgPSBvblN0YXJ0V3JpdGluZ1xuICBvblN0b3BSZWYuY3VycmVudCA9IG9uU3RvcFxuICBvbkVycm9yUmVmLmN1cnJlbnQgPSBvbkVycm9yXG4gIG9uQXBwcm92YWxSZXF1aXJlZFJlZi5jdXJyZW50ID0gb25BcHByb3ZhbFJlcXVpcmVkXG5cbiAgY29uc3QgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCA9IDBcbiAgICBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNldFN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgfSwgW10pXG5cbiAgY29uc3QgYXBwbHlTdHJlYW1BY3Rpdml0eSA9IHVzZUNhbGxiYWNrKChhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkpID0+IHtcbiAgICBjb25zdCBwcmV2ID0gc3RyZWFtQWN0aXZpdHlSZWYuY3VycmVudFxuICAgIGlmIChwcmV2Py5waGFzZSA9PT0gYWN0aXZpdHkucGhhc2UgJiYgY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZShhY3Rpdml0eS5waGFzZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocHJldj8ucGhhc2UgIT09IGFjdGl2aXR5LnBoYXNlKSB7XG4gICAgICBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50ID0gMFxuICAgIH1cbiAgICBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50ID0gYWN0aXZpdHlcbiAgICBzZXRTdHJlYW1BY3Rpdml0eShhY3Rpdml0eSlcbiAgICBzZXRMb2FkaW5nTWVzc2FnZShhY3Rpdml0eS5tZXNzYWdlKVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHN0cmVhbUFjdGl2aXR5UmVmLmN1cnJlbnQgPSBzdHJlYW1BY3Rpdml0eVxuICB9LCBbc3RyZWFtQWN0aXZpdHldKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0xvYWRpbmcgfHwgaXNXcml0aW5nIHx8ICFzdHJlYW1BY3Rpdml0eSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBpZiAoIWNhblJvdGF0ZVN0cmVhbUFjdGl2aXR5UGhhc2Uoc3RyZWFtQWN0aXZpdHkucGhhc2UpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBwcmV2ID0gc3RyZWFtQWN0aXZpdHlSZWYuY3VycmVudFxuICAgICAgaWYgKCFwcmV2IHx8ICFjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlKHByZXYucGhhc2UpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKCFjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlKHByZXYucGhhc2UsIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgYWR2YW5jZWQgPSBhZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlKHByZXYsIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQsIHQpXG4gICAgICBpZiAoIWFkdmFuY2VkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCA9IGFkdmFuY2VkLm5leHRJbmRleFxuICAgICAgc3RyZWFtQWN0aXZpdHlSZWYuY3VycmVudCA9IGFkdmFuY2VkLmFjdGl2aXR5XG4gICAgICBzZXRTdHJlYW1BY3Rpdml0eShhZHZhbmNlZC5hY3Rpdml0eSlcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlKGFkdmFuY2VkLmFjdGl2aXR5Lm1lc3NhZ2UpXG4gICAgfSwgQUNUSVZJVFlfTUVTU0FHRV9ST1RBVEVfTVMpXG5cbiAgICByZXR1cm4gKCkgPT4gd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZClcbiAgfSwgW2lzTG9hZGluZywgaXNXcml0aW5nLCBzdHJlYW1BY3Rpdml0eT8ucGhhc2UsIHRdKVxuXG4gIGNvbnN0IGhhbmRsZVNTRVN0cmVhbSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIFRpbWUtdGhyb3R0bGU6IGV2aXRhIGVtaXRpciBvblN0cmVhbVVwZGF0ZSBtw6FzIGRlIHVuYSB2ZXogY2FkYSB+MTZtcy5cbiAgICAgIC8vIFVzYW1vcyB0aW1lciBwYXJhIHF1ZSBlbCBzdHJlYW0gc2lnYSBwaW50YW5kbyBhdW5xdWUgckFGIGVzdMOpIHRocm90dGxlYWRvLlxuICAgICAgLy8gTm90YTogbm8gdG9jYW1vcyBlbCBzdGF0ZSBgZGF0YWAgZW4gZWwgaG90IHBhdGggKHNvbG8gc2UgYWN0dWFsaXphIGVuXG4gICAgICAvLyBgY29tcGxldGVgL3Jlc2V0cykgcGFyYSBubyByZS1yZW5kZXJpemFyIGEgbG9zIGNvbnN1bWlkb3JlcyBkZWwgaG9va1xuICAgICAgLy8gZW4gY2FkYSBmcmFtZTsgZWwgdGV4dG8gZW4gdml2byB2aWFqYSBwb3IgZWwgc3RyZWFtaW5nU3RvcmUuXG4gICAgICBsZXQgcGVuZGluZ0NvbnRlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgICBsZXQgdGhyb3R0bGVUaW1lcjogbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJlYW1TZXR0bGVkID0gZmFsc2VcbiAgICAgIGNvbnN0IGVtaXRUaHJvdHRsZWQgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHBlbmRpbmdDb250ZW50ID0gY29udGVudFxuICAgICAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSByZXR1cm5cbiAgICAgICAgdGhyb3R0bGVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgICAgICAgIGlmIChzdHJlYW1TZXR0bGVkKSB7XG4gICAgICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgICAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgICAgICAgb25TdHJlYW1VcGRhdGVSZWYuY3VycmVudD8uKHRvRW1pdCwgbnVsbCwgJycpXG4gICAgICAgICAgfVxuICAgICAgICB9LCAxNilcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmx1c2hQZW5kaW5nID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSB7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aHJvdHRsZVRpbWVyKVxuICAgICAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgICAgIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQ/Lih0b0VtaXQsIG51bGwsICcnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gICAgICAgIGlmICghcmVhZGVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICAgICAgICBsZXQgYnVmZmVyID0gJydcbiAgICAgICAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gICAgICAgIGxldCBoYXNTdGFydGVkV3JpdGluZyA9IGZhbHNlXG5cbiAgICAgICAgY29uc3QgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGhhc1N0YXJ0ZWRXcml0aW5nKSByZXR1cm5cbiAgICAgICAgICBoYXNTdGFydGVkV3JpdGluZyA9IHRydWVcbiAgICAgICAgICBzZXRJc1dyaXRpbmcodHJ1ZSlcbiAgICAgICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSh0KSlcbiAgICAgICAgICBvblN0YXJ0V3JpdGluZ1JlZi5jdXJyZW50Py4oKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwbHlTdHJlYW1DaHVuayA9IChjaHVuazogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKCFjaHVuaykgcmV0dXJuXG4gICAgICAgICAgYWNjdW11bGF0ZWRDb250ZW50ID0gbWVyZ2VTdHJlYW1DaHVuayhhY2N1bXVsYXRlZENvbnRlbnQsIGNodW5rKVxuICAgICAgICAgIGVtaXRUaHJvdHRsZWQoYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXBwbHlTdHJlYW1Db21wbGV0ZSA9IChwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgICAgIGlmIChzdHJlYW1TZXR0bGVkKSByZXR1cm5cbiAgICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuXG4gICAgICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gKHBheWxvYWQuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgICAgIGNvbnN0IHNvdXJjZXMgPSBwYXlsb2FkLnNvdXJjZXMgfHwgbnVsbFxuICAgICAgICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IChwYXlsb2FkLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdHRhY2htZW50cykgPyBwYXlsb2FkLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgICAgICAgIGxldCBzdWdnZXN0aW9uczogc3RyaW5nW10gfCBudWxsID0gbnVsbFxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuc3VnZ2VzdF9yZXBseSkpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gcGF5bG9hZC5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdXG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuc3VnZ2VzdGlvbnMpKSB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHBheWxvYWQuc3VnZ2VzdGlvbnMgYXMgc3RyaW5nW11cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYWdlbnRJZFJhdyA9IHBheWxvYWQuYWdlbnRfaWQgPz8gcGF5bG9hZC5hZ2VudElkXG4gICAgICAgICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9XG4gICAgICAgICAgICBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgICAgIGNvbnN0IHN1YmFnZW50UmF3ID0gcGF5bG9hZC5zdWJhZ2VudCBhcyBTdWJhZ2VudFJhd1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkQ29udGV4dCA9IHN1YmFnZW50UmF3Py5yZXNvbHZlZF9jb250ZXh0ID8/IG51bGxcbiAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgIHNldERhdGEoZmluYWxDb250ZW50KVxuICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50Py4oXG4gICAgICAgICAgICBmaW5hbENvbnRlbnQsXG4gICAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgIGNvbXBsZXRlZEFnZW50SWQsXG4gICAgICAgICAgICByZXNvbHZlZENvbnRleHRcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGlmIChpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgICAgICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgICAgaWYgKGxpbmUudHJpbSgpID09PSAnJykgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgW2V2ZW50TGluZSwgZGF0YUxpbmVdID0gbGluZS5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gICAgICAgICAgICBjb25zdCBkYXRhU3RyID0gZGF0YUxpbmUucmVwbGFjZSgnZGF0YTogJywgJycpLnRyaW0oKVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuXG4gICAgICAgICAgICAgIGlmIChzdHJlYW1TZXR0bGVkICYmIGV2ZW50VHlwZSAhPT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3RoaW5raW5nJzpcbiAgICAgICAgICAgICAgICAgIGlmICghaGFzU3RhcnRlZFdyaXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KHtcbiAgICAgICAgICAgICAgICAgICAgICBwaGFzZTogJ3RoaW5raW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlKDAsIHQpLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ3Rva2VuJzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGRhdGEuY29udGVudCA6ICcnXG4gICAgICAgICAgICAgICAgICBlbnN1cmVXcml0aW5nU3RhcnRlZCgpXG4gICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdjb250ZW50Jzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGRhdGEuY29udGVudCA6ICcnXG4gICAgICAgICAgICAgICAgICBlbnN1cmVXcml0aW5nU3RhcnRlZCgpXG4gICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZChkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICAgICAgLy8gRWwgb3JjaGVzdHJhdG9yIGRlbGVnw7MgYSB1biBzdWJhZ2VudGU6IE5PIGxvIGV4cG9uZW1vcy4gTWFudGVuZW1vc1xuICAgICAgICAgICAgICAgICAgLy8gZWwgaW5kaWNhZG9yIGRlIGFjdGl2aWRhZCBnZW7DqXJpY28gZGUgTUFJQSwgc2luIGFudW5jaWFyIGxhXG4gICAgICAgICAgICAgICAgICAvLyB0cmFuc2ZlcmVuY2lhIG5pIGVsIG5vbWJyZSBkZWwgc3ViYWdlbnRlLlxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubm9kZSA9PT0gJ2FnZW50X3RyYW5zZmVyJykge1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEubWVzc2FnZSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkoXG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHkoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWY/LmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZGF0YS50aHJlYWRfaWQgPT09ICdzdHJpbmcnID8gZGF0YS50aHJlYWRfaWQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOiB7XG4gICAgICAgICAgICAgICAgICAvLyBNYW51YWwgYXBwcm92YWw6IGVsIFNTRSBzaWd1ZSBjb24gbm9kZS90b2tlbi9jb21wbGV0ZSAoeSBwdWVkZVxuICAgICAgICAgICAgICAgICAgLy8gZW5jYWRlbmFyIG3DoXMgYXBwcm92YWxfcmVxdWlyZWQpLiBTb2xvIGVsIGFwcHJvdmFsIFwicGF1c2Fkb1wiXG4gICAgICAgICAgICAgICAgICAvLyAoYm90w7NuKSBlcyB0ZXJtaW5hbCBwYXJhIGVzdGUgc3RyZWFtLlxuICAgICAgICAgICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTWFudWFsQXBwcm92YWwgPSBkYXRhLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgaWYgKCFpc01hbnVhbEFwcHJvdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbVNldHRsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZFJlZi5jdXJyZW50Py4oZGF0YSwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICAgICAgaWYgKGlzTWFudWFsQXBwcm92YWwgJiYgQXJyYXkuaXNBcnJheShkYXRhLnBlbmRpbmdfYWN0aW9ucykgJiYgZGF0YS5wZW5kaW5nX2FjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkocmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkodCwgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWY/LmN1cnJlbnQpKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGRhdGEuZXJyb3IpXG4gICAgICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpIC8vIExpbXBpYXIgbWVuc2FqZSBjdWFuZG8gaGF5IGVycm9yXG4gICAgICAgICAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LihkYXRhLmVycm9yPy50eXBlLCBkYXRhLmVycm9yPy5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gU1NFIGV2ZW50IHR5cGU6JywgZXZlbnRUeXBlKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBvbkVycm9yIHNpIG5vIGZ1ZSB1biBzdG9wIGludGVuY2lvbmFsXG4gICAgICAgIGlmICghaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgIGlmICghc3RyZWFtU2V0dGxlZCkge1xuICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FwcGx5U3RyZWFtQWN0aXZpdHksIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlLCBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiwgdF1cbiAgKVxuXG4gIGNvbnN0IGFza01haWEgPSBhc3luYyAoe1xuICAgIG1lc3NhZ2UsXG4gICAgaGlzdG9yeSxcbiAgICBwcm9qZWN0SWQsXG4gICAgbGFuZyxcbiAgICB1c2VySWQsXG4gICAgZmlyc3ROYW1lLFxuICAgIGxhc3ROYW1lLFxuICAgIGNvbXBhbnlJZCxcbiAgICBjaGF0SWQsXG4gICAgbWVzc2FnZUlkLFxuICAgIGNsaWVudElkLFxuICAgIGNsaWVudE5hbWUsXG4gICAgZmVlSWQsXG4gICAgYWdlbnROYW1lLFxuICAgIGFnZW50SWQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIHByb2plY3ROYW1lLFxuICAgIHRhc2tJZCxcbiAgICB0YXNrTmFtZSxcbiAgICBmYXFJZCxcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZCxcbiAgICBmdWFJZCxcbiAgICBzY0lkLFxuICAgIGFnZW50RW50aXR5LFxuICAgIGFnZW50VHlwZSxcbiAgICBjb250ZXh0TWVzc2FnZSxcbiAgICBjb250ZXh0RGF0YSxcbiAgfToge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGhpc3Rvcnk6IENoYXRIaXN0b3J5W11cbiAgICBwcm9qZWN0SWQ6IG51bWJlciB8IG51bGxcbiAgICBsYW5nOiBzdHJpbmdcbiAgICB1c2VySWQ6IHN0cmluZ1xuICAgIGZpcnN0TmFtZT86IHN0cmluZ1xuICAgIGxhc3ROYW1lPzogc3RyaW5nXG4gICAgY29tcGFueUlkOiBzdHJpbmdcbiAgICBjaGF0SWQ6IHN0cmluZ1xuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgY2xpZW50SWQ/OiBudW1iZXJcbiAgICBjbGllbnROYW1lPzogc3RyaW5nXG4gICAgZmVlSWQ/OiBudW1iZXJcbiAgICBhZ2VudE5hbWU6IHN0cmluZ1xuICAgIGFnZW50SWQ6IHN0cmluZ1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICAgIHRhc2tJZD86IG51bWJlclxuICAgIHRhc2tOYW1lPzogc3RyaW5nXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGFnZW50RW50aXR5PzogQWdlbnRFbnRpdHlcbiAgICBhZ2VudFR5cGU/OiBBZ2VudFR5cGVcbiAgICBjb250ZXh0TWVzc2FnZT86IENvbnRleHRNZXNzYWdlXG4gICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHNldERhdGEobnVsbClcbiAgICAgIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQgPSAwXG4gICAgICBjb25zdCBpbml0aWFsQWN0aXZpdHkgPSBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkodCwge1xuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgICAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50cz8ubGVuZ3RoKSxcbiAgICAgICAgYXR0YWNobWVudHNDb3VudDogYXR0YWNobWVudHM/Lmxlbmd0aCA/PyAwLFxuICAgICAgfSlcbiAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkoaW5pdGlhbEFjdGl2aXR5KVxuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSBmYWxzZSAvLyBSZXNldGVhciBmbGFnIGFsIGluaWNpYXIgbnVldmEgcGV0aWNpw7NuXG5cbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3Iub3JjaGVzdHJhdG9yKFxuICAgICAgICB7XG4gICAgICAgICAgaW5wdXQ6IG1lc3NhZ2UsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAuLi4oZmlyc3ROYW1lID8geyBmaXJzdE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4obGFzdE5hbWUgPyB7IGxhc3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgY29tcGFueUlkLFxuICAgICAgICAgIGNoYXRJZCxcbiAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgY2xpZW50SWQsXG4gICAgICAgICAgLi4uKGZlZUlkICE9IG51bGwgPyB7IGZlZUlkIH0gOiB7fSksXG4gICAgICAgICAgYWdlbnROYW1lLFxuICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgICAgICAgIC4uLihwcm9qZWN0SWQgPyB7IHByb2plY3RJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ocHJvamVjdE5hbWUgPyB7IHByb2plY3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNsaWVudE5hbWUgPyB7IGNsaWVudE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4odGFza0lkICE9IG51bGwgPyB7IHRhc2tJZCB9IDoge30pLFxuICAgICAgICAgIC4uLih0YXNrTmFtZSA/IHsgdGFza05hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZmFxSWQgPyB7IGZhcUlkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAgIC4uLihmdWFJZCA/IHsgZnVhSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oc2NJZCA/IHsgc2NJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudEVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eSB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudFR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgICAgIC4uLihjb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQ/LnNpZ25hbFxuICAgICAgKVxuXG4gICAgICBhd2FpdCBoYW5kbGVTU0VTdHJlYW0ocmVzcG9uc2UpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFNpIGZ1ZSB1biBhYm9ydCBpbnRlbmNpb25hbCAoc3RvcCBtYW51YWwgbyBjYW1iaW8gZGUgY2hhdCksIG5vIGRpc3BhcmFyIG9uRXJyb3JcbiAgICAgIC8vIHBvcnF1ZSBlc28gaW5zZXJ0YSB1biBcIm1lbnNhamUgZGUgZXJyb3JcIiBlbiBlbCBjaGF0IGFsIHF1ZSBhY2FiYW1vcyBkZSBuYXZlZ2FyLlxuICAgICAgaWYgKCFpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICB9XG4gICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0b3BTdHJlYW1pbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSB7XG4gICAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgIG9uU3RvcFJlZi5jdXJyZW50Py4oKVxuICAgIH1cbiAgfSwgW2NsZWFyU3RyZWFtTG9hZGluZ1N0YXRlXSlcblxuICAvKipcbiAgICogQWJvcnRhIGVsIHN0cmVhbSBlbiBjdXJzbyAoc2kgZXhpc3RlKSBzaW4gZGlzcGFyYXIgYG9uU3RvcGAuXG4gICAqIMOac2VsbyBlbiBjYXNvcyBkb25kZSBubyBxdWVyZW1vcyBhZ3JlZ2FyIGVsIG1lbnNhamUgZGUgXCJjYW5jZWxhZG9cIlxuICAgKiAocG9yIGVqZW1wbG8sIGFsIGNhbWJpYXIgZGUgY2hhdCkuXG4gICAqL1xuICBjb25zdCBhYm9ydFN0cmVhbVNpbGVudGx5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCkge1xuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgfVxuICB9LCBbY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGVdKVxuXG4gIC8vIENsZWFudXAgYWwgZGVzbW9udGFyOiBzaSBxdWVkYSB1biBzdHJlYW0gYWN0aXZvLCBhYm9ydGFybG8gcGFyYSBldml0YXJcbiAgLy8gcXVlIGludGVudGUgYWN0dWFsaXphciBlc3RhZG8gZW4gdW4gY29tcG9uZW50ZSB5YSBkZXNtb250YWRvIChmdWdhcyBkZVxuICAvLyBtZW1vcmlhIHkgd2FybmluZ3MpLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQuYWJvcnQoKVxuICAgICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHVwZGF0ZVN0cmVhbUFjdGl2aXR5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSB8IG51bGwpID0+IHtcbiAgICAgIGlmICghYWN0aXZpdHkpIHtcbiAgICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkoYWN0aXZpdHkpXG4gICAgfSxcbiAgICBbYXBwbHlTdHJlYW1BY3Rpdml0eSwgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGVdXG4gIClcblxuICBjb25zdCByZXNldCA9ICgpID0+IHtcbiAgICBzZXREYXRhKG51bGwpXG4gICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXNrTWFpYSxcbiAgICByZXNwb25zZTogZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5LFxuICAgIHJlc2V0LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gICAgYWJvcnRTdHJlYW1TaWxlbnRseSxcbiAgICBoYW5kbGVTU0VTdHJlYW0sIC8vIEV4cG9uZXIgcGFyYSBwb2RlciB1c2FybG8gZW4gY29udGludWUtdGhyZWFkXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBRTlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFLdEMsU0FBU0MsUUFBUSxRQUFRLHdCQUF3QjtBQUVqRCxTQUNFQywwQkFBMEIsRUFDMUJDLDRCQUE0QixFQUM1QkMsK0JBQStCLEVBQy9CQyw0QkFBNEIsRUFDNUJDLHdCQUF3QixFQUN4QkMseUJBQXlCLEVBQ3pCQyx3QkFBd0IsRUFDeEJDLDZCQUE2QixFQUM3QkMsZ0NBQWdDLFFBQzNCLG9DQUFvQztBQUMzQyxTQUFTQyx3QkFBd0IsRUFBRUMsZ0JBQWdCLFFBQVEsOEJBQThCO0FBSXpGLE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBQUMsSUFBQSxFQVFBO0VBQUEsSUFQaENDLGNBQWMsR0FBQUQsSUFBQSxDQUFkQyxjQUFjO0lBQ2RDLGNBQWMsR0FBQUYsSUFBQSxDQUFkRSxjQUFjO0lBQ2RDLGNBQWMsR0FBQUgsSUFBQSxDQUFkRyxjQUFjO0lBQ2RDLE1BQU0sR0FBQUosSUFBQSxDQUFOSSxNQUFNO0lBQ05DLE9BQU8sR0FBQUwsSUFBQSxDQUFQSyxPQUFPO0lBQ1BDLGtCQUFrQixHQUFBTixJQUFBLENBQWxCTSxrQkFBa0I7SUFDbEJDLHVCQUF1QixHQUFBUCxJQUFBLENBQXZCTyx1QkFBdUI7RUFFdkIsSUFBQUMsZUFBQSxHQUFjdkIsY0FB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
736
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJBQ1RJVklUWV9NRVNTQUdFX1JPVEFURV9NUyIsImFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UiLCJjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlIiwiY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZSIsImdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSIsImdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UiLCJnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiY29tcGxldGVBbGxFeGVjdXRpb25TdGVwcyIsImdldEFjdGl2ZUV4ZWN1dGlvblN0ZXAiLCJtZXJnZUFjdGl2aXR5V2l0aEV4ZWN1dGlvblN0ZXBzIiwicmVzZXRFeGVjdXRpb25TdGVwQ291bnRlciIsImFwcGVuZENvbnRlbnRUb1N0cmVhbVRpbWVsaW5lIiwiYXBwZW5kTm9kZVRvU3RyZWFtVGltZWxpbmUiLCJmaW5hbGl6ZVN0cmVhbVRpbWVsaW5lIiwic3RhcnRTdHJlYW1UaW1lbGluZVR1cm4iLCJzdHJlYW1UaW1lbGluZVN0b3JlIiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInN0cmVhbURlYnVnQWN0aXZpdHkiLCJzdHJlYW1EZWJ1Z0FwcHJvdmFsIiwic3RyZWFtRGVidWdMb2ciLCJzdHJlYW1EZWJ1Z0xvZ0hpdGxVaU92ZXJsYXAiLCJzdHJlYW1EZWJ1Z05vZGUiLCJzdHJlYW1EZWJ1Z1NzZSIsInN1bW1hcml6ZUhpdGxDb250ZXh0Iiwic3VtbWFyaXplVGltZWxpbmVTbmFwc2hvdCIsInVzZU9yY2hlc3RyYXRvclN0cmVhbSIsIl9yZWYiLCJvblN0cmVhbVVwZGF0ZSIsIm9uRmluaXNoU3RyZWFtIiwib25TdGFydFdyaXRpbmciLCJvblN0b3AiLCJvbkVycm9yIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJ0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZGF0YSIsInNldERhdGEiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzTG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzV3JpdGluZyIsInNldElzV3JpdGluZyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwibG9hZGluZ01lc3NhZ2UiLCJzZXRMb2FkaW5nTWVzc2FnZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic3RyZWFtQWN0aXZpdHkiLCJzZXRTdHJlYW1BY3Rpdml0eSIsImFib3J0Q29udHJvbGxlclJlZiIsImlzU3RvcHBlZFJlZiIsImFjdGl2aXR5TWVzc2FnZUluZGV4UmVmIiwic3RyZWFtQWN0aXZpdHlSZWYiLCJleGVjdXRpb25TdGVwc1JlZiIsImFjY3VtdWxhdGVkQ29udGVudFJlZiIsIm9uU3RyZWFtVXBkYXRlUmVmIiwib25GaW5pc2hTdHJlYW1SZWYiLCJvblN0YXJ0V3JpdGluZ1JlZiIsIm9uU3RvcFJlZiIsIm9uRXJyb3JSZWYiLCJvbkFwcHJvdmFsUmVxdWlyZWRSZWYiLCJjdXJyZW50IiwiY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUiLCJwcmV2aW91c1R1cm5JZCIsImdldFNuYXBzaG90IiwidHVybklkIiwiZXhlY3V0aW9uU3RlcENvdW50IiwibGVuZ3RoIiwiY2xlYXIiLCJiZWdpblN0cmVhbVRpbWVsaW5lVHVybiIsInJlcGxhY2UiLCJzeW5jU3RyZWFtVGltZWxpbmVDb250ZW50IiwiYWNjdW11bGF0ZWRUZXh0IiwibmV4dCIsImFwcGx5U3RyZWFtQWN0aXZpdHkiLCJhY3Rpdml0eSIsInByZXYiLCJwaGFzZSIsIm1lc3NhZ2UiLCJwcmVzZXJ2ZWRTdGVwcyIsImFwcGx5U3RyZWFtQWN0aXZpdHlQcmVzZXJ2aW5nU3RlcHMiLCJzdGVwcyIsInJlc2V0U3RyZWFtRXhlY3V0aW9uVHJhY2UiLCJmaW5hbGl6ZVN0cmVhbUV4ZWN1dGlvblRyYWNlIiwiX2FjdGl2ZVN0ZXAkbWVzc2FnZSIsImNvbXBsZXRlZFN0ZXBzIiwiYWN0aXZlU3RlcCIsImhhbmRsZVN0cmVhbU5vZGVFdmVudCIsInBheWxvYWQiLCJub2RlIiwic2tpcHBlZCIsInRocmVhZElkIiwidGhyZWFkX2lkIiwidW5kZWZpbmVkIiwiaGl0bENvbnRleHQiLCJ0aW1lbGluZU5leHQiLCJsYXN0RXhlY3V0aW9uIiwiX3RvQ29uc3VtYWJsZUFycmF5Iiwic2VnbWVudHMiLCJyZXZlcnNlIiwiZmluZCIsInNlZ21lbnQiLCJ0eXBlIiwidXNlUmVzdW1pbmdGYWxsYmFjayIsInNjb3BlIiwic291cmNlIiwibm9kZVBheWxvYWQiLCJhY3Rpdml0eU1lc3NhZ2UiLCJ1aVN1cmZhY2VzIiwiaGFuZGxlU3RyZWFtV3JpdGluZ1N0YXJ0ZWQiLCJpbnRlcnZhbElkIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJfcHJldiRleGVjdXRpb25TdGVwcyIsImFkdmFuY2VkIiwibmV4dEluZGV4IiwibWVyZ2VkQWN0aXZpdHkiLCJfb2JqZWN0U3ByZWFkIiwiZXhlY3V0aW9uU3RlcHMiLCJjbGVhckludGVydmFsIiwiaGFuZGxlU1NFU3RyZWFtIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwiX29uRXJyb3JSZWYkY3VycmVudCIsIl9kYXRhJGVycm9yIiwiX2RhdGEkZXJyb3IyIiwicGVuZGluZ0NvbnRlbnQiLCJ0aHJvdHRsZVRpbWVyIiwic3RyZWFtU2V0dGxlZCIsImVtaXRUaHJvdHRsZWQiLCJmbHVzaFBlbmRpbmciLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJoYXNTdGFydGVkV3JpdGluZyIsImVuc3VyZVdyaXRpbmdTdGFydGVkIiwiYXBwbHlTdHJlYW1DaHVuayIsImFwcGx5U3RyZWFtQ29tcGxldGUiLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJsaW5lcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwibGluZSIsIl9saW5lJHNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiZXZlbnRMaW5lIiwiZGF0YUxpbmUiLCJldmVudFR5cGUiLCJkYXRhU3RyIiwiX2RhdGEiLCJjaHVuayIsIl9jaHVuayIsIl9vbkFwcHJvdmFsUmVxdWlyZWRSZSIsImlzTWFudWFsQXBwcm92YWwiLCJtYW51YWxBY3Rpdml0eSIsIl9vbkVycm9yUmVmJGN1cnJlbnQyIiwiX3QiLCJfdDIiLCJfdDMiLCJfdDQiLCJ3cmFwIiwiX2NvbnRleHQiLCJjb250ZW50Iiwic2V0VGltZW91dCIsIl9vblN0cmVhbVVwZGF0ZVJlZiRjdSIsInRvRW1pdCIsImNhbGwiLCJjbGVhclRpbWVvdXQiLCJfb25TdHJlYW1VcGRhdGVSZWYkY3UyIiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfb25TdGFydFdyaXRpbmdSZWYkY3UiLCJhY2N1bXVsYXRlZExlbmd0aCIsIl9wYXlsb2FkJGFnZW50X2lkIiwiX3N1YmFnZW50UmF3JHJlc29sdmVkIiwiX29uRmluaXNoU3RyZWFtUmVmJGN1IiwiZmluYWxDb250ZW50IiwiZmluYWxDb250ZW50TGVuZ3RoIiwidGltZWxpbmUiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsInN1Z2dlc3Rpb25zIiwic3VnZ2VzdF9yZXBseSIsImFnZW50SWRSYXciLCJhZ2VudF9pZCIsImFnZW50SWQiLCJjb21wbGV0ZWRBZ2VudElkIiwiU3RyaW5nIiwidHJpbSIsInN1YmFnZW50UmF3Iiwic3ViYWdlbnQiLCJyZXNvbHZlZENvbnRleHQiLCJyZXNvbHZlZF9jb250ZXh0IiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJzcGxpdCIsInBvcCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJKU09OIiwicGFyc2UiLCJ0b29sX25hbWUiLCJtZXNzYWdlUHJldmlldyIsInNsaWNlIiwibWFudWFsQXBwcm92YWxEZXRlY3RlZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsInBlbmRpbmdUb29scyIsInBlbmRpbmdfYWN0aW9ucyIsIm1hcCIsImEiLCJ3aWxsQ2xlYXJMb2FkaW5nU3RhdGUiLCJjb25zb2xlIiwiZXJyb3IiLCJ3YXJuIiwiZSIsImYiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImFza01haWEiLCJfcmVmNCIsIl9jYWxsZWUyIiwiX3JlZjMiLCJoaXN0b3J5IiwicHJvamVjdElkIiwibGFuZyIsInVzZXJJZCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY2hhdElkIiwibWVzc2FnZUlkIiwiY2xpZW50SWQiLCJjbGllbnROYW1lIiwiZmVlSWQiLCJhZ2VudE5hbWUiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsInByb2plY3ROYW1lIiwidGFza0lkIiwidGFza05hbWUiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiZnVhSWQiLCJzY0lkIiwiYWdlbnRFbnRpdHkiLCJhZ2VudFR5cGUiLCJjb250ZXh0TWVzc2FnZSIsImNvbnRleHREYXRhIiwiX2F0dGFjaG1lbnRzJGxlbmd0aCIsIl9hYm9ydENvbnRyb2xsZXJSZWYkYyIsImluaXRpYWxBY3Rpdml0eSIsIl9vbkVycm9yUmVmJGN1cnJlbnQzIiwiX3Q1IiwiX2NvbnRleHQyIiwiaGFzQXR0YWNobWVudHMiLCJCb29sZWFuIiwiYXR0YWNobWVudHNDb3VudCIsIkFib3J0Q29udHJvbGxlciIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsImlucHV0Iiwic2lnbmFsIiwiX3gyIiwic3RvcFN0cmVhbWluZyIsIl9vblN0b3BSZWYkY3VycmVudCIsImFib3J0IiwiYWJvcnRTdHJlYW1TaWxlbnRseSIsInVwZGF0ZVN0cmVhbUFjdGl2aXR5IiwicmVzZXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlT3JjaGVzdHJhdG9yU3RyZWFtL3VzZU9yY2hlc3RyYXRvclN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zdGFudC1jb25kaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IENoYXRIaXN0b3J5IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IEFnZW50RW50aXR5LCBBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IENvbnRleHRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBVc2VPcmNoZXN0cmF0b3JTdHJlYW1Qcm9wcywgUmVzb2x2ZWRDb250ZXh0IH0gZnJvbSAnLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0uaW50ZXJmYWNlJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSwgU3RyZWFtRXhlY3V0aW9uU3RlcCwgU3RyZWFtTm9kZUV2ZW50UGF5bG9hZCB9IGZyb20gJy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHtcbiAgQUNUSVZJVFlfTUVTU0FHRV9ST1RBVEVfTVMsXG4gIGFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UsXG4gIGNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UsXG4gIGNhblJvdGF0ZVN0cmVhbUFjdGl2aXR5UGhhc2UsXG4gIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSxcbiAgZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSxcbiAgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHksXG59IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQge1xuICBjb21wbGV0ZUFsbEV4ZWN1dGlvblN0ZXBzLFxuICBmaW5hbGl6ZUV4ZWN1dGlvblN0ZXBzRm9yV3JpdGluZyxcbiAgZ2V0QWN0aXZlRXhlY3V0aW9uU3RlcCxcbiAgbWVyZ2VBY3Rpdml0eVdpdGhFeGVjdXRpb25TdGVwcyxcbiAgcHVzaEV4ZWN1dGlvblN0ZXBGcm9tTm9kZSxcbiAgcmVzZXRFeGVjdXRpb25TdGVwQ291bnRlcixcbn0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtRXhlY3V0aW9uU3RlcHMnXG5pbXBvcnQge1xuICBhcHBlbmRDb250ZW50VG9TdHJlYW1UaW1lbGluZSxcbiAgYXBwZW5kTm9kZVRvU3RyZWFtVGltZWxpbmUsXG4gIGZpbmFsaXplU3RyZWFtVGltZWxpbmUsXG4gIHN0YXJ0U3RyZWFtVGltZWxpbmVUdXJuLFxufSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1UaW1lbGluZSdcbmltcG9ydCB7IHN0cmVhbVRpbWVsaW5lU3RvcmUgfSBmcm9tICcuLi91c2VTdHJlYW1UaW1lbGluZS9zdHJlYW1UaW1lbGluZVN0b3JlJ1xuaW1wb3J0IHsgaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkLCBtZXJnZVN0cmVhbUNodW5rIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3NlU3RyZWFtQ29udGVudCdcbmltcG9ydCB7XG4gIHN0cmVhbURlYnVnQWN0aXZpdHksXG4gIHN0cmVhbURlYnVnQXBwcm92YWwsXG4gIHN0cmVhbURlYnVnTG9nLFxuICBzdHJlYW1EZWJ1Z0xvZ0hpdGxVaU92ZXJsYXAsXG4gIHN0cmVhbURlYnVnTm9kZSxcbiAgc3RyZWFtRGVidWdTc2UsXG4gIHN1bW1hcml6ZUhpdGxDb250ZXh0LFxuICBzdW1tYXJpemVUaW1lbGluZVNuYXBzaG90LFxufSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1EZWJ1Z0xvZydcblxudHlwZSBTdWJhZ2VudFJhdyA9IHsgbmFtZT86IHN0cmluZzsgcmVzb2x2ZWRfY29udGV4dD86IFJlc29sdmVkQ29udGV4dCB8IG51bGwgfSB8IG51bGwgfCB1bmRlZmluZWRcblxuZXhwb3J0IGNvbnN0IHVzZU9yY2hlc3RyYXRvclN0cmVhbSA9ICh7XG4gIG9uU3RyZWFtVXBkYXRlLFxuICBvbkZpbmlzaFN0cmVhbSxcbiAgb25TdGFydFdyaXRpbmcsXG4gIG9uU3RvcCxcbiAgb25FcnJvcixcbiAgb25BcHByb3ZhbFJlcXVpcmVkLFxuICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbn06IFVzZU9yY2hlc3RyYXRvclN0cmVhbVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmNoYXRBSV0pXG4gIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2xvYWRpbmdNZXNzYWdlLCBzZXRMb2FkaW5nTWVzc2FnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc3RyZWFtQWN0aXZpdHksIHNldFN0cmVhbUFjdGl2aXR5XSA9IHVzZVN0YXRlPFN0cmVhbUFjdGl2aXR5IHwgbnVsbD4obnVsbClcbiAgY29uc3QgYWJvcnRDb250cm9sbGVyUmVmID0gdXNlUmVmPEFib3J0Q29udHJvbGxlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzU3RvcHBlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc3RyZWFtQWN0aXZpdHlSZWYgPSB1c2VSZWY8U3RyZWFtQWN0aXZpdHkgfCBudWxsPihudWxsKVxuICBjb25zdCBleGVjdXRpb25TdGVwc1JlZiA9IHVzZVJlZjxTdHJlYW1FeGVjdXRpb25TdGVwW10+KFtdKVxuICBjb25zdCBhY2N1bXVsYXRlZENvbnRlbnRSZWYgPSB1c2VSZWYoJycpXG5cbiAgY29uc3Qgb25TdHJlYW1VcGRhdGVSZWYgPSB1c2VSZWYob25TdHJlYW1VcGRhdGUpXG4gIGNvbnN0IG9uRmluaXNoU3RyZWFtUmVmID0gdXNlUmVmKG9uRmluaXNoU3RyZWFtKVxuICBjb25zdCBvblN0YXJ0V3JpdGluZ1JlZiA9IHVzZVJlZihvblN0YXJ0V3JpdGluZylcbiAgY29uc3Qgb25TdG9wUmVmID0gdXNlUmVmKG9uU3RvcClcbiAgY29uc3Qgb25FcnJvclJlZiA9IHVzZVJlZihvbkVycm9yKVxuICBjb25zdCBvbkFwcHJvdmFsUmVxdWlyZWRSZWYgPSB1c2VSZWYob25BcHByb3ZhbFJlcXVpcmVkKVxuXG4gIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQgPSBvblN0cmVhbVVwZGF0ZVxuICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50ID0gb25GaW5pc2hTdHJlYW1cbiAgb25TdGFydFdyaXRpbmdSZWYuY3VycmVudCA9IG9uU3RhcnRXcml0aW5nXG4gIG9uU3RvcFJlZi5jdXJyZW50ID0gb25TdG9wXG4gIG9uRXJyb3JSZWYuY3VycmVudCA9IG9uRXJyb3JcbiAgb25BcHByb3ZhbFJlcXVpcmVkUmVmLmN1cnJlbnQgPSBvbkFwcHJvdmFsUmVxdWlyZWRcblxuICBjb25zdCBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdHJlYW1EZWJ1Z0xvZygnb3JjaGVzdHJhdG9yJywgJ2NsZWFyU3RyZWFtTG9hZGluZ1N0YXRlJywge1xuICAgICAgcHJldmlvdXNUdXJuSWQ6IHN0cmVhbVRpbWVsaW5lU3RvcmUuZ2V0U25hcHNob3QoKS50dXJuSWQsXG4gICAgICBleGVjdXRpb25TdGVwQ291bnQ6IGV4ZWN1dGlvblN0ZXBzUmVmLmN1cnJlbnQubGVuZ3RoLFxuICAgIH0pXG4gICAgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCA9IDBcbiAgICBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGV4ZWN1dGlvblN0ZXBzUmVmLmN1cnJlbnQgPSBbXVxuICAgIGFjY3VtdWxhdGVkQ29udGVudFJlZi5jdXJyZW50ID0gJydcbiAgICByZXNldEV4ZWN1dGlvblN0ZXBDb3VudGVyKClcbiAgICBzdHJlYW1UaW1lbGluZVN0b3JlLmNsZWFyKClcbiAgICBzZXRTdHJlYW1BY3Rpdml0eShudWxsKVxuICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICB9LCBbXSlcblxuICBjb25zdCBiZWdpblN0cmVhbVRpbWVsaW5lVHVybiA9IHVzZUNhbGxiYWNrKCh0dXJuSWQ6IHN0cmluZykgPT4ge1xuICAgIHN0cmVhbURlYnVnTG9nKCdvcmNoZXN0cmF0b3InLCAnYmVnaW5TdHJlYW1UaW1lbGluZVR1cm4nLCB7IHR1cm5JZCB9KVxuICAgIGFjY3VtdWxhdGVkQ29udGVudFJlZi5jdXJyZW50ID0gJydcbiAgICBleGVjdXRpb25TdGVwc1JlZi5jdXJyZW50ID0gW11cbiAgICByZXNldEV4ZWN1dGlvblN0ZXBDb3VudGVyKClcbiAgICBzdHJlYW1UaW1lbGluZVN0b3JlLnJlcGxhY2Uoc3RhcnRTdHJlYW1UaW1lbGluZVR1cm4odHVybklkKSlcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3luY1N0cmVhbVRpbWVsaW5lQ29udGVudCA9IHVzZUNhbGxiYWNrKChhY2N1bXVsYXRlZFRleHQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG5leHQgPSBhcHBlbmRDb250ZW50VG9TdHJlYW1UaW1lbGluZShzdHJlYW1UaW1lbGluZVN0b3JlLmdldFNuYXBzaG90KCksIGFjY3VtdWxhdGVkVGV4dClcbiAgICBzdHJlYW1UaW1lbGluZVN0b3JlLnJlcGxhY2UobmV4dClcbiAgfSwgW10pXG5cbiAgY29uc3QgYXBwbHlTdHJlYW1BY3Rpdml0eSA9IHVzZUNhbGxiYWNrKChhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkpID0+IHtcbiAgICBjb25zdCBwcmV2ID0gc3RyZWFtQWN0aXZpdHlSZWYuY3VycmVudFxuICAgIGlmIChwcmV2Py5waGFzZSA9PT0gYWN0aXZpdHkucGhhc2UgJiYgY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZShhY3Rpdml0eS5waGFzZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocHJldj8ucGhhc2UgIT09IGFjdGl2aXR5LnBoYXNlKSB7XG4gICAgICBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50ID0gMFxuICAgIH1cbiAgICBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50ID0gYWN0aXZpdHlcbiAgICBzZXRTdHJlYW1BY3Rpdml0eShhY3Rpdml0eSlcbiAgICBzZXRMb2FkaW5nTWVzc2FnZShhY3Rpdml0eS5tZXNzYWdlKVxuICAgIHN0cmVhbURlYnVnQWN0aXZpdHkoJ29yY2hlc3RyYXRvcicsICdhcHBseVN0cmVhbUFjdGl2aXR5JywgYWN0aXZpdHksIHtcbiAgICAgIHByZXNlcnZlZFN0ZXBzOiBleGVjdXRpb25TdGVwc1JlZi5jdXJyZW50Lmxlbmd0aCxcbiAgICB9KVxuICB9LCBbXSlcblxuICBjb25zdCBhcHBseVN0cmVhbUFjdGl2aXR5UHJlc2VydmluZ1N0ZXBzID0gdXNlQ2FsbGJhY2soXG4gICAgKGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSkgPT4ge1xuICAgICAgY29uc3Qgc3RlcHMgPSBleGVjdXRpb25TdGVwc1JlZi5jdXJyZW50XG4gICAgICBpZiAoc3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KG1lcmdlQWN0aXZpdHlXaXRoRXhlY3V0aW9uU3RlcHMoYWN0aXZpdHksIHN0ZXBzKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KGFjdGl2aXR5KVxuICAgIH0sXG4gICAgW2FwcGx5U3RyZWFtQWN0aXZpdHldXG4gIClcblxuICBjb25zdCByZXNldFN0cmVhbUV4ZWN1dGlvblRyYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGV4ZWN1dGlvblN0ZXBzUmVmLmN1cnJlbnQgPSBbXVxuICAgIHJlc2V0RXhlY3V0aW9uU3RlcENvdW50ZXIoKVxuICB9LCBbXSlcblxuICAvKiogTWFyY2EgZWwgcmFzdHJvIGNvbW8gY29tcGxldGFkbyB5IGxvIG1hbnRpZW5lIHZpc2libGUgKG5vIGxpbXBpYSBoYXN0YSBlbCBwcsOzeGltbyB0dXJubykuICovXG4gIGNvbnN0IGZpbmFsaXplU3RyZWFtRXhlY3V0aW9uVHJhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgY29tcGxldGVkU3RlcHMgPSBjb21wbGV0ZUFsbEV4ZWN1dGlvblN0ZXBzKGV4ZWN1dGlvblN0ZXBzUmVmLmN1cnJlbnQpXG4gICAgZXhlY3V0aW9uU3RlcHNSZWYuY3VycmVudCA9IGNvbXBsZXRlZFN0ZXBzXG5cbiAgICBpZiAoY29tcGxldGVkU3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVTdGVwID0gZ2V0QWN0aXZlRXhlY3V0aW9uU3RlcChjb21wbGV0ZWRTdGVwcylcbiAgICBjb25zdCBhY3Rpdml0eSA9IG1lcmdlQWN0aXZpdHlXaXRoRXhlY3V0aW9uU3RlcHMoXG4gICAgICB7XG4gICAgICAgIHBoYXNlOiAnd3JpdGluZycsXG4gICAgICAgIG1lc3NhZ2U6IGFjdGl2ZVN0ZXA/Lm1lc3NhZ2UgPz8gZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5KHQpLm1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgY29tcGxldGVkU3RlcHNcbiAgICApXG4gICAgc3RyZWFtQWN0aXZpdHlSZWYuY3VycmVudCA9IGFjdGl2aXR5XG4gICAgc2V0U3RyZWFtQWN0aXZpdHkoYWN0aXZpdHkpXG4gICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgfSwgW2NsZWFyU3RyZWFtTG9hZGluZ1N0YXRlLCB0XSlcblxuICBjb25zdCBoYW5kbGVTdHJlYW1Ob2RlRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAocGF5bG9hZDogU3RyZWFtTm9kZUV2ZW50UGF5bG9hZCwgYWNjdW11bGF0ZWRUZXh0Pzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAocGF5bG9hZC5ub2RlID09PSAnYWdlbnRfdHJhbnNmZXInKSB7XG4gICAgICAgIHN0cmVhbURlYnVnTm9kZSgnb3JjaGVzdHJhdG9yJywgcGF5bG9hZCwgeyBza2lwcGVkOiAnYWdlbnRfdHJhbnNmZXInIH0pXG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoIXBheWxvYWQubWVzc2FnZSB8fCB0eXBlb2YgcGF5bG9hZC5tZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICBzdHJlYW1EZWJ1Z05vZGUoJ29yY2hlc3RyYXRvcicsIHBheWxvYWQsIHsgc2tpcHBlZDogJ21pc3NpbmdfbWVzc2FnZScgfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIGNvbnN0IHRocmVhZElkID0gdHlwZW9mIHBheWxvYWQudGhyZWFkX2lkID09PSAnc3RyaW5nJyA/IHBheWxvYWQudGhyZWFkX2lkIDogdW5kZWZpbmVkXG4gICAgICBjb25zdCBoaXRsQ29udGV4dCA9IGhpdGxFeGVjdXRpb25Db250ZXh0UmVmPy5jdXJyZW50XG4gICAgICBzdHJlYW1EZWJ1Z05vZGUoJ29yY2hlc3RyYXRvcicsIHBheWxvYWQsIHtcbiAgICAgICAgdGhyZWFkSWQsXG4gICAgICAgIGhpdGxDb250ZXh0OiBoaXRsQ29udGV4dCA/IHN1bW1hcml6ZUhpdGxDb250ZXh0KGhpdGxDb250ZXh0KSA6IG51bGwsXG4gICAgICB9KVxuICAgICAgY29uc3QgdGltZWxpbmVOZXh0ID0gYXBwZW5kTm9kZVRvU3RyZWFtVGltZWxpbmUoXG4gICAgICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUuZ2V0U25hcHNob3QoKSxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgYWNjdW11bGF0ZWRUZXh0ID8/IGFjY3VtdWxhdGVkQ29udGVudFJlZi5jdXJyZW50LFxuICAgICAgICB0LFxuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZj8uY3VycmVudCxcbiAgICAgICAgdGhyZWFkSWRcbiAgICAgIClcbiAgICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUucmVwbGFjZSh0aW1lbGluZU5leHQpXG5cbiAgICAgIGNvbnN0IGxhc3RFeGVjdXRpb24gPSBbLi4udGltZWxpbmVOZXh0LnNlZ21lbnRzXS5yZXZlcnNlKCkuZmluZChzZWdtZW50ID0+IHNlZ21lbnQudHlwZSA9PT0gJ2V4ZWN1dGlvbicpXG4gICAgICBpZiAobGFzdEV4ZWN1dGlvbj8udHlwZSA9PT0gJ2V4ZWN1dGlvbicpIHtcbiAgICAgICAgZXhlY3V0aW9uU3RlcHNSZWYuY3VycmVudCA9IGxhc3RFeGVjdXRpb24uc3RlcHNcbiAgICAgICAgY29uc3QgYWN0aXZpdHkgPSByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eShcbiAgICAgICAgICBwYXlsb2FkLm1lc3NhZ2UsXG4gICAgICAgICAgdCxcbiAgICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZj8uY3VycmVudCxcbiAgICAgICAgICB0aHJlYWRJZCxcbiAgICAgICAgICBwYXlsb2FkLm5vZGUgPT09ICdyZXN1bWluZycgPyB7IHVzZVJlc3VtaW5nRmFsbGJhY2s6IHRydWUgfSA6IHVuZGVmaW5lZFxuICAgICAgICApXG4gICAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHkobWVyZ2VBY3Rpdml0eVdpdGhFeGVjdXRpb25TdGVwcyhhY3Rpdml0eSwgbGFzdEV4ZWN1dGlvbi5zdGVwcykpXG4gICAgICAgIHN0cmVhbURlYnVnQWN0aXZpdHkoJ29yY2hlc3RyYXRvcicsICdub2RlOmFjdGl2aXR5JywgYWN0aXZpdHksIHtcbiAgICAgICAgICBleGVjdXRpb25TdGVwQ291bnQ6IGxhc3RFeGVjdXRpb24uc3RlcHMubGVuZ3RoLFxuICAgICAgICB9KVxuICAgICAgICBzdHJlYW1EZWJ1Z0xvZ0hpdGxVaU92ZXJsYXAoe1xuICAgICAgICAgIHNjb3BlOiAnb3JjaGVzdHJhdG9yJyxcbiAgICAgICAgICBzb3VyY2U6ICdub2RlJyxcbiAgICAgICAgICBub2RlUGF5bG9hZDogcGF5bG9hZCxcbiAgICAgICAgICBhY3Rpdml0eU1lc3NhZ2U6IGFjdGl2aXR5Lm1lc3NhZ2UsXG4gICAgICAgICAgaGl0bENvbnRleHQsXG4gICAgICAgICAgdWlTdXJmYWNlczogWydzdHJlYW1BY3Rpdml0eScsICdzdHJlYW1UaW1lbGluZSddLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FwcGx5U3RyZWFtQWN0aXZpdHksIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtV3JpdGluZ1N0YXJ0ZWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNXcml0aW5nKHRydWUpXG4gICAgc3luY1N0cmVhbVRpbWVsaW5lQ29udGVudChhY2N1bXVsYXRlZENvbnRlbnRSZWYuY3VycmVudClcbiAgICBhcHBseVN0cmVhbUFjdGl2aXR5UHJlc2VydmluZ1N0ZXBzKGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSh0KSlcbiAgfSwgW2FwcGx5U3RyZWFtQWN0aXZpdHlQcmVzZXJ2aW5nU3RlcHMsIHN5bmNTdHJlYW1UaW1lbGluZUNvbnRlbnQsIHRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc3RyZWFtQWN0aXZpdHlSZWYuY3VycmVudCA9IHN0cmVhbUFjdGl2aXR5XG4gIH0sIFtzdHJlYW1BY3Rpdml0eV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzTG9hZGluZyB8fCBpc1dyaXRpbmcgfHwgIXN0cmVhbUFjdGl2aXR5KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIGlmICghY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZShzdHJlYW1BY3Rpdml0eS5waGFzZSkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IHByZXYgPSBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50XG4gICAgICBpZiAoIXByZXYgfHwgIWNhblJvdGF0ZVN0cmVhbUFjdGl2aXR5UGhhc2UocHJldi5waGFzZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoIWNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UocHJldi5waGFzZSwgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBhZHZhbmNlZCA9IGFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UocHJldiwgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCwgdClcbiAgICAgIGlmICghYWR2YW5jZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50ID0gYWR2YW5jZWQubmV4dEluZGV4XG4gICAgICBjb25zdCBtZXJnZWRBY3Rpdml0eSA9IHtcbiAgICAgICAgLi4uYWR2YW5jZWQuYWN0aXZpdHksXG4gICAgICAgIC4uLihwcmV2LmV4ZWN1dGlvblN0ZXBzPy5sZW5ndGggPyB7IGV4ZWN1dGlvblN0ZXBzOiBwcmV2LmV4ZWN1dGlvblN0ZXBzIH0gOiB7fSksXG4gICAgICB9XG4gICAgICBzdHJlYW1BY3Rpdml0eVJlZi5jdXJyZW50ID0gbWVyZ2VkQWN0aXZpdHlcbiAgICAgIHNldFN0cmVhbUFjdGl2aXR5KG1lcmdlZEFjdGl2aXR5KVxuICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobWVyZ2VkQWN0aXZpdHkubWVzc2FnZSlcbiAgICB9LCBBQ1RJVklUWV9NRVNTQUdFX1JPVEFURV9NUylcblxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKVxuICB9LCBbaXNMb2FkaW5nLCBpc1dyaXRpbmcsIHN0cmVhbUFjdGl2aXR5Py5waGFzZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlU1NFU3RyZWFtID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4ge1xuICAgICAgLy8gVGltZS10aHJvdHRsZTogZXZpdGEgZW1pdGlyIG9uU3RyZWFtVXBkYXRlIG3DoXMgZGUgdW5hIHZleiBjYWRhIH4xNm1zLlxuICAgICAgLy8gVXNhbW9zIHRpbWVyIHBhcmEgcXVlIGVsIHN0cmVhbSBzaWdhIHBpbnRhbmRvIGF1bnF1ZSByQUYgZXN0w6kgdGhyb3R0bGVhZG8uXG4gICAgICAvLyBOb3RhOiBubyB0b2NhbW9zIGVsIHN0YXRlIGBkYXRhYCBlbiBlbCBob3QgcGF0aCAoc29sbyBzZSBhY3R1YWxpemEgZW5cbiAgICAgIC8vIGBjb21wbGV0ZWAvcmVzZXRzKSBwYXJhIG5vIHJlLXJlbmRlcml6YXIgYSBsb3MgY29uc3VtaWRvcmVzIGRlbCBob29rXG4gICAgICAvLyBlbiBjYWRhIGZyYW1lOyBlbCB0ZXh0byBlbiB2aXZvIHZpYWphIHBvciBlbCBzdHJlYW1pbmdTdG9yZS5cbiAgICAgIGxldCBwZW5kaW5nQ29udGVudDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgICAgIGxldCB0aHJvdHRsZVRpbWVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAgICAgbGV0IHN0cmVhbVNldHRsZWQgPSBmYWxzZVxuICAgICAgY29uc3QgZW1pdFRocm90dGxlZCA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBjb250ZW50XG4gICAgICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHJldHVyblxuICAgICAgICB0aHJvdHRsZVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgICAgICAgaWYgKHN0cmVhbVNldHRsZWQpIHtcbiAgICAgICAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICAgICAgICBvblN0cmVhbVVwZGF0ZVJlZi5jdXJyZW50Py4odG9FbWl0LCBudWxsLCAnJylcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDE2KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBmbHVzaFBlbmRpbmcgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHtcbiAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRocm90dGxlVGltZXIpXG4gICAgICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICAgICAgb25TdHJlYW1VcGRhdGVSZWYuY3VycmVudD8uKHRvRW1pdCwgbnVsbCwgJycpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgICAgICAgaWYgKCFyZWFkZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gICAgICAgIGxldCBidWZmZXIgPSAnJ1xuICAgICAgICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgICAgICAgbGV0IGhhc1N0YXJ0ZWRXcml0aW5nID0gZmFsc2VcblxuICAgICAgICBjb25zdCBlbnN1cmVXcml0aW5nU3RhcnRlZCA9ICgpID0+IHtcbiAgICAgICAgICBpZiAoaGFzU3RhcnRlZFdyaXRpbmcpIHJldHVyblxuICAgICAgICAgIGhhc1N0YXJ0ZWRXcml0aW5nID0gdHJ1ZVxuICAgICAgICAgIHN0cmVhbURlYnVnU3NlKCdhc2tNYWlhJywgJ3dyaXRpbmc6c3RhcnRlZCcsIHtcbiAgICAgICAgICAgIGFjY3VtdWxhdGVkTGVuZ3RoOiBhY2N1bXVsYXRlZENvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgc2V0SXNXcml0aW5nKHRydWUpXG4gICAgICAgICAgaGFuZGxlU3RyZWFtV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgIG9uU3RhcnRXcml0aW5nUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcHBseVN0cmVhbUNodW5rID0gKGNodW5rOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoIWNodW5rKSByZXR1cm5cbiAgICAgICAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSBtZXJnZVN0cmVhbUNodW5rKGFjY3VtdWxhdGVkQ29udGVudCwgY2h1bmspXG4gICAgICAgICAgYWNjdW11bGF0ZWRDb250ZW50UmVmLmN1cnJlbnQgPSBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgICAgICBzeW5jU3RyZWFtVGltZWxpbmVDb250ZW50KGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICBlbWl0VGhyb3R0bGVkKGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcGx5U3RyZWFtQ29tcGxldGUgPSAocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgICAgICBpZiAoc3RyZWFtU2V0dGxlZCkgcmV0dXJuXG4gICAgICAgICAgc3RyZWFtU2V0dGxlZCA9IHRydWVcblxuICAgICAgICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IChwYXlsb2FkLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgICAgICBzdHJlYW1EZWJ1Z1NzZSgnYXNrTWFpYScsICdjb21wbGV0ZScsIHtcbiAgICAgICAgICAgIGZpbmFsQ29udGVudExlbmd0aDogZmluYWxDb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICAgIHRpbWVsaW5lOiBzdW1tYXJpemVUaW1lbGluZVNuYXBzaG90KHN0cmVhbVRpbWVsaW5lU3RvcmUuZ2V0U25hcHNob3QoKSksXG4gICAgICAgICAgfSlcbiAgICAgICAgICBhY2N1bXVsYXRlZENvbnRlbnRSZWYuY3VycmVudCA9IGZpbmFsQ29udGVudFxuICAgICAgICAgIHN5bmNTdHJlYW1UaW1lbGluZUNvbnRlbnQoZmluYWxDb250ZW50KVxuICAgICAgICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUucmVwbGFjZShmaW5hbGl6ZVN0cmVhbVRpbWVsaW5lKHN0cmVhbVRpbWVsaW5lU3RvcmUuZ2V0U25hcHNob3QoKSkpXG4gICAgICAgICAgY29uc3Qgc291cmNlcyA9IHBheWxvYWQuc291cmNlcyB8fCBudWxsXG4gICAgICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKHBheWxvYWQubWVtb3J5X3Nlc3Npb25faWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLmF0dGFjaG1lbnRzKSA/IHBheWxvYWQuYXR0YWNobWVudHMgOiBudWxsXG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5zdWdnZXN0X3JlcGx5KSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBwYXlsb2FkLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW11cbiAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5zdWdnZXN0aW9ucykpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gcGF5bG9hZC5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhZ2VudElkUmF3ID0gcGF5bG9hZC5hZ2VudF9pZCA/PyBwYXlsb2FkLmFnZW50SWRcbiAgICAgICAgICBjb25zdCBjb21wbGV0ZWRBZ2VudElkID1cbiAgICAgICAgICAgIGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICAgICAgY29uc3Qgc3ViYWdlbnRSYXcgPSBwYXlsb2FkLnN1YmFnZW50IGFzIFN1YmFnZW50UmF3XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRDb250ZXh0ID0gc3ViYWdlbnRSYXc/LnJlc29sdmVkX2NvbnRleHQgPz8gbnVsbFxuICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgc2V0RGF0YShmaW5hbENvbnRlbnQpXG4gICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgc2V0U3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICAgICAgICAgIG9uRmluaXNoU3RyZWFtUmVmLmN1cnJlbnQ/LihcbiAgICAgICAgICAgIGZpbmFsQ29udGVudCxcbiAgICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgICAgIHJlc29sdmVkQ29udGV4dFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgaWYgKGlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICAgICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG5cbiAgICAgICAgICAgICAgaWYgKHN0cmVhbVNldHRsZWQgJiYgZXZlbnRUeXBlICE9PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN0cmVhbURlYnVnU3NlKCdhc2tNYWlhJywgZXZlbnRUeXBlLCB7XG4gICAgICAgICAgICAgICAgaGFzU3RhcnRlZFdyaXRpbmcsXG4gICAgICAgICAgICAgICAgYWNjdW11bGF0ZWRMZW5ndGg6IGFjY3VtdWxhdGVkQ29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgLi4uKGV2ZW50VHlwZSA9PT0gJ25vZGUnXG4gICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICBub2RlOiBkYXRhLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgdG9vbF9uYW1lOiBkYXRhLnRvb2xfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlUHJldmlldzogdHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycgPyBkYXRhLm1lc3NhZ2Uuc2xpY2UoMCwgODApIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgICAgICAuLi4oZXZlbnRUeXBlID09PSAnYXBwcm92YWxfcmVxdWlyZWQnXG4gICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICBtYW51YWxBcHByb3ZhbERldGVjdGVkOiBkYXRhLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA9PT0gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nVG9vbHM6IEFycmF5LmlzQXJyYXkoZGF0YS5wZW5kaW5nX2FjdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRhdGEucGVuZGluZ19hY3Rpb25zLm1hcCgoYTogeyB0b29sX25hbWU/OiBzdHJpbmcgfSkgPT4gYS50b29sX25hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd0aGlua2luZyc6XG4gICAgICAgICAgICAgICAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1BY3Rpdml0eVByZXNlcnZpbmdTdGVwcyh7XG4gICAgICAgICAgICAgICAgICAgICAgcGhhc2U6ICd0aGlua2luZycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSgwLCB0KSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICd0b2tlbic6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gdHlwZW9mIGRhdGEuY29udGVudCA9PT0gJ3N0cmluZycgPyBkYXRhLmNvbnRlbnQgOiAnJ1xuICAgICAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1DaHVuayhjaHVuaylcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAnY29udGVudCc6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gdHlwZW9mIGRhdGEuY29udGVudCA9PT0gJ3N0cmluZycgPyBkYXRhLmNvbnRlbnQgOiAnJ1xuICAgICAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1DaHVuayhjaHVuaylcbiAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1Db21wbGV0ZShkYXRhKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdub2RlJzpcbiAgICAgICAgICAgICAgICAgIGhhbmRsZVN0cmVhbU5vZGVFdmVudChkYXRhIGFzIFN0cmVhbU5vZGVFdmVudFBheWxvYWQpXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1Db21wbGV0ZShkYXRhKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2FwcHJvdmFsX3JlcXVpcmVkJzoge1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsIGFwcHJvdmFsOiBlbCBTU0Ugc2lndWUgY29uIG5vZGUvdG9rZW4vY29tcGxldGUgKHkgcHVlZGVcbiAgICAgICAgICAgICAgICAgIC8vIGVuY2FkZW5hciBtw6FzIGFwcHJvdmFsX3JlcXVpcmVkKS4gU29sbyBlbCBhcHByb3ZhbCBcInBhdXNhZG9cIlxuICAgICAgICAgICAgICAgICAgLy8gKGJvdMOzbikgZXMgdGVybWluYWwgcGFyYSBlc3RlIHN0cmVhbS5cbiAgICAgICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBjb25zdCBpc01hbnVhbEFwcHJvdmFsID0gZGF0YS5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPT09IHRydWVcbiAgICAgICAgICAgICAgICAgIHN0cmVhbURlYnVnQXBwcm92YWwoJ29yY2hlc3RyYXRvcicsICdhcHByb3ZhbF9yZXF1aXJlZCcsIGRhdGEsIHtcbiAgICAgICAgICAgICAgICAgICAgaXNNYW51YWxBcHByb3ZhbCxcbiAgICAgICAgICAgICAgICAgICAgd2lsbENsZWFyTG9hZGluZ1N0YXRlOiAhaXNNYW51YWxBcHByb3ZhbCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBpZiAoIWlzTWFudWFsQXBwcm92YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtU2V0dGxlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkUmVmLmN1cnJlbnQ/LihkYXRhLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgICAgICAgICBpZiAoaXNNYW51YWxBcHByb3ZhbCAmJiBBcnJheS5pc0FycmF5KGRhdGEucGVuZGluZ19hY3Rpb25zKSAmJiBkYXRhLnBlbmRpbmdfYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFudWFsQWN0aXZpdHkgPSByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSh0LCBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZj8uY3VycmVudClcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1BY3Rpdml0eShtYW51YWxBY3Rpdml0eSlcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFtRGVidWdMb2dIaXRsVWlPdmVybGFwKHtcbiAgICAgICAgICAgICAgICAgICAgICBzY29wZTogJ29yY2hlc3RyYXRvcicsXG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlOiAnaW5pdGlhbEFjdGl2aXR5JyxcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eU1lc3NhZ2U6IG1hbnVhbEFjdGl2aXR5Lm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgaGl0bENvbnRleHQ6IGhpdGxFeGVjdXRpb25Db250ZXh0UmVmPy5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHVpU3VyZmFjZXM6IFsnc3RyZWFtQWN0aXZpdHknLCAnYXBwcm92YWxCb3gnXSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICAgICAgc3RyZWFtU2V0dGxlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBkYXRhLmVycm9yKVxuICAgICAgICAgICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKSAvLyBMaW1waWFyIG1lbnNhamUgY3VhbmRvIGhheSBlcnJvclxuICAgICAgICAgICAgICAgICAgb25FcnJvclJlZi5jdXJyZW50Py4oZGF0YS5lcnJvcj8udHlwZSwgZGF0YS5lcnJvcj8ubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtub3duIFNTRSBldmVudCB0eXBlOicsIGV2ZW50VHlwZSlcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBTU0UgZGF0YTonLCBwYXJzZUVycm9yLCBkYXRhU3RyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuXG4gICAgICAgIC8vIFNvbG8gZWplY3V0YXIgb25FcnJvciBzaSBubyBmdWUgdW4gc3RvcCBpbnRlbmNpb25hbFxuICAgICAgICBpZiAoIWlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgb25FcnJvclJlZi5jdXJyZW50Py4oKVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICBpZiAoIXN0cmVhbVNldHRsZWQpIHtcbiAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGFwcGx5U3RyZWFtQWN0aXZpdHlQcmVzZXJ2aW5nU3RlcHMsXG4gICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSxcbiAgICAgIGhhbmRsZVN0cmVhbU5vZGVFdmVudCxcbiAgICAgIGhhbmRsZVN0cmVhbVdyaXRpbmdTdGFydGVkLFxuICAgICAgc3luY1N0cmVhbVRpbWVsaW5lQ29udGVudCxcbiAgICAgIHQsXG4gICAgXVxuICApXG5cbiAgY29uc3QgYXNrTWFpYSA9IGFzeW5jICh7XG4gICAgbWVzc2FnZSxcbiAgICBoaXN0b3J5LFxuICAgIHByb2plY3RJZCxcbiAgICBsYW5nLFxuICAgIHVzZXJJZCxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgY29tcGFueUlkLFxuICAgIGNoYXRJZCxcbiAgICBtZXNzYWdlSWQsXG4gICAgY2xpZW50SWQsXG4gICAgY2xpZW50TmFtZSxcbiAgICBmZWVJZCxcbiAgICBhZ2VudE5hbWUsXG4gICAgYWdlbnRJZCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgYXR0YWNobWVudHMsXG4gICAgcHJvamVjdE5hbWUsXG4gICAgdGFza0lkLFxuICAgIHRhc2tOYW1lLFxuICAgIGZhcUlkLFxuICAgIGFnZW50U3VnZ2VzdGlvbklkLFxuICAgIGZ1YUlkLFxuICAgIHNjSWQsXG4gICAgYWdlbnRFbnRpdHksXG4gICAgYWdlbnRUeXBlLFxuICAgIGNvbnRleHRNZXNzYWdlLFxuICAgIGNvbnRleHREYXRhLFxuICB9OiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgaGlzdG9yeTogQ2hhdEhpc3RvcnlbXVxuICAgIHByb2plY3RJZDogbnVtYmVyIHwgbnVsbFxuICAgIGxhbmc6IHN0cmluZ1xuICAgIHVzZXJJZDogc3RyaW5nXG4gICAgZmlyc3ROYW1lPzogc3RyaW5nXG4gICAgbGFzdE5hbWU/OiBzdHJpbmdcbiAgICBjb21wYW55SWQ6IHN0cmluZ1xuICAgIGNoYXRJZDogc3RyaW5nXG4gICAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgICBjbGllbnRJZD86IG51bWJlclxuICAgIGNsaWVudE5hbWU/OiBzdHJpbmdcbiAgICBmZWVJZD86IG51bWJlclxuICAgIGFnZW50TmFtZTogc3RyaW5nXG4gICAgYWdlbnRJZDogc3RyaW5nXG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICAgIHByb2plY3ROYW1lPzogc3RyaW5nXG4gICAgdGFza0lkPzogbnVtYmVyXG4gICAgdGFza05hbWU/OiBzdHJpbmdcbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gICAgYWdlbnRFbnRpdHk/OiBBZ2VudEVudGl0eVxuICAgIGFnZW50VHlwZT86IEFnZW50VHlwZVxuICAgIGNvbnRleHRNZXNzYWdlPzogQ29udGV4dE1lc3NhZ2VcbiAgICBjb250ZXh0RGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0RGF0YShudWxsKVxuICAgICAgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCA9IDBcbiAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgIGJlZ2luU3RyZWFtVGltZWxpbmVUdXJuKG1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGluaXRpYWxBY3Rpdml0eSA9IGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSh0LCB7XG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgICAgIGhhc0F0dGFjaG1lbnRzOiBCb29sZWFuKGF0dGFjaG1lbnRzPy5sZW5ndGgpLFxuICAgICAgICBhdHRhY2htZW50c0NvdW50OiBhdHRhY2htZW50cz8ubGVuZ3RoID8/IDAsXG4gICAgICB9KVxuICAgICAgYXBwbHlTdHJlYW1BY3Rpdml0eShpbml0aWFsQWN0aXZpdHkpXG4gICAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IGZhbHNlIC8vIFJlc2V0ZWFyIGZsYWcgYWwgaW5pY2lhciBudWV2YSBwZXRpY2nDs25cblxuICAgICAgc3RyZWFtRGVidWdMb2coJ29yY2hlc3RyYXRvcicsICdhc2tNYWlhOnN0YXJ0JywgeyBtZXNzYWdlSWQsIGNoYXRJZCB9KVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5vcmNoZXN0cmF0b3IoXG4gICAgICAgIHtcbiAgICAgICAgICBpbnB1dDogbWVzc2FnZSxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIC4uLihmaXJzdE5hbWUgPyB7IGZpcnN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihsYXN0TmFtZSA/IHsgbGFzdE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICBjb21wYW55SWQsXG4gICAgICAgICAgY2hhdElkLFxuICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICBjbGllbnRJZCxcbiAgICAgICAgICAuLi4oZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQgfSA6IHt9KSxcbiAgICAgICAgICBhZ2VudE5hbWUsXG4gICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgICAgICAgLi4uKHByb2plY3RJZCA/IHsgcHJvamVjdElkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgIC4uLihwcm9qZWN0TmFtZSA/IHsgcHJvamVjdE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50TmFtZSA/IHsgY2xpZW50TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLih0YXNrSWQgIT0gbnVsbCA/IHsgdGFza0lkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHRhc2tOYW1lID8geyB0YXNrTmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihmYXFJZCA/IHsgZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGZ1YUlkID8geyBmdWFJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihzY0lkID8geyBzY0lkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50RW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5IH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50VHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNvbnRleHREYXRhID8geyBjb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudD8uc2lnbmFsXG4gICAgICApXG5cbiAgICAgIGF3YWl0IGhhbmRsZVNTRVN0cmVhbShyZXNwb25zZSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gU2kgZnVlIHVuIGFib3J0IGludGVuY2lvbmFsIChzdG9wIG1hbnVhbCBvIGNhbWJpbyBkZSBjaGF0KSwgbm8gZGlzcGFyYXIgb25FcnJvclxuICAgICAgLy8gcG9ycXVlIGVzbyBpbnNlcnRhIHVuIFwibWVuc2FqZSBkZSBlcnJvclwiIGVuIGVsIGNoYXQgYWwgcXVlIGFjYWJhbW9zIGRlIG5hdmVnYXIuXG4gICAgICBpZiAoIWlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgIG9uRXJyb3JSZWYuY3VycmVudD8uKClcbiAgICAgIH1cbiAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RvcFN0cmVhbWluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQuYWJvcnQoKVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgb25TdG9wUmVmLmN1cnJlbnQ/LigpXG4gICAgfVxuICB9LCBbY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGVdKVxuXG4gIC8qKlxuICAgKiBBYm9ydGEgZWwgc3RyZWFtIGVuIGN1cnNvIChzaSBleGlzdGUpIHNpbiBkaXNwYXJhciBgb25TdG9wYC5cbiAgICogw5pzZWxvIGVuIGNhc29zIGRvbmRlIG5vIHF1ZXJlbW9zIGFncmVnYXIgZWwgbWVuc2FqZSBkZSBcImNhbmNlbGFkb1wiXG4gICAqIChwb3IgZWplbXBsbywgYWwgY2FtYmlhciBkZSBjaGF0KS5cbiAgICovXG4gIGNvbnN0IGFib3J0U3RyZWFtU2lsZW50bHkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSB7XG4gICAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICB9XG4gIH0sIFtjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZV0pXG5cbiAgLy8gQ2xlYW51cCBhbCBkZXNtb250YXI6IHNpIHF1ZWRhIHVuIHN0cmVhbSBhY3Rpdm8sIGFib3J0YXJsbyBwYXJhIGV2aXRhclxuICAvLyBxdWUgaW50ZW50ZSBhY3R1YWxpemFyIGVzdGFkbyBlbiB1biBjb21wb25lbnRlIHlhIGRlc21vbnRhZG8gKGZ1Z2FzIGRlXG4gIC8vIG1lbW9yaWEgeSB3YXJuaW5ncykuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCkge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG4gICAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgdXBkYXRlU3RyZWFtQWN0aXZpdHkgPSB1c2VDYWxsYmFjayhcbiAgICAoYWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKCFhY3Rpdml0eSkge1xuICAgICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgYXBwbHlTdHJlYW1BY3Rpdml0eShhY3Rpdml0eSlcbiAgICB9LFxuICAgIFthcHBseVN0cmVhbUFjdGl2aXR5LCBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZV1cbiAgKVxuXG4gIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgIHNldERhdGEobnVsbClcbiAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhc2tNYWlhLFxuICAgIHJlc3BvbnNlOiBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHksXG4gICAgcmVzZXQsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgICBhYm9ydFN0cmVhbVNpbGVudGx5LFxuICAgIGhhbmRsZVNTRVN0cmVhbSwgLy8gRXhwb25lciBwYXJhIHBvZGVyIHVzYXJsbyBlbiBjb250aW51ZS10aHJlYWRcbiAgICBoYW5kbGVTdHJlYW1Ob2RlRXZlbnQsXG4gICAgaGFuZGxlU3RyZWFtV3JpdGluZ1N0YXJ0ZWQsXG4gICAgYmVnaW5TdHJlYW1UaW1lbGluZVR1cm4sXG4gICAgc3luY1N0cmVhbVRpbWVsaW5lQ29udGVudCxcbiAgICBmaW5hbGl6ZVN0cmVhbUV4ZWN1dGlvblRyYWNlLFxuICAgIHJlc2V0U3RyZWFtRXhlY3V0aW9uVHJhY2UsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUU5QyxPQUFPQyxJQUFJLE1BQU0scUJBQXFCO0FBS3RDLFNBQVNDLFFBQVEsUUFBUSx3QkFBd0I7QUFFakQsU0FDRUMsMEJBQTBCLEVBQzFCQyw0QkFBNEIsRUFDNUJDLCtCQUErQixFQUMvQkMsNEJBQTRCLEVBQzVCQyx3QkFBd0IsRUFDeEJDLHlCQUF5QixFQUN6QkMsd0JBQXdCLEVBQ3hCQyw2QkFBNkIsRUFDN0JDLGdDQUFnQyxRQUMzQixvQ0FBb0M7QUFDM0MsU0FDRUMseUJBQXlCLEVBRXpCQyxzQkFBc0IsRUFDdEJDLCtCQUErQixFQUUvQkMseUJBQXlCLFFBQ3BCLGtDQUFrQztBQUN6QyxTQUNFQyw2QkFBNkIsRUFDN0JDLDBCQUEwQixFQUMxQkMsc0JBQXNCLEVBQ3RCQyx1QkFBdUIsUUFDbEIsNEJBQTRCO0FBQ25DLFNBQVNDLG1CQUFtQixRQUFRLDBDQUEwQztBQUM5RSxTQUFTQyx3QkFBd0IsRUFBRUMsZ0JBQWdCLFFBQVEsOEJBQThCO0FBQ3pGLFNBQ0VDLG1CQUFtQixFQUNuQkMsbUJBQW1CLEVBQ25CQyxjQUFjLEVBQ2RD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