@projectcor/maia-components 2.11.17-9 → 2.11.17

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 (39) hide show
  1. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +2 -3
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +5 -6
  3. package/lib/components/atoms/Loader.js +3 -4
  4. package/lib/components/atoms/icons/index.js +1 -3
  5. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +5 -24
  6. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +53 -17
  7. package/lib/components/molecules/ChatAIHome/styles.js +42 -34
  8. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +4 -43
  9. package/lib/components/molecules/ChatAIMessages/newStyles.js +21 -24
  10. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +9 -117
  11. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +41 -16
  12. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +13 -5
  13. package/lib/components/molecules/ChatAIModal/constants.js +2 -6
  14. package/lib/components/molecules/Sidebar/Sidebar.js +197 -162
  15. package/lib/components/molecules/Sidebar/Sidebar.styles.js +1 -13
  16. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +1 -10
  17. package/lib/hooks/useChatManager/useChatManager.js +81 -105
  18. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  19. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -9
  20. package/lib/lang/br/index.js +9 -68
  21. package/lib/lang/en/index.js +9 -68
  22. package/lib/lang/es/index.js +7 -66
  23. package/lib/lang/fr/index.js +4 -52
  24. package/lib/services/maia/Agents/getAgents.js +8 -5
  25. package/lib/services/maia/Orchestrator/orchestrator.js +22 -26
  26. package/lib/services/utils/mapChatMessages.js +1 -2
  27. package/lib/types/Chat.js +1 -1
  28. package/lib/types/agent.js +1 -1
  29. package/lib/types/global.d.js +1 -1
  30. package/package.json +1 -1
  31. package/lib/components/atoms/icons/MaiaStoreIcon.js +0 -31
  32. package/lib/components/atoms/icons/MyAgentsNavIcon.js +0 -51
  33. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +0 -50
  34. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +0 -62
  35. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.js +0 -43
  36. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.styles.js +0 -37
  37. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +0 -351
  38. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +0 -165
  39. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +0 -114
@@ -99,8 +99,7 @@ var processSSEStream = /*#__PURE__*/function () {
99
99
  var finalContent = eventData.content || accumulatedContent;
100
100
  var sources = eventData.sources || null;
101
101
  var memorySessionId = eventData.memory_session_id || '';
102
- var suggestions = Array.isArray(eventData.suggest_reply) ? eventData.suggest_reply : Array.isArray(eventData.suggestions) ? eventData.suggestions : null;
103
- callbacks.onComplete(finalContent, sources, memorySessionId, threadId, suggestions);
102
+ callbacks.onComplete(finalContent, sources, memorySessionId, threadId);
104
103
  } else if (eventType === 'error') {
105
104
  callbacks.onError(eventData.error, threadId);
106
105
  }
@@ -317,9 +316,9 @@ export var useChatManager = function useChatManager(_ref2) {
317
316
  });
318
317
  }, [addMessage]);
319
318
  var handleStreamFinish = useCallback(/*#__PURE__*/function () {
320
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId, suggestions) {
321
- var _previousMessage$appr, _previousMessage$appr2;
322
- var tempMessageId, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, wasTaskCreation, wasTaskEdit, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, pathMatch, routeProjectId, _window$newProjectDas, customEvent;
319
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId) {
320
+ var _previousMessage$appr;
321
+ var tempMessageId, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, pathMatch, routeProjectId, isOnProjectRoute, _window$newProjectDas, _window$newProjectDas2, _window$newProjectDas3, _window$newProjectDas4, _window$newProjectDas5, _window$newProjectDas6, customEvent;
323
322
  return _regeneratorRuntime.wrap(function (_context2) {
324
323
  while (1) switch (_context2.prev = _context2.next) {
325
324
  case 0:
@@ -336,12 +335,17 @@ export var useChatManager = function useChatManager(_ref2) {
336
335
  hasApprovalInPreviousMessage = (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approval) != null;
337
336
  TASK_CREATION_TOOLS = ['create_task', 'create_tasks_batch'];
338
337
  TASK_EDIT_TOOLS = ['edit_task', 'edit_tasks_batch', 'task_assign', 'task_unassign', 'update_task_type', 'update_estimated_hours', 'assign_task_label'];
339
- wasTaskCreation = hasApprovalInPreviousMessage && (previousMessage === null || previousMessage === void 0 || (_previousMessage$appr = previousMessage.approval) === null || _previousMessage$appr === void 0 || (_previousMessage$appr = _previousMessage$appr.pending_actions) === null || _previousMessage$appr === void 0 ? void 0 : _previousMessage$appr.some(function (action) {
338
+ TASK_DELETE_TOOLS = ['delete_task', 'delete_tasks_batch'];
339
+ pendingActions = (previousMessage === null || previousMessage === void 0 || (_previousMessage$appr = previousMessage.approval) === null || _previousMessage$appr === void 0 ? void 0 : _previousMessage$appr.pending_actions) || [];
340
+ wasTaskCreation = hasApprovalInPreviousMessage && pendingActions.some(function (action) {
340
341
  return TASK_CREATION_TOOLS.includes(action.tool_name);
341
- }));
342
- wasTaskEdit = hasApprovalInPreviousMessage && (previousMessage === null || previousMessage === void 0 || (_previousMessage$appr2 = previousMessage.approval) === null || _previousMessage$appr2 === void 0 || (_previousMessage$appr2 = _previousMessage$appr2.pending_actions) === null || _previousMessage$appr2 === void 0 ? void 0 : _previousMessage$appr2.some(function (action) {
342
+ });
343
+ wasTaskEdit = hasApprovalInPreviousMessage && pendingActions.some(function (action) {
343
344
  return TASK_EDIT_TOOLS.includes(action.tool_name);
344
- }));
345
+ });
346
+ wasTaskDelete = hasApprovalInPreviousMessage && pendingActions.some(function (action) {
347
+ return TASK_DELETE_TOOLS.includes(action.tool_name);
348
+ });
345
349
  if (!(matches.length > 0 && hasApprovalInPreviousMessage)) {
346
350
  _context2.next = 2;
347
351
  break;
@@ -357,24 +361,22 @@ export var useChatManager = function useChatManager(_ref2) {
357
361
  contentToAdd = content.replace(taskUrlRegex, function (url) {
358
362
  return url.replace(/\/(detail|message|messages|files|history|hours)(?=$|\?)/, tabSegment);
359
363
  });
360
-
361
- // Solo añadir al dashboard cuando fue creación de tarea y la ruta actual coincide con el proyecto del chat
362
- if (wasTaskCreation) {
363
- lastProjectMessage = messagesRef.current.filter(function (msg) {
364
- return msg.projectId;
365
- }).at(-1);
366
- contextProjectIdRaw = (project === null || project === void 0 ? void 0 : project.id) || (lastProjectMessage === null || lastProjectMessage === void 0 ? void 0 : lastProjectMessage.projectId);
367
- contextProjectId = contextProjectIdRaw ? parseInt(String(contextProjectIdRaw), 10) : null;
368
- pathMatch = window.location.pathname.match(/^\/projects\/(\d+)\//);
369
- routeProjectId = pathMatch ? parseInt(pathMatch[1], 10) : null;
370
- if (contextProjectId && routeProjectId && contextProjectId === routeProjectId) {
371
- if ((_window$newProjectDas = window.newProjectDashboard) !== null && _window$newProjectDas !== void 0 && _window$newProjectDas.addExistingTaskToDashboard) {
372
- window.newProjectDashboard.addExistingTaskToDashboard(taskIds);
373
- }
364
+ lastProjectMessage = messagesRef.current.filter(function (msg) {
365
+ return msg.projectId;
366
+ }).at(-1);
367
+ contextProjectIdRaw = (project === null || project === void 0 ? void 0 : project.id) || (lastProjectMessage === null || lastProjectMessage === void 0 ? void 0 : lastProjectMessage.projectId);
368
+ contextProjectId = contextProjectIdRaw ? parseInt(String(contextProjectIdRaw), 10) : null;
369
+ pathMatch = window.location.pathname.match(/^\/projects\/(\d+)\//);
370
+ routeProjectId = pathMatch ? parseInt(pathMatch[1], 10) : null;
371
+ isOnProjectRoute = contextProjectId && routeProjectId && contextProjectId === routeProjectId;
372
+ if (isOnProjectRoute) {
373
+ if (wasTaskCreation) {
374
+ (_window$newProjectDas = window.newProjectDashboard) === null || _window$newProjectDas === void 0 || (_window$newProjectDas2 = _window$newProjectDas.addExistingTaskToDashboard) === null || _window$newProjectDas2 === void 0 || _window$newProjectDas2.call(_window$newProjectDas, taskIds);
375
+ } else if (wasTaskEdit) {
376
+ (_window$newProjectDas3 = window.newProjectDashboard) === null || _window$newProjectDas3 === void 0 || (_window$newProjectDas4 = _window$newProjectDas3.editExistingTaskInDashboard) === null || _window$newProjectDas4 === void 0 || _window$newProjectDas4.call(_window$newProjectDas3, taskIds);
377
+ } else if (wasTaskDelete) {
378
+ (_window$newProjectDas5 = window.newProjectDashboard) === null || _window$newProjectDas5 === void 0 || (_window$newProjectDas6 = _window$newProjectDas5.deleteExistingTaskFromDashboard) === null || _window$newProjectDas6 === void 0 || _window$newProjectDas6.call(_window$newProjectDas5, taskIds);
374
379
  }
375
- } else if (wasTaskEdit) {
376
- // TODO: COR debe implementar window.newProjectDashboard.refreshTasksOnDashboard(taskIds)
377
- // para refrescar tareas editadas en el dashboard sin duplicarlas
378
380
  }
379
381
  case 2:
380
382
  addMessage({
@@ -387,8 +389,7 @@ export var useChatManager = function useChatManager(_ref2) {
387
389
  },
388
390
  role: ChatHistoryRole.ASSISTANT,
389
391
  sources: sources,
390
- memorySessionId: memorySessionId,
391
- suggestions: suggestions || []
392
+ memorySessionId: memorySessionId
392
393
  });
393
394
  isProcessingRef.current = false;
394
395
  if (firstTimeRef.current) {
@@ -402,7 +403,7 @@ export var useChatManager = function useChatManager(_ref2) {
402
403
  }
403
404
  }, _callee2);
404
405
  }));
405
- return function (_x4, _x5, _x6, _x7) {
406
+ return function (_x4, _x5, _x6) {
406
407
  return _ref5.apply(this, arguments);
407
408
  };
408
409
  }(), [addMessage, removeMessage, project, getTabTaskDefault]);
@@ -519,7 +520,7 @@ export var useChatManager = function useChatManager(_ref2) {
519
520
  case 2:
520
521
  projects = _context3.sent;
521
522
  payloadFaqId = faqId !== null && faqId !== void 0 ? faqId : options.faqId;
522
- payloadData = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
523
+ payloadData = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
523
524
  message: finalMessage,
524
525
  history: history,
525
526
  projectId: projectToRequest,
@@ -548,8 +549,6 @@ export var useChatManager = function useChatManager(_ref2) {
548
549
  attachments: attachments
549
550
  } : {}), payloadFaqId ? {
550
551
  faqId: payloadFaqId
551
- } : {}), (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
552
- agentEntity: agent.entity
553
552
  } : {});
554
553
  askMaia(payloadData);
555
554
  case 3:
@@ -558,7 +557,7 @@ export var useChatManager = function useChatManager(_ref2) {
558
557
  }
559
558
  }, _callee3);
560
559
  }));
561
- return function (_x8, _x9, _x0) {
560
+ return function (_x7, _x8, _x9) {
562
561
  return _ref6.apply(this, arguments);
563
562
  };
564
563
  }(), [addMessage, event, askMaia, project, client, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
@@ -574,7 +573,7 @@ export var useChatManager = function useChatManager(_ref2) {
574
573
  role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
575
574
  };
576
575
  });
577
- askMaia(_objectSpread({
576
+ askMaia({
578
577
  message: currentUserQuestion.current,
579
578
  history: history,
580
579
  projectId: option.id,
@@ -589,11 +588,9 @@ export var useChatManager = function useChatManager(_ref2) {
589
588
  agentId: (agent === null || agent === void 0 ? void 0 : agent.id) || '',
590
589
  isWebSearchActive: isWebSearchActiveRef.current,
591
590
  isDeepSearchActive: isDeepSearchActiveRef.current
592
- }, (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
593
- agentEntity: agent.entity
594
- } : {}));
591
+ });
595
592
  }
596
- }, [project, setProject, askMaia, authUser, isWebSearchActive, agent]);
593
+ }, [project, setProject, askMaia, authUser, isWebSearchActive]);
597
594
  var handleFeedback = useCallback(/*#__PURE__*/function () {
598
595
  var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(feedbackProp, chatMessageId) {
599
596
  var response;
@@ -620,14 +617,13 @@ export var useChatManager = function useChatManager(_ref2) {
620
617
  }
621
618
  }, _callee4);
622
619
  }));
623
- return function (_x1, _x10) {
620
+ return function (_x0, _x1) {
624
621
  return _ref7.apply(this, arguments);
625
622
  };
626
623
  }(), []);
627
624
  var handleApprovalDecision = useCallback(/*#__PURE__*/function () {
628
625
  var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(threadId, decision, editedActions) {
629
- var _approval$pending_act;
630
- var messageWithApproval, approval, messageId, hasCreateAgentAction, shouldRefetchAgentsAfterCompletion, existingMessage, newStatus, response, _t;
626
+ var messageWithApproval, approval, messageId, existingMessage, newStatus, response, _t;
631
627
  return _regeneratorRuntime.wrap(function (_context5) {
632
628
  while (1) switch (_context5.prev = _context5.next) {
633
629
  case 0:
@@ -646,11 +642,7 @@ export var useChatManager = function useChatManager(_ref2) {
646
642
  return _context5.abrupt("return");
647
643
  case 1:
648
644
  approval = messageWithApproval.approval;
649
- messageId = messageWithApproval.id;
650
- hasCreateAgentAction = (_approval$pending_act = approval.pending_actions) === null || _approval$pending_act === void 0 ? void 0 : _approval$pending_act.some(function (action) {
651
- return action.tool_name === 'create_agent';
652
- });
653
- shouldRefetchAgentsAfterCompletion = decision !== 'reject' && hasCreateAgentAction; // Update message status immediately
645
+ messageId = messageWithApproval.id; // Update message status immediately
654
646
  messagesRef.current = messagesRef.current.map(function (message) {
655
647
  if (message.id === messageId) {
656
648
  var newStatus = decision === 'approve' ? 'approved' : 'rejected';
@@ -718,11 +710,8 @@ export var useChatManager = function useChatManager(_ref2) {
718
710
  return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, currentThreadId, displayMsg));
719
711
  });
720
712
  },
721
- onComplete: function onComplete(finalContent, sources, memorySessionId, currentThreadId, suggestions) {
722
- handleStreamFinish(finalContent, sources, memorySessionId, suggestions);
723
- if (shouldRefetchAgentsAfterCompletion) {
724
- document.dispatchEvent(new CustomEvent('refetch-agents-custom'));
725
- }
713
+ onComplete: function onComplete(finalContent, sources, memorySessionId, currentThreadId) {
714
+ handleStreamFinish(finalContent, sources, memorySessionId);
726
715
  setActiveLoadings(function (prev) {
727
716
  var newLoadings = _objectSpread({}, prev);
728
717
  delete newLoadings[currentThreadId];
@@ -758,12 +747,12 @@ export var useChatManager = function useChatManager(_ref2) {
758
747
  }
759
748
  }, _callee5, null, [[2, 6]]);
760
749
  }));
761
- return function (_x11, _x12, _x13) {
750
+ return function (_x10, _x11, _x12) {
762
751
  return _ref8.apply(this, arguments);
763
752
  };
764
753
  }(), [authUser, agent, addMessage, handleStreamError, handleStreamUpdate, handleStreamFinish]);
765
754
  var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
766
- var _userInitialMessage$m, _userInitialMessage$a, _project$client2, _project$client3, hasInitialMessage, hasInitialAttachments, hasInitialFaq, history;
755
+ var _project$client2, _project$client3, history;
767
756
  return _regeneratorRuntime.wrap(function (_context6) {
768
757
  while (1) switch (_context6.prev = _context6.next) {
769
758
  case 0:
@@ -777,61 +766,48 @@ export var useChatManager = function useChatManager(_ref2) {
777
766
  _context6.next = 1;
778
767
  return loadMessages();
779
768
  case 1:
780
- _context6.next = 4;
769
+ _context6.next = 3;
781
770
  break;
782
771
  case 2:
783
- if (!userInitialMessage) {
784
- _context6.next = 4;
785
- break;
786
- }
787
- hasInitialMessage = Boolean((_userInitialMessage$m = userInitialMessage.message) === null || _userInitialMessage$m === void 0 ? void 0 : _userInitialMessage$m.trim());
788
- hasInitialAttachments = Boolean((_userInitialMessage$a = userInitialMessage.attachments) === null || _userInitialMessage$a === void 0 ? void 0 : _userInitialMessage$a.length);
789
- hasInitialFaq = Boolean(userInitialMessage.faqId);
790
- if (!(!hasInitialMessage && !hasInitialAttachments && !hasInitialFaq)) {
791
- _context6.next = 3;
792
- break;
772
+ if (userInitialMessage) {
773
+ history = messagesRef.current.map(function (historyMessage) {
774
+ return {
775
+ content: historyMessage.message,
776
+ role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
777
+ };
778
+ });
779
+ askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
780
+ message: userInitialMessage.message,
781
+ history: history,
782
+ projectId: (project === null || project === void 0 ? void 0 : project.id) || null,
783
+ lang: authUser.lang,
784
+ userId: authUser.id.toString(),
785
+ firstName: authUser.firstName,
786
+ lastName: authUser.lastName,
787
+ companyId: authUser.company_id.toString(),
788
+ chatId: currentChatId.current,
789
+ messageId: currentMessageId.current,
790
+ agentName: agent === null || agent === void 0 ? void 0 : agent.name,
791
+ agentId: agent === null || agent === void 0 ? void 0 : agent.id,
792
+ isWebSearchActive: isWebSearchActiveRef.current,
793
+ isDeepSearchActive: isDeepSearchActiveRef.current
794
+ }, client !== null && client !== void 0 && client.id ? {
795
+ clientId: client.id
796
+ } : project !== null && project !== void 0 && (_project$client2 = project.client) !== null && _project$client2 !== void 0 && _project$client2.id ? {
797
+ clientId: project.client.id
798
+ } : {}), project !== null && project !== void 0 && project.name ? {
799
+ projectName: project.name
800
+ } : {}), project !== null && project !== void 0 && (_project$client3 = project.client) !== null && _project$client3 !== void 0 && _project$client3.name ? {
801
+ clientName: project.client.name
802
+ } : client !== null && client !== void 0 && client.name ? {
803
+ clientName: client.name
804
+ } : {}), userInitialMessage.attachments ? {
805
+ attachments: userInitialMessage.attachments
806
+ } : {}), userInitialMessage.faqId ? {
807
+ faqId: userInitialMessage.faqId
808
+ } : {}));
793
809
  }
794
- return _context6.abrupt("return");
795
810
  case 3:
796
- history = messagesRef.current.map(function (historyMessage) {
797
- return {
798
- content: historyMessage.message,
799
- role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
800
- };
801
- });
802
- askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
803
- message: userInitialMessage.message,
804
- history: history,
805
- projectId: (project === null || project === void 0 ? void 0 : project.id) || null,
806
- lang: authUser.lang,
807
- userId: authUser.id.toString(),
808
- firstName: authUser.firstName,
809
- lastName: authUser.lastName,
810
- companyId: authUser.company_id.toString(),
811
- chatId: currentChatId.current,
812
- messageId: currentMessageId.current,
813
- agentName: agent === null || agent === void 0 ? void 0 : agent.name,
814
- agentId: agent === null || agent === void 0 ? void 0 : agent.id,
815
- isWebSearchActive: isWebSearchActiveRef.current,
816
- isDeepSearchActive: isDeepSearchActiveRef.current
817
- }, client !== null && client !== void 0 && client.id ? {
818
- clientId: client.id
819
- } : project !== null && project !== void 0 && (_project$client2 = project.client) !== null && _project$client2 !== void 0 && _project$client2.id ? {
820
- clientId: project.client.id
821
- } : {}), project !== null && project !== void 0 && project.name ? {
822
- projectName: project.name
823
- } : {}), project !== null && project !== void 0 && (_project$client3 = project.client) !== null && _project$client3 !== void 0 && _project$client3.name ? {
824
- clientName: project.client.name
825
- } : client !== null && client !== void 0 && client.name ? {
826
- clientName: client.name
827
- } : {}), userInitialMessage.attachments ? {
828
- attachments: userInitialMessage.attachments
829
- } : {}), userInitialMessage.faqId ? {
830
- faqId: userInitialMessage.faqId
831
- } : {}), (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
832
- agentEntity: agent.entity
833
- } : {}));
834
- case 4:
835
811
  case "end":
836
812
  return _context6.stop();
837
813
  }
@@ -869,4 +845,4 @@ export var useChatManager = function useChatManager(_ref2) {
869
845
  isDisabled: waitingResponse || loadingMessages
870
846
  };
871
847
  };
872
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJfb3B0aW9ucyRhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dGFjaG1lbnRzIiwib3B0aW9ucyIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJpZCIsInRvU3RyaW5nIiwibmFtZSIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsInRyaW0iLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJ0aHJlYWRJZCIsImNhbGxiYWNrcyIsIl9yZXNwb25zZSRib2R5IiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImlzU3RyZWFtQ29tcGxldGUiLCJoYW5kbGVMaW5lIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJpIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJfaGFuZGxlTGluZSIsInBhcnNlZCIsImV2ZW50RGF0YSIsImNvbnRlbnQiLCJvblRva2VuIiwibWVzc2FnZSIsIm9uTm9kZSIsImZpbmFsQ29udGVudCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsInN1Z2dlc3Rpb25zIiwic3VnZ2VzdF9yZXBseSIsIm9uQ29tcGxldGUiLCJvbkVycm9yIiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJyZWFkIiwic2VudCIsImFicnVwdCIsImRlY29kZSIsInN0cmVhbSIsInBvcCIsImxlbmd0aCIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwidXNlQ2hhdE1hbmFnZXIiLCJfcmVmMiIsImluaXRpYWxDaGF0SWQiLCJjaGF0SWQiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJfcmVmMiRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInByb2plY3QiLCJzZXRQcm9qZWN0IiwiY2xpZW50Iiwic2V0Q2xpZW50IiwiYWdlbnQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImNoaXBzUHJvamVjdCIsInNldENoaXBzUHJvamVjdCIsImV2ZW50IiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VTdGFibGVDYWxsYmFja3MiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsImN1cnJlbnRNZXNzYWdlSWQiLCJjdXJyZW50VXNlclF1ZXN0aW9uIiwiY3VycmVudENoYXRJZCIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImlzUHJvY2Vzc2luZ1JlZiIsImZpcnN0VGltZVJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJhY3RpdmVMb2FkaW5ncyIsInNldEFjdGl2ZUxvYWRpbmdzIiwiaXNXZWJTZWFyY2hBY3RpdmVSZWYiLCJpc0RlZXBTZWFyY2hBY3RpdmVSZWYiLCJfdXNlQ2hhdE1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwibWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJsb2FkTWVzc2FnZXMiLCJhZGRNZXNzYWdlIiwicmVtb3ZlTWVzc2FnZSIsImhhbmRsZVNjcm9sbCIsImN1c3RvbUV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJsYXN0TXNnV2l0aFByb2plY3QiLCJmaWx0ZXIiLCJtc2ciLCJwcm9qZWN0SWQiLCJhdCIsIl9yZWYzIiwicHJvamVjdE5hbWUiLCJ0aGVuIiwicHJvamVjdHMiLCJmb3VuZCIsImZpbmQiLCJwIiwiTnVtYmVyIiwiX2ZvdW5kJGNsaWVudCIsImNsaWVudE5hbWUiLCJTdHJpbmciLCJsYXN0TXNnV2l0aENsaWVudCIsImNsaWVudElkIiwiX3JlZjQiLCJtc2dDbGllbnRJZCIsIm1zZ0NsaWVudE5hbWUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImVycm9yTWVzc2FnZSIsImNvbmNhdCIsImlzRXJyb3IiLCJkYXRlIiwiRGF0ZSIsInVzZXIiLCJyb2xlIiwiQVNTSVNUQU5UIiwiaGFuZGxlU3RyZWFtVXBkYXRlIiwidGVtcE1lc3NhZ2VJZCIsImhhbmRsZVN0cmVhbUZpbmlzaCIsIl9yZWY1IiwiX2NhbGxlZTIiLCJfcHJldmlvdXNNZXNzYWdlJGFwcHIiLCJfcHJldmlvdXNNZXNzYWdlJGFwcHIyIiwidGFza1VybFJlZ2V4IiwibWF0Y2hlcyIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsImhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwid2FzVGFza0NyZWF0aW9uIiwid2FzVGFza0VkaXQiLCJ0YXNrSWRzIiwidGFiIiwidGFiU2VnbWVudCIsImxhc3RQcm9qZWN0TWVzc2FnZSIsImNvbnRleHRQcm9qZWN0SWRSYXciLCJjb250ZXh0UHJvamVjdElkIiwicGF0aE1hdGNoIiwicm91dGVQcm9qZWN0SWQiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfY29udGV4dDIiLCJSZWdFeHAiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJtYXRjaEFsbCIsIm0iLCJhcHByb3ZhbCIsInBlbmRpbmdfYWN0aW9ucyIsInNvbWUiLCJhY3Rpb24iLCJpbmNsdWRlcyIsInRvb2xfbmFtZSIsIm1hcCIsIm1hdGNoIiwicGFyc2VJbnQiLCJ1cmwiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiX3g0IiwiX3g1IiwiX3g2IiwiX3g3IiwiaGFuZGxlU3RyZWFtU3RvcCIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJzZXRUaW1lb3V0IiwiaGFuZGxlQXBwcm92YWxSZXF1aXJlZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsImFwcHJvdmFsU3RhdHVzIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsIm9uQXBwcm92YWxSZXF1aXJlZCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjYiLCJfY2FsbGVlMyIsImZhcUlkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJfcHJvamVjdCRjbGllbnQiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJuZXdNZXNzYWdlSWQiLCJsYXN0TWVzc2FnZVdpdGhQcm9qZWN0IiwiY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInBheWxvYWRGYXFJZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQzIiwicG1BaVR5cGVkVGV4dCIsImFnZW50SWQiLCJVU0VSIiwicHJvamVjdENoYW5nZWQiLCJpbmNvbWVUeXBlIiwiaGlzdG9yeU1lc3NhZ2UiLCJpc0Zpbml0ZSIsIl9vYmplY3RTcHJlYWQiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwibWVzc2FnZUlkIiwiYWdlbnROYW1lIiwiZW50aXR5IiwiYWdlbnRFbnRpdHkiLCJfeDgiLCJfeDkiLCJfeDAiLCJjaGFuZ2VQcm9qZWN0Iiwib3B0aW9uIiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmNyIsIl9jYWxsZWU0IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsIl9jb250ZXh0NCIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJ3YXNIZWxwZnVsIiwiX3gxIiwiX3gxMCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmOCIsIl9jYWxsZWU1IiwiZGVjaXNpb24iLCJlZGl0ZWRBY3Rpb25zIiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0IiwibWVzc2FnZVdpdGhBcHByb3ZhbCIsImhhc0NyZWF0ZUFnZW50QWN0aW9uIiwic2hvdWxkUmVmZXRjaEFnZW50c0FmdGVyQ29tcGxldGlvbiIsImV4aXN0aW5nTWVzc2FnZSIsIm5ld1N0YXR1cyIsIl90IiwiX2NvbnRleHQ1IiwiX20kYXBwcm92YWwiLCJ0aHJlYWRfaWQiLCJfZGVmaW5lUHJvcGVydHkiLCJPcmNoZXN0cmF0b3IiLCJjb250aW51ZVRocmVhZCIsInNlc3Npb25JZCIsInNlc3Npb25faWQiLCJvayIsIm5ld0xvYWRpbmdzIiwiY3VycmVudFRocmVhZElkIiwiZGlzcGxheU1zZyIsIl94MTEiLCJfeDEyIiwiX3gxMyIsImluaXRpYWxpemVDaGF0IiwiX2NhbGxlZTYiLCJfdXNlckluaXRpYWxNZXNzYWdlJG0iLCJfdXNlckluaXRpYWxNZXNzYWdlJGEiLCJfcHJvamVjdCRjbGllbnQyIiwiX3Byb2plY3QkY2xpZW50MyIsImhhc0luaXRpYWxNZXNzYWdlIiwiaGFzSW5pdGlhbEF0dGFjaG1lbnRzIiwiaGFzSW5pdGlhbEZhcSIsIl9jb250ZXh0NiIsIkJvb2xlYW4iLCJyZXNldENoYXQiLCJzdG9wR2VuZXJhdGlvbiIsImlzRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0ZWQtb3B0aW9uYWwtY2hhaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyB1c2VDaGF0TWVzc2FnZXMgfSBmcm9tICcuLi91c2VDaGF0TWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuY29uc3QgdXNlU3RhYmxlQ2FsbGJhY2tzID0gKGF1dGhVc2VyOiBDT1JVc2VyKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlUmVmPENoYXRNZXNzYWdlVXNlcj4oe1xuICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gIH0pXG5cbiAgaWYgKFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuaWQgIT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50Lm5hbWUgIT09IGF1dGhVc2VyLmZpcnN0TmFtZSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuYXZhdGFyICE9PSBhdXRoVXNlci5waWN0dXJlXG4gICkge1xuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQgPSB7XG4gICAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VXNlcjogY3VycmVudFVzZXIuY3VycmVudCxcbiAgfVxufVxuXG5jb25zdCBwYXJzZVNTRUxpbmUgPSAobGluZTogc3RyaW5nKTogeyBldmVudFR5cGU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9IHwgbnVsbCA9PiB7XG4gIGlmICghbGluZS50cmltKCkpIHJldHVybiBudWxsXG5cbiAgY29uc3QgW2V2ZW50TGluZSwgZGF0YUxpbmVdID0gbGluZS5zcGxpdCgnXFxuJylcbiAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50TGluZS5yZXBsYWNlKCdldmVudDogJywgJycpLnRyaW0oKVxuICBjb25zdCBkYXRhU3RyID0gZGF0YUxpbmUucmVwbGFjZSgnZGF0YTogJywgJycpLnRyaW0oKVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcbiAgICByZXR1cm4geyBldmVudFR5cGUsIGRhdGEgfVxuICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBTU0UgZGF0YTonLCBwYXJzZUVycm9yLCBkYXRhU3RyKVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuY29uc3QgcHJvY2Vzc1NTRVN0cmVhbSA9IGFzeW5jIChcbiAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICB0aHJlYWRJZDogc3RyaW5nLFxuICBjYWxsYmFja3M6IHtcbiAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Db21wbGV0ZTogKFxuICAgICAgZmluYWxDb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICApID0+IHZvaWRcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICB9XG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgaWYgKCFyZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIGxldCBidWZmZXIgPSAnJ1xuICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgbGV0IGlzU3RyZWFtQ29tcGxldGUgPSBmYWxzZVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUxpbmUobGluZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VTU0VMaW5lKGxpbmUpXG4gICAgaWYgKCFwYXJzZWQpIHJldHVyblxuXG4gICAgY29uc3QgeyBldmVudFR5cGUsIGRhdGEgfSA9IHBhcnNlZFxuICAgIGNvbnN0IGV2ZW50RGF0YSA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuICAgIGlmIChldmVudFR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBldmVudERhdGEuY29udGVudCBhcyBzdHJpbmdcbiAgICAgIGFjY3VtdWxhdGVkQ29udGVudCArPSBjb250ZW50XG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdub2RlJykge1xuICAgICAgaWYgKGV2ZW50RGF0YS5tZXNzYWdlICYmIHR5cGVvZiBldmVudERhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2FsbGJhY2tzLm9uTm9kZShldmVudERhdGEubWVzc2FnZSwgdGhyZWFkSWQpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IChldmVudERhdGEuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgY29uc3Qgc291cmNlcyA9IChldmVudERhdGEuc291cmNlcyBhcyB1bmtub3duKSB8fCBudWxsXG4gICAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSAoZXZlbnREYXRhLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdF9yZXBseSlcbiAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW10pXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHRocmVhZElkLCBzdWdnZXN0aW9ucylcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXZlbnREYXRhLmVycm9yLCB0aHJlYWRJZClcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoIWlzU3RyZWFtQ29tcGxldGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNTdHJlYW1Db21wbGV0ZSA9IHRydWVcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBoYW5kbGVMaW5lKGxpbmVzW2ldKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIGNvbnN0IHsgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBsb2FkTWVzc2FnZXMsIGFkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIGhhbmRsZVNjcm9sbCB9ID1cbiAgICB1c2VDaGF0TWVzc2FnZXMoe1xuICAgICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgICAgb25FcnJvcixcbiAgICAgIGFnZW50cyxcbiAgICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcblxuICAgICAgbG9hZE1lc3NhZ2VzKClcbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgbG9hZE1lc3NhZ2VzXSlcblxuICAvLyBTaW5jcm9uaXphciBjaGlwc1Byb2plY3QgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gcHJvamVjdElkIHBlcm8gY2hpcHNQcm9qZWN0IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2hpcHNQcm9qZWN0IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhQcm9qZWN0ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICBjb25zdCB7IHByb2plY3RJZCwgcHJvamVjdE5hbWUgfSA9IGxhc3RNc2dXaXRoUHJvamVjdCB8fCB7fVxuICAgIGlmICghcHJvamVjdElkKSByZXR1cm5cblxuICAgIGZldGNoUHJvamVjdHMocHJvamVjdElkKS50aGVuKHByb2plY3RzID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gcHJvamVjdHM/LmZpbmQocCA9PiBOdW1iZXIocC5pZCkgPT09IE51bWJlcihwcm9qZWN0SWQpKVxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kLm5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogZm91bmQuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGZvdW5kLmlkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdChmb3VuZClcbiAgICAgIH0gZWxzZSBpZiAocHJvamVjdE5hbWUpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwcm9qZWN0SWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KHsgaWQ6IE51bWJlcihwcm9qZWN0SWQpLCBuYW1lOiBwcm9qZWN0TmFtZSB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sIFttZXNzYWdlcywgY2hpcHNQcm9qZWN0LCBsb2FkaW5nTWVzc2FnZXMsIGZldGNoUHJvamVjdHMsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdF0pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2xpZW50IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIGNsaWVudElkIHBlcm8gY2xpZW50IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2xpZW50IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhDbGllbnQgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5jbGllbnRJZCAhPSBudWxsICYmIG1zZy5jbGllbnROYW1lKS5hdCgtMSlcbiAgICBjb25zdCB7IGNsaWVudElkOiBtc2dDbGllbnRJZCwgY2xpZW50TmFtZTogbXNnQ2xpZW50TmFtZSB9ID0gbGFzdE1zZ1dpdGhDbGllbnQgfHwge31cbiAgICBpZiAobXNnQ2xpZW50SWQgPT0gbnVsbCB8fCAhbXNnQ2xpZW50TmFtZSkgcmV0dXJuXG5cbiAgICBzZXRDbGllbnQ/Lih7IGlkOiBOdW1iZXIobXNnQ2xpZW50SWQpLCBuYW1lOiBtc2dDbGllbnROYW1lIH0pXG4gIH0sIFttZXNzYWdlcywgY2xpZW50LCBsb2FkaW5nTWVzc2FnZXMsIHNldENsaWVudF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoZXJyb3JNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuICAgICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgICAgOiB0KCdjaGF0LmVycm9yJylcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtVXBkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiB0ZW1wTWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlOiBjb250ZW50LFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGNvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZywgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnXVxuICAgICAgY29uc3QgVEFTS19FRElUX1RPT0xTID0gW1xuICAgICAgICAnZWRpdF90YXNrJyxcbiAgICAgICAgJ2VkaXRfdGFza3NfYmF0Y2gnLFxuICAgICAgICAndGFza19hc3NpZ24nLFxuICAgICAgICAndGFza191bmFzc2lnbicsXG4gICAgICAgICd1cGRhdGVfdGFza190eXBlJyxcbiAgICAgICAgJ3VwZGF0ZV9lc3RpbWF0ZWRfaG91cnMnLFxuICAgICAgICAnYXNzaWduX3Rhc2tfbGFiZWwnLFxuICAgICAgXVxuICAgICAgY29uc3Qgd2FzVGFza0NyZWF0aW9uID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoKGFjdGlvbjogYW55KSA9PlxuICAgICAgICAgIFRBU0tfQ1JFQVRJT05fVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSlcbiAgICAgICAgKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDAgJiYgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gbWF0Y2hlcy5tYXAobWF0Y2ggPT4gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSlcbiAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgY29uc3QgdGFiU2VnbWVudCA9IHRhYiA/IGAvJHt0YWJ9YCA6ICcvZGV0YWlsJ1xuICAgICAgICBjb250ZW50VG9BZGQgPSBjb250ZW50LnJlcGxhY2UodGFza1VybFJlZ2V4LCB1cmwgPT5cbiAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIFNvbG8gYcOxYWRpciBhbCBkYXNoYm9hcmQgY3VhbmRvIGZ1ZSBjcmVhY2nDs24gZGUgdGFyZWEgeSBsYSBydXRhIGFjdHVhbCBjb2luY2lkZSBjb24gZWwgcHJveWVjdG8gZGVsIGNoYXRcbiAgICAgICAgaWYgKHdhc1Rhc2tDcmVhdGlvbikge1xuICAgICAgICAgIGNvbnN0IGxhc3RQcm9qZWN0TWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkUmF3ID0gcHJvamVjdD8uaWQgfHwgbGFzdFByb2plY3RNZXNzYWdlPy5wcm9qZWN0SWRcbiAgICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICAgIGNvbnN0IHBhdGhNYXRjaCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvXlxcL3Byb2plY3RzXFwvKFxcZCspXFwvLylcbiAgICAgICAgICBjb25zdCByb3V0ZVByb2plY3RJZCA9IHBhdGhNYXRjaCA/IHBhcnNlSW50KHBhdGhNYXRjaFsxXSwgMTApIDogbnVsbFxuICAgICAgICAgIGlmIChjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkKSB7XG4gICAgICAgICAgICBpZiAod2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkLmFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkKHRhc2tJZHMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHdhc1Rhc2tFZGl0KSB7XG4gICAgICAgICAgLy8gVE9ETzogQ09SIGRlYmUgaW1wbGVtZW50YXIgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQucmVmcmVzaFRhc2tzT25EYXNoYm9hcmQodGFza0lkcylcbiAgICAgICAgICAvLyBwYXJhIHJlZnJlc2NhciB0YXJlYXMgZWRpdGFkYXMgZW4gZWwgZGFzaGJvYXJkIHNpbiBkdXBsaWNhcmxhc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYGFuc3dlci0ke21lbW9yeVNlc3Npb25JZH1gLFxuICAgICAgICBtZXNzYWdlOiBjb250ZW50VG9BZGQsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBzb3VyY2VzLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgIH0pXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtU3RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhZGRNZXNzYWdlKHtcbiAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1jYW5jZWxsZWRgLFxuICAgICAgbWVzc2FnZTogdCgnY2hhdC5jYW5jZWxsZWQnKSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiB0cnVlLFxuICAgIH0pXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgIH0sIDUwMClcbiAgfSwgW2FkZE1lc3NhZ2UsIHRdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gIH0pXG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsIGZhcUlkPzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudD8uW21lc3NhZ2VzUmVmLmN1cnJlbnQubGVuZ3RoIC0gMV0/LmFnZW50SWRcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgcXVlc3Rpb24tJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBpZiAobWVzc2FnZSA9PT0gdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJykpIHtcbiAgICAgICAgZmluYWxNZXNzYWdlID0gYEZBUTogJHt0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKX0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtcbiAgICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IHByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgLy8gVmVyaWZpY2FyIGNvbnNpc3RlbmNpYSBlbnRyZSBjb250ZXh0byBnbG9iYWwgeSDDumx0aW1vIG1lbnNhamVcbiAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0Py5pZFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcblxuICAgICAgbGV0IHByb2plY3RUb1JlcXVlc3Q6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgICAgIC8vIFNpIGhheSDDumx0aW1vIG1lbnNhamUgY29uIHByb2plY3RJZCwgdXNhcmxvIChtw6FzIGNvbmZpYWJsZSlcbiAgICAgIGlmIChsYXN0TWVzc2FnZVByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICAgICAgfVxuICAgICAgLy8gU2kgbm8gaGF5IMO6bHRpbW8gbWVuc2FqZSwgdXNhciBlbCBjb250ZXh0byBnbG9iYWxcbiAgICAgIGVsc2UgaWYgKGNvbnRleHRQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gY29udGV4dFByb2plY3RJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjbGllbnQ/LmlkXG4gICAgICAgICAgPyB7IGNsaWVudElkOiBjbGllbnQuaWQsIC4uLihjbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnQ/LmlkXG4gICAgICAgICAgICA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkLCAuLi4ocHJvamVjdC5jbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRmFxSWQgPyB7IGZhcUlkOiBwYXlsb2FkRmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgfVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBjbGllbnQsXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGNoYW5nZVByb2plY3QgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGlmIChvcHRpb24uaWQgIT09IHByb2plY3Q/LmlkKSB7XG4gICAgICAgIHNldFByb2plY3Qob3B0aW9uKVxuICAgICAgfVxuXG4gICAgICBpZiAocHJvamVjdCAmJiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KSlcblxuICAgICAgICBhc2tNYWlhKHtcbiAgICAgICAgICBtZXNzYWdlOiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IG9wdGlvbi5pZCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbcHJvamVjdCwgc2V0UHJvamVjdCwgYXNrTWFpYSwgYXV0aFVzZXIsIGlzV2ViU2VhcmNoQWN0aXZlLCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZlZWRiYWNrUHJvcDogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5DaGF0cy53YXNIZWxwZnVsQ2hhdChjaGF0TWVzc2FnZUlkLCBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUClcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IGNoYXRNZXNzYWdlSWQgJiYgbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIHdhc0hlbHBmdWw6IGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICB0aHJlYWRJZDogc3RyaW5nLCAvLyBDaGFuZ2VkIGZyb20gYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdFxuICAgICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgICAgZWRpdGVkQWN0aW9ucz86IEFycmF5PHsgdG9vbF9uYW1lOiBzdHJpbmc7IGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+XG4gICAgKSA9PiB7XG4gICAgICAvLyBCdXNjYXIgZWwgbWVuc2FqZSBxdWUgY29udGllbmUgZXN0ZSB0aHJlYWRJZCBlbiBzdXMgcGVuZGluZ19hY3Rpb25zXG4gICAgICBjb25zdCBtZXNzYWdlV2l0aEFwcHJvdmFsID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT5cbiAgICAgICAgbS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkID09PSB0aHJlYWRJZClcbiAgICAgIClcblxuICAgICAgaWYgKCFtZXNzYWdlV2l0aEFwcHJvdmFsIHx8ICFtZXNzYWdlV2l0aEFwcHJvdmFsLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZDonLCB0aHJlYWRJZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IG1lc3NhZ2VXaXRoQXBwcm92YWwuaWRcbiAgICAgIGNvbnN0IGhhc0NyZWF0ZUFnZW50QWN0aW9uID0gYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHNob3VsZFJlZmV0Y2hBZ2VudHNBZnRlckNvbXBsZXRpb24gPSBkZWNpc2lvbiAhPT0gJ3JlamVjdCcgJiYgaGFzQ3JlYXRlQWdlbnRBY3Rpb25cblxuICAgICAgLy8gVXBkYXRlIG1lc3NhZ2Ugc3RhdHVzIGltbWVkaWF0ZWx5XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBtZXNzYWdlSWQpIHtcbiAgICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcblxuICAgICAgLy8gVHJpZ2dlciByZS1yZW5kZXJcbiAgICAgIGNvbnN0IGV4aXN0aW5nTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+IG0uaWQgPT09IG1lc3NhZ2VJZClcbiAgICAgIGlmIChleGlzdGluZ01lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgIGFkZE1lc3NhZ2UoeyAuLi5leGlzdGluZ01lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIGJvdGggYXBwcm92ZSBhbmQgcmVqZWN0LCBjYWxsIGNvbnRpbnVlLXRocmVhZCBlbmRwb2ludCB3aXRoIHNwZWNpZmljIHRocmVhZF9pZFxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICAvLyBBZGQgbG9hZGluZyBmb3IgdGhpcyB0aHJlYWRcbiAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW3RocmVhZElkXTogdCgnY2hhdC5wcm9jZXNzaW5nJyksXG4gICAgICB9KSlcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZCh7XG4gICAgICAgICAgdGhyZWFkSWQsIC8vIFVzZSBzcGVjaWZpYyBhY3Rpb24gdGhyZWFkX2lkXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiBlZGl0ZWRBY3Rpb25zID8gJ2VkaXQnIDogZGVjaXNpb24sXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgIC8vIFJlbW92ZSBsb2FkaW5nIG9uIGVycm9yXG4gICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbdGhyZWFkSWRdXG4gICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBTU0UgbWFudWFsbHkgdG8gdHJhY2sgbG9hZGluZyBwZXIgdGhyZWFkXG4gICAgICAgIGF3YWl0IHByb2Nlc3NTU0VTdHJlYW0ocmVzcG9uc2UsIHRocmVhZElkLCB7XG4gICAgICAgICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtVXBkYXRlKGNvbnRlbnQsIG51bGwsICcnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gTW9zdHJhciBub21icmUgc29sbyBwYXJhIGNyZWF0ZV90YXNrLCBlbCByZXN0byBtdWVzdHJhIGdlbsOpcmljb1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheU1zZyA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2NyZWF0ZV90YXNrJykgPyBtZXNzYWdlIDogdCgnY2hhdC5leGVjdXRpbmdBY3Rpb24nKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3VycmVudFRocmVhZElkXTogZGlzcGxheU1zZyxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Db21wbGV0ZTogKFxuICAgICAgICAgICAgZmluYWxDb250ZW50OiBzdHJpbmcsXG4gICAgICAgICAgICBzb3VyY2VzOiBhbnksXG4gICAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaChmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgICBpZiAoc2hvdWxkUmVmZXRjaEFnZW50c0FmdGVyQ29tcGxldGlvbikge1xuICAgICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1hZ2VudHMtY3VzdG9tJykpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAvLyBSZW1vdmUgbG9hZGluZyBvbiBlcnJvclxuICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW3RocmVhZElkXVxuICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2F1dGhVc2VyLCBhZ2VudCwgYWRkTWVzc2FnZSwgaGFuZGxlU3RyZWFtRXJyb3IsIGhhbmRsZVN0cmVhbVVwZGF0ZSwgaGFuZGxlU3RyZWFtRmluaXNoXVxuICApXG5cbiAgY29uc3QgaW5pdGlhbGl6ZUNoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChpbml0aWFsQ2hhdElkKSB7XG4gICAgICBhd2FpdCBsb2FkTWVzc2FnZXMoKVxuICAgIH0gZWxzZSBpZiAodXNlckluaXRpYWxNZXNzYWdlKSB7XG4gICAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2U/LnRyaW0oKSlcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxBdHRhY2htZW50cyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGgpXG4gICAgICBjb25zdCBoYXNJbml0aWFsRmFxID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQpXG5cbiAgICAgIGlmICghaGFzSW5pdGlhbE1lc3NhZ2UgJiYgIWhhc0luaXRpYWxBdHRhY2htZW50cyAmJiAhaGFzSW5pdGlhbEZhcSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkIHx8IG51bGwsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY2xpZW50Py5pZCA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCB9IDogcHJvamVjdD8uY2xpZW50Py5pZCA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0Py5uYW1lID8geyBwcm9qZWN0TmFtZTogcHJvamVjdC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0Py5jbGllbnQ/Lm5hbWVcbiAgICAgICAgICA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9XG4gICAgICAgICAgOiBjbGllbnQ/Lm5hbWVcbiAgICAgICAgICAgID8geyBjbGllbnROYW1lOiBjbGllbnQubmFtZSB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkID8geyBmYXFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgaW5pdGlhbENoYXRJZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgYXV0aFVzZXIsXG4gICAgYWdlbnQsXG4gICAgYXNrTWFpYSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gIF0pXG5cbiAgY29uc3QgcmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3RvcEdlbmVyYXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RvcFN0cmVhbWluZygpXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9LCBbc3RvcFN0cmVhbWluZ10pXG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgY3VycmVudFByb2plY3QsXG4gICAgY3VycmVudENoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgIGN1cnJlbnRNZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcblxuICAgIHNlbmRNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgcmVzZXRDaGF0LFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuXG4gICAgaXNEaXNhYmxlZDogd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcyxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBRzlCLFNBQVNDLE9BQU8sUUFBaUIsd0JBQXdCO0FBQ3pELFNBQVNDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUMvRCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxhQUFhO0FBQzlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFDdEMsU0FBU0MsUUFBUSxRQUFRLDREQUE0RDtBQUNyRixTQUF1Q0MsZUFBZSxRQUF5QixrQkFBa0I7QUFHakcsU0FBU0MsV0FBVyxRQUFRLGdCQUFnQjtBQUM1QyxTQUFTQyxpQkFBaUIsUUFBUSxzQkFBc0I7QUFDeEQsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBSWpFLElBQU1DLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUlDLG9CQUEyQyxFQUFLO0VBQUEsSUFBQUMsb0JBQUE7RUFDaEYsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNILG9CQUFvQixDQUFDLEVBQUU7SUFDdkMsT0FBTztNQUFFSSxXQUFXLEVBQUVKLG9CQUFvQjtNQUFFSyxPQUFPLEVBQUUsQ0FBQztJQUF3QixDQUFDO0VBQ2pGO0VBRUEsSUFBTUEsT0FBMkIsR0FBR0wsb0JBQW9CLGFBQXBCQSxvQkFBb0IsY0FBcEJBLG9CQUFvQixHQUFJLENBQUMsQ0FBQztFQUM5RCxPQUFPO0lBQUVJLFdBQVcsR0FBQUgsb0JBQUEsR0FBRUksT0FBTyxDQUFDRCxXQUFXLGNBQUFILG9CQUFBLGNBQUFBLG9CQUFBLEdBQUksRUFBRTtJQUFFSSxPQUFPLEVBQVBBO0VBQVEsQ0FBQztBQUM1RCxDQUFDO0FBRUQsSUFBTUMsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSUMsUUFBaUIsRUFBSztFQUNoRCxJQUFNQyxXQUFXLEdBQUczQixNQUFNLENBQWtCO0lBQzFDNEIsRUFBRSxFQUFFRixRQUFRLENBQUNFLEVBQUUsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7SUFDMUJDLElBQUksRUFBRUosUUFBUSxDQUFDSyxTQUFTO0lBQ3hCQyxNQUFNLEVBQUVOLFFBQVEsQ0FBQ087RUFDbkIsQ0FBQyxDQUFDO0VBRUYsSUFDRU4sV0FBVyxDQUFDTyxPQUFPLENBQUNOLEVBQUUsS0FBS0YsUUFBUSxDQUFDRSxFQUFFLENBQUNDLFFBQVEsQ0FBQyxDQUFDLElBQ2pERixXQUFXLENBQUNPLE9BQU8sQ0FBQ0osSUFBSSxLQUFLSixRQUFRLENBQUNLLFNBQVMsSUFDL0NKLFdBQVcsQ0FBQ08sT0FBTyxDQUFDRixNQUFNLEtBQUtOLFFBQVEsQ0FBQ08sT0FBTyxFQUMvQztJQUNBTixXQUFXLENBQUNPLE9BQU8sR0FBRztNQUNwQk4sRUFBRSxFQUFFRixRQUFRLENBQUNFLEVBQUUsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7TUFDMUJDLElBQUksRUFBRUosUUFBUSxDQUFDSyxTQUFTO01BQ3hCQyxNQUFNLEVBQUVOLFFBQVEsQ0FBQ087SUFDbkIsQ0FBQztFQUNIO0VBQ0EsT0FBTztJQUNMTixXQUFXLEVBQUVBLFdBQVcsQ0FBQ087RUFDM0IsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFNQyxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBSUMsSUFBWSxFQUFrRDtFQUNsRixJQUFJLENBQUNBLElBQUksQ0FBQ0MsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUk7RUFFN0IsSUFBQUMsV0FBQSxHQUE4QkYsSUFBSSxDQUFDRyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQUFDLFlBQUEsR0FBQUMsY0FBQSxDQUFBSCxXQUFBO0lBQXZDSSxTQUFTLEdBQUFGLFlBQUE7SUFBRUcsUUFBUSxHQUFBSCxZQUFBO0VBQzFCLElBQUksQ0FBQ0UsU0FBUyxJQUFJLENBQUNDLFFBQVEsRUFBRSxPQUFPLElBQUk7RUFFeEMsSUFBTUMsU0FBUyxHQUFHRixTQUFTLENBQUNHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUNSLElBQUksQ0FBQyxDQUFDO0VBQ3pELElBQU1TLE9BQU8sR0FBR0gsUUFBUSxDQUFDRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDUixJQUFJLENBQUMsQ0FBQztFQUVyRCxJQUFJO0lBQ0YsSUFBTVUsSUFBSSxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0gsT0FBTyxDQUFDO0lBQ2hDLE9BQU87TUFBRUYsU0FBUyxFQUFUQSxTQUFTO01BQUVHLElBQUksRUFBSkE7SUFBSyxDQUFDO0VBQzVCLENBQUMsQ0FBQyxPQUFPRyxVQUFVLEVBQUU7SUFDbkJDLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLHlCQUF5QixFQUFFRixVQUFVLEVBQUVKLE9BQU8sQ0FBQztJQUM3RCxPQUFPLElBQUk7RUFDYjtBQUNGLENBQUM7QUFFRCxJQUFNTyxnQkFBZ0I7RUFBQSxJQUFBQyxJQUFBLEdBQUFDLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBRyxTQUFBQyxRQUN2QkMsUUFBa0IsRUFDbEJDLFFBQWdCLEVBQ2hCQyxTQVdDO0lBQUEsSUFBQUMsY0FBQTtJQUFBLElBQUFDLE1BQUEsRUFBQUMsT0FBQSxFQUFBQyxNQUFBLEVBQUFDLGtCQUFBLEVBQUFDLGdCQUFBLEVBWVFDLFVBQVUsRUFBQUMsa0JBQUEsRUFBQUMsSUFBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEsRUFBQUMsQ0FBQTtJQUFBLE9BQUFqQixtQkFBQSxDQUFBa0IsSUFBQSxXQUFBQyxRQUFBO01BQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7UUFBQTtVQUFWVCxVQUFVLFlBQUFVLFlBQUMxQyxJQUFZLEVBQUU7WUFDaEMsSUFBTTJDLE1BQU0sR0FBRzVDLFlBQVksQ0FBQ0MsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQzJDLE1BQU0sRUFBRTtZQUViLElBQVFuQyxTQUFTLEdBQVdtQyxNQUFNLENBQTFCbkMsU0FBUztjQUFFRyxJQUFJLEdBQUtnQyxNQUFNLENBQWZoQyxJQUFJO1lBQ3ZCLElBQU1pQyxTQUFTLEdBQUdqQyxJQUErQjtZQUVqRCxJQUFJSCxTQUFTLEtBQUssT0FBTyxFQUFFO2NBQ3pCLElBQU1xQyxPQUFPLEdBQUdELFNBQVMsQ0FBQ0MsT0FBaUI7Y0FDM0NmLGtCQUFrQixJQUFJZSxPQUFPO2NBQzdCcEIsU0FBUyxDQUFDcUIsT0FBTyxDQUFDaEIsa0JBQWtCLENBQUM7WUFDdkMsQ0FBQyxNQUFNLElBQUl0QixTQUFTLEtBQUssTUFBTSxFQUFFO2NBQy9CLElBQUlvQyxTQUFTLENBQUNHLE9BQU8sSUFBSSxPQUFPSCxTQUFTLENBQUNHLE9BQU8sS0FBSyxRQUFRLEVBQUU7Z0JBQzlEdEIsU0FBUyxDQUFDdUIsTUFBTSxDQUFDSixTQUFTLENBQUNHLE9BQU8sRUFBRXZCLFFBQVEsQ0FBQztjQUMvQztZQUNGLENBQUMsTUFBTSxJQUFJaEIsU0FBUyxLQUFLLFVBQVUsRUFBRTtjQUNuQyxJQUFNeUMsWUFBWSxHQUFJTCxTQUFTLENBQUNDLE9BQU8sSUFBZWYsa0JBQWtCO2NBQ3hFLElBQU1vQixPQUFPLEdBQUlOLFNBQVMsQ0FBQ00sT0FBTyxJQUFnQixJQUFJO2NBQ3RELElBQU1DLGVBQWUsR0FBSVAsU0FBUyxDQUFDUSxpQkFBaUIsSUFBZSxFQUFFO2NBQ3JFLElBQU1DLFdBQVcsR0FBR3BFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDMEQsU0FBUyxDQUFDVSxhQUFhLENBQUMsR0FDckRWLFNBQVMsQ0FBQ1UsYUFBYSxHQUN4QnJFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDMEQsU0FBUyxDQUFDUyxXQUFXLENBQUMsR0FDakNULFNBQVMsQ0FBQ1MsV0FBVyxHQUN0QixJQUFJO2NBQ1Y1QixTQUFTLENBQUM4QixVQUFVLENBQUNOLFlBQVksRUFBRUMsT0FBTyxFQUFFQyxlQUFlLEVBQUUzQixRQUFRLEVBQUU2QixXQUFXLENBQUM7WUFDckYsQ0FBQyxNQUFNLElBQUk3QyxTQUFTLEtBQUssT0FBTyxFQUFFO2NBQ2hDaUIsU0FBUyxDQUFDK0IsT0FBTyxDQUFDWixTQUFTLENBQUM1QixLQUFLLEVBQUVRLFFBQVEsQ0FBQztZQUM5QztVQUNGLENBQUM7VUF0Q0tHLE1BQU0sSUFBQUQsY0FBQSxHQUFHSCxRQUFRLENBQUNrQyxJQUFJLGNBQUEvQixjQUFBLHVCQUFiQSxjQUFBLENBQWVnQyxTQUFTLENBQUMsQ0FBQztVQUFBLElBQ3BDL0IsTUFBTTtZQUFBWSxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1VBQUEsTUFDSCxJQUFJa0IsS0FBSyxDQUFDLHFCQUFxQixDQUFDO1FBQUE7VUFHbEMvQixPQUFPLEdBQUcsSUFBSWdDLFdBQVcsQ0FBQyxDQUFDO1VBQzdCL0IsTUFBTSxHQUFHLEVBQUU7VUFDWEMsa0JBQWtCLEdBQUcsRUFBRTtVQUN2QkMsZ0JBQWdCLEdBQUcsS0FBSztRQUFBO1VBQUEsSUFnQ3BCQSxnQkFBZ0I7WUFBQVEsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBRixRQUFBLENBQUFFLElBQUE7VUFBQSxPQUVRZCxNQUFNLENBQUNrQyxJQUFJLENBQUMsQ0FBQztRQUFBO1VBQUE1QixrQkFBQSxHQUFBTSxRQUFBLENBQUF1QixJQUFBO1VBQW5DNUIsSUFBSSxHQUFBRCxrQkFBQSxDQUFKQyxJQUFJO1VBQUVDLEtBQUssR0FBQUYsa0JBQUEsQ0FBTEUsS0FBSztVQUFBLEtBQ2ZELElBQUk7WUFBQUssUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUNOVixnQkFBZ0IsR0FBRyxJQUFJO1VBQUEsT0FBQVEsUUFBQSxDQUFBd0IsTUFBQTtRQUFBO1VBSXpCbEMsTUFBTSxJQUFJRCxPQUFPLENBQUNvQyxNQUFNLENBQUM3QixLQUFLLEVBQUU7WUFBRThCLE1BQU0sRUFBRTtVQUFLLENBQUMsQ0FBQztVQUMzQzdCLEtBQUssR0FBR1AsTUFBTSxDQUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQztVQUNsQzBCLE1BQU0sR0FBR08sS0FBSyxDQUFDOEIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFO1VBRTFCLEtBQVM3QixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdELEtBQUssQ0FBQytCLE1BQU0sRUFBRTlCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeENMLFVBQVUsQ0FBQ0ksS0FBSyxDQUFDQyxDQUFDLENBQUMsQ0FBQztVQUN0QjtVQUFDRSxRQUFBLENBQUFFLElBQUE7VUFBQTtRQUFBO1FBQUE7VUFBQSxPQUFBRixRQUFBLENBQUE2QixJQUFBO01BQUE7SUFBQSxHQUFBOUMsT0FBQTtFQUFBLENBRUo7RUFBQSxnQkF4RUtMLGdCQUFnQkEsQ0FBQW9ELEVBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBO0lBQUEsT0FBQXJELElBQUEsQ0FBQXNELEtBQUEsT0FBQUMsU0FBQTtFQUFBO0FBQUEsR0F3RXJCO0FBRUQsT0FBTyxJQUFNQyxjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUFDLEtBQUEsRUFLQTtFQUFBLElBSmpCQyxhQUFhLEdBQUFELEtBQUEsQ0FBckJFLE1BQU07SUFDTkMsa0JBQWtCLEdBQUFILEtBQUEsQ0FBbEJHLGtCQUFrQjtJQUNsQnRCLE9BQU8sR0FBQW1CLEtBQUEsQ0FBUG5CLE9BQU87SUFBQXVCLFlBQUEsR0FBQUosS0FBQSxDQUNQSyxNQUFNO0lBQU5BLE1BQU0sR0FBQUQsWUFBQSxjQUFHLEVBQUUsR0FBQUEsWUFBQTtFQUVYLElBQUFFLEtBQUEsR0FBYzlHLElBQUksQ0FBQyxDQUFDO0lBQVorRyxDQUFDLEdBQUFELEtBQUEsQ0FBREMsQ0FBQztFQUNULElBQU01RixRQUFRLEdBQUdsQixPQUFPLENBQUMsQ0FBQztFQUMxQixJQUFBK0csaUJBQUEsR0FVSTlHLGdCQUFnQixDQUFDLENBQUM7SUFUcEIrRyxPQUFPLEdBQUFELGlCQUFBLENBQVBDLE9BQU87SUFDUEMsVUFBVSxHQUFBRixpQkFBQSxDQUFWRSxVQUFVO0lBQ1ZDLE1BQU0sR0FBQUgsaUJBQUEsQ0FBTkcsTUFBTTtJQUNOQyxTQUFTLEdBQUFKLGlCQUFBLENBQVRJLFNBQVM7SUFDVEMsS0FBSyxHQUFBTCxpQkFBQSxDQUFMSyxLQUFLO0lBQ0xDLGlCQUFpQixHQUFBTixpQkFBQSxDQUFqQk0saUJBQWlCO0lBQ2pCQyxrQkFBa0IsR0FBQVAsaUJBQUEsQ0FBbEJPLGtCQUFrQjtJQUNsQkMsWUFBWSxHQUFBUixpQkFBQSxDQUFaUSxZQUFZO0lBQ1pDLGVBQWUsR0FBQVQsaUJBQUEsQ0FBZlMsZUFBZTtFQUVqQixJQUFNQyxLQUFLLEdBQUd0SCxRQUFRLENBQUMsQ0FBQztFQUN4QixJQUFBdUgsWUFBQSxHQUEwQm5ILFdBQVcsQ0FBQyxDQUFDO0lBQS9Cb0gsYUFBYSxHQUFBRCxZQUFBLENBQWJDLGFBQWE7RUFDckIsSUFBQUMsbUJBQUEsR0FBd0IzRyxrQkFBa0IsQ0FBQ0MsUUFBUSxDQUFDO0lBQTVDQyxXQUFXLEdBQUF5RyxtQkFBQSxDQUFYekcsV0FBVztFQUNuQixJQUFBMEcsa0JBQUEsR0FBOEJySCxpQkFBaUIsQ0FBQyxDQUFDO0lBQXpDc0gsaUJBQWlCLEdBQUFELGtCQUFBLENBQWpCQyxpQkFBaUI7RUFDekIsSUFBTUMsZ0JBQWdCLEdBQUd2SSxNQUFNLENBQUNJLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDekMsSUFBTW9JLG1CQUFtQixHQUFHeEksTUFBTSxDQUFnQixJQUFJLENBQUM7RUFDdkQsSUFBTXlJLGFBQWEsR0FBR3pJLE1BQU0sQ0FBQ2dILGFBQWEsSUFBSTVHLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDdkQsSUFBTXNJLGFBQWEsR0FBRzFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDbkMsSUFBTTJJLFdBQVcsR0FBRzNJLE1BQU0sQ0FBZ0IsRUFBRSxDQUFDO0VBQzdDLElBQU00SSxlQUFlLEdBQUc1SSxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQ3JDLElBQU02SSxZQUFZLEdBQUc3SSxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQ2xDLElBQUE4SSxTQUFBLEdBQTRDNUksUUFBUSxDQUF5QixDQUFDLENBQUMsQ0FBQztJQUFBNkksVUFBQSxHQUFBdEcsY0FBQSxDQUFBcUcsU0FBQTtJQUF6RUUsY0FBYyxHQUFBRCxVQUFBO0lBQUVFLGlCQUFpQixHQUFBRixVQUFBO0VBRXhDLElBQU1HLG9CQUFvQixHQUFHbEosTUFBTSxDQUFDNkgsaUJBQWlCLENBQUM7RUFDdEQsSUFBTXNCLHFCQUFxQixHQUFHbkosTUFBTSxDQUFDOEgsa0JBQWtCLENBQUM7RUFFeEQ3SCxTQUFTLENBQUMsWUFBTTtJQUNkaUosb0JBQW9CLENBQUNoSCxPQUFPLEdBQUcyRixpQkFBaUI7SUFDaERzQixxQkFBcUIsQ0FBQ2pILE9BQU8sR0FBRzRGLGtCQUFrQjtFQUNwRCxDQUFDLEVBQUUsQ0FBQ0QsaUJBQWlCLEVBQUVDLGtCQUFrQixDQUFDLENBQUM7RUFFM0MsSUFBQXNCLGdCQUFBLEdBQ0UvSSxlQUFlLENBQUM7TUFDZDRHLE1BQU0sRUFBRUQsYUFBYSxJQUFJeUIsYUFBYSxDQUFDdkcsT0FBTztNQUM5Q1AsV0FBVyxFQUFYQSxXQUFXO01BQ1h1RixrQkFBa0IsRUFBbEJBLGtCQUFrQjtNQUNsQnRCLE9BQU8sRUFBUEEsT0FBTztNQUNQd0IsTUFBTSxFQUFOQTtJQUNGLENBQUMsQ0FBQztJQVBJaUMsZUFBZSxHQUFBRCxnQkFBQSxDQUFmQyxlQUFlO0lBQUVDLFFBQVEsR0FBQUYsZ0JBQUEsQ0FBUkUsUUFBUTtJQUFFQyxxQkFBcUIsR0FBQUgsZ0JBQUEsQ0FBckJHLHFCQUFxQjtJQUFFQyxZQUFZLEdBQUFKLGdCQUFBLENBQVpJLFlBQVk7SUFBRUMsVUFBVSxHQUFBTCxnQkFBQSxDQUFWSyxVQUFVO0lBQUVDLGFBQWEsR0FBQU4sZ0JBQUEsQ0FBYk0sYUFBYTtJQUFFQyxZQUFZLEdBQUFQLGdCQUFBLENBQVpPLFlBQVk7RUFTL0doQixXQUFXLENBQUN6RyxPQUFPLEdBQUdvSCxRQUFRO0VBRTlCckosU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFNMkosV0FBVyxHQUFHLElBQUlDLFdBQVcsQ0FBQywrQkFBK0IsRUFBRTtNQUNuRUMsTUFBTSxFQUFFO1FBQUVULGVBQWUsRUFBZkE7TUFBZ0I7SUFDNUIsQ0FBQyxDQUFDO0lBQ0ZVLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSixXQUFXLENBQUM7RUFDckMsQ0FBQyxFQUFFLENBQUNQLGVBQWUsQ0FBQyxDQUFDO0VBRXJCcEosU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJK0csYUFBYSxJQUFJQSxhQUFhLEtBQUt5QixhQUFhLENBQUN2RyxPQUFPLEVBQUU7TUFDNUQ7TUFDQXVGLFVBQVUsQ0FBQyxJQUFJLENBQUM7TUFDaEJFLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUcsSUFBSSxDQUFDO01BQ2pCSyxlQUFlLENBQUMsSUFBSSxDQUFDO01BRXJCUyxhQUFhLENBQUN2RyxPQUFPLEdBQUc4RSxhQUFhO01BQ3JDdUIsZ0JBQWdCLENBQUNyRyxPQUFPLEdBQUc5QixNQUFNLENBQUMsQ0FBQztNQUNuQ29JLG1CQUFtQixDQUFDdEcsT0FBTyxHQUFHLElBQUk7TUFDbEN3RyxhQUFhLENBQUN4RyxPQUFPLEdBQUcsS0FBSztNQUM3QjBHLGVBQWUsQ0FBQzFHLE9BQU8sR0FBRyxLQUFLO01BRS9Cc0gsWUFBWSxDQUFDLENBQUM7SUFDaEI7RUFDRixDQUFDLEVBQUUsQ0FBQ3hDLGFBQWEsRUFBRVEsT0FBTyxFQUFFQyxVQUFVLEVBQUVFLFNBQVMsRUFBRUssZUFBZSxFQUFFd0IsWUFBWSxDQUFDLENBQUM7O0VBRWxGO0VBQ0F2SixTQUFTLENBQUMsWUFBTTtJQUNkLElBQUk4SCxZQUFZLElBQUlzQixlQUFlLEVBQUU7SUFDckMsSUFBTVksa0JBQWtCLEdBQUdYLFFBQVEsQ0FBQ1ksTUFBTSxDQUFDLFVBQUFDLEdBQUc7TUFBQSxPQUFJQSxHQUFHLENBQUNDLFNBQVM7SUFBQSxFQUFDLENBQUNDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxJQUFBQyxLQUFBLEdBQW1DTCxrQkFBa0IsSUFBSSxDQUFDLENBQUM7TUFBbkRHLFNBQVMsR0FBQUUsS0FBQSxDQUFURixTQUFTO01BQUVHLFdBQVcsR0FBQUQsS0FBQSxDQUFYQyxXQUFXO0lBQzlCLElBQUksQ0FBQ0gsU0FBUyxFQUFFO0lBRWhCakMsYUFBYSxDQUFDaUMsU0FBUyxDQUFDLENBQUNJLElBQUksQ0FBQyxVQUFBQyxRQUFRLEVBQUk7TUFDeEMsSUFBTUMsS0FBSyxHQUFHRCxRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRUUsSUFBSSxDQUFDLFVBQUFDLENBQUM7UUFBQSxPQUFJQyxNQUFNLENBQUNELENBQUMsQ0FBQ2hKLEVBQUUsQ0FBQyxLQUFLaUosTUFBTSxDQUFDVCxTQUFTLENBQUM7TUFBQSxFQUFDO01BQ3JFLElBQUlNLEtBQUssRUFBRTtRQUFBLElBQUFJLGFBQUE7UUFDVDlDLGVBQWUsQ0FBQztVQUNkdUMsV0FBVyxFQUFFRyxLQUFLLENBQUM1SSxJQUFJO1VBQ3ZCaUosVUFBVSxFQUFFLEVBQUFELGFBQUEsR0FBQUosS0FBSyxDQUFDaEQsTUFBTSxjQUFBb0QsYUFBQSx1QkFBWkEsYUFBQSxDQUFjaEosSUFBSSxLQUFJLEVBQUU7VUFDcENzSSxTQUFTLEVBQUVZLE1BQU0sQ0FBQ04sS0FBSyxDQUFDOUksRUFBRTtRQUM1QixDQUFDLENBQUM7UUFDRjZGLFVBQVUsQ0FBQ2lELEtBQUssQ0FBQztNQUNuQixDQUFDLE1BQU0sSUFBSUgsV0FBVyxFQUFFO1FBQ3RCdkMsZUFBZSxDQUFDO1VBQ2R1QyxXQUFXLEVBQVhBLFdBQVc7VUFDWFEsVUFBVSxFQUFFLEVBQUU7VUFDZFgsU0FBUyxFQUFFWSxNQUFNLENBQUNaLFNBQVM7UUFDN0IsQ0FBQyxDQUFDO1FBQ0YzQyxVQUFVLENBQUM7VUFBRTdGLEVBQUUsRUFBRWlKLE1BQU0sQ0FBQ1QsU0FBUyxDQUFDO1VBQUV0SSxJQUFJLEVBQUV5STtRQUFZLENBQUMsQ0FBQztNQUMxRDtJQUNGLENBQUMsQ0FBQztFQUNKLENBQUMsRUFBRSxDQUFDakIsUUFBUSxFQUFFdkIsWUFBWSxFQUFFc0IsZUFBZSxFQUFFbEIsYUFBYSxFQUFFSCxlQUFlLEVBQUVQLFVBQVUsQ0FBQyxDQUFDOztFQUV6RjtFQUNBeEgsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJeUgsTUFBTSxJQUFJMkIsZUFBZSxFQUFFO0lBQy9CLElBQU00QixpQkFBaUIsR0FBRzNCLFFBQVEsQ0FBQ1ksTUFBTSxDQUFDLFVBQUFDLEdBQUc7TUFBQSxPQUFJQSxHQUFHLENBQUNlLFFBQVEsSUFBSSxJQUFJLElBQUlmLEdBQUcsQ0FBQ1ksVUFBVTtJQUFBLEVBQUMsQ0FBQ1YsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9GLElBQUFjLEtBQUEsR0FBNkRGLGlCQUFpQixJQUFJLENBQUMsQ0FBQztNQUFsRUcsV0FBVyxHQUFBRCxLQUFBLENBQXJCRCxRQUFRO01BQTJCRyxhQUFhLEdBQUFGLEtBQUEsQ0FBekJKLFVBQVU7SUFDekMsSUFBSUssV0FBVyxJQUFJLElBQUksSUFBSSxDQUFDQyxhQUFhLEVBQUU7SUFFM0MxRCxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHO01BQUUvRixFQUFFLEVBQUVpSixNQUFNLENBQUNPLFdBQVcsQ0FBQztNQUFFdEosSUFBSSxFQUFFdUo7SUFBYyxDQUFDLENBQUM7RUFDL0QsQ0FBQyxFQUFFLENBQUMvQixRQUFRLEVBQUU1QixNQUFNLEVBQUUyQixlQUFlLEVBQUUxQixTQUFTLENBQUMsQ0FBQztFQUVsRCxJQUFNMkQsaUJBQWlCLEdBQUd2TCxXQUFXLENBQ25DLFVBQUN3TCxZQUFxQixFQUFLO0lBQ3pCLElBQU1wRyxPQUFPLEdBQ1hvRyxZQUFZLEtBQUssK0RBQStELEdBQzVFakUsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQzNCQSxDQUFDLENBQUMsWUFBWSxDQUFDO0lBRXJCbUMsVUFBVSxDQUFDO01BQ1Q3SCxFQUFFLFlBQUE0SixNQUFBLENBQVlqRCxnQkFBZ0IsQ0FBQ3JHLE9BQU8sQ0FBRTtNQUN4Q2lELE9BQU8sRUFBUEEsT0FBTztNQUNQc0csT0FBTyxFQUFFLElBQUk7TUFDYkMsSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO01BQ2hCQyxJQUFJLEVBQUU7UUFBRWhLLEVBQUUsRUFBRSxXQUFXO1FBQUVFLElBQUksRUFBRTtNQUFZLENBQUM7TUFDNUMrSixJQUFJLEVBQUUvSyxlQUFlLENBQUNnTDtJQUN4QixDQUFDLENBQUM7SUFDRmxELGVBQWUsQ0FBQzFHLE9BQU8sR0FBRyxLQUFLO0VBQ2pDLENBQUMsRUFDRCxDQUFDdUgsVUFBVSxFQUFFbkMsQ0FBQyxDQUNoQixDQUFDO0VBRUQsSUFBTXlFLGtCQUFrQixHQUFHaE0sV0FBVyxDQUNwQyxVQUFDa0YsT0FBZSxFQUFFSyxPQUFZLEVBQUVDLGVBQXVCLEVBQUs7SUFDMUQsSUFBTXlHLGFBQWEsYUFBQVIsTUFBQSxDQUFhakQsZ0JBQWdCLENBQUNyRyxPQUFPLGVBQVk7SUFFcEV1SCxVQUFVLENBQUM7TUFDVDdILEVBQUUsRUFBRW9LLGFBQWE7TUFDakI3RyxPQUFPLEVBQUVGLE9BQU87TUFDaEJ5RyxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7TUFDaEJDLElBQUksRUFBRTtRQUFFaEssRUFBRSxFQUFFLFdBQVc7UUFBRUUsSUFBSSxFQUFFO01BQVksQ0FBQztNQUM1QytKLElBQUksRUFBRS9LLGVBQWUsQ0FBQ2dMLFNBQVM7TUFDL0J4RyxPQUFPLEVBQVBBLE9BQU87TUFDUEMsZUFBZSxFQUFmQTtJQUNGLENBQUMsQ0FBQztFQUNKLENBQUMsRUFDRCxDQUFDa0UsVUFBVSxDQUNiLENBQUM7RUFFRCxJQUFNd0Msa0JBQWtCLEdBQUdsTSxXQUFXO0lBQUEsSUFBQW1NLEtBQUEsR0FBQTNJLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FDcEMsU0FBQTBJLFNBQU9sSCxPQUFlLEVBQUVLLE9BQVksRUFBRUMsZUFBdUIsRUFBRUUsV0FBNkI7TUFBQSxJQUFBMkcscUJBQUEsRUFBQUMsc0JBQUE7TUFBQSxJQUFBTCxhQUFBLEVBQUFNLFlBQUEsRUFBQUMsT0FBQSxFQUFBQyxZQUFBLEVBQUFDLGVBQUEsRUFBQUMsNEJBQUEsRUFBQUMsbUJBQUEsRUFBQUMsZUFBQSxFQUFBQyxlQUFBLEVBQUFDLFdBQUEsRUFBQUMsT0FBQSxFQUFBQyxHQUFBLEVBQUFDLFVBQUEsRUFBQUMsa0JBQUEsRUFBQUMsbUJBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsU0FBQSxFQUFBQyxjQUFBLEVBQUFDLHFCQUFBLEVBQUEzRCxXQUFBO01BQUEsT0FBQXBHLG1CQUFBLENBQUFrQixJQUFBLFdBQUE4SSxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQTVJLElBQUEsR0FBQTRJLFNBQUEsQ0FBQTNJLElBQUE7VUFBQTtZQUNwRm1ILGFBQWEsYUFBQVIsTUFBQSxDQUFhakQsZ0JBQWdCLENBQUNyRyxPQUFPO1lBQ3hEd0gsYUFBYSxDQUFDc0MsYUFBYSxDQUFDOztZQUU1QjtZQUNNTSxZQUFZLEdBQUcsSUFBSW1CLE1BQU0sQ0FBQ3hNLHNCQUFzQixFQUFFLEdBQUcsQ0FBQztZQUN0RHNMLE9BQU8sR0FBQW1CLGtCQUFBLENBQU96SSxPQUFPLENBQUMwSSxRQUFRLENBQUNyQixZQUFZLENBQUM7WUFFOUNFLFlBQVksR0FBR3ZILE9BQU87WUFDcEJ3SCxlQUFlLEdBQUc5RCxXQUFXLENBQUN6RyxPQUFPLENBQUNnSSxNQUFNLENBQUMsVUFBQTBELENBQUM7Y0FBQSxPQUFJQSxDQUFDLENBQUNoTSxFQUFFLEtBQUtvSyxhQUFhO1lBQUEsRUFBQyxDQUFDM0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hGcUMsNEJBQTRCLEdBQUcsQ0FBQUQsZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUVvQixRQUFRLEtBQUksSUFBSTtZQUNoRWxCLG1CQUFtQixHQUFHLENBQUMsYUFBYSxFQUFFLG9CQUFvQixDQUFDO1lBQzNEQyxlQUFlLEdBQUcsQ0FDdEIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixhQUFhLEVBQ2IsZUFBZSxFQUNmLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsbUJBQW1CLENBQ3BCO1lBQ0tDLGVBQWUsR0FDbkJILDRCQUE0QixLQUM1QkQsZUFBZSxhQUFmQSxlQUFlLGdCQUFBTCxxQkFBQSxHQUFmSyxlQUFlLENBQUVvQixRQUFRLGNBQUF6QixxQkFBQSxnQkFBQUEscUJBQUEsR0FBekJBLHFCQUFBLENBQTJCMEIsZUFBZSxjQUFBMUIscUJBQUEsdUJBQTFDQSxxQkFBQSxDQUE0QzJCLElBQUksQ0FBQyxVQUFDQyxNQUFXO2NBQUEsT0FDM0RyQixtQkFBbUIsQ0FBQ3NCLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDRSxTQUFTLENBQUM7WUFBQSxDQUNoRCxDQUFDO1lBQ0dwQixXQUFXLEdBQ2ZKLDRCQUE0QixLQUM1QkQsZUFBZSxhQUFmQSxlQUFlLGdCQUFBSixzQkFBQSxHQUFmSSxlQUFlLENBQUVvQixRQUFRLGNBQUF4QixzQkFBQSxnQkFBQUEsc0JBQUEsR0FBekJBLHNCQUFBLENBQTJCeUIsZUFBZSxjQUFBekIsc0JBQUEsdUJBQTFDQSxzQkFBQSxDQUE0QzBCLElBQUksQ0FBQyxVQUFDQyxNQUFXO2NBQUEsT0FBS3BCLGVBQWUsQ0FBQ3FCLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDRSxTQUFTLENBQUM7WUFBQSxFQUFDO1lBQUEsTUFDM0czQixPQUFPLENBQUNoRyxNQUFNLEdBQUcsQ0FBQyxJQUFJbUcsNEJBQTRCO2NBQUFjLFNBQUEsQ0FBQTNJLElBQUE7Y0FBQTtZQUFBO1lBQzlDa0ksT0FBTyxHQUFHUixPQUFPLENBQUM0QixHQUFHLENBQUMsVUFBQUMsS0FBSztjQUFBLE9BQUlDLFFBQVEsQ0FBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUFBLEVBQUM7WUFBQVosU0FBQSxDQUFBM0ksSUFBQTtZQUFBLE9BQzFDeUQsaUJBQWlCLENBQUN5RSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQTtZQUF6Q0MsR0FBRyxHQUFBUSxTQUFBLENBQUF0SCxJQUFBO1lBQ0grRyxVQUFVLEdBQUdELEdBQUcsT0FBQXhCLE1BQUEsQ0FBT3dCLEdBQUcsSUFBSyxTQUFTO1lBQzlDUixZQUFZLEdBQUd2SCxPQUFPLENBQUNwQyxPQUFPLENBQUN5SixZQUFZLEVBQUUsVUFBQWdDLEdBQUc7Y0FBQSxPQUM5Q0EsR0FBRyxDQUFDekwsT0FBTyxDQUFDLHlEQUF5RCxFQUFFb0ssVUFBVSxDQUFDO1lBQUEsQ0FDcEYsQ0FBQzs7WUFFRDtZQUNBLElBQUlKLGVBQWUsRUFBRTtjQUNiSyxrQkFBa0IsR0FBR3ZFLFdBQVcsQ0FBQ3pHLE9BQU8sQ0FBQ2dJLE1BQU0sQ0FBQyxVQUFBQyxHQUFHO2dCQUFBLE9BQUlBLEdBQUcsQ0FBQ0MsU0FBUztjQUFBLEVBQUMsQ0FBQ0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQzVFOEMsbUJBQW1CLEdBQUcsQ0FBQTNGLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFNUYsRUFBRSxNQUFJc0wsa0JBQWtCLGFBQWxCQSxrQkFBa0IsdUJBQWxCQSxrQkFBa0IsQ0FBRTlDLFNBQVM7Y0FDbEVnRCxnQkFBZ0IsR0FBR0QsbUJBQW1CLEdBQUdrQixRQUFRLENBQUNyRCxNQUFNLENBQUNtQyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUk7Y0FDekZFLFNBQVMsR0FBR2tCLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDQyxRQUFRLENBQUNMLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztjQUNsRWQsY0FBYyxHQUFHRCxTQUFTLEdBQUdnQixRQUFRLENBQUNoQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSTtjQUNwRSxJQUFJRCxnQkFBZ0IsSUFBSUUsY0FBYyxJQUFJRixnQkFBZ0IsS0FBS0UsY0FBYyxFQUFFO2dCQUM3RSxLQUFBQyxxQkFBQSxHQUFJZ0IsTUFBTSxDQUFDRyxtQkFBbUIsY0FBQW5CLHFCQUFBLGVBQTFCQSxxQkFBQSxDQUE0Qm9CLDBCQUEwQixFQUFFO2tCQUMxREosTUFBTSxDQUFDRyxtQkFBbUIsQ0FBQ0MsMEJBQTBCLENBQUM1QixPQUFPLENBQUM7Z0JBQ2hFO2NBQ0Y7WUFDRixDQUFDLE1BQU0sSUFBSUQsV0FBVyxFQUFFO2NBQ3RCO2NBQ0E7WUFBQTtVQUNEO1lBR0hyRCxVQUFVLENBQUM7Y0FDVDdILEVBQUUsWUFBQTRKLE1BQUEsQ0FBWWpHLGVBQWUsQ0FBRTtjQUMvQkosT0FBTyxFQUFFcUgsWUFBWTtjQUNyQmQsSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO2NBQ2hCQyxJQUFJLEVBQUU7Z0JBQUVoSyxFQUFFLEVBQUUsV0FBVztnQkFBRUUsSUFBSSxFQUFFO2NBQVksQ0FBQztjQUM1QytKLElBQUksRUFBRS9LLGVBQWUsQ0FBQ2dMLFNBQVM7Y0FDL0J4RyxPQUFPLEVBQVBBLE9BQU87Y0FDUEMsZUFBZSxFQUFmQSxlQUFlO2NBQ2ZFLFdBQVcsRUFBRUEsV0FBVyxJQUFJO1lBQzlCLENBQUMsQ0FBQztZQUVGbUQsZUFBZSxDQUFDMUcsT0FBTyxHQUFHLEtBQUs7WUFDL0IsSUFBSTJHLFlBQVksQ0FBQzNHLE9BQU8sRUFBRTtjQUNsQjBILFdBQVcsR0FBRyxJQUFJQyxXQUFXLENBQUMsaUJBQWlCLENBQUM7Y0FDdERFLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSixXQUFXLENBQUM7Y0FDbkNmLFlBQVksQ0FBQzNHLE9BQU8sR0FBRyxLQUFLO1lBQzlCO1VBQUM7VUFBQTtZQUFBLE9BQUFzTCxTQUFBLENBQUFoSCxJQUFBO1FBQUE7TUFBQSxHQUFBMkYsUUFBQTtJQUFBLENBQ0Y7SUFBQSxpQkFBQXlDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUE7TUFBQSxPQUFBN0MsS0FBQSxDQUFBdEYsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUNELENBQUM0QyxVQUFVLEVBQUVDLGFBQWEsRUFBRWxDLE9BQU8sRUFBRWMsaUJBQWlCLENBQ3hELENBQUM7RUFFRCxJQUFNMEcsZ0JBQWdCLEdBQUdqUCxXQUFXLENBQUMsWUFBTTtJQUN6QzBKLFVBQVUsQ0FBQztNQUNUN0gsRUFBRSxZQUFBNEosTUFBQSxDQUFZakQsZ0JBQWdCLENBQUNyRyxPQUFPLGVBQVk7TUFDbERpRCxPQUFPLEVBQUVtQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7TUFDNUJvRSxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7TUFDaEJDLElBQUksRUFBRTtRQUFFaEssRUFBRSxFQUFFLFdBQVc7UUFBRUUsSUFBSSxFQUFFO01BQVksQ0FBQztNQUM1QytKLElBQUksRUFBRS9LLGVBQWUsQ0FBQ2dMLFNBQVM7TUFDL0JtRCxtQkFBbUIsRUFBRTtJQUN2QixDQUFDLENBQUM7SUFDRnJHLGVBQWUsQ0FBQzFHLE9BQU8sR0FBRyxLQUFLO0lBQy9CZ04sVUFBVSxDQUFDLFlBQU07TUFDZixJQUFNdEYsV0FBVyxHQUFHLElBQUlDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztNQUN0REUsUUFBUSxDQUFDQyxhQUFhLENBQUNKLFdBQVcsQ0FBQztJQUNyQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQ1QsQ0FBQyxFQUFFLENBQUNILFVBQVUsRUFBRW5DLENBQUMsQ0FBQyxDQUFDO0VBRW5CLElBQU02SCxzQkFBc0IsR0FBR3BQLFdBQVcsQ0FDeEMsVUFBQzhOLFFBQXlCLEVBQUUzSixrQkFBMEIsRUFBSztJQUN6RCxJQUFNOEgsYUFBYSxhQUFBUixNQUFBLENBQWFqRCxnQkFBZ0IsQ0FBQ3JHLE9BQU8sZUFBWTtJQUNwRXdILGFBQWEsQ0FBQ3NDLGFBQWEsQ0FBQzs7SUFFNUI7SUFDQXZDLFVBQVUsQ0FBQztNQUNUN0gsRUFBRSxjQUFBNEosTUFBQSxDQUFjcUMsUUFBUSxDQUFDdUIsa0JBQWtCLENBQUU7TUFDN0NqSyxPQUFPLEVBQUVqQixrQkFBa0IsSUFBSSxFQUFFO01BQ2pDd0gsSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO01BQ2hCQyxJQUFJLEVBQUU7UUFBRWhLLEVBQUUsRUFBRSxXQUFXO1FBQUVFLElBQUksRUFBRTtNQUFZLENBQUM7TUFDNUMrSixJQUFJLEVBQUUvSyxlQUFlLENBQUNnTCxTQUFTO01BQy9CK0IsUUFBUSxFQUFSQSxRQUFRO01BQ1J3QixjQUFjLEVBQUU7SUFDbEIsQ0FBQyxDQUFDO0lBQ0Z6RyxlQUFlLENBQUMxRyxPQUFPLEdBQUcsS0FBSztFQUNqQyxDQUFDLEVBQ0QsQ0FBQ3VILFVBQVUsRUFBRUMsYUFBYSxDQUM1QixDQUFDO0VBRUQsSUFBQTRGLHFCQUFBLEdBTUloUCxxQkFBcUIsQ0FBQztNQUN4QnNGLE9BQU8sRUFBRTBGLGlCQUFpQjtNQUMxQmlFLGNBQWMsRUFBRXhELGtCQUFrQjtNQUNsQ3lELGNBQWMsRUFBRXZELGtCQUFrQjtNQUNsQ3dELE1BQU0sRUFBRVQsZ0JBQWdCO01BQ3hCVSxrQkFBa0IsRUFBRVA7SUFDdEIsQ0FBQyxDQUFDO0lBWEFRLE9BQU8sR0FBQUwscUJBQUEsQ0FBUEssT0FBTztJQUNJQyxlQUFlLEdBQUFOLHFCQUFBLENBQTFCTyxTQUFTO0lBQ1RDLFNBQVMsR0FBQVIscUJBQUEsQ0FBVFEsU0FBUztJQUNUQyxjQUFjLEdBQUFULHFCQUFBLENBQWRTLGNBQWM7SUFDZEMsYUFBYSxHQUFBVixxQkFBQSxDQUFiVSxhQUFhO0VBU2YsSUFBTUMsY0FBYyxHQUFHekksT0FBTztFQUU5QixJQUFNMEksV0FBVyxHQUFHblEsV0FBVztJQUFBLElBQUFvUSxLQUFBLEdBQUE1TSxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQzdCLFNBQUEyTSxTQUFPakwsT0FBZSxFQUFFaEUsb0JBQTRELEVBQUVrUCxLQUFjO01BQUEsSUFBQUMsb0JBQUEsRUFBQUMsZUFBQTtNQUFBLElBQUFDLHFCQUFBLEVBQUFqUCxXQUFBLEVBQUFDLE9BQUEsRUFBQWlQLFlBQUEsRUFBQUMsc0JBQUEsRUFBQUMsd0JBQUEsRUFBQUMsWUFBQSxFQUFBQyxxQkFBQSxFQUFBQyxPQUFBLEVBQUExRCxnQkFBQSxFQUFBMkQsb0JBQUEsRUFBQUMsZ0JBQUEsRUFBQWpNLE1BQUEsRUFBQTBGLFFBQUEsRUFBQXdHLFlBQUEsRUFBQUMsV0FBQTtNQUFBLE9BQUExTixtQkFBQSxDQUFBa0IsSUFBQSxXQUFBeU0sU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUF2TSxJQUFBLEdBQUF1TSxTQUFBLENBQUF0TSxJQUFBO1VBQUE7WUFBQSxNQUM5RitELGVBQWUsQ0FBQzFHLE9BQU8sSUFBSTBOLGVBQWUsSUFBSXZHLGVBQWU7Y0FBQThILFNBQUEsQ0FBQXRNLElBQUE7Y0FBQTtZQUFBO1lBQUEsT0FBQXNNLFNBQUEsQ0FBQWhMLE1BQUE7VUFBQTtZQUFBcUsscUJBQUEsR0FJaEN0UCx3QkFBd0IsQ0FBQ0Msb0JBQW9CLENBQUMsRUFBdkVJLFdBQVcsR0FBQWlQLHFCQUFBLENBQVhqUCxXQUFXLEVBQUVDLE9BQU8sR0FBQWdQLHFCQUFBLENBQVBoUCxPQUFPO1lBRTVCb0gsZUFBZSxDQUFDMUcsT0FBTyxHQUFHLElBQUk7WUFDeEJ1TyxZQUFZLEdBQUdyUSxNQUFNLENBQUMsQ0FBQztZQUM3Qm1JLGdCQUFnQixDQUFDckcsT0FBTyxHQUFHdU8sWUFBWTtZQUN2Q2pJLG1CQUFtQixDQUFDdEcsT0FBTyxHQUFHaUQsT0FBTztZQUVyQyxJQUFJLENBQUN1RCxhQUFhLENBQUN4RyxPQUFPLEVBQUU7Y0FDMUIrRixLQUFLLENBQUN2SCxNQUFNLENBQUMwUSxhQUFhLENBQUM7Y0FDM0IxSSxhQUFhLENBQUN4RyxPQUFPLEdBQUcsSUFBSTtZQUM5Qjs7WUFFQTtZQUNNd08sc0JBQXNCLEdBQUcvSCxXQUFXLENBQUN6RyxPQUFPLENBQUNnSSxNQUFNLENBQUMsVUFBQUMsR0FBRztjQUFBLE9BQUlBLEdBQUcsQ0FBQ0MsU0FBUztZQUFBLEVBQUMsQ0FBQ0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWhGc0csd0JBQXdCLElBQUFMLG9CQUFBLEdBQUczSCxXQUFXLENBQUN6RyxPQUFPLGNBQUFvTyxvQkFBQSxnQkFBQUEsb0JBQUEsR0FBbkJBLG9CQUFBLENBQXNCM0gsV0FBVyxDQUFDekcsT0FBTyxDQUFDcUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxjQUFBK0osb0JBQUEsdUJBQXJEQSxvQkFBQSxDQUF1RGUsT0FBTyxFQUUvRjtZQUNBNUgsVUFBVSxDQUFDO2NBQ1Q3SCxFQUFFLGNBQUE0SixNQUFBLENBQWNqRCxnQkFBZ0IsQ0FBQ3JHLE9BQU8sQ0FBRTtjQUMxQ2lELE9BQU8sRUFBUEEsT0FBTztjQUNQdUcsSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO2NBQ2hCQyxJQUFJLEVBQUVqSyxXQUFXO2NBQ2pCa0ssSUFBSSxFQUFFL0ssZUFBZSxDQUFDd1EsSUFBSTtjQUMxQmhNLE9BQU8sRUFBRS9EO1lBQ1gsQ0FBQyxDQUFDO1lBRUZnSCxnQkFBZ0IsQ0FBQ3JHLE9BQU8sR0FBRzlCLE1BQU0sQ0FBQyxDQUFDO1lBQy9Cd1EsWUFBWSxHQUFHekwsT0FBTztZQUUxQixJQUFJQSxPQUFPLEtBQUttQyxDQUFDLENBQUMsZ0NBQWdDLENBQUMsRUFBRTtjQUNuRHNKLFlBQVksV0FBQXBGLE1BQUEsQ0FBV2xFLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQywrQkFBQWtFLE1BQUEsQ0FDeEQsRUFBQXFGLHFCQUFBLEdBQUFyUCxPQUFPLENBQUMrUCxjQUFjLGNBQUFWLHFCQUFBLHVCQUF0QkEscUJBQUEsQ0FBd0JXLFVBQVUsTUFBSWhLLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFZ0ssVUFBVSxFQUN6RDtZQUNKO1lBRU1WLE9BQU8sR0FBR25JLFdBQVcsQ0FBQ3pHLE9BQU8sQ0FBQ2lNLEdBQUcsQ0FBQyxVQUFBc0QsY0FBYztjQUFBLE9BQUs7Z0JBQ3pEeE0sT0FBTyxFQUFFd00sY0FBYyxDQUFDdE0sT0FBTztnQkFDL0IwRyxJQUFJLEVBQUU0RixjQUFjLENBQUM3RixJQUFJLENBQUNoSyxFQUFFLEtBQUtGLFFBQVEsQ0FBQ0UsRUFBRSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxHQUFHZixlQUFlLENBQUN3USxJQUFJLEdBQUd4USxlQUFlLENBQUNnTDtjQUNuRyxDQUFDO1lBQUEsQ0FBQyxDQUFDLEVBRUg7WUFDTXNCLGdCQUFnQixHQUFHNUYsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUU1RixFQUFFO1lBQzlCbVAsb0JBQW9CLEdBQUdMLHNCQUFzQixhQUF0QkEsc0JBQXNCLHVCQUF0QkEsc0JBQXNCLENBQUV0RyxTQUFTO1lBRTFENEcsZ0JBQStCLEdBQUcsSUFBSSxFQUUxQztZQUNBLElBQUlELG9CQUFvQixJQUFJLElBQUksRUFBRTtjQUMxQmhNLE1BQU0sR0FBRzhGLE1BQU0sQ0FBQ2tHLG9CQUFvQixDQUFDO2NBQzNDQyxnQkFBZ0IsR0FBR25HLE1BQU0sQ0FBQzZHLFFBQVEsQ0FBQzNNLE1BQU0sQ0FBQyxHQUFHQSxNQUFNLEdBQUcsSUFBSTtZQUM1RDtZQUNBO1lBQUEsS0FDSyxJQUFJcUksZ0JBQWdCLElBQUksSUFBSSxFQUFFO2NBQ2pDNEQsZ0JBQWdCLEdBQUc1RCxnQkFBZ0I7WUFDckM7WUFBQytELFNBQUEsQ0FBQXRNLElBQUE7WUFBQSxPQUVzQnNELGFBQWEsQ0FBQyxDQUFDNkksZ0JBQWdCLENBQUMsQ0FBQztVQUFBO1lBQWxEdkcsUUFBUSxHQUFBMEcsU0FBQSxDQUFBakwsSUFBQTtZQUVSK0ssWUFBWSxHQUFHWixLQUFLLGFBQUxBLEtBQUssY0FBTEEsS0FBSyxHQUFJN08sT0FBTyxDQUFDNk8sS0FBSztZQUVyQ2EsV0FBVyxHQUFBUyxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUE7Y0FDZnhNLE9BQU8sRUFBRXlMLFlBQVk7Y0FDckJFLE9BQU8sRUFBUEEsT0FBTztjQUNQMUcsU0FBUyxFQUFFNEcsZ0JBQWdCO2NBQzNCWSxJQUFJLEVBQUVsUSxRQUFRLENBQUNrUSxJQUFJO2NBQ25CQyxNQUFNLEVBQUVuUSxRQUFRLENBQUNFLEVBQUUsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7Y0FDOUJFLFNBQVMsRUFBRUwsUUFBUSxDQUFDSyxTQUFTO2NBQzdCK1AsUUFBUSxFQUFFcFEsUUFBUSxDQUFDb1EsUUFBUTtjQUMzQkMsU0FBUyxFQUFFclEsUUFBUSxDQUFDc1EsVUFBVSxDQUFDblEsUUFBUSxDQUFDLENBQUM7Y0FDekNvRixNQUFNLEVBQUV3QixhQUFhLENBQUN2RyxPQUFPO2NBQzdCK1AsU0FBUyxFQUFFMUosZ0JBQWdCLENBQUNyRyxPQUFPO2NBQ25DZ1EsU0FBUyxFQUFFLENBQUF0SyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTlGLElBQUksS0FBSSxFQUFFO2NBQzVCdVAsT0FBTyxFQUFFVix3QkFBd0IsS0FBSS9JLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFaEcsRUFBRSxDQUFDO2NBQy9DaUcsaUJBQWlCLEVBQUVxQixvQkFBb0IsQ0FBQ2hILE9BQU87Y0FDL0M0RixrQkFBa0IsRUFBRXFCLHFCQUFxQixDQUFDakg7WUFBTyxHQUM3Q3dGLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUU5RixFQUFFLEdBQUErUCxhQUFBO2NBQ1J6RyxRQUFRLEVBQUV4RCxNQUFNLENBQUM5RjtZQUFFLEdBQU04RixNQUFNLENBQUM1RixJQUFJLEdBQUc7Y0FBRWlKLFVBQVUsRUFBRXJELE1BQU0sQ0FBQzVGO1lBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUN6RTBGLE9BQU8sYUFBUEEsT0FBTyxnQkFBQStJLGVBQUEsR0FBUC9JLE9BQU8sQ0FBRUUsTUFBTSxjQUFBNkksZUFBQSxlQUFmQSxlQUFBLENBQWlCM08sRUFBRSxHQUFBK1AsYUFBQTtjQUNmekcsUUFBUSxFQUFFMUQsT0FBTyxDQUFDRSxNQUFNLENBQUM5RjtZQUFFLEdBQU00RixPQUFPLENBQUNFLE1BQU0sQ0FBQzVGLElBQUksR0FBRztjQUFFaUosVUFBVSxFQUFFdkQsT0FBTyxDQUFDRSxNQUFNLENBQUM1RjtZQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFDakcsQ0FBQyxDQUFDLEdBQ0oySSxRQUFRLGFBQVJBLFFBQVEsZUFBUkEsUUFBUSxDQUFFbEUsTUFBTSxHQUFHO2NBQUVnRSxXQUFXLEVBQUVFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzNJO1lBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUN6RFAsV0FBVyxDQUFDZ0YsTUFBTSxHQUFHLENBQUMsR0FBRztjQUFFaEYsV0FBVyxFQUFYQTtZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDN0MwUCxZQUFZLEdBQUc7Y0FBRVosS0FBSyxFQUFFWTtZQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDM0MsQ0FBQXJKLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFdUssTUFBTSxLQUFJLElBQUksR0FBRztjQUFFQyxXQUFXLEVBQUV4SyxLQUFLLENBQUN1SztZQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFHaEV4QyxPQUFPLENBQUN1QixXQUFXLENBQUM7VUFBQTtVQUFBO1lBQUEsT0FBQUMsU0FBQSxDQUFBM0ssSUFBQTtRQUFBO01BQUEsR0FBQTRKLFFBQUE7SUFBQSxDQUNyQjtJQUFBLGlCQUFBaUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUE7TUFBQSxPQUFBcEMsS0FBQSxDQUFBdkosS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUNELENBQ0U0QyxVQUFVLEVBQ1Z4QixLQUFLLEVBQ0wwSCxPQUFPLEVBQ1BuSSxPQUFPLEVBQ1BFLE1BQU0sRUFDTmhHLFFBQVEsRUFDUmtHLEtBQUssRUFDTE4sQ0FBQyxFQUNEc0ksZUFBZSxFQUNmdkcsZUFBZSxFQUNmeEIsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsQ0FFdEIsQ0FBQztFQUVELElBQU0wSyxhQUFhLEdBQUd6UyxXQUFXLENBQy9CLFVBQUMwUyxNQUFlLEVBQUs7SUFDbkIsSUFBSSxDQUFDakssbUJBQW1CLENBQUN0RyxPQUFPLEVBQUU7SUFFbEMsSUFBSXVRLE1BQU0sQ0FBQzdRLEVBQUUsTUFBSzRGLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFNUYsRUFBRSxHQUFFO01BQzdCNkYsVUFBVSxDQUFDZ0wsTUFBTSxDQUFDO0lBQ3BCO0lBRUEsSUFBSWpMLE9BQU8sSUFBSWdCLG1CQUFtQixDQUFDdEcsT0FBTyxFQUFFO01BQzFDLElBQU00TyxPQUFPLEdBQUduSSxXQUFXLENBQUN6RyxPQUFPLENBQUNpTSxHQUFHLENBQUMsVUFBQXNELGNBQWM7UUFBQSxPQUFLO1VBQ3pEeE0sT0FBTyxFQUFFd00sY0FBYyxDQUFDdE0sT0FBTztVQUMvQjBHLElBQUksRUFBRTRGLGNBQWMsQ0FBQzdGLElBQUksQ0FBQ2hLLEVBQUUsS0FBS0YsUUFBUSxDQUFDRSxFQUFFLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEdBQUdmLGVBQWUsQ0FBQ3dRLElBQUksR0FBR3hRLGVBQWUsQ0FBQ2dMO1FBQ25HLENBQUM7TUFBQSxDQUFDLENBQUM7TUFFSDZELE9BQU8sQ0FBQWdDLGFBQUE7UUFDTHhNLE9BQU8sRUFBRXFELG1CQUFtQixDQUFDdEcsT0FBTztRQUNwQzRPLE9BQU8sRUFBUEEsT0FBTztRQUNQMUcsU0FBUyxFQUFFcUksTUFBTSxDQUFDN1EsRUFBRTtRQUNwQmdRLElBQUksRUFBRWxRLFFBQVEsQ0FBQ2tRLElBQUk7UUFDbkJDLE1BQU0sRUFBRW5RLFFBQVEsQ0FBQ0UsRUFBRSxDQUFDQyxRQUFRLENBQUMsQ0FBQztRQUM5QkUsU0FBUyxFQUFFTCxRQUFRLENBQUNLLFNBQVM7UUFDN0IrUCxRQUFRLEVBQUVwUSxRQUFRLENBQUNvUSxRQUFRO1FBQzNCQyxTQUFTLEVBQUVyUSxRQUFRLENBQUNzUSxVQUFVLENBQUNuUSxRQUFRLENBQUMsQ0FBQztRQUN6Q29GLE1BQU0sRUFBRXdCLGFBQWEsQ0FBQ3ZHLE9BQU87UUFDN0IrUCxTQUFTLEVBQUUxSixnQkFBZ0IsQ0FBQ3JHLE9BQU87UUFDbkNnUSxTQUFTLEVBQUUsQ0FBQXRLLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFOUYsSUFBSSxLQUFJLEVBQUU7UUFDNUJ1UCxPQUFPLEVBQUUsQ0FBQXpKLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFaEcsRUFBRSxLQUFJLEVBQUU7UUFDeEJpRyxpQkFBaUIsRUFBRXFCLG9CQUFvQixDQUFDaEgsT0FBTztRQUMvQzRGLGtCQUFrQixFQUFFcUIscUJBQXFCLENBQUNqSDtNQUFPLEdBQzdDLENBQUEwRixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXVLLE1BQU0sS0FBSSxJQUFJLEdBQUc7UUFBRUMsV0FBVyxFQUFFeEssS0FBSyxDQUFDdUs7TUFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQy9ELENBQUM7SUFDSjtFQUNGLENBQUMsRUFDRCxDQUFDM0ssT0FBTyxFQUFFQyxVQUFVLEVBQUVrSSxPQUFPLEVBQUVqTyxRQUFRLEVBQUVtRyxpQkFBaUIsRUFBRUQsS0FBSyxDQUNuRSxDQUFDO0VBRUQsSUFBTThLLGNBQWMsR0FBRzNTLFdBQVc7SUFBQSxJQUFBNFMsS0FBQSxHQUFBcFAsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFDLFNBQUFtUCxTQUFPQyxZQUFzQixFQUFFQyxhQUFxQjtNQUFBLElBQUFuUCxRQUFBO01BQUEsT0FBQUgsbUJBQUEsQ0FBQWtCLElBQUEsV0FBQXFPLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBbk8sSUFBQSxHQUFBbU8sU0FBQSxDQUFBbE8sSUFBQTtVQUFBO1lBQUFrTyxTQUFBLENBQUFsTyxJQUFBO1lBQUEsT0FDOURqRSxJQUFJLENBQUNvUyxLQUFLLENBQUNDLGNBQWMsQ0FBQ0gsYUFBYSxFQUFFRCxZQUFZLEtBQUtoUyxRQUFRLENBQUNxUyxTQUFTLENBQUM7VUFBQTtZQUE5RnZQLFFBQVEsR0FBQW9QLFNBQUEsQ0FBQTdNLElBQUE7WUFDZCxJQUFJdkMsUUFBUSxFQUFFO2NBQ1pnRixXQUFXLENBQUN6RyxPQUFPLEdBQUd5RyxXQUFXLENBQUN6RyxPQUFPLENBQUNpTSxHQUFHLENBQUMsVUFBQWhKLE9BQU8sRUFBSTtnQkFDdkQsSUFBSUEsT0FBTyxDQUFDdkQsRUFBRSxLQUFLa1IsYUFBYSxJQUFJM04sT0FBTyxDQUFDMEcsSUFBSSxLQUFLLFdBQVcsRUFBRTtrQkFDaEUsT0FBQThGLGFBQUEsQ0FBQUEsYUFBQSxLQUFZeE0sT0FBTztvQkFBRWdPLFVBQVUsRUFBRU4sWUFBWSxLQUFLaFMsUUFBUSxDQUFDcVM7a0JBQVM7Z0JBQ3RFO2dCQUNBLE9BQU8vTixPQUFPO2NBQ2hCLENBQUMsQ0FBQztZQUNKO1VBQUM7VUFBQTtZQUFBLE9BQUE0TixTQUFBLENBQUF2TSxJQUFBO1FBQUE7TUFBQSxHQUFBb00sUUFBQTtJQUFBLENBQ0Y7SUFBQSxpQkFBQVEsR0FBQSxFQUFBQyxJQUFBO01BQUEsT0FBQVYsS0FBQSxDQUFBL0wsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUFFLEVBQUUsQ0FBQztFQUVOLElBQU15TSxzQkFBc0IsR0FBR3ZULFdBQVc7SUFBQSxJQUFBd1QsS0FBQSxHQUFBaFEsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUN4QyxTQUFBK1AsU0FDRTVQLFFBQWdCLEVBQ2hCNlAsUUFBOEIsRUFDOUJDLGFBQTJFO01BQUEsSUFBQUMscUJBQUE7TUFBQSxJQUFBQyxtQkFBQSxFQUFBL0YsUUFBQSxFQUFBb0UsU0FBQSxFQUFBNEIsb0JBQUEsRUFBQUMsa0NBQUEsRUFBQUMsZUFBQSxFQUFBQyxTQUFBLEVBQUFyUSxRQUFBLEVBQUFzUSxFQUFBO01BQUEsT0FBQXpRLG1CQUFBLENBQUFrQixJQUFBLFdBQUF3UCxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQXRQLElBQUEsR0FBQXNQLFNBQUEsQ0FBQXJQLElBQUE7VUFBQTtZQUUzRTtZQUNNK08sbUJBQW1CLEdBQUdqTCxXQUFXLENBQUN6RyxPQUFPLENBQUN5SSxJQUFJLENBQUMsVUFBQWlELENBQUM7Y0FBQSxJQUFBdUcsV0FBQTtjQUFBLFFBQUFBLFdBQUEsR0FDcER2RyxDQUFDLENBQUNDLFFBQVEsY0FBQXNHLFdBQUEsZ0JBQUFBLFdBQUEsR0FBVkEsV0FBQSxDQUFZckcsZUFBZSxjQUFBcUcsV0FBQSx1QkFBM0JBLFdBQUEsQ0FBNkJwRyxJQUFJLENBQUMsVUFBQUMsTUFBTTtnQkFBQSxPQUFJQSxNQUFNLENBQUNvRyxTQUFTLEtBQUt4USxRQUFRO2NBQUEsRUFBQztZQUFBLENBQzVFLENBQUM7WUFBQSxNQUVHLENBQUNnUSxtQkFBbUIsSUFBSSxDQUFDQSxtQkFBbUIsQ0FBQy9GLFFBQVE7Y0FBQXFHLFNBQUEsQ0FBQXJQLElBQUE7Y0FBQTtZQUFBO1lBQ3ZEMUIsT0FBTyxDQUFDQyxLQUFLLENBQUMscURBQXFELEVBQUVRLFFBQVEsQ0FBQztZQUFBLE9BQUFzUSxTQUFBLENBQUEvTixNQUFBO1VBQUE7WUFJeEUwSCxRQUFRLEdBQUsrRixtQkFBbUIsQ0FBaEMvRixRQUFRO1lBQ1ZvRSxTQUFTLEdBQUcyQixtQkFBbUIsQ0FBQ2hTLEVBQUU7WUFDbENpUyxvQkFBb0IsSUFBQUYscUJBQUEsR0FBRzlGLFFBQVEsQ0FBQ0MsZUFBZSxjQUFBNkYscUJBQUEsdUJBQXhCQSxxQkFBQSxDQUEwQjVGLElBQUksQ0FBQyxVQUFBQyxNQUFNO2NBQUEsT0FBSUEsTUFBTSxDQUFDRSxTQUFTLEtBQUssY0FBYztZQUFBLEVBQUM7WUFDcEc0RixrQ0FBa0MsR0FBR0wsUUFBUSxLQUFLLFFBQVEsSUFBSUksb0JBQW9CLEVBRXhGO1lBQ0FsTCxXQUFXLENBQUN6RyxPQUFPLEdBQUd5RyxXQUFXLENBQUN6RyxPQUFPLENBQUNpTSxHQUFHLENBQUMsVUFBQWhKLE9BQU8sRUFBSTtjQUN2RCxJQUFJQSxPQUFPLENBQUN2RCxFQUFFLEtBQUtxUSxTQUFTLEVBQUU7Z0JBQzVCLElBQU0rQixTQUFTLEdBQUdQLFFBQVEsS0FBSyxTQUFTLEdBQUcsVUFBVSxHQUFHLFVBQVU7Z0JBQ2xFLE9BQUE5QixhQUFBLENBQUFBLGFBQUEsS0FBWXhNLE9BQU87a0JBQUVrSyxjQUFjLEVBQUUyRTtnQkFBUztjQUNoRDtjQUNBLE9BQU83TyxPQUFPO1lBQ2hCLENBQUMsQ0FBQzs7WUFFRjtZQUNNNE8sZUFBZSxHQUFHcEwsV0FBVyxDQUFDekcsT0FBTyxDQUFDeUksSUFBSSxDQUFDLFVBQUFpRCxDQUFDO2NBQUEsT0FBSUEsQ0FBQyxDQUFDaE0sRUFBRSxLQUFLcVEsU0FBUztZQUFBLEVBQUM7WUFDekUsSUFBSThCLGVBQWUsRUFBRTtjQUNiQyxTQUFTLEdBQUdQLFFBQVEsS0FBSyxTQUFTLEdBQUcsVUFBVSxHQUFHLFVBQVU7Y0FDbEVoSyxVQUFVLENBQUFrSSxhQUFBLENBQUFBLGFBQUEsS0FBTW9DLGVBQWU7Z0JBQUUxRSxjQUFjLEVBQUUyRTtjQUFTLEVBQUUsQ0FBQztZQUMvRDs7WUFFQTtZQUNBcEwsZUFBZSxDQUFDMUcsT0FBTyxHQUFHLElBQUk7WUFDOUJxRyxnQkFBZ0IsQ0FBQ3JHLE9BQU8sR0FBRzlCLE1BQU0sQ0FBQyxDQUFDOztZQUVuQztZQUNBNkksaUJBQWlCLENBQUMsVUFBQXJFLElBQUk7Y0FBQSxPQUFBK00sYUFBQSxDQUFBQSxhQUFBLEtBQ2pCL00sSUFBSSxPQUFBeVAsZUFBQSxLQUNOelEsUUFBUSxFQUFHMEQsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1lBQUEsQ0FDaEMsQ0FBQztZQUFBNE0sU0FBQSxDQUFBdFAsSUFBQTtZQUFBc1AsU0FBQSxDQUFBclAsSUFBQTtZQUFBLE9BR3NCakUsSUFBSSxDQUFDMFQsWUFBWSxDQUFDQyxjQUFjLENBQUM7Y0FDdEQzUSxRQUFRLEVBQVJBLFFBQVE7Y0FBRTtjQUNWNFEsU0FBUyxFQUFFM0csUUFBUSxDQUFDNEcsVUFBVTtjQUM5QmhCLFFBQVEsRUFBRUMsYUFBYSxHQUFHLE1BQU0sR0FBR0QsUUFBUTtjQUMzQ0MsYUFBYSxFQUFiQSxhQUFhO2NBQ2JyQyxPQUFPLEVBQUUsQ0FBQXpKLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFaEcsRUFBRSxLQUFJLEVBQUU7Y0FDeEJnUSxJQUFJLEVBQUVsUSxRQUFRLENBQUNrUTtZQUNqQixDQUFDLENBQUM7VUFBQTtZQVBJak8sUUFBUSxHQUFBdVEsU0FBQSxDQUFBaE8sSUFBQTtZQUFBLElBU1R2QyxRQUFRLENBQUMrUSxFQUFFO2NBQUFSLFNBQUEsQ0FBQXJQLElBQUE7Y0FBQTtZQUFBO1lBQ2R5RyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ25CO1lBQ0FyQyxpQkFBaUIsQ0FBQyxVQUFBckUsSUFBSSxFQUFJO2NBQ3hCLElBQU0rUCxXQUFXLEdBQUFoRCxhQUFBLEtBQVEvTSxJQUFJLENBQUU7Y0FDL0IsT0FBTytQLFdBQVcsQ0FBQy9RLFFBQVEsQ0FBQztjQUM1QixPQUFPK1EsV0FBVztZQUNwQixDQUFDLENBQUM7WUFBQSxPQUFBVCxTQUFBLENBQUEvTixNQUFBO1VBQUE7WUFBQStOLFNBQUEsQ0FBQXJQLElBQUE7WUFBQSxPQUtFeEIsZ0JBQWdCLENBQUNNLFFBQVEsRUFBRUMsUUFBUSxFQUFFO2NBQ3pDc0IsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUdELE9BQWUsRUFBSztnQkFDNUI4RyxrQkFBa0IsQ0FBQzlHLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO2NBQ3ZDLENBQUM7Y0FDREcsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUdELE9BQWUsRUFBRXlQLGVBQXVCLEVBQUs7Z0JBQ3BEO2dCQUNBLElBQU1DLFVBQVUsR0FBRzFQLE9BQU8sQ0FBQzhJLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRzlJLE9BQU8sR0FBR21DLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDeEYyQixpQkFBaUIsQ0FBQyxVQUFBckUsSUFBSTtrQkFBQSxPQUFBK00sYUFBQSxDQUFBQSxhQUFBLEtBQ2pCL00sSUFBSSxPQUFBeVAsZUFBQSxLQUNOTyxlQUFlLEVBQUdDLFVBQVU7Z0JBQUEsQ0FDN0IsQ0FBQztjQUNMLENBQUM7Y0FDRGxQLFVBQVUsRUFBRSxTQUFaQSxVQUFVQSxDQUNSTixZQUFvQixFQUNwQkMsT0FBWSxFQUNaQyxlQUF1QixFQUN2QnFQLGVBQXVCLEVBQ3ZCblAsV0FBNkIsRUFDMUI7Z0JBQ0h3RyxrQkFBa0IsQ0FBQzVHLFlBQVksRUFBRUMsT0FBTyxFQUFFQyxlQUFlLEVBQUVFLFdBQVcsQ0FBQztnQkFDdkUsSUFBSXFPLGtDQUFrQyxFQUFFO2tCQUN0Qy9KLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLElBQUlILFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUNsRTtnQkFDQVosaUJBQWlCLENBQUMsVUFBQXJFLElBQUksRUFBSTtrQkFDeEIsSUFBTStQLFdBQVcsR0FBQWhELGFBQUEsS0FBUS9NLElBQUksQ0FBRTtrQkFDL0IsT0FBTytQLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDO2tCQUNuQyxPQUFPRCxXQUFXO2dCQUNwQixDQUFDLENBQUM7Y0FDSixDQUFDO2NBQ0QvTyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBR3hDLEtBQVUsRUFBRXdSLGVBQXVCLEVBQUs7Z0JBQ2hEelIsT0FBTyxDQUFDQyxLQUFLLENBQUMsWUFBWSxFQUFFQSxLQUFLLENBQUM7Z0JBQ2xDa0ksaUJBQWlCLENBQUMsQ0FBQztnQkFDbkJyQyxpQkFBaUIsQ0FBQyxVQUFBckUsSUFBSSxFQUFJO2tCQUN4QixJQUFNK1AsV0FBVyxHQUFBaEQsYUFBQSxLQUFRL00sSUFBSSxDQUFFO2tCQUMvQixPQUFPK1AsV0FBVyxDQUFDQyxlQUFlLENBQUM7a0JBQ25DLE9BQU9ELFdBQVc7Z0JBQ3BCLENBQUMsQ0FBQztjQUNKO1lBQ0YsQ0FBQyxDQUFDO1VBQUE7WUFBQVQsU0FBQSxDQUFBclAsSUFBQTtZQUFBO1VBQUE7WUFBQXFQLFNBQUEsQ0FBQXRQLElBQUE7WUFBQXFQLEVBQUEsR0FBQUMsU0FBQTtZQUVGNUksaUJBQWlCLENBQUMsQ0FBQztZQUNuQjtZQUNBckMsaUJBQWlCLENBQUMsVUFBQXJFLElBQUksRUFBSTtjQUN4QixJQUFNK1AsV0FBVyxHQUFBaEQsYUFBQSxLQUFRL00sSUFBSSxDQUFFO2NBQy9CLE9BQU8rUCxXQUFXLENBQUMvUSxRQUFRLENBQUM7Y0FDNUIsT0FBTytRLFdBQVc7WUFDcEIsQ0FBQyxDQUFDO1VBQUE7VUFBQTtZQUFBLE9BQUFULFNBQUEsQ0FBQTFOLElBQUE7UUFBQTtNQUFBLEdBQUFnTixRQUFBO0lBQUEsQ0FFTDtJQUFBLGlCQUFBc0IsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUE7TUFBQSxPQUFBekIsS0FBQSxDQUFBM00sS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUNELENBQUNuRixRQUFRLEVBQUVrRyxLQUFLLEVBQUU2QixVQUFVLEVBQUU2QixpQkFBaUIsRUFBRVMsa0JBQWtCLEVBQUVFLGtCQUFrQixDQUN6RixDQUFDO0VBRUQsSUFBTWdKLGNBQWMsR0FBR2xWLFdBQVcsY0FBQXdELGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBQyxTQUFBeVIsU0FBQTtJQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGFBQUEsRUFBQTNFLE9BQUE7SUFBQSxPQUFBdE4sbUJBQUEsQ0FBQWtCLElBQUEsV0FBQWdSLFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBOVEsSUFBQSxHQUFBOFEsU0FBQSxDQUFBN1EsSUFBQTtRQUFBO1VBQ2pDLElBQUksQ0FBQ2dFLFlBQVksQ0FBQzNHLE9BQU8sRUFBRTtZQUN6QjJHLFlBQVksQ0FBQzNHLE9BQU8sR0FBRyxJQUFJO1VBQzdCO1VBQUMsS0FDRzhFLGFBQWE7WUFBQTBPLFNBQUEsQ0FBQTdRLElBQUE7WUFBQTtVQUFBO1VBQUE2USxTQUFBLENBQUE3USxJQUFBO1VBQUEsT0FDVDJFLFlBQVksQ0FBQyxDQUFDO1FBQUE7VUFBQWtNLFNBQUEsQ0FBQTdRLElBQUE7VUFBQTtRQUFBO1VBQUEsS0FDWHFDLGtCQUFrQjtZQUFBd08sU0FBQSxDQUFBN1EsSUFBQTtZQUFBO1VBQUE7VUFDckIwUSxpQkFBaUIsR0FBR0ksT0FBTyxFQUFBUixxQkFBQSxHQUFDak8sa0JBQWtCLENBQUMvQixPQUFPLGNBQUFnUSxxQkFBQSx1QkFBMUJBLHFCQUFBLENBQTRCOVMsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUMvRG1ULHFCQUFxQixHQUFHRyxPQUFPLEVBQUFQLHFCQUFBLEdBQUNsTyxrQkFBa0IsQ0FBQzNGLFdBQVcsY0FBQTZULHFCQUFBLHVCQUE5QkEscUJBQUEsQ0FBZ0M3TyxNQUFNLENBQUM7VUFDdkVrUCxhQUFhLEdBQUdFLE9BQU8sQ0FBQ3pPLGtCQUFrQixDQUFDbUosS0FBSyxDQUFDO1VBQUEsTUFFbkQsQ0FBQ2tGLGlCQUFpQixJQUFJLENBQUNDLHFCQUFxQixJQUFJLENBQUNDLGFBQWE7WUFBQUMsU0FBQSxDQUFBN1EsSUFBQTtZQUFBO1VBQUE7VUFBQSxPQUFBNlEsU0FBQSxDQUFBdlAsTUFBQTtRQUFBO1VBSTVEMkssT0FBTyxHQUFHbkksV0FBVyxDQUFDekcsT0FBTyxDQUFDaU0sR0FBRyxDQUFDLFVBQUFzRCxjQUFjO1lBQUEsT0FBSztjQUN6RHhNLE9BQU8sRUFBRXdNLGNBQWMsQ0FBQ3RNLE9BQU87Y0FDL0IwRyxJQUFJLEVBQUU0RixjQUFjLENBQUM3RixJQUFJLENBQUNoSyxFQUFFLEtBQUtGLFFBQVEsQ0FBQ0UsRUFBRSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxHQUFHZixlQUFlLENBQUN3USxJQUFJLEdBQUd4USxlQUFlLENBQUNnTDtZQUNuRyxDQUFDO1VBQUEsQ0FBQyxDQUFDO1VBRUg2RCxPQUFPLENBQUFnQyxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQTtZQUNMeE0sT0FBTyxFQUFFK0Isa0JBQWtCLENBQUMvQixPQUFPO1lBQ25DMkwsT0FBTyxFQUFQQSxPQUFPO1lBQ1AxRyxTQUFTLEVBQUUsQ0FBQTVDLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFNUYsRUFBRSxLQUFJLElBQUk7WUFDOUJnUSxJQUFJLEVBQUVsUSxRQUFRLENBQUNrUSxJQUFJO1lBQ25CQyxNQUFNLEVBQUVuUSxRQUFRLENBQUNFLEVBQUUsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7WUFDOUJFLFNBQVMsRUFBRUwsUUFBUSxDQUFDSyxTQUFTO1lBQzdCK1AsUUFBUSxFQUFFcFEsUUFBUSxDQUFDb1EsUUFBUTtZQUMzQkMsU0FBUyxFQUFFclEsUUFBUSxDQUFDc1EsVUFBVSxDQUFDblEsUUFBUSxDQUFDLENBQUM7WUFDekNvRixNQUFNLEVBQUV3QixhQUFhLENBQUN2RyxPQUFPO1lBQzdCK1AsU0FBUyxFQUFFMUosZ0JBQWdCLENBQUNyRyxPQUFPO1lBQ25DZ1EsU0FBUyxFQUFFdEssS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU5RixJQUFLO1lBQ3ZCdVAsT0FBTyxFQUFFekosS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVoRyxFQUFHO1lBQ25CaUcsaUJBQWlCLEVBQUVxQixvQkFBb0IsQ0FBQ2hILE9BQU87WUFDL0M0RixrQkFBa0IsRUFBRXFCLHFCQUFxQixDQUFDakg7VUFBTyxHQUM3Q3dGLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUU5RixFQUFFLEdBQUc7WUFBRXNKLFFBQVEsRUFBRXhELE1BQU0sQ0FBQzlGO1VBQUcsQ0FBQyxHQUFHNEYsT0FBTyxhQUFQQSxPQUFPLGdCQUFBNk4sZ0JBQUEsR0FBUDdOLE9BQU8sQ0FBRUUsTUFBTSxjQUFBMk4sZ0JBQUEsZUFBZkEsZ0JBQUEsQ0FBaUJ6VCxFQUFFLEdBQUc7WUFBRXNKLFFBQVEsRUFBRTFELE9BQU8sQ0FBQ0UsTUFBTSxDQUFDOUY7VUFBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ2pHNEYsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRTFGLElBQUksR0FBRztZQUFFeUksV0FBVyxFQUFFL0MsT0FBTyxDQUFDMUY7VUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ2xEMEYsT0FBTyxhQUFQQSxPQUFPLGdCQUFBOE4sZ0JBQUEsR0FBUDlOLE9BQU8sQ0FBRUUsTUFBTSxjQUFBNE4sZ0JBQUEsZUFBZkEsZ0JBQUEsQ0FBaUJ4VCxJQUFJLEdBQ3JCO1lBQUVpSixVQUFVLEVBQUV2RCxPQUFPLENBQUNFLE1BQU0sQ0FBQzVGO1VBQUssQ0FBQyxHQUNuQzRGLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUU1RixJQUFJLEdBQ1Y7WUFBRWlKLFVBQVUsRUFBRXJELE1BQU0sQ0FBQzVGO1VBQUssQ0FBQyxHQUMzQixDQUFDLENBQUMsR0FDSm9GLGtCQUFrQixDQUFDM0YsV0FBVyxHQUFHO1lBQUVBLFdBQVcsRUFBRTJGLGtCQUFrQixDQUFDM0Y7VUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3JGMkYsa0JBQWtCLENBQUNtSixLQUFLLEdBQUc7WUFBRUEsS0FBSyxFQUFFbkosa0JBQWtCLENBQUNtSjtVQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDbkUsQ0FBQXpJLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFdUssTUFBTSxLQUFJLElBQUksR0FBRztZQUFFQyxXQUFXLEVBQUV4SyxLQUFLLENBQUN1SztVQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDL0QsQ0FBQztRQUFBO1FBQUE7VUFBQSxPQUFBdUQsU0FBQSxDQUFBbFAsSUFBQTtNQUFBO0lBQUEsR0FBQTBPLFFBQUE7RUFBQSxDQUVMLElBQUUsQ0FDRGxPLGFBQWEsRUFDYkUsa0JBQWtCLEVBQ2xCTSxPQUFPLEVBQ1BFLE1BQU0sRUFDTmhHLFFBQVEsRUFDUmtHLEtBQUssRUFDTCtILE9BQU8sRUFDUDlILGlCQUFpQixFQUNqQkMsa0JBQWtCLENBQ25CLENBQUM7RUFFRixJQUFNOE4sU0FBUyxHQUFHN1YsV0FBVyxDQUFDLFlBQU07SUFDbEN3SSxnQkFBZ0IsQ0FBQ3JHLE9BQU8sR0FBRzlCLE1BQU0sQ0FBQyxDQUFDO0lBQ25Db0ksbUJBQW1CLENBQUN0RyxPQUFPLEdBQUcsSUFBSTtJQUNsQ3VHLGFBQWEsQ0FBQ3ZHLE9BQU8sR0FBRzlCLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDc0ksYUFBYSxDQUFDeEcsT0FBTyxHQUFHLEtBQUs7RUFDL0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQU0yVCxjQUFjLEdBQUc5VixXQUFXLENBQUMsWUFBTTtJQUN2Q2lRLGFBQWEsQ0FBQyxDQUFDO0lBQ2ZwSCxlQUFlLENBQUMxRyxPQUFPLEdBQUcsS0FBSztFQUNqQyxDQUFDLEVBQUUsQ0FBQzhOLGFBQWEsQ0FBQyxDQUFDO0VBRW5CLE9BQU87SUFDTDFHLFFBQVEsRUFBUkEsUUFBUTtJQUNSRCxlQUFlLEVBQWZBLGVBQWU7SUFDZkUscUJBQXFCLEVBQXJCQSxxQkFBcUI7SUFDckJxRyxlQUFlLEVBQWZBLGVBQWU7SUFDZkUsU0FBUyxFQUFUQSxTQUFTO0lBQ1RDLGNBQWMsRUFBZEEsY0FBYztJQUNkL0csY0FBYyxFQUFkQSxjQUFjO0lBQ2RpSCxjQUFjLEVBQWRBLGNBQWM7SUFDZHhILGFBQWEsRUFBRUEsYUFBYSxDQUFDdkcsT0FBTztJQUNwQ3FHLGdCQUFnQixFQUFFQSxnQkFBZ0IsQ0FBQ3JHLE9BQU87SUFFMUNnTyxXQUFXLEVBQVhBLFdBQVc7SUFDWHNDLGFBQWEsRUFBYkEsYUFBYTtJQUNiRSxjQUFjLEVBQWRBLGNBQWM7SUFDZFksc0JBQXNCLEVBQXRCQSxzQkFBc0I7SUFDdEIzSixZQUFZLEVBQVpBLFlBQVk7SUFDWnNMLGNBQWMsRUFBZEEsY0FBYztJQUNkVyxTQUFTLEVBQVRBLFNBQVM7SUFDVEMsY0FBYyxFQUFkQSxjQUFjO0lBRWRDLFVBQVUsRUFBRWxHLGVBQWUsSUFBSXZHO0VBQ2pDLENBQUM7QUFDSCxDQUFDIiwiaWdub3JlTGlzdCI6W119
848
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJfb3B0aW9ucyRhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dGFjaG1lbnRzIiwib3B0aW9ucyIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJpZCIsInRvU3RyaW5nIiwibmFtZSIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsInRyaW0iLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJ0aHJlYWRJZCIsImNhbGxiYWNrcyIsIl9yZXNwb25zZSRib2R5IiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImlzU3RyZWFtQ29tcGxldGUiLCJoYW5kbGVMaW5lIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJpIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJfaGFuZGxlTGluZSIsInBhcnNlZCIsImV2ZW50RGF0YSIsImNvbnRlbnQiLCJvblRva2VuIiwibWVzc2FnZSIsIm9uTm9kZSIsImZpbmFsQ29udGVudCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsIm9uQ29tcGxldGUiLCJvbkVycm9yIiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJyZWFkIiwic2VudCIsImFicnVwdCIsImRlY29kZSIsInN0cmVhbSIsInBvcCIsImxlbmd0aCIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwidXNlQ2hhdE1hbmFnZXIiLCJfcmVmMiIsImluaXRpYWxDaGF0SWQiLCJjaGF0SWQiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJfcmVmMiRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInByb2plY3QiLCJzZXRQcm9qZWN0IiwiY2xpZW50Iiwic2V0Q2xpZW50IiwiYWdlbnQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImNoaXBzUHJvamVjdCIsInNldENoaXBzUHJvamVjdCIsImV2ZW50IiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VTdGFibGVDYWxsYmFja3MiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsImN1cnJlbnRNZXNzYWdlSWQiLCJjdXJyZW50VXNlclF1ZXN0aW9uIiwiY3VycmVudENoYXRJZCIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImlzUHJvY2Vzc2luZ1JlZiIsImZpcnN0VGltZVJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJhY3RpdmVMb2FkaW5ncyIsInNldEFjdGl2ZUxvYWRpbmdzIiwiaXNXZWJTZWFyY2hBY3RpdmVSZWYiLCJpc0RlZXBTZWFyY2hBY3RpdmVSZWYiLCJfdXNlQ2hhdE1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwibWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJsb2FkTWVzc2FnZXMiLCJhZGRNZXNzYWdlIiwicmVtb3ZlTWVzc2FnZSIsImhhbmRsZVNjcm9sbCIsImN1c3RvbUV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJsYXN0TXNnV2l0aFByb2plY3QiLCJmaWx0ZXIiLCJtc2ciLCJwcm9qZWN0SWQiLCJhdCIsIl9yZWYzIiwicHJvamVjdE5hbWUiLCJ0aGVuIiwicHJvamVjdHMiLCJmb3VuZCIsImZpbmQiLCJwIiwiTnVtYmVyIiwiX2ZvdW5kJGNsaWVudCIsImNsaWVudE5hbWUiLCJTdHJpbmciLCJsYXN0TXNnV2l0aENsaWVudCIsImNsaWVudElkIiwiX3JlZjQiLCJtc2dDbGllbnRJZCIsIm1zZ0NsaWVudE5hbWUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImVycm9yTWVzc2FnZSIsImNvbmNhdCIsImlzRXJyb3IiLCJkYXRlIiwiRGF0ZSIsInVzZXIiLCJyb2xlIiwiQVNTSVNUQU5UIiwiaGFuZGxlU3RyZWFtVXBkYXRlIiwidGVtcE1lc3NhZ2VJZCIsImhhbmRsZVN0cmVhbUZpbmlzaCIsIl9yZWY1IiwiX2NhbGxlZTIiLCJfcHJldmlvdXNNZXNzYWdlJGFwcHIiLCJ0YXNrVXJsUmVnZXgiLCJtYXRjaGVzIiwiY29udGVudFRvQWRkIiwicHJldmlvdXNNZXNzYWdlIiwiaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSIsIlRBU0tfQ1JFQVRJT05fVE9PTFMiLCJUQVNLX0VESVRfVE9PTFMiLCJUQVNLX0RFTEVURV9UT09MUyIsInBlbmRpbmdBY3Rpb25zIiwid2FzVGFza0NyZWF0aW9uIiwid2FzVGFza0VkaXQiLCJ3YXNUYXNrRGVsZXRlIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiaXNPblByb2plY3RSb3V0ZSIsIl93aW5kb3ckbmV3UHJvamVjdERhcyIsIl93aW5kb3ckbmV3UHJvamVjdERhczIiLCJfd2luZG93JG5ld1Byb2plY3REYXMzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNCIsIl93aW5kb3ckbmV3UHJvamVjdERhczUiLCJfd2luZG93JG5ld1Byb2plY3REYXM2IiwiX2NvbnRleHQyIiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwiYWN0aW9uIiwiaW5jbHVkZXMiLCJ0b29sX25hbWUiLCJtYXAiLCJtYXRjaCIsInBhcnNlSW50IiwidXJsIiwid2luZG93IiwibG9jYXRpb24iLCJwYXRobmFtZSIsIm5ld1Byb2plY3REYXNoYm9hcmQiLCJhZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZCIsImNhbGwiLCJlZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQiLCJkZWxldGVFeGlzdGluZ1Rhc2tGcm9tRGFzaGJvYXJkIiwiX3g0IiwiX3g1IiwiX3g2IiwiaGFuZGxlU3RyZWFtU3RvcCIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJzZXRUaW1lb3V0IiwiaGFuZGxlQXBwcm92YWxSZXF1aXJlZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsImFwcHJvdmFsU3RhdHVzIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsIm9uQXBwcm92YWxSZXF1aXJlZCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjYiLCJfY2FsbGVlMyIsImZhcUlkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJfcHJvamVjdCRjbGllbnQiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJuZXdNZXNzYWdlSWQiLCJsYXN0TWVzc2FnZVdpdGhQcm9qZWN0IiwiY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInBheWxvYWRGYXFJZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQzIiwicG1BaVR5cGVkVGV4dCIsImFnZW50SWQiLCJVU0VSIiwicHJvamVjdENoYW5nZWQiLCJpbmNvbWVUeXBlIiwiaGlzdG9yeU1lc3NhZ2UiLCJpc0Zpbml0ZSIsIl9vYmplY3RTcHJlYWQiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwibWVzc2FnZUlkIiwiYWdlbnROYW1lIiwiX3g3IiwiX3g4IiwiX3g5IiwiY2hhbmdlUHJvamVjdCIsIm9wdGlvbiIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjciLCJfY2FsbGVlNCIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJfY29udGV4dDQiLCJDaGF0cyIsIndhc0hlbHBmdWxDaGF0IiwiVEhVTUJTX1VQIiwid2FzSGVscGZ1bCIsIl94MCIsIl94MSIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmOCIsIl9jYWxsZWU1IiwiZGVjaXNpb24iLCJlZGl0ZWRBY3Rpb25zIiwibWVzc2FnZVdpdGhBcHByb3ZhbCIsImV4aXN0aW5nTWVzc2FnZSIsIm5ld1N0YXR1cyIsIl90IiwiX2NvbnRleHQ1IiwiX20kYXBwcm92YWwiLCJ0aHJlYWRfaWQiLCJfZGVmaW5lUHJvcGVydHkiLCJPcmNoZXN0cmF0b3IiLCJjb250aW51ZVRocmVhZCIsInNlc3Npb25JZCIsInNlc3Npb25faWQiLCJvayIsIm5ld0xvYWRpbmdzIiwiY3VycmVudFRocmVhZElkIiwiZGlzcGxheU1zZyIsIl94MTAiLCJfeDExIiwiX3gxMiIsImluaXRpYWxpemVDaGF0IiwiX2NhbGxlZTYiLCJfcHJvamVjdCRjbGllbnQyIiwiX3Byb2plY3QkY2xpZW50MyIsIl9jb250ZXh0NiIsInJlc2V0Q2hhdCIsInN0b3BHZW5lcmF0aW9uIiwiaXNEaXNhYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByYWRpeCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRlZC1vcHRpb25hbC1jaGFpbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IHVzZUNoYXRNZXNzYWdlcyB9IGZyb20gJy4uL3VzZUNoYXRNZXNzYWdlcydcbmltcG9ydCB7IHVzZU9yY2hlc3RyYXRvclN0cmVhbSB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbSdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi91c2VUJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBTZW5kTWVzc2FnZU9wdGlvbnMsIFVzZUNoYXRNYW5hZ2VyUHJvcHMgfSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZSdcbmltcG9ydCB7IHVzZVVzZXIsIENPUlVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vdXNlRXZlbnQnXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlVXNlciwgQ2hhdEhpc3RvcnlSb2xlLCBBcHByb3ZhbFJlcXVlc3QgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IHVzZVByb2plY3RzIH0gZnJvbSAnLi4vdXNlUHJvamVjdHMnXG5pbXBvcnQgeyB1c2VUYWJUYXNrRGVmYXVsdCB9IGZyb20gJy4uL3VzZVRhYlRhc2tEZWZhdWx0J1xuaW1wb3J0IHsgVEFTS19VUkxfUkVHRVhfUEFUVEVSTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90YXNrVXJscydcblxudHlwZSBBdHRhY2htZW50c09yT3B0aW9ucyA9IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnNcblxuY29uc3Qgbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzID0gKGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudHNPck9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXR0YWNobWVudHNPck9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHsgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzT3JPcHRpb25zLCBvcHRpb25zOiB7fSBhcyBTZW5kTWVzc2FnZU9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogU2VuZE1lc3NhZ2VPcHRpb25zID0gYXR0YWNobWVudHNPck9wdGlvbnMgPz8ge31cbiAgcmV0dXJuIHsgYXR0YWNobWVudHM6IG9wdGlvbnMuYXR0YWNobWVudHMgPz8gW10sIG9wdGlvbnMgfVxufVxuXG5jb25zdCB1c2VTdGFibGVDYWxsYmFja3MgPSAoYXV0aFVzZXI6IENPUlVzZXIpID0+IHtcbiAgY29uc3QgY3VycmVudFVzZXIgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VVc2VyPih7XG4gICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgfSlcblxuICBpZiAoXG4gICAgY3VycmVudFVzZXIuY3VycmVudC5pZCAhPT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQubmFtZSAhPT0gYXV0aFVzZXIuZmlyc3ROYW1lIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5hdmF0YXIgIT09IGF1dGhVc2VyLnBpY3R1cmVcbiAgKSB7XG4gICAgY3VycmVudFVzZXIuY3VycmVudCA9IHtcbiAgICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGN1cnJlbnRVc2VyOiBjdXJyZW50VXNlci5jdXJyZW50LFxuICB9XG59XG5cbmNvbnN0IHBhcnNlU1NFTGluZSA9IChsaW5lOiBzdHJpbmcpOiB7IGV2ZW50VHlwZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0gfCBudWxsID0+IHtcbiAgaWYgKCFsaW5lLnRyaW0oKSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIHJldHVybiBudWxsXG5cbiAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuICAgIHJldHVybiB7IGV2ZW50VHlwZSwgZGF0YSB9XG4gIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzU1NFU3RyZWFtID0gYXN5bmMgKFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4gIHRocmVhZElkOiBzdHJpbmcsXG4gIGNhbGxiYWNrczoge1xuICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbk5vZGU6IChtZXNzYWdlOiBzdHJpbmcsIHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkNvbXBsZXRlOiAoZmluYWxDb250ZW50OiBzdHJpbmcsIHNvdXJjZXM6IGFueSwgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25FcnJvcjogKGVycm9yOiBhbnksIHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBpc1N0cmVhbUNvbXBsZXRlID0gZmFsc2VcblxuICBmdW5jdGlvbiBoYW5kbGVMaW5lKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU1NFTGluZShsaW5lKVxuICAgIGlmICghcGFyc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhIH0gPSBwYXJzZWRcbiAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSAndG9rZW4nKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gY29udGVudFxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICAgIGlmIChldmVudERhdGEubWVzc2FnZSAmJiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNhbGxiYWNrcy5vbk5vZGUoZXZlbnREYXRhLm1lc3NhZ2UsIHRocmVhZElkKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAoZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgIGNvbnN0IHNvdXJjZXMgPSAoZXZlbnREYXRhLnNvdXJjZXMgYXMgdW5rbm93bikgfHwgbnVsbFxuICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICBjYWxsYmFja3Mub25Db21wbGV0ZShmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgdGhyZWFkSWQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIGNhbGxiYWNrcy5vbkVycm9yKGV2ZW50RGF0YS5lcnJvciwgdGhyZWFkSWQpXG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKCFpc1N0cmVhbUNvbXBsZXRlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIGlzU3RyZWFtQ29tcGxldGUgPSB0cnVlXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaGFuZGxlTGluZShsaW5lc1tpXSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXRNYW5hZ2VyID0gKHtcbiAgY2hhdElkOiBpbml0aWFsQ2hhdElkLFxuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIG9uRXJyb3IsXG4gIGFnZW50cyA9IFtdLFxufTogVXNlQ2hhdE1hbmFnZXJQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7XG4gICAgcHJvamVjdCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBzZXRDbGllbnQsXG4gICAgYWdlbnQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgZmV0Y2hQcm9qZWN0cyB9ID0gdXNlUHJvamVjdHMoKVxuICBjb25zdCB7IGN1cnJlbnRVc2VyIH0gPSB1c2VTdGFibGVDYWxsYmFja3MoYXV0aFVzZXIpXG4gIGNvbnN0IHsgZ2V0VGFiVGFza0RlZmF1bHQgfSA9IHVzZVRhYlRhc2tEZWZhdWx0KClcbiAgY29uc3QgY3VycmVudE1lc3NhZ2VJZCA9IHVzZVJlZih1dWlkdjQoKSlcbiAgY29uc3QgY3VycmVudFVzZXJRdWVzdGlvbiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjdXJyZW50Q2hhdElkID0gdXNlUmVmKGluaXRpYWxDaGF0SWQgfHwgdXVpZHY0KCkpXG4gIGNvbnN0IHJlcG9ydGVkRXZlbnQgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10+KFtdKVxuICBjb25zdCBpc1Byb2Nlc3NpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGZpcnN0VGltZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgW2FjdGl2ZUxvYWRpbmdzLCBzZXRBY3RpdmVMb2FkaW5nc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSlcblxuICBjb25zdCBpc1dlYlNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc1dlYlNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNEZWVwU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzRGVlcFNlYXJjaEFjdGl2ZSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc1dlYlNlYXJjaEFjdGl2ZVxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNEZWVwU2VhcmNoQWN0aXZlXG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICBjb25zdCB7IGxvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgbG9hZE1lc3NhZ2VzLCBhZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlLCBoYW5kbGVTY3JvbGwgfSA9XG4gICAgdXNlQ2hhdE1lc3NhZ2VzKHtcbiAgICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICBjdXJyZW50VXNlcixcbiAgICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBhZ2VudHMsXG4gICAgfSlcblxuICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdjaGF0LWxvYWRpbmctbWVzc2FnZXMtY2hhbmdlZCcsIHtcbiAgICAgIGRldGFpbDogeyBsb2FkaW5nTWVzc2FnZXMgfSxcbiAgICB9KVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGluaXRpYWxDaGF0SWQgJiYgaW5pdGlhbENoYXRJZCAhPT0gY3VycmVudENoYXRJZC5jdXJyZW50KSB7XG4gICAgICAvLyBMaW1waWFyIGNvbnRleHRvIGdsb2JhbCBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs25cbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG5cbiAgICAgIGxvYWRNZXNzYWdlcygpXG4gICAgfVxuICB9LCBbaW5pdGlhbENoYXRJZCwgcHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRDaGlwc1Byb2plY3QsIGxvYWRNZXNzYWdlc10pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2hpcHNQcm9qZWN0IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIHByb2plY3RJZCBwZXJvIGNoaXBzUHJvamVjdCBubyBzZSBoYSBzZXRlYWRvXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNoaXBzUHJvamVjdCB8fCBsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuICAgIGNvbnN0IGxhc3RNc2dXaXRoUHJvamVjdCA9IG1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgY29uc3QgeyBwcm9qZWN0SWQsIHByb2plY3ROYW1lIH0gPSBsYXN0TXNnV2l0aFByb2plY3QgfHwge31cbiAgICBpZiAoIXByb2plY3RJZCkgcmV0dXJuXG5cbiAgICBmZXRjaFByb2plY3RzKHByb2plY3RJZCkudGhlbihwcm9qZWN0cyA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IHByb2plY3RzPy5maW5kKHAgPT4gTnVtYmVyKHAuaWQpID09PSBOdW1iZXIocHJvamVjdElkKSlcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3ROYW1lOiBmb3VuZC5uYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWU6IGZvdW5kLmNsaWVudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhmb3VuZC5pZCksXG4gICAgICAgIH0pXG4gICAgICAgIHNldFByb2plY3QoZm91bmQpXG4gICAgICB9IGVsc2UgaWYgKHByb2plY3ROYW1lKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogJycsXG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcocHJvamVjdElkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdCh7IGlkOiBOdW1iZXIocHJvamVjdElkKSwgbmFtZTogcHJvamVjdE5hbWUgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9LCBbbWVzc2FnZXMsIGNoaXBzUHJvamVjdCwgbG9hZGluZ01lc3NhZ2VzLCBmZXRjaFByb2plY3RzLCBzZXRDaGlwc1Byb2plY3QsIHNldFByb2plY3RdKVxuXG4gIC8vIFNpbmNyb25pemFyIGNsaWVudCBjdWFuZG8gaGF5IG1lbnNhamVzIGNvbiBjbGllbnRJZCBwZXJvIGNsaWVudCBubyBzZSBoYSBzZXRlYWRvXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNsaWVudCB8fCBsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuICAgIGNvbnN0IGxhc3RNc2dXaXRoQ2xpZW50ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cuY2xpZW50SWQgIT0gbnVsbCAmJiBtc2cuY2xpZW50TmFtZSkuYXQoLTEpXG4gICAgY29uc3QgeyBjbGllbnRJZDogbXNnQ2xpZW50SWQsIGNsaWVudE5hbWU6IG1zZ0NsaWVudE5hbWUgfSA9IGxhc3RNc2dXaXRoQ2xpZW50IHx8IHt9XG4gICAgaWYgKG1zZ0NsaWVudElkID09IG51bGwgfHwgIW1zZ0NsaWVudE5hbWUpIHJldHVyblxuXG4gICAgc2V0Q2xpZW50Py4oeyBpZDogTnVtYmVyKG1zZ0NsaWVudElkKSwgbmFtZTogbXNnQ2xpZW50TmFtZSB9KVxuICB9LCBbbWVzc2FnZXMsIGNsaWVudCwgbG9hZGluZ01lc3NhZ2VzLCBzZXRDbGllbnRdKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUVycm9yID0gdXNlQ2FsbGJhY2soXG4gICAgKGVycm9yTWVzc2FnZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIGVycm9yTWVzc2FnZSA9PT0gXCJBY2Nlc3MgZGVuaWVkOiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGlzIGFnZW50XCJcbiAgICAgICAgICA/IHQoJ2NoYXQuZXJyb3JBY2Nlc3NEZW5pZWQnKVxuICAgICAgICAgIDogdCgnY2hhdC5lcnJvcicpXG5cbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVVwZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb250ZW50OiBzdHJpbmcsIHNvdXJjZXM6IGFueSwgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG5cbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogdGVtcE1lc3NhZ2VJZCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudCxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUZpbmlzaCA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChjb250ZW50OiBzdHJpbmcsIHNvdXJjZXM6IGFueSwgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnXVxuICAgICAgY29uc3QgVEFTS19FRElUX1RPT0xTID0gW1xuICAgICAgICAnZWRpdF90YXNrJyxcbiAgICAgICAgJ2VkaXRfdGFza3NfYmF0Y2gnLFxuICAgICAgICAndGFza19hc3NpZ24nLFxuICAgICAgICAndGFza191bmFzc2lnbicsXG4gICAgICAgICd1cGRhdGVfdGFza190eXBlJyxcbiAgICAgICAgJ3VwZGF0ZV9lc3RpbWF0ZWRfaG91cnMnLFxuICAgICAgICAnYXNzaWduX3Rhc2tfbGFiZWwnLFxuICAgICAgXVxuICAgICAgY29uc3QgVEFTS19ERUxFVEVfVE9PTFMgPSBbJ2RlbGV0ZV90YXNrJywgJ2RlbGV0ZV90YXNrc19iYXRjaCddXG4gICAgICBjb25zdCBwZW5kaW5nQWN0aW9ucyA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucyB8fCBbXVxuICAgICAgY29uc3Qgd2FzVGFza0NyZWF0aW9uID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19DUkVBVElPTl9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc1Rhc2tFZGl0ID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJiBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19FRElUX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0RlbGV0ZSA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCAmJiBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IHRhc2tJZHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgICBjb25zdCB0YWIgPSBhd2FpdCBnZXRUYWJUYXNrRGVmYXVsdCh0YXNrSWRzWzBdKVxuICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgIGNvbnRlbnRUb0FkZCA9IGNvbnRlbnQucmVwbGFjZSh0YXNrVXJsUmVnZXgsIHVybCA9PlxuICAgICAgICAgIHVybC5yZXBsYWNlKC9cXC8oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykoPz0kfFxcPykvLCB0YWJTZWdtZW50KVxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgbGFzdFByb2plY3RNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkUmF3ID0gcHJvamVjdD8uaWQgfHwgbGFzdFByb2plY3RNZXNzYWdlPy5wcm9qZWN0SWRcbiAgICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IGNvbnRleHRQcm9qZWN0SWRSYXcgPyBwYXJzZUludChTdHJpbmcoY29udGV4dFByb2plY3RJZFJhdyksIDEwKSA6IG51bGxcbiAgICAgICAgY29uc3QgcGF0aE1hdGNoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLm1hdGNoKC9eXFwvcHJvamVjdHNcXC8oXFxkKylcXC8vKVxuICAgICAgICBjb25zdCByb3V0ZVByb2plY3RJZCA9IHBhdGhNYXRjaCA/IHBhcnNlSW50KHBhdGhNYXRjaFsxXSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBpc09uUHJvamVjdFJvdXRlID0gY29udGV4dFByb2plY3RJZCAmJiByb3V0ZVByb2plY3RJZCAmJiBjb250ZXh0UHJvamVjdElkID09PSByb3V0ZVByb2plY3RJZFxuXG4gICAgICAgIGlmIChpc09uUHJvamVjdFJvdXRlKSB7XG4gICAgICAgICAgaWYgKHdhc1Rhc2tDcmVhdGlvbikge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc1Rhc2tFZGl0KSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc1Rhc2tEZWxldGUpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5kZWxldGVFeGlzdGluZ1Rhc2tGcm9tRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgIH0pXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtU3RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhZGRNZXNzYWdlKHtcbiAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1jYW5jZWxsZWRgLFxuICAgICAgbWVzc2FnZTogdCgnY2hhdC5jYW5jZWxsZWQnKSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiB0cnVlLFxuICAgIH0pXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgIH0sIDUwMClcbiAgfSwgW2FkZE1lc3NhZ2UsIHRdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gIH0pXG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsIGZhcUlkPzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudD8uW21lc3NhZ2VzUmVmLmN1cnJlbnQubGVuZ3RoIC0gMV0/LmFnZW50SWRcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgcXVlc3Rpb24tJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBpZiAobWVzc2FnZSA9PT0gdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJykpIHtcbiAgICAgICAgZmluYWxNZXNzYWdlID0gYEZBUTogJHt0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKX0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtcbiAgICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IHByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgLy8gVmVyaWZpY2FyIGNvbnNpc3RlbmNpYSBlbnRyZSBjb250ZXh0byBnbG9iYWwgeSDDumx0aW1vIG1lbnNhamVcbiAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0Py5pZFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcblxuICAgICAgbGV0IHByb2plY3RUb1JlcXVlc3Q6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgICAgIC8vIFNpIGhheSDDumx0aW1vIG1lbnNhamUgY29uIHByb2plY3RJZCwgdXNhcmxvIChtw6FzIGNvbmZpYWJsZSlcbiAgICAgIGlmIChsYXN0TWVzc2FnZVByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICAgICAgfVxuICAgICAgLy8gU2kgbm8gaGF5IMO6bHRpbW8gbWVuc2FqZSwgdXNhciBlbCBjb250ZXh0byBnbG9iYWxcbiAgICAgIGVsc2UgaWYgKGNvbnRleHRQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gY29udGV4dFByb2plY3RJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjbGllbnQ/LmlkXG4gICAgICAgICAgPyB7IGNsaWVudElkOiBjbGllbnQuaWQsIC4uLihjbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnQ/LmlkXG4gICAgICAgICAgICA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkLCAuLi4ocHJvamVjdC5jbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRmFxSWQgPyB7IGZhcUlkOiBwYXlsb2FkRmFxSWQgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbcHJvamVjdCwgc2V0UHJvamVjdCwgYXNrTWFpYSwgYXV0aFVzZXIsIGlzV2ViU2VhcmNoQWN0aXZlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkOiBzdHJpbmcsIC8vIENoYW5nZWQgZnJvbSBhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0XG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT5cbiAgICApID0+IHtcbiAgICAgIC8vIEJ1c2NhciBlbCBtZW5zYWplIHF1ZSBjb250aWVuZSBlc3RlIHRocmVhZElkIGVuIHN1cyBwZW5kaW5nX2FjdGlvbnNcbiAgICAgIGNvbnN0IG1lc3NhZ2VXaXRoQXBwcm92YWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PlxuICAgICAgICBtLmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IGFjdGlvbi50aHJlYWRfaWQgPT09IHRocmVhZElkKVxuICAgICAgKVxuXG4gICAgICBpZiAoIW1lc3NhZ2VXaXRoQXBwcm92YWwgfHwgIW1lc3NhZ2VXaXRoQXBwcm92YWwuYXBwcm92YWwpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2UgZW5jb250csOzIG1lbnNhamUgY29uIGFwcHJvdmFsIHBhcmEgdGhyZWFkX2lkOicsIHRocmVhZElkKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZVdpdGhBcHByb3ZhbC5pZFxuXG4gICAgICAvLyBVcGRhdGUgbWVzc2FnZSBzdGF0dXMgaW1tZWRpYXRlbHlcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IG1lc3NhZ2VJZCkge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuXG4gICAgICAvLyBUcmlnZ2VyIHJlLXJlbmRlclxuICAgICAgY29uc3QgZXhpc3RpbmdNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT4gbS5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgaWYgKGV4aXN0aW5nTWVzc2FnZSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgYWRkTWVzc2FnZSh7IC4uLmV4aXN0aW5nTWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9KVxuICAgICAgfVxuXG4gICAgICAvLyBGb3IgYm90aCBhcHByb3ZlIGFuZCByZWplY3QsIGNhbGwgY29udGludWUtdGhyZWFkIGVuZHBvaW50IHdpdGggc3BlY2lmaWMgdGhyZWFkX2lkXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG5cbiAgICAgIC8vIEFkZCBsb2FkaW5nIGZvciB0aGlzIHRocmVhZFxuICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbdGhyZWFkSWRdOiB0KCdjaGF0LnByb2Nlc3NpbmcnKSxcbiAgICAgIH0pKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkKHtcbiAgICAgICAgICB0aHJlYWRJZCwgLy8gVXNlIHNwZWNpZmljIGFjdGlvbiB0aHJlYWRfaWRcbiAgICAgICAgICBzZXNzaW9uSWQ6IGFwcHJvdmFsLnNlc3Npb25faWQsXG4gICAgICAgICAgZGVjaXNpb246IGVkaXRlZEFjdGlvbnMgPyAnZWRpdCcgOiBkZWNpc2lvbixcbiAgICAgICAgICBlZGl0ZWRBY3Rpb25zLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgLy8gUmVtb3ZlIGxvYWRpbmcgb24gZXJyb3JcbiAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1t0aHJlYWRJZF1cbiAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIFNTRSBtYW51YWxseSB0byB0cmFjayBsb2FkaW5nIHBlciB0aHJlYWRcbiAgICAgICAgYXdhaXQgcHJvY2Vzc1NTRVN0cmVhbShyZXNwb25zZSwgdGhyZWFkSWQsIHtcbiAgICAgICAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1VcGRhdGUoY29udGVudCwgbnVsbCwgJycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk5vZGU6IChtZXNzYWdlOiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyBNb3N0cmFyIG5vbWJyZSBzb2xvIHBhcmEgY3JlYXRlX3Rhc2ssIGVsIHJlc3RvIG11ZXN0cmEgZ2Vuw6lyaWNvXG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5TXNnID0gbWVzc2FnZS5pbmNsdWRlcygnY3JlYXRlX3Rhc2snKSA/IG1lc3NhZ2UgOiB0KCdjaGF0LmV4ZWN1dGluZ0FjdGlvbicpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50VGhyZWFkSWRdOiBkaXNwbGF5TXNnLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoZmluYWxDb250ZW50OiBzdHJpbmcsIHNvdXJjZXM6IGFueSwgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1GaW5pc2goZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAvLyBSZW1vdmUgbG9hZGluZyBvbiBlcnJvclxuICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW3RocmVhZElkXVxuICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2F1dGhVc2VyLCBhZ2VudCwgYWRkTWVzc2FnZSwgaGFuZGxlU3RyZWFtRXJyb3IsIGhhbmRsZVN0cmVhbVVwZGF0ZSwgaGFuZGxlU3RyZWFtRmluaXNoXVxuICApXG5cbiAgY29uc3QgaW5pdGlhbGl6ZUNoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChpbml0aWFsQ2hhdElkKSB7XG4gICAgICBhd2FpdCBsb2FkTWVzc2FnZXMoKVxuICAgIH0gZWxzZSBpZiAodXNlckluaXRpYWxNZXNzYWdlKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBhc2tNYWlhKHtcbiAgICAgICAgbWVzc2FnZTogdXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQgfHwgbnVsbCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lISxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjbGllbnQ/LmlkID8geyBjbGllbnRJZDogY2xpZW50LmlkIH0gOiBwcm9qZWN0Py5jbGllbnQ/LmlkID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/Lm5hbWUgPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/LmNsaWVudD8ubmFtZVxuICAgICAgICAgID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH1cbiAgICAgICAgICA6IGNsaWVudD8ubmFtZVxuICAgICAgICAgICAgPyB7IGNsaWVudE5hbWU6IGNsaWVudC5uYW1lIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgaW5pdGlhbENoYXRJZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgYXV0aFVzZXIsXG4gICAgYWdlbnQsXG4gICAgYXNrTWFpYSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gIF0pXG5cbiAgY29uc3QgcmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3RvcEdlbmVyYXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RvcFN0cmVhbWluZygpXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9LCBbc3RvcFN0cmVhbWluZ10pXG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgY3VycmVudFByb2plY3QsXG4gICAgY3VycmVudENoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgIGN1cnJlbnRNZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcblxuICAgIHNlbmRNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgcmVzZXRDaGF0LFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuXG4gICAgaXNEaXNhYmxlZDogd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcyxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUks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