@projectcor/maia-components 2.11.19-2 → 2.11.20-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +50 -4
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +6 -5
  3. package/lib/components/atoms/icons/MaiaStoreIcon.js +31 -0
  4. package/lib/components/atoms/icons/MyAgentsNavIcon.js +51 -0
  5. package/lib/components/atoms/icons/index.js +3 -1
  6. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +24 -5
  7. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +26 -61
  8. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +98 -0
  9. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +67 -0
  10. package/lib/components/molecules/ChatAIHome/styles.js +34 -42
  11. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +137 -0
  12. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +54 -5
  13. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.js +43 -0
  14. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.styles.js +37 -0
  15. package/lib/components/molecules/ChatAIMessages/newStyles.js +24 -21
  16. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +161 -14
  17. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +16 -41
  18. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +5 -13
  19. package/lib/components/molecules/ChatAIModal/constants.js +6 -2
  20. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +326 -0
  21. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +168 -0
  22. package/lib/components/molecules/Sidebar/Sidebar.js +162 -197
  23. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +114 -0
  24. package/lib/components/molecules/Sidebar/Sidebar.styles.js +13 -1
  25. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +99 -52
  26. package/lib/hooks/index.js +4 -1
  27. package/lib/hooks/useAgentSuggestions.js +60 -0
  28. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  29. package/lib/hooks/useChatManager/useChatManager.js +105 -60
  30. package/lib/hooks/useEvent.js +4 -2
  31. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  32. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +19 -7
  33. package/lib/lang/br/index.js +72 -9
  34. package/lib/lang/en/index.js +72 -9
  35. package/lib/lang/es/index.js +70 -7
  36. package/lib/lang/fr/index.js +56 -4
  37. package/lib/services/maia/Agents/fetchAgentDetail.js +122 -0
  38. package/lib/services/maia/Agents/getAgentById.js +9 -5
  39. package/lib/services/maia/Agents/getAgentSuggestions.js +44 -0
  40. package/lib/services/maia/Agents/getAgents.js +5 -8
  41. package/lib/services/maia/Orchestrator/orchestrator.js +29 -22
  42. package/lib/services/utils/mapChatMessages.js +2 -1
  43. package/lib/types/AgentSuggestion.js +2 -0
  44. package/lib/types/Chat.js +1 -1
  45. package/lib/types/agent.js +1 -1
  46. package/lib/types/agentModal.js +1 -1
  47. package/package.json +1 -1
@@ -96,10 +96,14 @@ var processSSEStream = /*#__PURE__*/function () {
96
96
  callbacks.onNode(eventData.message, threadId);
97
97
  }
98
98
  } else if (eventType === 'complete') {
99
+ var _eventData$agent_id;
99
100
  var finalContent = eventData.content || accumulatedContent;
100
101
  var sources = eventData.sources || null;
101
102
  var memorySessionId = eventData.memory_session_id || '';
102
- callbacks.onComplete(finalContent, sources, memorySessionId, threadId);
103
+ var suggestions = Array.isArray(eventData.suggest_reply) ? eventData.suggest_reply : Array.isArray(eventData.suggestions) ? eventData.suggestions : null;
104
+ var agentIdRaw = (_eventData$agent_id = eventData.agent_id) !== null && _eventData$agent_id !== void 0 ? _eventData$agent_id : eventData.agentId;
105
+ var completedAgentId = agentIdRaw != null && String(agentIdRaw).trim() !== '' ? String(agentIdRaw).trim() : null;
106
+ callbacks.onComplete(finalContent, sources, memorySessionId, threadId, suggestions, completedAgentId);
103
107
  } else if (eventType === 'approval_required') {
104
108
  var _callbacks$onApproval;
105
109
  (_callbacks$onApproval = callbacks.onApprovalRequired) === null || _callbacks$onApproval === void 0 || _callbacks$onApproval.call(callbacks, eventData, accumulatedContent, threadId);
@@ -319,9 +323,9 @@ export var useChatManager = function useChatManager(_ref2) {
319
323
  });
320
324
  }, [addMessage]);
321
325
  var handleStreamFinish = useCallback(/*#__PURE__*/function () {
322
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId) {
326
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId, suggestions, completedAgentId) {
323
327
  var _previousMessage$appr;
324
- 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;
328
+ var tempMessageId, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, createAgentFollowUp, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, pathMatch, routeProjectId, isOnProjectRoute, _window$newProjectDas, _window$newProjectDas2, _window$newProjectDas3, _window$newProjectDas4, _window$newProjectDas5, _window$newProjectDas6, customEvent;
325
329
  return _regeneratorRuntime.wrap(function (_context2) {
326
330
  while (1) switch (_context2.prev = _context2.next) {
327
331
  case 0:
@@ -349,6 +353,14 @@ export var useChatManager = function useChatManager(_ref2) {
349
353
  wasTaskDelete = hasApprovalInPreviousMessage && pendingActions.some(function (action) {
350
354
  return TASK_DELETE_TOOLS.includes(action.tool_name);
351
355
  });
356
+ wasCreateAgentApproved = hasApprovalInPreviousMessage && (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approvalStatus) === 'approved' && pendingActions.some(function (action) {
357
+ return action.tool_name === 'create_agent';
358
+ });
359
+ if (wasCreateAgentApproved && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS && completedAgentId !== null && completedAgentId !== void 0 && completedAgentId.trim()) {
360
+ createAgentFollowUp = {
361
+ agentId: completedAgentId.trim()
362
+ };
363
+ }
352
364
  if (!(matches.length > 0 && hasApprovalInPreviousMessage)) {
353
365
  _context2.next = 2;
354
366
  break;
@@ -382,7 +394,7 @@ export var useChatManager = function useChatManager(_ref2) {
382
394
  }
383
395
  }
384
396
  case 2:
385
- addMessage({
397
+ addMessage(_objectSpread({
386
398
  id: "answer-".concat(memorySessionId),
387
399
  message: contentToAdd,
388
400
  date: new Date(),
@@ -392,8 +404,11 @@ export var useChatManager = function useChatManager(_ref2) {
392
404
  },
393
405
  role: ChatHistoryRole.ASSISTANT,
394
406
  sources: sources,
395
- memorySessionId: memorySessionId
396
- });
407
+ memorySessionId: memorySessionId,
408
+ suggestions: suggestions || []
409
+ }, createAgentFollowUp ? {
410
+ createAgentFollowUp: createAgentFollowUp
411
+ } : {}));
397
412
  isProcessingRef.current = false;
398
413
  if (firstTimeRef.current) {
399
414
  customEvent = new CustomEvent('refetch-session');
@@ -406,7 +421,7 @@ export var useChatManager = function useChatManager(_ref2) {
406
421
  }
407
422
  }, _callee2);
408
423
  }));
409
- return function (_x4, _x5, _x6) {
424
+ return function (_x4, _x5, _x6, _x7, _x8) {
410
425
  return _ref5.apply(this, arguments);
411
426
  };
412
427
  }(), [addMessage, removeMessage, project, getTabTaskDefault]);
@@ -461,9 +476,9 @@ export var useChatManager = function useChatManager(_ref2) {
461
476
  stopStreaming = _useOrchestratorStrea.stopStreaming;
462
477
  var currentProject = project;
463
478
  var sendMessage = useCallback(/*#__PURE__*/function () {
464
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(message, attachmentsOrOptions, faqId) {
479
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(message, attachmentsOrOptions, faqId, agentSuggestionId) {
465
480
  var _messagesRef$current, _project$client;
466
- var _normalizeSendMessage, attachments, options, newMessageId, lastMessageWithProject, currentAgentFromMessages, finalMessage, _options$projectChang, history, contextProjectId, lastMessageProjectId, projectToRequest, parsed, projects, payloadFaqId, payloadData;
481
+ var _normalizeSendMessage, attachments, options, newMessageId, lastMessageWithProject, currentAgentFromMessages, finalMessage, _options$projectChang, history, contextProjectId, lastMessageProjectId, projectToRequest, parsed, projects, payloadFaqId, payloadAgentSuggestionId, payloadData;
467
482
  return _regeneratorRuntime.wrap(function (_context3) {
468
483
  while (1) switch (_context3.prev = _context3.next) {
469
484
  case 0:
@@ -523,7 +538,8 @@ export var useChatManager = function useChatManager(_ref2) {
523
538
  case 2:
524
539
  projects = _context3.sent;
525
540
  payloadFaqId = faqId !== null && faqId !== void 0 ? faqId : options.faqId;
526
- payloadData = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
541
+ payloadAgentSuggestionId = agentSuggestionId !== null && agentSuggestionId !== void 0 ? agentSuggestionId : options.agentSuggestionId;
542
+ payloadData = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
527
543
  message: finalMessage,
528
544
  history: history,
529
545
  projectId: projectToRequest,
@@ -552,6 +568,10 @@ export var useChatManager = function useChatManager(_ref2) {
552
568
  attachments: attachments
553
569
  } : {}), payloadFaqId ? {
554
570
  faqId: payloadFaqId
571
+ } : {}), payloadAgentSuggestionId ? {
572
+ agentSuggestionId: payloadAgentSuggestionId
573
+ } : {}), (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
574
+ agentEntity: agent.entity
555
575
  } : {});
556
576
  askMaia(payloadData);
557
577
  case 3:
@@ -560,7 +580,7 @@ export var useChatManager = function useChatManager(_ref2) {
560
580
  }
561
581
  }, _callee3);
562
582
  }));
563
- return function (_x7, _x8, _x9) {
583
+ return function (_x9, _x0, _x1, _x10) {
564
584
  return _ref6.apply(this, arguments);
565
585
  };
566
586
  }(), [addMessage, event, askMaia, project, client, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
@@ -576,7 +596,7 @@ export var useChatManager = function useChatManager(_ref2) {
576
596
  role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
577
597
  };
578
598
  });
579
- askMaia({
599
+ askMaia(_objectSpread({
580
600
  message: currentUserQuestion.current,
581
601
  history: history,
582
602
  projectId: option.id,
@@ -591,9 +611,11 @@ export var useChatManager = function useChatManager(_ref2) {
591
611
  agentId: (agent === null || agent === void 0 ? void 0 : agent.id) || '',
592
612
  isWebSearchActive: isWebSearchActiveRef.current,
593
613
  isDeepSearchActive: isDeepSearchActiveRef.current
594
- });
614
+ }, (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
615
+ agentEntity: agent.entity
616
+ } : {}));
595
617
  }
596
- }, [project, setProject, askMaia, authUser, isWebSearchActive]);
618
+ }, [project, setProject, askMaia, authUser, isWebSearchActive, agent]);
597
619
  var handleFeedback = useCallback(/*#__PURE__*/function () {
598
620
  var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(feedbackProp, chatMessageId) {
599
621
  var response;
@@ -620,13 +642,14 @@ export var useChatManager = function useChatManager(_ref2) {
620
642
  }
621
643
  }, _callee4);
622
644
  }));
623
- return function (_x0, _x1) {
645
+ return function (_x11, _x12) {
624
646
  return _ref7.apply(this, arguments);
625
647
  };
626
648
  }(), []);
627
649
  var handleApprovalDecision = useCallback(/*#__PURE__*/function () {
628
650
  var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(threadIds, decision, editedActions) {
629
- var messageWithApproval, approval, messageId, loadingKey, existingMessage, newStatus, response, _t;
651
+ var _approval$pending_act;
652
+ var messageWithApproval, approval, messageId, loadingKey, hasCreateAgentAction, shouldRefetchAgentsAfterCompletion, existingMessage, newStatus, response, _t;
630
653
  return _regeneratorRuntime.wrap(function (_context5) {
631
654
  while (1) switch (_context5.prev = _context5.next) {
632
655
  case 0:
@@ -653,7 +676,11 @@ export var useChatManager = function useChatManager(_ref2) {
653
676
  case 2:
654
677
  approval = messageWithApproval.approval;
655
678
  messageId = messageWithApproval.id; // Use first threadId as the loading key
656
- loadingKey = threadIds[0]; // Update message status immediately
679
+ loadingKey = threadIds[0];
680
+ hasCreateAgentAction = (_approval$pending_act = approval.pending_actions) === null || _approval$pending_act === void 0 ? void 0 : _approval$pending_act.some(function (action) {
681
+ return action.tool_name === 'create_agent';
682
+ });
683
+ shouldRefetchAgentsAfterCompletion = decision !== 'reject' && hasCreateAgentAction; // Update message status immediately
657
684
  messagesRef.current = messagesRef.current.map(function (message) {
658
685
  if (message.id === messageId) {
659
686
  var newStatus = decision === 'approve' ? 'approved' : 'rejected';
@@ -719,8 +746,11 @@ export var useChatManager = function useChatManager(_ref2) {
719
746
  return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, currentThreadId, displayMsg));
720
747
  });
721
748
  },
722
- onComplete: function onComplete(finalContent, sources, memorySessionId, currentThreadId) {
723
- handleStreamFinish(finalContent, sources, memorySessionId);
749
+ onComplete: function onComplete(finalContent, sources, memorySessionId, currentThreadId, suggestions, agentId) {
750
+ handleStreamFinish(finalContent, sources, memorySessionId, suggestions, agentId);
751
+ if (shouldRefetchAgentsAfterCompletion) {
752
+ document.dispatchEvent(new CustomEvent('refetch-agents-custom'));
753
+ }
724
754
  setActiveLoadings(function (prev) {
725
755
  var newLoadings = _objectSpread({}, prev);
726
756
  delete newLoadings[currentThreadId];
@@ -764,12 +794,12 @@ export var useChatManager = function useChatManager(_ref2) {
764
794
  }
765
795
  }, _callee5, null, [[3, 7]]);
766
796
  }));
767
- return function (_x10, _x11, _x12) {
797
+ return function (_x13, _x14, _x15) {
768
798
  return _ref8.apply(this, arguments);
769
799
  };
770
800
  }(), [authUser, agent, addMessage, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired]);
771
801
  var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
772
- var _project$client2, _project$client3, history;
802
+ var _userInitialMessage$m, _userInitialMessage$a, _project$client2, _project$client3, hasInitialMessage, hasInitialAttachments, hasInitialFaq, history;
773
803
  return _regeneratorRuntime.wrap(function (_context6) {
774
804
  while (1) switch (_context6.prev = _context6.next) {
775
805
  case 0:
@@ -783,48 +813,63 @@ export var useChatManager = function useChatManager(_ref2) {
783
813
  _context6.next = 1;
784
814
  return loadMessages();
785
815
  case 1:
786
- _context6.next = 3;
816
+ _context6.next = 4;
787
817
  break;
788
818
  case 2:
789
- if (userInitialMessage) {
790
- history = messagesRef.current.map(function (historyMessage) {
791
- return {
792
- content: historyMessage.message,
793
- role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
794
- };
795
- });
796
- askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
797
- message: userInitialMessage.message,
798
- history: history,
799
- projectId: (project === null || project === void 0 ? void 0 : project.id) || null,
800
- lang: authUser.lang,
801
- userId: authUser.id.toString(),
802
- firstName: authUser.firstName,
803
- lastName: authUser.lastName,
804
- companyId: authUser.company_id.toString(),
805
- chatId: currentChatId.current,
806
- messageId: currentMessageId.current,
807
- agentName: agent === null || agent === void 0 ? void 0 : agent.name,
808
- agentId: agent === null || agent === void 0 ? void 0 : agent.id,
809
- isWebSearchActive: isWebSearchActiveRef.current,
810
- isDeepSearchActive: isDeepSearchActiveRef.current
811
- }, client !== null && client !== void 0 && client.id ? {
812
- clientId: client.id
813
- } : project !== null && project !== void 0 && (_project$client2 = project.client) !== null && _project$client2 !== void 0 && _project$client2.id ? {
814
- clientId: project.client.id
815
- } : {}), project !== null && project !== void 0 && project.name ? {
816
- projectName: project.name
817
- } : {}), project !== null && project !== void 0 && (_project$client3 = project.client) !== null && _project$client3 !== void 0 && _project$client3.name ? {
818
- clientName: project.client.name
819
- } : client !== null && client !== void 0 && client.name ? {
820
- clientName: client.name
821
- } : {}), userInitialMessage.attachments ? {
822
- attachments: userInitialMessage.attachments
823
- } : {}), userInitialMessage.faqId ? {
824
- faqId: userInitialMessage.faqId
825
- } : {}));
819
+ if (!userInitialMessage) {
820
+ _context6.next = 4;
821
+ break;
826
822
  }
823
+ hasInitialMessage = Boolean((_userInitialMessage$m = userInitialMessage.message) === null || _userInitialMessage$m === void 0 ? void 0 : _userInitialMessage$m.trim());
824
+ hasInitialAttachments = Boolean((_userInitialMessage$a = userInitialMessage.attachments) === null || _userInitialMessage$a === void 0 ? void 0 : _userInitialMessage$a.length);
825
+ hasInitialFaq = Boolean(userInitialMessage.faqId);
826
+ if (!(!hasInitialMessage && !hasInitialAttachments && !hasInitialFaq)) {
827
+ _context6.next = 3;
828
+ break;
829
+ }
830
+ return _context6.abrupt("return");
827
831
  case 3:
832
+ history = messagesRef.current.map(function (historyMessage) {
833
+ return {
834
+ content: historyMessage.message,
835
+ role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
836
+ };
837
+ });
838
+ askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
839
+ message: userInitialMessage.message,
840
+ history: history,
841
+ projectId: (project === null || project === void 0 ? void 0 : project.id) || null,
842
+ lang: authUser.lang,
843
+ userId: authUser.id.toString(),
844
+ firstName: authUser.firstName,
845
+ lastName: authUser.lastName,
846
+ companyId: authUser.company_id.toString(),
847
+ chatId: currentChatId.current,
848
+ messageId: currentMessageId.current,
849
+ agentName: agent === null || agent === void 0 ? void 0 : agent.name,
850
+ agentId: agent === null || agent === void 0 ? void 0 : agent.id,
851
+ isWebSearchActive: isWebSearchActiveRef.current,
852
+ isDeepSearchActive: isDeepSearchActiveRef.current
853
+ }, client !== null && client !== void 0 && client.id ? {
854
+ clientId: client.id
855
+ } : project !== null && project !== void 0 && (_project$client2 = project.client) !== null && _project$client2 !== void 0 && _project$client2.id ? {
856
+ clientId: project.client.id
857
+ } : {}), project !== null && project !== void 0 && project.name ? {
858
+ projectName: project.name
859
+ } : {}), project !== null && project !== void 0 && (_project$client3 = project.client) !== null && _project$client3 !== void 0 && _project$client3.name ? {
860
+ clientName: project.client.name
861
+ } : client !== null && client !== void 0 && client.name ? {
862
+ clientName: client.name
863
+ } : {}), userInitialMessage.attachments ? {
864
+ attachments: userInitialMessage.attachments
865
+ } : {}), userInitialMessage.faqId ? {
866
+ faqId: userInitialMessage.faqId
867
+ } : {}), userInitialMessage.agentSuggestionId ? {
868
+ agentSuggestionId: userInitialMessage.agentSuggestionId
869
+ } : {}), (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
870
+ agentEntity: agent.entity
871
+ } : {}));
872
+ case 4:
828
873
  case "end":
829
874
  return _context6.stop();
830
875
  }
@@ -862,4 +907,4 @@ export var useChatManager = function useChatManager(_ref2) {
862
907
  isDisabled: waitingResponse || loadingMessages
863
908
  };
864
909
  };
865
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJfb3B0aW9ucyRhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dGFjaG1lbnRzIiwib3B0aW9ucyIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJpZCIsInRvU3RyaW5nIiwibmFtZSIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsInRyaW0iLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJ0aHJlYWRJZCIsImNhbGxiYWNrcyIsIl9yZXNwb25zZSRib2R5IiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImlzU3RyZWFtQ29tcGxldGUiLCJoYW5kbGVMaW5lIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJpIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJfaGFuZGxlTGluZSIsInBhcnNlZCIsImV2ZW50RGF0YSIsImNvbnRlbnQiLCJvblRva2VuIiwibWVzc2FnZSIsIm9uTm9kZSIsImZpbmFsQ29udGVudCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsIm9uQ29tcGxldGUiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJjYWxsIiwib25FcnJvciIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwicmVhZCIsInNlbnQiLCJhYnJ1cHQiLCJkZWNvZGUiLCJzdHJlYW0iLCJwb3AiLCJsZW5ndGgiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsInVzZUNoYXRNYW5hZ2VyIiwiX3JlZjIiLCJpbml0aWFsQ2hhdElkIiwiY2hhdElkIiwidXNlckluaXRpYWxNZXNzYWdlIiwiX3JlZjIkYWdlbnRzIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsImNsaWVudCIsInNldENsaWVudCIsImFnZW50IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJjaGlwc1Byb2plY3QiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJjdXJyZW50TWVzc2FnZUlkIiwiY3VycmVudFVzZXJRdWVzdGlvbiIsImN1cnJlbnRDaGF0SWQiLCJyZXBvcnRlZEV2ZW50IiwibWVzc2FnZXNSZWYiLCJpc1Byb2Nlc3NpbmdSZWYiLCJmaXJzdFRpbWVSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiYWN0aXZlTG9hZGluZ3MiLCJzZXRBY3RpdmVMb2FkaW5ncyIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiX3VzZUNoYXRNZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwibG9hZE1lc3NhZ2VzIiwiYWRkTWVzc2FnZSIsInJlbW92ZU1lc3NhZ2UiLCJoYW5kbGVTY3JvbGwiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwibGFzdE1zZ1dpdGhQcm9qZWN0IiwiZmlsdGVyIiwibXNnIiwicHJvamVjdElkIiwiYXQiLCJfcmVmMyIsInByb2plY3ROYW1lIiwidGhlbiIsInByb2plY3RzIiwiZm91bmQiLCJmaW5kIiwicCIsIk51bWJlciIsIl9mb3VuZCRjbGllbnQiLCJjbGllbnROYW1lIiwiU3RyaW5nIiwibGFzdE1zZ1dpdGhDbGllbnQiLCJjbGllbnRJZCIsIl9yZWY0IiwibXNnQ2xpZW50SWQiLCJtc2dDbGllbnROYW1lIiwiaGFuZGxlU3RyZWFtRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJjb25jYXQiLCJpc0Vycm9yIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwicm9sZSIsIkFTU0lTVEFOVCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsInRlbXBNZXNzYWdlSWQiLCJoYW5kbGVTdHJlYW1GaW5pc2giLCJfcmVmNSIsIl9jYWxsZWUyIiwiX3ByZXZpb3VzTWVzc2FnZSRhcHByIiwidGFza1VybFJlZ2V4IiwibWF0Y2hlcyIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsImhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJwZW5kaW5nQWN0aW9ucyIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsInRhc2tJZHMiLCJ0YWIiLCJ0YWJTZWdtZW50IiwibGFzdFByb2plY3RNZXNzYWdlIiwiY29udGV4dFByb2plY3RJZFJhdyIsImNvbnRleHRQcm9qZWN0SWQiLCJwYXRoTWF0Y2giLCJyb3V0ZVByb2plY3RJZCIsImlzT25Qcm9qZWN0Um91dGUiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfd2luZG93JG5ld1Byb2plY3REYXMyIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMyIsIl93aW5kb3ckbmV3UHJvamVjdERhczQiLCJfd2luZG93JG5ld1Byb2plY3REYXM1IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNiIsIl9jb250ZXh0MiIsIlJlZ0V4cCIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hdGNoQWxsIiwibSIsImFwcHJvdmFsIiwicGVuZGluZ19hY3Rpb25zIiwic29tZSIsImFjdGlvbiIsImluY2x1ZGVzIiwidG9vbF9uYW1lIiwibWFwIiwibWF0Y2giLCJwYXJzZUludCIsInVybCIsIndpbmRvdyIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJuZXdQcm9qZWN0RGFzaGJvYXJkIiwiYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQiLCJlZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQiLCJkZWxldGVFeGlzdGluZ1Rhc2tGcm9tRGFzaGJvYXJkIiwiX3g0IiwiX3g1IiwiX3g2IiwiaGFuZGxlU3RyZWFtU3RvcCIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJzZXRUaW1lb3V0IiwiaGFuZGxlQXBwcm92YWxSZXF1aXJlZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsImFwcHJvdmFsU3RhdHVzIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjYiLCJfY2FsbGVlMyIsImZhcUlkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJfcHJvamVjdCRjbGllbnQiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJuZXdNZXNzYWdlSWQiLCJsYXN0TWVzc2FnZVdpdGhQcm9qZWN0IiwiY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInBheWxvYWRGYXFJZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQzIiwicG1BaVR5cGVkVGV4dCIsImFnZW50SWQiLCJVU0VSIiwicHJvamVjdENoYW5nZWQiLCJpbmNvbWVUeXBlIiwiaGlzdG9yeU1lc3NhZ2UiLCJpc0Zpbml0ZSIsIl9vYmplY3RTcHJlYWQiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwibWVzc2FnZUlkIiwiYWdlbnROYW1lIiwiX3g3IiwiX3g4IiwiX3g5IiwiY2hhbmdlUHJvamVjdCIsIm9wdGlvbiIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjciLCJfY2FsbGVlNCIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJfY29udGV4dDQiLCJDaGF0cyIsIndhc0hlbHBmdWxDaGF0IiwiVEhVTUJTX1VQIiwid2FzSGVscGZ1bCIsIl94MCIsIl94MSIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmOCIsIl9jYWxsZWU1IiwidGhyZWFkSWRzIiwiZGVjaXNpb24iLCJlZGl0ZWRBY3Rpb25zIiwibWVzc2FnZVdpdGhBcHByb3ZhbCIsImxvYWRpbmdLZXkiLCJleGlzdGluZ01lc3NhZ2UiLCJuZXdTdGF0dXMiLCJfdCIsIl9jb250ZXh0NSIsIl9tJGFwcHJvdmFsIiwidGhyZWFkX2lkIiwiX2RlZmluZVByb3BlcnR5IiwiT3JjaGVzdHJhdG9yIiwiY29udGludWVUaHJlYWQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uX2lkIiwib2siLCJuZXdMb2FkaW5ncyIsImN1cnJlbnRUaHJlYWRJZCIsImRpc3BsYXlNc2ciLCJhcHByb3ZhbFBheWxvYWQiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJpbml0aWFsaXplQ2hhdCIsIl9jYWxsZWU2IiwiX3Byb2plY3QkY2xpZW50MiIsIl9wcm9qZWN0JGNsaWVudDMiLCJfY29udGV4dDYiLCJyZXNldENoYXQiLCJzdG9wR2VuZXJhdGlvbiIsImlzRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0ZWQtb3B0aW9uYWwtY2hhaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyB1c2VDaGF0TWVzc2FnZXMgfSBmcm9tICcuLi91c2VDaGF0TWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuY29uc3QgdXNlU3RhYmxlQ2FsbGJhY2tzID0gKGF1dGhVc2VyOiBDT1JVc2VyKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlUmVmPENoYXRNZXNzYWdlVXNlcj4oe1xuICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gIH0pXG5cbiAgaWYgKFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuaWQgIT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50Lm5hbWUgIT09IGF1dGhVc2VyLmZpcnN0TmFtZSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuYXZhdGFyICE9PSBhdXRoVXNlci5waWN0dXJlXG4gICkge1xuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQgPSB7XG4gICAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VXNlcjogY3VycmVudFVzZXIuY3VycmVudCxcbiAgfVxufVxuXG5jb25zdCBwYXJzZVNTRUxpbmUgPSAobGluZTogc3RyaW5nKTogeyBldmVudFR5cGU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9IHwgbnVsbCA9PiB7XG4gIGlmICghbGluZS50cmltKCkpIHJldHVybiBudWxsXG5cbiAgY29uc3QgW2V2ZW50TGluZSwgZGF0YUxpbmVdID0gbGluZS5zcGxpdCgnXFxuJylcbiAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50TGluZS5yZXBsYWNlKCdldmVudDogJywgJycpLnRyaW0oKVxuICBjb25zdCBkYXRhU3RyID0gZGF0YUxpbmUucmVwbGFjZSgnZGF0YTogJywgJycpLnRyaW0oKVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcbiAgICByZXR1cm4geyBldmVudFR5cGUsIGRhdGEgfVxuICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBTU0UgZGF0YTonLCBwYXJzZUVycm9yLCBkYXRhU3RyKVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuY29uc3QgcHJvY2Vzc1NTRVN0cmVhbSA9IGFzeW5jIChcbiAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICB0aHJlYWRJZDogc3RyaW5nLFxuICBjYWxsYmFja3M6IHtcbiAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Db21wbGV0ZTogKGZpbmFsQ29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25BcHByb3ZhbFJlcXVpcmVkPzogKGFwcHJvdmFsOiBhbnksIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICB9XG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgaWYgKCFyZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIGxldCBidWZmZXIgPSAnJ1xuICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgbGV0IGlzU3RyZWFtQ29tcGxldGUgPSBmYWxzZVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUxpbmUobGluZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VTU0VMaW5lKGxpbmUpXG4gICAgaWYgKCFwYXJzZWQpIHJldHVyblxuXG4gICAgY29uc3QgeyBldmVudFR5cGUsIGRhdGEgfSA9IHBhcnNlZFxuICAgIGNvbnN0IGV2ZW50RGF0YSA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuICAgIGlmIChldmVudFR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBldmVudERhdGEuY29udGVudCBhcyBzdHJpbmdcbiAgICAgIGFjY3VtdWxhdGVkQ29udGVudCArPSBjb250ZW50XG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdub2RlJykge1xuICAgICAgaWYgKGV2ZW50RGF0YS5tZXNzYWdlICYmIHR5cGVvZiBldmVudERhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2FsbGJhY2tzLm9uTm9kZShldmVudERhdGEubWVzc2FnZSwgdGhyZWFkSWQpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IChldmVudERhdGEuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgY29uc3Qgc291cmNlcyA9IChldmVudERhdGEuc291cmNlcyBhcyB1bmtub3duKSB8fCBudWxsXG4gICAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSAoZXZlbnREYXRhLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICAgIGNhbGxiYWNrcy5vbkNvbXBsZXRlKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkLCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2FwcHJvdmFsX3JlcXVpcmVkJykge1xuICAgICAgY2FsbGJhY2tzLm9uQXBwcm92YWxSZXF1aXJlZD8uKGV2ZW50RGF0YSwgYWNjdW11bGF0ZWRDb250ZW50LCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXZlbnREYXRhLmVycm9yLCB0aHJlYWRJZClcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoIWlzU3RyZWFtQ29tcGxldGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNTdHJlYW1Db21wbGV0ZSA9IHRydWVcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBoYW5kbGVMaW5lKGxpbmVzW2ldKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIGNvbnN0IHsgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBsb2FkTWVzc2FnZXMsIGFkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIGhhbmRsZVNjcm9sbCB9ID1cbiAgICB1c2VDaGF0TWVzc2FnZXMoe1xuICAgICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgICAgb25FcnJvcixcbiAgICAgIGFnZW50cyxcbiAgICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcblxuICAgICAgbG9hZE1lc3NhZ2VzKClcbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgbG9hZE1lc3NhZ2VzXSlcblxuICAvLyBTaW5jcm9uaXphciBjaGlwc1Byb2plY3QgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gcHJvamVjdElkIHBlcm8gY2hpcHNQcm9qZWN0IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2hpcHNQcm9qZWN0IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhQcm9qZWN0ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICBjb25zdCB7IHByb2plY3RJZCwgcHJvamVjdE5hbWUgfSA9IGxhc3RNc2dXaXRoUHJvamVjdCB8fCB7fVxuICAgIGlmICghcHJvamVjdElkKSByZXR1cm5cblxuICAgIGZldGNoUHJvamVjdHMocHJvamVjdElkKS50aGVuKHByb2plY3RzID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gcHJvamVjdHM/LmZpbmQocCA9PiBOdW1iZXIocC5pZCkgPT09IE51bWJlcihwcm9qZWN0SWQpKVxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kLm5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogZm91bmQuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGZvdW5kLmlkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdChmb3VuZClcbiAgICAgIH0gZWxzZSBpZiAocHJvamVjdE5hbWUpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwcm9qZWN0SWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KHsgaWQ6IE51bWJlcihwcm9qZWN0SWQpLCBuYW1lOiBwcm9qZWN0TmFtZSB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sIFttZXNzYWdlcywgY2hpcHNQcm9qZWN0LCBsb2FkaW5nTWVzc2FnZXMsIGZldGNoUHJvamVjdHMsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdF0pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2xpZW50IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIGNsaWVudElkIHBlcm8gY2xpZW50IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2xpZW50IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhDbGllbnQgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5jbGllbnRJZCAhPSBudWxsICYmIG1zZy5jbGllbnROYW1lKS5hdCgtMSlcbiAgICBjb25zdCB7IGNsaWVudElkOiBtc2dDbGllbnRJZCwgY2xpZW50TmFtZTogbXNnQ2xpZW50TmFtZSB9ID0gbGFzdE1zZ1dpdGhDbGllbnQgfHwge31cbiAgICBpZiAobXNnQ2xpZW50SWQgPT0gbnVsbCB8fCAhbXNnQ2xpZW50TmFtZSkgcmV0dXJuXG5cbiAgICBzZXRDbGllbnQ/Lih7IGlkOiBOdW1iZXIobXNnQ2xpZW50SWQpLCBuYW1lOiBtc2dDbGllbnROYW1lIH0pXG4gIH0sIFttZXNzYWdlcywgY2xpZW50LCBsb2FkaW5nTWVzc2FnZXMsIHNldENsaWVudF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoZXJyb3JNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuICAgICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgICAgOiB0KCdjaGF0LmVycm9yJylcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtVXBkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiB0ZW1wTWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlOiBjb250ZW50LFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGNvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgICAgLy8gRGV0ZWN0YXIgdG9kYXMgbGFzIFVSTHMgZGUgdGFyZWFzICguLi4vdGFza3MvMTIzL2RldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpXG4gICAgICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4uY29udGVudC5tYXRjaEFsbCh0YXNrVXJsUmVnZXgpXVxuXG4gICAgICBsZXQgY29udGVudFRvQWRkID0gY29udGVudFxuICAgICAgY29uc3QgcHJldmlvdXNNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobSA9PiBtLmlkICE9PSB0ZW1wTWVzc2FnZUlkKS5hdCgtMSlcbiAgICAgIGNvbnN0IGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsICE9IG51bGxcbiAgICAgIGNvbnN0IFRBU0tfQ1JFQVRJT05fVE9PTFMgPSBbJ2NyZWF0ZV90YXNrJywgJ2NyZWF0ZV90YXNrc19iYXRjaCddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwICYmIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgdGFza0lkcyA9IG1hdGNoZXMubWFwKG1hdGNoID0+IHBhcnNlSW50KG1hdGNoWzFdLCAxMCkpXG4gICAgICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldFRhYlRhc2tEZWZhdWx0KHRhc2tJZHNbMF0pXG4gICAgICAgIGNvbnN0IHRhYlNlZ21lbnQgPSB0YWIgPyBgLyR7dGFifWAgOiAnL2RldGFpbCdcbiAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgdXJsLnJlcGxhY2UoL1xcLyhkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKSg/PSR8XFw/KS8sIHRhYlNlZ21lbnQpXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgfSlcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LWNhbmNlbGxlZGAsXG4gICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgfSlcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgfSwgNTAwKVxuICB9LCBbYWRkTWVzc2FnZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgICAgLy8gQWRkIGEgbWVzc2FnZSB3aXRoIHRoZSBhcHByb3ZhbCByZXF1ZXN0XG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gLFxuICAgICAgICBtZXNzYWdlOiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgYXBwcm92YWxTdGF0dXM6ICdwZW5kaW5nJyxcbiAgICAgIH0pXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBhc2tNYWlhLFxuICAgIGlzTG9hZGluZzogd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdG9wU3RyZWFtaW5nLFxuICB9ID0gdXNlT3JjaGVzdHJhdG9yU3RyZWFtKHtcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgfSlcblxuICBjb25zdCBjdXJyZW50UHJvamVjdCA9IHByb2plY3RcblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChtZXNzYWdlOiBzdHJpbmcsIGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9ucywgZmFxSWQ/OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGF0dGFjaG1lbnRzLCBvcHRpb25zIH0gPSBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MoYXR0YWNobWVudHNPck9wdGlvbnMpXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbWVzc2FnZVxuXG4gICAgICBpZiAoIXJlcG9ydGVkRXZlbnQuY3VycmVudCkge1xuICAgICAgICBldmVudChFVkVOVFMucG1BaVR5cGVkVGV4dClcbiAgICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgZWwgY29udGV4dG8gZ2xvYmFsIGVzdMOhIGRlc2FjdHVhbGl6YWRvXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50Py5bbWVzc2FnZXNSZWYuY3VycmVudC5sZW5ndGggLSAxXT8uYWdlbnRJZFxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBxdWVzdGlvbi0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IGF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGlmIChtZXNzYWdlID09PSB0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKSkge1xuICAgICAgICBmaW5hbE1lc3NhZ2UgPSBgRkFROiAke3QoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpfSAtIFRpcG8gZGUgcmVudGFiaWxpZGFkOiAke1xuICAgICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgcHJvamVjdD8uaW5jb21lVHlwZVxuICAgICAgICB9YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICAvLyBWZXJpZmljYXIgY29uc2lzdGVuY2lhIGVudHJlIGNvbnRleHRvIGdsb2JhbCB5IMO6bHRpbW8gbWVuc2FqZVxuICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IHByb2plY3Q/LmlkXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVByb2plY3RJZCA9IGxhc3RNZXNzYWdlV2l0aFByb2plY3Q/LnByb2plY3RJZFxuXG4gICAgICBsZXQgcHJvamVjdFRvUmVxdWVzdDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgICAgLy8gU2kgaGF5IMO6bHRpbW8gbWVuc2FqZSBjb24gcHJvamVjdElkLCB1c2FybG8gKG3DoXMgY29uZmlhYmxlKVxuICAgICAgaWYgKGxhc3RNZXNzYWdlUHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKGxhc3RNZXNzYWdlUHJvamVjdElkKVxuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG4gICAgICB9XG4gICAgICAvLyBTaSBubyBoYXkgw7psdGltbyBtZW5zYWplLCB1c2FyIGVsIGNvbnRleHRvIGdsb2JhbFxuICAgICAgZWxzZSBpZiAoY29udGV4dFByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIHByb2plY3RUb1JlcXVlc3QgPSBjb250ZXh0UHJvamVjdElkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2plY3RzID0gYXdhaXQgZmV0Y2hQcm9qZWN0cyhbcHJvamVjdFRvUmVxdWVzdF0pXG5cbiAgICAgIGNvbnN0IHBheWxvYWRGYXFJZCA9IGZhcUlkID8/IG9wdGlvbnMuZmFxSWRcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGNsaWVudD8uaWRcbiAgICAgICAgICA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCwgLi4uKGNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHByb2plY3Q/LmNsaWVudD8uaWRcbiAgICAgICAgICAgID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQsIC4uLihwcm9qZWN0LmNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0cz8ubGVuZ3RoID8geyBwcm9qZWN0TmFtZTogcHJvamVjdHNbMF0ubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGYXFJZCA/IHsgZmFxSWQ6IHBheWxvYWRGYXFJZCB9IDoge30pLFxuICAgICAgfVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBjbGllbnQsXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGNoYW5nZVByb2plY3QgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGlmIChvcHRpb24uaWQgIT09IHByb2plY3Q/LmlkKSB7XG4gICAgICAgIHNldFByb2plY3Qob3B0aW9uKVxuICAgICAgfVxuXG4gICAgICBpZiAocHJvamVjdCAmJiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KSlcblxuICAgICAgICBhc2tNYWlhKHtcbiAgICAgICAgICBtZXNzYWdlOiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IG9wdGlvbi5pZCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwcm9qZWN0LCBzZXRQcm9qZWN0LCBhc2tNYWlhLCBhdXRoVXNlciwgaXNXZWJTZWFyY2hBY3RpdmVdXG4gIClcblxuICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKGFzeW5jIChmZWVkYmFja1Byb3A6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuQ2hhdHMud2FzSGVscGZ1bENoYXQoY2hhdE1lc3NhZ2VJZCwgZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVApXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBjaGF0TWVzc2FnZUlkICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCB3YXNIZWxwZnVsOiBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUCB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBCdXNjYXIgZWwgbWVuc2FqZSBxdWUgY29udGllbmUgYWxndW5vIGRlIGVzdG9zIHRocmVhZElkcyBlbiBzdXMgcGVuZGluZ19hY3Rpb25zXG4gICAgICBjb25zdCBtZXNzYWdlV2l0aEFwcHJvdmFsID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT5cbiAgICAgICAgbS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gICAgICApXG5cbiAgICAgIGlmICghbWVzc2FnZVdpdGhBcHByb3ZhbCB8fCAhbWVzc2FnZVdpdGhBcHByb3ZhbC5hcHByb3ZhbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRyw7MgbWVuc2FqZSBjb24gYXBwcm92YWwgcGFyYSB0aHJlYWRfaWRzOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IG1lc3NhZ2VXaXRoQXBwcm92YWwuaWRcbiAgICAgIC8vIFVzZSBmaXJzdCB0aHJlYWRJZCBhcyB0aGUgbG9hZGluZyBrZXlcbiAgICAgIGNvbnN0IGxvYWRpbmdLZXkgPSB0aHJlYWRJZHNbMF1cblxuICAgICAgLy8gVXBkYXRlIG1lc3NhZ2Ugc3RhdHVzIGltbWVkaWF0ZWx5XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBtZXNzYWdlSWQpIHtcbiAgICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcblxuICAgICAgLy8gVHJpZ2dlciByZS1yZW5kZXJcbiAgICAgIGNvbnN0IGV4aXN0aW5nTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+IG0uaWQgPT09IG1lc3NhZ2VJZClcbiAgICAgIGlmIChleGlzdGluZ01lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgIGFkZE1lc3NhZ2UoeyAuLi5leGlzdGluZ01lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsbCBjb250aW51ZS10aHJlYWQgZW5kcG9pbnQgd2l0aCBBTEwgdGhyZWFkX2lkcyBpbiBhIHNpbmdsZSByZXF1ZXN0XG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG5cbiAgICAgIC8vIEFkZCBsb2FkaW5nXG4gICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtsb2FkaW5nS2V5XTogdCgnY2hhdC5wcm9jZXNzaW5nJyksXG4gICAgICB9KSlcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZCh7XG4gICAgICAgICAgdGhyZWFkSWRzLCAvLyBTZW5kIGFsbCBhY3Rpb24gdGhyZWFkX2lkcyBhdCBvbmNlXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiBlZGl0ZWRBY3Rpb25zID8gJ2VkaXQnIDogZGVjaXNpb24sXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2xvYWRpbmdLZXldXG4gICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBTU0Ugc3RyZWFtXG4gICAgICAgIGF3YWl0IHByb2Nlc3NTU0VTdHJlYW0ocmVzcG9uc2UsIGxvYWRpbmdLZXksIHtcbiAgICAgICAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1VcGRhdGUoY29udGVudCwgbnVsbCwgJycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk5vZGU6IChtZXNzYWdlOiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5TXNnID0gbWVzc2FnZS5pbmNsdWRlcygnY3JlYXRlX3Rhc2snKSA/IG1lc3NhZ2UgOiB0KCdjaGF0LmV4ZWN1dGluZ0FjdGlvbicpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50VGhyZWFkSWRdOiBkaXNwbGF5TXNnLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoZmluYWxDb250ZW50OiBzdHJpbmcsIHNvdXJjZXM6IGFueSwgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1GaW5pc2goZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IChhcHByb3ZhbFBheWxvYWQ6IGFueSwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyBOZXcgSElUTCBpbnRlcnJ1cHRpb24gZGV0ZWN0ZWQgYWZ0ZXIgcmVzdW1lIChjaGFpbmVkIGFjdGlvbnMpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkKGFwcHJvdmFsUGF5bG9hZCBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbbG9hZGluZ0tleV1cbiAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthdXRoVXNlciwgYWdlbnQsIGFkZE1lc3NhZ2UsIGhhbmRsZVN0cmVhbUVycm9yLCBoYW5kbGVTdHJlYW1VcGRhdGUsIGhhbmRsZVN0cmVhbUZpbmlzaCwgaGFuZGxlQXBwcm92YWxSZXF1aXJlZF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkIHx8IG51bGwsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY2xpZW50Py5pZCA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCB9IDogcHJvamVjdD8uY2xpZW50Py5pZCA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0Py5uYW1lID8geyBwcm9qZWN0TmFtZTogcHJvamVjdC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0Py5jbGllbnQ/Lm5hbWVcbiAgICAgICAgICA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9XG4gICAgICAgICAgOiBjbGllbnQ/Lm5hbWVcbiAgICAgICAgICAgID8geyBjbGllbnROYW1lOiBjbGllbnQubmFtZSB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkID8geyBmYXFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZhcUlkIH0gOiB7fSksXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW1xuICAgIGluaXRpYWxDaGF0SWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIHByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDaEUsU0FBU0MsRUFBRSxJQUFJQyxNQUFNLFFBQVEsTUFBTTtBQUNuQyxTQUFTQyxlQUFlLFFBQVEsb0JBQW9CO0FBQ3BELFNBQVNDLHFCQUFxQixRQUFRLDBCQUEwQjtBQUNoRSxTQUFTQyxJQUFJLFFBQVEsU0FBUztBQUc5QixTQUFTQyxPQUFPLFFBQWlCLHdCQUF3QjtBQUN6RCxTQUFTQyxnQkFBZ0IsUUFBUSw4QkFBOEI7QUFDL0QsU0FBU0MsTUFBTSxF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
910
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJfb3B0aW9ucyRhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dGFjaG1lbnRzIiwib3B0aW9ucyIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJpZCIsInRvU3RyaW5nIiwibmFtZSIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsInRyaW0iLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJ0aHJlYWRJZCIsImNhbGxiYWNrcyIsIl9yZXNwb25zZSRib2R5IiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImlzU3RyZWFtQ29tcGxldGUiLCJoYW5kbGVMaW5lIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJpIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJfaGFuZGxlTGluZSIsInBhcnNlZCIsImV2ZW50RGF0YSIsImNvbnRlbnQiLCJvblRva2VuIiwibWVzc2FnZSIsIm9uTm9kZSIsIl9ldmVudERhdGEkYWdlbnRfaWQiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJzdWdnZXN0aW9ucyIsInN1Z2dlc3RfcmVwbHkiLCJhZ2VudElkUmF3IiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiY29tcGxldGVkQWdlbnRJZCIsIlN0cmluZyIsIm9uQ29tcGxldGUiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJjYWxsIiwib25FcnJvciIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwicmVhZCIsInNlbnQiLCJhYnJ1cHQiLCJkZWNvZGUiLCJzdHJlYW0iLCJwb3AiLCJsZW5ndGgiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsInVzZUNoYXRNYW5hZ2VyIiwiX3JlZjIiLCJpbml0aWFsQ2hhdElkIiwiY2hhdElkIiwidXNlckluaXRpYWxNZXNzYWdlIiwiX3JlZjIkYWdlbnRzIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsImNsaWVudCIsInNldENsaWVudCIsImFnZW50IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJjaGlwc1Byb2plY3QiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJjdXJyZW50TWVzc2FnZUlkIiwiY3VycmVudFVzZXJRdWVzdGlvbiIsImN1cnJlbnRDaGF0SWQiLCJyZXBvcnRlZEV2ZW50IiwibWVzc2FnZXNSZWYiLCJpc1Byb2Nlc3NpbmdSZWYiLCJmaXJzdFRpbWVSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiYWN0aXZlTG9hZGluZ3MiLCJzZXRBY3RpdmVMb2FkaW5ncyIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiX3VzZUNoYXRNZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwibG9hZE1lc3NhZ2VzIiwiYWRkTWVzc2FnZSIsInJlbW92ZU1lc3NhZ2UiLCJoYW5kbGVTY3JvbGwiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwibGFzdE1zZ1dpdGhQcm9qZWN0IiwiZmlsdGVyIiwibXNnIiwicHJvamVjdElkIiwiYXQiLCJfcmVmMyIsInByb2plY3ROYW1lIiwidGhlbiIsInByb2plY3RzIiwiZm91bmQiLCJmaW5kIiwicCIsIk51bWJlciIsIl9mb3VuZCRjbGllbnQiLCJjbGllbnROYW1lIiwibGFzdE1zZ1dpdGhDbGllbnQiLCJjbGllbnRJZCIsIl9yZWY0IiwibXNnQ2xpZW50SWQiLCJtc2dDbGllbnROYW1lIiwiaGFuZGxlU3RyZWFtRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJjb25jYXQiLCJpc0Vycm9yIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwicm9sZSIsIkFTU0lTVEFOVCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsInRlbXBNZXNzYWdlSWQiLCJoYW5kbGVTdHJlYW1GaW5pc2giLCJfcmVmNSIsIl9jYWxsZWUyIiwiX3ByZXZpb3VzTWVzc2FnZSRhcHByIiwidGFza1VybFJlZ2V4IiwibWF0Y2hlcyIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsImhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJwZW5kaW5nQWN0aW9ucyIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiaXNPblByb2plY3RSb3V0ZSIsIl93aW5kb3ckbmV3UHJvamVjdERhcyIsIl93aW5kb3ckbmV3UHJvamVjdERhczIiLCJfd2luZG93JG5ld1Byb2plY3REYXMzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNCIsIl93aW5kb3ckbmV3UHJvamVjdERhczUiLCJfd2luZG93JG5ld1Byb2plY3REYXM2IiwiX2NvbnRleHQyIiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwiYWN0aW9uIiwiaW5jbHVkZXMiLCJ0b29sX25hbWUiLCJhcHByb3ZhbFN0YXR1cyIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJtYXAiLCJtYXRjaCIsInBhcnNlSW50IiwidXJsIiwibG9jYXRpb24iLCJwYXRobmFtZSIsIm5ld1Byb2plY3REYXNoYm9hcmQiLCJhZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJfb2JqZWN0U3ByZWFkIiwiX3g0IiwiX3g1IiwiX3g2IiwiX3g3IiwiX3g4IiwiaGFuZGxlU3RyZWFtU3RvcCIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJzZXRUaW1lb3V0IiwiaGFuZGxlQXBwcm92YWxSZXF1aXJlZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIl91c2VPcmNoZXN0cmF0b3JTdHJlYSIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0b3AiLCJhc2tNYWlhIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdG9wU3RyZWFtaW5nIiwiY3VycmVudFByb2plY3QiLCJzZW5kTWVzc2FnZSIsIl9yZWY2IiwiX2NhbGxlZTMiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJfcHJvamVjdCRjbGllbnQiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJuZXdNZXNzYWdlSWQiLCJsYXN0TWVzc2FnZVdpdGhQcm9qZWN0IiwiY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInBheWxvYWRGYXFJZCIsInBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQzIiwicG1BaVR5cGVkVGV4dCIsIlVTRVIiLCJwcm9qZWN0Q2hhbmdlZCIsImluY29tZVR5cGUiLCJoaXN0b3J5TWVzc2FnZSIsImlzRmluaXRlIiwibGFuZyIsInVzZXJJZCIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY29tcGFueV9pZCIsIm1lc3NhZ2VJZCIsImFnZW50TmFtZSIsImVudGl0eSIsImFnZW50RW50aXR5IiwiX3g5IiwiX3gwIiwiX3gxIiwiX3gxMCIsImNoYW5nZVByb2plY3QiLCJvcHRpb24iLCJoYW5kbGVGZWVkYmFjayIsIl9yZWY3IiwiX2NhbGxlZTQiLCJmZWVkYmFja1Byb3AiLCJjaGF0TWVzc2FnZUlkIiwiX2NvbnRleHQ0IiwiQ2hhdHMiLCJ3YXNIZWxwZnVsQ2hhdCIsIlRIVU1CU19VUCIsIndhc0hlbHBmdWwiLCJfeDExIiwiX3gxMiIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmOCIsIl9jYWxsZWU1IiwidGhyZWFkSWRzIiwiZGVjaXNpb24iLCJlZGl0ZWRBY3Rpb25zIiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0IiwibWVzc2FnZVdpdGhBcHByb3ZhbCIsImxvYWRpbmdLZXkiLCJoYXNDcmVhdGVBZ2VudEFjdGlvbiIsInNob3VsZFJlZmV0Y2hBZ2VudHNBZnRlckNvbXBsZXRpb24iLCJleGlzdGluZ01lc3NhZ2UiLCJuZXdTdGF0dXMiLCJfdCIsIl9jb250ZXh0NSIsIl9tJGFwcHJvdmFsIiwidGhyZWFkX2lkIiwiX2RlZmluZVByb3BlcnR5IiwiT3JjaGVzdHJhdG9yIiwiY29udGludWVUaHJlYWQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uX2lkIiwib2siLCJuZXdMb2FkaW5ncyIsImN1cnJlbnRUaHJlYWRJZCIsImRpc3BsYXlNc2ciLCJhcHByb3ZhbFBheWxvYWQiLCJfeDEzIiwiX3gxNCIsIl94MTUiLCJpbml0aWFsaXplQ2hhdCIsIl9jYWxsZWU2IiwiX3VzZXJJbml0aWFsTWVzc2FnZSRtIiwiX3VzZXJJbml0aWFsTWVzc2FnZSRhIiwiX3Byb2plY3QkY2xpZW50MiIsIl9wcm9qZWN0JGNsaWVudDMiLCJoYXNJbml0aWFsTWVzc2FnZSIsImhhc0luaXRpYWxBdHRhY2htZW50cyIsImhhc0luaXRpYWxGYXEiLCJfY29udGV4dDYiLCJCb29sZWFuIiwicmVzZXRDaGF0Iiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IFNlbmRNZXNzYWdlT3B0aW9ucywgVXNlQ2hhdE1hbmFnZXJQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi91c2VFdmVudCdcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VVc2VyLCBDaGF0SGlzdG9yeVJvbGUsIEFwcHJvdmFsUmVxdWVzdCB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuXG50eXBlIEF0dGFjaG1lbnRzT3JPcHRpb25zID0gQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9uc1xuXG5jb25zdCBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MgPSAoYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50c09yT3B0aW9ucykgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShhdHRhY2htZW50c09yT3B0aW9ucykpIHtcbiAgICByZXR1cm4geyBhdHRhY2htZW50czogYXR0YWNobWVudHNPck9wdGlvbnMsIG9wdGlvbnM6IHt9IGFzIFNlbmRNZXNzYWdlT3B0aW9ucyB9XG4gIH1cblxuICBjb25zdCBvcHRpb25zOiBTZW5kTWVzc2FnZU9wdGlvbnMgPSBhdHRhY2htZW50c09yT3B0aW9ucyA/PyB7fVxuICByZXR1cm4geyBhdHRhY2htZW50czogb3B0aW9ucy5hdHRhY2htZW50cyA/PyBbXSwgb3B0aW9ucyB9XG59XG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KHtcbiAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICB9KVxuXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBhdXRoVXNlci5pZC50b1N0cmluZygpIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBhdXRoVXNlci5maXJzdE5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gYXV0aFVzZXIucGljdHVyZVxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0ge1xuICAgICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuY29uc3QgcGFyc2VTU0VMaW5lID0gKGxpbmU6IHN0cmluZyk6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfSB8IG51bGwgPT4ge1xuICBpZiAoIWxpbmUudHJpbSgpKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG4gICAgcmV0dXJuIHsgZXZlbnRUeXBlLCBkYXRhIH1cbiAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NTU0VTdHJlYW0gPSBhc3luYyAoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgY2FsbGJhY2tzOiB7XG4gICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQ29tcGxldGU6IChcbiAgICAgIGZpbmFsQ29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZyxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHZvaWRcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZD86IChhcHByb3ZhbDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBpc1N0cmVhbUNvbXBsZXRlID0gZmFsc2VcblxuICBmdW5jdGlvbiBoYW5kbGVMaW5lKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU1NFTGluZShsaW5lKVxuICAgIGlmICghcGFyc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhIH0gPSBwYXJzZWRcbiAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSAndG9rZW4nKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gY29udGVudFxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICAgIGlmIChldmVudERhdGEubWVzc2FnZSAmJiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNhbGxiYWNrcy5vbk5vZGUoZXZlbnREYXRhLm1lc3NhZ2UsIHRocmVhZElkKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAoZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgIGNvbnN0IHNvdXJjZXMgPSAoZXZlbnREYXRhLnNvdXJjZXMgYXMgdW5rbm93bikgfHwgbnVsbFxuICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkpXG4gICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdKVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3Rpb25zKVxuICAgICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIGNvbnN0IGFnZW50SWRSYXcgPSBldmVudERhdGEuYWdlbnRfaWQgPz8gZXZlbnREYXRhLmFnZW50SWRcbiAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPSBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHRocmVhZElkLCBzdWdnZXN0aW9ucywgY29tcGxldGVkQWdlbnRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2FwcHJvdmFsX3JlcXVpcmVkJykge1xuICAgICAgY2FsbGJhY2tzLm9uQXBwcm92YWxSZXF1aXJlZD8uKGV2ZW50RGF0YSwgYWNjdW11bGF0ZWRDb250ZW50LCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXZlbnREYXRhLmVycm9yLCB0aHJlYWRJZClcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoIWlzU3RyZWFtQ29tcGxldGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNTdHJlYW1Db21wbGV0ZSA9IHRydWVcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBoYW5kbGVMaW5lKGxpbmVzW2ldKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIGNvbnN0IHsgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBsb2FkTWVzc2FnZXMsIGFkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIGhhbmRsZVNjcm9sbCB9ID1cbiAgICB1c2VDaGF0TWVzc2FnZXMoe1xuICAgICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgICAgb25FcnJvcixcbiAgICAgIGFnZW50cyxcbiAgICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcblxuICAgICAgbG9hZE1lc3NhZ2VzKClcbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgbG9hZE1lc3NhZ2VzXSlcblxuICAvLyBTaW5jcm9uaXphciBjaGlwc1Byb2plY3QgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gcHJvamVjdElkIHBlcm8gY2hpcHNQcm9qZWN0IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2hpcHNQcm9qZWN0IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhQcm9qZWN0ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICBjb25zdCB7IHByb2plY3RJZCwgcHJvamVjdE5hbWUgfSA9IGxhc3RNc2dXaXRoUHJvamVjdCB8fCB7fVxuICAgIGlmICghcHJvamVjdElkKSByZXR1cm5cblxuICAgIGZldGNoUHJvamVjdHMocHJvamVjdElkKS50aGVuKHByb2plY3RzID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gcHJvamVjdHM/LmZpbmQocCA9PiBOdW1iZXIocC5pZCkgPT09IE51bWJlcihwcm9qZWN0SWQpKVxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kLm5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogZm91bmQuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGZvdW5kLmlkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdChmb3VuZClcbiAgICAgIH0gZWxzZSBpZiAocHJvamVjdE5hbWUpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwcm9qZWN0SWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KHsgaWQ6IE51bWJlcihwcm9qZWN0SWQpLCBuYW1lOiBwcm9qZWN0TmFtZSB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sIFttZXNzYWdlcywgY2hpcHNQcm9qZWN0LCBsb2FkaW5nTWVzc2FnZXMsIGZldGNoUHJvamVjdHMsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdF0pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2xpZW50IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIGNsaWVudElkIHBlcm8gY2xpZW50IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2xpZW50IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhDbGllbnQgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5jbGllbnRJZCAhPSBudWxsICYmIG1zZy5jbGllbnROYW1lKS5hdCgtMSlcbiAgICBjb25zdCB7IGNsaWVudElkOiBtc2dDbGllbnRJZCwgY2xpZW50TmFtZTogbXNnQ2xpZW50TmFtZSB9ID0gbGFzdE1zZ1dpdGhDbGllbnQgfHwge31cbiAgICBpZiAobXNnQ2xpZW50SWQgPT0gbnVsbCB8fCAhbXNnQ2xpZW50TmFtZSkgcmV0dXJuXG5cbiAgICBzZXRDbGllbnQ/Lih7IGlkOiBOdW1iZXIobXNnQ2xpZW50SWQpLCBuYW1lOiBtc2dDbGllbnROYW1lIH0pXG4gIH0sIFttZXNzYWdlcywgY2xpZW50LCBsb2FkaW5nTWVzc2FnZXMsIHNldENsaWVudF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoZXJyb3JNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuICAgICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgICAgOiB0KCdjaGF0LmVycm9yJylcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtVXBkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiB0ZW1wTWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlOiBjb250ZW50LFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgIGNvbXBsZXRlZEFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICAvLyBEZXRlY3RhciB0b2RhcyBsYXMgVVJMcyBkZSB0YXJlYXMgKC4uLi90YXNrcy8xMjMvZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycylcbiAgICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgICAgY29uc3QgbWF0Y2hlcyA9IFsuLi5jb250ZW50Lm1hdGNoQWxsKHRhc2tVcmxSZWdleCldXG5cbiAgICAgIGxldCBjb250ZW50VG9BZGQgPSBjb250ZW50XG4gICAgICBjb25zdCBwcmV2aW91c01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtID0+IG0uaWQgIT09IHRlbXBNZXNzYWdlSWQpLmF0KC0xKVxuICAgICAgY29uc3QgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWwgIT0gbnVsbFxuICAgICAgY29uc3QgVEFTS19DUkVBVElPTl9UT09MUyA9IFsnY3JlYXRlX3Rhc2snLCAnY3JlYXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IFRBU0tfRURJVF9UT09MUyA9IFtcbiAgICAgICAgJ2VkaXRfdGFzaycsXG4gICAgICAgICdlZGl0X3Rhc2tzX2JhdGNoJyxcbiAgICAgICAgJ3Rhc2tfYXNzaWduJyxcbiAgICAgICAgJ3Rhc2tfdW5hc3NpZ24nLFxuICAgICAgICAndXBkYXRlX3Rhc2tfdHlwZScsXG4gICAgICAgICd1cGRhdGVfZXN0aW1hdGVkX2hvdXJzJyxcbiAgICAgICAgJ2Fzc2lnbl90YXNrX2xhYmVsJyxcbiAgICAgIF1cbiAgICAgIGNvbnN0IFRBU0tfREVMRVRFX1RPT0xTID0gWydkZWxldGVfdGFzaycsICdkZWxldGVfdGFza3NfYmF0Y2gnXVxuICAgICAgY29uc3QgcGVuZGluZ0FjdGlvbnMgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnMgfHwgW11cbiAgICAgIGNvbnN0IHdhc1Rhc2tDcmVhdGlvbiA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfQ1JFQVRJT05fVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRWRpdCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiYgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc1Rhc2tEZWxldGUgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0RFTEVURV9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IGFjdGlvbi50b29sX25hbWUgPT09ICdjcmVhdGVfYWdlbnQnKVxuICAgICAgbGV0IGNyZWF0ZUFnZW50Rm9sbG93VXA6IHsgYWdlbnRJZDogc3RyaW5nIH0gfCB1bmRlZmluZWRcbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkICYmIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmIGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSkge1xuICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwID0geyBhZ2VudElkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9XG4gICAgICB9XG4gICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwICYmIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgdGFza0lkcyA9IG1hdGNoZXMubWFwKG1hdGNoID0+IHBhcnNlSW50KG1hdGNoWzFdLCAxMCkpXG4gICAgICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldFRhYlRhc2tEZWZhdWx0KHRhc2tJZHNbMF0pXG4gICAgICAgIGNvbnN0IHRhYlNlZ21lbnQgPSB0YWIgPyBgLyR7dGFifWAgOiAnL2RldGFpbCdcbiAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgdXJsLnJlcGxhY2UoL1xcLyhkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKSg/PSR8XFw/KS8sIHRhYlNlZ21lbnQpXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMgfHwgW10sXG4gICAgICAgIC4uLihjcmVhdGVBZ2VudEZvbGxvd1VwID8geyBjcmVhdGVBZ2VudEZvbGxvd1VwIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAoZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlLCBwcm9qZWN0LCBnZXRUYWJUYXNrRGVmYXVsdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYWRkTWVzc2FnZSh7XG4gICAgICBpZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tY2FuY2VsbGVkYCxcbiAgICAgIG1lc3NhZ2U6IHQoJ2NoYXQuY2FuY2VsbGVkJyksXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogdHJ1ZSxcbiAgICB9KVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICB9LCA1MDApXG4gIH0sIFthZGRNZXNzYWdlLCB0XSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICAvLyBBZGQgYSBtZXNzYWdlIHdpdGggdGhlIGFwcHJvdmFsIHJlcXVlc3RcbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGFjY3VtdWxhdGVkQ29udGVudCB8fCAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBhcHByb3ZhbFN0YXR1czogJ3BlbmRpbmcnLFxuICAgICAgfSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlXVxuICApXG5cbiAgY29uc3Qge1xuICAgIGFza01haWEsXG4gICAgaXNMb2FkaW5nOiB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gIH0gPSB1c2VPcmNoZXN0cmF0b3JTdHJlYW0oe1xuICAgIG9uRXJyb3I6IGhhbmRsZVN0cmVhbUVycm9yLFxuICAgIG9uU3RyZWFtVXBkYXRlOiBoYW5kbGVTdHJlYW1VcGRhdGUsXG4gICAgb25GaW5pc2hTdHJlYW06IGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICBvblN0b3A6IGhhbmRsZVN0cmVhbVN0b3AsXG4gICAgb25BcHByb3ZhbFJlcXVpcmVkOiBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkLFxuICB9KVxuXG4gIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gcHJvamVjdFxuXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50IHx8IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIG9wdGlvbnMgfSA9IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyhhdHRhY2htZW50c09yT3B0aW9ucylcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBtZXNzYWdlXG5cbiAgICAgIGlmICghcmVwb3J0ZWRFdmVudC5jdXJyZW50KSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5wbUFpVHlwZWRUZXh0KVxuICAgICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBjb250ZXh0byBnbG9iYWwgZXN0w6EgZGVzYWN0dWFsaXphZG9cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQ/LlttZXNzYWdlc1JlZi5jdXJyZW50Lmxlbmd0aCAtIDFdPy5hZ2VudElkXG5cbiAgICAgIC8vIE5vIGFncmVnYXIgcHJvamVjdElkIGFsIG1lbnNhamUgZGVsIHVzdWFyaW8gLSBzZSBkZXRlcm1pbmFyw6EgZGVzcHXDqXNcbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYHF1ZXN0aW9uLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IGN1cnJlbnRVc2VyLFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuVVNFUixcbiAgICAgICAgc291cmNlczogYXR0YWNobWVudHMsXG4gICAgICB9KVxuXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgbGV0IGZpbmFsTWVzc2FnZSA9IG1lc3NhZ2VcblxuICAgICAgaWYgKG1lc3NhZ2UgPT09IHQoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpKSB7XG4gICAgICAgIGZpbmFsTWVzc2FnZSA9IGBGQVE6ICR7dCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJyl9IC0gVGlwbyBkZSByZW50YWJpbGlkYWQ6ICR7XG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0Q2hhbmdlZD8uaW5jb21lVHlwZSB8fCBwcm9qZWN0Py5pbmNvbWVUeXBlXG4gICAgICAgIH1gXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIC8vIFZlcmlmaWNhciBjb25zaXN0ZW5jaWEgZW50cmUgY29udGV4dG8gZ2xvYmFsIHkgw7psdGltbyBtZW5zYWplXG4gICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gcHJvamVjdD8uaWRcbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlUHJvamVjdElkID0gbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkXG5cbiAgICAgIGxldCBwcm9qZWN0VG9SZXF1ZXN0OiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gICAgICAvLyBTaSBoYXkgw7psdGltbyBtZW5zYWplIGNvbiBwcm9qZWN0SWQsIHVzYXJsbyAobcOhcyBjb25maWFibGUpXG4gICAgICBpZiAobGFzdE1lc3NhZ2VQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIobGFzdE1lc3NhZ2VQcm9qZWN0SWQpXG4gICAgICAgIHByb2plY3RUb1JlcXVlc3QgPSBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGxcbiAgICAgIH1cbiAgICAgIC8vIFNpIG5vIGhheSDDumx0aW1vIG1lbnNhamUsIHVzYXIgZWwgY29udGV4dG8gZ2xvYmFsXG4gICAgICBlbHNlIGlmIChjb250ZXh0UHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IGNvbnRleHRQcm9qZWN0SWRcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSlcblxuICAgICAgY29uc3QgcGF5bG9hZEZhcUlkID0gZmFxSWQgPz8gb3B0aW9ucy5mYXFJZFxuICAgICAgY29uc3QgcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID0gYWdlbnRTdWdnZXN0aW9uSWQgPz8gb3B0aW9ucy5hZ2VudFN1Z2dlc3Rpb25JZFxuXG4gICAgICBjb25zdCBwYXlsb2FkRGF0YSA9IHtcbiAgICAgICAgbWVzc2FnZTogZmluYWxNZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgYWdlbnRJZDogY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY2xpZW50Py5pZFxuICAgICAgICAgID8geyBjbGllbnRJZDogY2xpZW50LmlkLCAuLi4oY2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGNsaWVudC5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDogcHJvamVjdD8uY2xpZW50Py5pZFxuICAgICAgICAgICAgPyB7IGNsaWVudElkOiBwcm9qZWN0LmNsaWVudC5pZCwgLi4uKHByb2plY3QuY2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IHByb2plY3QuY2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3RzPy5sZW5ndGggPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0c1swXS5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEZhcUlkID8geyBmYXFJZDogcGF5bG9hZEZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgfVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBjbGllbnQsXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGNoYW5nZVByb2plY3QgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGlmIChvcHRpb24uaWQgIT09IHByb2plY3Q/LmlkKSB7XG4gICAgICAgIHNldFByb2plY3Qob3B0aW9uKVxuICAgICAgfVxuXG4gICAgICBpZiAocHJvamVjdCAmJiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KSlcblxuICAgICAgICBhc2tNYWlhKHtcbiAgICAgICAgICBtZXNzYWdlOiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IG9wdGlvbi5pZCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbcHJvamVjdCwgc2V0UHJvamVjdCwgYXNrTWFpYSwgYXV0aFVzZXIsIGlzV2ViU2VhcmNoQWN0aXZlLCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZlZWRiYWNrUHJvcDogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5DaGF0cy53YXNIZWxwZnVsQ2hhdChjaGF0TWVzc2FnZUlkLCBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUClcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IGNoYXRNZXNzYWdlSWQgJiYgbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIHdhc0hlbHBmdWw6IGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICAgICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgICAgZWRpdGVkQWN0aW9ucz86IEFycmF5PHsgdG9vbF9uYW1lOiBzdHJpbmc7IGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+XG4gICAgKSA9PiB7XG4gICAgICBpZiAoIXRocmVhZElkcz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHRocmVhZF9pZHMgcHJvdmlkZWQgZm9yIGFwcHJvdmFsIGRlY2lzaW9uJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEJ1c2NhciBlbCBtZW5zYWplIHF1ZSBjb250aWVuZSBhbGd1bm8gZGUgZXN0b3MgdGhyZWFkSWRzIGVuIHN1cyBwZW5kaW5nX2FjdGlvbnNcbiAgICAgIGNvbnN0IG1lc3NhZ2VXaXRoQXBwcm92YWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PlxuICAgICAgICBtLmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IHRocmVhZElkcy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgICAgIClcblxuICAgICAgaWYgKCFtZXNzYWdlV2l0aEFwcHJvdmFsIHx8ICFtZXNzYWdlV2l0aEFwcHJvdmFsLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZVdpdGhBcHByb3ZhbC5pZFxuICAgICAgLy8gVXNlIGZpcnN0IHRocmVhZElkIGFzIHRoZSBsb2FkaW5nIGtleVxuICAgICAgY29uc3QgbG9hZGluZ0tleSA9IHRocmVhZElkc1swXVxuICAgICAgY29uc3QgaGFzQ3JlYXRlQWdlbnRBY3Rpb24gPSBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IGFjdGlvbi50b29sX25hbWUgPT09ICdjcmVhdGVfYWdlbnQnKVxuICAgICAgY29uc3Qgc2hvdWxkUmVmZXRjaEFnZW50c0FmdGVyQ29tcGxldGlvbiA9IGRlY2lzaW9uICE9PSAncmVqZWN0JyAmJiBoYXNDcmVhdGVBZ2VudEFjdGlvblxuXG4gICAgICAvLyBVcGRhdGUgbWVzc2FnZSBzdGF0dXMgaW1tZWRpYXRlbHlcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IG1lc3NhZ2VJZCkge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuXG4gICAgICAvLyBUcmlnZ2VyIHJlLXJlbmRlclxuICAgICAgY29uc3QgZXhpc3RpbmdNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT4gbS5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgaWYgKGV4aXN0aW5nTWVzc2FnZSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgYWRkTWVzc2FnZSh7IC4uLmV4aXN0aW5nTWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9KVxuICAgICAgfVxuXG4gICAgICAvLyBDYWxsIGNvbnRpbnVlLXRocmVhZCBlbmRwb2ludCB3aXRoIEFMTCB0aHJlYWRfaWRzIGluIGEgc2luZ2xlIHJlcXVlc3RcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgLy8gQWRkIGxvYWRpbmdcbiAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW2xvYWRpbmdLZXldOiB0KCdjaGF0LnByb2Nlc3NpbmcnKSxcbiAgICAgIH0pKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkKHtcbiAgICAgICAgICB0aHJlYWRJZHMsIC8vIFNlbmQgYWxsIGFjdGlvbiB0aHJlYWRfaWRzIGF0IG9uY2VcbiAgICAgICAgICBzZXNzaW9uSWQ6IGFwcHJvdmFsLnNlc3Npb25faWQsXG4gICAgICAgICAgZGVjaXNpb246IGVkaXRlZEFjdGlvbnMgPyAnZWRpdCcgOiBkZWNpc2lvbixcbiAgICAgICAgICBlZGl0ZWRBY3Rpb25zLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbbG9hZGluZ0tleV1cbiAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIFNTRSBzdHJlYW1cbiAgICAgICAgYXdhaXQgcHJvY2Vzc1NTRVN0cmVhbShyZXNwb25zZSwgbG9hZGluZ0tleSwge1xuICAgICAgICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZShjb250ZW50LCBudWxsLCAnJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlNc2cgPSBtZXNzYWdlLmluY2x1ZGVzKCdjcmVhdGVfdGFzaycpID8gbWVzc2FnZSA6IHQoJ2NoYXQuZXhlY3V0aW5nQWN0aW9uJylcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJlbnRUaHJlYWRJZF06IGRpc3BsYXlNc2csXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQ29tcGxldGU6IChcbiAgICAgICAgICAgIGZpbmFsQ29udGVudDogc3RyaW5nLFxuICAgICAgICAgICAgc291cmNlczogYW55LFxuICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICAgICAgICBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaChmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgc3VnZ2VzdGlvbnMsIGFnZW50SWQpXG4gICAgICAgICAgICBpZiAoc2hvdWxkUmVmZXRjaEFnZW50c0FmdGVyQ29tcGxldGlvbikge1xuICAgICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1hZ2VudHMtY3VzdG9tJykpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IChhcHByb3ZhbFBheWxvYWQ6IGFueSwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyBOZXcgSElUTCBpbnRlcnJ1cHRpb24gZGV0ZWN0ZWQgYWZ0ZXIgcmVzdW1lIChjaGFpbmVkIGFjdGlvbnMpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkKGFwcHJvdmFsUGF5bG9hZCBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbbG9hZGluZ0tleV1cbiAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthdXRoVXNlciwgYWdlbnQsIGFkZE1lc3NhZ2UsIGhhbmRsZVN0cmVhbUVycm9yLCBoYW5kbGVTdHJlYW1VcGRhdGUsIGhhbmRsZVN0cmVhbUZpbmlzaCwgaGFuZGxlQXBwcm92YWxSZXF1aXJlZF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuXG4gICAgICBpZiAoIWhhc0luaXRpYWxNZXNzYWdlICYmICFoYXNJbml0aWFsQXR0YWNobWVudHMgJiYgIWhhc0luaXRpYWxGYXEpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGFza01haWEoe1xuICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCB8fCBudWxsLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGNsaWVudD8uaWQgPyB7IGNsaWVudElkOiBjbGllbnQuaWQgfSA6IHByb2plY3Q/LmNsaWVudD8uaWQgPyB7IGNsaWVudElkOiBwcm9qZWN0LmNsaWVudC5pZCB9IDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IHByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8uY2xpZW50Py5uYW1lXG4gICAgICAgICAgPyB7IGNsaWVudE5hbWU6IHByb2plY3QuY2xpZW50Lm5hbWUgfVxuICAgICAgICAgIDogY2xpZW50Py5uYW1lXG4gICAgICAgICAgICA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCA/IHsgZmFxSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogdXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgaW5pdGlhbENoYXRJZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgYXV0aFVzZXIsXG4gICAgYWdlbnQsXG4gICAgYXNrTWFpYSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gIF0pXG5cbiAgY29uc3QgcmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3RvcEdlbmVyYXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RvcFN0cmVhbWluZygpXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9LCBbc3RvcFN0cmVhbWluZ10pXG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgY3VycmVudFByb2plY3QsXG4gICAgY3VycmVudENoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgIGN1cnJlbnRNZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcblxuICAgIHNlbmRNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgcmVzZXRDaGF0LFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuXG4gICAgaXNEaXNhYmxlZDogd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcyxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBRzlCLFNBQVNDLE9BQU8sUUFBaUIsd0JBQXdCO0FBQ3pELFNBQVNDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUMvRCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxhQUFhO0FBQzlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFDdEMsU0FBU0MsUUFBUSxRQUFRLDREQUE0RDtBQUNyRixTQUF1Q0MsZUFBZSxRQUF5QixrQkFBa0I7QUFHakcsU0FBU0MsV0FBVyxRQUFRLGdCQUFnQjtBQUM1QyxTQUFTQyxpQkFBaUIsUUFBUSxzQkFBc0I7QUFDeEQsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBSWpFLElBQU1DLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUlDLG9CQUEyQyxFQUFLO0VBQUEsSUFBQUMsb0JBQUE7RUFDaEYsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNILG9CQUFvQixDQUFDLEVBQUU7SUFDdkMsT0FBTztNQUFFSSxXQUFXLEVBQUVKLG9CQUFvQjtNQUFFSyxPQUFPLEVBQUUsQ0FBQztJQUF3QixDQUFDO0VBQ2pGO0VBRUEsSUFBTUEsT0FBMkIsR0FBR0wsb0JBQW9CLGFBQXBCQSxvQkFBb0IsY0FBcEJBLG9CQUFvQixHQUFJLENBQUMsQ0FBQztFQUM5RCxPQUFPO0lBQUVJLFdBQVcsR0FBQUgsb0JBQUEsR0FBRUksT0FBTyxDQUFDRCxXQUFXLGNBQUFILG9CQUFBLGNBQUFBLG9CQUFBLEdBQUksRUFBRTtJQUFFSSxPQUFPLEVBQVBBO0VBQVEsQ0FBQztBQUM1RCxDQUFDO0FBRUQsSUFBTUMsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSUMsUUFBaUIsRUFBSztFQUNoRCxJQUFNQyxXQUFXLEdBQUczQixNQUFNLENBQWtCO0lBQzFDNEIsRUFBRSxFQUFFRixRQUFRLENBQUNFLEVBQUUsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7SUFDMUJDLElBQUksRUFBRUosUUFBUSxDQUFDSyxTQUFTO0lBQ3hCQyxNQUFNLEVBQUVOLFFBQVEsQ0FBQ087RUFDbkIsQ0FBQyxDQUFDO0VBRUYsSUFDRU4sV0FBVyxDQUFDTyxPQUFPLENBQUNOLEVBQUUsS0FBS0YsUUFBUSxDQUFDRSxFQUFFLENBQUNDLFFBQVEsQ0FBQyxDQUFDLElBQ2pERixXQUFXLENBQUNPLE9BQU8sQ0FBQ0osSUFBSSxLQUFLSixRQUFRLENBQUNLLFNBQVMsSUFDL0NKLFdBQVcsQ0FBQ08sT0FBTyxDQUFDRixNQUFNLEtBQUtOLFFBQVEsQ0FBQ08sT0FBTyxFQUMvQztJQUNBTixXQUFXLENBQUNPLE9BQU8sR0FBRztNQUNwQk4sRUFBRSxFQUFFRixRQUFRLENBQUNFLEVBQUUsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7TUFDMUJDLElBQUksRUFBRUosUUFBUSxDQUFDSyxTQUFTO01BQ3hCQyxNQUFNLEVBQUVOLFFBQVEsQ0FBQ087SUFDbkIsQ0FBQztFQUNIO0VBQ0EsT0FBTztJQUNMTixXQUFXLEVBQUVBLFdBQVcsQ0FBQ087RUFDM0IsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFNQyxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBSUMsSUFBWSxFQUFrRDtFQUNsRixJQUFJLENBQUNBLElBQUksQ0FBQ0MsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUk7RUFFN0IsSUFBQUMsV0FBQSxHQUE4QkYsSUFBSSxDQUFDRyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQUFDLFlBQUEsR0FBQUMsY0FBQSxDQUFBSCxXQUFBO0lBQXZDSSxTQUFTLEdBQUFGLFlBQUE7SUFBRUcsUUFBUSxHQUFBSCxZQUFBO0VBQzFCLElBQUksQ0FBQ0UsU0FBUyxJQUFJLENBQUNDLFFBQVEsRUFBRSxPQUFPLElBQUk7RUFFeEMsSUFBTUMsU0FBUyxHQUFHRixTQUFTLENBQUNHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUNSLElBQUksQ0FBQyxDQUFDO0VBQ3pELElBQU1TLE9BQU8sR0FBR0gsUUFBUSxDQUFDRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDUixJQUFJLENBQUMsQ0FBQztFQUVyRCxJQUFJO0lBQ0YsSUFBTVUsSUFBSSxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0gsT0FBTyxDQUFDO0lBQ2hDLE9BQU87TUFBRUYsU0FBUyxFQUFUQSxTQUFTO01BQUVHLElBQUksRUFBSkE7SUFBSyxDQUFDO0VBQzVCLENBQUMsQ0FBQyxPQUFPRyxVQUFVLEVBQUU7SUFDbkJDLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLHlCQUF5QixFQUFFRixVQUFVLEVBQUVKLE9BQU8sQ0FBQztJQUM3RCxPQUFPLElBQUk7RUFDYjtBQUNGLENBQUM7QUFFRCxJQUFNTyxnQkFBZ0I7RUFBQSxJQUFBQyxJQUFBLEdBQUFDLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBRyxTQUFBQyxRQUN2QkMsUUFBa0IsRUFDbEJDLFFBQWdCLEVBQ2hCQyxTQWFDO0lBQUEsSUFBQUMsY0FBQTtJQUFBLElBQUFDLE1BQUEsRUFBQUMsT0FBQSxFQUFBQyxNQUFBLEVBQUFDLGtCQUFBLEVBQUFDLGdCQUFBLEVBWVFDLFVBQVUsRUFBQUMsa0JBQUEsRUFBQUMsSUFBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEsRUFBQUMsQ0FBQTtJQUFBLE9BQUFqQixtQkFBQSxDQUFBa0IsSUFBQSxXQUFBQyxRQUFBO01BQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7UUFBQTtVQUFWVCxVQUFVLFlBQUFVLFlBQUMxQyxJQUFZLEVBQUU7WUFDaEMsSUFBTTJDLE1BQU0sR0FBRzVDLFlBQVksQ0FBQ0MsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQzJDLE1BQU0sRUFBRTtZQUViLElBQVFuQyxTQUFTLEdBQVdtQyxNQUFNLENBQTFCbkMsU0FBUztjQUFFRyxJQUFJLEdBQUtnQyxNQUFNLENBQWZoQyxJQUFJO1lBQ3ZCLElBQU1pQyxTQUFTLEdBQUdqQyxJQUErQjtZQUVqRCxJQUFJSCxTQUFTLEtBQUssT0FBTyxFQUFFO2NBQ3pCLElBQU1xQyxPQUFPLEdBQUdELFNBQVMsQ0FBQ0MsT0FBaUI7Y0FDM0NmLGtCQUFrQixJQUFJZSxPQUFPO2NBQzdCcEIsU0FBUyxDQUFDcUIsT0FBTyxDQUFDaEIsa0JBQWtCLENBQUM7WUFDdkMsQ0FBQyxNQUFNLElBQUl0QixTQUFTLEtBQUssTUFBTSxFQUFFO2NBQy9CLElBQUlvQyxTQUFTLENBQUNHLE9BQU8sSUFBSSxPQUFPSCxTQUFTLENBQUNHLE9BQU8sS0FBSyxRQUFRLEVBQUU7Z0JBQzlEdEIsU0FBUyxDQUFDdUIsTUFBTSxDQUFDSixTQUFTLENBQUNHLE9BQU8sRUFBRXZCLFFBQVEsQ0FBQztjQUMvQztZQUNGLENBQUMsTUFBTSxJQUFJaEIsU0FBUyxLQUFLLFVBQVUsRUFBRTtjQUFBLElBQUF5QyxtQkFBQTtjQUNuQyxJQUFNQyxZQUFZLEdBQUlOLFNBQVMsQ0FBQ0MsT0FBTyxJQUFlZixrQkFBa0I7Y0FDeEUsSUFBTXFCLE9BQU8sR0FBSVAsU0FBUyxDQUFDTyxPQUFPLElBQWdCLElBQUk7Y0FDdEQsSUFBTUMsZUFBZSxHQUFJUixTQUFTLENBQUNTLGlCQUFpQixJQUFlLEVBQUU7Y0FDckUsSUFBTUMsV0FBVyxHQUFHckUsS0FBSyxDQUFDQyxPQUFPLENBQUMwRCxTQUFTLENBQUNXLGFBQWEsQ0FBQyxHQUNyRFgsU0FBUyxDQUFDVyxhQUFhLEdBQ3hCdEUsS0FBSyxDQUFDQyxPQUFPLENBQUMwRCxTQUFTLENBQUNVLFdBQVcsQ0FBQyxHQUNqQ1YsU0FBUyxDQUFDVSxXQUFXLEdBQ3RCLElBQUk7Y0FDVixJQUFNRSxVQUFVLElBQUFQLG1CQUFBLEdBQUdMLFNBQVMsQ0FBQ2EsUUFBUSxjQUFBUixtQkFBQSxjQUFBQSxtQkFBQSxHQUFJTCxTQUFTLENBQUNjLE9BQU87Y0FDMUQsSUFBTUMsZ0JBQWdCLEdBQUdILFVBQVUsSUFBSSxJQUFJLElBQUlJLE1BQU0sQ0FBQ0osVUFBVSxDQUFDLENBQUN2RCxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRzJELE1BQU0sQ0FBQ0osVUFBVSxDQUFDLENBQUN2RCxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUk7Y0FDbEh3QixTQUFTLENBQUNvQyxVQUFVLENBQUNYLFlBQVksRUFBRUMsT0FBTyxFQUFFQyxlQUFlLEVBQUU1QixRQUFRLEVBQUU4QixXQUFXLEVBQUVLLGdCQUFnQixDQUFDO1lBQ3ZHLENBQUMsTUFBTSxJQUFJbkQsU0FBUyxLQUFLLG1CQUFtQixFQUFFO2NBQUEsSUFBQXNELHFCQUFBO2NBQzVDLENBQUFBLHFCQUFBLEdBQUFyQyxTQUFTLENBQUNzQyxrQkFBa0IsY0FBQUQscUJBQUEsZUFBNUJBLHFCQUFBLENBQUFFLElBQUEsQ0FBQXZDLFNBQVMsRUFBc0JtQixTQUFTLEVBQUVkLGtCQUFrQixFQUFFTixRQUFRLENBQUM7WUFDekUsQ0FBQyxNQUFNLElBQUloQixTQUFTLEtBQUssT0FBTyxFQUFFO2NBQ2hDaUIsU0FBUyxDQUFDd0MsT0FBTyxDQUFDckIsU0FBUyxDQUFDNUIsS0FBSyxFQUFFUSxRQUFRLENBQUM7WUFDOUM7VUFDRixDQUFDO1VBMUNLRyxNQUFNLElBQUFELGNBQUEsR0FBR0gsUUFBUSxDQUFDMkMsSUFBSSxjQUFBeEMsY0FBQSx1QkFBYkEsY0FBQSxDQUFleUMsU0FBUyxDQUFDLENBQUM7VUFBQSxJQUNwQ3hDLE1BQU07WUFBQVksUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBLE1BQ0gsSUFBSTJCLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQztRQUFBO1VBR2xDeEMsT0FBTyxHQUFHLElBQUl5QyxXQUFXLENBQUMsQ0FBQztVQUM3QnhDLE1BQU0sR0FBRyxFQUFFO1VBQ1hDLGtCQUFrQixHQUFHLEVBQUU7VUFDdkJDLGdCQUFnQixHQUFHLEtBQUs7UUFBQTtVQUFBLElBb0NwQkEsZ0JBQWdCO1lBQUFRLFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFBQUYsUUFBQSxDQUFBRSxJQUFBO1VBQUEsT0FFUWQsTUFBTSxDQUFDMkMsSUFBSSxDQUFDLENBQUM7UUFBQTtVQUFBckMsa0JBQUEsR0FBQU0sUUFBQSxDQUFBZ0MsSUFBQTtVQUFuQ3JDLElBQUksR0FBQUQsa0JBQUEsQ0FBSkMsSUFBSTtVQUFFQyxLQUFLLEdBQUFGLGtCQUFBLENBQUxFLEtBQUs7VUFBQSxLQUNmRCxJQUFJO1lBQUFLLFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFDTlYsZ0JBQWdCLEdBQUcsSUFBSTtVQUFBLE9BQUFRLFFBQUEsQ0FBQWlDLE1BQUE7UUFBQTtVQUl6QjNDLE1BQU0sSUFBSUQsT0FBTyxDQUFDNkMsTUFBTSxDQUFDdEMsS0FBSyxFQUFFO1lBQUV1QyxNQUFNLEVBQUU7VUFBSyxDQUFDLENBQUM7VUFDM0N0QyxLQUFLLEdBQUdQLE1BQU0sQ0FBQzFCLEtBQUssQ0FBQyxNQUFNLENBQUM7VUFDbEMwQixNQUFNLEdBQUdPLEtBQUssQ0FBQ3VDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRTtVQUUxQixLQUFTdEMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHRCxLQUFLLENBQUN3QyxNQUFNLEVBQUV2QyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hDTCxVQUFVLENBQUNJLEtBQUssQ0FBQ0MsQ0FBQyxDQUFDLENBQUM7VUFDdEI7VUFBQ0UsUUFBQSxDQUFBRSxJQUFBO1VBQUE7UUFBQTtRQUFBO1VBQUEsT0FBQUYsUUFBQSxDQUFBc0MsSUFBQTtNQUFBO0lBQUEsR0FBQXZELE9BQUE7RUFBQSxDQUVKO0VBQUEsZ0JBOUVLTCxnQkFBZ0JBLENBQUE2RCxFQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQTtJQUFBLE9BQUE5RCxJQUFBLENBQUErRCxLQUFBLE9BQUFDLFNBQUE7RUFBQTtBQUFBLEdBOEVyQjtBQUVELE9BQU8sSUFBTUMsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFBQyxLQUFBLEVBS0E7RUFBQSxJQUpqQkMsYUFBYSxHQUFBRCxLQUFBLENBQXJCRSxNQUFNO0lBQ05DLGtCQUFrQixHQUFBSCxLQUFBLENBQWxCRyxrQkFBa0I7SUFDbEJ0QixPQUFPLEdBQUFtQixLQUFBLENBQVBuQixPQUFPO0lBQUF1QixZQUFBLEdBQUFKLEtBQUEsQ0FDUEssTUFBTTtJQUFOQSxNQUFNLEdBQUFELFlBQUEsY0FBRyxFQUFFLEdBQUFBLFlBQUE7RUFFWCxJQUFBRSxLQUFBLEdBQWN2SCxJQUFJLENBQUMsQ0FBQztJQUFad0gsQ0FBQyxHQUFBRCxLQUFBLENBQURDLENBQUM7RUFDVCxJQUFNckcsUUFBUSxHQUFHbEIsT0FBTyxDQUFDLENBQUM7RUFDMUIsSUFBQXdILGlCQUFBLEdBVUl2SCxnQkFBZ0IsQ0FBQyxDQUFDO0lBVHBCd0gsT0FBTyxHQUFBRCxpQkFBQSxDQUFQQyxPQUFPO0lBQ1BDLFVBQVUsR0FBQUYsaUJBQUEsQ0FBVkUsVUFBVTtJQUNWQyxNQUFNLEdBQUFILGlCQUFBLENBQU5HLE1BQU07SUFDTkMsU0FBUyxHQUFBSixpQkFBQSxDQUFUSSxTQUFTO0lBQ1RDLEtBQUssR0FBQUwsaUJBQUEsQ0FBTEssS0FBSztJQUNMQyxpQkFBaUIsR0FBQU4saUJBQUEsQ0FBakJNLGlCQUFpQjtJQUNqQkMsa0JBQWtCLEdBQUFQLGlCQUFBLENBQWxCTyxrQkFBa0I7SUFDbEJDLFlBQVksR0FBQVIsaUJBQUEsQ0FBWlEsWUFBWTtJQUNaQyxlQUFlLEdBQUFULGlCQUFBLENBQWZTLGVBQWU7RUFFakIsSUFBTUMsS0FBSyxHQUFHL0gsUUFBUSxDQUFDLENBQUM7RUFDeEIsSUFBQWdJLFlBQUEsR0FBMEI1SCxXQUFXLENBQUMsQ0FBQztJQUEvQjZILGFBQWEsR0FBQUQsWUFBQSxDQUFiQyxhQUFhO0VBQ3JCLElBQUFDLG1CQUFBLEdBQXdCcEgsa0JBQWtCLENBQUNDLFFBQVEsQ0FBQztJQUE1Q0MsV0FBVyxHQUFBa0gsbUJBQUEsQ0FBWGxILFdBQVc7RUFDbkIsSUFBQW1ILGtCQUFBLEdBQThCOUgsaUJBQWlCLENBQUMsQ0FBQztJQUF6QytILGlCQUFpQixHQUFBRCxrQkFBQSxDQUFqQkMsaUJBQWlCO0VBQ3pCLElBQU1DLGdCQUFnQixHQUFHaEosTUFBTSxDQUFDSSxNQUFNLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLElBQU02SSxtQkFBbUIsR0FBR2pKLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDO0VBQ3ZELElBQU1rSixhQUFhLEdBQUdsSixNQUFNLENBQUN5SCxhQUFhLElBQUlySCxNQUFNLENBQUMsQ0FBQyxDQUFDO0VBQ3ZELElBQU0rSSxhQUFhLEdBQUduSixNQUFNLENBQUMsS0FBSyxDQUFDO0VBQ25DLElBQU1vSixXQUFXLEdBQUdwSixNQUFNLENBQWdCLEVBQUUsQ0FBQztFQUM3QyxJQUFNcUosZUFBZSxHQUFHckosTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNyQyxJQUFNc0osWUFBWSxHQUFHdEosTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNsQyxJQUFBdUosU0FBQSxHQUE0Q3JKLFFBQVEsQ0FBeUIsQ0FBQyxDQUFDLENBQUM7SUFBQXNKLFVBQUEsR0FBQS9HLGNBQUEsQ0FBQThHLFNBQUE7SUFBekVFLGNBQWMsR0FBQUQsVUFBQTtJQUFFRSxpQkFBaUIsR0FBQUYsVUFBQTtFQUV4QyxJQUFNRyxvQkFBb0IsR0FBRzNKLE1BQU0sQ0FBQ3NJLGlCQUFpQixDQUFDO0VBQ3RELElBQU1zQixxQkFBcUIsR0FBRzVKLE1BQU0sQ0FBQ3VJLGtCQUFrQixDQUFDO0VBRXhEdEksU0FBUyxDQUFDLFlBQU07SUFDZDBKLG9CQUFvQixDQUFDekgsT0FBTyxHQUFHb0csaUJBQWlCO0lBQ2hEc0IscUJBQXFCLENBQUMxSCxPQUFPLEdBQUdxRyxrQkFBa0I7RUFDcEQsQ0FBQyxFQUFFLENBQUNELGlCQUFpQixFQUFFQyxrQkFBa0IsQ0FBQyxDQUFDO0VBRTNDLElBQUFzQixnQkFBQSxHQUNFeEosZUFBZSxDQUFDO01BQ2RxSCxNQUFNLEVBQUVELGFBQWEsSUFBSXlCLGFBQWEsQ0FBQ2hILE9BQU87TUFDOUNQLFdBQVcsRUFBWEEsV0FBVztNQUNYZ0csa0JBQWtCLEVBQWxCQSxrQkFBa0I7TUFDbEJ0QixPQUFPLEVBQVBBLE9BQU87TUFDUHdCLE1BQU0sRUFBTkE7SUFDRixDQUFDLENBQUM7SUFQSWlDLGVBQWUsR0FBQUQsZ0JBQUEsQ0FBZkMsZUFBZTtJQUFFQyxRQUFRLEdBQUFGLGdCQUFBLENBQVJFLFFBQVE7SUFBRUMscUJBQXFCLEdBQUFILGdCQUFBLENBQXJCRyxxQkFBcUI7SUFBRUMsWUFBWSxHQUFBSixnQkFBQSxDQUFaSSxZQUFZO0lBQUVDLFVBQVUsR0FBQUwsZ0JBQUEsQ0FBVkssVUFBVTtJQUFFQyxhQUFhLEdBQUFOLGdCQUFBLENBQWJNLGFBQWE7SUFBRUMsWUFBWSxHQUFBUCxnQkFBQSxDQUFaTyxZQUFZO0VBUy9HaEIsV0FBVyxDQUFDbEgsT0FBTyxHQUFHNkgsUUFBUTtFQUU5QjlKLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTW9LLFdBQVcsR0FBRyxJQUFJQyxXQUFXLENBQUMsK0JBQStCLEVBQUU7TUFDbkVDLE1BQU0sRUFBRTtRQUFFVCxlQUFlLEVBQWZBO01BQWdCO0lBQzVCLENBQUMsQ0FBQztJQUNGVSxRQUFRLENBQUNDLGFBQWEsQ0FBQ0osV0FBVyxDQUFDO0VBQ3JDLENBQUMsRUFBRSxDQUFDUCxlQUFlLENBQUMsQ0FBQztFQUVyQjdKLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSXdILGFBQWEsSUFBSUEsYUFBYSxLQUFLeUIsYUFBYSxDQUFDaEgsT0FBTyxFQUFFO01BQzVEO01BQ0FnRyxVQUFVLENBQUMsSUFBSSxDQUFDO01BQ2hCRSxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHLElBQUksQ0FBQztNQUNqQkssZUFBZSxDQUFDLElBQUksQ0FBQztNQUVyQlMsYUFBYSxDQUFDaEgsT0FBTyxHQUFHdUYsYUFBYTtNQUNyQ3VCLGdCQUFnQixDQUFDOUcsT0FBTyxHQUFHOUIsTUFBTSxDQUFDLENBQUM7TUFDbkM2SSxtQkFBbUIsQ0FBQy9HLE9BQU8sR0FBRyxJQUFJO01BQ2xDaUgsYUFBYSxDQUFDakgsT0FBTyxHQUFHLEtBQUs7TUFDN0JtSCxlQUFlLENBQUNuSCxPQUFPLEdBQUcsS0FBSztNQUUvQitILFlBQVksQ0FBQyxDQUFDO0lBQ2hCO0VBQ0YsQ0FBQyxFQUFFLENBQUN4QyxhQUFhLEVBQUVRLE9BQU8sRUFBRUMsVUFBVSxFQUFFRSxTQUFTLEVBQUVLLGVBQWUsRUFBRXdCLFlBQVksQ0FBQyxDQUFDOztFQUVsRjtFQUNBaEssU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJdUksWUFBWSxJQUFJc0IsZUFBZSxFQUFFO0lBQ3JDLElBQU1ZLGtCQUFrQixHQUFHWCxRQUFRLENBQUNZLE1BQU0sQ0FBQyxVQUFBQyxHQUFHO01BQUEsT0FBSUEsR0FBRyxDQUFDQyxTQUFTO0lBQUEsRUFBQyxDQUFDQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsSUFBQUMsS0FBQSxHQUFtQ0wsa0JBQWtCLElBQUksQ0FBQyxDQUFDO01BQW5ERyxTQUFTLEdBQUFFLEtBQUEsQ0FBVEYsU0FBUztNQUFFRyxXQUFXLEdBQUFELEtBQUEsQ0FBWEMsV0FBVztJQUM5QixJQUFJLENBQUNILFNBQVMsRUFBRTtJQUVoQmpDLGFBQWEsQ0FBQ2lDLFNBQVMsQ0FBQyxDQUFDSSxJQUFJLENBQUMsVUFBQUMsUUFBUSxFQUFJO01BQ3hDLElBQU1DLEtBQUssR0FBR0QsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUVFLElBQUksQ0FBQyxVQUFBQyxDQUFDO1FBQUEsT0FBSUMsTUFBTSxDQUFDRCxDQUFDLENBQUN6SixFQUFFLENBQUMsS0FBSzBKLE1BQU0sQ0FBQ1QsU0FBUyxDQUFDO01BQUEsRUFBQztNQUNyRSxJQUFJTSxLQUFLLEVBQUU7UUFBQSxJQUFBSSxhQUFBO1FBQ1Q5QyxlQUFlLENBQUM7VUFDZHVDLFdBQVcsRUFBRUcsS0FBSyxDQUFDckosSUFBSTtVQUN2QjBKLFVBQVUsRUFBRSxFQUFBRCxhQUFBLEdBQUFKLEtBQUssQ0FBQ2hELE1BQU0sY0FBQW9ELGFBQUEsdUJBQVpBLGFBQUEsQ0FBY3pKLElBQUksS0FBSSxFQUFFO1VBQ3BDK0ksU0FBUyxFQUFFN0UsTUFBTSxDQUFDbUYsS0FBSyxDQUFDdkosRUFBRTtRQUM1QixDQUFDLENBQUM7UUFDRnNHLFVBQVUsQ0FBQ2lELEtBQUssQ0FBQztNQUNuQixDQUFDLE1BQU0sSUFBSUgsV0FBVyxFQUFFO1FBQ3RCdkMsZUFBZSxDQUFDO1VBQ2R1QyxXQUFXLEVBQVhBLFdBQVc7VUFDWFEsVUFBVSxFQUFFLEVBQUU7VUFDZFgsU0FBUyxFQUFFN0UsTUFBTSxDQUFDNkUsU0FBUztRQUM3QixDQUFDLENBQUM7UUFDRjNDLFVBQVUsQ0FBQztVQUFFdEcsRUFBRSxFQUFFMEosTUFBTSxDQUFDVCxTQUFTLENBQUM7VUFBRS9JLElBQUksRUFBRWtKO1FBQVksQ0FBQyxDQUFDO01BQzFEO0lBQ0YsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxFQUFFLENBQUNqQixRQUFRLEVBQUV2QixZQUFZLEVBQUVzQixlQUFlLEVBQUVsQixhQUFhLEVBQUVILGVBQWUsRUFBRVAsVUFBVSxDQUFDLENBQUM7O0VBRXpGO0VBQ0FqSSxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUlrSSxNQUFNLElBQUkyQixlQUFlLEVBQUU7SUFDL0IsSUFBTTJCLGlCQUFpQixHQUFHMUIsUUFBUSxDQUFDWSxNQUFNLENBQUMsVUFBQUMsR0FBRztNQUFBLE9BQUlBLEdBQUcsQ0FBQ2MsUUFBUSxJQUFJLElBQUksSUFBSWQsR0FBRyxDQUFDWSxVQUFVO0lBQUEsRUFBQyxDQUFDVixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0YsSUFBQWEsS0FBQSxHQUE2REYsaUJBQWlCLElBQUksQ0FBQyxDQUFDO01BQWxFRyxXQUFXLEdBQUFELEtBQUEsQ0FBckJELFFBQVE7TUFBMkJHLGFBQWEsR0FBQUYsS0FBQSxDQUF6QkgsVUFBVTtJQUN6QyxJQUFJSSxXQUFXLElBQUksSUFBSSxJQUFJLENBQUNDLGFBQWEsRUFBRTtJQUUzQ3pELFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUc7TUFBRXhHLEVBQUUsRUFBRTBKLE1BQU0sQ0FBQ00sV0FBVyxDQUFDO01BQUU5SixJQUFJLEVBQUUrSjtJQUFjLENBQUMsQ0FBQztFQUMvRCxDQUFDLEVBQUUsQ0FBQzlCLFFBQVEsRUFBRTVCLE1BQU0sRUFBRTJCLGVBQWUsRUFBRTFCLFNBQVMsQ0FBQyxDQUFDO0VBRWxELElBQU0wRCxpQkFBaUIsR0FBRy9MLFdBQVcsQ0FDbkMsVUFBQ2dNLFlBQXFCLEVBQUs7SUFDekIsSUFBTTVHLE9BQU8sR0FDWDRHLFlBQVksS0FBSywrREFBK0QsR0FDNUVoRSxDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FDM0JBLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFFckJtQyxVQUFVLENBQUM7TUFDVHRJLEVBQUUsWUFBQW9LLE1BQUEsQ0FBWWhELGdCQUFnQixDQUFDOUcsT0FBTyxDQUFFO01BQ3hDaUQsT0FBTyxFQUFQQSxPQUFPO01BQ1A4RyxPQUFPLEVBQUUsSUFBSTtNQUNiQyxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7TUFDaEJDLElBQUksRUFBRTtRQUFFeEssRUFBRSxFQUFFLFdBQVc7UUFBRUUsSUFBSSxFQUFFO01BQVksQ0FBQztNQUM1Q3VLLElBQUksRUFBRXZMLGVBQWUsQ0FBQ3dMO0lBQ3hCLENBQUMsQ0FBQztJQUNGakQsZUFBZSxDQUFDbkgsT0FBTyxHQUFHLEtBQUs7RUFDakMsQ0FBQyxFQUNELENBQUNnSSxVQUFVLEVBQUVuQyxDQUFDLENBQ2hCLENBQUM7RUFFRCxJQUFNd0Usa0JBQWtCLEdBQUd4TSxXQUFXLENBQ3BDLFVBQUNrRixPQUFlLEVBQUVNLE9BQVksRUFBRUMsZUFBdUIsRUFBSztJQUMxRCxJQUFNZ0gsYUFBYSxhQUFBUixNQUFBLENBQWFoRCxnQkFBZ0IsQ0FBQzlHLE9BQU8sZUFBWTtJQUVwRWdJLFVBQVUsQ0FBQztNQUNUdEksRUFBRSxFQUFFNEssYUFBYTtNQUNqQnJILE9BQU8sRUFBRUYsT0FBTztNQUNoQmlILElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztNQUNoQkMsSUFBSSxFQUFFO1FBQUV4SyxFQUFFLEVBQUUsV0FBVztRQUFFRSxJQUFJLEVBQUU7TUFBWSxDQUFDO01BQzVDdUssSUFBSSxFQUFFdkwsZUFBZSxDQUFDd0wsU0FBUztNQUMvQi9HLE9BQU8sRUFBUEEsT0FBTztNQUNQQyxlQUFlLEVBQWZBO0lBQ0YsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxFQUNELENBQUMwRSxVQUFVLENBQ2IsQ0FBQztFQUVELElBQU11QyxrQkFBa0IsR0FBRzFNLFdBQVc7SUFBQSxJQUFBMk0sS0FBQSxHQUFBbkosaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUNwQyxTQUFBa0osU0FDRTFILE9BQWUsRUFDZk0sT0FBWSxFQUNaQyxlQUF1QixFQUN2QkUsV0FBNkIsRUFDN0JLLGdCQUFnQztNQUFBLElBQUE2RyxxQkFBQTtNQUFBLElBQUFKLGFBQUEsRUFBQUssWUFBQSxFQUFBQyxPQUFBLEVBQUFDLFlBQUEsRUFBQUMsZUFBQSxFQUFBQyw0QkFBQSxFQUFBQyxtQkFBQSxFQUFBQyxlQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGNBQUEsRUFBQUMsZUFBQSxFQUFBQyxXQUFBLEVBQUFDLGFBQUEsRUFBQUMsc0JBQUEsRUFBQUMsbUJBQUEsRUFBQUMsT0FBQSxFQUFBQyxHQUFBLEVBQUFDLFVBQUEsRUFBQUMsa0JBQUEsRUFBQUMsbUJBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsU0FBQSxFQUFBQyxjQUFBLEVBQUFDLGdCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFwRSxXQUFBO01BQUEsT0FBQTdHLG1CQUFBLENBQUFrQixJQUFBLFdBQUFnSyxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQTlKLElBQUEsR0FBQThKLFNBQUEsQ0FBQTdKLElBQUE7VUFBQTtZQUUxQjJILGFBQWEsYUFBQVIsTUFBQSxDQUFhaEQsZ0JBQWdCLENBQUM5RyxPQUFPO1lBQ3hEaUksYUFBYSxDQUFDcUMsYUFBYSxDQUFDOztZQUU1QjtZQUNNSyxZQUFZLEdBQUcsSUFBSThCLE1BQU0sQ0FBQzFOLHNCQUFzQixFQUFFLEdBQUcsQ0FBQztZQUN0RDZMLE9BQU8sR0FBQThCLGtCQUFBLENBQU8zSixPQUFPLENBQUM0SixRQUFRLENBQUNoQyxZQUFZLENBQUM7WUFFOUNFLFlBQVksR0FBRzlILE9BQU87WUFDcEIrSCxlQUFlLEdBQUc1RCxXQUFXLENBQUNsSCxPQUFPLENBQUN5SSxNQUFNLENBQUMsVUFBQW1FLENBQUM7Y0FBQSxPQUFJQSxDQUFDLENBQUNsTixFQUFFLEtBQUs0SyxhQUFhO1lBQUEsRUFBQyxDQUFDMUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hGbUMsNEJBQTRCLEdBQUcsQ0FBQUQsZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUUrQixRQUFRLEtBQUksSUFBSTtZQUNoRTdCLG1CQUFtQixHQUFHLENBQUMsYUFBYSxFQUFFLG9CQUFvQixDQUFDO1lBQzNEQyxlQUFlLEdBQUcsQ0FDdEIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixhQUFhLEVBQ2IsZUFBZSxFQUNmLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsbUJBQW1CLENBQ3BCO1lBQ0tDLGlCQUFpQixHQUFHLENBQUMsYUFBYSxFQUFFLG9CQUFvQixDQUFDO1lBQ3pEQyxjQUFjLEdBQUcsQ0FBQUwsZUFBZSxhQUFmQSxlQUFlLGdCQUFBSixxQkFBQSxHQUFmSSxlQUFlLENBQUUrQixRQUFRLGNBQUFuQyxxQkFBQSx1QkFBekJBLHFCQUFBLENBQTJCb0MsZUFBZSxLQUFJLEVBQUU7WUFDakUxQixlQUFlLEdBQ25CTCw0QkFBNEIsSUFDNUJJLGNBQWMsQ0FBQzRCLElBQUksQ0FBQyxVQUFDQyxNQUFXO2NBQUEsT0FBS2hDLG1CQUFtQixDQUFDaUMsUUFBUSxDQUFDRCxNQUFNLENBQUNFLFNBQVMsQ0FBQztZQUFBLEVBQUM7WUFDaEY3QixXQUFXLEdBQ2ZOLDRCQUE0QixJQUFJSSxjQUFjLENBQUM0QixJQUFJLENBQUMsVUFBQ0MsTUFBVztjQUFBLE9BQUsvQixlQUFlLENBQUNnQyxRQUFRLENBQUNELE1BQU0sQ0FBQ0UsU0FBUyxDQUFDO1lBQUEsRUFBQztZQUM1RzVCLGFBQWEsR0FDakJQLDRCQUE0QixJQUM1QkksY0FBYyxDQUFDNEIsSUFBSSxDQUFDLFVBQUNDLE1BQVc7Y0FBQSxPQUFLOUIsaUJBQWlCLENBQUMrQixRQUFRLENBQUNELE1BQU0sQ0FBQ0UsU0FBUyxDQUFDO1lBQUEsRUFBQztZQUM5RTNCLHNCQUFzQixHQUMxQlIsNEJBQTRCLElBQzVCLENBQUFELGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFcUMsY0FBYyxNQUFLLFVBQVUsSUFDOUNoQyxjQUFjLENBQUM0QixJQUFJLENBQUMsVUFBQ0MsTUFBVztjQUFBLE9BQUtBLE1BQU0sQ0FBQ0UsU0FBUyxLQUFLLGNBQWM7WUFBQSxFQUFDO1lBRTNFLElBQUkzQixzQkFBc0IsSUFBSTZCLE1BQU0sQ0FBQ0Msd0NBQXdDLElBQUl4SixnQkFBZ0IsYUFBaEJBLGdCQUFnQixlQUFoQkEsZ0JBQWdCLENBQUUxRCxJQUFJLENBQUMsQ0FBQyxFQUFFO2NBQ3pHcUwsbUJBQW1CLEdBQUc7Z0JBQUU1SCxPQUFPLEVBQUVDLGdCQUFnQixDQUFDMUQsSUFBSSxDQUFDO2NBQUUsQ0FBQztZQUM1RDtZQUFDLE1BQ0d5SyxPQUFPLENBQUM5RixNQUFNLEdBQUcsQ0FBQyxJQUFJaUcsNEJBQTRCO2NBQUF5QixTQUFBLENBQUE3SixJQUFBO2NBQUE7WUFBQTtZQUM5QzhJLE9BQU8sR0FBR2IsT0FBTyxDQUFDMEMsR0FBRyxDQUFDLFVBQUFDLEtBQUs7Y0FBQSxPQUFJQyxRQUFRLENBQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFBQSxFQUFDO1lBQUFmLFNBQUEsQ0FBQTdKLElBQUE7WUFBQSxPQUMxQ2tFLGlCQUFpQixDQUFDNEUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQUE7WUFBekNDLEdBQUcsR0FBQWMsU0FBQSxDQUFBL0gsSUFBQTtZQUNIa0gsVUFBVSxHQUFHRCxHQUFHLE9BQUE1QixNQUFBLENBQU80QixHQUFHLElBQUssU0FBUztZQUM5Q2IsWUFBWSxHQUFHOUgsT0FBTyxDQUFDcEMsT0FBTyxDQUFDZ0ssWUFBWSxFQUFFLFVBQUE4QyxHQUFHO2NBQUEsT0FDOUNBLEdBQUcsQ0FBQzlNLE9BQU8sQ0FBQyx5REFBeUQsRUFBRWdMLFVBQVUsQ0FBQztZQUFBLENBQ3BGLENBQUM7WUFFS0Msa0JBQWtCLEdBQUcxRSxXQUFXLENBQUNsSCxPQUFPLENBQUN5SSxNQUFNLENBQUMsVUFBQUMsR0FBRztjQUFBLE9BQUlBLEdBQUcsQ0FBQ0MsU0FBUztZQUFBLEVBQUMsQ0FBQ0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVFaUQsbUJBQW1CLEdBQUcsQ0FBQTlGLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFckcsRUFBRSxNQUFJa00sa0JBQWtCLGFBQWxCQSxrQkFBa0IsdUJBQWxCQSxrQkFBa0IsQ0FBRWpELFNBQVM7WUFDbEVtRCxnQkFBZ0IsR0FBR0QsbUJBQW1CLEdBQUcyQixRQUFRLENBQUMxSixNQUFNLENBQUMrSCxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUk7WUFDekZFLFNBQVMsR0FBR3FCLE1BQU0sQ0FBQ00sUUFBUSxDQUFDQyxRQUFRLENBQUNKLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztZQUNsRXZCLGNBQWMsR0FBR0QsU0FBUyxHQUFHeUIsUUFBUSxDQUFDekIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUk7WUFDOURFLGdCQUFnQixHQUFHSCxnQkFBZ0IsSUFBSUUsY0FBYyxJQUFJRixnQkFBZ0IsS0FBS0UsY0FBYztZQUVsRyxJQUFJQyxnQkFBZ0IsRUFBRTtjQUNwQixJQUFJYixlQUFlLEVBQUU7Z0JBQ25CLENBQUFjLHFCQUFBLEdBQUFrQixNQUFNLENBQUNRLG1CQUFtQixjQUFBMUIscUJBQUEsZ0JBQUFDLHNCQUFBLEdBQTFCRCxxQkFBQSxDQUE0QjJCLDBCQUEwQixjQUFBMUIsc0JBQUEsZUFBdERBLHNCQUFBLENBQUFqSSxJQUFBLENBQUFnSSxxQkFBQSxFQUF5RFQsT0FBTyxDQUFDO2NBQ25FLENBQUMsTUFBTSxJQUFJSixXQUFXLEVBQUU7Z0JBQ3RCLENBQUFlLHNCQUFBLEdBQUFnQixNQUFNLENBQUNRLG1CQUFtQixjQUFBeEIsc0JBQUEsZ0JBQUFDLHNCQUFBLEdBQTFCRCxzQkFBQSxDQUE0QjBCLDJCQUEyQixjQUFBekIsc0JBQUEsZUFBdkRBLHNCQUFBLENBQUFuSSxJQUFBLENBQUFrSSxzQkFBQSxFQUEwRFgsT0FBTyxDQUFDO2NBQ3BFLENBQUMsTUFBTSxJQUFJSCxhQUFhLEVBQUU7Z0JBQ3hCLENBQUFnQixzQkFBQSxHQUFBYyxNQUFNLENBQUNRLG1CQUFtQixjQUFBdEIsc0JBQUEsZ0JBQUFDLHNCQUFBLEdBQTFCRCxzQkFBQSxDQUE0QnlCLCtCQUErQixjQUFBeEIsc0JBQUEsZUFBM0RBLHNCQUFBLENBQUFySSxJQUFBLENBQUFvSSxzQkFBQSxFQUE4RGIsT0FBTyxDQUFDO2NBQ3hFO1lBQ0Y7VUFBQztZQUdIekQsVUFBVSxDQUFBZ0csYUFBQTtjQUNSdE8sRUFBRSxZQUFBb0ssTUFBQSxDQUFZeEcsZUFBZSxDQUFFO2NBQy9CTCxPQUFPLEVBQUU0SCxZQUFZO2NBQ3JCYixJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7Y0FDaEJDLElBQUksRUFBRTtnQkFBRXhLLEVBQUUsRUFBRSxXQUFXO2dCQUFFRSxJQUFJLEVBQUU7Y0FBWSxDQUFDO2NBQzVDdUssSUFBSSxFQUFFdkwsZUFBZSxDQUFDd0wsU0FBUztjQUMvQi9HLE9BQU8sRUFBUEEsT0FBTztjQUNQQyxlQUFlLEVBQWZBLGVBQWU7Y0FDZkUsV0FBVyxFQUFFQSxXQUFXLElBQUk7WUFBRSxHQUMxQmdJLG1CQUFtQixHQUFHO2NBQUVBLG1CQUFtQixFQUFuQkE7WUFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN2RCxDQUFDO1lBRUZyRSxlQUFlLENBQUNuSCxPQUFPLEdBQUcsS0FBSztZQUMvQixJQUFJb0gsWUFBWSxDQUFDcEgsT0FBTyxFQUFFO2NBQ2xCbUksV0FBVyxHQUFHLElBQUlDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztjQUN0REUsUUFBUSxDQUFDQyxhQUFhLENBQUNKLFdBQVcsQ0FBQztjQUNuQ2YsWUFBWSxDQUFDcEgsT0FBTyxHQUFHLEtBQUs7WUFDOUI7VUFBQztVQUFBO1lBQUEsT0FBQXdNLFNBQUEsQ0FBQXpILElBQUE7UUFBQTtNQUFBLEdBQUEwRixRQUFBO0lBQUEsQ0FDRjtJQUFBLGlCQUFBd0QsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBO01BQUEsT0FBQTdELEtBQUEsQ0FBQXJGLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsS0FDRCxDQUFDNEMsVUFBVSxFQUFFQyxhQUFhLEVBQUVsQyxPQUFPLEVBQUVjLGlCQUFpQixDQUN4RCxDQUFDO0VBRUQsSUFBTXlILGdCQUFnQixHQUFHelEsV0FBVyxDQUFDLFlBQU07SUFDekNtSyxVQUFVLENBQUM7TUFDVHRJLEVBQUUsWUFBQW9LLE1BQUEsQ0FBWWhELGdCQUFnQixDQUFDOUcsT0FBTyxlQUFZO01BQ2xEaUQsT0FBTyxFQUFFNEMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO01BQzVCbUUsSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO01BQ2hCQyxJQUFJLEVBQUU7UUFBRXhLLEVBQUUsRUFBRSxXQUFXO1FBQUVFLElBQUksRUFBRTtNQUFZLENBQUM7TUFDNUN1SyxJQUFJLEVBQUV2TCxlQUFlLENBQUN3TCxTQUFTO01BQy9CbUUsbUJBQW1CLEVBQUU7SUFDdkIsQ0FBQyxDQUFDO0lBQ0ZwSCxlQUFlLENBQUNuSCxPQUFPLEdBQUcsS0FBSztJQUMvQndPLFVBQVUsQ0FBQyxZQUFNO01BQ2YsSUFBTXJHLFdBQVcsR0FBRyxJQUFJQyxXQUFXLENBQUMsaUJBQWlCLENBQUM7TUFDdERFLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSixXQUFXLENBQUM7SUFDckMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUNULENBQUMsRUFBRSxDQUFDSCxVQUFVLEVBQUVuQyxDQUFDLENBQUMsQ0FBQztFQUVuQixJQUFNNEksc0JBQXNCLEdBQUc1USxXQUFXLENBQ3hDLFVBQUNnUCxRQUF5QixFQUFFN0ssa0JBQTBCLEVBQUs7SUFDekQsSUFBTXNJLGFBQWEsYUFBQVIsTUFBQSxDQUFhaEQsZ0JBQWdCLENBQUM5RyxPQUFPLGVBQVk7SUFDcEVpSSxhQUFhLENBQUNxQyxhQUFhLENBQUM7O0lBRTVCO0lBQ0F0QyxVQUFVLENBQUM7TUFDVHRJLEVBQUUsY0FBQW9LLE1BQUEsQ0FBYytDLFFBQVEsQ0FBQzZCLGtCQUFrQixDQUFFO01BQzdDekwsT0FBTyxFQUFFakIsa0JBQWtCLElBQUksRUFBRTtNQUNqQ2dJLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztNQUNoQkMsSUFBSSxFQUFFO1FBQUV4SyxFQUFFLEVBQUUsV0FBVztRQUFFRSxJQUFJLEVBQUU7TUFBWSxDQUFDO01BQzVDdUssSUFBSSxFQUFFdkwsZUFBZSxDQUFDd0wsU0FBUztNQUMvQnlDLFFBQVEsRUFBUkEsUUFBUTtNQUNSTSxjQUFjLEVBQUU7SUFDbEIsQ0FBQyxDQUFDO0lBQ0ZoRyxlQUFlLENBQUNuSCxPQUFPLEdBQUcsS0FBSztFQUNqQyxDQUFDLEVBQ0QsQ0FBQ2dJLFVBQVUsRUFBRUMsYUFBYSxDQUM1QixDQUFDO0VBRUQsSUFBQTBHLHFCQUFBLEdBTUl2USxxQkFBcUIsQ0FBQztNQUN4QitGLE9BQU8sRUFBRXlGLGlCQUFpQjtNQUMxQmdGLGNBQWMsRUFBRXZFLGtCQUFrQjtNQUNsQ3dFLGNBQWMsRUFBRXRFLGtCQUFrQjtNQUNsQ3VFLE1BQU0sRUFBRVIsZ0JBQWdCO01BQ3hCckssa0JBQWtCLEVBQUV3SztJQUN0QixDQUFDLENBQUM7SUFYQU0sT0FBTyxHQUFBSixxQkFBQSxDQUFQSSxPQUFPO0lBQ0lDLGVBQWUsR0FBQUwscUJBQUEsQ0FBMUJNLFNBQVM7SUFDVEMsU0FBUyxHQUFBUCxxQkFBQSxDQUFUTyxTQUFTO0lBQ1RDLGNBQWMsR0FBQVIscUJBQUEsQ0FBZFEsY0FBYztJQUNkQyxhQUFhLEdBQUFULHFCQUFBLENBQWJTLGFBQWE7RUFTZixJQUFNQyxjQUFjLEdBQUd0SixPQUFPO0VBRTlCLElBQU11SixXQUFXLEdBQUd6UixXQUFXO0lBQUEsSUFBQTBSLEtBQUEsR0FBQWxPLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FDN0IsU0FBQWlPLFNBQ0V2TSxPQUFlLEVBQ2ZoRSxvQkFBNEQsRUFDNUR3USxLQUFjLEVBQ2RDLGlCQUEwQjtNQUFBLElBQUFDLG9CQUFBLEVBQUFDLGVBQUE7TUFBQSxJQUFBQyxxQkFBQSxFQUFBeFEsV0FBQSxFQUFBQyxPQUFBLEVBQUF3USxZQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHdCQUFBLEVBQUFDLFlBQUEsRUFBQUMscUJBQUEsRUFBQUMsT0FBQSxFQUFBckUsZ0JBQUEsRUFBQXNFLG9CQUFBLEVBQUFDLGdCQUFBLEVBQUF4TixNQUFBLEVBQUFtRyxRQUFBLEVBQUFzSCxZQUFBLEVBQUFDLHdCQUFBLEVBQUFDLFdBQUE7TUFBQSxPQUFBbFAsbUJBQUEsQ0FBQWtCLElBQUEsV0FBQWlPLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBL04sSUFBQSxHQUFBK04sU0FBQSxDQUFBOU4sSUFBQTtVQUFBO1lBQUEsTUFFdEJ3RSxlQUFlLENBQUNuSCxPQUFPLElBQUlnUCxlQUFlLElBQUlwSCxlQUFlO2NBQUE2SSxTQUFBLENBQUE5TixJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUE4TixTQUFBLENBQUEvTCxNQUFBO1VBQUE7WUFBQW1MLHFCQUFBLEdBSWhDN1Esd0JBQXdCLENBQUNDLG9CQUFvQixDQUFDLEVBQXZFSSxXQUFXLEdBQUF3USxxQkFBQSxDQUFYeFEsV0FBVyxFQUFFQyxPQUFPLEdBQUF1USxxQkFBQSxDQUFQdlEsT0FBTztZQUU1QjZILGVBQWUsQ0FBQ25ILE9BQU8sR0FBRyxJQUFJO1lBQ3hCOFAsWUFBWSxHQUFHNVIsTUFBTSxDQUFDLENBQUM7WUFDN0I0SSxnQkFBZ0IsQ0FBQzlHLE9BQU8sR0FBRzhQLFlBQVk7WUFDdkMvSSxtQkFBbUIsQ0FBQy9HLE9BQU8sR0FBR2lELE9BQU87WUFFckMsSUFBSSxDQUFDZ0UsYUFBYSxDQUFDakgsT0FBTyxFQUFFO2NBQzFCd0csS0FBSyxDQUFDaEksTUFBTSxDQUFDa1MsYUFBYSxDQUFDO2NBQzNCekosYUFBYSxDQUFDakgsT0FBTyxHQUFHLElBQUk7WUFDOUI7O1lBRUE7WUFDTStQLHNCQUFzQixHQUFHN0ksV0FBVyxDQUFDbEgsT0FBTyxDQUFDeUksTUFBTSxDQUFDLFVBQUFDLEdBQUc7Y0FBQSxPQUFJQSxHQUFHLENBQUNDLFNBQVM7WUFBQSxFQUFDLENBQUNDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVoRm9ILHdCQUF3QixJQUFBTCxvQkFBQSxHQUFHekksV0FBVyxDQUFDbEgsT0FBTyxjQUFBMlAsb0JBQUEsZ0JBQUFBLG9CQUFBLEdBQW5CQSxvQkFBQSxDQUFzQnpJLFdBQVcsQ0FBQ2xILE9BQU8sQ0FBQzhFLE1BQU0sR0FBRyxDQUFDLENBQUMsY0FBQTZLLG9CQUFBLHVCQUFyREEsb0JBQUEsQ0FBdUQvTCxPQUFPLEVBRS9GO1lBQ0FvRSxVQUFVLENBQUM7Y0FDVHRJLEVBQUUsY0FBQW9LLE1BQUEsQ0FBY2hELGdCQUFnQixDQUFDOUcsT0FBTyxDQUFFO2NBQzFDaUQsT0FBTyxFQUFQQSxPQUFPO2NBQ1ArRyxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7Y0FDaEJDLElBQUksRUFBRXpLLFdBQVc7Y0FDakIwSyxJQUFJLEVBQUV2TCxlQUFlLENBQUMrUixJQUFJO2NBQzFCdE4sT0FBTyxFQUFFaEU7WUFDWCxDQUFDLENBQUM7WUFFRnlILGdCQUFnQixDQUFDOUcsT0FBTyxHQUFHOUIsTUFBTSxDQUFDLENBQUM7WUFDL0IrUixZQUFZLEdBQUdoTixPQUFPO1lBRTFCLElBQUlBLE9BQU8sS0FBSzRDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFO2NBQ25Eb0ssWUFBWSxXQUFBbkcsTUFBQSxDQUFXakUsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLCtCQUFBaUUsTUFBQSxDQUN4RCxFQUFBb0cscUJBQUEsR0FBQTVRLE9BQU8sQ0FBQ3NSLGNBQWMsY0FBQVYscUJBQUEsdUJBQXRCQSxxQkFBQSxDQUF3QlcsVUFBVSxNQUFJOUssT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUU4SyxVQUFVLEVBQ3pEO1lBQ0o7WUFFTVYsT0FBTyxHQUFHakosV0FBVyxDQUFDbEgsT0FBTyxDQUFDc04sR0FBRyxDQUFDLFVBQUF3RCxjQUFjO2NBQUEsT0FBSztnQkFDekQvTixPQUFPLEVBQUUrTixjQUFjLENBQUM3TixPQUFPO2dCQUMvQmtILElBQUksRUFBRTJHLGNBQWMsQ0FBQzVHLElBQUksQ0FBQ3hLLEVBQUUsS0FBS0YsUUFBUSxDQUFDRSxFQUFFLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEdBQUdmLGVBQWUsQ0FBQytSLElBQUksR0FBRy9SLGVBQWUsQ0FBQ3dMO2NBQ25HLENBQUM7WUFBQSxDQUFDLENBQUMsRUFFSDtZQUNNMEIsZ0JBQWdCLEdBQUcvRixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXJHLEVBQUU7WUFDOUIwUSxvQkFBb0IsR0FBR0wsc0JBQXNCLGFBQXRCQSxzQkFBc0IsdUJBQXRCQSxzQkFBc0IsQ0FBRXBILFNBQVM7WUFFMUQwSCxnQkFBK0IsR0FBRyxJQUFJLEVBRTFDO1lBQ0EsSUFBSUQsb0JBQW9CLElBQUksSUFBSSxFQUFFO2NBQzFCdk4sTUFBTSxHQUFHdUcsTUFBTSxDQUFDZ0gsb0JBQW9CLENBQUM7Y0FDM0NDLGdCQUFnQixHQUFHakgsTUFBTSxDQUFDMkgsUUFBUSxDQUFDbE8sTUFBTSxDQUFDLEdBQUdBLE1BQU0sR0FBRyxJQUFJO1lBQzVEO1lBQ0E7WUFBQSxLQUNLLElBQUlpSixnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7Y0FDakN1RSxnQkFBZ0IsR0FBR3ZFLGdCQUFnQjtZQUNyQztZQUFDMkUsU0FBQSxDQUFBOU4sSUFBQTtZQUFBLE9BRXNCK0QsYUFBYSxDQUFDLENBQUMySixnQkFBZ0IsQ0FBQyxDQUFDO1VBQUE7WUFBbERySCxRQUFRLEdBQUF5SCxTQUFBLENBQUFoTSxJQUFBO1lBRVI2TCxZQUFZLEdBQUdiLEtBQUssYUFBTEEsS0FBSyxjQUFMQSxLQUFLLEdBQUluUSxPQUFPLENBQUNtUSxLQUFLO1lBQ3JDYyx3QkFBd0IsR0FBR2IsaUJBQWlCLGFBQWpCQSxpQkFBaUIsY0FBakJBLGlCQUFpQixHQUFJcFEsT0FBTyxDQUFDb1EsaUJBQWlCO1lBRXpFYyxXQUFXLEdBQUF4QyxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQTtjQUNmL0ssT0FBTyxFQUFFZ04sWUFBWTtjQUNyQkUsT0FBTyxFQUFQQSxPQUFPO2NBQ1B4SCxTQUFTLEVBQUUwSCxnQkFBZ0I7Y0FDM0JXLElBQUksRUFBRXhSLFFBQVEsQ0FBQ3dSLElBQUk7Y0FDbkJDLE1BQU0sRUFBRXpSLFFBQVEsQ0FBQ0UsRUFBRSxDQUFDQyxRQUFRLENBQUMsQ0FBQztjQUM5QkUsU0FBUyxFQUFFTCxRQUFRLENBQUNLLFNBQVM7Y0FDN0JxUixRQUFRLEVBQUUxUixRQUFRLENBQUMwUixRQUFRO2NBQzNCQyxTQUFTLEVBQUUzUixRQUFRLENBQUM0UixVQUFVLENBQUN6UixRQUFRLENBQUMsQ0FBQztjQUN6QzZGLE1BQU0sRUFBRXdCLGFBQWEsQ0FBQ2hILE9BQU87Y0FDN0JxUixTQUFTLEVBQUV2SyxnQkFBZ0IsQ0FBQzlHLE9BQU87Y0FDbkNzUixTQUFTLEVBQUUsQ0FBQW5MLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFdkcsSUFBSSxLQUFJLEVBQUU7Y0FDNUJnRSxPQUFPLEVBQUVvTSx3QkFBd0IsS0FBSTdKLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFekcsRUFBRSxDQUFDO2NBQy9DMEcsaUJBQWlCLEVBQUVxQixvQkFBb0IsQ0FBQ3pILE9BQU87Y0FDL0NxRyxrQkFBa0IsRUFBRXFCLHFCQUFxQixDQUFDMUg7WUFBTyxHQUM3Q2lHLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUV2RyxFQUFFLEdBQUFzTyxhQUFBO2NBQ1J4RSxRQUFRLEVBQUV2RCxNQUFNLENBQUN2RztZQUFFLEdBQU11RyxNQUFNLENBQUNyRyxJQUFJLEdBQUc7Y0FBRTBKLFVBQVUsRUFBRXJELE1BQU0sQ0FBQ3JHO1lBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUN6RW1HLE9BQU8sYUFBUEEsT0FBTyxnQkFBQTZKLGVBQUEsR0FBUDdKLE9BQU8sQ0FBRUUsTUFBTSxjQUFBMkosZUFBQSxlQUFmQSxlQUFBLENBQWlCbFEsRUFBRSxHQUFBc08sYUFBQTtjQUNmeEUsUUFBUSxFQUFFekQsT0FBTyxDQUFDRSxNQUFNLENBQUN2RztZQUFFLEdBQU1xRyxPQUFPLENBQUNFLE1BQU0sQ0FBQ3JHLElBQUksR0FBRztjQUFFMEosVUFBVSxFQUFFdkQsT0FBTyxDQUFDRSxNQUFNLENBQUNyRztZQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFDakcsQ0FBQyxDQUFDLEdBQ0pvSixRQUFRLGFBQVJBLFFBQVEsZUFBUkEsUUFBUSxDQUFFbEUsTUFBTSxHQUFHO2NBQUVnRSxXQUFXLEVBQUVFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3BKO1lBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUN6RFAsV0FBVyxDQUFDeUYsTUFBTSxHQUFHLENBQUMsR0FBRztjQUFFekYsV0FBVyxFQUFYQTtZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDN0NpUixZQUFZLEdBQUc7Y0FBRWIsS0FBSyxFQUFFYTtZQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDM0NDLHdCQUF3QixHQUFHO2NBQUViLGlCQUFpQixFQUFFYTtZQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQy9FLENBQUFwSyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRW9MLE1BQU0sS0FBSSxJQUFJLEdBQUc7Y0FBRUMsV0FBVyxFQUFFckwsS0FBSyxDQUFDb0w7WUFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBR2hFeEMsT0FBTyxDQUFDeUIsV0FBVyxDQUFDO1VBQUE7VUFBQTtZQUFBLE9BQUFDLFNBQUEsQ0FBQTFMLElBQUE7UUFBQTtNQUFBLEdBQUF5SyxRQUFBO0lBQUEsQ0FDckI7SUFBQSxpQkFBQWlDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLElBQUE7TUFBQSxPQUFBckMsS0FBQSxDQUFBcEssS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUNELENBQ0U0QyxVQUFVLEVBQ1Z4QixLQUFLLEVBQ0x1SSxPQUFPLEVBQ1BoSixPQUFPLEVBQ1BFLE1BQU0sRUFDTnpHLFFBQVEsRUFDUjJHLEtBQUssRUFDTE4sQ0FBQyxFQUNEbUosZUFBZSxFQUNmcEgsZUFBZSxFQUNmeEIsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsQ0FFdEIsQ0FBQztFQUVELElBQU13TCxhQUFhLEdBQUdoVSxXQUFXLENBQy9CLFVBQUNpVSxNQUFlLEVBQUs7SUFDbkIsSUFBSSxDQUFDL0ssbUJBQW1CLENBQUMvRyxPQUFPLEVBQUU7SUFFbEMsSUFBSThSLE1BQU0sQ0FBQ3BTLEVBQUUsTUFBS3FHLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFckcsRUFBRSxHQUFFO01BQzdCc0csVUFBVSxDQUFDOEwsTUFBTSxDQUFDO0lBQ3BCO0lBRUEsSUFBSS9MLE9BQU8sSUFBSWdCLG1CQUFtQixDQUFDL0csT0FBTyxFQUFFO01BQzFDLElBQU1tUSxPQUFPLEdBQUdqSixXQUFXLENBQUNsSCxPQUFPLENBQUNzTixHQUFHLENBQUMsVUFBQXdELGNBQWM7UUFBQSxPQUFLO1VBQ3pEL04sT0FBTyxFQUFFK04sY0FBYyxDQUFDN04sT0FBTztVQUMvQmtILElBQUksRUFBRTJHLGNBQWMsQ0FBQzVHLElBQUksQ0FBQ3hLLEVBQUUsS0FBS0YsUUFBUSxDQUFDRSxFQUFFLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEdBQUdmLGVBQWUsQ0FBQytSLElBQUksR0FBRy9SLGVBQWUsQ0FBQ3dMO1FBQ25HLENBQUM7TUFBQSxDQUFDLENBQUM7TUFFSDJFLE9BQU8sQ0FBQWYsYUFBQTtRQUNML0ssT0FBTyxFQUFFOEQsbUJBQW1CLENBQUMvRyxPQUFPO1FBQ3BDbVEsT0FBTyxFQUFQQSxPQUFPO1FBQ1B4SCxTQUFTLEVBQUVtSixNQUFNLENBQUNwUyxFQUFFO1FBQ3BCc1IsSUFBSSxFQUFFeFIsUUFBUSxDQUFDd1IsSUFBSTtRQUNuQkMsTUFBTSxFQUFFelIsUUFBUSxDQUFDRSxFQUFFLENBQUNDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCRSxTQUFTLEVBQUVMLFFBQVEsQ0FBQ0ssU0FBUztRQUM3QnFSLFFBQVEsRUFBRTFSLFFBQVEsQ0FBQzBSLFFBQVE7UUFDM0JDLFNBQVMsRUFBRTNSLFFBQVEsQ0FBQzRSLFVBQVUsQ0FBQ3pSLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDNkYsTUFBTSxFQUFFd0IsYUFBYSxDQUFDaEgsT0FBTztRQUM3QnFSLFNBQVMsRUFBRXZLLGdCQUFnQixDQUFDOUcsT0FBTztRQUNuQ3NSLFNBQVMsRUFBRSxDQUFBbkwsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV2RyxJQUFJLEtBQUksRUFBRTtRQUM1QmdFLE9BQU8sRUFBRSxDQUFBdUMsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV6RyxFQUFFLEtBQUksRUFBRTtRQUN4QjBHLGlCQUFpQixFQUFFcUIsb0JBQW9CLENBQUN6SCxPQUFPO1FBQy9DcUcsa0JBQWtCLEVBQUVxQixxQkFBcUIsQ0FBQzFIO01BQU8sR0FDN0MsQ0FBQW1HLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFb0wsTUFBTSxLQUFJLElBQUksR0FBRztRQUFFQyxXQUFXLEVBQUVyTCxLQUFLLENBQUNvTDtNQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDL0QsQ0FBQztJQUNKO0VBQ0YsQ0FBQyxFQUNELENBQUN4TCxPQUFPLEVBQUVDLFVBQVUsRUFBRStJLE9BQU8sRUFBRXZQLFFBQVEsRUFBRTRHLGlCQUFpQixFQUFFRCxLQUFLLENBQ25FLENBQUM7RUFFRCxJQUFNNEwsY0FBYyxHQUFHbFUsV0FBVztJQUFBLElBQUFtVSxLQUFBLEdBQUEzUSxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUMsU0FBQTBRLFNBQU9DLFlBQXNCLEVBQUVDLGFBQXFCO01BQUEsSUFBQTFRLFFBQUE7TUFBQSxPQUFBSCxtQkFBQSxDQUFBa0IsSUFBQSxXQUFBNFAsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUExUCxJQUFBLEdBQUEwUCxTQUFBLENBQUF6UCxJQUFBO1VBQUE7WUFBQXlQLFNBQUEsQ0FBQXpQLElBQUE7WUFBQSxPQUM5RGpFLElBQUksQ0FBQzJULEtBQUssQ0FBQ0MsY0FBYyxDQUFDSCxhQUFhLEVBQUVELFlBQVksS0FBS3ZULFFBQVEsQ0FBQzRULFNBQVMsQ0FBQztVQUFBO1lBQTlGOVEsUUFBUSxHQUFBMlEsU0FBQSxDQUFBM04sSUFBQTtZQUNkLElBQUloRCxRQUFRLEVBQUU7Y0FDWnlGLFdBQVcsQ0FBQ2xILE9BQU8sR0FBR2tILFdBQVcsQ0FBQ2xILE9BQU8sQ0FBQ3NOLEdBQUcsQ0FBQyxVQUFBckssT0FBTyxFQUFJO2dCQUN2RCxJQUFJQSxPQUFPLENBQUN2RCxFQUFFLEtBQUt5UyxhQUFhLElBQUlsUCxPQUFPLENBQUNrSCxJQUFJLEtBQUssV0FBVyxFQUFFO2tCQUNoRSxPQUFBNkQsYUFBQSxDQUFBQSxhQUFBLEtBQVkvSyxPQUFPO29CQUFFdVAsVUFBVSxFQUFFTixZQUFZLEtBQUt2VCxRQUFRLENBQUM0VDtrQkFBUztnQkFDdEU7Z0JBQ0EsT0FBT3RQLE9BQU87Y0FDaEIsQ0FBQyxDQUFDO1lBQ0o7VUFBQztVQUFBO1lBQUEsT0FBQW1QLFNBQUEsQ0FBQXJOLElBQUE7UUFBQTtNQUFBLEdBQUFrTixRQUFBO0lBQUEsQ0FDRjtJQUFBLGlCQUFBUSxJQUFBLEVBQUFDLElBQUE7TUFBQSxPQUFBVixLQUFBLENBQUE3TSxLQUFBLE9BQUFDLFNBQUE7SUFBQTtFQUFBLEtBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTXVOLHNCQUFzQixHQUFHOVUsV0FBVztJQUFBLElBQUErVSxLQUFBLEdBQUF2UixpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQ3hDLFNBQUFzUixTQUNFQyxTQUFtQixFQUNuQkMsUUFBOEIsRUFDOUJDLGFBQTJFO01BQUEsSUFBQUMscUJBQUE7TUFBQSxJQUFBQyxtQkFBQSxFQUFBckcsUUFBQSxFQUFBd0UsU0FBQSxFQUFBOEIsVUFBQSxFQUFBQyxvQkFBQSxFQUFBQyxrQ0FBQSxFQUFBQyxlQUFBLEVBQUFDLFNBQUEsRUFBQTlSLFFBQUEsRUFBQStSLEVBQUE7TUFBQSxPQUFBbFMsbUJBQUEsQ0FBQWtCLElBQUEsV0FBQWlSLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBL1EsSUFBQSxHQUFBK1EsU0FBQSxDQUFBOVEsSUFBQTtVQUFBO1lBQUEsSUFFdEVtUSxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFFaE8sTUFBTTtjQUFBMk8sU0FBQSxDQUFBOVEsSUFBQTtjQUFBO1lBQUE7WUFDcEIxQixPQUFPLENBQUNDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQztZQUFBLE9BQUF1UyxTQUFBLENBQUEvTyxNQUFBO1VBQUE7WUFJL0Q7WUFDTXdPLG1CQUFtQixHQUFHaE0sV0FBVyxDQUFDbEgsT0FBTyxDQUFDa0osSUFBSSxDQUFDLFVBQUEwRCxDQUFDO2NBQUEsSUFBQThHLFdBQUE7Y0FBQSxRQUFBQSxXQUFBLEdBQ3BEOUcsQ0FBQyxDQUFDQyxRQUFRLGNBQUE2RyxXQUFBLGdCQUFBQSxXQUFBLEdBQVZBLFdBQUEsQ0FBWTVHLGVBQWUsY0FBQTRHLFdBQUEsdUJBQTNCQSxXQUFBLENBQTZCM0csSUFBSSxDQUFDLFVBQUFDLE1BQU07Z0JBQUEsT0FBSThGLFNBQVMsQ0FBQzdGLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDMkcsU0FBUyxDQUFDO2NBQUEsRUFBQztZQUFBLENBQ25GLENBQUM7WUFBQSxNQUVHLENBQUNULG1CQUFtQixJQUFJLENBQUNBLG1CQUFtQixDQUFDckcsUUFBUTtjQUFBNEcsU0FBQSxDQUFBOVEsSUFBQTtjQUFBO1lBQUE7WUFDdkQxQixPQUFPLENBQUNDLEtBQUssQ0FBQyxzREFBc0QsRUFBRTRSLFNBQVMsQ0FBQztZQUFBLE9BQUFXLFNBQUEsQ0FBQS9PLE1BQUE7VUFBQTtZQUkxRW1JLFFBQVEsR0FBS3FHLG1CQUFtQixDQUFoQ3JHLFFBQVE7WUFDVndFLFNBQVMsR0FBRzZCLG1CQUFtQixDQUFDeFQsRUFBRSxFQUN4QztZQUNNeVQsVUFBVSxHQUFHTCxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3pCTSxvQkFBb0IsSUFBQUgscUJBQUEsR0FBR3BHLFFBQVEsQ0FBQ0MsZUFBZSxjQUFBbUcscUJBQUEsdUJBQXhCQSxxQkFBQSxDQUEwQmxHLElBQUksQ0FBQyxVQUFBQyxNQUFNO2NBQUEsT0FBSUEsTUFBTSxDQUFDRSxTQUFTLEtBQUssY0FBYztZQUFBLEVBQUM7WUFDcEdtRyxrQ0FBa0MsR0FBR04sUUFBUSxLQUFLLFFBQVEsSUFBSUssb0JBQW9CLEVBRXhGO1lBQ0FsTSxXQUFXLENBQUNsSCxPQUFPLEdBQUdrSCxXQUFXLENBQUNsSCxPQUFPLENBQUNzTixHQUFHLENBQUMsVUFBQXJLLE9BQU8sRUFBSTtjQUN2RCxJQUFJQSxPQUFPLENBQUN2RCxFQUFFLEtBQUsyUixTQUFTLEVBQUU7Z0JBQzVCLElBQU1rQyxTQUFTLEdBQUdSLFFBQVEsS0FBSyxTQUFTLEdBQUcsVUFBVSxHQUFHLFVBQVU7Z0JBQ2xFLE9BQUEvRSxhQUFBLENBQUFBLGFBQUEsS0FBWS9LLE9BQU87a0JBQUVrSyxjQUFjLEVBQUVvRztnQkFBUztjQUNoRDtjQUNBLE9BQU90USxPQUFPO1lBQ2hCLENBQUMsQ0FBQzs7WUFFRjtZQUNNcVEsZUFBZSxHQUFHcE0sV0FBVyxDQUFDbEgsT0FBTyxDQUFDa0osSUFBSSxDQUFDLFVBQUEwRCxDQUFDO2NBQUEsT0FBSUEsQ0FBQyxDQUFDbE4sRUFBRSxLQUFLMlIsU0FBUztZQUFBLEVBQUM7WUFDekUsSUFBSWlDLGVBQWUsRUFBRTtjQUNiQyxTQUFTLEdBQUdSLFFBQVEsS0FBSyxTQUFTLEdBQUcsVUFBVSxHQUFHLFVBQVU7Y0FDbEUvSyxVQUFVLENBQUFnRyxhQUFBLENBQUFBLGFBQUEsS0FBTXNGLGVBQWU7Z0JBQUVuRyxjQUFjLEVBQUVvRztjQUFTLEVBQUUsQ0FBQztZQUMvRDs7WUFFQTtZQUNBcE0sZUFBZSxDQUFDbkgsT0FBTyxHQUFHLElBQUk7WUFDOUI4RyxnQkFBZ0IsQ0FBQzlHLE9BQU8sR0FBRzlCLE1BQU0sQ0FBQyxDQUFDOztZQUVuQztZQUNBc0osaUJBQWlCLENBQUMsVUFBQTlFLElBQUk7Y0FBQSxPQUFBc0wsYUFBQSxDQUFBQSxhQUFBLEtBQ2pCdEwsSUFBSSxPQUFBa1IsZUFBQSxLQUNOVCxVQUFVLEVBQUd0TixDQUFDLENBQUMsaUJBQWlCLENBQUM7WUFBQSxDQUNsQyxDQUFDO1lBQUE0TixTQUFBLENBQUEvUSxJQUFBO1lBQUErUSxTQUFBLENBQUE5USxJQUFBO1lBQUEsT0FHc0JqRSxJQUFJLENBQUNtVixZQUFZLENBQUNDLGNBQWMsQ0FBQztjQUN0RGhCLFNBQVMsRUFBVEEsU0FBUztjQUFFO2NBQ1hpQixTQUFTLEVBQUVsSCxRQUFRLENBQUNtSCxVQUFVO2NBQzlCakIsUUFBUSxFQUFFQyxhQUFhLEdBQUcsTUFBTSxHQUFHRCxRQUFRO2NBQzNDQyxhQUFhLEVBQWJBLGFBQWE7Y0FDYnBQLE9BQU8sRUFBRSxDQUFBdUMsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV6RyxFQUFFLEtBQUksRUFBRTtjQUN4QnNSLElBQUksRUFBRXhSLFFBQVEsQ0FBQ3dSO1lBQ2pCLENBQUMsQ0FBQztVQUFBO1lBUEl2UCxRQUFRLEdBQUFnUyxTQUFBLENBQUFoUCxJQUFBO1lBQUEsSUFTVGhELFFBQVEsQ0FBQ3dTLEVBQUU7Y0FBQVIsU0FBQSxDQUFBOVEsSUFBQTtjQUFBO1lBQUE7WUFDZGlILGlCQUFpQixDQUFDLENBQUM7WUFDbkJwQyxpQkFBaUIsQ0FBQyxVQUFBOUUsSUFBSSxFQUFJO2NBQ3hCLElBQU13UixXQUFXLEdBQUFsRyxhQUFBLEtBQVF0TCxJQUFJLENBQUU7Y0FDL0IsT0FBT3dSLFdBQVcsQ0FBQ2YsVUFBVSxDQUFDO2NBQzlCLE9BQU9lLFdBQVc7WUFDcEIsQ0FBQyxDQUFDO1lBQUEsT0FBQVQsU0FBQSxDQUFBL08sTUFBQTtVQUFBO1lBQUErTyxTQUFBLENBQUE5USxJQUFBO1lBQUEsT0FLRXhCLGdCQUFnQixDQUFDTSxRQUFRLEVBQUUwUixVQUFVLEVBQUU7Y0FDM0NuUSxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBR0QsT0FBZSxFQUFLO2dCQUM1QnNILGtCQUFrQixDQUFDdEgsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7Y0FDdkMsQ0FBQztjQUNERyxNQUFNLEVBQUUsU0FBUkEsTUFBTUEsQ0FBR0QsT0FBZSxFQUFFa1IsZUFBdUIsRUFBSztnQkFDcEQsSUFBTUMsVUFBVSxHQUFHblIsT0FBTyxDQUFDZ0ssUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHaEssT0FBTyxHQUFHNEMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDO2dCQUN4RjJCLGlCQUFpQixDQUFDLFVBQUE5RSxJQUFJO2tCQUFBLE9BQUFzTCxhQUFBLENBQUFBLGFBQUEsS0FDakJ0TCxJQUFJLE9BQUFrUixlQUFBLEtBQ05PLGVBQWUsRUFBR0MsVUFBVTtnQkFBQSxDQUM3QixDQUFDO2NBQ0wsQ0FBQztjQUNEclEsVUFBVSxFQUFFLFNBQVpBLFVBQVVBLENBQ1JYLFlBQW9CLEVBQ3BCQyxPQUFZLEVBQ1pDLGVBQXVCLEVBQ3ZCNlEsZUFBdUIsRUFDdkIzUSxXQUE2QixFQUM3QkksT0FBdUIsRUFDcEI7Z0JBQ0gyRyxrQkFBa0IsQ0FBQ25ILFlBQVksRUFBRUMsT0FBTyxFQUFFQyxlQUFlLEVBQUVFLFdBQVcsRUFBRUksT0FBTyxDQUFDO2dCQUNoRixJQUFJeVAsa0NBQWtDLEVBQUU7a0JBQ3RDL0ssUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSUgsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQ2xFO2dCQUNBWixpQkFBaUIsQ0FBQyxVQUFBOUUsSUFBSSxFQUFJO2tCQUN4QixJQUFNd1IsV0FBVyxHQUFBbEcsYUFBQSxLQUFRdEwsSUFBSSxDQUFFO2tCQUMvQixPQUFPd1IsV0FBVyxDQUFDQyxlQUFlLENBQUM7a0JBQ25DLE9BQU9ELFdBQVc7Z0JBQ3BCLENBQUMsQ0FBQztjQUNKLENBQUM7Y0FDRGpRLGtCQUFrQixFQUFFLFNBQXBCQSxrQkFBa0JBLENBQUdvUSxlQUFvQixFQUFFclMsa0JBQTBCLEVBQUVtUyxlQUF1QixFQUFLO2dCQUNqRztnQkFDQTNNLGlCQUFpQixDQUFDLFVBQUE5RSxJQUFJLEVBQUk7a0JBQ3hCLElBQU13UixXQUFXLEdBQUFsRyxhQUFBLEtBQVF0TCxJQUFJLENBQUU7a0JBQy9CLE9BQU93UixXQUFXLENBQUNDLGVBQWUsQ0FBQztrQkFDbkMsT0FBT0QsV0FBVztnQkFDcEIsQ0FBQyxDQUFDO2dCQUNGekYsc0JBQXNCLENBQUM0RixlQUFlLEVBQXFCclMsa0JBQWtCLENBQUM7Y0FDaEYsQ0FBQztjQUNEbUMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUdqRCxLQUFVLEVBQUVpVCxlQUF1QixFQUFLO2dCQUNoRGxULE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLFlBQVksRUFBRUEsS0FBSyxDQUFDO2dCQUNsQzBJLGlCQUFpQixDQUFDLENBQUM7Z0JBQ25CcEMsaUJBQWlCLENBQUMsVUFBQTlFLElBQUksRUFBSTtrQkFDeEIsSUFBTXdSLFdBQVcsR0FBQWxHLGFBQUEsS0FBUXRMLElBQUksQ0FBRTtrQkFDL0IsT0FBT3dSLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDO2tCQUNuQyxPQUFPRCxXQUFXO2dCQUNwQixDQUFDLENBQUM7Y0FDSjtZQUNGLENBQUMsQ0FBQztVQUFBO1lBQUFULFNBQUEsQ0FBQTlRLElBQUE7WUFBQTtVQUFBO1lBQUE4USxTQUFBLENBQUEvUSxJQUFBO1lBQUE4USxFQUFBLEdBQUFDLFNBQUE7WUFFRjdKLGlCQUFpQixDQUFDLENBQUM7WUFDbkJwQyxpQkFBaUIsQ0FBQyxVQUFBOUUsSUFBSSxFQUFJO2NBQ3hCLElBQU13UixXQUFXLEdBQUFsRyxhQUFBLEtBQVF0TCxJQUFJLENBQUU7Y0FDL0IsT0FBT3dSLFdBQVcsQ0FBQ2YsVUFBVSxDQUFDO2NBQzlCLE9BQU9lLFdBQVc7WUFDcEIsQ0FBQyxDQUFDO1VBQUE7VUFBQTtZQUFBLE9BQUFULFNBQUEsQ0FBQTFPLElBQUE7UUFBQTtNQUFBLEdBQUE4TixRQUFBO0lBQUEsQ0FFTDtJQUFBLGlCQUFBeUIsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUE7TUFBQSxPQUFBNUIsS0FBQSxDQUFBek4sS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUNELENBQUM1RixRQUFRLEVBQUUyRyxLQUFLLEVBQUU2QixVQUFVLEVBQUU0QixpQkFBaUIsRUFBRVMsa0JBQWtCLEVBQUVFLGtCQUFrQixFQUFFa0Usc0JBQXNCLENBQ2pILENBQUM7RUFFRCxJQUFNZ0csY0FBYyxHQUFHNVcsV0FBVyxjQUFBd0QsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFDLFNBQUFtVCxTQUFBO0lBQUEsSUFBQUMscUJBQUEsRUFBQUMscUJBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsaUJBQUEsRUFBQUMscUJBQUEsRUFBQUMsYUFBQSxFQUFBOUUsT0FBQTtJQUFBLE9BQUE3TyxtQkFBQSxDQUFBa0IsSUFBQSxXQUFBMFMsU0FBQTtNQUFBLGtCQUFBQSxTQUFBLENBQUF4UyxJQUFBLEdBQUF3UyxTQUFBLENBQUF2UyxJQUFBO1FBQUE7VUFDakMsSUFBSSxDQUFDeUUsWUFBWSxDQUFDcEgsT0FBTyxFQUFFO1lBQ3pCb0gsWUFBWSxDQUFDcEgsT0FBTyxHQUFHLElBQUk7VUFDN0I7VUFBQyxLQUNHdUYsYUFBYTtZQUFBMlAsU0FBQSxDQUFBdlMsSUFBQTtZQUFBO1VBQUE7VUFBQXVTLFNBQUEsQ0FBQXZTLElBQUE7VUFBQSxPQUNUb0YsWUFBWSxDQUFDLENBQUM7UUFBQTtVQUFBbU4sU0FBQSxDQUFBdlMsSUFBQTtVQUFBO1FBQUE7VUFBQSxLQUNYOEMsa0JBQWtCO1lBQUF5UCxTQUFBLENBQUF2UyxJQUFBO1lBQUE7VUFBQTtVQUNyQm9TLGlCQUFpQixHQUFHSSxPQUFPLEVBQUFSLHFCQUFBLEdBQUNsUCxrQkFBa0IsQ0FBQ3hDLE9BQU8sY0FBQTBSLHFCQUFBLHVCQUExQkEscUJBQUEsQ0FBNEJ4VSxJQUFJLENBQUMsQ0FBQyxDQUFDO1VBQy9ENlUscUJBQXFCLEdBQUdHLE9BQU8sRUFBQVAscUJBQUEsR0FBQ25QLGtCQUFrQixDQUFDcEcsV0FBVyxjQUFBdVYscUJBQUEsdUJBQTlCQSxxQkFBQSxDQUFnQzlQLE1BQU0sQ0FBQztVQUN2RW1RLGFBQWEsR0FBR0UsT0FBTyxDQUFDMVAsa0JBQWtCLENBQUNnSyxLQUFLLENBQUM7VUFBQSxNQUVuRCxDQUFDc0YsaUJBQWlCLElBQUksQ0FBQ0MscUJBQXFCLElBQUksQ0FBQ0MsYUFBYTtZQUFBQyxTQUFBLENBQUF2UyxJQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUF1UyxTQUFBLENBQUF4USxNQUFBO1FBQUE7VUFJNUR5TCxPQUFPLEdBQUdqSixXQUFXLENBQUNsSCxPQUFPLENBQUNzTixHQUFHLENBQUMsVUFBQXdELGNBQWM7WUFBQSxPQUFLO2NBQ3pEL04sT0FBTyxFQUFFK04sY0FBYyxDQUFDN04sT0FBTztjQUMvQmtILElBQUksRUFBRTJHLGNBQWMsQ0FBQzVHLElBQUksQ0FBQ3hLLEVBQUUsS0FBS0YsUUFBUSxDQUFDRSxFQUFFLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEdBQUdmLGVBQWUsQ0FBQytSLElBQUksR0FBRy9SLGVBQWUsQ0FBQ3dMO1lBQ25HLENBQUM7VUFBQSxDQUFDLENBQUM7VUFFSDJFLE9BQU8sQ0FBQWYsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQTtZQUNML0ssT0FBTyxFQUFFd0Msa0JBQWtCLENBQUN4QyxPQUFPO1lBQ25Da04sT0FBTyxFQUFQQSxPQUFPO1lBQ1B4SCxTQUFTLEVBQUUsQ0FBQTVDLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFckcsRUFBRSxLQUFJLElBQUk7WUFDOUJzUixJQUFJLEVBQUV4UixRQUFRLENBQUN3UixJQUFJO1lBQ25CQyxNQUFNLEVBQUV6UixRQUFRLENBQUNFLEVBQUUsQ0FBQ0MsUUFBUSxDQUFDLENBQUM7WUFDOUJFLFNBQVMsRUFBRUwsUUFBUSxDQUFDSyxTQUFTO1lBQzdCcVIsUUFBUSxFQUFFMVIsUUFBUSxDQUFDMFIsUUFBUTtZQUMzQkMsU0FBUyxFQUFFM1IsUUFBUSxDQUFDNFIsVUFBVSxDQUFDelIsUUFBUSxDQUFDLENBQUM7WUFDekM2RixNQUFNLEVBQUV3QixhQUFhLENBQUNoSCxPQUFPO1lBQzdCcVIsU0FBUyxFQUFFdkssZ0JBQWdCLENBQUM5RyxPQUFPO1lBQ25Dc1IsU0FBUyxFQUFFbkwsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV2RyxJQUFLO1lBQ3ZCZ0UsT0FBTyxFQUFFdUMsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV6RyxFQUFHO1lBQ25CMEcsaUJBQWlCLEVBQUVxQixvQkFBb0IsQ0FBQ3pILE9BQU87WUFDL0NxRyxrQkFBa0IsRUFBRXFCLHFCQUFxQixDQUFDMUg7VUFBTyxHQUM3Q2lHLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUV2RyxFQUFFLEdBQUc7WUFBRThKLFFBQVEsRUFBRXZELE1BQU0sQ0FBQ3ZHO1VBQUcsQ0FBQyxHQUFHcUcsT0FBTyxhQUFQQSxPQUFPLGdCQUFBOE8sZ0JBQUEsR0FBUDlPLE9BQU8sQ0FBRUUsTUFBTSxjQUFBNE8sZ0JBQUEsZUFBZkEsZ0JBQUEsQ0FBaUJuVixFQUFFLEdBQUc7WUFBRThKLFFBQVEsRUFBRXpELE9BQU8sQ0FBQ0UsTUFBTSxDQUFDdkc7VUFBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ2pHcUcsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRW5HLElBQUksR0FBRztZQUFFa0osV0FBVyxFQUFFL0MsT0FBTyxDQUFDbkc7VUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ2xEbUcsT0FBTyxhQUFQQSxPQUFPLGdCQUFBK08sZ0JBQUEsR0FBUC9PLE9BQU8sQ0FBRUUsTUFBTSxjQUFBNk8sZ0JBQUEsZUFBZkEsZ0JBQUEsQ0FBaUJsVixJQUFJLEdBQ3JCO1lBQUUwSixVQUFVLEVBQUV2RCxPQUFPLENBQUNFLE1BQU0sQ0FBQ3JHO1VBQUssQ0FBQyxHQUNuQ3FHLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUVyRyxJQUFJLEdBQ1Y7WUFBRTBKLFVBQVUsRUFBRXJELE1BQU0sQ0FBQ3JHO1VBQUssQ0FBQyxHQUMzQixDQUFDLENBQUMsR0FDSjZGLGtCQUFrQixDQUFDcEcsV0FBVyxHQUFHO1lBQUVBLFdBQVcsRUFBRW9HLGtCQUFrQixDQUFDcEc7VUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3JGb0csa0JBQWtCLENBQUNnSyxLQUFLLEdBQUc7WUFBRUEsS0FBSyxFQUFFaEssa0JBQWtCLENBQUNnSztVQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDbkVoSyxrQkFBa0IsQ0FBQ2lLLGlCQUFpQixHQUFHO1lBQUVBLGlCQUFpQixFQUFFakssa0JBQWtCLENBQUNpSztVQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3ZHLENBQUF2SixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRW9MLE1BQU0sS0FBSSxJQUFJLEdBQUc7WUFBRUMsV0FBVyxFQUFFckwsS0FBSyxDQUFDb0w7VUFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQy9ELENBQUM7UUFBQTtRQUFBO1VBQUEsT0FBQTJELFNBQUEsQ0FBQW5RLElBQUE7TUFBQTtJQUFBLEdBQUEyUCxRQUFBO0VBQUEsQ0FFTCxJQUFFLENBQ0RuUCxhQUFhLEVBQ2JFLGtCQUFrQixFQUNsQk0sT0FBTyxFQUNQRSxNQUFNLEVBQ056RyxRQUFRLEVBQ1IyRyxLQUFLLEVBQ0w0SSxPQUFPLEVBQ1AzSSxpQkFBaUIsRUFDakJDLGtCQUFrQixDQUNuQixDQUFDO0VBRUYsSUFBTStPLFNBQVMsR0FBR3ZYLFdBQVcsQ0FBQyxZQUFNO0lBQ2xDaUosZ0JBQWdCLENBQUM5RyxPQUFPLEdBQUc5QixNQUFNLENBQUMsQ0FBQztJQUNuQzZJLG1CQUFtQixDQUFDL0csT0FBTyxHQUFHLElBQUk7SUFDbENnSCxhQUFhLENBQUNoSCxPQUFPLEdBQUc5QixNQUFNLENBQUMsQ0FBQztJQUNoQytJLGFBQWEsQ0FBQ2pILE9BQU8sR0FBRyxLQUFLO0VBQy9CLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNcVYsY0FBYyxHQUFHeFgsV0FBVyxDQUFDLFlBQU07SUFDdkN1UixhQUFhLENBQUMsQ0FBQztJQUNmakksZUFBZSxDQUFDbkgsT0FBTyxHQUFHLEtBQUs7RUFDakMsQ0FBQyxFQUFFLENBQUNvUCxhQUFhLENBQUMsQ0FBQztFQUVuQixPQUFPO0lBQ0x2SCxRQUFRLEVBQVJBLFFBQVE7SUFDUkQsZUFBZSxFQUFmQSxlQUFlO0lBQ2ZFLHFCQUFxQixFQUFyQkEscUJBQXFCO0lBQ3JCa0gsZUFBZSxFQUFmQSxlQUFlO0lBQ2ZFLFNBQVMsRUFBVEEsU0FBUztJQUNUQyxjQUFjLEVBQWRBLGNBQWM7SUFDZDVILGNBQWMsRUFBZEEsY0FBYztJQUNkOEgsY0FBYyxFQUFkQSxjQUFjO0lBQ2RySSxhQUFhLEVBQUVBLGFBQWEsQ0FBQ2hILE9BQU87SUFDcEM4RyxnQkFBZ0IsRUFBRUEsZ0JBQWdCLENBQUM5RyxPQUFPO0lBRTFDc1AsV0FBVyxFQUFYQSxXQUFXO0lBQ1h1QyxhQUFhLEVBQWJBLGFBQWE7SUFDYkUsY0FBYyxFQUFkQSxjQUFjO0lBQ2RZLHNCQUFzQixFQUF0QkEsc0JBQXNCO0lBQ3RCekssWUFBWSxFQUFaQSxZQUFZO0lBQ1p1TSxjQUFjLEVBQWRBLGNBQWM7SUFDZFcsU0FBUyxFQUFUQSxTQUFTO0lBQ1RDLGNBQWMsRUFBZEEsY0FBYztJQUVkQyxVQUFVLEVBQUV0RyxlQUFlLElBQUlwSDtFQUNqQyxDQUFDO0FBQ0gsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==