@projectcor/maia-components 2.11.59-8 → 2.11.59

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 (30) hide show
  1. package/lib/components/atoms/Chip/Chip.js +4 -10
  2. package/lib/components/atoms/MAIAInput/MAIAInput.js +1 -1
  3. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +3 -1
  4. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +28 -40
  5. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +14 -9
  6. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +15 -14
  7. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +4 -2
  8. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +3 -1
  9. package/lib/components/molecules/ChatFooter/ChatFooter.js +3 -17
  10. package/lib/components/molecules/Sidebar/Sidebar.js +8 -10
  11. package/lib/components/organisms/ChatAI/ChatAI.js +6 -5
  12. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +2 -2
  13. package/lib/hooks/useChatManager/useChatManager.js +22 -139
  14. package/lib/hooks/useChatMessages/useChatMessages.js +1 -1
  15. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  16. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +5 -21
  17. package/lib/lang/br/index.js +1 -3
  18. package/lib/lang/en/index.js +1 -3
  19. package/lib/lang/es/index.js +1 -3
  20. package/lib/lang/fr/index.js +1 -3
  21. package/lib/services/maia/Agents/getAgents.js +91 -68
  22. package/lib/services/maia/Chats/getChatsByUserId.js +9 -13
  23. package/lib/services/utils/validateIsMaia.js +2 -2
  24. package/lib/store/chatsStoreLifecycle.js +8 -0
  25. package/lib/store/index.js +2 -1
  26. package/lib/store/useChatsStore.js +28 -3
  27. package/lib/types/Chat.js +1 -1
  28. package/lib/types/agent.js +1 -1
  29. package/lib/utils/hitlAnalytics.js +3 -3
  30. package/package.json +1 -1
@@ -331,6 +331,7 @@ export var useChatManager = function useChatManager(_ref3) {
331
331
  client = _useGlobalContext.client,
332
332
  setClient = _useGlobalContext.setClient,
333
333
  task = _useGlobalContext.task,
334
+ setTask = _useGlobalContext.setTask,
334
335
  agent = _useGlobalContext.agent,
335
336
  isWebSearchActive = _useGlobalContext.isWebSearchActive,
336
337
  isDeepSearchActive = _useGlobalContext.isDeepSearchActive,
@@ -418,6 +419,7 @@ export var useChatManager = function useChatManager(_ref3) {
418
419
  setProject(null);
419
420
  setClient === null || setClient === void 0 || setClient(null);
420
421
  setChipsProject(null);
422
+ setTask(null);
421
423
  currentChatId.current = initialChatId;
422
424
  currentMessageId.current = uuidv4();
423
425
  currentUserQuestion.current = null;
@@ -428,7 +430,7 @@ export var useChatManager = function useChatManager(_ref3) {
428
430
  streamingStore.clear();
429
431
  loadMessages();
430
432
  }
431
- }, [initialChatId, project, setProject, setClient, setChipsProject, loadMessages]);
433
+ }, [initialChatId, project, setProject, setClient, setChipsProject, setTask, loadMessages]);
432
434
 
433
435
  // El contexto de proyecto/cliente aplica a agentes clone (tienen tools). Los custom no lo
434
436
  // necesitan por ahora, así que para ellos no resolvemos ni disparamos GetProjects.
@@ -541,7 +543,7 @@ export var useChatManager = function useChatManager(_ref3) {
541
543
  streamingStore.setText(tempMessageId, content);
542
544
  }, [addMessage]);
543
545
  var handleStreamFinish = useCallback(/*#__PURE__*/function () {
544
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId, subagentName, resolvedContext) {
546
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId) {
545
547
  var _previousMessage$appr, _window$taskPanel, _createAgentFollowUp, _editAgentFollowUp;
546
548
  var tempMessageId, attachments, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, wasConfigureAgentAccessApproved, createAgentFollowUp, configuredAgentId, wasEditAgentApproved, editAgentFollowUp, fromStream, fromArgs, resolvedAgentId, taskIdsFromUrls, taskIdsFromDeleteApproval, taskIdsFromDeletionText, taskIdsForDashboard, shouldSyncDashboard, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, pathMatch, routeProjectId, isOnProjectRoute, _window$newProjectDas, _window$newProjectDas2, _window$newProjectDas3, _window$newProjectDas4, _window$newProjectDas5, _window$newProjectDas6, openTaskPanelId, manualApproval, manualWasTaskEdit, manualWasTaskDelete, _manualApproval$toolA, manualPseudoAction, affectedTaskIds, _window$taskPanel2, _window$taskPanel2$re, customEvent;
547
549
  return _regeneratorRuntime.wrap(function (_context2) {
@@ -675,7 +677,7 @@ export var useChatManager = function useChatManager(_ref3) {
675
677
  (_window$taskPanel2 = window.taskPanel) === null || _window$taskPanel2 === void 0 || (_window$taskPanel2$re = _window$taskPanel2.refetchTask) === null || _window$taskPanel2$re === void 0 || _window$taskPanel2$re.call(_window$taskPanel2);
676
678
  }
677
679
  }
678
- addMessage(_objectSpread(_objectSpread(_objectSpread({
680
+ addMessage(_objectSpread(_objectSpread({
679
681
  id: "answer-".concat(memorySessionId),
680
682
  message: contentToAdd,
681
683
  date: new Date(),
@@ -692,64 +694,7 @@ export var useChatManager = function useChatManager(_ref3) {
692
694
  suggestions: suggestions || []
693
695
  }, createAgentFollowUp ? {
694
696
  createAgentFollowUp: createAgentFollowUp
695
- } : {}), subagentName ? {
696
- subagentName: subagentName
697
697
  } : {}));
698
-
699
- // Orquestador: actualiza el chip de contexto con el proyecto/cliente
700
- // que el subagente resolvió dinámicamente vía herramientas (ej. project_id
701
- // encontrado por get_project_id_based_on_name o get_project_with_tasks_info).
702
- if (resolvedContext !== null && resolvedContext !== void 0 && resolvedContext.project_id && !chipsProject) {
703
- if (resolvedContext.project_name) {
704
- setChipsProject({
705
- projectName: resolvedContext.project_name,
706
- clientName: resolvedContext.client_name || '',
707
- projectId: String(resolvedContext.project_id)
708
- });
709
- setProject(_objectSpread(_objectSpread({
710
- id: resolvedContext.project_id,
711
- name: resolvedContext.project_name
712
- }, resolvedContext.client_id ? {
713
- clientId: resolvedContext.client_id
714
- } : {}), resolvedContext.client_name ? {
715
- client: {
716
- id: resolvedContext.client_id || 0,
717
- name: resolvedContext.client_name
718
- }
719
- } : {}));
720
- } else {
721
- fetchProjects(resolvedContext.project_id).then(function (projects) {
722
- var found = projects === null || projects === void 0 ? void 0 : projects.find(function (p) {
723
- return Number(p.id) === resolvedContext.project_id;
724
- });
725
- if (found) {
726
- var _found$client2;
727
- setChipsProject({
728
- projectName: found.name,
729
- clientName: ((_found$client2 = found.client) === null || _found$client2 === void 0 ? void 0 : _found$client2.name) || resolvedContext.client_name || '',
730
- projectId: String(found.id)
731
- });
732
- setProject(found);
733
- } else {
734
- setChipsProject({
735
- projectName: "Proyecto ".concat(resolvedContext.project_id),
736
- clientName: resolvedContext.client_name || '',
737
- projectId: String(resolvedContext.project_id)
738
- });
739
- setProject({
740
- id: resolvedContext.project_id,
741
- name: "Proyecto ".concat(resolvedContext.project_id)
742
- });
743
- }
744
- });
745
- }
746
- }
747
- if (resolvedContext !== null && resolvedContext !== void 0 && resolvedContext.client_id && !client) {
748
- setClient === null || setClient === void 0 || setClient({
749
- id: resolvedContext.client_id,
750
- name: resolvedContext.client_name || ''
751
- });
752
- }
753
698
  if ((_createAgentFollowUp = createAgentFollowUp) !== null && _createAgentFollowUp !== void 0 && _createAgentFollowUp.agentId) {
754
699
  fetchAgentDetail(createAgentFollowUp.agentId).then(function (chatAgent) {
755
700
  document.dispatchEvent(new CustomEvent('maia-merge-created-agent-into-list', {
@@ -784,7 +729,7 @@ export var useChatManager = function useChatManager(_ref3) {
784
729
  }
785
730
  }, _callee2);
786
731
  }));
787
- return function (_x4, _x5, _x6, _x7, _x8, _x9, _x0, _x1) {
732
+ return function (_x4, _x5, _x6, _x7, _x8, _x9) {
788
733
  return _ref6.apply(this, arguments);
789
734
  };
790
735
  }(), [addMessage, removeMessage, project, getTabTaskDefault, event, agent]);
@@ -813,74 +758,12 @@ export var useChatManager = function useChatManager(_ref3) {
813
758
  }, 500);
814
759
  }, [addMessage, removeMessage, t]);
815
760
  var handleApprovalRequired = useCallback(function (approval, accumulatedContent) {
816
- var _ref7, _approvalAny$resolved, _approvalAny$subagent, _approval$pending_act;
761
+ var _approval$pending_act;
817
762
  var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
818
763
  streamingStore.clear();
819
764
  streamingPlaceholderIdRef.current = null;
820
765
  activeStreamChatIdRef.current = null;
821
766
  removeMessage(tempMessageId);
822
-
823
- // Orquestador: extraer contexto resuelto del payload de aprobación y
824
- // actualizar el chip inmediatamente — sin esperar al complete/refresh.
825
- // El backend incluye resolved_context en subagent_used (dentro del
826
- // approval_required data para subagentes) con el project_id/client_id
827
- // que el subagente determinó antes del interrupt.
828
- var approvalAny = approval;
829
- var rc = (_ref7 = (_approvalAny$resolved = approvalAny.resolved_context) !== null && _approvalAny$resolved !== void 0 ? _approvalAny$resolved : (_approvalAny$subagent = approvalAny.subagent) === null || _approvalAny$subagent === void 0 ? void 0 : _approvalAny$subagent.resolved_context) !== null && _ref7 !== void 0 ? _ref7 : null;
830
- if (rc !== null && rc !== void 0 && rc.project_id && !chipsProject) {
831
- if (rc.project_name) {
832
- // Tenemos nombre: setear el chip directamente
833
- setChipsProject({
834
- projectName: rc.project_name,
835
- clientName: rc.client_name || '',
836
- projectId: String(rc.project_id)
837
- });
838
- setProject(_objectSpread(_objectSpread({
839
- id: rc.project_id,
840
- name: rc.project_name
841
- }, rc.client_id ? {
842
- clientId: rc.client_id
843
- } : {}), rc.client_name ? {
844
- client: {
845
- id: rc.client_id || 0,
846
- name: rc.client_name
847
- }
848
- } : {}));
849
- } else {
850
- // Solo tenemos el ID — fetch del nombre completo del proyecto
851
- fetchProjects(rc.project_id).then(function (projects) {
852
- var found = projects === null || projects === void 0 ? void 0 : projects.find(function (p) {
853
- return Number(p.id) === rc.project_id;
854
- });
855
- if (found) {
856
- var _found$client3;
857
- setChipsProject({
858
- projectName: found.name,
859
- clientName: ((_found$client3 = found.client) === null || _found$client3 === void 0 ? void 0 : _found$client3.name) || rc.client_name || '',
860
- projectId: String(found.id)
861
- });
862
- setProject(found);
863
- } else {
864
- // Fallback: mostrar el ID si no se puede resolver el nombre
865
- setChipsProject({
866
- projectName: "Proyecto ".concat(rc.project_id),
867
- clientName: rc.client_name || '',
868
- projectId: String(rc.project_id)
869
- });
870
- setProject({
871
- id: rc.project_id,
872
- name: "Proyecto ".concat(rc.project_id)
873
- });
874
- }
875
- });
876
- }
877
- }
878
- if (rc !== null && rc !== void 0 && rc.client_id && !client) {
879
- setClient === null || setClient === void 0 || setClient({
880
- id: rc.client_id,
881
- name: rc.client_name || ''
882
- });
883
- }
884
767
  var hitlContext = {
885
768
  messageId: "approval-".concat(approval.original_thread_id),
886
769
  messageText: accumulatedContent || '',
@@ -892,9 +775,9 @@ export var useChatManager = function useChatManager(_ref3) {
892
775
  };
893
776
  hitlExecutionContextRef.current = hitlContext;
894
777
  if (approval.manual_approval_detected) {
895
- var _approval$pending_act2, _ref8, _tool_name, _tool_args;
778
+ var _approval$pending_act2, _ref7, _tool_name, _tool_args;
896
779
  var firstAction = (_approval$pending_act2 = approval.pending_actions) === null || _approval$pending_act2 === void 0 ? void 0 : _approval$pending_act2[0];
897
- var toolName = (_ref8 = (_tool_name = approval.tool_name) !== null && _tool_name !== void 0 ? _tool_name : firstAction === null || firstAction === void 0 ? void 0 : firstAction.tool_name) !== null && _ref8 !== void 0 ? _ref8 : '';
780
+ var toolName = (_ref7 = (_tool_name = approval.tool_name) !== null && _tool_name !== void 0 ? _tool_name : firstAction === null || firstAction === void 0 ? void 0 : firstAction.tool_name) !== null && _ref7 !== void 0 ? _ref7 : '';
898
781
  var toolArgs = ((_tool_args = approval.tool_args) !== null && _tool_args !== void 0 ? _tool_args : firstAction === null || firstAction === void 0 ? void 0 : firstAction.tool_args) || null;
899
782
  if (toolName) {
900
783
  lastManualApprovalRef.current = {
@@ -920,7 +803,7 @@ export var useChatManager = function useChatManager(_ref3) {
920
803
  approvalStatus: 'pending'
921
804
  });
922
805
  isProcessingRef.current = false;
923
- }, [addMessage, removeMessage, chipsProject, setChipsProject, setProject, client, setClient]);
806
+ }, [addMessage, removeMessage]);
924
807
  var _useOrchestratorStrea = useOrchestratorStream({
925
808
  onError: handleStreamError,
926
809
  onStreamUpdate: handleStreamUpdate,
@@ -948,7 +831,7 @@ export var useChatManager = function useChatManager(_ref3) {
948
831
  };
949
832
  var currentProject = project;
950
833
  var sendMessage = useCallback(/*#__PURE__*/function () {
951
- var _ref9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(message, attachmentsOrOptions, faqId, agentSuggestionId, mentions, fuaId, scId) {
834
+ var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(message, attachmentsOrOptions, faqId, agentSuggestionId, mentions, fuaId, scId) {
952
835
  var _messagesRef$current, _project$client;
953
836
  var _normalizeSendMessage, attachments, options, effectiveMentions, contextMessage, payloadFuaId, payloadScId, displayMessage, newMessageId, lastMessageWithProject, currentAgentFromMessages, streamingPlaceholderId, finalMessage, _options$projectChang, history, contextProjectId, lastMessageProjectId, projectToRequest, parsed, projects, payloadFaqId, payloadAgentSuggestionId, payloadData;
954
837
  return _regeneratorRuntime.wrap(function (_context3) {
@@ -1090,10 +973,10 @@ export var useChatManager = function useChatManager(_ref3) {
1090
973
  }
1091
974
  }, _callee3);
1092
975
  }));
1093
- return function (_x10, _x11, _x12, _x13, _x14, _x15, _x16) {
1094
- return _ref9.apply(this, arguments);
976
+ return function (_x0, _x1, _x10, _x11, _x12, _x13, _x14) {
977
+ return _ref8.apply(this, arguments);
1095
978
  };
1096
- }(), [addMessage, event, askMaia, project, client, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
979
+ }(), [addMessage, event, askMaia, project, client, task, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
1097
980
  var changeProject = useCallback(function (option) {
1098
981
  if (!currentUserQuestion.current) return;
1099
982
  if (option.id !== (project === null || project === void 0 ? void 0 : project.id)) {
@@ -1131,7 +1014,7 @@ export var useChatManager = function useChatManager(_ref3) {
1131
1014
  }
1132
1015
  }, [project, setProject, askMaia, authUser, isWebSearchActive, agent]);
1133
1016
  var handleFeedback = useCallback(/*#__PURE__*/function () {
1134
- var _ref0 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(feedbackProp, chatMessageId) {
1017
+ var _ref9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(feedbackProp, chatMessageId) {
1135
1018
  var response;
1136
1019
  return _regeneratorRuntime.wrap(function (_context4) {
1137
1020
  while (1) switch (_context4.prev = _context4.next) {
@@ -1156,12 +1039,12 @@ export var useChatManager = function useChatManager(_ref3) {
1156
1039
  }
1157
1040
  }, _callee4);
1158
1041
  }));
1159
- return function (_x17, _x18) {
1160
- return _ref0.apply(this, arguments);
1042
+ return function (_x15, _x16) {
1043
+ return _ref9.apply(this, arguments);
1161
1044
  };
1162
1045
  }(), []);
1163
1046
  var handleApprovalDecision = useCallback(/*#__PURE__*/function () {
1164
- var _ref1 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(threadIds, decision, editedActions) {
1047
+ var _ref0 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(threadIds, decision, editedActions) {
1165
1048
  var messageWithApproval, approval, messageId, loadingKey, hitlContext, initialActivity, existingMessage, newStatus, response, _t;
1166
1049
  return _regeneratorRuntime.wrap(function (_context5) {
1167
1050
  while (1) switch (_context5.prev = _context5.next) {
@@ -1313,8 +1196,8 @@ export var useChatManager = function useChatManager(_ref3) {
1313
1196
  }
1314
1197
  }, _callee5, null, [[3, 7, 8, 9]]);
1315
1198
  }));
1316
- return function (_x19, _x20, _x21) {
1317
- return _ref1.apply(this, arguments);
1199
+ return function (_x17, _x18, _x19) {
1200
+ return _ref0.apply(this, arguments);
1318
1201
  };
1319
1202
  }(), [authUser, agent, addMessage, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired, updateStreamActivity, t]);
1320
1203
  var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
@@ -1409,7 +1292,7 @@ export var useChatManager = function useChatManager(_ref3) {
1409
1292
  return _context6.stop();
1410
1293
  }
1411
1294
  }, _callee6);
1412
- })), [initialChatId, userInitialMessage, project, client, authUser, agent, askMaia, isWebSearchActive, isDeepSearchActive]);
1295
+ })), [initialChatId, userInitialMessage, project, client, task, authUser, agent, askMaia, isWebSearchActive, isDeepSearchActive]);
1413
1296
  var resetChat = useCallback(function () {
1414
1297
  abortStreamSilentlyRef.current();
1415
1298
  currentMessageId.current = uuidv4();
@@ -1447,4 +1330,4 @@ export var useChatManager = function useChatManager(_ref3) {
1447
1330
  isDisabled: waitingResponse || loadingMessages
1448
1331
  };
1449
1332
  };
1450
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJmZXRjaEFnZW50RGV0YWlsIiwiYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QiLCJnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkiLCJzdHJlYW1pbmdTdG9yZSIsImlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCIsIm1lcmdlU3RyZWFtQ2h1bmsiLCJub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MiLCJhdHRhY2htZW50c09yT3B0aW9ucyIsIl9vcHRpb25zJGF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYXR0YWNobWVudHMiLCJvcHRpb25zIiwibm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMiLCJyYXdBdHRhY2htZW50cyIsImZpbHRlciIsImF0dGFjaG1lbnQiLCJfdHlwZW9mIiwibWFwIiwiaW5kZXgiLCJuYW1lIiwidHJpbSIsImNvbmNhdCIsInR5cGUiLCJtaW1lVHlwZSIsIm1pbWVfdHlwZSIsImZ1bGxGaWxlTmFtZSIsImluY2x1ZGVzIiwibnVtZXJpY1NpemUiLCJzaXplIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJmaWxlIiwiRmlsZSIsImlkIiwidXJsX29yaWdpbmFsIiwidW5kZWZpbmVkIiwidXJsX3RodW1ibmFpbCIsInVybF9maWxlIiwicm9sZSIsImV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwicHVzaElkIiwicmF3IiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiaXNOYU4iLCJwdXNoIiwiZm9yRWFjaCIsImFjdGlvbiIsIl9yZWMkdGFza19pZCIsImFyZ3MiLCJ0b29sX2FyZ3MiLCJyZWMiLCJ0YXNrX2lkIiwidGFza19pZHMiLCJ0YXNrcyIsInQiLCJfdHJlYyR0YXNrX2lkIiwidHJlYyIsImV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkMiIsImxpc3QiLCJ0aWQiLCJleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyIsIl9yZWMkYWdlbnRfaWQiLCJlZGl0QWN0aW9uIiwiZmluZCIsImEiLCJ0b0xvd2VyQ2FzZSIsImFnZW50X2lkIiwiYWdlbnRJZCIsImV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZSIsInRvb2xOYW1lIiwiX3JlZiIsIl9yZWMkYWdlbnRfaWQyIiwiZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0IiwidGV4dCIsImxhYmVsZWQiLCJtYXRjaCIsImJvbGQiLCJ1c2VTdGFibGVDYWxsYmFja3MiLCJhdXRoVXNlciIsImN1cnJlbnRVc2VyIiwidG9TdHJpbmciLCJmaXJzdE5hbWUiLCJhdmF0YXIiLCJwaWN0dXJlIiwiY3VycmVudCIsInBhcnNlU1NFTGluZSIsImxpbmUiLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwidGhyZWFkSWQiLCJjYWxsYmFja3MiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJpc1N0cmVhbUNvbXBsZXRlIiwiaGFuZGxlTGluZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiaSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiX2hhbmRsZUxpbmUiLCJwYXJzZWQiLCJldmVudERhdGEiLCJvblRoaW5raW5nIiwiY29udGVudCIsIm9uVG9rZW4iLCJfZXZlbnREYXRhJGFnZW50X2lkIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImNvbXBsZXRlZEFnZW50SWQiLCJvbkNvbXBsZXRlIiwibWVzc2FnZSIsIm9uTm9kZSIsIl9ldmVudERhdGEkYWdlbnRfaWQyIiwiX2NhbGxiYWNrcyRvbkFwcHJvdmFsIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiY2FsbCIsIm9uRXJyb3IiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsInJlYWQiLCJzZW50IiwiYWJydXB0IiwiZGVjb2RlIiwic3RyZWFtIiwicG9wIiwibGVuZ3RoIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYzIiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYzJGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsImNsaWVudCIsInNldENsaWVudCIsInRhc2siLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiY2hpcHNQcm9qZWN0Iiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwibGFzdE1hbnVhbEFwcHJvdmFsUmVmIiwiaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYiLCJpc1Byb2Nlc3NpbmdSZWYiLCJmaXJzdFRpbWVSZWYiLCJzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmIiwiYWN0aXZlU3RyZWFtQ2hhdElkUmVmIiwiYWJvcnRTdHJlYW1TaWxlbnRseVJlZiIsImNsZWFyU3RyZWFtVWlSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiYWN0aXZlTG9hZGluZ3MiLCJzZXRBY3RpdmVMb2FkaW5ncyIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiX3VzZUNoYXRNZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwibG9hZE1lc3NhZ2VzIiwiYWRkTWVzc2FnZSIsInJlbW92ZU1lc3NhZ2UiLCJoYW5kbGVTY3JvbGwiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiY2xlYXIiLCJpc0Nsb25lQWdlbnQiLCJsYXN0TXNnV2l0aFByb2plY3QiLCJtc2ciLCJwcm9qZWN0SWQiLCJhdCIsIl9yZWY0IiwicHJvamVjdE5hbWUiLCJ0aGVuIiwicHJvamVjdHMiLCJmb3VuZCIsInAiLCJfZm91bmQkY2xpZW50IiwiY2xpZW50TmFtZSIsImxhc3RNc2dXaXRoQ2xpZW50IiwiY2xpZW50SWQiLCJfcmVmNSIsIm1zZ0NsaWVudElkIiwibXNnQ2xpZW50TmFtZSIsImhhbmRsZVN0cmVhbUVycm9yIiwiZXJyb3JNZXNzYWdlIiwiZXJyb3JSYXdNZXNzYWdlIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjMiIsInRlbXBNZXNzYWdlSWQiLCJ1c2VkIiwiaXNFcnJvciIsImRhdGUiLCJEYXRlIiwidXNlciIsIkFTU0lTVEFOVCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsInN0YXJ0Iiwic2V0VGV4dCIsImhhbmRsZVN0cmVhbUZpbmlzaCIsIl9yZWY2IiwiX2NhbGxlZTIiLCJzdWJhZ2VudE5hbWUiLCJyZXNvbHZlZENvbnRleHQiLCJfcHJldmlvdXNNZXNzYWdlJGFwcHIiLCJfd2luZG93JHRhc2tQYW5lbCIsIl9jcmVhdGVBZ2VudEZvbGxvd1VwIiwiX2VkaXRBZ2VudEZvbGxvd1VwIiwidGFza1VybFJlZ2V4IiwibWF0Y2hlcyIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsImhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJ3YXNUYXNrQ3JlYXRpb24iLCJ3YXNUYXNrRWRpdCIsIndhc1Rhc2tEZWxldGUiLCJ3YXNDcmVhdGVBZ2VudEFwcHJvdmVkIiwid2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJjb25maWd1cmVkQWdlbnRJZCIsIndhc0VkaXRBZ2VudEFwcHJvdmVkIiwiZWRpdEFnZW50Rm9sbG93VXAiLCJmcm9tU3RyZWFtIiwiZnJvbUFyZ3MiLCJyZXNvbHZlZEFnZW50SWQiLCJ0YXNrSWRzRnJvbVVybHMiLCJ0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsIiwidGFza0lkc0Zyb21EZWxldGlvblRleHQiLCJ0YXNrSWRzRm9yRGFzaGJvYXJkIiwic2hvdWxkU3luY0Rhc2hib2FyZCIsInRhc2tJZHMiLCJ0YWIiLCJ0YWJTZWdtZW50IiwibGFzdFByb2plY3RNZXNzYWdlIiwiY29udGV4dFByb2plY3RJZFJhdyIsImNvbnRleHRQcm9qZWN0SWQiLCJwYXRoTWF0Y2giLCJyb3V0ZVByb2plY3RJZCIsImlzT25Qcm9qZWN0Um91dGUiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfd2luZG93JG5ld1Byb2plY3REYXMyIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMyIsIl93aW5kb3ckbmV3UHJvamVjdERhczQiLCJfd2luZG93JG5ld1Byb2plY3REYXM1IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNiIsIm9wZW5UYXNrUGFuZWxJZCIsIm1hbnVhbEFwcHJvdmFsIiwibWFudWFsV2FzVGFza0VkaXQiLCJtYW51YWxXYXNUYXNrRGVsZXRlIiwiX21hbnVhbEFwcHJvdmFsJHRvb2xBIiwibWFudWFsUHNldWRvQWN0aW9uIiwiYWZmZWN0ZWRUYXNrSWRzIiwiX3dpbmRvdyR0YXNrUGFuZWwyIiwiX3dpbmRvdyR0YXNrUGFuZWwyJHJlIiwiX2NvbnRleHQyIiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwiYXBwcm92YWxTdGF0dXMiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiYWlDaGF0SGl0bE9wdGlvbiIsIl9vYmplY3RTcHJlYWQiLCJhZ2VudF90eXBlIiwiYWN0aW9uX3R5cGUiLCJkZWNpc2lvbiIsIm9wdGlvbiIsImNyZWF0ZWRfYWdlbnRfaWQiLCJ1cmwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkIiwiZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZCIsInRhc2tQYW5lbCIsInRhc2tJZCIsInRvb2xBcmdzIiwicmVmZXRjaFRhc2siLCJwcm9qZWN0X2lkIiwicHJvamVjdF9uYW1lIiwiY2xpZW50X25hbWUiLCJjbGllbnRfaWQiLCJfZm91bmQkY2xpZW50MiIsImNoYXRBZ2VudCIsImVyciIsIl94NCIsIl94NSIsIl94NiIsIl94NyIsIl94OCIsIl94OSIsIl94MCIsIl94MSIsImhhbmRsZVN0cmVhbVN0b3AiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwic2V0VGltZW91dCIsImhhbmRsZUFwcHJvdmFsUmVxdWlyZWQiLCJfcmVmNyIsIl9hcHByb3ZhbEFueSRyZXNvbHZlZCIsIl9hcHByb3ZhbEFueSRzdWJhZ2VudCIsIl9hcHByb3ZhbCRwZW5kaW5nX2FjdCIsImFwcHJvdmFsQW55IiwicmMiLCJyZXNvbHZlZF9jb250ZXh0Iiwic3ViYWdlbnQiLCJfZm91bmQkY2xpZW50MyIsImhpdGxDb250ZXh0IiwibWVzc2FnZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwibWVzc2FnZVRleHQiLCJ0aHJlYWRJZHMiLCJ0aHJlYWRfaWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJfYXBwcm92YWwkcGVuZGluZ19hY3QyIiwiX3JlZjgiLCJfdG9vbF9uYW1lIiwiX3Rvb2xfYXJncyIsImZpcnN0QWN0aW9uIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0cmVhbUFjdGl2aXR5IiwidXBkYXRlU3RyZWFtQWN0aXZpdHkiLCJzdG9wU3RyZWFtaW5nIiwiYWJvcnRTdHJlYW1TaWxlbnRseSIsImN1cnJlbnRQcm9qZWN0Iiwic2VuZE1lc3NhZ2UiLCJfcmVmOSIsIl9jYWxsZWUzIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJfcHJvamVjdCRjbGllbnQiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJlZmZlY3RpdmVNZW50aW9ucyIsImNvbnRleHRNZXNzYWdlIiwicGF5bG9hZEZ1YUlkIiwicGF5bG9hZFNjSWQiLCJkaXNwbGF5TWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJzdHJlYW1pbmdQbGFjZWhvbGRlcklkIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInBheWxvYWRGYXFJZCIsInBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQzIiwicG1BaVR5cGVkVGV4dCIsIlVTRVIiLCJwcm9qZWN0Q2hhbmdlZCIsImluY29tZVR5cGUiLCJoaXN0b3J5TWVzc2FnZSIsImxhbmciLCJ1c2VySWQiLCJsYXN0TmFtZSIsImNvbXBhbnlJZCIsImNvbXBhbnlfaWQiLCJhZ2VudE5hbWUiLCJmZWVJZCIsInRhc2tOYW1lIiwiZW50aXR5IiwiYWdlbnRFbnRpdHkiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsIl94MTUiLCJfeDE2IiwiY2hhbmdlUHJvamVjdCIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjAiLCJfY2FsbGVlNCIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJfY29udGV4dDQiLCJDaGF0cyIsIndhc0hlbHBmdWxDaGF0IiwiVEhVTUJTX1VQIiwid2FzSGVscGZ1bCIsIl94MTciLCJfeDE4IiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsIl9yZWYxIiwiX2NhbGxlZTUiLCJlZGl0ZWRBY3Rpb25zIiwibWVzc2FnZVdpdGhBcHByb3ZhbCIsImxvYWRpbmdLZXkiLCJpbml0aWFsQWN0aXZpdHkiLCJleGlzdGluZ01lc3NhZ2UiLCJuZXdTdGF0dXMiLCJfdCIsIl9jb250ZXh0NSIsIl9tJGFwcHJvdmFsIiwiX2RlZmluZVByb3BlcnR5IiwiT3JjaGVzdHJhdG9yIiwiY29udGludWVUaHJlYWQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uX2lkIiwib2siLCJhY3Rpdml0eSIsInBoYXNlIiwiY3VycmVudFRocmVhZElkIiwibm9kZUFjdGl2aXR5IiwidXNlUmVzdW1pbmdGYWxsYmFjayIsIm5ld0xvYWRpbmdzIiwiYXBwcm92YWxQYXlsb2FkIiwiZmluaXNoIiwiX3gxOSIsIl94MjAiLCJfeDIxIiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNiIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9wcm9qZWN0JGNsaWVudDIiLCJfcHJvamVjdCRjbGllbnQzIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJoYXNJbml0aWFsQXR0YWNobWVudHMiLCJoYXNJbml0aWFsRmFxIiwiaGFzSW5pdGlhbEZ1YSIsImhhc0luaXRpYWxTYyIsIl9jb250ZXh0NiIsIkJvb2xlYW4iLCJyZXNldENoYXQiLCJzdG9wR2VuZXJhdGlvbiIsImlzRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0ZWQtb3B0aW9uYWwtY2hhaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyB1c2VDaGF0TWVzc2FnZXMgfSBmcm9tICcuLi91c2VDaGF0TWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0LCBQZW5kaW5nQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uLCBDb250ZXh0TWVzc2FnZSwgYnVpbGRDb250ZXh0TWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSB9IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB0eXBlIHsgUmVzb2x2ZWRDb250ZXh0IH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtL3VzZU9yY2hlc3RyYXRvclN0cmVhbS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCwgZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQge1xuICBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlLFxuICBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSxcbiAgdHlwZSBIaXRsRXhlY3V0aW9uQ29udGV4dCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHN0cmVhbWluZ1N0b3JlIH0gZnJvbSAnLi4vdXNlU3RyZWFtaW5nTWVzc2FnZSdcbmltcG9ydCB7IGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCwgbWVyZ2VTdHJlYW1DaHVuayB9IGZyb20gJy4uLy4uL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMgPSAocmF3QXR0YWNobWVudHM6IHVua25vd24pOiBBdHRhY2htZW50RmlsZVtdID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhd0F0dGFjaG1lbnRzKSkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIHJhd0F0dGFjaG1lbnRzXG4gICAgLmZpbHRlcigoYXR0YWNobWVudCk6IGF0dGFjaG1lbnQgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gISFhdHRhY2htZW50ICYmIHR5cGVvZiBhdHRhY2htZW50ID09PSAnb2JqZWN0JylcbiAgICAubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50Lm5hbWUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQubmFtZS50cmltKCkgPyBhdHRhY2htZW50Lm5hbWUudHJpbSgpIDogYGZpbGUtJHtpbmRleCArIDF9YFxuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhdHRhY2htZW50LnR5cGUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQudHlwZS50cmltKCkgPyBhdHRhY2htZW50LnR5cGUudHJpbSgpIDogJ3BkZidcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gdHlwZW9mIGF0dGFjaG1lbnQubWltZV90eXBlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQubWltZV90eXBlIDogJydcbiAgICAgIGNvbnN0IGZ1bGxGaWxlTmFtZSA9IG5hbWUuaW5jbHVkZXMoJy4nKSA/IG5hbWUgOiBgJHtuYW1lfS4ke3R5cGV9YFxuICAgICAgY29uc3QgbnVtZXJpY1NpemUgPVxuICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5zaXplID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gYXR0YWNobWVudC5zaXplXG4gICAgICAgICAgOiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSkpXG4gICAgICAgICAgICA/IE51bWJlcihhdHRhY2htZW50LnNpemUpXG4gICAgICAgICAgICA6IDBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZTogbmV3IEZpbGUoW10sIGZ1bGxGaWxlTmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSxcbiAgICAgICAgaWQ6XG4gICAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQuaWQgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQuaWQudHJpbSgpXG4gICAgICAgICAgICA/IGF0dGFjaG1lbnQuaWRcbiAgICAgICAgICAgIDogYGFzc2lzdGFudC1maWxlLSR7aW5kZXh9LSR7ZnVsbEZpbGVOYW1lfWAsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNpemU6IG51bWVyaWNTaXplLFxuICAgICAgICB0eXBlLFxuICAgICAgICB1cmxfb3JpZ2luYWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX3RodW1ibmFpbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF90aHVtYm5haWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF9maWxlOiB0eXBlb2YgYXR0YWNobWVudC51cmxfZmlsZSA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9maWxlIDogdW5kZWZpbmVkLFxuICAgICAgICByb2xlOiBhdHRhY2htZW50LnJvbGUgPT09ICdhc3Npc3RhbnQnID8gJ2Fzc2lzdGFudCcgOiAndXNlcicsXG4gICAgICB9XG4gICAgfSlcbn1cblxuLyoqIEV4dHJhZSB0YXNrX2lkcyBkZSBsb3MgdG9vbF9hcmdzIGRlIHBlbmRpbmdfYWN0aW9ucywgY3VicmllbmRvIGxhcyBmb3JtYXMgY29tdW5lczpcbiAqICAtIGB7IHRhc2tfaWQgfWAgbyBgeyBpZCB9YFxuICogIC0gYHsgdGFza19pZHM6IFtdIH1gXG4gKiAgLSBgeyB0YXNrczogW3sgdGFza19pZHxpZCB9LCAuLi5dIH1gXG4gKiAgw5p0aWwgcGFyYSB0b29scyBkZSBlZGl0L2Fzc2lnbi9kZWxldGUgY3VhbmRvIGxhIHJlc3B1ZXN0YSBkZWwgTExNIG5vIGluY2x1eWUgVVJMcyAvdGFza3MvLi4uL2RldGFpbC4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgY29uc3QgcHVzaElkID0gKHJhdzogdW5rbm93bikgPT4ge1xuICAgIGlmIChyYXcgPT0gbnVsbCkgcmV0dXJuXG4gICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgfVxuICBwZW5kaW5nQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgaWYgKCFhY3Rpb24gfHwgdHlwZW9mIGFjdGlvbiAhPT0gJ29iamVjdCcpIHJldHVyblxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24udG9vbF9hcmdzXG4gICAgaWYgKCEoYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJncykpKSByZXR1cm5cbiAgICBjb25zdCByZWMgPSBhcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgcHVzaElkKHJlYy50YXNrX2lkID8/IHJlYy5pZClcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWMudGFza19pZHMpKSB7XG4gICAgICByZWMudGFza19pZHMuZm9yRWFjaChwdXNoSWQpXG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlYy50YXNrcykpIHtcbiAgICAgIHJlYy50YXNrcy5mb3JFYWNoKHQgPT4ge1xuICAgICAgICBpZiAodCAmJiB0eXBlb2YgdCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodCkpIHtcbiAgICAgICAgICBjb25zdCB0cmVjID0gdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgIHB1c2hJZCh0cmVjLnRhc2tfaWQgPz8gdHJlYy5pZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuLyoqIHRhc2tfaWQgLyB0YXNrX2lkcyBlbiBwZW5kaW5nX2FjdGlvbnMgZGUgZGVsZXRlXyogKGxhIHJlc3B1ZXN0YSBwdWVkZSBubyBpbmNsdWlyIFVSTHMgL3Rhc2tzL+KApi9kZXRhaWwpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdIHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrJykge1xuICAgICAgY29uc3QgcmF3ID0gcmVjLnRhc2tfaWQgPz8gcmVjLmlkXG4gICAgICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2tzX2JhdGNoJykge1xuICAgICAgY29uc3QgbGlzdCA9IHJlYy50YXNrX2lkc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgbGlzdC5mb3JFYWNoKHRpZCA9PiB7XG4gICAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyh0aWQpLCAxMClcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBlZGl0QWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2VkaXRfYWdlbnQnKVxuICBpZiAoXG4gICAgIWVkaXRBY3Rpb24gfHxcbiAgICAhZWRpdEFjdGlvbi50b29sX2FyZ3MgfHxcbiAgICB0eXBlb2YgZWRpdEFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8XG4gICAgQXJyYXkuaXNBcnJheShlZGl0QWN0aW9uLnRvb2xfYXJncylcbiAgKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBlZGl0QWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLCB0b29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09IHRvb2xOYW1lLnRvTG93ZXJDYXNlKCkpXG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24udG9vbF9hcmdzIHx8IHR5cGVvZiBhY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGFjdGlvbi50b29sX2FyZ3MpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBhY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZCA/PyByZWMuaWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbi8qKiDDmmx0aW1vIHJlY3Vyc28gc2kgbm8gaGF5IGxpbmtzIG5pIHRvb2xfYXJncyBwYXJzZWFibGVzIChwLiBlai4gXCJJRCAqKjc1OTcxMDYqKlwiKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCh0ZXh0OiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gIGNvbnN0IGxhYmVsZWQgPSB0ZXh0Lm1hdGNoKC9cXGJJRFxccypcXCpcXCooXFxkKylcXCpcXCovaSlcbiAgaWYgKGxhYmVsZWQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQobGFiZWxlZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgY29uc3QgYm9sZCA9IHRleHQubWF0Y2goL1xcKlxcKihcXGR7NSx9KVxcKlxcKi8pXG4gIGlmIChib2xkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGJvbGRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5jb25zdCB1c2VTdGFibGVDYWxsYmFja3MgPSAoYXV0aFVzZXI6IENPUlVzZXIpID0+IHtcbiAgY29uc3QgY3VycmVudFVzZXIgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VVc2VyPih7XG4gICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgfSlcblxuICBpZiAoXG4gICAgY3VycmVudFVzZXIuY3VycmVudC5pZCAhPT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQubmFtZSAhPT0gYXV0aFVzZXIuZmlyc3ROYW1lIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5hdmF0YXIgIT09IGF1dGhVc2VyLnBpY3R1cmVcbiAgKSB7XG4gICAgY3VycmVudFVzZXIuY3VycmVudCA9IHtcbiAgICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGN1cnJlbnRVc2VyOiBjdXJyZW50VXNlci5jdXJyZW50LFxuICB9XG59XG5cbmNvbnN0IHBhcnNlU1NFTGluZSA9IChsaW5lOiBzdHJpbmcpOiB7IGV2ZW50VHlwZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0gfCBudWxsID0+IHtcbiAgaWYgKCFsaW5lLnRyaW0oKSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIHJldHVybiBudWxsXG5cbiAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuICAgIHJldHVybiB7IGV2ZW50VHlwZSwgZGF0YSB9XG4gIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzU1NFU3RyZWFtID0gYXN5bmMgKFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4gIHRocmVhZElkOiBzdHJpbmcsXG4gIGNhbGxiYWNrczoge1xuICAgIG9uVGhpbmtpbmc6ICgpID0+IHZvaWRcbiAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Db21wbGV0ZTogKFxuICAgICAgZmluYWxDb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBhbnlbXSB8IG51bGwsXG4gICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgIGFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gICAgKSA9PiB2b2lkXG4gICAgb25FcnJvcjogKGVycm9yOiBhbnksIHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ/OiAoYXBwcm92YWw6IGFueSwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gIH1cbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICBpZiAoIXJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gIH1cblxuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgbGV0IGJ1ZmZlciA9ICcnXG4gIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICBsZXQgaXNTdHJlYW1Db21wbGV0ZSA9IGZhbHNlXG5cbiAgZnVuY3Rpb24gaGFuZGxlTGluZShsaW5lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVNTRUxpbmUobGluZSlcbiAgICBpZiAoIXBhcnNlZCkgcmV0dXJuXG5cbiAgICBjb25zdCB7IGV2ZW50VHlwZSwgZGF0YSB9ID0gcGFyc2VkXG4gICAgY29uc3QgZXZlbnREYXRhID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3RoaW5raW5nJykge1xuICAgICAgY2FsbGJhY2tzLm9uVGhpbmtpbmcoKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAndG9rZW4nKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mIGV2ZW50RGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGV2ZW50RGF0YS5jb250ZW50IDogJydcbiAgICAgIGFjY3VtdWxhdGVkQ29udGVudCA9IG1lcmdlU3RyZWFtQ2h1bmsoYWNjdW11bGF0ZWRDb250ZW50LCBjb250ZW50KVxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29udGVudCcpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YgZXZlbnREYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZXZlbnREYXRhLmNvbnRlbnQgOiAnJ1xuICAgICAgYWNjdW11bGF0ZWRDb250ZW50ID0gbWVyZ2VTdHJlYW1DaHVuayhhY2N1bXVsYXRlZENvbnRlbnQsIGNvbnRlbnQpXG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICBpZiAoaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkKGV2ZW50RGF0YSkpIHtcbiAgICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gY29udGVudCB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgICAgY29uc3Qgc291cmNlcyA9IGV2ZW50RGF0YS5zb3VyY2VzIHx8IG51bGxcbiAgICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuYXR0YWNobWVudHMpID8gZXZlbnREYXRhLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkpXG4gICAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW10pXG4gICAgICAgICAgOiBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5zdWdnZXN0aW9ucylcbiAgICAgICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBjb25zdCBhZ2VudElkUmF3ID0gZXZlbnREYXRhLmFnZW50X2lkID8/IGV2ZW50RGF0YS5hZ2VudElkXG4gICAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPVxuICAgICAgICAgIGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICAgIGNhbGxiYWNrcy5vbkNvbXBsZXRlKFxuICAgICAgICAgIGZpbmFsQ29udGVudCxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICB0aHJlYWRJZCxcbiAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICBjb21wbGV0ZWRBZ2VudElkXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ25vZGUnKSB7XG4gICAgICBpZiAoZXZlbnREYXRhLm1lc3NhZ2UgJiYgdHlwZW9mIGV2ZW50RGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjYWxsYmFja3Mub25Ob2RlKGV2ZW50RGF0YS5tZXNzYWdlLCB0aHJlYWRJZClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gKGV2ZW50RGF0YS5jb250ZW50IGFzIHN0cmluZykgfHwgYWNjdW11bGF0ZWRDb250ZW50XG4gICAgICBjb25zdCBzb3VyY2VzID0gKGV2ZW50RGF0YS5zb3VyY2VzIGFzIHVua25vd24pIHx8IG51bGxcbiAgICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IChldmVudERhdGEubWVtb3J5X3Nlc3Npb25faWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5hdHRhY2htZW50cykgPyBldmVudERhdGEuYXR0YWNobWVudHMgOiBudWxsXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkpXG4gICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdKVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3Rpb25zKVxuICAgICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIGNvbnN0IGFnZW50SWRSYXcgPSBldmVudERhdGEuYWdlbnRfaWQgPz8gZXZlbnREYXRhLmFnZW50SWRcbiAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPSBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHRocmVhZElkLCBhdHRhY2htZW50cywgc3VnZ2VzdGlvbnMsIGNvbXBsZXRlZEFnZW50SWQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdhcHByb3ZhbF9yZXF1aXJlZCcpIHtcbiAgICAgIGNhbGxiYWNrcy5vbkFwcHJvdmFsUmVxdWlyZWQ/LihldmVudERhdGEsIGFjY3VtdWxhdGVkQ29udGVudCwgdGhyZWFkSWQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIGNhbGxiYWNrcy5vbkVycm9yKGV2ZW50RGF0YS5lcnJvciwgdGhyZWFkSWQpXG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKCFpc1N0cmVhbUNvbXBsZXRlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIGlzU3RyZWFtQ29tcGxldGUgPSB0cnVlXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaGFuZGxlTGluZShsaW5lc1tpXSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXRNYW5hZ2VyID0gKHtcbiAgY2hhdElkOiBpbml0aWFsQ2hhdElkLFxuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIG9uRXJyb3IsXG4gIGFnZW50cyA9IFtdLFxufTogVXNlQ2hhdE1hbmFnZXJQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7XG4gICAgcHJvamVjdCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBzZXRDbGllbnQsXG4gICAgdGFzayxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIC8qKlxuICAgKiBHdWFyZGEgaW5mbyBkZWwgw7psdGltbyBhcHByb3ZhbCBtYW51YWwgKGN1YW5kbyBlbCB1c3VhcmlvIHRpcGVhIFwic2lcIi9cIm5vXCIgZW4gbHVnYXJcbiAgICogZGUgY2xpY2tlYXIgZWwgYm90w7NuKS4gRW4gbWFudWFsIGFwcHJvdmFsLCBgaGFuZGxlQXBwcm92YWxSZXF1aXJlZGAgcmV0b3JuYSBlYXJseVxuICAgKiBzaW4gYWdyZWdhciB1biBtZW5zYWplIGNvbiBgYXBwcm92YWxgLCBhc8OtIHF1ZSBsYSBsw7NnaWNhIGRlIHJlZmV0Y2ggZW4gYG9uU3RyZWFtRmluaXNoYFxuICAgKiBubyBsbyBkZXRlY3RhIHbDrWEgYHByZXZpb3VzTWVzc2FnZS5hcHByb3ZhbGAuIExvIGd1YXJkYW1vcyBhY8OhIHBhcmEgY29uc3VtaXJsbyBkZXNwdcOpcy5cbiAgICovXG4gIGNvbnN0IGxhc3RNYW51YWxBcHByb3ZhbFJlZiA9IHVzZVJlZjx7XG4gICAgdG9vbE5hbWU6IHN0cmluZ1xuICAgIHRvb2xBcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgfSB8IG51bGw+KG51bGwpXG4gIC8qKiBDb250ZXh0byBkZWwgbWVuc2FqZSBkZSBhcHJvYmFjacOzbiBwcmV2aW8gYWwgZWplY3V0YXIgY29udGludWUtdGhyZWFkLiAqL1xuICBjb25zdCBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiA9IHVzZVJlZjxIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICAvKiogSWQgZGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZyBhY3Rpdm8gKHNpIGhheSkuICovXG4gIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgLyoqXG4gICAqIENoYXQgYWwgcXVlIHBlcnRlbmVjZSBlbCBzdHJlYW0gYWN0dWFsbWVudGUgYWN0aXZvLiBTaSBjYW1iaWEgZWwgY2hhdFxuICAgKiBtaWVudHJhcyB1biBzdHJlYW0gZXN0w6EgZW4gdnVlbG8sIGRlc2NhcnRhbW9zIGxvcyB0b2tlbnMgcmVzaWR1YWxlc1xuICAgKiBxdWUgcHVlZGFuIGxsZWdhciBhbnRlcyBkZSBxdWUgZWwgYWJvcnQgc2UgY29tcGxldGUuXG4gICAqL1xuICBjb25zdCBhY3RpdmVTdHJlYW1DaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgLyoqIFNldHRlciBpbmRpcmVjdG8gcGFyYSBhYm9ydGFyIGVsIHN0cmVhbSBhbnRlcyBkZSBxdWUgZWwgaG9vayBkZVxuICAgKiBvcnF1ZXN0YWRvciBlc3TDqSBpbmljaWFsaXphZG8gKHNlIGxpbmtlYSBtw6FzIGFiYWpvKS4gKi9cbiAgY29uc3QgYWJvcnRTdHJlYW1TaWxlbnRseVJlZiA9IHVzZVJlZjwoKSA9PiB2b2lkPigoKSA9PiB1bmRlZmluZWQpXG4gIGNvbnN0IGNsZWFyU3RyZWFtVWlSZWYgPSB1c2VSZWY8KCkgPT4gdm9pZD4oKCkgPT4gdW5kZWZpbmVkKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIGNvbnN0IHsgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBsb2FkTWVzc2FnZXMsIGFkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIGhhbmRsZVNjcm9sbCB9ID1cbiAgICB1c2VDaGF0TWVzc2FnZXMoe1xuICAgICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgICAgb25FcnJvcixcbiAgICAgIGFnZW50cyxcbiAgICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIC8vIFNpIGhheSB1biBzdHJlYW0gZW4gY3Vyc28sIGFib3J0YXJsbyBzaWxlbmNpb3NhbWVudGUgcGFyYSBxdWUgbG9zXG4gICAgICAvLyB0b2tlbnMgcmVzaWR1YWxlcyBubyBzZSBlc2NyaWJhbiBlbiBlbCBjaGF0IG51ZXZvLlxuICAgICAgYWJvcnRTdHJlYW1TaWxlbnRseVJlZi5jdXJyZW50KClcblxuICAgICAgLy8gTGltcGlhciBjb250ZXh0byBnbG9iYWwgYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG5cbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG5cbiAgICAgIGxvYWRNZXNzYWdlcygpXG4gICAgfVxuICB9LCBbaW5pdGlhbENoYXRJZCwgcHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRDaGlwc1Byb2plY3QsIGxvYWRNZXNzYWdlc10pXG5cbiAgLy8gRWwgY29udGV4dG8gZGUgcHJveWVjdG8vY2xpZW50ZSBhcGxpY2EgYSBhZ2VudGVzIGNsb25lICh0aWVuZW4gdG9vbHMpLiBMb3MgY3VzdG9tIG5vIGxvXG4gIC8vIG5lY2VzaXRhbiBwb3IgYWhvcmEsIGFzw60gcXVlIHBhcmEgZWxsb3Mgbm8gcmVzb2x2ZW1vcyBuaSBkaXNwYXJhbW9zIEdldFByb2plY3RzLlxuICBjb25zdCBpc0Nsb25lQWdlbnQgPSBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJ1xuXG4gIC8vIFNpbmNyb25pemFyIGNoaXBzUHJvamVjdCBjdWFuZG8gaGF5IG1lbnNhamVzIGNvbiBwcm9qZWN0SWQgcGVybyBjaGlwc1Byb2plY3Qgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNDbG9uZUFnZW50IHx8IGNoaXBzUHJvamVjdCB8fCBsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuICAgIGNvbnN0IGxhc3RNc2dXaXRoUHJvamVjdCA9IG1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgY29uc3QgeyBwcm9qZWN0SWQsIHByb2plY3ROYW1lIH0gPSBsYXN0TXNnV2l0aFByb2plY3QgfHwge31cbiAgICBpZiAoIXByb2plY3RJZCkgcmV0dXJuXG5cbiAgICBmZXRjaFByb2plY3RzKHByb2plY3RJZCkudGhlbihwcm9qZWN0cyA9PiB7XG4gICAgICBjb25zdCBmb3VuZCA9IHByb2plY3RzPy5maW5kKHAgPT4gTnVtYmVyKHAuaWQpID09PSBOdW1iZXIocHJvamVjdElkKSlcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3ROYW1lOiBmb3VuZC5uYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWU6IGZvdW5kLmNsaWVudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhmb3VuZC5pZCksXG4gICAgICAgIH0pXG4gICAgICAgIHNldFByb2plY3QoZm91bmQpXG4gICAgICB9IGVsc2UgaWYgKHByb2plY3ROYW1lKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogJycsXG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcocHJvamVjdElkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdCh7IGlkOiBOdW1iZXIocHJvamVjdElkKSwgbmFtZTogcHJvamVjdE5hbWUgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9LCBbaXNDbG9uZUFnZW50LCBtZXNzYWdlcywgY2hpcHNQcm9qZWN0LCBsb2FkaW5nTWVzc2FnZXMsIGZldGNoUHJvamVjdHMsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdF0pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2xpZW50IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIGNsaWVudElkIHBlcm8gY2xpZW50IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzQ2xvbmVBZ2VudCB8fCBjbGllbnQgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBjb25zdCBsYXN0TXNnV2l0aENsaWVudCA9IG1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gbXNnLmNsaWVudElkICE9IG51bGwgJiYgbXNnLmNsaWVudE5hbWUpLmF0KC0xKVxuICAgIGNvbnN0IHsgY2xpZW50SWQ6IG1zZ0NsaWVudElkLCBjbGllbnROYW1lOiBtc2dDbGllbnROYW1lIH0gPSBsYXN0TXNnV2l0aENsaWVudCB8fCB7fVxuICAgIGlmIChtc2dDbGllbnRJZCA9PSBudWxsIHx8ICFtc2dDbGllbnROYW1lKSByZXR1cm5cblxuICAgIHNldENsaWVudD8uKHsgaWQ6IE51bWJlcihtc2dDbGllbnRJZCksIG5hbWU6IG1zZ0NsaWVudE5hbWUgfSlcbiAgfSwgW2lzQ2xvbmVBZ2VudCwgbWVzc2FnZXMsIGNsaWVudCwgbG9hZGluZ01lc3NhZ2VzLCBzZXRDbGllbnRdKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUVycm9yID0gdXNlQ2FsbGJhY2soXG4gICAgKGVycm9yTWVzc2FnZT86IHN0cmluZywgZXJyb3JSYXdNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuICAgICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgICAgOiBlcnJvck1lc3NhZ2UgPT09ICdpbnZhbGlkX3JlcXVlc3RfZXJyb3InICYmIGVycm9yUmF3TWVzc2FnZT8uaW5jbHVkZXMoJ3Byb21wdCBpcyB0b28gbG9uZycpXG4gICAgICAgICAgICA/IHQoJ2NoYXQuZXJyb3JQcm9tcHRUb29Mb25nJywgeyB1c2VkOiBlcnJvclJhd01lc3NhZ2UubWF0Y2goLyhcXGQrKSB0b2tlbnMvKT8uWzFdID8/ICcnIH0pXG4gICAgICAgICAgICA6IHQoJ2NoYXQuZXJyb3InKVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBTaSBlbCBjaGF0IGNhbWJpw7MgbWllbnRyYXMgZWwgc3RyZWFtIGVzdGFiYSBlbiB2dWVsbywgZGVzY2FydGFyIGVsXG4gICAgICAvLyB0b2tlbiByZXNpZHVhbDogbm8gZGViZSBwaW50YXJzZSBlbiBlbCBudWV2byBjaGF0LlxuICAgICAgaWYgKGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ICE9IG51bGwgJiYgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgLy8gUHJpbWVyYSBsbGFtYWRhIGRlIGVzdGUgc3RyZWFtOiBpbnNlcnRhbW9zIGVsIHBsYWNlaG9sZGVyIGVuIGVsXG4gICAgICAvLyBhcnJheSBkZSBgbWVzc2FnZXNgIHVuYSDDum5pY2EgdmV6LiBMYXMgbGxhbWFkYXMgc3Vic2lndWllbnRlcyB5YSBub1xuICAgICAgLy8gdG9jYW4gYG1lc3NhZ2VzYDsgZWwgdGV4dG8gdml2ZSBlbiBlbCBzdHJlYW1pbmdTdG9yZSAoZXh0ZXJubyksIHBvclxuICAgICAgLy8gbG8gcXVlIFJlYWN0IG5vIHJlLXJlbmRlcml6YSBlbCDDoXJib2wgY29tcGxldG8gZW4gY2FkYSB0b2tlbi5cbiAgICAgIGlmIChzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgIT09IHRlbXBNZXNzYWdlSWQpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gdGVtcE1lc3NhZ2VJZFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgICBzdHJlYW1pbmdTdG9yZS5zdGFydCh0ZW1wTWVzc2FnZUlkKVxuICAgICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgICBpZDogdGVtcE1lc3NhZ2VJZCxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbWluZ1N0b3JlLnNldFRleHQodGVtcE1lc3NhZ2VJZCwgY29udGVudClcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICByYXdBdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGwsXG4gICAgICBzdWJhZ2VudE5hbWU/OiBzdHJpbmcgfCBudWxsLFxuICAgICAgcmVzb2x2ZWRDb250ZXh0PzogUmVzb2x2ZWRDb250ZXh0IHwgbnVsbFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWZldGNoIGRlbCB0YXNrIHBhbmVsIHNpIGVzdMOhIGFiaWVydG8geSBsYSB0b29sIGFwcm9iYWRhIGVkaXTDsy9ib3Jyw7MgZXNhIHRhcmVhLlxuICAgICAgLy8gQ3VicmUgbG9zIGRvcyBmbHVqb3MgZGUgYXBwcm92YWw6XG4gICAgICAvLyAgIDEpIEFwcHJvdmFsIHBvciBib3TDs24g4oaSIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWwucGVuZGluZ19hY3Rpb25zYCAodsOtYSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKVxuICAgICAgLy8gICAyKSBNYW51YWwgYXBwcm92YWwgKHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIikg4oaSIGBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudGBcbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsIC8vIGNvbnN1bWlyIHVuYSBzb2xhIHZlelxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0VkaXQgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhtYW51YWxBcHByb3ZhbC50b29sTmFtZSlcbiAgICAgIGNvbnN0IG1hbnVhbFdhc1Rhc2tEZWxldGUgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lKVxuXG4gICAgICBpZiAob3BlblRhc2tQYW5lbElkICYmICh3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlIHx8IG1hbnVhbFdhc1Rhc2tFZGl0IHx8IG1hbnVhbFdhc1Rhc2tEZWxldGUpKSB7XG4gICAgICAgIGNvbnN0IG1hbnVhbFBzZXVkb0FjdGlvbjogUGVuZGluZ0FjdGlvbiB8IG51bGwgPSBtYW51YWxBcHByb3ZhbFxuICAgICAgICAgID8gKHsgdG9vbF9uYW1lOiBtYW51YWxBcHByb3ZhbC50b29sTmFtZSwgdG9vbF9hcmdzOiBtYW51YWxBcHByb3ZhbC50b29sQXJncyA/PyB7fSB9IGFzIFBlbmRpbmdBY3Rpb24pXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGNvbnN0IGFmZmVjdGVkVGFza0lkcyA9IFtcbiAgICAgICAgICAuLi5leHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnMpLFxuICAgICAgICAgIC4uLnRhc2tJZHNGcm9tVXJscyxcbiAgICAgICAgICAuLi50YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLFxuICAgICAgICAgIC4uLihtYW51YWxQc2V1ZG9BY3Rpb24gPyBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MoW21hbnVhbFBzZXVkb0FjdGlvbl0pIDogW10pLFxuICAgICAgICBdLm1hcChTdHJpbmcpXG4gICAgICAgIGlmIChhZmZlY3RlZFRhc2tJZHMuaW5jbHVkZXMoU3RyaW5nKG9wZW5UYXNrUGFuZWxJZCkpKSB7XG4gICAgICAgICAgd2luZG93LnRhc2tQYW5lbD8ucmVmZXRjaFRhc2s/LigpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgICAgLi4uKGNyZWF0ZUFnZW50Rm9sbG93VXAgPyB7IGNyZWF0ZUFnZW50Rm9sbG93VXAgfSA6IHt9KSxcbiAgICAgICAgLi4uKHN1YmFnZW50TmFtZSA/IHsgc3ViYWdlbnROYW1lIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICAvLyBPcnF1ZXN0YWRvcjogYWN0dWFsaXphIGVsIGNoaXAgZGUgY29udGV4dG8gY29uIGVsIHByb3llY3RvL2NsaWVudGVcbiAgICAgIC8vIHF1ZSBlbCBzdWJhZ2VudGUgcmVzb2x2acOzIGRpbsOhbWljYW1lbnRlIHbDrWEgaGVycmFtaWVudGFzIChlai4gcHJvamVjdF9pZFxuICAgICAgLy8gZW5jb250cmFkbyBwb3IgZ2V0X3Byb2plY3RfaWRfYmFzZWRfb25fbmFtZSBvIGdldF9wcm9qZWN0X3dpdGhfdGFza3NfaW5mbykuXG4gICAgICBpZiAocmVzb2x2ZWRDb250ZXh0Py5wcm9qZWN0X2lkICYmICFjaGlwc1Byb2plY3QpIHtcbiAgICAgICAgaWYgKHJlc29sdmVkQ29udGV4dC5wcm9qZWN0X25hbWUpIHtcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgICAgcHJvamVjdE5hbWU6IHJlc29sdmVkQ29udGV4dC5wcm9qZWN0X25hbWUsXG4gICAgICAgICAgICBjbGllbnROYW1lOiByZXNvbHZlZENvbnRleHQuY2xpZW50X25hbWUgfHwgJycsXG4gICAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhyZXNvbHZlZENvbnRleHQucHJvamVjdF9pZCksXG4gICAgICAgICAgfSlcbiAgICAgICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgICAgIGlkOiByZXNvbHZlZENvbnRleHQucHJvamVjdF9pZCxcbiAgICAgICAgICAgIG5hbWU6IHJlc29sdmVkQ29udGV4dC5wcm9qZWN0X25hbWUsXG4gICAgICAgICAgICAuLi4ocmVzb2x2ZWRDb250ZXh0LmNsaWVudF9pZCA/IHsgY2xpZW50SWQ6IHJlc29sdmVkQ29udGV4dC5jbGllbnRfaWQgfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLihyZXNvbHZlZENvbnRleHQuY2xpZW50X25hbWVcbiAgICAgICAgICAgICAgPyB7IGNsaWVudDogeyBpZDogcmVzb2x2ZWRDb250ZXh0LmNsaWVudF9pZCB8fCAwLCBuYW1lOiByZXNvbHZlZENvbnRleHQuY2xpZW50X25hbWUgfSB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmV0Y2hQcm9qZWN0cyhyZXNvbHZlZENvbnRleHQucHJvamVjdF9pZCkudGhlbihwcm9qZWN0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IHByb2plY3RzPy5maW5kKHAgPT4gTnVtYmVyKHAuaWQpID09PSByZXNvbHZlZENvbnRleHQucHJvamVjdF9pZClcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgICAgICAgIHByb2plY3ROYW1lOiBmb3VuZC5uYW1lLFxuICAgICAgICAgICAgICAgIGNsaWVudE5hbWU6IGZvdW5kLmNsaWVudD8ubmFtZSB8fCByZXNvbHZlZENvbnRleHQuY2xpZW50X25hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoZm91bmQuaWQpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBzZXRQcm9qZWN0KGZvdW5kKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0TmFtZTogYFByb3llY3RvICR7cmVzb2x2ZWRDb250ZXh0LnByb2plY3RfaWR9YCxcbiAgICAgICAgICAgICAgICBjbGllbnROYW1lOiByZXNvbHZlZENvbnRleHQuY2xpZW50X25hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcocmVzb2x2ZWRDb250ZXh0LnByb2plY3RfaWQpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBzZXRQcm9qZWN0KHsgaWQ6IHJlc29sdmVkQ29udGV4dC5wcm9qZWN0X2lkISwgbmFtZTogYFByb3llY3RvICR7cmVzb2x2ZWRDb250ZXh0LnByb2plY3RfaWR9YCB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXNvbHZlZENvbnRleHQ/LmNsaWVudF9pZCAmJiAhY2xpZW50KSB7XG4gICAgICAgIHNldENsaWVudD8uKHtcbiAgICAgICAgICBpZDogcmVzb2x2ZWRDb250ZXh0LmNsaWVudF9pZCxcbiAgICAgICAgICBuYW1lOiByZXNvbHZlZENvbnRleHQuY2xpZW50X25hbWUgfHwgJycsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoY3JlYXRlQWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIGHDsWFkaXIgZWwgYWdlbnRlIHJlY2nDqW4gY3JlYWRvIGFsIGxpc3RhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoZWRpdEFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGFnZW50ZSBlZGl0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0LCBldmVudCwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LWNhbmNlbGxlZGAsXG4gICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgfSlcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgfSwgNTAwKVxuICB9LCBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICAvLyBPcnF1ZXN0YWRvcjogZXh0cmFlciBjb250ZXh0byByZXN1ZWx0byBkZWwgcGF5bG9hZCBkZSBhcHJvYmFjacOzbiB5XG4gICAgICAvLyBhY3R1YWxpemFyIGVsIGNoaXAgaW5tZWRpYXRhbWVudGUg4oCUIHNpbiBlc3BlcmFyIGFsIGNvbXBsZXRlL3JlZnJlc2guXG4gICAgICAvLyBFbCBiYWNrZW5kIGluY2x1eWUgcmVzb2x2ZWRfY29udGV4dCBlbiBzdWJhZ2VudF91c2VkIChkZW50cm8gZGVsXG4gICAgICAvLyBhcHByb3ZhbF9yZXF1aXJlZCBkYXRhIHBhcmEgc3ViYWdlbnRlcykgY29uIGVsIHByb2plY3RfaWQvY2xpZW50X2lkXG4gICAgICAvLyBxdWUgZWwgc3ViYWdlbnRlIGRldGVybWluw7MgYW50ZXMgZGVsIGludGVycnVwdC5cbiAgICAgIGNvbnN0IGFwcHJvdmFsQW55ID0gYXBwcm92YWwgYXMgQXBwcm92YWxSZXF1ZXN0ICYge1xuICAgICAgICByZXNvbHZlZF9jb250ZXh0PzogUmVzb2x2ZWRDb250ZXh0IHwgbnVsbFxuICAgICAgICBzdWJhZ2VudD86IHsgcmVzb2x2ZWRfY29udGV4dD86IFJlc29sdmVkQ29udGV4dCB8IG51bGwgfVxuICAgICAgfVxuICAgICAgY29uc3QgcmMgPSBhcHByb3ZhbEFueS5yZXNvbHZlZF9jb250ZXh0ID8/IGFwcHJvdmFsQW55LnN1YmFnZW50Py5yZXNvbHZlZF9jb250ZXh0ID8/IG51bGxcbiAgICAgIGlmIChyYz8ucHJvamVjdF9pZCAmJiAhY2hpcHNQcm9qZWN0KSB7XG4gICAgICAgIGlmIChyYy5wcm9qZWN0X25hbWUpIHtcbiAgICAgICAgICAvLyBUZW5lbW9zIG5vbWJyZTogc2V0ZWFyIGVsIGNoaXAgZGlyZWN0YW1lbnRlXG4gICAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiByYy5wcm9qZWN0X25hbWUsXG4gICAgICAgICAgICBjbGllbnROYW1lOiByYy5jbGllbnRfbmFtZSB8fCAnJyxcbiAgICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHJjLnByb2plY3RfaWQpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgICAgICBpZDogcmMucHJvamVjdF9pZCxcbiAgICAgICAgICAgIG5hbWU6IHJjLnByb2plY3RfbmFtZSxcbiAgICAgICAgICAgIC4uLihyYy5jbGllbnRfaWQgPyB7IGNsaWVudElkOiByYy5jbGllbnRfaWQgfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLihyYy5jbGllbnRfbmFtZSA/IHsgY2xpZW50OiB7IGlkOiByYy5jbGllbnRfaWQgfHwgMCwgbmFtZTogcmMuY2xpZW50X25hbWUgfSB9IDoge30pLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU29sbyB0ZW5lbW9zIGVsIElEIOKAlCBmZXRjaCBkZWwgbm9tYnJlIGNvbXBsZXRvIGRlbCBwcm95ZWN0b1xuICAgICAgICAgIGZldGNoUHJvamVjdHMocmMucHJvamVjdF9pZCkudGhlbihwcm9qZWN0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IHByb2plY3RzPy5maW5kKHAgPT4gTnVtYmVyKHAuaWQpID09PSByYy5wcm9qZWN0X2lkKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kLm5hbWUsXG4gICAgICAgICAgICAgICAgY2xpZW50TmFtZTogZm91bmQuY2xpZW50Py5uYW1lIHx8IHJjLmNsaWVudF9uYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGZvdW5kLmlkKSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgc2V0UHJvamVjdChmb3VuZClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEZhbGxiYWNrOiBtb3N0cmFyIGVsIElEIHNpIG5vIHNlIHB1ZWRlIHJlc29sdmVyIGVsIG5vbWJyZVxuICAgICAgICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgICAgICAgIHByb2plY3ROYW1lOiBgUHJveWVjdG8gJHtyYy5wcm9qZWN0X2lkfWAsXG4gICAgICAgICAgICAgICAgY2xpZW50TmFtZTogcmMuY2xpZW50X25hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcocmMucHJvamVjdF9pZCksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHNldFByb2plY3QoeyBpZDogcmMucHJvamVjdF9pZCEsIG5hbWU6IGBQcm95ZWN0byAke3JjLnByb2plY3RfaWR9YCB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyYz8uY2xpZW50X2lkICYmICFjbGllbnQpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4oeyBpZDogcmMuY2xpZW50X2lkLCBuYW1lOiByYy5jbGllbnRfbmFtZSB8fCAnJyB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2VUZXh0OiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBwZW5kaW5nQWN0aW9uczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zLFxuICAgICAgICB0aHJlYWRJZHM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8ubWFwKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkKSxcbiAgICAgIH1cbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuXG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aW9uID0gYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5bMF1cbiAgICAgICAgY29uc3QgdG9vbE5hbWUgPSAoYXBwcm92YWwgYXMgeyB0b29sX25hbWU/OiBzdHJpbmcgfSkudG9vbF9uYW1lID8/IGZpcnN0QWN0aW9uPy50b29sX25hbWUgPz8gJydcbiAgICAgICAgY29uc3QgdG9vbEFyZ3MgPVxuICAgICAgICAgICgoYXBwcm92YWwgYXMgeyB0b29sX2FyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KS50b29sX2FyZ3MgPz9cbiAgICAgICAgICAgIChmaXJzdEFjdGlvbj8udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSkgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIGlmICh0b29sTmFtZSkge1xuICAgICAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0geyB0b29sTmFtZSwgdG9vbEFyZ3MgfVxuICAgICAgICB9XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIGNoaXBzUHJvamVjdCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRQcm9qZWN0LCBjbGllbnQsIHNldENsaWVudF1cbiAgKVxuXG4gIGNvbnN0IHtcbiAgICBhc2tNYWlhLFxuICAgIGlzTG9hZGluZzogd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eSxcbiAgICBzdG9wU3RyZWFtaW5nLFxuICAgIGFib3J0U3RyZWFtU2lsZW50bHksXG4gIH0gPSB1c2VPcmNoZXN0cmF0b3JTdHJlYW0oe1xuICAgIG9uRXJyb3I6IGhhbmRsZVN0cmVhbUVycm9yLFxuICAgIG9uU3RyZWFtVXBkYXRlOiBoYW5kbGVTdHJlYW1VcGRhdGUsXG4gICAgb25GaW5pc2hTdHJlYW06IGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICBvblN0b3A6IGhhbmRsZVN0cmVhbVN0b3AsXG4gICAgb25BcHByb3ZhbFJlcXVpcmVkOiBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkLFxuICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLFxuICB9KVxuXG4gIC8vIE1hbnRlbmVtb3MgZWwgc2V0dGVyIG3DoXMgcmVjaWVudGUgZW4gdW5hIHJlZiBwYXJhIHF1ZSBwdWVkYSB1c2Fyc2UgZGVzZGVcbiAgLy8gZWZlY3RvcyBkZWZpbmlkb3MgYW50ZXMgZW4gZWwgYXJjaGl2byAoY2FtYmlvIGRlIGNoYXQsIHJlc2V0LCBldGMuKS5cbiAgYWJvcnRTdHJlYW1TaWxlbnRseVJlZi5jdXJyZW50ID0gYWJvcnRTdHJlYW1TaWxlbnRseVxuICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQgPSAoKSA9PiB7XG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICBzZXRBY3RpdmVMb2FkaW5ncyh7fSlcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICB9XG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuICAgICAgLy8gTGFzIG1lbnRpb25zIHB1ZWRlbiB2ZW5pciB2w61hIDV0byBwYXLDoW1ldHJvIChjYWxsIHBvc2l0aW9uYWwgZGVzZGUgZWwgZm9vdGVyKVxuICAgICAgLy8gbyB2w61hIFNlbmRNZXNzYWdlT3B0aW9ucyAoY2FsbCBwcm9ncmFtw6F0aWNvKS4gRWwgcGFyw6FtZXRybyBleHBsw61jaXRvIGdhbmEuXG4gICAgICBjb25zdCBlZmZlY3RpdmVNZW50aW9ucyA9IG1lbnRpb25zID8/IG9wdGlvbnMubWVudGlvbnNcbiAgICAgIGNvbnN0IGNvbnRleHRNZXNzYWdlOiBDb250ZXh0TWVzc2FnZSB8IHVuZGVmaW5lZCA9IGJ1aWxkQ29udGV4dE1lc3NhZ2UoZWZmZWN0aXZlTWVudGlvbnMpXG4gICAgICBjb25zdCBwYXlsb2FkRnVhSWQgPSBmdWFJZCA/PyBvcHRpb25zLmZ1YUlkXG4gICAgICBjb25zdCBwYXlsb2FkU2NJZCA9IHNjSWQgPz8gb3B0aW9ucy5zY0lkXG4gICAgICBjb25zdCBkaXNwbGF5TWVzc2FnZSA9IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkobWVzc2FnZSwge1xuICAgICAgICBmdWFJZDogcGF5bG9hZEZ1YUlkLFxuICAgICAgICBzY0lkOiBwYXlsb2FkU2NJZCxcbiAgICAgIH0pXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbWVzc2FnZVxuXG4gICAgICBpZiAoIXJlcG9ydGVkRXZlbnQuY3VycmVudCkge1xuICAgICAgICBldmVudChFVkVOVFMucG1BaVR5cGVkVGV4dClcbiAgICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgZWwgY29udGV4dG8gZ2xvYmFsIGVzdMOhIGRlc2FjdHVhbGl6YWRvXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50Py5bbWVzc2FnZXNSZWYuY3VycmVudC5sZW5ndGggLSAxXT8uYWdlbnRJZFxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBxdWVzdGlvbi0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlOiBkaXNwbGF5TWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgICAgLi4uKGNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQsXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogYWdlbnQ/Lm5hbWUgfHwgJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG5cbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGlmIChtZXNzYWdlID09PSB0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKSkge1xuICAgICAgICBmaW5hbE1lc3NhZ2UgPSBgRkFROiAke3QoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpfSAtIFRpcG8gZGUgcmVudGFiaWxpZGFkOiAke1xuICAgICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgcHJvamVjdD8uaW5jb21lVHlwZVxuICAgICAgICB9YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICAvLyBWZXJpZmljYXIgY29uc2lzdGVuY2lhIGVudHJlIGNvbnRleHRvIGdsb2JhbCB5IMO6bHRpbW8gbWVuc2FqZVxuICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IHByb2plY3Q/LmlkXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVByb2plY3RJZCA9IGxhc3RNZXNzYWdlV2l0aFByb2plY3Q/LnByb2plY3RJZFxuXG4gICAgICBsZXQgcHJvamVjdFRvUmVxdWVzdDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgICAgLy8gU2kgaGF5IMO6bHRpbW8gbWVuc2FqZSBjb24gcHJvamVjdElkLCB1c2FybG8gKG3DoXMgY29uZmlhYmxlKVxuICAgICAgaWYgKGxhc3RNZXNzYWdlUHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKGxhc3RNZXNzYWdlUHJvamVjdElkKVxuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG4gICAgICB9XG4gICAgICAvLyBTaSBubyBoYXkgw7psdGltbyBtZW5zYWplLCB1c2FyIGVsIGNvbnRleHRvIGdsb2JhbFxuICAgICAgZWxzZSBpZiAoY29udGV4dFByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIHByb2plY3RUb1JlcXVlc3QgPSBjb250ZXh0UHJvamVjdElkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2plY3RzID0gYXdhaXQgZmV0Y2hQcm9qZWN0cyhbcHJvamVjdFRvUmVxdWVzdF0pXG5cbiAgICAgIGNvbnN0IHBheWxvYWRGYXFJZCA9IGZhcUlkID8/IG9wdGlvbnMuZmFxSWRcbiAgICAgIGNvbnN0IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA9IGFnZW50U3VnZ2VzdGlvbklkID8/IG9wdGlvbnMuYWdlbnRTdWdnZXN0aW9uSWRcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKHByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIocHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNsaWVudD8uaWRcbiAgICAgICAgICA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCwgLi4uKGNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHByb2plY3Q/LmNsaWVudElkICE9IG51bGxcbiAgICAgICAgICAgID8geyBjbGllbnRJZDogTnVtYmVyKHByb2plY3QuY2xpZW50SWQpIH1cbiAgICAgICAgICAgIDogcHJvamVjdD8uY2xpZW50Py5pZFxuICAgICAgICAgICAgICA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkLCAuLi4ocHJvamVjdC5jbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0cz8ubGVuZ3RoID8geyBwcm9qZWN0TmFtZTogcHJvamVjdHNbMF0ubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4odGFzaz8uaWQgIT0gbnVsbCA/IHsgdGFza0lkOiBOdW1iZXIodGFzay5pZCksIC4uLih0YXNrLm5hbWUgPyB7IHRhc2tOYW1lOiB0YXNrLm5hbWUgfSA6IHt9KSB9IDoge30pLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGYXFJZCA/IHsgZmFxSWQ6IHBheWxvYWRGYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRnVhSWQgPyB7IGZ1YUlkOiBwYXlsb2FkRnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRTY0lkID8geyBzY0lkOiBwYXlsb2FkU2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgLi4uKG9wdGlvbj8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihvcHRpb24uZmVlSWQpIH0gOiB7fSksXG4gICAgICAgICAgLi4uKG9wdGlvbj8uY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IE51bWJlcihvcHRpb24uY2xpZW50SWQpIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKGFzeW5jIChmZWVkYmFja1Byb3A6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuQ2hhdHMud2FzSGVscGZ1bENoYXQoY2hhdE1lc3NhZ2VJZCwgZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVApXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBjaGF0TWVzc2FnZUlkICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCB3YXNIZWxwZnVsOiBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUCB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBCdXNjYXIgZWwgbWVuc2FqZSBxdWUgY29udGllbmUgYWxndW5vIGRlIGVzdG9zIHRocmVhZElkcyBlbiBzdXMgcGVuZGluZ19hY3Rpb25zXG4gICAgICBjb25zdCBtZXNzYWdlV2l0aEFwcHJvdmFsID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT5cbiAgICAgICAgbS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gICAgICApXG5cbiAgICAgIGlmICghbWVzc2FnZVdpdGhBcHByb3ZhbCB8fCAhbWVzc2FnZVdpdGhBcHByb3ZhbC5hcHByb3ZhbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRyw7MgbWVuc2FqZSBjb24gYXBwcm92YWwgcGFyYSB0aHJlYWRfaWRzOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IG1lc3NhZ2VXaXRoQXBwcm92YWwuaWRcbiAgICAgIGNvbnN0IGxvYWRpbmdLZXkgPSB0aHJlYWRJZHNbMF1cblxuICAgICAgY29uc3QgaGl0bENvbnRleHQ6IEhpdGxFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgIG1lc3NhZ2VUZXh0OiBtZXNzYWdlV2l0aEFwcHJvdmFsLm1lc3NhZ2UsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBwZW5kaW5nQWN0aW9uczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zLFxuICAgICAgICB0aHJlYWRJZHMsXG4gICAgICB9XG4gICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gaGl0bENvbnRleHRcblxuICAgICAgY29uc3QgaW5pdGlhbEFjdGl2aXR5ID0gcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkodCwgaGl0bENvbnRleHQpXG5cbiAgICAgIC8vIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyBpbW1lZGlhdGVseVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gbWVzc2FnZUlkKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG5cbiAgICAgIC8vIFRyaWdnZXIgcmUtcmVuZGVyXG4gICAgICBjb25zdCBleGlzdGluZ01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PiBtLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBpZiAoZXhpc3RpbmdNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICBhZGRNZXNzYWdlKHsgLi4uZXhpc3RpbmdNZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgY29udGludWUtdGhyZWFkIGVuZHBvaW50IHdpdGggQUxMIHRocmVhZF9pZHMgaW4gYSBzaW5nbGUgcmVxdWVzdFxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICAvLyBBZGQgbG9hZGluZ1xuICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbbG9hZGluZ0tleV06IGluaXRpYWxBY3Rpdml0eS5tZXNzYWdlLFxuICAgICAgfSkpXG4gICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShpbml0aWFsQWN0aXZpdHkpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQoe1xuICAgICAgICAgIHRocmVhZElkcywgLy8gU2VuZCBhbGwgYWN0aW9uIHRocmVhZF9pZHMgYXQgb25jZVxuICAgICAgICAgIHNlc3Npb25JZDogYXBwcm92YWwuc2Vzc2lvbl9pZCxcbiAgICAgICAgICBkZWNpc2lvbjogZWRpdGVkQWN0aW9ucyA/ICdlZGl0JyA6IGRlY2lzaW9uLFxuICAgICAgICAgIGVkaXRlZEFjdGlvbnMsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgU1NFIHN0cmVhbVxuICAgICAgICBhd2FpdCBwcm9jZXNzU1NFU3RyZWFtKHJlc3BvbnNlLCBsb2FkaW5nS2V5LCB7XG4gICAgICAgICAgb25UaGlua2luZzogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5ID0ge1xuICAgICAgICAgICAgICBwaGFzZTogJ3RoaW5raW5nJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSgwLCB0KSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KGFjdGl2aXR5KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkoZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5KHQpKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtVXBkYXRlKGNvbnRlbnQsIG51bGwsICcnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZUFjdGl2aXR5ID0gcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHkoXG4gICAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAgIGN1cnJlbnRUaHJlYWRJZCxcbiAgICAgICAgICAgICAgeyB1c2VSZXN1bWluZ0ZhbGxiYWNrOiB0cnVlIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG5vZGVBY3Rpdml0eSlcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJlbnRUaHJlYWRJZF06IG5vZGVBY3Rpdml0eS5tZXNzYWdlLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoXG4gICAgICAgICAgICBmaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICAgICAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgICAgICAgY3VycmVudFRocmVhZElkOiBzdHJpbmcsXG4gICAgICAgICAgICBhdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaChmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgYXR0YWNobWVudHMsIHN1Z2dlc3Rpb25zLCBhZ2VudElkKVxuICAgICAgICAgICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICAgICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IChhcHByb3ZhbFBheWxvYWQ6IGFueSwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyBOZXcgSElUTCBpbnRlcnJ1cHRpb24gZGV0ZWN0ZWQgYWZ0ZXIgcmVzdW1lIChjaGFpbmVkIGFjdGlvbnMpXG4gICAgICAgICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShudWxsKVxuICAgICAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQoYXBwcm92YWxQYXlsb2FkIGFzIEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25FcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGhhbmRsZVN0cmVhbUVycm9yLFxuICAgICAgaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgICAgaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgICAgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5LFxuICAgICAgdCxcbiAgICBdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIGF3YWl0IGxvYWRNZXNzYWdlcygpXG4gICAgfSBlbHNlIGlmICh1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZT8udHJpbSgpKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEF0dGFjaG1lbnRzID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGYXEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGdWEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxTYyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQpXG5cbiAgICAgIGlmICghaGFzSW5pdGlhbE1lc3NhZ2UgJiYgIWhhc0luaXRpYWxBdHRhY2htZW50cyAmJiAhaGFzSW5pdGlhbEZhcSAmJiAhaGFzSW5pdGlhbEZ1YSAmJiAhaGFzSW5pdGlhbFNjKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBhc2tNYWlhKHtcbiAgICAgICAgbWVzc2FnZTogdXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQgfHwgbnVsbCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lISxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihwcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKHByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgIC4uLihjbGllbnQ/LmlkXG4gICAgICAgICAgPyB7IGNsaWVudElkOiBjbGllbnQuaWQgfVxuICAgICAgICAgIDogcHJvamVjdD8uY2xpZW50SWQgIT0gbnVsbFxuICAgICAgICAgICAgPyB7IGNsaWVudElkOiBOdW1iZXIocHJvamVjdC5jbGllbnRJZCkgfVxuICAgICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnQ/LmlkXG4gICAgICAgICAgICAgID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQgfVxuICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/Lm5hbWUgPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/LmNsaWVudD8ubmFtZVxuICAgICAgICAgID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH1cbiAgICAgICAgICA6IGNsaWVudD8ubmFtZVxuICAgICAgICAgICAgPyB7IGNsaWVudE5hbWU6IGNsaWVudC5uYW1lIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odGFzaz8uaWQgIT0gbnVsbCA/IHsgdGFza0lkOiBOdW1iZXIodGFzay5pZCksIC4uLih0YXNrLm5hbWUgPyB7IHRhc2tOYW1lOiB0YXNrLm5hbWUgfSA6IHt9KSB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkID8geyBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCA/IHsgc2NJZDogdXNlckluaXRpYWxNZXNzYWdlLnNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAuLi4oYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpXG4gICAgICAgICAgPyB7IGNvbnRleHRNZXNzYWdlOiBidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucykgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBhdXRoVXNlcixcbiAgICBhZ2VudCxcbiAgICBhc2tNYWlhLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgXSlcblxuICBjb25zdCByZXNldENoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYWJvcnRTdHJlYW1TaWxlbnRseVJlZi5jdXJyZW50KClcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgfSwgW10pXG5cbiAgY29uc3Qgc3RvcEdlbmVyYXRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RvcFN0cmVhbWluZygpXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9LCBbc3RvcFN0cmVhbWluZ10pXG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgY3VycmVudFByb2plY3QsXG4gICAgY3VycmVudENoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgIGN1cnJlbnRNZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcblxuICAgIHNlbmRNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgcmVzZXRDaGF0LFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuXG4gICAgaXNEaXNhYmxlZDogd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcyxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDaEUsU0FBU0MsRUFBRSxJQUFJQyxNQUFNLFFBQVEsTUFBTTtBQUNuQyxTQUFTQyxlQUFlLFFBQVEsb0JBQW9CO0FBQ3BELFNBQVNDLHFCQUFxQixRQUFRLDBCQUEwQjtBQUNoRSxTQUFTQyxJQUFJLFFBQVEsU0FBUztBQUc5QixTQUFTQyxPQUFPLFFBQWlCLHdCQUF3QjtBQUN6RCxTQUFTQyxnQkFBZ0IsUUFBUSw4QkFBOEI7QUFDL0QsU0FBU0MsTUFBTSxFQUFFQyxRQUFRLFFBQVEsYUFBYTtBQUM5QyxPQUFPQyxJQUFJLE1BQU0scUJBQXFCO0FBQ3RDLFNBQVNDLFFBQVEsUUFBUSw0REFBNEQ7QUFDckYsU0FBdUNDLGVBQWUsUUFBd0Msa0JBQWtCO0FBQ2hILFNBQXlDQyxtQkFBbUIsUUFBUSw0QkFBNEI7QUFDaEcsU0FBU0Msa0NBQWtDLFFBQVEsc0NBQXNDO0FBR3pGLFNBQVNDLFdBQVcsUUFBUSxnQkFBZ0I7QUFDNUMsU0FBU0MsaUJBQWlCLFFBQVEsc0JBQXNCO0FBQ3hELFNBQVNDLHNCQUFzQixRQUFRLDBCQUEwQjtBQUNqRSxTQUFTQyxnQkFBZ0IsUUFBUSw2Q0FBNkM7QUFFOUUsU0FBU0MsdUJBQXVCLEVBQUVDLHlCQUF5QixRQUFRLDJCQUEyQjtBQUU5RixTQUNFQyx5QkFBeUIsRUFDekJDLHdCQUF3QixFQUN4QkMsNkJB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
1333
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJmZXRjaEFnZW50RGV0YWlsIiwiYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QiLCJnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkiLCJzdHJlYW1pbmdTdG9yZSIsImlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCIsIm1lcmdlU3RyZWFtQ2h1bmsiLCJub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MiLCJhdHRhY2htZW50c09yT3B0aW9ucyIsIl9vcHRpb25zJGF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYXR0YWNobWVudHMiLCJvcHRpb25zIiwibm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMiLCJyYXdBdHRhY2htZW50cyIsImZpbHRlciIsImF0dGFjaG1lbnQiLCJfdHlwZW9mIiwibWFwIiwiaW5kZXgiLCJuYW1lIiwidHJpbSIsImNvbmNhdCIsInR5cGUiLCJtaW1lVHlwZSIsIm1pbWVfdHlwZSIsImZ1bGxGaWxlTmFtZSIsImluY2x1ZGVzIiwibnVtZXJpY1NpemUiLCJzaXplIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJmaWxlIiwiRmlsZSIsImlkIiwidXJsX29yaWdpbmFsIiwidW5kZWZpbmVkIiwidXJsX3RodW1ibmFpbCIsInVybF9maWxlIiwicm9sZSIsImV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwicHVzaElkIiwicmF3IiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiaXNOYU4iLCJwdXNoIiwiZm9yRWFjaCIsImFjdGlvbiIsIl9yZWMkdGFza19pZCIsImFyZ3MiLCJ0b29sX2FyZ3MiLCJyZWMiLCJ0YXNrX2lkIiwidGFza19pZHMiLCJ0YXNrcyIsInQiLCJfdHJlYyR0YXNrX2lkIiwidHJlYyIsImV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkMiIsImxpc3QiLCJ0aWQiLCJleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyIsIl9yZWMkYWdlbnRfaWQiLCJlZGl0QWN0aW9uIiwiZmluZCIsImEiLCJ0b0xvd2VyQ2FzZSIsImFnZW50X2lkIiwiYWdlbnRJZCIsImV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZSIsInRvb2xOYW1lIiwiX3JlZiIsIl9yZWMkYWdlbnRfaWQyIiwiZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0IiwidGV4dCIsImxhYmVsZWQiLCJtYXRjaCIsImJvbGQiLCJ1c2VTdGFibGVDYWxsYmFja3MiLCJhdXRoVXNlciIsImN1cnJlbnRVc2VyIiwidG9TdHJpbmciLCJmaXJzdE5hbWUiLCJhdmF0YXIiLCJwaWN0dXJlIiwiY3VycmVudCIsInBhcnNlU1NFTGluZSIsImxpbmUiLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwidGhyZWFkSWQiLCJjYWxsYmFja3MiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJpc1N0cmVhbUNvbXBsZXRlIiwiaGFuZGxlTGluZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiaSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiX2hhbmRsZUxpbmUiLCJwYXJzZWQiLCJldmVudERhdGEiLCJvblRoaW5raW5nIiwiY29udGVudCIsIm9uVG9rZW4iLCJfZXZlbnREYXRhJGFnZW50X2lkIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImNvbXBsZXRlZEFnZW50SWQiLCJvbkNvbXBsZXRlIiwibWVzc2FnZSIsIm9uTm9kZSIsIl9ldmVudERhdGEkYWdlbnRfaWQyIiwiX2NhbGxiYWNrcyRvbkFwcHJvdmFsIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiY2FsbCIsIm9uRXJyb3IiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsInJlYWQiLCJzZW50IiwiYWJydXB0IiwiZGVjb2RlIiwic3RyZWFtIiwicG9wIiwibGVuZ3RoIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYzIiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYzJGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsImNsaWVudCIsInNldENsaWVudCIsInRhc2siLCJzZXRUYXNrIiwiYWdlbnQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImNoaXBzUHJvamVjdCIsInNldENoaXBzUHJvamVjdCIsImV2ZW50IiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VTdGFibGVDYWxsYmFja3MiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsImN1cnJlbnRNZXNzYWdlSWQiLCJjdXJyZW50VXNlclF1ZXN0aW9uIiwiY3VycmVudENoYXRJZCIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImxhc3RNYW51YWxBcHByb3ZhbFJlZiIsImhpdGxFeGVjdXRpb25Db250ZXh0UmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwic3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiIsImFjdGl2ZVN0cmVhbUNoYXRJZFJlZiIsImFib3J0U3RyZWFtU2lsZW50bHlSZWYiLCJjbGVhclN0cmVhbVVpUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImNsZWFyIiwiaXNDbG9uZUFnZW50IiwibGFzdE1zZ1dpdGhQcm9qZWN0IiwibXNnIiwicHJvamVjdElkIiwiYXQiLCJfcmVmNCIsInByb2plY3ROYW1lIiwidGhlbiIsInByb2plY3RzIiwiZm91bmQiLCJwIiwiX2ZvdW5kJGNsaWVudCIsImNsaWVudE5hbWUiLCJsYXN0TXNnV2l0aENsaWVudCIsImNsaWVudElkIiwiX3JlZjUiLCJtc2dDbGllbnRJZCIsIm1zZ0NsaWVudE5hbWUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImVycm9yTWVzc2FnZSIsImVycm9yUmF3TWVzc2FnZSIsIl9lcnJvclJhd01lc3NhZ2UkbWF0YyIsIl9lcnJvclJhd01lc3NhZ2UkbWF0YzIiLCJ0ZW1wTWVzc2FnZUlkIiwidXNlZCIsImlzRXJyb3IiLCJkYXRlIiwiRGF0ZSIsInVzZXIiLCJBU1NJU1RBTlQiLCJoYW5kbGVTdHJlYW1VcGRhdGUiLCJzdGFydCIsInNldFRleHQiLCJoYW5kbGVTdHJlYW1GaW5pc2giLCJfcmVmNiIsIl9jYWxsZWUyIiwiX3ByZXZpb3VzTWVzc2FnZSRhcHByIiwiX3dpbmRvdyR0YXNrUGFuZWwiLCJfY3JlYXRlQWdlbnRGb2xsb3dVcCIsIl9lZGl0QWdlbnRGb2xsb3dVcCIsInRhc2tVcmxSZWdleCIsIm1hdGNoZXMiLCJjb250ZW50VG9BZGQiLCJwcmV2aW91c01lc3NhZ2UiLCJoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlIiwiVEFTS19DUkVBVElPTl9UT09MUyIsIlRBU0tfRURJVF9UT09MUyIsIlRBU0tfREVMRVRFX1RPT0xTIiwid2FzVGFza0NyZWF0aW9uIiwid2FzVGFza0VkaXQiLCJ3YXNUYXNrRGVsZXRlIiwid2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCIsIndhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiY29uZmlndXJlZEFnZW50SWQiLCJ3YXNFZGl0QWdlbnRBcHByb3ZlZCIsImVkaXRBZ2VudEZvbGxvd1VwIiwiZnJvbVN0cmVhbSIsImZyb21BcmdzIiwicmVzb2x2ZWRBZ2VudElkIiwidGFza0lkc0Zyb21VcmxzIiwidGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCIsInRhc2tJZHNGcm9tRGVsZXRpb25UZXh0IiwidGFza0lkc0ZvckRhc2hib2FyZCIsInNob3VsZFN5bmNEYXNoYm9hcmQiLCJ0YXNrSWRzIiwidGFiIiwidGFiU2VnbWVudCIsImxhc3RQcm9qZWN0TWVzc2FnZSIsImNvbnRleHRQcm9qZWN0SWRSYXciLCJjb250ZXh0UHJvamVjdElkIiwicGF0aE1hdGNoIiwicm91dGVQcm9qZWN0SWQiLCJpc09uUHJvamVjdFJvdXRlIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMiIsIl93aW5kb3ckbmV3UHJvamVjdERhczMiLCJfd2luZG93JG5ld1Byb2plY3REYXM0IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNSIsIl93aW5kb3ckbmV3UHJvamVjdERhczYiLCJvcGVuVGFza1BhbmVsSWQiLCJtYW51YWxBcHByb3ZhbCIsIm1hbnVhbFdhc1Rhc2tFZGl0IiwibWFudWFsV2FzVGFza0RlbGV0ZSIsIl9tYW51YWxBcHByb3ZhbCR0b29sQSIsIm1hbnVhbFBzZXVkb0FjdGlvbiIsImFmZmVjdGVkVGFza0lkcyIsIl93aW5kb3ckdGFza1BhbmVsMiIsIl93aW5kb3ckdGFza1BhbmVsMiRyZSIsIl9jb250ZXh0MiIsIlJlZ0V4cCIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hdGNoQWxsIiwibSIsImFwcHJvdmFsIiwicGVuZGluZ19hY3Rpb25zIiwic29tZSIsImFwcHJvdmFsU3RhdHVzIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImFpQ2hhdEhpdGxPcHRpb24iLCJfb2JqZWN0U3ByZWFkIiwiYWdlbnRfdHlwZSIsImFjdGlvbl90eXBlIiwiZGVjaXNpb24iLCJvcHRpb24iLCJjcmVhdGVkX2FnZW50X2lkIiwidXJsIiwibG9jYXRpb24iLCJwYXRobmFtZSIsIm5ld1Byb2plY3REYXNoYm9hcmQiLCJhZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJ0YXNrUGFuZWwiLCJ0YXNrSWQiLCJ0b29sQXJncyIsInJlZmV0Y2hUYXNrIiwiY2hhdEFnZW50IiwiZXJyIiwiX3g0IiwiX3g1IiwiX3g2IiwiX3g3IiwiX3g4IiwiX3g5IiwiaGFuZGxlU3RyZWFtU3RvcCIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJzZXRUaW1lb3V0IiwiaGFuZGxlQXBwcm92YWxSZXF1aXJlZCIsIl9hcHByb3ZhbCRwZW5kaW5nX2FjdCIsImhpdGxDb250ZXh0IiwibWVzc2FnZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwibWVzc2FnZVRleHQiLCJ0aHJlYWRJZHMiLCJ0aHJlYWRfaWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJfYXBwcm92YWwkcGVuZGluZ19hY3QyIiwiX3JlZjciLCJfdG9vbF9uYW1lIiwiX3Rvb2xfYXJncyIsImZpcnN0QWN0aW9uIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0cmVhbUFjdGl2aXR5IiwidXBkYXRlU3RyZWFtQWN0aXZpdHkiLCJzdG9wU3RyZWFtaW5nIiwiYWJvcnRTdHJlYW1TaWxlbnRseSIsImN1cnJlbnRQcm9qZWN0Iiwic2VuZE1lc3NhZ2UiLCJfcmVmOCIsIl9jYWxsZWUzIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJfcHJvamVjdCRjbGllbnQiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJlZmZlY3RpdmVNZW50aW9ucyIsImNvbnRleHRNZXNzYWdlIiwicGF5bG9hZEZ1YUlkIiwicGF5bG9hZFNjSWQiLCJkaXNwbGF5TWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJzdHJlYW1pbmdQbGFjZWhvbGRlcklkIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInBheWxvYWRGYXFJZCIsInBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQzIiwicG1BaVR5cGVkVGV4dCIsIlVTRVIiLCJwcm9qZWN0Q2hhbmdlZCIsImluY29tZVR5cGUiLCJoaXN0b3J5TWVzc2FnZSIsImxhbmciLCJ1c2VySWQiLCJsYXN0TmFtZSIsImNvbXBhbnlJZCIsImNvbXBhbnlfaWQiLCJhZ2VudE5hbWUiLCJmZWVJZCIsInRhc2tOYW1lIiwiZW50aXR5IiwiYWdlbnRFbnRpdHkiLCJfeDAiLCJfeDEiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsImNoYW5nZVByb2plY3QiLCJoYW5kbGVGZWVkYmFjayIsIl9yZWY5IiwiX2NhbGxlZTQiLCJmZWVkYmFja1Byb3AiLCJjaGF0TWVzc2FnZUlkIiwiX2NvbnRleHQ0IiwiQ2hhdHMiLCJ3YXNIZWxwZnVsQ2hhdCIsIlRIVU1CU19VUCIsIndhc0hlbHBmdWwiLCJfeDE1IiwiX3gxNiIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmMCIsIl9jYWxsZWU1IiwiZWRpdGVkQWN0aW9ucyIsIm1lc3NhZ2VXaXRoQXBwcm92YWwiLCJsb2FkaW5nS2V5IiwiaW5pdGlhbEFjdGl2aXR5IiwiZXhpc3RpbmdNZXNzYWdlIiwibmV3U3RhdHVzIiwiX3QiLCJfY29udGV4dDUiLCJfbSRhcHByb3ZhbCIsIl9kZWZpbmVQcm9wZXJ0eSIsIk9yY2hlc3RyYXRvciIsImNvbnRpbnVlVGhyZWFkIiwic2Vzc2lvbklkIiwic2Vzc2lvbl9pZCIsIm9rIiwiYWN0aXZpdHkiLCJwaGFzZSIsImN1cnJlbnRUaHJlYWRJZCIsIm5vZGVBY3Rpdml0eSIsInVzZVJlc3VtaW5nRmFsbGJhY2siLCJuZXdMb2FkaW5ncyIsImFwcHJvdmFsUGF5bG9hZCIsImZpbmlzaCIsIl94MTciLCJfeDE4IiwiX3gxOSIsImluaXRpYWxpemVDaGF0IiwiX2NhbGxlZTYiLCJfdXNlckluaXRpYWxNZXNzYWdlJG0iLCJfdXNlckluaXRpYWxNZXNzYWdlJGEiLCJfcHJvamVjdCRjbGllbnQyIiwiX3Byb2plY3QkY2xpZW50MyIsImhhc0luaXRpYWxNZXNzYWdlIiwiaGFzSW5pdGlhbEF0dGFjaG1lbnRzIiwiaGFzSW5pdGlhbEZhcSIsImhhc0luaXRpYWxGdWEiLCJoYXNJbml0aWFsU2MiLCJfY29udGV4dDYiLCJCb29sZWFuIiwicmVzZXRDaGF0Iiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IFNlbmRNZXNzYWdlT3B0aW9ucywgVXNlQ2hhdE1hbmFnZXJQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi91c2VFdmVudCdcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VVc2VyLCBDaGF0SGlzdG9yeVJvbGUsIEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiwgQ29udGV4dE1lc3NhZ2UsIGJ1aWxkQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkgfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQgeyBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCwgZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQge1xuICBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlLFxuICBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSxcbiAgdHlwZSBIaXRsRXhlY3V0aW9uQ29udGV4dCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHN0cmVhbWluZ1N0b3JlIH0gZnJvbSAnLi4vdXNlU3RyZWFtaW5nTWVzc2FnZSdcbmltcG9ydCB7IGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCwgbWVyZ2VTdHJlYW1DaHVuayB9IGZyb20gJy4uLy4uL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMgPSAocmF3QXR0YWNobWVudHM6IHVua25vd24pOiBBdHRhY2htZW50RmlsZVtdID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhd0F0dGFjaG1lbnRzKSkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIHJhd0F0dGFjaG1lbnRzXG4gICAgLmZpbHRlcigoYXR0YWNobWVudCk6IGF0dGFjaG1lbnQgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gISFhdHRhY2htZW50ICYmIHR5cGVvZiBhdHRhY2htZW50ID09PSAnb2JqZWN0JylcbiAgICAubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50Lm5hbWUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQubmFtZS50cmltKCkgPyBhdHRhY2htZW50Lm5hbWUudHJpbSgpIDogYGZpbGUtJHtpbmRleCArIDF9YFxuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhdHRhY2htZW50LnR5cGUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQudHlwZS50cmltKCkgPyBhdHRhY2htZW50LnR5cGUudHJpbSgpIDogJ3BkZidcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gdHlwZW9mIGF0dGFjaG1lbnQubWltZV90eXBlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQubWltZV90eXBlIDogJydcbiAgICAgIGNvbnN0IGZ1bGxGaWxlTmFtZSA9IG5hbWUuaW5jbHVkZXMoJy4nKSA/IG5hbWUgOiBgJHtuYW1lfS4ke3R5cGV9YFxuICAgICAgY29uc3QgbnVtZXJpY1NpemUgPVxuICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5zaXplID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gYXR0YWNobWVudC5zaXplXG4gICAgICAgICAgOiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSkpXG4gICAgICAgICAgICA/IE51bWJlcihhdHRhY2htZW50LnNpemUpXG4gICAgICAgICAgICA6IDBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZTogbmV3IEZpbGUoW10sIGZ1bGxGaWxlTmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSxcbiAgICAgICAgaWQ6XG4gICAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQuaWQgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQuaWQudHJpbSgpXG4gICAgICAgICAgICA/IGF0dGFjaG1lbnQuaWRcbiAgICAgICAgICAgIDogYGFzc2lzdGFudC1maWxlLSR7aW5kZXh9LSR7ZnVsbEZpbGVOYW1lfWAsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNpemU6IG51bWVyaWNTaXplLFxuICAgICAgICB0eXBlLFxuICAgICAgICB1cmxfb3JpZ2luYWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX3RodW1ibmFpbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF90aHVtYm5haWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF9maWxlOiB0eXBlb2YgYXR0YWNobWVudC51cmxfZmlsZSA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9maWxlIDogdW5kZWZpbmVkLFxuICAgICAgICByb2xlOiBhdHRhY2htZW50LnJvbGUgPT09ICdhc3Npc3RhbnQnID8gJ2Fzc2lzdGFudCcgOiAndXNlcicsXG4gICAgICB9XG4gICAgfSlcbn1cblxuLyoqIEV4dHJhZSB0YXNrX2lkcyBkZSBsb3MgdG9vbF9hcmdzIGRlIHBlbmRpbmdfYWN0aW9ucywgY3VicmllbmRvIGxhcyBmb3JtYXMgY29tdW5lczpcbiAqICAtIGB7IHRhc2tfaWQgfWAgbyBgeyBpZCB9YFxuICogIC0gYHsgdGFza19pZHM6IFtdIH1gXG4gKiAgLSBgeyB0YXNrczogW3sgdGFza19pZHxpZCB9LCAuLi5dIH1gXG4gKiAgw5p0aWwgcGFyYSB0b29scyBkZSBlZGl0L2Fzc2lnbi9kZWxldGUgY3VhbmRvIGxhIHJlc3B1ZXN0YSBkZWwgTExNIG5vIGluY2x1eWUgVVJMcyAvdGFza3MvLi4uL2RldGFpbC4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgY29uc3QgcHVzaElkID0gKHJhdzogdW5rbm93bikgPT4ge1xuICAgIGlmIChyYXcgPT0gbnVsbCkgcmV0dXJuXG4gICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgfVxuICBwZW5kaW5nQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgaWYgKCFhY3Rpb24gfHwgdHlwZW9mIGFjdGlvbiAhPT0gJ29iamVjdCcpIHJldHVyblxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24udG9vbF9hcmdzXG4gICAgaWYgKCEoYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJncykpKSByZXR1cm5cbiAgICBjb25zdCByZWMgPSBhcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgcHVzaElkKHJlYy50YXNrX2lkID8/IHJlYy5pZClcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWMudGFza19pZHMpKSB7XG4gICAgICByZWMudGFza19pZHMuZm9yRWFjaChwdXNoSWQpXG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlYy50YXNrcykpIHtcbiAgICAgIHJlYy50YXNrcy5mb3JFYWNoKHQgPT4ge1xuICAgICAgICBpZiAodCAmJiB0eXBlb2YgdCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodCkpIHtcbiAgICAgICAgICBjb25zdCB0cmVjID0gdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgIHB1c2hJZCh0cmVjLnRhc2tfaWQgPz8gdHJlYy5pZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuLyoqIHRhc2tfaWQgLyB0YXNrX2lkcyBlbiBwZW5kaW5nX2FjdGlvbnMgZGUgZGVsZXRlXyogKGxhIHJlc3B1ZXN0YSBwdWVkZSBubyBpbmNsdWlyIFVSTHMgL3Rhc2tzL+KApi9kZXRhaWwpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdIHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrJykge1xuICAgICAgY29uc3QgcmF3ID0gcmVjLnRhc2tfaWQgPz8gcmVjLmlkXG4gICAgICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2tzX2JhdGNoJykge1xuICAgICAgY29uc3QgbGlzdCA9IHJlYy50YXNrX2lkc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgbGlzdC5mb3JFYWNoKHRpZCA9PiB7XG4gICAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyh0aWQpLCAxMClcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBlZGl0QWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2VkaXRfYWdlbnQnKVxuICBpZiAoXG4gICAgIWVkaXRBY3Rpb24gfHxcbiAgICAhZWRpdEFjdGlvbi50b29sX2FyZ3MgfHxcbiAgICB0eXBlb2YgZWRpdEFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8XG4gICAgQXJyYXkuaXNBcnJheShlZGl0QWN0aW9uLnRvb2xfYXJncylcbiAgKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBlZGl0QWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLCB0b29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09IHRvb2xOYW1lLnRvTG93ZXJDYXNlKCkpXG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24udG9vbF9hcmdzIHx8IHR5cGVvZiBhY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGFjdGlvbi50b29sX2FyZ3MpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBhY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZCA/PyByZWMuaWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbi8qKiDDmmx0aW1vIHJlY3Vyc28gc2kgbm8gaGF5IGxpbmtzIG5pIHRvb2xfYXJncyBwYXJzZWFibGVzIChwLiBlai4gXCJJRCAqKjc1OTcxMDYqKlwiKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCh0ZXh0OiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gIGNvbnN0IGxhYmVsZWQgPSB0ZXh0Lm1hdGNoKC9cXGJJRFxccypcXCpcXCooXFxkKylcXCpcXCovaSlcbiAgaWYgKGxhYmVsZWQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQobGFiZWxlZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgY29uc3QgYm9sZCA9IHRleHQubWF0Y2goL1xcKlxcKihcXGR7NSx9KVxcKlxcKi8pXG4gIGlmIChib2xkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGJvbGRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5jb25zdCB1c2VTdGFibGVDYWxsYmFja3MgPSAoYXV0aFVzZXI6IENPUlVzZXIpID0+IHtcbiAgY29uc3QgY3VycmVudFVzZXIgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VVc2VyPih7XG4gICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgfSlcblxuICBpZiAoXG4gICAgY3VycmVudFVzZXIuY3VycmVudC5pZCAhPT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQubmFtZSAhPT0gYXV0aFVzZXIuZmlyc3ROYW1lIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5hdmF0YXIgIT09IGF1dGhVc2VyLnBpY3R1cmVcbiAgKSB7XG4gICAgY3VycmVudFVzZXIuY3VycmVudCA9IHtcbiAgICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGN1cnJlbnRVc2VyOiBjdXJyZW50VXNlci5jdXJyZW50LFxuICB9XG59XG5cbmNvbnN0IHBhcnNlU1NFTGluZSA9IChsaW5lOiBzdHJpbmcpOiB7IGV2ZW50VHlwZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0gfCBudWxsID0+IHtcbiAgaWYgKCFsaW5lLnRyaW0oKSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIHJldHVybiBudWxsXG5cbiAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuICAgIHJldHVybiB7IGV2ZW50VHlwZSwgZGF0YSB9XG4gIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzU1NFU3RyZWFtID0gYXN5bmMgKFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4gIHRocmVhZElkOiBzdHJpbmcsXG4gIGNhbGxiYWNrczoge1xuICAgIG9uVGhpbmtpbmc6ICgpID0+IHZvaWRcbiAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Db21wbGV0ZTogKFxuICAgICAgZmluYWxDb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBhbnlbXSB8IG51bGwsXG4gICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgIGFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gICAgKSA9PiB2b2lkXG4gICAgb25FcnJvcjogKGVycm9yOiBhbnksIHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ/OiAoYXBwcm92YWw6IGFueSwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gIH1cbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICBpZiAoIXJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gIH1cblxuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgbGV0IGJ1ZmZlciA9ICcnXG4gIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICBsZXQgaXNTdHJlYW1Db21wbGV0ZSA9IGZhbHNlXG5cbiAgZnVuY3Rpb24gaGFuZGxlTGluZShsaW5lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVNTRUxpbmUobGluZSlcbiAgICBpZiAoIXBhcnNlZCkgcmV0dXJuXG5cbiAgICBjb25zdCB7IGV2ZW50VHlwZSwgZGF0YSB9ID0gcGFyc2VkXG4gICAgY29uc3QgZXZlbnREYXRhID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3RoaW5raW5nJykge1xuICAgICAgY2FsbGJhY2tzLm9uVGhpbmtpbmcoKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAndG9rZW4nKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mIGV2ZW50RGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGV2ZW50RGF0YS5jb250ZW50IDogJydcbiAgICAgIGFjY3VtdWxhdGVkQ29udGVudCA9IG1lcmdlU3RyZWFtQ2h1bmsoYWNjdW11bGF0ZWRDb250ZW50LCBjb250ZW50KVxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29udGVudCcpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YgZXZlbnREYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZXZlbnREYXRhLmNvbnRlbnQgOiAnJ1xuICAgICAgYWNjdW11bGF0ZWRDb250ZW50ID0gbWVyZ2VTdHJlYW1DaHVuayhhY2N1bXVsYXRlZENvbnRlbnQsIGNvbnRlbnQpXG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICBpZiAoaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkKGV2ZW50RGF0YSkpIHtcbiAgICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gY29udGVudCB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgICAgY29uc3Qgc291cmNlcyA9IGV2ZW50RGF0YS5zb3VyY2VzIHx8IG51bGxcbiAgICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuYXR0YWNobWVudHMpID8gZXZlbnREYXRhLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkpXG4gICAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW10pXG4gICAgICAgICAgOiBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5zdWdnZXN0aW9ucylcbiAgICAgICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBjb25zdCBhZ2VudElkUmF3ID0gZXZlbnREYXRhLmFnZW50X2lkID8/IGV2ZW50RGF0YS5hZ2VudElkXG4gICAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPVxuICAgICAgICAgIGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICAgIGNhbGxiYWNrcy5vbkNvbXBsZXRlKFxuICAgICAgICAgIGZpbmFsQ29udGVudCxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICB0aHJlYWRJZCxcbiAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICBjb21wbGV0ZWRBZ2VudElkXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ25vZGUnKSB7XG4gICAgICBpZiAoZXZlbnREYXRhLm1lc3NhZ2UgJiYgdHlwZW9mIGV2ZW50RGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjYWxsYmFja3Mub25Ob2RlKGV2ZW50RGF0YS5tZXNzYWdlLCB0aHJlYWRJZClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gKGV2ZW50RGF0YS5jb250ZW50IGFzIHN0cmluZykgfHwgYWNjdW11bGF0ZWRDb250ZW50XG4gICAgICBjb25zdCBzb3VyY2VzID0gKGV2ZW50RGF0YS5zb3VyY2VzIGFzIHVua25vd24pIHx8IG51bGxcbiAgICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IChldmVudERhdGEubWVtb3J5X3Nlc3Npb25faWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5hdHRhY2htZW50cykgPyBldmVudERhdGEuYXR0YWNobWVudHMgOiBudWxsXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkpXG4gICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdKVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3Rpb25zKVxuICAgICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIGNvbnN0IGFnZW50SWRSYXcgPSBldmVudERhdGEuYWdlbnRfaWQgPz8gZXZlbnREYXRhLmFnZW50SWRcbiAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPSBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHRocmVhZElkLCBhdHRhY2htZW50cywgc3VnZ2VzdGlvbnMsIGNvbXBsZXRlZEFnZW50SWQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdhcHByb3ZhbF9yZXF1aXJlZCcpIHtcbiAgICAgIGNhbGxiYWNrcy5vbkFwcHJvdmFsUmVxdWlyZWQ/LihldmVudERhdGEsIGFjY3VtdWxhdGVkQ29udGVudCwgdGhyZWFkSWQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIGNhbGxiYWNrcy5vbkVycm9yKGV2ZW50RGF0YS5lcnJvciwgdGhyZWFkSWQpXG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKCFpc1N0cmVhbUNvbXBsZXRlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIGlzU3RyZWFtQ29tcGxldGUgPSB0cnVlXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaGFuZGxlTGluZShsaW5lc1tpXSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXRNYW5hZ2VyID0gKHtcbiAgY2hhdElkOiBpbml0aWFsQ2hhdElkLFxuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIG9uRXJyb3IsXG4gIGFnZW50cyA9IFtdLFxufTogVXNlQ2hhdE1hbmFnZXJQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7XG4gICAgcHJvamVjdCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBzZXRDbGllbnQsXG4gICAgdGFzayxcbiAgICBzZXRUYXNrLFxuICAgIGFnZW50LFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdXNlU3RhYmxlQ2FsbGJhY2tzKGF1dGhVc2VyKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG4gIGNvbnN0IGN1cnJlbnRNZXNzYWdlSWQgPSB1c2VSZWYodXVpZHY0KCkpXG4gIGNvbnN0IGN1cnJlbnRVc2VyUXVlc3Rpb24gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY3VycmVudENoYXRJZCA9IHVzZVJlZihpbml0aWFsQ2hhdElkIHx8IHV1aWR2NCgpKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgLyoqXG4gICAqIEd1YXJkYSBpbmZvIGRlbCDDumx0aW1vIGFwcHJvdmFsIG1hbnVhbCAoY3VhbmRvIGVsIHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIiBlbiBsdWdhclxuICAgKiBkZSBjbGlja2VhciBlbCBib3TDs24pLiBFbiBtYW51YWwgYXBwcm92YWwsIGBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkYCByZXRvcm5hIGVhcmx5XG4gICAqIHNpbiBhZ3JlZ2FyIHVuIG1lbnNhamUgY29uIGBhcHByb3ZhbGAsIGFzw60gcXVlIGxhIGzDs2dpY2EgZGUgcmVmZXRjaCBlbiBgb25TdHJlYW1GaW5pc2hgXG4gICAqIG5vIGxvIGRldGVjdGEgdsOtYSBgcHJldmlvdXNNZXNzYWdlLmFwcHJvdmFsYC4gTG8gZ3VhcmRhbW9zIGFjw6EgcGFyYSBjb25zdW1pcmxvIGRlc3B1w6lzLlxuICAgKi9cbiAgY29uc3QgbGFzdE1hbnVhbEFwcHJvdmFsUmVmID0gdXNlUmVmPHtcbiAgICB0b29sTmFtZTogc3RyaW5nXG4gICAgdG9vbEFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICB9IHwgbnVsbD4obnVsbClcbiAgLyoqIENvbnRleHRvIGRlbCBtZW5zYWplIGRlIGFwcm9iYWNpw7NuIHByZXZpbyBhbCBlamVjdXRhciBjb250aW51ZS10aHJlYWQuICovXG4gIGNvbnN0IGhpdGxFeGVjdXRpb25Db250ZXh0UmVmID0gdXNlUmVmPEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8qKiBJZCBkZWwgcGxhY2Vob2xkZXIgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nIGFjdGl2byAoc2kgaGF5KS4gKi9cbiAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogQ2hhdCBhbCBxdWUgcGVydGVuZWNlIGVsIHN0cmVhbSBhY3R1YWxtZW50ZSBhY3Rpdm8uIFNpIGNhbWJpYSBlbCBjaGF0XG4gICAqIG1pZW50cmFzIHVuIHN0cmVhbSBlc3TDoSBlbiB2dWVsbywgZGVzY2FydGFtb3MgbG9zIHRva2VucyByZXNpZHVhbGVzXG4gICAqIHF1ZSBwdWVkYW4gbGxlZ2FyIGFudGVzIGRlIHF1ZSBlbCBhYm9ydCBzZSBjb21wbGV0ZS5cbiAgICovXG4gIGNvbnN0IGFjdGl2ZVN0cmVhbUNoYXRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICAvKiogU2V0dGVyIGluZGlyZWN0byBwYXJhIGFib3J0YXIgZWwgc3RyZWFtIGFudGVzIGRlIHF1ZSBlbCBob29rIGRlXG4gICAqIG9ycXVlc3RhZG9yIGVzdMOpIGluaWNpYWxpemFkbyAoc2UgbGlua2VhIG3DoXMgYWJham8pLiAqL1xuICBjb25zdCBhYm9ydFN0cmVhbVNpbGVudGx5UmVmID0gdXNlUmVmPCgpID0+IHZvaWQ+KCgpID0+IHVuZGVmaW5lZClcbiAgY29uc3QgY2xlYXJTdHJlYW1VaVJlZiA9IHVzZVJlZjwoKSA9PiB2b2lkPigoKSA9PiB1bmRlZmluZWQpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG5cbiAgY29uc3QgaXNXZWJTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNXZWJTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc0RlZXBTZWFyY2hBY3RpdmUpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgY29uc3QgeyBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIGxvYWRNZXNzYWdlcywgYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgaGFuZGxlU2Nyb2xsIH0gPVxuICAgIHVzZUNoYXRNZXNzYWdlcyh7XG4gICAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgY3VycmVudFVzZXIsXG4gICAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgICBvbkVycm9yLFxuICAgICAgYWdlbnRzLFxuICAgIH0pXG5cbiAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsQ2hhdElkICYmIGluaXRpYWxDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgLy8gU2kgaGF5IHVuIHN0cmVhbSBlbiBjdXJzbywgYWJvcnRhcmxvIHNpbGVuY2lvc2FtZW50ZSBwYXJhIHF1ZSBsb3NcbiAgICAgIC8vIHRva2VucyByZXNpZHVhbGVzIG5vIHNlIGVzY3JpYmFuIGVuIGVsIGNoYXQgbnVldm8uXG4gICAgICBhYm9ydFN0cmVhbVNpbGVudGx5UmVmLmN1cnJlbnQoKVxuXG4gICAgICAvLyBMaW1waWFyIGNvbnRleHRvIGdsb2JhbCBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs25cbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgIHNldFRhc2sobnVsbClcblxuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcblxuICAgICAgbG9hZE1lc3NhZ2VzKClcbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgc2V0VGFzaywgbG9hZE1lc3NhZ2VzXSlcblxuICAvLyBFbCBjb250ZXh0byBkZSBwcm95ZWN0by9jbGllbnRlIGFwbGljYSBhIGFnZW50ZXMgY2xvbmUgKHRpZW5lbiB0b29scykuIExvcyBjdXN0b20gbm8gbG9cbiAgLy8gbmVjZXNpdGFuIHBvciBhaG9yYSwgYXPDrSBxdWUgcGFyYSBlbGxvcyBubyByZXNvbHZlbW9zIG5pIGRpc3BhcmFtb3MgR2V0UHJvamVjdHMuXG4gIGNvbnN0IGlzQ2xvbmVBZ2VudCA9IGFnZW50Py50eXBlID09PSAnY2xvbmUnXG5cbiAgLy8gU2luY3Jvbml6YXIgY2hpcHNQcm9qZWN0IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIHByb2plY3RJZCBwZXJvIGNoaXBzUHJvamVjdCBubyBzZSBoYSBzZXRlYWRvXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0Nsb25lQWdlbnQgfHwgY2hpcHNQcm9qZWN0IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhQcm9qZWN0ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICBjb25zdCB7IHByb2plY3RJZCwgcHJvamVjdE5hbWUgfSA9IGxhc3RNc2dXaXRoUHJvamVjdCB8fCB7fVxuICAgIGlmICghcHJvamVjdElkKSByZXR1cm5cblxuICAgIGZldGNoUHJvamVjdHMocHJvamVjdElkKS50aGVuKHByb2plY3RzID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gcHJvamVjdHM/LmZpbmQocCA9PiBOdW1iZXIocC5pZCkgPT09IE51bWJlcihwcm9qZWN0SWQpKVxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kLm5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogZm91bmQuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGZvdW5kLmlkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdChmb3VuZClcbiAgICAgIH0gZWxzZSBpZiAocHJvamVjdE5hbWUpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwcm9qZWN0SWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KHsgaWQ6IE51bWJlcihwcm9qZWN0SWQpLCBuYW1lOiBwcm9qZWN0TmFtZSB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sIFtpc0Nsb25lQWdlbnQsIG1lc3NhZ2VzLCBjaGlwc1Byb2plY3QsIGxvYWRpbmdNZXNzYWdlcywgZmV0Y2hQcm9qZWN0cywgc2V0Q2hpcHNQcm9qZWN0LCBzZXRQcm9qZWN0XSlcblxuICAvLyBTaW5jcm9uaXphciBjbGllbnQgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gY2xpZW50SWQgcGVybyBjbGllbnQgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNDbG9uZUFnZW50IHx8IGNsaWVudCB8fCBsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuICAgIGNvbnN0IGxhc3RNc2dXaXRoQ2xpZW50ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cuY2xpZW50SWQgIT0gbnVsbCAmJiBtc2cuY2xpZW50TmFtZSkuYXQoLTEpXG4gICAgY29uc3QgeyBjbGllbnRJZDogbXNnQ2xpZW50SWQsIGNsaWVudE5hbWU6IG1zZ0NsaWVudE5hbWUgfSA9IGxhc3RNc2dXaXRoQ2xpZW50IHx8IHt9XG4gICAgaWYgKG1zZ0NsaWVudElkID09IG51bGwgfHwgIW1zZ0NsaWVudE5hbWUpIHJldHVyblxuXG4gICAgc2V0Q2xpZW50Py4oeyBpZDogTnVtYmVyKG1zZ0NsaWVudElkKSwgbmFtZTogbXNnQ2xpZW50TmFtZSB9KVxuICB9LCBbaXNDbG9uZUFnZW50LCBtZXNzYWdlcywgY2xpZW50LCBsb2FkaW5nTWVzc2FnZXMsIHNldENsaWVudF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoZXJyb3JNZXNzYWdlPzogc3RyaW5nLCBlcnJvclJhd01lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgc3RyZWFtaW5nU3RvcmUuY2xlYXIoKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgICA6IGVycm9yTWVzc2FnZSA9PT0gJ2ludmFsaWRfcmVxdWVzdF9lcnJvcicgJiYgZXJyb3JSYXdNZXNzYWdlPy5pbmNsdWRlcygncHJvbXB0IGlzIHRvbyBsb25nJylcbiAgICAgICAgICAgID8gdCgnY2hhdC5lcnJvclByb21wdFRvb0xvbmcnLCB7IHVzZWQ6IGVycm9yUmF3TWVzc2FnZS5tYXRjaCgvKFxcZCspIHRva2Vucy8pPy5bMV0gPz8gJycgfSlcbiAgICAgICAgICAgIDogdCgnY2hhdC5lcnJvcicpXG5cbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVVwZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb250ZW50OiBzdHJpbmcsIHNvdXJjZXM6IGFueSwgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIFNpIGVsIGNoYXQgY2FtYmnDsyBtaWVudHJhcyBlbCBzdHJlYW0gZXN0YWJhIGVuIHZ1ZWxvLCBkZXNjYXJ0YXIgZWxcbiAgICAgIC8vIHRva2VuIHJlc2lkdWFsOiBubyBkZWJlIHBpbnRhcnNlIGVuIGVsIG51ZXZvIGNoYXQuXG4gICAgICBpZiAoYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgIT0gbnVsbCAmJiBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCAhPT0gY3VycmVudENoYXRJZC5jdXJyZW50KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuXG4gICAgICAvLyBQcmltZXJhIGxsYW1hZGEgZGUgZXN0ZSBzdHJlYW06IGluc2VydGFtb3MgZWwgcGxhY2Vob2xkZXIgZW4gZWxcbiAgICAgIC8vIGFycmF5IGRlIGBtZXNzYWdlc2AgdW5hIMO6bmljYSB2ZXouIExhcyBsbGFtYWRhcyBzdWJzaWd1aWVudGVzIHlhIG5vXG4gICAgICAvLyB0b2NhbiBgbWVzc2FnZXNgOyBlbCB0ZXh0byB2aXZlIGVuIGVsIHN0cmVhbWluZ1N0b3JlIChleHRlcm5vKSwgcG9yXG4gICAgICAvLyBsbyBxdWUgUmVhY3Qgbm8gcmUtcmVuZGVyaXphIGVsIMOhcmJvbCBjb21wbGV0byBlbiBjYWRhIHRva2VuLlxuICAgICAgaWYgKHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCAhPT0gdGVtcE1lc3NhZ2VJZCkge1xuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSB0ZW1wTWVzc2FnZUlkXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICAgIHN0cmVhbWluZ1N0b3JlLnN0YXJ0KHRlbXBNZXNzYWdlSWQpXG4gICAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICAgIGlkOiB0ZW1wTWVzc2FnZUlkLFxuICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgc3RyZWFtaW5nU3RvcmUuc2V0VGV4dCh0ZW1wTWVzc2FnZUlkLCBjb250ZW50KVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1GaW5pc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIHJhd0F0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBjb21wbGV0ZWRBZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWZldGNoIGRlbCB0YXNrIHBhbmVsIHNpIGVzdMOhIGFiaWVydG8geSBsYSB0b29sIGFwcm9iYWRhIGVkaXTDsy9ib3Jyw7MgZXNhIHRhcmVhLlxuICAgICAgLy8gQ3VicmUgbG9zIGRvcyBmbHVqb3MgZGUgYXBwcm92YWw6XG4gICAgICAvLyAgIDEpIEFwcHJvdmFsIHBvciBib3TDs24g4oaSIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWwucGVuZGluZ19hY3Rpb25zYCAodsOtYSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKVxuICAgICAgLy8gICAyKSBNYW51YWwgYXBwcm92YWwgKHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIikg4oaSIGBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudGBcbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsIC8vIGNvbnN1bWlyIHVuYSBzb2xhIHZlelxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0VkaXQgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhtYW51YWxBcHByb3ZhbC50b29sTmFtZSlcbiAgICAgIGNvbnN0IG1hbnVhbFdhc1Rhc2tEZWxldGUgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lKVxuXG4gICAgICBpZiAob3BlblRhc2tQYW5lbElkICYmICh3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlIHx8IG1hbnVhbFdhc1Rhc2tFZGl0IHx8IG1hbnVhbFdhc1Rhc2tEZWxldGUpKSB7XG4gICAgICAgIGNvbnN0IG1hbnVhbFBzZXVkb0FjdGlvbjogUGVuZGluZ0FjdGlvbiB8IG51bGwgPSBtYW51YWxBcHByb3ZhbFxuICAgICAgICAgID8gKHsgdG9vbF9uYW1lOiBtYW51YWxBcHByb3ZhbC50b29sTmFtZSwgdG9vbF9hcmdzOiBtYW51YWxBcHByb3ZhbC50b29sQXJncyA/PyB7fSB9IGFzIFBlbmRpbmdBY3Rpb24pXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGNvbnN0IGFmZmVjdGVkVGFza0lkcyA9IFtcbiAgICAgICAgICAuLi5leHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnMpLFxuICAgICAgICAgIC4uLnRhc2tJZHNGcm9tVXJscyxcbiAgICAgICAgICAuLi50YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLFxuICAgICAgICAgIC4uLihtYW51YWxQc2V1ZG9BY3Rpb24gPyBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MoW21hbnVhbFBzZXVkb0FjdGlvbl0pIDogW10pLFxuICAgICAgICBdLm1hcChTdHJpbmcpXG4gICAgICAgIGlmIChhZmZlY3RlZFRhc2tJZHMuaW5jbHVkZXMoU3RyaW5nKG9wZW5UYXNrUGFuZWxJZCkpKSB7XG4gICAgICAgICAgd2luZG93LnRhc2tQYW5lbD8ucmVmZXRjaFRhc2s/LigpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgICAgLi4uKGNyZWF0ZUFnZW50Rm9sbG93VXAgPyB7IGNyZWF0ZUFnZW50Rm9sbG93VXAgfSA6IHt9KSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChjcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoY3JlYXRlQWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIGHDsWFkaXIgZWwgYWdlbnRlIHJlY2nDqW4gY3JlYWRvIGFsIGxpc3RhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoZWRpdEFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGFnZW50ZSBlZGl0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0LCBldmVudCwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LWNhbmNlbGxlZGAsXG4gICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgfSlcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgfSwgNTAwKVxuICB9LCBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2VUZXh0OiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBwZW5kaW5nQWN0aW9uczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zLFxuICAgICAgICB0aHJlYWRJZHM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8ubWFwKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkKSxcbiAgICAgIH1cbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuXG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aW9uID0gYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5bMF1cbiAgICAgICAgY29uc3QgdG9vbE5hbWUgPSAoYXBwcm92YWwgYXMgeyB0b29sX25hbWU/OiBzdHJpbmcgfSkudG9vbF9uYW1lID8/IGZpcnN0QWN0aW9uPy50b29sX25hbWUgPz8gJydcbiAgICAgICAgY29uc3QgdG9vbEFyZ3MgPVxuICAgICAgICAgICgoYXBwcm92YWwgYXMgeyB0b29sX2FyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KS50b29sX2FyZ3MgPz9cbiAgICAgICAgICAgIChmaXJzdEFjdGlvbj8udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSkgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIGlmICh0b29sTmFtZSkge1xuICAgICAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0geyB0b29sTmFtZSwgdG9vbEFyZ3MgfVxuICAgICAgICB9XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHksXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgICBhYm9ydFN0cmVhbVNpbGVudGx5LFxuICB9ID0gdXNlT3JjaGVzdHJhdG9yU3RyZWFtKHtcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbiAgfSlcblxuICAvLyBNYW50ZW5lbW9zIGVsIHNldHRlciBtw6FzIHJlY2llbnRlIGVuIHVuYSByZWYgcGFyYSBxdWUgcHVlZGEgdXNhcnNlIGRlc2RlXG4gIC8vIGVmZWN0b3MgZGVmaW5pZG9zIGFudGVzIGVuIGVsIGFyY2hpdm8gKGNhbWJpbyBkZSBjaGF0LCByZXNldCwgZXRjLikuXG4gIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCA9IGFib3J0U3RyZWFtU2lsZW50bHlcbiAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50ID0gKCkgPT4ge1xuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgc2V0QWN0aXZlTG9hZGluZ3Moe30pXG4gICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gcHJvamVjdFxuXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50IHx8IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIG9wdGlvbnMgfSA9IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyhhdHRhY2htZW50c09yT3B0aW9ucylcbiAgICAgIC8vIExhcyBtZW50aW9ucyBwdWVkZW4gdmVuaXIgdsOtYSA1dG8gcGFyw6FtZXRybyAoY2FsbCBwb3NpdGlvbmFsIGRlc2RlIGVsIGZvb3RlcilcbiAgICAgIC8vIG8gdsOtYSBTZW5kTWVzc2FnZU9wdGlvbnMgKGNhbGwgcHJvZ3JhbcOhdGljbykuIEVsIHBhcsOhbWV0cm8gZXhwbMOtY2l0byBnYW5hLlxuICAgICAgY29uc3QgZWZmZWN0aXZlTWVudGlvbnMgPSBtZW50aW9ucyA/PyBvcHRpb25zLm1lbnRpb25zXG4gICAgICBjb25zdCBjb250ZXh0TWVzc2FnZTogQ29udGV4dE1lc3NhZ2UgfCB1bmRlZmluZWQgPSBidWlsZENvbnRleHRNZXNzYWdlKGVmZmVjdGl2ZU1lbnRpb25zKVxuICAgICAgY29uc3QgcGF5bG9hZEZ1YUlkID0gZnVhSWQgPz8gb3B0aW9ucy5mdWFJZFxuICAgICAgY29uc3QgcGF5bG9hZFNjSWQgPSBzY0lkID8/IG9wdGlvbnMuc2NJZFxuICAgICAgY29uc3QgZGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KG1lc3NhZ2UsIHtcbiAgICAgICAgZnVhSWQ6IHBheWxvYWRGdWFJZCxcbiAgICAgICAgc2NJZDogcGF5bG9hZFNjSWQsXG4gICAgICB9KVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudD8uW21lc3NhZ2VzUmVmLmN1cnJlbnQubGVuZ3RoIC0gMV0/LmFnZW50SWRcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgcXVlc3Rpb24tJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZTogZGlzcGxheU1lc3NhZ2UsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IGN1cnJlbnRVc2VyLFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuVVNFUixcbiAgICAgICAgc291cmNlczogYXR0YWNobWVudHMsXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgIH0pXG5cbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG5cbiAgICAgIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlcklkXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBzdHJlYW1pbmdQbGFjZWhvbGRlcklkLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6IGFnZW50Py5uYW1lIHx8ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBpZiAobWVzc2FnZSA9PT0gdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJykpIHtcbiAgICAgICAgZmluYWxNZXNzYWdlID0gYEZBUTogJHt0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKX0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtcbiAgICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IHByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgLy8gVmVyaWZpY2FyIGNvbnNpc3RlbmNpYSBlbnRyZSBjb250ZXh0byBnbG9iYWwgeSDDumx0aW1vIG1lbnNhamVcbiAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0Py5pZFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcblxuICAgICAgbGV0IHByb2plY3RUb1JlcXVlc3Q6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgICAgIC8vIFNpIGhheSDDumx0aW1vIG1lbnNhamUgY29uIHByb2plY3RJZCwgdXNhcmxvIChtw6FzIGNvbmZpYWJsZSlcbiAgICAgIGlmIChsYXN0TWVzc2FnZVByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICAgICAgfVxuICAgICAgLy8gU2kgbm8gaGF5IMO6bHRpbW8gbWVuc2FqZSwgdXNhciBlbCBjb250ZXh0byBnbG9iYWxcbiAgICAgIGVsc2UgaWYgKGNvbnRleHRQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gY29udGV4dFByb2plY3RJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG4gICAgICBjb25zdCBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPSBhZ2VudFN1Z2dlc3Rpb25JZCA/PyBvcHRpb25zLmFnZW50U3VnZ2VzdGlvbklkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihwcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKHByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgIC4uLihjbGllbnQ/LmlkXG4gICAgICAgICAgPyB7IGNsaWVudElkOiBjbGllbnQuaWQsIC4uLihjbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnRJZCAhPSBudWxsXG4gICAgICAgICAgICA/IHsgY2xpZW50SWQ6IE51bWJlcihwcm9qZWN0LmNsaWVudElkKSB9XG4gICAgICAgICAgICA6IHByb2plY3Q/LmNsaWVudD8uaWRcbiAgICAgICAgICAgICAgPyB7IGNsaWVudElkOiBwcm9qZWN0LmNsaWVudC5pZCwgLi4uKHByb2plY3QuY2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IHByb2plY3QuY2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKHRhc2s/LmlkICE9IG51bGwgPyB7IHRhc2tJZDogTnVtYmVyKHRhc2suaWQpLCAuLi4odGFzay5uYW1lID8geyB0YXNrTmFtZTogdGFzay5uYW1lIH0gOiB7fSkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRmFxSWQgPyB7IGZhcUlkOiBwYXlsb2FkRmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEZ1YUlkID8geyBmdWFJZDogcGF5bG9hZEZ1YUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkU2NJZCA/IHsgc2NJZDogcGF5bG9hZFNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICB9XG5cbiAgICAgIGFza01haWEocGF5bG9hZERhdGEpXG4gICAgfSxcbiAgICBbXG4gICAgICBhZGRNZXNzYWdlLFxuICAgICAgZXZlbnQsXG4gICAgICBhc2tNYWlhLFxuICAgICAgcHJvamVjdCxcbiAgICAgIGNsaWVudCxcbiAgICAgIHRhc2ssXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGNoYW5nZVByb2plY3QgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGlmIChvcHRpb24uaWQgIT09IHByb2plY3Q/LmlkKSB7XG4gICAgICAgIHNldFByb2plY3Qob3B0aW9uKVxuICAgICAgfVxuXG4gICAgICBpZiAocHJvamVjdCAmJiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KSlcblxuICAgICAgICBhc2tNYWlhKHtcbiAgICAgICAgICBtZXNzYWdlOiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IG9wdGlvbi5pZCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKG9wdGlvbi5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5jbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZDogTnVtYmVyKG9wdGlvbi5jbGllbnRJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbcHJvamVjdCwgc2V0UHJvamVjdCwgYXNrTWFpYSwgYXV0aFVzZXIsIGlzV2ViU2VhcmNoQWN0aXZlLCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZlZWRiYWNrUHJvcDogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5DaGF0cy53YXNIZWxwZnVsQ2hhdChjaGF0TWVzc2FnZUlkLCBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUClcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IGNoYXRNZXNzYWdlSWQgJiYgbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIHdhc0hlbHBmdWw6IGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICAgICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgICAgZWRpdGVkQWN0aW9ucz86IEFycmF5PHsgdG9vbF9uYW1lOiBzdHJpbmc7IGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+XG4gICAgKSA9PiB7XG4gICAgICBpZiAoIXRocmVhZElkcz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHRocmVhZF9pZHMgcHJvdmlkZWQgZm9yIGFwcHJvdmFsIGRlY2lzaW9uJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEJ1c2NhciBlbCBtZW5zYWplIHF1ZSBjb250aWVuZSBhbGd1bm8gZGUgZXN0b3MgdGhyZWFkSWRzIGVuIHN1cyBwZW5kaW5nX2FjdGlvbnNcbiAgICAgIGNvbnN0IG1lc3NhZ2VXaXRoQXBwcm92YWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PlxuICAgICAgICBtLmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IHRocmVhZElkcy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgICAgIClcblxuICAgICAgaWYgKCFtZXNzYWdlV2l0aEFwcHJvdmFsIHx8ICFtZXNzYWdlV2l0aEFwcHJvdmFsLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZVdpdGhBcHByb3ZhbC5pZFxuICAgICAgY29uc3QgbG9hZGluZ0tleSA9IHRocmVhZElkc1swXVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgbWVzc2FnZVRleHQ6IG1lc3NhZ2VXaXRoQXBwcm92YWwubWVzc2FnZSxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zOiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMsXG4gICAgICAgIHRocmVhZElkcyxcbiAgICAgIH1cbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuXG4gICAgICBjb25zdCBpbml0aWFsQWN0aXZpdHkgPSByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSh0LCBoaXRsQ29udGV4dClcblxuICAgICAgLy8gVXBkYXRlIG1lc3NhZ2Ugc3RhdHVzIGltbWVkaWF0ZWx5XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBtZXNzYWdlSWQpIHtcbiAgICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcblxuICAgICAgLy8gVHJpZ2dlciByZS1yZW5kZXJcbiAgICAgIGNvbnN0IGV4aXN0aW5nTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+IG0uaWQgPT09IG1lc3NhZ2VJZClcbiAgICAgIGlmIChleGlzdGluZ01lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgIGFkZE1lc3NhZ2UoeyAuLi5leGlzdGluZ01lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsbCBjb250aW51ZS10aHJlYWQgZW5kcG9pbnQgd2l0aCBBTEwgdGhyZWFkX2lkcyBpbiBhIHNpbmdsZSByZXF1ZXN0XG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG5cbiAgICAgIC8vIEFkZCBsb2FkaW5nXG4gICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtsb2FkaW5nS2V5XTogaW5pdGlhbEFjdGl2aXR5Lm1lc3NhZ2UsXG4gICAgICB9KSlcbiAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KGluaXRpYWxBY3Rpdml0eSlcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZCh7XG4gICAgICAgICAgdGhyZWFkSWRzLCAvLyBTZW5kIGFsbCBhY3Rpb24gdGhyZWFkX2lkcyBhdCBvbmNlXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiBlZGl0ZWRBY3Rpb25zID8gJ2VkaXQnIDogZGVjaXNpb24sXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBTU0Ugc3RyZWFtXG4gICAgICAgIGF3YWl0IHByb2Nlc3NTU0VTdHJlYW0ocmVzcG9uc2UsIGxvYWRpbmdLZXksIHtcbiAgICAgICAgICBvblRoaW5raW5nOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkgPSB7XG4gICAgICAgICAgICAgIHBoYXNlOiAndGhpbmtpbmcnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlKDAsIHQpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkoYWN0aXZpdHkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkodCkpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1VcGRhdGUoY29udGVudCwgbnVsbCwgJycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk5vZGU6IChtZXNzYWdlOiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlQWN0aXZpdHkgPSByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eShcbiAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgdCxcbiAgICAgICAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAgY3VycmVudFRocmVhZElkLFxuICAgICAgICAgICAgICB7IHVzZVJlc3VtaW5nRmFsbGJhY2s6IHRydWUgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobm9kZUFjdGl2aXR5KVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3VycmVudFRocmVhZElkXTogbm9kZUFjdGl2aXR5Lm1lc3NhZ2UsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQ29tcGxldGU6IChcbiAgICAgICAgICAgIGZpbmFsQ29udGVudDogc3RyaW5nLFxuICAgICAgICAgICAgc291cmNlczogYW55LFxuICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICAgICAgICBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICAgICAgICBhZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkLCBhdHRhY2htZW50cywgc3VnZ2VzdGlvbnMsIGFnZW50SWQpXG4gICAgICAgICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShudWxsKVxuICAgICAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZDogKGFwcHJvdmFsUGF5bG9hZDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIE5ldyBISVRMIGludGVycnVwdGlvbiBkZXRlY3RlZCBhZnRlciByZXN1bWUgKGNoYWluZWQgYWN0aW9ucylcbiAgICAgICAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxSZXF1aXJlZChhcHByb3ZhbFBheWxvYWQgYXMgQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICBhZGRNZXNzYWdlLFxuICAgICAgaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgICBoYW5kbGVTdHJlYW1VcGRhdGUsXG4gICAgICBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkLFxuICAgICAgdXBkYXRlU3RyZWFtQWN0aXZpdHksXG4gICAgICB0LFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZ1YSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbFNjID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxICYmICFoYXNJbml0aWFsRnVhICYmICFoYXNJbml0aWFsU2MpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGFza01haWEoe1xuICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCB8fCBudWxsLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKHByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIocHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNsaWVudD8uaWRcbiAgICAgICAgICA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCB9XG4gICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnRJZCAhPSBudWxsXG4gICAgICAgICAgICA/IHsgY2xpZW50SWQ6IE51bWJlcihwcm9qZWN0LmNsaWVudElkKSB9XG4gICAgICAgICAgICA6IHByb2plY3Q/LmNsaWVudD8uaWRcbiAgICAgICAgICAgICAgPyB7IGNsaWVudElkOiBwcm9qZWN0LmNsaWVudC5pZCB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IHByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8uY2xpZW50Py5uYW1lXG4gICAgICAgICAgPyB7IGNsaWVudE5hbWU6IHByb2plY3QuY2xpZW50Lm5hbWUgfVxuICAgICAgICAgIDogY2xpZW50Py5uYW1lXG4gICAgICAgICAgICA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih0YXNrPy5pZCAhPSBudWxsID8geyB0YXNrSWQ6IE51bWJlcih0YXNrLmlkKSwgLi4uKHRhc2submFtZSA/IHsgdGFza05hbWU6IHRhc2submFtZSB9IDoge30pIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCA/IHsgZmFxSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogdXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQgPyB7IGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkID8geyBzY0lkOiB1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIC4uLihidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucylcbiAgICAgICAgICA/IHsgY29udGV4dE1lc3NhZ2U6IGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW1xuICAgIGluaXRpYWxDaGF0SWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIHByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHRhc2ssXG4gICAgYXV0aFVzZXIsXG4gICAgYWdlbnQsXG4gICAgYXNrTWFpYSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gIF0pXG5cbiAgY29uc3QgcmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCgpXG4gICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hF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