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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/lib/App.js +24 -11
  2. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +28 -0
  3. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +84 -0
  4. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +123 -0
  5. package/lib/components/atoms/ContextMentionChip/index.js +4 -0
  6. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +85 -0
  7. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +6 -0
  8. package/lib/components/atoms/ContextMentionEditor/index.js +2 -0
  9. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +188 -0
  10. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +98 -0
  11. package/lib/components/atoms/ContextMentionItem/index.js +2 -0
  12. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +131 -0
  13. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +63 -0
  14. package/lib/components/atoms/ContextMentionPopover/index.js +3 -0
  15. package/lib/components/atoms/MAIAInput/MAIAInput.js +61 -191
  16. package/lib/components/atoms/icons/NotionIcon.js +36 -0
  17. package/lib/components/atoms/icons/RocketIcon.js +35 -0
  18. package/lib/components/atoms/icons/index.js +3 -1
  19. package/lib/components/index.js +2 -1
  20. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +2 -2
  21. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.js +483 -0
  22. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.styles.js +238 -0
  23. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/catalog.js +437 -0
  24. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/index.js +3 -0
  25. package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +3 -3
  26. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +2 -2
  27. package/lib/components/molecules/AbmSection/AbmSkillsSection.styles.js +80 -0
  28. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.js +31 -3
  29. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.styles.js +2 -2
  30. package/lib/components/molecules/AbmSection/index.js +2 -2
  31. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -1
  32. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +8 -4
  33. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +21 -2
  34. package/lib/components/molecules/ChatAIMessages/newStyles.js +2 -2
  35. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +16 -6
  36. package/lib/components/molecules/ChatAIModal/constants.js +6 -2
  37. package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -4
  38. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +55 -0
  39. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +6 -0
  40. package/lib/components/molecules/ContextMentionInput/index.js +2 -0
  41. package/lib/components/molecules/SchedulesPage/SchedulesPage.js +63 -44
  42. package/lib/components/molecules/Sidebar/Sidebar.js +26 -9
  43. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +5 -1
  44. package/lib/components/molecules/SkillsPage/SkillsPage.js +747 -0
  45. package/lib/components/molecules/SkillsPage/index.js +2 -0
  46. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +186 -47
  47. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +4 -4
  48. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +5 -2
  49. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +6 -3
  50. package/lib/constants/taskLinkIcon.js +6 -0
  51. package/lib/dev/DevAbmAgentModal.js +114 -0
  52. package/lib/dev/DevContextMentionInput.js +65 -0
  53. package/lib/dev/Providers.js +11 -6
  54. package/lib/dev/mocks/abmModalMocks.js +200 -0
  55. package/lib/hooks/useCaretPosition.js +35 -0
  56. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  57. package/lib/hooks/useChatManager/useChatManager.js +21 -11
  58. package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
  59. package/lib/hooks/useChatMessages/useChatMessages.js +30 -14
  60. package/lib/hooks/useContextMentions.js +204 -0
  61. package/lib/hooks/useEntitySearch.js +405 -0
  62. package/lib/hooks/useEvent.js +5 -1
  63. package/lib/hooks/useMentionAllowedTypes.js +81 -0
  64. package/lib/hooks/useMentionPopover.js +284 -0
  65. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -4
  66. package/lib/lang/br/index.js +139 -1
  67. package/lib/lang/en/index.js +139 -1
  68. package/lib/lang/es/index.js +139 -1
  69. package/lib/lang/fr/index.js +147 -9
  70. package/lib/services/maia/Agents/connectors.js +88 -0
  71. package/lib/services/maia/Agents/skills.js +164 -0
  72. package/lib/services/maia/Chats/getChatMessages.js +29 -4
  73. package/lib/services/maia/Orchestrator/orchestrator.js +8 -5
  74. package/lib/services/maia/RecentProjects/getRecentProjects.js +12 -4
  75. package/lib/services/query/entitySearchQuery.js +16 -0
  76. package/lib/services/query/usersDirectoryQuery.js +19 -0
  77. package/lib/services/utils/mapChatMessages.js +12 -5
  78. package/lib/types/Chat.js +1 -1
  79. package/lib/types/agent.js +1 -1
  80. package/lib/types/agentModal.js +1 -1
  81. package/lib/types/agentSkill.js +2 -0
  82. package/lib/types/contextMention.js +37 -0
  83. package/lib/utils/contextMentionIcons.js +117 -0
  84. package/lib/utils/contextMentionLabel.js +4 -0
  85. package/lib/utils/contextMentionTypeLabel.js +17 -0
  86. package/lib/utils/renderContextMentions.js +216 -0
  87. package/package.json +1 -1
  88. package/lib/components/molecules/AbmSection/AbmActionsSection.js +0 -136
  89. package/lib/components/molecules/AbmSection/AbmActionsSection.styles.js +0 -74
@@ -32,7 +32,7 @@ import { useUser } from '../../../context/cor-user';
32
32
  import { AccessibilityIcon, BrainIcon } from '../../atoms/icons';
33
33
  import { useAgentModel } from '../../../hooks/useAgentModel/useAgentModel';
34
34
  import { useGetAgentById } from '../../../services/maia/Agents/getAgentById';
35
- import { AbmGeneralSection, AbmKnowledgeSection } from '../../molecules/AbmSection';
35
+ import { AbmActionsSectionV2, AbmGeneralSection, AbmKnowledgeSection } from '../../molecules/AbmSection';
36
36
  import { SCAAMContent, SCAAMFooter, SCAAMHeader, SCAAMHeaderTitle, SCAAMHeaderLeft, SCAAMHeaderFavorite, SCAAMHeaderCloseButton, SCAAMSidebar, SCAAMWrapper, SCAAMSidebarItem, SCAAMSidebarItemTitle, SCAAMDeleteButton, SCAAMSaveButton, SCAAMWrapperSpinner, SCAAMWrapperSpinnerContent, SCAAMSidebarItemError } from './AbmAgentModal.styles';
37
37
  import { useCreateAgent } from '../../../hooks/useAgentModel/useCreateAgent';
38
38
  import { useDeleteAgent } from '../../../hooks/useAgentModel/useDeleteAgent';
@@ -46,6 +46,8 @@ import { EVENTS, useEvent } from '../../../hooks/useEvent';
46
46
  import { DeleteQuestionModal } from '../DeleteQuestionModal/DeleteQuestionModal';
47
47
  import { useAccessClient } from '../../../hooks/useAccessClient/useAccessClient';
48
48
  import { useToggleFavorite } from '../../../hooks';
49
+ import { createSchedule } from '../../../services/maia/Schedules';
50
+ import { getAgentConnectors, openConnectorAuthorizationWindows, saveAgentConnectors } from '../../../services/maia/Agents/connectors';
49
51
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
50
52
  var initialValues = Object.freeze({
51
53
  isEditing: false,
@@ -67,7 +69,8 @@ var initialValues = Object.freeze({
67
69
  clients: null
68
70
  },
69
71
  actions: {
70
- selectedToolGroups: []
72
+ selectedToolGroups: [],
73
+ selectedConnectors: []
71
74
  }
72
75
  });
73
76
  export var SectionByKey = {
@@ -79,6 +82,9 @@ export var SectionByKey = {
79
82
  },
80
83
  accessibility: function accessibility(props) {
81
84
  return /*#__PURE__*/_jsx(AbmAccessibilitySection, _objectSpread({}, props));
85
+ },
86
+ actions: function actions(props) {
87
+ return /*#__PURE__*/_jsx(AbmActionsSectionV2, _objectSpread({}, props));
82
88
  }
83
89
  };
84
90
  var validateFieldValues = function validateFieldValues(valueToValidate) {
@@ -134,7 +140,8 @@ function buildEditingModalValuesFromAgentDetail(agentById, agentModels, prev) {
134
140
  })) || null
135
141
  },
136
142
  actions: {
137
- selectedToolGroups: agentById.toolGroupSlugs || []
143
+ selectedToolGroups: agentById.toolGroupSlugs || [],
144
+ selectedConnectors: []
138
145
  }
139
146
  });
140
147
  }
@@ -161,6 +168,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
161
168
  isSubscribed = _useState2[0],
162
169
  setIsSubscribed = _useState2[1];
163
170
  var modalRef = useRef(null);
171
+ var connectorAuthPopupRef = useRef(null);
164
172
  var hasPendingFilesRef = useRef(false);
165
173
  var actionsToFiles = useRef({
166
174
  toDelete: [],
@@ -287,13 +295,46 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
287
295
  return slug !== originalActions[index];
288
296
  });
289
297
  };
298
+ var hasConnectorChanges = function hasConnectorChanges() {
299
+ var _modalValues$actions2, _firstValueAgent$curr3;
300
+ var currentConnectors = _toConsumableArray(((_modalValues$actions2 = modalValues.actions) === null || _modalValues$actions2 === void 0 ? void 0 : _modalValues$actions2.selectedConnectors) || []).sort();
301
+ var originalConnectors = _toConsumableArray(((_firstValueAgent$curr3 = firstValueAgent.current) === null || _firstValueAgent$curr3 === void 0 || (_firstValueAgent$curr3 = _firstValueAgent$curr3.actions) === null || _firstValueAgent$curr3 === void 0 ? void 0 : _firstValueAgent$curr3.selectedConnectors) || []).sort();
302
+ if (currentConnectors.length !== originalConnectors.length) return true;
303
+ return currentConnectors.some(function (slug, index) {
304
+ return slug !== originalConnectors[index];
305
+ });
306
+ };
307
+ var persistAgentConnectors = useCallback(/*#__PURE__*/function () {
308
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(agentId, connectorSlugs, popupWindow) {
309
+ var response, pendingAuthorizations;
310
+ return _regeneratorRuntime.wrap(function (_context) {
311
+ while (1) switch (_context.prev = _context.next) {
312
+ case 0:
313
+ _context.next = 1;
314
+ return saveAgentConnectors(agentId, connectorSlugs);
315
+ case 1:
316
+ response = _context.sent;
317
+ pendingAuthorizations = response.requires_auth || [];
318
+ openConnectorAuthorizationWindows(pendingAuthorizations, popupWindow);
319
+ connectorAuthPopupRef.current = null;
320
+ return _context.abrupt("return", response);
321
+ case 2:
322
+ case "end":
323
+ return _context.stop();
324
+ }
325
+ }, _callee);
326
+ }));
327
+ return function (_x, _x2, _x3) {
328
+ return _ref2.apply(this, arguments);
329
+ };
330
+ }(), []);
290
331
  var validateAgentValuesIsSame = function validateAgentValuesIsSame() {
291
- var _firstValueAgent$curr3, _modalValues$general$, _firstValueAgent$curr4, _modalValues$knowledg, _firstValueAgent$curr5, _modalValues$knowledg2, _firstValueAgent$curr6, _actionsToFiles$curre, _actionsToFiles$curre2;
292
- if (!((_firstValueAgent$curr3 = firstValueAgent.current) !== null && _firstValueAgent$curr3 !== void 0 && _firstValueAgent$curr3.general) || !(modalValues !== null && modalValues !== void 0 && modalValues.general)) return false;
293
- return modalValues.general.name === firstValueAgent.current.general.name && modalValues.general.emoji === firstValueAgent.current.general.emoji && modalValues.general.introduction === firstValueAgent.current.general.introduction && modalValues.general.inputPlaceholder === firstValueAgent.current.general.inputPlaceholder && ((_modalValues$general$ = modalValues.general.aiModel) === null || _modalValues$general$ === void 0 ? void 0 : _modalValues$general$.id) === ((_firstValueAgent$curr4 = firstValueAgent.current.general.aiModel) === null || _firstValueAgent$curr4 === void 0 ? void 0 : _firstValueAgent$curr4.id) && modalValues.general.userPrompt === firstValueAgent.current.general.userPrompt && !hasActionsChanged() && (((_modalValues$knowledg = modalValues.knowledge) === null || _modalValues$knowledg === void 0 ? void 0 : _modalValues$knowledg.length) === ((_firstValueAgent$curr5 = firstValueAgent.current) === null || _firstValueAgent$curr5 === void 0 || (_firstValueAgent$curr5 = _firstValueAgent$curr5.knowledge) === null || _firstValueAgent$curr5 === void 0 ? void 0 : _firstValueAgent$curr5.length) || !((_modalValues$knowledg2 = modalValues.knowledge) !== null && _modalValues$knowledg2 !== void 0 && _modalValues$knowledg2.length) && !((_firstValueAgent$curr6 = firstValueAgent.current) !== null && _firstValueAgent$curr6 !== void 0 && (_firstValueAgent$curr6 = _firstValueAgent$curr6.knowledge) !== null && _firstValueAgent$curr6 !== void 0 && _firstValueAgent$curr6.length)) && !((_actionsToFiles$curre = actionsToFiles.current.toUpdate) !== null && _actionsToFiles$curre !== void 0 && _actionsToFiles$curre.length) && !((_actionsToFiles$curre2 = actionsToFiles.current.toDelete) !== null && _actionsToFiles$curre2 !== void 0 && _actionsToFiles$curre2.length) && !hasAccessibilityChanged();
332
+ var _firstValueAgent$curr4, _modalValues$general$, _firstValueAgent$curr5, _modalValues$knowledg, _firstValueAgent$curr6, _modalValues$knowledg2, _firstValueAgent$curr7, _actionsToFiles$curre, _actionsToFiles$curre2;
333
+ if (!((_firstValueAgent$curr4 = firstValueAgent.current) !== null && _firstValueAgent$curr4 !== void 0 && _firstValueAgent$curr4.general) || !(modalValues !== null && modalValues !== void 0 && modalValues.general)) return false;
334
+ return modalValues.general.name === firstValueAgent.current.general.name && modalValues.general.emoji === firstValueAgent.current.general.emoji && modalValues.general.introduction === firstValueAgent.current.general.introduction && modalValues.general.inputPlaceholder === firstValueAgent.current.general.inputPlaceholder && ((_modalValues$general$ = modalValues.general.aiModel) === null || _modalValues$general$ === void 0 ? void 0 : _modalValues$general$.id) === ((_firstValueAgent$curr5 = firstValueAgent.current.general.aiModel) === null || _firstValueAgent$curr5 === void 0 ? void 0 : _firstValueAgent$curr5.id) && modalValues.general.userPrompt === firstValueAgent.current.general.userPrompt && !hasActionsChanged() && !hasConnectorChanges() && (((_modalValues$knowledg = modalValues.knowledge) === null || _modalValues$knowledg === void 0 ? void 0 : _modalValues$knowledg.length) === ((_firstValueAgent$curr6 = firstValueAgent.current) === null || _firstValueAgent$curr6 === void 0 || (_firstValueAgent$curr6 = _firstValueAgent$curr6.knowledge) === null || _firstValueAgent$curr6 === void 0 ? void 0 : _firstValueAgent$curr6.length) || !((_modalValues$knowledg2 = modalValues.knowledge) !== null && _modalValues$knowledg2 !== void 0 && _modalValues$knowledg2.length) && !((_firstValueAgent$curr7 = firstValueAgent.current) !== null && _firstValueAgent$curr7 !== void 0 && (_firstValueAgent$curr7 = _firstValueAgent$curr7.knowledge) !== null && _firstValueAgent$curr7 !== void 0 && _firstValueAgent$curr7.length)) && !((_actionsToFiles$curre = actionsToFiles.current.toUpdate) !== null && _actionsToFiles$curre !== void 0 && _actionsToFiles$curre.length) && !((_actionsToFiles$curre2 = actionsToFiles.current.toDelete) !== null && _actionsToFiles$curre2 !== void 0 && _actionsToFiles$curre2.length) && !hasAccessibilityChanged();
294
335
  };
295
336
  var hasAnyValueForCreation = function hasAnyValueForCreation() {
296
- var _modalValues$general$2, _agentModels$, _modalValues$general$3, _modalValues$actions2;
337
+ var _modalValues$general$2, _agentModels$, _modalValues$general$3, _modalValues$actions3, _modalValues$actions4;
297
338
  if (modalValues.isEditing) return false;
298
339
  var isDefaultAiModel = !!agentModels.length && ((_modalValues$general$2 = modalValues.general.aiModel) === null || _modalValues$general$2 === void 0 ? void 0 : _modalValues$general$2.id) === ((_agentModels$ = agentModels[0]) === null || _agentModels$ === void 0 ? void 0 : _agentModels$.id);
299
340
  var defaultInputPlaceholder = t('generalSection.inputPlaceholder');
@@ -308,8 +349,9 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
308
349
  var hasKnowledge = !!modalValues.knowledge.length;
309
350
  var hasCustomAiModel = modalValues.general.aiModel && !isDefaultAiModel;
310
351
  var hasAccessibility = modalValues.accessibility.accessType !== 'company';
311
- var hasActions = !!((_modalValues$actions2 = modalValues.actions) !== null && _modalValues$actions2 !== void 0 && (_modalValues$actions2 = _modalValues$actions2.selectedToolGroups) !== null && _modalValues$actions2 !== void 0 && _modalValues$actions2.length);
312
- return hasName || hasEmoji || hasIntroduction || hasInputPlaceholder || hasUserPrompt || hasKnowledge || hasCustomAiModel || hasAccessibility || hasActions;
352
+ var hasActions = !!((_modalValues$actions3 = modalValues.actions) !== null && _modalValues$actions3 !== void 0 && (_modalValues$actions3 = _modalValues$actions3.selectedToolGroups) !== null && _modalValues$actions3 !== void 0 && _modalValues$actions3.length);
353
+ var hasConnectors = !!((_modalValues$actions4 = modalValues.actions) !== null && _modalValues$actions4 !== void 0 && (_modalValues$actions4 = _modalValues$actions4.selectedConnectors) !== null && _modalValues$actions4 !== void 0 && _modalValues$actions4.length);
354
+ return hasName || hasEmoji || hasIntroduction || hasInputPlaceholder || hasUserPrompt || hasKnowledge || hasCustomAiModel || hasAccessibility || hasActions || hasConnectors;
313
355
  };
314
356
  var hasChangesForEditing = function hasChangesForEditing() {
315
357
  if (!modalValues.isEditing) return false;
@@ -366,6 +408,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
366
408
  setSection('general');
367
409
  setIsOpen(false);
368
410
  agentCreatedRef.current = null;
411
+ connectorAuthPopupRef.current = null;
369
412
  pendingInitialSectionRef.current = null;
370
413
  pendingTriggerRef.current = null;
371
414
  prefetchedAgentByIdRef.current = null;
@@ -381,10 +424,10 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
381
424
  });
382
425
  setSection(newSection);
383
426
  };
384
- var handleSetAgentValuesByKeys = function handleSetAgentValuesByKeys(_ref2) {
385
- var key = _ref2.key,
386
- value = _ref2.value,
387
- deleteKnowledge = _ref2.deleteKnowledge;
427
+ var handleSetAgentValuesByKeys = function handleSetAgentValuesByKeys(_ref3) {
428
+ var key = _ref3.key,
429
+ value = _ref3.value,
430
+ deleteKnowledge = _ref3.deleteKnowledge;
388
431
  if (key === 'knowledge') {
389
432
  var nextKnowledge = value || [];
390
433
  if (!deleteKnowledge) {
@@ -422,54 +465,99 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
422
465
  });
423
466
  };
424
467
  var _handleConfirmAction = /*#__PURE__*/function () {
425
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat, action) {
426
- return _regeneratorRuntime.wrap(function (_context) {
427
- while (1) switch (_context.prev = _context.next) {
468
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(chat, action) {
469
+ var _modalValues$actions5;
470
+ var connectorChanges, _modalValues$actions6, _firstValueAgent$curr8, _modalValues$actions7, _t;
471
+ return _regeneratorRuntime.wrap(function (_context2) {
472
+ while (1) switch (_context2.prev = _context2.next) {
428
473
  case 0:
429
474
  if (window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
430
- _context.next = 1;
475
+ _context2.next = 1;
431
476
  break;
432
477
  }
433
- return _context.abrupt("return");
478
+ return _context2.abrupt("return");
434
479
  case 1:
435
480
  if (!(action === 'delete')) {
436
- _context.next = 2;
481
+ _context2.next = 2;
437
482
  break;
438
483
  }
439
484
  eventAmplitude(EVENTS["delete"]);
440
485
  handleDeleteAgent(chat.id);
441
- return _context.abrupt("return");
486
+ return _context2.abrupt("return");
442
487
  case 2:
443
488
  eventAmplitude(EVENTS.confirmAction, {
444
489
  option: modalValues.isEditing ? 'edite' : 'create'
445
490
  });
491
+ if ((_modalValues$actions5 = modalValues.actions) !== null && _modalValues$actions5 !== void 0 && (_modalValues$actions5 = _modalValues$actions5.selectedConnectors) !== null && _modalValues$actions5 !== void 0 && _modalValues$actions5.length) {
492
+ connectorAuthPopupRef.current = window.open('', '_blank', 'popup=yes,width=560,height=760');
493
+ }
446
494
  // Al reintentar guardar, liberar el freno del timeout previo para que los
447
495
  // useEffect de post-guardado vuelvan a poder disparar snackbars y cerrar.
448
496
  processFilesTimedOutRef.current = false;
449
497
  if (!modalValues.isEditing) {
450
- _context.next = 4;
498
+ _context2.next = 11;
451
499
  break;
452
500
  }
501
+ connectorChanges = hasConnectorChanges();
502
+ if (!(modalValues.general.id && connectorChanges)) {
503
+ _context2.next = 7;
504
+ break;
505
+ }
506
+ _context2.prev = 3;
507
+ _context2.next = 4;
508
+ return persistAgentConnectors(modalValues.general.id.toString(), ((_modalValues$actions6 = modalValues.actions) === null || _modalValues$actions6 === void 0 ? void 0 : _modalValues$actions6.selectedConnectors) || [], connectorAuthPopupRef.current);
509
+ case 4:
510
+ firstValueAgent.current = _objectSpread(_objectSpread({}, firstValueAgent.current), {}, {
511
+ actions: _objectSpread(_objectSpread({}, (_firstValueAgent$curr8 = firstValueAgent.current) === null || _firstValueAgent$curr8 === void 0 ? void 0 : _firstValueAgent$curr8.actions), {}, {
512
+ selectedConnectors: _toConsumableArray(((_modalValues$actions7 = modalValues.actions) === null || _modalValues$actions7 === void 0 ? void 0 : _modalValues$actions7.selectedConnectors) || [])
513
+ })
514
+ });
515
+ _context2.next = 6;
516
+ break;
517
+ case 5:
518
+ _context2.prev = 5;
519
+ _t = _context2["catch"](3);
520
+ handleSnackbarError(t('errorAgentCreated'));
521
+ if (connectorAuthPopupRef.current && !connectorAuthPopupRef.current.closed) {
522
+ connectorAuthPopupRef.current.close();
523
+ }
524
+ connectorAuthPopupRef.current = null;
525
+ return _context2.abrupt("return");
526
+ case 6:
527
+ _context2.next = 8;
528
+ break;
529
+ case 7:
530
+ if (connectorAuthPopupRef.current && !connectorAuthPopupRef.current.closed) {
531
+ connectorAuthPopupRef.current.close();
532
+ connectorAuthPopupRef.current = null;
533
+ }
534
+ case 8:
453
535
  if (validateAgentValuesIsSame()) {
454
- _context.next = 3;
536
+ _context2.next = 10;
455
537
  break;
456
538
  }
457
- _context.next = 3;
539
+ _context2.next = 9;
458
540
  return handleUpdateAgent(modalValues);
459
- case 3:
460
- _context.next = 5;
541
+ case 9:
542
+ return _context2.abrupt("return");
543
+ case 10:
544
+ if (connectorChanges) {
545
+ handleSnackbarSuccess(t('confirmAgentUpdated'));
546
+ handleClose();
547
+ }
548
+ _context2.next = 12;
461
549
  break;
462
- case 4:
463
- _context.next = 5;
550
+ case 11:
551
+ _context2.next = 12;
464
552
  return handleCreateAgent(modalValues);
465
- case 5:
553
+ case 12:
466
554
  case "end":
467
- return _context.stop();
555
+ return _context2.stop();
468
556
  }
469
- }, _callee);
557
+ }, _callee2, null, [[3, 5]]);
470
558
  }));
471
- return function handleConfirmAction(_x, _x2) {
472
- return _ref3.apply(this, arguments);
559
+ return function handleConfirmAction(_x4, _x5) {
560
+ return _ref4.apply(this, arguments);
473
561
  };
474
562
  }();
475
563
  useEffect(function () {
@@ -477,7 +565,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
477
565
  var _agentValues$values, _agentValues$values3;
478
566
  var agentValues = event.detail.agentValues;
479
567
  var initialSection = agentValues === null || agentValues === void 0 ? void 0 : agentValues.initialSection;
480
- pendingInitialSectionRef.current = initialSection && ['general', 'knowledge', 'accessibility'].includes(initialSection) ? initialSection : null;
568
+ pendingInitialSectionRef.current = initialSection && ['general', 'knowledge', 'accessibility', 'actions'].includes(initialSection) ? initialSection : null;
481
569
  getAllAgentModels();
482
570
  setIsOpen(true);
483
571
  setIsLoading(true);
@@ -577,7 +665,21 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
577
665
  useEffect(function () {
578
666
  // Evitar ejecución múltiple del efecto
579
667
  if (successCreate && !isLoadingCreate && agentCreatedRef.current !== successCreate.id) {
668
+ var _modalValues$actions8;
580
669
  agentCreatedRef.current = successCreate.id;
670
+ if ((_modalValues$actions8 = modalValues.actions) !== null && _modalValues$actions8 !== void 0 && (_modalValues$actions8 = _modalValues$actions8.selectedConnectors) !== null && _modalValues$actions8 !== void 0 && _modalValues$actions8.length) {
671
+ persistAgentConnectors(successCreate.id.toString(), modalValues.actions.selectedConnectors, connectorAuthPopupRef.current)["catch"](function (error) {
672
+ console.error('Error saving agent connectors after create:', error);
673
+ handleSnackbarError(t('errorAgentCreated'));
674
+ if (connectorAuthPopupRef.current && !connectorAuthPopupRef.current.closed) {
675
+ connectorAuthPopupRef.current.close();
676
+ }
677
+ connectorAuthPopupRef.current = null;
678
+ });
679
+ } else if (connectorAuthPopupRef.current && !connectorAuthPopupRef.current.closed) {
680
+ connectorAuthPopupRef.current.close();
681
+ connectorAuthPopupRef.current = null;
682
+ }
581
683
  if (pendingTriggerRef.current) {
582
684
  createSchedule(_objectSpread(_objectSpread({}, pendingTriggerRef.current), {}, {
583
685
  agent_external_id: successCreate.id.toString()
@@ -943,8 +1045,8 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
943
1045
  resetSuccessUpdateAccess();
944
1046
  handleClose();
945
1047
  }, [isShowProcessFiles, modalValues.isEditing, successUpdate, successCreate, updateAgent, currentSelectedAgent === null || currentSelectedAgent === void 0 ? void 0 : currentSelectedAgent.id, selectAgent, handleSnackbarSuccess, t, resetSuccessUpdate, resetSuccessCreate, handleResetSuccessSave, handleResetSuccessDelete, resetSuccessUpdateAccess, handleClose]);
946
- var webSocketFunction = function webSocketFunction(_ref4) {
947
- var modelData = _ref4.model_data;
1048
+ var webSocketFunction = function webSocketFunction(_ref5) {
1049
+ var modelData = _ref5.model_data;
948
1050
  var fileStatus = modelData;
949
1051
  if (fileStatus.status === 'done' || fileStatus.status === 'failed') {
950
1052
  setModalValues(function (prev) {
@@ -1176,16 +1278,51 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1176
1278
  }, 3000);
1177
1279
  return false;
1178
1280
  }
1179
- setModalValues(function (prev) {
1180
- var agentValuesToSet = buildEditingModalValuesFromAgentDetail(source, agentModels, prev);
1181
- firstValueAgent.current = agentValuesToSet;
1182
- return agentValuesToSet;
1183
- });
1184
- setIsLoading(false);
1185
- if (pendingInitialSectionRef.current) {
1186
- setSection(pendingInitialSectionRef.current);
1187
- pendingInitialSectionRef.current = null;
1188
- }
1281
+ ;
1282
+ _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1283
+ var selectedConnectors, connectors, _t2;
1284
+ return _regeneratorRuntime.wrap(function (_context3) {
1285
+ while (1) switch (_context3.prev = _context3.next) {
1286
+ case 0:
1287
+ selectedConnectors = [];
1288
+ _context3.prev = 1;
1289
+ _context3.next = 2;
1290
+ return getAgentConnectors(source.id.toString());
1291
+ case 2:
1292
+ connectors = _context3.sent;
1293
+ selectedConnectors = connectors.filter(function (connector) {
1294
+ return connector.enabled_for_agent;
1295
+ }).map(function (connector) {
1296
+ return connector.slug;
1297
+ });
1298
+ _context3.next = 4;
1299
+ break;
1300
+ case 3:
1301
+ _context3.prev = 3;
1302
+ _t2 = _context3["catch"](1);
1303
+ console.error('Error fetching agent connectors:', _t2);
1304
+ case 4:
1305
+ setModalValues(function (prev) {
1306
+ var agentValuesToSet = buildEditingModalValuesFromAgentDetail(source, agentModels, prev);
1307
+ var nextValues = _objectSpread(_objectSpread({}, agentValuesToSet), {}, {
1308
+ actions: _objectSpread(_objectSpread({}, agentValuesToSet.actions), {}, {
1309
+ selectedConnectors: selectedConnectors
1310
+ })
1311
+ });
1312
+ firstValueAgent.current = nextValues;
1313
+ return nextValues;
1314
+ });
1315
+ setIsLoading(false);
1316
+ if (pendingInitialSectionRef.current) {
1317
+ setSection(pendingInitialSectionRef.current);
1318
+ pendingInitialSectionRef.current = null;
1319
+ }
1320
+ case 5:
1321
+ case "end":
1322
+ return _context3.stop();
1323
+ }
1324
+ }, _callee3, null, [[1, 3]]);
1325
+ }))();
1189
1326
  return true;
1190
1327
  };
1191
1328
  var prefetched = prefetchedAgentByIdRef.current;
@@ -1207,7 +1344,9 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1207
1344
  });
1208
1345
  });
1209
1346
  }
1210
- }, [agentById, isOpen, isLoading, agentLoading, agentModels === null || agentModels === void 0 ? void 0 : agentModels.length, modalValues.isEditing, t]);
1347
+ // No incluir `isLoading` en deps: al terminar getAgentConnectors se hace setIsLoading(false) y
1348
+ // se re-ejecutaría el efecto con el mismo agentById, duplicando la query de connectors.
1349
+ }, [agentById, isOpen, agentLoading, agentModels === null || agentModels === void 0 ? void 0 : agentModels.length, modalValues.isEditing, t]);
1211
1350
  useEffect(function () {
1212
1351
  if (errorGetAgentById) {
1213
1352
  if (errorGetAgentById === "Access denied: You don't have permission to access this agent") {
@@ -1450,4 +1589,4 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1450
1589
  })]
1451
1590
  }), selector);
1452
1591
  };
1453
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VDYWxsYmFjayIsImNyZWF0ZVBvcnRhbCIsInVzZVRyYW5zbGF0aW9uIiwiQ1VCdXR0b24iLCJDYXRlZ29yeSIsIkFsZXJ0IiwiVHJhc2giLCJTdGFyIiwiQ3Jvc3MiLCJTcGlubmVyTG90dGllIiwiVG9vbHRpcCIsIkFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIiwiQmFja2Ryb3AiLCJ1c2VVc2VyIiwiQWNjZXNzaWJpbGl0eUljb24iLCJCcmFpbkljb24iLCJ1c2VBZ2VudE1vZGVsIiwidXNlR2V0QWdlbnRCeUlkIiwiQWJtR2VuZXJhbFNlY3Rpb24iLCJBYm1Lbm93bGVkZ2VTZWN0aW9uIiwiU0NBQU1Db250ZW50IiwiU0NBQU1Gb290ZXIiLCJTQ0FBTUhlYWRlciIsIlNDQUFNSGVhZGVyVGl0bGUiLCJTQ0FBTUhlYWRlckxlZnQiLCJTQ0FBTUhlYWRlckZhdm9yaXRlIiwiU0NBQU1IZWFkZXJDbG9zZUJ1dHRvbiIsIlNDQUFNU2lkZWJhciIsIlNDQUFNV3JhcHBlciIsIlNDQUFNU2lkZWJhckl0ZW0iLCJTQ0FBTVNpZGViYXJJdGVtVGl0bGUiLCJTQ0FBTURlbGV0ZUJ1dHRvbiIsIlNDQUFNU2F2ZUJ1dHRvbiIsIlNDQUFNV3JhcHBlclNwaW5uZXIiLCJTQ0FBTVdyYXBwZXJTcGlubmVyQ29udGVudCIsIlNDQUFNU2lkZWJhckl0ZW1FcnJvciIsInVzZUNyZWF0ZUFnZW50IiwidXNlRGVsZXRlQWdlbnQiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJ1c2VHbG9iYWxDb250ZXh0IiwidXNlVXBkYXRlQWdlbnQiLCJ1c2VLbm93bGVkZ2VPcGVyYXRpb25zIiwiQWJtTG9hZGVyRmlsZXMiLCJXcmFwcGVyQ2VudGVySWNvbiIsIkVWRU5UUyIsInVzZUV2ZW50IiwiRGVsZXRlUXVlc3Rpb25Nb2RhbCIsInVzZUFjY2Vzc0NsaWVudCIsInVzZVRvZ2dsZUZhdm9yaXRlIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiaW5pdGlhbFZhbHVlcyIsIk9iamVjdCIsImZyZWV6ZSIsImlzRWRpdGluZyIsImtub3dsZWRnZSIsImdlbmVyYWwiLCJuYW1lIiwiZW1vamkiLCJpbnRyb2R1Y3Rpb24iLCJpbnB1dFBsYWNlaG9sZGVyIiwiaXNBY3RpdmUiLCJhaU1vZGVsIiwiaWQiLCJ1c2VyUHJvbXB0Iiwia25vd2xlZGdlQmFzZXMiLCJpc19mYXZvcml0ZSIsImFjY2Vzc2liaWxpdHkiLCJhY2Nlc3NUeXBlIiwiY2xpZW50cyIsImFjdGlvbnMiLCJzZWxlY3RlZFRvb2xHcm91cHMiLCJTZWN0aW9uQnlLZXkiLCJwcm9wcyIsIl9vYmplY3RTcHJlYWQiLCJ2YWxpZGF0ZUZpZWxkVmFsdWVzIiwidmFsdWVUb1ZhbGlkYXRlIiwiYnVpbGRFZGl0aW5nTW9kYWxWYWx1ZXNGcm9tQWdlbnREZXRhaWwiLCJhZ2VudEJ5SWQiLCJhZ2VudE1vZGVscyIsInByZXYiLCJfYWdlbnRCeUlkJGtub3dsZWRnZUIiLCJfYWdlbnRCeUlkJGNsaWVudHMiLCJhZ2VudE1vZGVsIiwiZmluZCIsIm1vZGVsIiwibW9kZWxBaUlkIiwiY3JlYXRlZF9ieSIsImNyZWF0ZWRCeSIsIm1hcCIsImsiLCJmaWxlIiwiRmlsZSIsImZpbGVuYW1lIiwidG9TdHJpbmciLCJzaXplIiwiZmlsZV9zaXplX2J5dGVzIiwidHlwZSIsIm9yaWdpbmFsX2ZpbGVfdHlwZSIsInN0YXR1cyIsInVybF9vcmlnaW5hbCIsInVuZGVmaW5lZCIsInVybF90aHVtYm5haWwiLCJhY2Nlc3MiLCJjbGllbnQiLCJfY2xpZW50JGlkIiwiX2NsaWVudCRpc19hY3RpdmUiLCJfY2xpZW50JGlzX2RlbGV0ZWQiLCJpc19hY3RpdmUiLCJpc19kZWxldGVkIiwidG9vbEdyb3VwU2x1Z3MiLCJBYm1BZ2VudE1vZGFsIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwiX21vZGFsVmFsdWVzJGFjY2Vzc2liMiIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsMyIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsNCIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsNSIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsNiIsImFkZEFnZW50IiwidXBkYXRlQWdlbnQiLCJyZW1vdmVBZ2VudCIsInVwZGF0ZUFnZW50RmF2b3JpdGUiLCJzZWxlY3RGaXJzdEFnZW50IiwidXNlciIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwiY3VycmVudFNlbGVjdGVkQWdlbnQiLCJhZ2VudCIsInNlbGVjdEFnZW50IiwiX3VzZVRvZ2dsZUZhdm9yaXRlIiwidG9nZ2xlRmF2b3JpdGUiLCJzZWxlY3RvciIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc1N1YnNjcmliZWQiLCJzZXRJc1N1YnNjcmliZWQiLCJtb2RhbFJlZiIsImhhc1BlbmRpbmdGaWxlc1JlZiIsImFjdGlvbnNUb0ZpbGVzIiwidG9EZWxldGUiLCJ0b1VwbG9hZCIsImFjY2Vzc1VwZGF0ZUNvbnRleHQiLCJpc0Zyb21DcmVhdGlvbiIsImlzRnJvbUVkaXRpbmciLCJoYXNBY3Rpb25GaWxlcyIsIm9wZXJhdGlvblR5cGUiLCJoYXNCZWVuQ2FsbGVkIiwiYWNjZXNzSGFuZGxlZFJlZiIsImFnZW50Q3JlYXRlZFJlZiIsInBlbmRpbmdJbml0aWFsU2VjdGlvblJlZiIsInBlbmRpbmdUcmlnZ2VyUmVmIiwicHJlZmV0Y2hlZEFnZW50QnlJZFJlZiIsImZpbGVzRmluaXNoZWRSZWYiLCJwcm9jZXNzRmlsZXNUaW1lZE91dFJlZiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZmlsZXNQcm9jZXNzZWQiLCJzZXRGaWxlc1Byb2Nlc3NlZCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNPcGVuIiwic2V0SXNPcGVuIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93TW9kYWxEZWxldGUiLCJzZXRTaG93TW9kYWxEZWxldGUiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNlY3Rpb24iLCJzZXRTZWN0aW9uIiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwiaXNMb2FkaW5nIiwic2V0SXNMb2FkaW5nIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsIm1vZGFsVmFsdWVzIiwic2V0TW9kYWxWYWx1ZXMiLCJfdXNlR2V0QWdlbnRCeUlkIiwiYWdlbnRMb2FkaW5nIiwibG9hZGluZyIsImhhbmRsZUdldEFnZW50QnlJZCIsImhhbmRsZUNsZWFuQWdlbnQiLCJlcnJvckdldEFnZW50QnlJZCIsImVycm9yIiwiX3VzZUFnZW50TW9kZWwiLCJnZXRBbGxBZ2VudE1vZGVscyIsImZpcnN0VmFsdWVBZ2VudCIsIl91c2VTdGF0ZTEzIiwiX3VzZVN0YXRlMTQiLCJpc1Nob3dQcm9jZXNzRmlsZXMiLCJzZXRJc1Nob3dQcm9jZXNzRmlsZXMiLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwiaGFzRmlsZUVycm9ycyIsInNldEhhc0ZpbGVFcnJvcnMiLCJ1c2VyUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsIl91c2VEZWxldGVBZ2VudCIsImhhbmRsZURlbGV0ZUFnZW50Iiwic3VjY2Vzc0RlbGV0ZSIsInN1Y2Nlc3MiLCJyZXNldFN1Y2Nlc3MiLCJfdXNlVXBkYXRlQWdlbnQiLCJoYW5kbGVVcGRhdGVBZ2VudCIsInN1Y2Nlc3NVcGRhdGUiLCJyZXNldFN1Y2Nlc3NVcGRhdGUiLCJfdXNlQ3JlYXRlQWdlbnQiLCJoYW5kbGVDcmVhdGVBZ2VudCIsImlzTG9hZGluZ0NyZWF0ZSIsInN1Y2Nlc3NDcmVhdGUiLCJyZXNldFN1Y2Nlc3NDcmVhdGUiLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJTdWNjZXNzIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsIl91c2VLbm93bGVkZ2VPcGVyYXRpbyIsImhhbmRsZUNyZWF0ZUtub3dsZWRnZXMiLCJoYW5kbGVEZWxldGVLbm93bGVkZ2VzIiwiaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyIsImlzTG9hZGluZ0tub3dsZWRnZSIsImVycm9yS25vd2xlZGdlIiwic3VjY2Vzc0tub3dsZWRnZURlbGV0ZSIsImhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUiLCJoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUiLCJfdXNlQWNjZXNzQ2xpZW50IiwiaGFuZGxlQWNjZXNzQ2xpZW50Iiwic3VjY2Vzc1VwZGF0ZUFjY2VzcyIsImlzTG9hZGluZ1VwZGF0ZUFjY2VzcyIsInJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcyIsImhhbmRsZVJlc2V0U3VjY2VzcyIsImFyZUNsaWVudHNBcnJheXNFcXVhbCIsImNsaWVudHMxIiwiY2xpZW50czIiLCJsZW5ndGgiLCJjbGllbnRzMUlkcyIsImMiLCJjbGllbnRJZCIsInNvcnQiLCJjbGllbnRzMklkcyIsImV2ZXJ5IiwiaW5kZXgiLCJoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCIsIl9maXJzdFZhbHVlQWdlbnQkY3VyciIsImN1cnJlbnQiLCJhY2Nlc3NUeXBlU2FtZSIsImNsaWVudHNTYW1lIiwiaGFzQWN0aW9uc0NoYW5nZWQiLCJfbW9kYWxWYWx1ZXMkYWN0aW9ucyIsIl9maXJzdFZhbHVlQWdlbnQkY3VycjIiLCJjdXJyZW50QWN0aW9ucyIsIl90b0NvbnN1bWFibGVBcnJheSIsIm9yaWdpbmFsQWN0aW9ucyIsInNvbWUiLCJzbHVnIiwidmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSIsIl9maXJzdFZhbHVlQWdlbnQkY3VycjMiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbCQiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnI0IiwiX21vZGFsVmFsdWVzJGtub3dsZWRnIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyNSIsIl9tb2RhbFZhbHVlcyRrbm93bGVkZzIiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnI2IiwiX2FjdGlvbnNUb0ZpbGVzJGN1cnJlIiwiX2FjdGlvbnNUb0ZpbGVzJGN1cnJlMiIsInRvVXBkYXRlIiwiaGFzQW55VmFsdWVGb3JDcmVhdGlvbiIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsJDIiLCJfYWdlbnRNb2RlbHMkIiwiX21vZGFsVmFsdWVzJGdlbmVyYWwkMyIsIl9tb2RhbFZhbHVlcyRhY3Rpb25zMiIsImlzRGVmYXVsdEFpTW9kZWwiLCJkZWZhdWx0SW5wdXRQbGFjZWhvbGRlciIsImlzRGVmYXVsdElucHV0UGxhY2Vob2xkZXIiLCJkZWZhdWx0VXNlclByb21wdFBsYWNlaG9sZGVyIiwiaXNEZWZhdWx0VXNlclByb21wdCIsImhhc05hbWUiLCJ0cmltIiwiaGFzRW1vamkiLCJoYXNJbnRyb2R1Y3Rpb24iLCJoYXNJbnB1dFBsYWNlaG9sZGVyIiwiaGFzVXNlclByb21wdCIsImhhc0tub3dsZWRnZSIsImhhc0N1c3RvbUFpTW9kZWwiLCJoYXNBY2Nlc3NpYmlsaXR5IiwiaGFzQWN0aW9ucyIsImhhc0NoYW5nZXNGb3JFZGl0aW5nIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50IiwiYWdlbnRJZCIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJ1cGRhdGVkQWdlbnQiLCJoYW5kbGVDbG9zZSIsInNraXBDb25maXJtYXRpb24iLCJhcmd1bWVudHMiLCJjb25maXJtTWVzc2FnZSIsIndpbmRvdyIsImNvbmZpcm0iLCJoYW5kbGVCYWNrZHJvcENsaWNrIiwiZXZlbnQiLCJ0YXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwiaGFuZGxlU2VjdGlvbkNoYW5nZSIsIm5ld1NlY3Rpb24iLCJ0YWJTZWN0aW9uIiwib3B0aW9uIiwiaGFuZGxlU2V0QWdlbnRWYWx1ZXNCeUtleXMiLCJfcmVmMiIsImtleSIsInZhbHVlIiwiZGVsZXRlS25vd2xlZGdlIiwibmV4dEtub3dsZWRnZSIsIl9hY3Rpb25zVG9GaWxlcyRjdXJyZTMiLCJwdXNoIiwiYXBwbHkiLCJmaWxlc1ByZXZJZHMiLCJTZXQiLCJuZXdGaWxlcyIsImZpbHRlciIsImhhcyIsInZhbHVlSWRzIiwiY29uY2F0Iiwia25vd2xlZGdlRmlsZXMiLCJfZGVmaW5lUHJvcGVydHkiLCJoYW5kbGVDb25maXJtQWN0aW9uIiwiX3JlZjMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImNoYXQiLCJhY3Rpb24iLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImFicnVwdCIsImNvbmZpcm1BY3Rpb24iLCJzdG9wIiwiX3giLCJfeDIiLCJoYW5kbGVTZXRBZ2VudFZhbHVlcyIsIl9hZ2VudFZhbHVlcyR2YWx1ZXMiLCJfYWdlbnRWYWx1ZXMkdmFsdWVzMyIsImFnZW50VmFsdWVzIiwiZGV0YWlsIiwiaW5pdGlhbFNlY3Rpb24iLCJpbmNsdWRlcyIsInZhbHVlcyIsIl9hZ2VudFZhbHVlcyR2YWx1ZXMyIiwicHJlZmV0Y2hlZEFnZW50QnlJZCIsIm5leHRWYWx1ZXMiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9kb2N1bWVudCIsImJvZHkiLCJvcmlnaW5hbE92ZXJmbG93Iiwic3R5bGUiLCJvdmVyZmxvdyIsImhhbmRsZUJlZm9yZVVubG9hZCIsInByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJjcmVhdGVTY2hlZHVsZSIsImFnZW50X2V4dGVybmFsX2lkIiwiZXJyIiwiY29uc29sZSIsInByb21pc2VzIiwiZmlsZXNUb0RlbGV0ZSIsImZpbGVzVG9DcmVhdGUiLCJhZ2VudFdpdGhGYXZvcml0ZSIsImFnZW50Rm9yVG9nZ2xlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJhbGwiLCJmaWxlcyIsImFpQ2hhdEZhdm9yaXRlIiwiZmlsZXNUb1VwbG9hZCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImhhbmRsZVByb2Nlc3NGaWxlc1RpbWVvdXQiLCJ3ZWJTb2NrZXRGdW5jdGlvbiIsIl9yZWY0IiwibW9kZWxEYXRhIiwibW9kZWxfZGF0YSIsImZpbGVTdGF0dXMiLCJ1cGRhdGVkS25vd2xlZGdlIiwia25vd2xlZGdlX2Jhc2VfaWQiLCJoYXNQZW5kaW5nRmlsZXMiLCJoYXNFcnJvckZpbGVzIiwicHJldkNvdW50IiwiY29udGV4dCIsImFnZW50VG9BZGQiLCJfc3VjY2Vzc0NyZWF0ZSRpZCIsImNoYW5uZWwiLCIkX3NjIiwiXyRfc2MiLCJzdWJzY3JpYmVIYW5kbGVyIiwiXyRfc2MyIiwiXyRfc2MzIiwiXyRfc2MkY2hhbm5lbFR5cGUiLCJtb2RlbF9oYXNoIiwiYWN0aW9uVHlwZSIsIlNVQlNDUklCRSIsInVwZGF0ZUNvbm5lY3Rpb25Nb2RlbCIsImNoYW5uZWxUeXBlIiwiTU9ERUxfQ0hBTk5FTCIsImFwcGx5RWRpdGluZ0FnZW50Iiwic291cmNlIiwic2V0VGltZW91dCIsImFnZW50VmFsdWVzVG9TZXQiLCJwcmVmZXRjaGVkIiwic2hvdWxkRGlzYWJsZVNhdmVGb3JDbGllbnRzIiwiX21vZGFsVmFsdWVzJGFjY2Vzc2liIiwiaXNTYXZlQnV0dG9uRGlzYWJsZWQiLCJoYW5kbGVUb2dnbGVGYXZvcml0ZSIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsIiwiX21vZGFsVmFsdWVzJGdlbmVyYWwyIiwiY3JlYXRlIiwiZWRpdCIsInpJbmRleCIsIm9uQ2xpY2siLCJjaGlsZHJlbiIsInJlZiIsInRhYkluZGV4IiwiY29sb3IiLCJhdHRhY2htZW50cyIsImxhYmVsIiwib25UaW1lb3V0IiwidGl0bGUiLCJ3aWR0aCIsImhlaWdodCIsImZpbGwiLCJ2YXJpYW50IiwiY2xhc3NOYW1lIiwiY2FuY2VsTW9kYWwiLCJkaXNhYmxlZCIsImhhc1Njcm9sbCIsImV4aXN0aW5nS25vd2xlZGdlIiwibmV3S25vd2xlZGdlIiwib25SZW1vdmVFeGlzdGluZ0tub3dsZWRnZSIsIm9uUmVtb3ZlTmV3S25vd2xlZGdlIiwib25GaWxlRXJyb3JDaGFuZ2UiLCJjaGlsZHJlbldpdGhJY29uIiwiZGlzcGxheSIsImdhcCIsImlzRGlzYWJsZWQiLCJvbkNsb3NlIiwiaGFuZGxlcnMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9vcmdhbmlzbXMvQWJtQWdlbnRNb2RhbC9BYm1BZ2VudE1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1hbGVydCAqL1xuLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWN5Y2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9qc3gtbm8tdXNlbGVzcy1mcmFnbWVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuXG5pbXBvcnQgeyBDVUJ1dHRvbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2J1dHRvbi9saWIvY29tcG9uZW50cy9DVUJ1dHRvbidcbmltcG9ydCB7IENhdGVnb3J5IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2F0ZWdvcnknXG5pbXBvcnQgeyBBbGVydCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0FsZXJ0J1xuaW1wb3J0IHsgVHJhc2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9UcmFzaCdcbmltcG9ydCB7IFN0YXIgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9TdGFyJ1xuaW1wb3J0IHsgQ3Jvc3MgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9Dcm9zcydcbmltcG9ydCB7IFNwaW5uZXJMb3R0aWUgfSBmcm9tICdAcHJvamVjdGNvci9jb3ItY29tbW9ucy9saWIvY29tcG9uZW50cy9zcGlubmVyLWxvdHRpZSdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IEFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0FibVNlY3Rpb24vQWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24vQWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24nXG5pbXBvcnQgeyBCYWNrZHJvcCB9IGZyb20gJy4uLy4uL2F0b21zL0JhY2tkcm9wJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBBY2Nlc3NpYmlsaXR5SWNvbiwgQnJhaW5JY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyB1c2VBZ2VudE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWdlbnRNb2RlbC91c2VBZ2VudE1vZGVsJ1xuaW1wb3J0IHsgQWdlbnQsIEFnZW50TW9kZWwgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IHVzZUdldEFnZW50QnlJZCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2dldEFnZW50QnlJZCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IEFibUFjdGlvbnNTZWN0aW9uLCBBYm1HZW5lcmFsU2VjdGlvbiwgQWJtS25vd2xlZGdlU2VjdGlvbiB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9BYm1TZWN0aW9uJ1xuaW1wb3J0IHsgTW9kYWxWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudE1vZGFsJ1xuaW1wb3J0IHtcbiAgU0NBQU1Db250ZW50LFxuICBTQ0FBTUZvb3RlcixcbiAgU0NBQU1IZWFkZXIsXG4gIFNDQUFNSGVhZGVyVGl0bGUsXG4gIFNDQUFNSGVhZGVyTGVmdCxcbiAgU0NBQU1IZWFkZXJGYXZvcml0ZSxcbiAgU0NBQU1IZWFkZXJDbG9zZUJ1dHRvbixcbiAgU0NBQU1TaWRlYmFyLFxuICBTQ0FBTVdyYXBwZXIsXG4gIFNDQUFNU2lkZWJhckl0ZW0sXG4gIFNDQUFNU2lkZWJhckl0ZW1UaXRsZSxcbiAgU0NBQU1EZWxldGVCdXR0b24sXG4gIFNDQUFNU2F2ZUJ1dHRvbixcbiAgU0NBQU1XcmFwcGVyU3Bpbm5lcixcbiAgU0NBQU1XcmFwcGVyU3Bpbm5lckNvbnRlbnQsXG4gIFNDQUFNU2lkZWJhckl0ZW1FcnJvcixcbn0gZnJvbSAnLi9BYm1BZ2VudE1vZGFsLnN0eWxlcydcbmltcG9ydCB7IHVzZUNyZWF0ZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWdlbnRNb2RlbC91c2VDcmVhdGVBZ2VudCdcbmltcG9ydCB7IHVzZURlbGV0ZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWdlbnRNb2RlbC91c2VEZWxldGVBZ2VudCdcbmltcG9ydCB7IHVzZVNuYWNrQmFyTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVVwZGF0ZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWdlbnRNb2RlbC91c2VVcGRhdGVBZ2VudCdcbmltcG9ydCB7IHVzZUtub3dsZWRnZU9wZXJhdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VLbm93bGVkZ2UnXG5pbXBvcnQgeyBBYm1Mb2FkZXJGaWxlcyB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9BYm1TZWN0aW9uL0FibUxvYWRlckZpbGVzJ1xuaW1wb3J0IHsgV3JhcHBlckNlbnRlckljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9XcmFwcGVyQ2VudGVySWNvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IERlbGV0ZVF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyB1c2VBY2Nlc3NDbGllbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBY2Nlc3NDbGllbnQvdXNlQWNjZXNzQ2xpZW50J1xuaW1wb3J0IHsgdXNlVG9nZ2xlRmF2b3JpdGUgfSBmcm9tICcuLi8uLi8uLi9ob29rcydcblxuY29uc3QgaW5pdGlhbFZhbHVlcyA9IE9iamVjdC5mcmVlemUoe1xuICBpc0VkaXRpbmc6IGZhbHNlLFxuICBrbm93bGVkZ2U6IFtdLFxuICBnZW5lcmFsOiB7XG4gICAgbmFtZTogJycsXG4gICAgZW1vamk6ICcnLFxuICAgIGludHJvZHVjdGlvbjogJycsXG4gICAgaW5wdXRQbGFjZWhvbGRlcjogJycsXG4gICAgaXNBY3RpdmU6IGZhbHNlLFxuICAgIGFpTW9kZWw6IG51bGwsXG4gICAgaWQ6IG51bGwsXG4gICAgdXNlclByb21wdDogbnVsbCxcbiAgICBrbm93bGVkZ2VCYXNlczogW10sXG4gICAgaXNfZmF2b3JpdGU6IGZhbHNlLFxuICB9LFxuICBhY2Nlc3NpYmlsaXR5OiB7XG4gICAgYWNjZXNzVHlwZTogJ2NvbXBhbnknLFxuICAgIGNsaWVudHM6IG51bGwsXG4gIH0sXG4gIGFjdGlvbnM6IHtcbiAgICBzZWxlY3RlZFRvb2xHcm91cHM6IFtdLFxuICB9LFxufSlcblxudHlwZSBBYm1TZWN0aW9uID0gJ2dlbmVyYWwnIHwgJ2tub3dsZWRnZScgfCAndHJhaW5pbmcnIHwgJ3Rlc3RpbmcnIHwgJ2FjY2Vzc2liaWxpdHknIHwgJ2FjdGlvbnMnXG5cbmV4cG9ydCBjb25zdCBTZWN0aW9uQnlLZXkgPSB7XG4gIGdlbmVyYWw6IChwcm9wczoge1xuICAgIHZhbHVlczogTW9kYWxWYWx1ZXNcbiAgICBoYW5kbGVTZXRBZ2VudFZhbHVlczogKHtcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlLFxuICAgICAgZGVsZXRlS25vd2xlZGdlLFxuICAgIH06IHtcbiAgICAgIGtleTogc3RyaW5nXG4gICAgICB2YWx1ZTogdW5rbm93blxuICAgICAgZGVsZXRlS25vd2xlZGdlPzogYm9vbGVhblxuICAgIH0pID0+IHZvaWRcbiAgICBhZ2VudE1vZGVsczogQWdlbnRNb2RlbFtdXG4gICAgbG9hZGluZzogYm9vbGVhblxuICB9KSA9PiA8QWJtR2VuZXJhbFNlY3Rpb24gey4uLnByb3BzfSAvPixcbiAga25vd2xlZGdlOiAocHJvcHM6IHtcbiAgICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7IGtleSwgdmFsdWUgfTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT4gdm9pZFxuICAgIGV4aXN0aW5nS25vd2xlZGdlOiBBdHRhY2htZW50RmlsZVtdXG4gICAgbmV3S25vd2xlZGdlOiBBdHRhY2htZW50RmlsZVtdXG4gICAgb25SZW1vdmVFeGlzdGluZ0tub3dsZWRnZTogKGZpbGVJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25SZW1vdmVOZXdLbm93bGVkZ2U6IChmaWxlSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uRmlsZUVycm9yQ2hhbmdlOiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkXG4gIH0pID0+IDxBYm1Lbm93bGVkZ2VTZWN0aW9uIHsuLi5wcm9wc30gLz4sXG4gIGFjY2Vzc2liaWxpdHk6IChwcm9wczoge1xuICAgIHZhbHVlczogTW9kYWxWYWx1ZXNcbiAgICBoYW5kbGVTZXRBZ2VudFZhbHVlczogKHsga2V5LCB2YWx1ZSB9OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkXG4gIH0pID0+IDxBYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbiB7Li4ucHJvcHN9IC8+LFxufVxuXG50eXBlIEFibUFnZW50TW9kYWxQcm9wcyA9IHtcbiAgYWRkQWdlbnQ6IChuZXdBZ2VudDogQWdlbnQsIG9wdGlvbnM/OiB7IG5hdmlnYXRlSG9tZT86IGJvb2xlYW4gfSkgPT4gdm9pZFxuICByZW1vdmVBZ2VudDogKGFnZW50SWQ6IG51bWJlciB8IHN0cmluZykgPT4gdm9pZFxuICB1cGRhdGVBZ2VudDogKHVwZGF0ZWRBZ2VudDogQWdlbnQpID0+IHZvaWRcbiAgdXBkYXRlQWdlbnRGYXZvcml0ZTogKHVwZGF0ZWRBZ2VudDogQWdlbnQsIHNob3VsZFNvcnQ/OiBib29sZWFuKSA9PiB2b2lkXG4gIHNlbGVjdEZpcnN0QWdlbnQ6IChhZ2VudElkOiBzdHJpbmcpID0+IHZvaWRcbn1cblxuY29uc3QgdmFsaWRhdGVGaWVsZFZhbHVlcyA9ICh2YWx1ZVRvVmFsaWRhdGU6IE1vZGFsVmFsdWVzKSA9PiB7XG4gIGlmICghdmFsdWVUb1ZhbGlkYXRlLmdlbmVyYWwubmFtZSB8fCAhdmFsdWVUb1ZhbGlkYXRlLmdlbmVyYWwudXNlclByb21wdCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKiBNaXNtYSBlc3RydWN0dXJhIHF1ZSBlbCBlZmVjdG8gcXVlIGhpZHJhdGEgZGVzZGUgdXNlR2V0QWdlbnRCeUlkICh0b2RhcyBsYXMgcGVzdGHDsWFzIGRlbCBBQk0pLiAqL1xuZnVuY3Rpb24gYnVpbGRFZGl0aW5nTW9kYWxWYWx1ZXNGcm9tQWdlbnREZXRhaWwoXG4gIGFnZW50QnlJZDogYW55LFxuICBhZ2VudE1vZGVsczogQWdlbnRNb2RlbFtdLFxuICBwcmV2OiBNb2RhbFZhbHVlc1xuKTogTW9kYWxWYWx1ZXMge1xuICBjb25zdCBhZ2VudE1vZGVsID0gYWdlbnRNb2RlbHMuZmluZChtb2RlbCA9PiBtb2RlbC5pZCA9PT0gYWdlbnRCeUlkLm1vZGVsQWlJZClcbiAgcmV0dXJuIHtcbiAgICAuLi5wcmV2LFxuICAgIGlzRWRpdGluZzogdHJ1ZSxcbiAgICBnZW5lcmFsOiB7XG4gICAgICBlbW9qaTogYWdlbnRCeUlkLmVtb2ppLFxuICAgICAgbmFtZTogYWdlbnRCeUlkLm5hbWUsXG4gICAgICBpbnRyb2R1Y3Rpb246IGFnZW50QnlJZC5pbnRyb2R1Y3Rpb24sXG4gICAgICBpbnB1dFBsYWNlaG9sZGVyOiBhZ2VudEJ5SWQuaW5wdXRQbGFjZWhvbGRlcixcbiAgICAgIGlzQWN0aXZlOiBhZ2VudEJ5SWQuaXNBY3RpdmUsXG4gICAgICBhaU1vZGVsOiBhZ2VudE1vZGVsIHx8IG51bGwsXG4gICAgICBpZDogYWdlbnRCeUlkLmlkLFxuICAgICAgdXNlclByb21wdDogYWdlbnRCeUlkLnVzZXJQcm9tcHQsXG4gICAgICBrbm93bGVkZ2VCYXNlczogW10sXG4gICAgICBpc19mYXZvcml0ZTogYWdlbnRCeUlkLmlzX2Zhdm9yaXRlLFxuICAgICAgY3JlYXRlZF9ieTogYWdlbnRCeUlkLmNyZWF0ZWRCeSxcbiAgICB9LFxuICAgIGtub3dsZWRnZTpcbiAgICAgIGFnZW50QnlJZC5rbm93bGVkZ2VCYXNlcz8ubWFwKChrOiBhbnkpID0+ICh7XG4gICAgICAgIGZpbGU6IG5ldyBGaWxlKFtdLCBrLmZpbGVuYW1lKSxcbiAgICAgICAgaWQ6IGsuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgbmFtZTogay5maWxlbmFtZSxcbiAgICAgICAgc2l6ZTogay5maWxlX3NpemVfYnl0ZXMgfHwgMCxcbiAgICAgICAgdHlwZTogay5vcmlnaW5hbF9maWxlX3R5cGUsXG4gICAgICAgIHN0YXR1czogay5zdGF0dXMsXG4gICAgICAgIHVybF9vcmlnaW5hbDogay51cmxfb3JpZ2luYWwgfHwgdW5kZWZpbmVkLFxuICAgICAgICB1cmxfdGh1bWJuYWlsOiBrLnVybF90aHVtYm5haWwgfHwgdW5kZWZpbmVkLFxuICAgICAgfSkpIHx8IFtdLFxuICAgIGFjY2Vzc2liaWxpdHk6IHtcbiAgICAgIGFjY2Vzc1R5cGU6IGFnZW50QnlJZC5hY2Nlc3MsXG4gICAgICBjbGllbnRzOlxuICAgICAgICBhZ2VudEJ5SWQuY2xpZW50cz8ubWFwKChjbGllbnQ6IGFueSkgPT4gKHtcbiAgICAgICAgICBpZDogY2xpZW50LmlkPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgIG5hbWU6IGNsaWVudC5uYW1lLFxuICAgICAgICAgIGlzX2FjdGl2ZTogY2xpZW50LmlzX2FjdGl2ZSA/PyBmYWxzZSxcbiAgICAgICAgICBpc19kZWxldGVkOiBjbGllbnQuaXNfZGVsZXRlZCA/PyBmYWxzZSxcbiAgICAgICAgfSkpIHx8IG51bGwsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzZWxlY3RlZFRvb2xHcm91cHM6IGFnZW50QnlJZC50b29sR3JvdXBTbHVncyB8fCBbXSxcbiAgICB9LFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBBYm1BZ2VudE1vZGFsID0gKHtcbiAgYWRkQWdlbnQsXG4gIHVwZGF0ZUFnZW50LFxuICByZW1vdmVBZ2VudCxcbiAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgc2VsZWN0Rmlyc3RBZ2VudCxcbn06IEFibUFnZW50TW9kYWxQcm9wcykgPT4ge1xuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCdhYm1fYWdlbnRfc2VjdGlvbicpXG4gIC8vIGNvbnN0ICRfc2M6IGFueSA9IG51bGxcbiAgY29uc3QgeyBhZ2VudDogY3VycmVudFNlbGVjdGVkQWdlbnQsIHNlbGVjdEFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgeyB0b2dnbGVGYXZvcml0ZSB9ID0gdXNlVG9nZ2xlRmF2b3JpdGUoKVxuICBjb25zdCBzZWxlY3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhYm0tYWdlbnQtbW9kYWwnKVxuICBjb25zdCBbaXNTdWJzY3JpYmVkLCBzZXRJc1N1YnNjcmliZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IG1vZGFsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBoYXNQZW5kaW5nRmlsZXNSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGFjdGlvbnNUb0ZpbGVzID0gdXNlUmVmPGFueT4oe1xuICAgIHRvRGVsZXRlOiBbXSxcbiAgICB0b1VwbG9hZDogW10sXG4gIH0pXG4gIGNvbnN0IGFjY2Vzc1VwZGF0ZUNvbnRleHQgPSB1c2VSZWY8e1xuICAgIGlzRnJvbUNyZWF0aW9uOiBib29sZWFuXG4gICAgaXNGcm9tRWRpdGluZzogYm9vbGVhblxuICAgIGhhc0FjdGlvbkZpbGVzOiBib29sZWFuXG4gICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScgfCAndXBkYXRlJyB8IG51bGxcbiAgICBoYXNCZWVuQ2FsbGVkPzogYm9vbGVhblxuICB9Pih7XG4gICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICB9KVxuICBjb25zdCBhY2Nlc3NIYW5kbGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBhZ2VudENyZWF0ZWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmID0gdXNlUmVmPEFibVNlY3Rpb24gfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nVHJpZ2dlclJlZiA9IHVzZVJlZjxQZW5kaW5nVHJpZ2dlclBheWxvYWQgfCBudWxsPihudWxsKVxuICBjb25zdCBwcmVmZXRjaGVkQWdlbnRCeUlkUmVmID0gdXNlUmVmPGFueT4obnVsbClcbiAgY29uc3QgZmlsZXNGaW5pc2hlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgLy8gTWFyY2EgY3VhbmRvIGNlcnJhbW9zIGVsIGxvYWRlciBwb3IgZWwgdGltZW91dCBkZSBzZWd1cmlkYWQgZGUgYXJjaGl2b3MuXG4gIC8vIE1pZW50cmFzIGVzdMOpIGFjdGl2bywgbG9zIHVzZUVmZmVjdCBkZSBwb3N0LWd1YXJkYWRvIE5PIGRlYmVuIGRpc3BhcmFyXG4gIC8vIHNuYWNrYmFycyBkZSDDqXhpdG8gbmkgYXV0by1jZXJyYXIgZWwgbW9kYWwuXG4gIGNvbnN0IHByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbZmlsZXNQcm9jZXNzZWQsIHNldEZpbGVzUHJvY2Vzc2VkXSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dNb2RhbERlbGV0ZSwgc2V0U2hvd01vZGFsRGVsZXRlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VjdGlvbiwgc2V0U2VjdGlvbl0gPSB1c2VTdGF0ZTxBYm1TZWN0aW9uPignZ2VuZXJhbCcpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGFsVmFsdWVzLCBzZXRNb2RhbFZhbHVlc10gPSB1c2VTdGF0ZTx7XG4gICAgZ2VuZXJhbDogYW55XG4gICAga25vd2xlZGdlOiBhbnlcbiAgICBpc0VkaXRpbmc6IGJvb2xlYW5cbiAgICBhY2Nlc3NpYmlsaXR5OiBhbnlcbiAgICBhY3Rpb25zOiBhbnlcbiAgfT4oaW5pdGlhbFZhbHVlcylcbiAgY29uc3Qge1xuICAgIGxvYWRpbmc6IGFnZW50TG9hZGluZyxcbiAgICBoYW5kbGVHZXRBZ2VudEJ5SWQsXG4gICAgYWdlbnQ6IGFnZW50QnlJZCxcbiAgICBoYW5kbGVDbGVhbkFnZW50LFxuICAgIGVycm9yOiBlcnJvckdldEFnZW50QnlJZCxcbiAgfSA9IHVzZUdldEFnZW50QnlJZCgpXG4gIGNvbnN0IHsgYWdlbnRNb2RlbHMsIGdldEFsbEFnZW50TW9kZWxzIH0gPSB1c2VBZ2VudE1vZGVsKClcbiAgY29uc3QgZmlyc3RWYWx1ZUFnZW50ID0gdXNlUmVmPGFueT4obnVsbClcbiAgY29uc3QgW2lzU2hvd1Byb2Nlc3NGaWxlcywgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaGFzRmlsZUVycm9ycywgc2V0SGFzRmlsZUVycm9yc10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG5cbiAgY29uc3QgeyBoYW5kbGVEZWxldGVBZ2VudCwgc3VjY2Vzczogc3VjY2Vzc0RlbGV0ZSwgcmVzZXRTdWNjZXNzIH0gPSB1c2VEZWxldGVBZ2VudCgpXG4gIGNvbnN0IHsgaGFuZGxlVXBkYXRlQWdlbnQsIHN1Y2Nlc3M6IHN1Y2Nlc3NVcGRhdGUsIHJlc2V0U3VjY2VzczogcmVzZXRTdWNjZXNzVXBkYXRlIH0gPSB1c2VVcGRhdGVBZ2VudCgpXG5cbiAgY29uc3Qge1xuICAgIGhhbmRsZUNyZWF0ZUFnZW50LFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nQ3JlYXRlLFxuICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NDcmVhdGUsXG4gICAgcmVzZXRTdWNjZXNzOiByZXNldFN1Y2Nlc3NDcmVhdGUsXG4gIH0gPSB1c2VDcmVhdGVBZ2VudCgpXG5cbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhclN1Y2Nlc3MsIGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG5cbiAgY29uc3Qge1xuICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVBbmRDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nS25vd2xlZGdlLFxuICAgIGVycm9yOiBlcnJvcktub3dsZWRnZSxcbiAgICBzdWNjZXNzRGVsZXRlOiBzdWNjZXNzS25vd2xlZGdlRGVsZXRlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICB9ID0gdXNlS25vd2xlZGdlT3BlcmF0aW9ucygpXG5cbiAgY29uc3Qge1xuICAgIGhhbmRsZUFjY2Vzc0NsaWVudCxcbiAgICBzdWNjZXNzOiBzdWNjZXNzVXBkYXRlQWNjZXNzLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nVXBkYXRlQWNjZXNzLFxuICAgIGhhbmRsZVJlc2V0U3VjY2VzczogcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzLFxuICB9ID0gdXNlQWNjZXNzQ2xpZW50KClcblxuICBpZiAoIXNlbGVjdG9yKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGFyZUNsaWVudHNBcnJheXNFcXVhbCA9IChjbGllbnRzMTogYW55W10gfCBudWxsLCBjbGllbnRzMjogYW55W10gfCBudWxsKSA9PiB7XG4gICAgaWYgKCFjbGllbnRzMSAmJiAhY2xpZW50czIpIHJldHVybiB0cnVlXG4gICAgaWYgKCFjbGllbnRzMSB8fCAhY2xpZW50czIpIHJldHVybiBmYWxzZVxuICAgIGlmIChjbGllbnRzMS5sZW5ndGggIT09IGNsaWVudHMyLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBjbGllbnRzMUlkcyA9IGNsaWVudHMxLm1hcChjID0+IGMuY2xpZW50SWQpLnNvcnQoKVxuICAgIGNvbnN0IGNsaWVudHMySWRzID0gY2xpZW50czIubWFwKGMgPT4gYy5jbGllbnRJZCkuc29ydCgpXG5cbiAgICByZXR1cm4gY2xpZW50czFJZHMuZXZlcnkoKGlkLCBpbmRleCkgPT4gaWQgPT09IGNsaWVudHMySWRzW2luZGV4XSlcbiAgfVxuXG4gIGNvbnN0IGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkID0gKCkgPT4ge1xuICAgIGlmICghZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/LmFjY2Vzc2liaWxpdHkgfHwgIW1vZGFsVmFsdWVzPy5hY2Nlc3NpYmlsaXR5KSByZXR1cm4gdHJ1ZVxuXG4gICAgY29uc3QgYWNjZXNzVHlwZVNhbWUgPSBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZVxuICAgIGNvbnN0IGNsaWVudHNTYW1lID0gYXJlQ2xpZW50c0FycmF5c0VxdWFsKFxuICAgICAgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5jbGllbnRzLFxuICAgICAgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuYWNjZXNzaWJpbGl0eS5jbGllbnRzXG4gICAgKVxuXG4gICAgcmV0dXJuICFhY2Nlc3NUeXBlU2FtZSB8fCAhY2xpZW50c1NhbWVcbiAgfVxuXG4gIGNvbnN0IGhhc0FjdGlvbnNDaGFuZ2VkID0gKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRBY3Rpb25zID0gWy4uLihtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZFRvb2xHcm91cHMgfHwgW10pXS5zb3J0KClcbiAgICBjb25zdCBvcmlnaW5hbEFjdGlvbnMgPSBbLi4uKGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50Py5hY3Rpb25zPy5zZWxlY3RlZFRvb2xHcm91cHMgfHwgW10pXS5zb3J0KClcblxuICAgIGlmIChjdXJyZW50QWN0aW9ucy5sZW5ndGggIT09IG9yaWdpbmFsQWN0aW9ucy5sZW5ndGgpIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gY3VycmVudEFjdGlvbnMuc29tZSgoc2x1ZywgaW5kZXgpID0+IHNsdWcgIT09IG9yaWdpbmFsQWN0aW9uc1tpbmRleF0pXG4gIH1cblxuICBjb25zdCB2YWxpZGF0ZUFnZW50VmFsdWVzSXNTYW1lID0gKCkgPT4ge1xuICAgIGlmICghZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/LmdlbmVyYWwgfHwgIW1vZGFsVmFsdWVzPy5nZW5lcmFsKSByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiAoXG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLm5hbWUgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwubmFtZSAmJlxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5lbW9qaSA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC5lbW9qaSAmJlxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pbnRyb2R1Y3Rpb24gPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwuaW50cm9kdWN0aW9uICYmXG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlciAmJlxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5haU1vZGVsPy5pZCA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC5haU1vZGVsPy5pZCAmJlxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC51c2VyUHJvbXB0ID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLnVzZXJQcm9tcHQgJiZcbiAgICAgICFoYXNBY3Rpb25zQ2hhbmdlZCgpICYmXG4gICAgICAobW9kYWxWYWx1ZXMua25vd2xlZGdlPy5sZW5ndGggPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50Py5rbm93bGVkZ2U/Lmxlbmd0aCB8fFxuICAgICAgICAoIW1vZGFsVmFsdWVzLmtub3dsZWRnZT8ubGVuZ3RoICYmICFmaXJzdFZhbHVlQWdlbnQuY3VycmVudD8ua25vd2xlZGdlPy5sZW5ndGgpKSAmJlxuICAgICAgIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGRhdGU/Lmxlbmd0aCAmJlxuICAgICAgIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGU/Lmxlbmd0aCAmJlxuICAgICAgIWhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKClcbiAgICApXG4gIH1cblxuICBjb25zdCBoYXNBbnlWYWx1ZUZvckNyZWF0aW9uID0gKCkgPT4ge1xuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3QgaXNEZWZhdWx0QWlNb2RlbCA9ICEhYWdlbnRNb2RlbHMubGVuZ3RoICYmIG1vZGFsVmFsdWVzLmdlbmVyYWwuYWlNb2RlbD8uaWQgPT09IGFnZW50TW9kZWxzWzBdPy5pZFxuXG4gICAgY29uc3QgZGVmYXVsdElucHV0UGxhY2Vob2xkZXIgPSB0KCdnZW5lcmFsU2VjdGlvbi5pbnB1dFBsYWNlaG9sZGVyJylcbiAgICBjb25zdCBpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyID09PSBkZWZhdWx0SW5wdXRQbGFjZWhvbGRlclxuXG4gICAgY29uc3QgZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciA9IHQoJ2dlbmVyYWxTZWN0aW9uLmluaXRpYWxQcm9tcHRQbGFjZWhvbGRlcicpXG4gICAgY29uc3QgaXNEZWZhdWx0VXNlclByb21wdCA9XG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09IGRlZmF1bHRVc2VyUHJvbXB0UGxhY2Vob2xkZXIgfHxcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gJycgfHxcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gbnVsbFxuXG4gICAgY29uc3QgaGFzTmFtZSA9IG1vZGFsVmFsdWVzLmdlbmVyYWwubmFtZS50cmltKCkgIT09ICcnXG4gICAgY29uc3QgaGFzRW1vamkgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmVtb2ppLnRyaW0oKSAhPT0gJydcbiAgICBjb25zdCBoYXNJbnRyb2R1Y3Rpb24gPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmludHJvZHVjdGlvbi50cmltKCkgIT09ICcnXG4gICAgY29uc3QgaGFzSW5wdXRQbGFjZWhvbGRlciA9IG1vZGFsVmFsdWVzLmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlci50cmltKCkgIT09ICcnICYmICFpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyXG4gICAgY29uc3QgaGFzVXNlclByb21wdCA9IG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdD8udHJpbSgpICE9PSAnJyAmJiAhaXNEZWZhdWx0VXNlclByb21wdFxuICAgIGNvbnN0IGhhc0tub3dsZWRnZSA9ICEhbW9kYWxWYWx1ZXMua25vd2xlZGdlLmxlbmd0aFxuICAgIGNvbnN0IGhhc0N1c3RvbUFpTW9kZWwgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmFpTW9kZWwgJiYgIWlzRGVmYXVsdEFpTW9kZWxcbiAgICBjb25zdCBoYXNBY2Nlc3NpYmlsaXR5ID0gbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlICE9PSAnY29tcGFueSdcbiAgICBjb25zdCBoYXNBY3Rpb25zID0gISFtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZFRvb2xHcm91cHM/Lmxlbmd0aFxuXG4gICAgcmV0dXJuIChcbiAgICAgIGhhc05hbWUgfHxcbiAgICAgIGhhc0Vtb2ppIHx8XG4gICAgICBoYXNJbnRyb2R1Y3Rpb24gfHxcbiAgICAgIGhhc0lucHV0UGxhY2Vob2xkZXIgfHxcbiAgICAgIGhhc1VzZXJQcm9tcHQgfHxcbiAgICAgIGhhc0tub3dsZWRnZSB8fFxuICAgICAgaGFzQ3VzdG9tQWlNb2RlbCB8fFxuICAgICAgaGFzQWNjZXNzaWJpbGl0eSB8fFxuICAgICAgaGFzQWN0aW9uc1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhc0NoYW5nZXNGb3JFZGl0aW5nID0gKCkgPT4ge1xuICAgIGlmICghbW9kYWxWYWx1ZXMuaXNFZGl0aW5nKSByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiAoXG4gICAgICAhdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSgpIHx8XG4gICAgICAhIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUubGVuZ3RoIHx8XG4gICAgICAhIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFzUGVuZGluZ0NoYW5nZXMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGhhc0FueVZhbHVlRm9yQ3JlYXRpb24oKSB8fCBoYXNDaGFuZ2VzRm9yRWRpdGluZygpXG4gIH1cblxuICAvLyBIZWxwZXIgcGFyYSBtYW5lamFyIGVsIHRvZ2dsZSBkZSBmYXZvcml0byB5IGFjdHVhbGl6YXIgZWwgZXN0YWRvIGNvbiBvcmRlbmFtaWVudG9cbiAgY29uc3QgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudCA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudElkOiBzdHJpbmcsIGFnZW50OiBBZ2VudCwgb25TdWNjZXNzPzogKHVwZGF0ZWRBZ2VudDogQWdlbnQpID0+IHZvaWQsIG9uRXJyb3I/OiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICB0b2dnbGVGYXZvcml0ZShcbiAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgdXBkYXRlZEFnZW50ID0+IHtcbiAgICAgICAgICAvLyBBY3R1YWxpemFyIGVsIGVzdGFkbyBkZSBhZ2VudGVzIGNvbiBlbCByZXN1bHRhZG8gZGVsIHNlcnZpZG9yIHkgb3JkZW5hclxuICAgICAgICAgIHVwZGF0ZUFnZW50RmF2b3JpdGUodXBkYXRlZEFnZW50LCB0cnVlKVxuICAgICAgICAgIGlmIChvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIG9uU3VjY2Vzcyh1cGRhdGVkQWdlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgICAgIG9uRXJyb3IoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYWdlbnQuaXNfZmF2b3JpdGVcbiAgICAgIClcbiAgICB9LFxuICAgIFt0b2dnbGVGYXZvcml0ZSwgdXBkYXRlQWdlbnRGYXZvcml0ZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKHNraXBDb25maXJtYXRpb24gPSBmYWxzZSkgPT4ge1xuICAgIGlmICghc2tpcENvbmZpcm1hdGlvbiAmJiBoYXNQZW5kaW5nQ2hhbmdlcygpICYmICFzdWNjZXNzQ3JlYXRlICYmICFzdWNjZXNzVXBkYXRlICYmICFzdWNjZXNzRGVsZXRlKSB7XG4gICAgICBjb25zdCBjb25maXJtTWVzc2FnZSA9IG1vZGFsVmFsdWVzLmlzRWRpdGluZyA/IHQoJ2NvbmZpcm1DbG9zZUVkaXRBZ2VudCcpIDogdCgnY29uZmlybUNsb3NlQ3JlYXRlQWdlbnQnKVxuXG4gICAgICBpZiAoIXdpbmRvdy5jb25maXJtKGNvbmZpcm1NZXNzYWdlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRNb2RhbFZhbHVlcyhpbml0aWFsVmFsdWVzKVxuICAgIGhhbmRsZUNsZWFuQWdlbnQoKVxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUoKVxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50ID0ge1xuICAgICAgdG9EZWxldGU6IFtdLFxuICAgICAgdG9VcGxvYWQ6IFtdLFxuICAgIH1cbiAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICB9XG4gICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKGZhbHNlKVxuICAgIHNldElzU3Vic2NyaWJlZChmYWxzZSlcbiAgICBzZXRGaWxlc1Byb2Nlc3NlZCgwKVxuICAgIHNldFNlY3Rpb24oJ2dlbmVyYWwnKVxuICAgIHNldElzT3BlbihmYWxzZSlcbiAgICBhZ2VudENyZWF0ZWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICBwZW5kaW5nVHJpZ2dlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmICFpc1Nob3dQcm9jZXNzRmlsZXMpIHtcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVTZWN0aW9uQ2hhbmdlID0gKG5ld1NlY3Rpb246IEFibVNlY3Rpb24pID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMudGFiU2VjdGlvbiwgeyBvcHRpb246IG5ld1NlY3Rpb24gfSlcbiAgICBzZXRTZWN0aW9uKG5ld1NlY3Rpb24pXG4gIH1cblxuICBjb25zdCBoYW5kbGVTZXRBZ2VudFZhbHVlc0J5S2V5cyA9ICh7XG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgIGRlbGV0ZUtub3dsZWRnZSxcbiAgfToge1xuICAgIGtleTogc3RyaW5nXG4gICAgdmFsdWU6IHVua25vd25cbiAgICBkZWxldGVLbm93bGVkZ2U/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICBpZiAoa2V5ID09PSAna25vd2xlZGdlJykge1xuICAgICAgY29uc3QgbmV4dEtub3dsZWRnZSA9ICh2YWx1ZSBhcyBBdHRhY2htZW50RmlsZVtdIHwgdW5kZWZpbmVkKSB8fCBbXVxuICAgICAgaWYgKCFkZWxldGVLbm93bGVkZ2UpIHtcbiAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5wdXNoKC4uLm5leHRLbm93bGVkZ2UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmaWxlc1ByZXZJZHMgPSBuZXh0S25vd2xlZGdlLmxlbmd0aCA/IG5ldyBTZXQobmV4dEtub3dsZWRnZS5tYXAoZmlsZSA9PiBmaWxlLmlkKSkgOiBuZXcgU2V0KClcbiAgICAgICAgY29uc3QgbmV3RmlsZXMgPSBtb2RhbFZhbHVlcy5rbm93bGVkZ2UuZmlsdGVyKGZpbGUgPT4gIWZpbGVzUHJldklkcy5oYXMoZmlsZS5pZCkgJiYgZmlsZS5zdGF0dXMgIT09ICdzdGFydGVkJylcbiAgICAgICAgaWYgKCFuZXdGaWxlcy5sZW5ndGggJiYgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZUlkcyA9IG5ldyBTZXQobmV4dEtub3dsZWRnZS5tYXAoZmlsZSA9PiBmaWxlLmlkKSlcbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5maWx0ZXIoZmlsZSA9PiB2YWx1ZUlkcy5oYXMoZmlsZS5pZCkpXG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSA9IFsuLi4oYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSB8fCBbXSksIC4uLm5ld0ZpbGVzXVxuICAgICAgfVxuICAgIH1cbiAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IGtub3dsZWRnZUZpbGVzID1cbiAgICAgICAga2V5ID09PSAna25vd2xlZGdlJ1xuICAgICAgICAgID8gZGVsZXRlS25vd2xlZGdlXG4gICAgICAgICAgICA/ICh2YWx1ZSBhcyBBdHRhY2htZW50RmlsZVtdKVxuICAgICAgICAgICAgOiBbLi4uKHByZXYua25vd2xlZGdlIHx8IFtdKSwgLi4uKCh2YWx1ZSBhcyBBdHRhY2htZW50RmlsZVtdKSB8fCBbXSldXG4gICAgICAgICAgOiBudWxsXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICAuLi4oa2V5ID09PSAna25vd2xlZGdlJ1xuICAgICAgICAgID8geyBrbm93bGVkZ2U6IGtub3dsZWRnZUZpbGVzIH1cbiAgICAgICAgICA6IGtleSA9PT0gJ2FjY2Vzc2liaWxpdHknXG4gICAgICAgICAgICA/IHsgYWNjZXNzaWJpbGl0eTogdmFsdWUgfVxuICAgICAgICAgICAgOiBrZXkgPT09ICdhY3Rpb25zJ1xuICAgICAgICAgICAgICA/IHsgYWN0aW9uczogdmFsdWUgfVxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgICAgICAgICAgICBba2V5XTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVDb25maXJtQWN0aW9uID0gYXN5bmMgKGNoYXQ6IGFueSwgYWN0aW9uOiAnZGVsZXRlJyB8ICd1cGRhdGUnIHwgJ2NyZWF0ZScpID0+IHtcbiAgICAvLyBTb2xvIHBlcm1pdGlyIG9wZXJhY2lvbmVzIGRlIGFnZW50ZXMgY3VzdG9tIHNpIGxhIGZlYXR1cmUgZmxhZyBlc3TDoSBoYWJpbGl0YWRhXG4gICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5kZWxldGUpXG4gICAgICBoYW5kbGVEZWxldGVBZ2VudChjaGF0LmlkIGFzIHVua25vd24gYXMgc3RyaW5nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5jb25maXJtQWN0aW9uLCB7IG9wdGlvbjogbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gJ2VkaXRlJyA6ICdjcmVhdGUnIH0pXG4gICAgLy8gQWwgcmVpbnRlbnRhciBndWFyZGFyLCBsaWJlcmFyIGVsIGZyZW5vIGRlbCB0aW1lb3V0IHByZXZpbyBwYXJhIHF1ZSBsb3NcbiAgICAvLyB1c2VFZmZlY3QgZGUgcG9zdC1ndWFyZGFkbyB2dWVsdmFuIGEgcG9kZXIgZGlzcGFyYXIgc25hY2tiYXJzIHkgY2VycmFyLlxuICAgIHByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHtcbiAgICAgIGlmICghdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSgpKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZVVwZGF0ZUFnZW50KG1vZGFsVmFsdWVzKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBoYW5kbGVDcmVhdGVBZ2VudChtb2RhbFZhbHVlcylcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNldEFnZW50VmFsdWVzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnRWYWx1ZXMgfSA9IGV2ZW50LmRldGFpbFxuICAgICAgY29uc3QgaW5pdGlhbFNlY3Rpb24gPSBhZ2VudFZhbHVlcz8uaW5pdGlhbFNlY3Rpb24gYXMgQWJtU2VjdGlvbiB8IHVuZGVmaW5lZFxuICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPVxuICAgICAgICBpbml0aWFsU2VjdGlvbiAmJiBbJ2dlbmVyYWwnLCAna25vd2xlZGdlJywgJ2FjY2Vzc2liaWxpdHknXS5pbmNsdWRlcyhpbml0aWFsU2VjdGlvbilcbiAgICAgICAgICA/IGluaXRpYWxTZWN0aW9uXG4gICAgICAgICAgOiBudWxsXG5cbiAgICAgIGdldEFsbEFnZW50TW9kZWxzKClcbiAgICAgIHNldElzT3Blbih0cnVlKVxuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpXG5cbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGFnZW50VmFsdWVzLnZhbHVlcz8uaXNFZGl0aW5nKSB7XG4gICAgICAgIC8vIFZhbGlkYXIgcXVlIGxhIGZlYXR1cmUgZmxhZyBlc3TDqSBoYWJpbGl0YWRhIGFudGVzIGRlIGNhcmdhciBlbCBhZ2VudGUgcGFyYSBlZGl0YXJcbiAgICAgICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnZXJyb3JBY2Nlc3NEZW5pZWQnKSlcbiAgICAgICAgICBzZXRJc09wZW4oZmFsc2UpXG4gICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgIHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIHByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWdlbnRWYWx1ZXMucHJlZmV0Y2hlZEFnZW50QnlJZCkge1xuICAgICAgICAgIGhhbmRsZUNsZWFuQWdlbnQoKVxuICAgICAgICAgIHByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCA9IGFnZW50VmFsdWVzLnByZWZldGNoZWRBZ2VudEJ5SWRcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVHZXRBZ2VudEJ5SWQoYWdlbnRWYWx1ZXM/LnZhbHVlcz8uZ2VuZXJhbD8uaWQgYXMgdW5rbm93biBhcyBzdHJpbmcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoYWdlbnRWYWx1ZXMudmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZXMgPSB7XG4gICAgICAgICAgLi4uaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgICAuLi5hZ2VudFZhbHVlcy52YWx1ZXMsXG4gICAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgICAgLi4uaW5pdGlhbFZhbHVlcy5nZW5lcmFsLFxuICAgICAgICAgICAgLi4uKGFnZW50VmFsdWVzLnZhbHVlcy5nZW5lcmFsIHx8IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFjY2Vzc2liaWxpdHk6IHtcbiAgICAgICAgICAgIC4uLmluaXRpYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSxcbiAgICAgICAgICAgIC4uLihhZ2VudFZhbHVlcy52YWx1ZXMuYWNjZXNzaWJpbGl0eSB8fCB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhY3Rpb25zOiB7XG4gICAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLmFjdGlvbnMsXG4gICAgICAgICAgICAuLi4oYWdlbnRWYWx1ZXMudmFsdWVzLmFjdGlvbnMgfHwge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAga25vd2xlZGdlOiBhZ2VudFZhbHVlcy52YWx1ZXMua25vd2xlZGdlIHx8IFtdLFxuICAgICAgICB9XG5cbiAgICAgICAgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQgPSBuZXh0VmFsdWVzXG4gICAgICAgIHNldE1vZGFsVmFsdWVzKG5leHRWYWx1ZXMpXG4gICAgICB9XG5cbiAgICAgIGlmIChwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCAmJiAhYWdlbnRWYWx1ZXMudmFsdWVzPy5pc0VkaXRpbmcpIHtcbiAgICAgICAgc2V0U2VjdGlvbihwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudClcbiAgICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYWJtLWFnZW50LW1vZGFsLXNldC12YWx1ZXMnLCBoYW5kbGVTZXRBZ2VudFZhbHVlcylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJtLWFnZW50LW1vZGFsLXNldC12YWx1ZXMnLCBoYW5kbGVTZXRBZ2VudFZhbHVlcyBhcyBFdmVudExpc3RlbmVyKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gdXNlRWZmZWN0IHRvIGhhbmRsZSB0aGUgb3ZlcmZsb3cgb2YgdGhlIGJvZHkgd2hlbiB0aGUgbW9kYWwgaXMgb3BlblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgIGlmICghYm9keSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsT3ZlcmZsb3cgPSBib2R5LnN0eWxlLm92ZXJmbG93XG4gICAgYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYm9keS5zdHlsZS5vdmVyZmxvdyA9IG9yaWdpbmFsT3ZlcmZsb3dcbiAgICB9XG4gIH0sIFtpc09wZW5dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlQmVmb3JlVW5sb2FkID0gKGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCkgPT4ge1xuICAgICAgaWYgKGhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSB0KCdjb25maXJtUmVsb2FkQnJvd3NlcicpXG4gICAgICAgIHJldHVybiB0KCdjb25maXJtUmVsb2FkQnJvd3NlcicpXG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGhhbmRsZUJlZm9yZVVubG9hZClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGhhbmRsZUJlZm9yZVVubG9hZClcbiAgICB9XG4gIH0sIFtpc09wZW4sIGhhc1BlbmRpbmdDaGFuZ2VzLCB0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzRGVsZXRlKSB7XG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50RGVsZXRlZCcpKVxuICAgICAgcmVzZXRTdWNjZXNzKClcbiAgICAgIGlmIChjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQgPT09IG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpIHtcbiAgICAgICAgc2VsZWN0Rmlyc3RBZ2VudChjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQgYXMgc3RyaW5nKVxuICAgICAgfVxuICAgICAgcmVtb3ZlQWdlbnQobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZClcbiAgICAgIHNldFNob3dNb2RhbERlbGV0ZShmYWxzZSlcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG4gIH0sIFtzdWNjZXNzRGVsZXRlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIEV2aXRhciBlamVjdWNpw7NuIG3Dumx0aXBsZSBkZWwgZWZlY3RvXG4gICAgaWYgKHN1Y2Nlc3NDcmVhdGUgJiYgIWlzTG9hZGluZ0NyZWF0ZSAmJiBhZ2VudENyZWF0ZWRSZWYuY3VycmVudCAhPT0gc3VjY2Vzc0NyZWF0ZS5pZCkge1xuICAgICAgYWdlbnRDcmVhdGVkUmVmLmN1cnJlbnQgPSBzdWNjZXNzQ3JlYXRlLmlkXG4gICAgICBpZiAocGVuZGluZ1RyaWdnZXJSZWYuY3VycmVudCkge1xuICAgICAgICBjcmVhdGVTY2hlZHVsZSh7IC4uLnBlbmRpbmdUcmlnZ2VyUmVmLmN1cnJlbnQsIGFnZW50X2V4dGVybmFsX2lkOiBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCkgfSkuY2F0Y2goZXJyID0+XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY3JlYXRpbmcgcGVuZGluZyB0cmlnZ2VyOicsIGVycilcbiAgICAgICAgKVxuICAgICAgICBwZW5kaW5nVHJpZ2dlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUubGVuZ3RoICYmIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBhY2Nlc2liaWxpZGFkIHBlcm8gaGF5IGFyY2hpdm9zLCBlc3RhYmxlY2VyIGVsIGNvbnRleHRvIHBhcmEgY3JlYWNpw7NuXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICBmaWxlc1RvRGVsZXRlOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLFxuICAgICAgICAgICAgZmlsZXNUb0NyZWF0ZTogYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZCxcbiAgICAgICAgICAgIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuXG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVybyBoYXkgYXJjaGl2b3MsIGVzdGFibGVjZXIgZWwgY29udGV4dG8gcGFyYSBjcmVhY2nDs25cbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtcbiAgICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBhY2Nlc2liaWxpZGFkIHBlcm8gaGF5IGFyY2hpdm9zLCBlc3RhYmxlY2VyIGVsIGNvbnRleHRvIHBhcmEgY3JlYWNpw7NuXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyh7IGZpbGVzOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLCBhZ2VudElkOiBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCkgfSksXG4gICAgICAgIF1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlICE9PSAnY29tcGFueScpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKGhhbmRsZUFjY2Vzc0NsaWVudChzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaXNfZmF2b3JpdGUpIHtcbiAgICAgICAgICBjb25zdCBhZ2VudFdpdGhGYXZvcml0ZSA9IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfVxuICAgICAgICAgIGFkZEFnZW50KGFnZW50V2l0aEZhdm9yaXRlKVxuICAgICAgICAgIC8vIEN1YW5kbyBzZSBjcmVhIHVuIGFnZW50ZSBudWV2bywgZWwgc2Vydmlkb3Igbm8gdGllbmUgZWwgZmF2b3JpdG8gbWFyY2FkbyBhw7puXG4gICAgICAgICAgLy8gRW50b25jZXMgY3VycmVudElzRmF2b3JpdGUgZGViZSBzZXIgZmFsc2UgcGFyYSBxdWUgZWwgdG9nZ2xlIGxvIG1hcnF1ZSBjb21vIHRydWVcbiAgICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiBmYWxzZSB9XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudChcbiAgICAgICAgICAgICAgICBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgYWdlbnRGb3JUb2dnbGUsXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVzb2x2ZSgpLFxuICAgICAgICAgICAgICAgICgpID0+IHJlamVjdCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZEFnZW50KHN1Y2Nlc3NDcmVhdGUpXG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyh0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAvLyBTb2xvIHJlc2V0ZWFyIGVsIGNvbnRleHRvIHNpIE5PIHNlIGhhIGxsYW1hZG8gdG9kYXbDrWFcbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgIGNvbnN0IHsgaGFzQWN0aW9uRmlsZXMgfSA9IGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudFxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogaGFzQWN0aW9uRmlsZXMgfHwgZmFsc2UsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0JlZW5DYWxsZWQpIHtcbiAgICAgICAgICBoYW5kbGVBY2Nlc3NDbGllbnQoc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KVxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBoYW5kbGVBY2Nlc3NDbGllbnQsIGVsIGFnZW50ZSBzZSBhZ3JlZ2Fyw6EgeSBlbCB0b2dnbGUgc2UgaGFyw6EgZW4gc3VjY2Vzc1VwZGF0ZUFjY2Vzc1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGZhdm9yaXRlIGlmIGl0IHdhcyBtYXJrZWQgZHVyaW5nIGNyZWF0aW9uXG4gICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAvLyBQcmltZXJvIGFncmVnYXIgZWwgYWdlbnRlIGEgbGEgbGlzdGEgKGFkZEFnZW50IHlhIG9yZGVuYSlcbiAgICAgICAgY29uc3QgYWdlbnRXaXRoRmF2b3JpdGUgPSB7IC4uLnN1Y2Nlc3NDcmVhdGUsIGlzX2Zhdm9yaXRlOiB0cnVlIH1cbiAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG5cbiAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgLy8gRW50b25jZXMgY3VycmVudElzRmF2b3JpdGUgZGViZSBzZXIgZmFsc2UgcGFyYSBxdWUgZWwgdG9nZ2xlIGxvIG1hcnF1ZSBjb21vIHRydWVcbiAgICAgICAgY29uc3QgYWdlbnRGb3JUb2dnbGUgPSB7IC4uLmFnZW50V2l0aEZhdm9yaXRlLCBpc19mYXZvcml0ZTogZmFsc2UgfVxuICAgICAgICAvLyBMdWVnbyBoYWNlciBlbCB0b2dnbGUgZGUgZmF2b3JpdG8gZW4gZWwgc2Vydmlkb3IgeSBhY3R1YWxpemFyIGVsIGVzdGFkb1xuICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICB1cGRhdGVkQWdlbnQgPT4ge1xuICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7IG9wdGlvbjogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlID8gJ2FkZCcgOiAncmVtb3ZlJyB9KVxuICAgICAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgICAgIHNlbGVjdEFnZW50KHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiB1cGRhdGVkQWdlbnQuaXNfZmF2b3JpdGUgfSlcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7IG9wdGlvbjogJ2FkZCcgfSlcbiAgICAgICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFdpdGhGYXZvcml0ZSlcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGlzTG9hZGluZ0NyZWF0ZSxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2VzcyxcbiAgICB0LFxuICAgIGFkZEFnZW50LFxuICAgIHNlbGVjdEFnZW50LFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgICByZXNldFN1Y2Nlc3NDcmVhdGUsXG4gICAgaGFuZGxlQ2xvc2UsXG4gICAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzVXBkYXRlKSB7XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGggJiYgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlXVxuICAgICAgICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBbLi4uYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZF1cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlID0gW11cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gW11cblxuICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMoe1xuICAgICAgICAgICAgICBmaWxlc1RvRGVsZXRlLFxuICAgICAgICAgICAgICBmaWxlc1RvQ3JlYXRlOiBmaWxlc1RvVXBsb2FkLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlXVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUgPSBbXVxuXG4gICAgICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICAgIGZpbGVzOiBmaWxlc1RvRGVsZXRlLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ3VwZGF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCkge1xuICAgICAgICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBbLi4uYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZF1cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gW11cblxuICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMoe1xuICAgICAgICAgICAgICBmaWxlczogZmlsZXNUb1VwbG9hZCxcbiAgICAgICAgICAgICAgYWdlbnRJZDogbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi4oaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKVxuICAgICAgICAgICAgICA/IFtoYW5kbGVBY2Nlc3NDbGllbnQobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KV1cbiAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgXSlcbiAgICAgICAgfVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgLy8gU29sbyByZXNldGVhciBlbCBjb250ZXh0byBzaSBOTyBzZSBoYSBsbGFtYWRvIHRvZGF2w61hIHkgTk8gaGF5IGFyY2hpdm9zIHBlbmRpZW50ZXNcbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCAmJiAhYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICd1cGRhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpIHtcbiAgICAgICAgICAvLyBMbGFtYXIgYSBoYW5kbGVBY2Nlc3NDbGllbnQgc29sbyB1bmEgdmV6XG4gICAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgICAgaGFuZGxlQWNjZXNzQ2xpZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSlcbiAgICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gU29sbyBjZXJyYXIgc2kgbm8gaGF5IGFyY2hpdm9zIHNpZW5kbyBwcm9jZXNhZG9zIG5pIGFjY2VzcyBwZW5kaWVudGVcbiAgICAgIGlmIChcbiAgICAgICAgIWhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ICYmXG4gICAgICAgICFpc1Nob3dQcm9jZXNzRmlsZXMgJiZcbiAgICAgICAgIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoICYmXG4gICAgICAgICFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQWN0aW9uRmlsZXMgJiZcbiAgICAgICAgIXN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiZcbiAgICAgICAgIXByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnRcbiAgICAgICkge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50VXBkYXRlZCcpKVxuICAgICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgICBpZiAoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkID09PSBzdWNjZXNzVXBkYXRlLmlkKSB7XG4gICAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJykpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBzdWNjZXNzVXBkYXRlLFxuICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQsXG4gICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgdXBkYXRlQWdlbnQsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZSxcbiAgICBoYW5kbGVDbG9zZSxcbiAgXSlcblxuICBjb25zdCBoYW5kbGVQcm9jZXNzRmlsZXNUaW1lb3V0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiYgIWlzU2hvd1Byb2Nlc3NGaWxlcykgcmV0dXJuXG5cbiAgICAvLyBBbCBjdW1wbGlyc2UgZWwgdGltZW91dCBhc3VtaW1vcyBxdWUgZWwgZ3VhcmRhZG8gZGVsIGFnZW50ZSBmdWUgZXhpdG9zb1xuICAgIC8vIChlbCBzZXJ2ZXIgcmVzcG9uZGnDsyBPSykgeSBxdWUgbG9zIGFyY2hpdm9zIHNlIGVudmlhcm9uIGNvcnJlY3RhbWVudGUuXG4gICAgLy8gU29sbyBwZXJkaW1vcyBsYSBjb25maXJtYWNpw7NuIGFzaW5jcsOzbmljYSBkZWwgV2ViU29ja2V0IHNvYnJlIHN1XG4gICAgLy8gcHJvY2VzYW1pZW50by4gQ2VycmFtb3MgdG9kbyBtb3N0cmFuZG8gZWwgc25hY2tiYXIgZGUgw6l4aXRvIHF1ZSBodWJpZXNlXG4gICAgLy8gZGlzcGFyYWRvIGVsIGZsdWpvIG5vcm1hbCBkZSDDqXhpdG8uXG5cbiAgICAvLyBGcmVubyBwYXJhIHF1ZSBsb3MgdXNlRWZmZWN0IGRlIHBvc3QtZ3VhcmRhZG8gbm8gcmUtZGlzcGFyZW4gc25hY2tiYXJzXG4gICAgLy8gbyBjaWVycmVzIGR1cGxpY2Fkb3MgY3VhbmRvIHNldElzU2hvd1Byb2Nlc3NGaWxlcyhmYWxzZSkgbG9zIGdhdGlsbGUuXG4gICAgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudCA9IHRydWVcblxuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcgJiYgc3VjY2Vzc1VwZGF0ZSkge1xuICAgICAgdXBkYXRlQWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgIGlmIChjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQgPT09IHN1Y2Nlc3NVcGRhdGUuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgIH0gZWxzZSBpZiAoIW1vZGFsVmFsdWVzLmlzRWRpdGluZyAmJiBzdWNjZXNzQ3JlYXRlKSB7XG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlKClcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcygpXG5cbiAgICBoYW5kbGVDbG9zZSgpXG4gIH0sIFtcbiAgICBpc1Nob3dQcm9jZXNzRmlsZXMsXG4gICAgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nLFxuICAgIHN1Y2Nlc3NVcGRhdGUsXG4gICAgc3VjY2Vzc0NyZWF0ZSxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICBjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlLFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlQ2xvc2UsXG4gIF0pXG5cbiAgY29uc3Qgd2ViU29ja2V0RnVuY3Rpb24gPSAoeyBtb2RlbF9kYXRhOiBtb2RlbERhdGEgfTogeyBtb2RlbF9kYXRhOiBhbnkgfSkgPT4ge1xuICAgIGNvbnN0IGZpbGVTdGF0dXMgPSBtb2RlbERhdGFcbiAgICBpZiAoZmlsZVN0YXR1cy5zdGF0dXMgPT09ICdkb25lJyB8fCBmaWxlU3RhdHVzLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkS25vd2xlZGdlID0gcHJldi5rbm93bGVkZ2UubWFwKGZpbGUgPT4ge1xuICAgICAgICAgIGlmIChmaWxlLm5hbWUgPT09IGZpbGVTdGF0dXMuZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmZpbGUsXG4gICAgICAgICAgICAgIHN0YXR1czogZmlsZVN0YXR1cy5zdGF0dXMsXG4gICAgICAgICAgICAgIGlkOiBmaWxlU3RhdHVzLmtub3dsZWRnZV9iYXNlX2lkIHx8IGZpbGUuaWQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaWxlXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGhhc1BlbmRpbmdGaWxlcyA9IHVwZGF0ZWRLbm93bGVkZ2Uuc29tZShmaWxlID0+IGZpbGUuc3RhdHVzID09PSAncGVuZGluZycpXG4gICAgICAgIGNvbnN0IGhhc0Vycm9yRmlsZXMgPSB1cGRhdGVkS25vd2xlZGdlLnNvbWUoZmlsZSA9PiBmaWxlLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpXG4gICAgICAgIGlmIChoYXNFcnJvckZpbGVzICYmICFoYXNQZW5kaW5nRmlsZXMpIHtcbiAgICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IoXG4gICAgICAgICAgICBtb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyB0KCdjb25maXJtQWdlbnRVcGRhdGVkV2l0aEZpbGVzRXJyb3InKSA6IHQoJ2NvbmZpcm1BZ2VudFdpdGhGaWxlc0Vycm9yJylcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc1BlbmRpbmdGaWxlcyAmJiAhaGFzRXJyb3JGaWxlcykge1xuICAgICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXMoZmFsc2UpXG5cbiAgICAgICAgICAvLyBTaSBoYWLDrWEgYWNjZXNzIHBlbmRpZW50ZSB5IHlhIGVzdGFiYSBtYW5lamFkbywgZm9yemFyIHF1ZSBlbCB1c2VFZmZlY3QgZGUgYWNjZXNzIHNlIGVqZWN1dGUgZGUgbnVldm9cbiAgICAgICAgICBpZiAoYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzICYmIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgc2V0RmlsZXNQcm9jZXNzZWQocHJldkNvdW50ID0+IHByZXZDb3VudCArIDEpXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgICAgICAgIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgICAgICAgIWZpbGVzRmluaXNoZWRSZWYuY3VycmVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gU2kgZXMgY3JlYWNpw7NuIHNpbiBhY2Nlc2liaWxpZGFkLCBtYXJjYXIgcXVlIGxvcyBhcmNoaXZvcyB0ZXJtaW5hcm9uXG4gICAgICAgICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgICBzZXRGaWxlc1Byb2Nlc3NlZChwcmV2Q291bnQgPT4gcHJldkNvdW50ICsgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgIGtub3dsZWRnZTogdXBkYXRlZEtub3dsZWRnZSxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzS25vd2xlZGdlRGVsZXRlICYmICFpc0xvYWRpbmdLbm93bGVkZ2UgJiYgIWVycm9yS25vd2xlZGdlKSB7XG4gICAgICAvLyBTb2xvIGNlcnJhciBzaSBOTyBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3NcbiAgICAgIGlmIChoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCB8fCBpc1Nob3dQcm9jZXNzRmlsZXMgfHwgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBTaSBlbCBsb2FkZXIgc2UgY2VycsOzIHBvciB0aW1lb3V0LCBubyBtb3N0cmFyIHNuYWNrYmFyIGRlIMOpeGl0byBuaSBjZXJyYXJcbiAgICAgIGlmIChwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWQnKSlcbiAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfVxuICAgIGlmIChlcnJvcktub3dsZWRnZSkge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcihcbiAgICAgICAgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gdCgnY29uZmlybUFnZW50VXBkYXRlZFdpdGhGaWxlc0Vycm9yJykgOiB0KCdjb25maXJtQWdlbnRXaXRoRmlsZXNFcnJvcicpXG4gICAgICApXG4gICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIH1cbiAgfSwgW3N1Y2Nlc3NLbm93bGVkZ2VEZWxldGUsIGlzTG9hZGluZ0tub3dsZWRnZSwgZXJyb3JLbm93bGVkZ2UsIGlzU2hvd1Byb2Nlc3NGaWxlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50XG5cbiAgICAvLyBTaSBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3MsIGVzcGVyYXIgYSBxdWUgdGVybWluZW5cbiAgICBpZiAoY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJiAoaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgfHwgaXNTaG93UHJvY2Vzc0ZpbGVzKSkge1xuICAgICAgLy8gU2kgc3VjY2Vzc1VwZGF0ZUFjY2VzcyBlc3TDoSBhY3Rpdm8sIG1hcmNhciBjb21vIG1hbmVqYWRvIHBlcm8gTk8gcmVzZXRlYXIgaGFzdGEgcXVlIHRlcm1pbmVuIGxvcyBhcmNoaXZvc1xuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiYgIWFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTaSB5YSBmdWUgbWFuZWphZG8geSBubyBoYXkgYXJjaGl2b3MgcGVuZGllbnRlcywgZWplY3V0YXIgZWwgY2llcnJlXG4gICAgaWYgKGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCAmJiBjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MpIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghc3VjY2Vzc1VwZGF0ZUFjY2Vzcykge1xuICAgICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuXG4gICAgaWYgKGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIC8vIFNpIGhheSBhcmNoaXZvcywgZWwgYWdlbnRlIHlhIGZ1ZSBhZ3JlZ2FkbyB5IGVsIHRvZ2dsZSB5YSBzZSBoaXpvIGVuIHN1Y2Nlc3NDcmVhdGVcbiAgICAgIC8vIFNvbG8gbmVjZXNpdGFtb3MgY2VycmFyIGVsIG1vZGFsXG4gICAgICBpZiAoY29udGV4dC5oYXNBY3Rpb25GaWxlcykge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBTaSBlbCBhZ2VudGUgZnVlIGNyZWFkbyBjb24gZmF2b3JpdG8sIG5lY2VzaXRhbW9zIG9yZGVuYXIgZGVzcHXDqXMgZGUgYWdyZWdhcmxvXG4gICAgICBjb25zdCBhZ2VudFRvQWRkID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSA/IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfSA6IHN1Y2Nlc3NDcmVhdGVcblxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIGFkZEFnZW50KGFnZW50VG9BZGQpXG4gICAgICBzZWxlY3RBZ2VudChhZ2VudFRvQWRkKVxuXG4gICAgICAvLyBTaSB0aWVuZSBmYXZvcml0bywgaGFjZXIgdG9nZ2xlIHkgYWN0dWFsaXphciBlc3RhZG8gYW50ZXMgZGUgY2VycmFyXG4gICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAvLyBDdWFuZG8gc2UgY3JlYSB1biBhZ2VudGUgbnVldm8sIGVsIHNlcnZpZG9yIG5vIHRpZW5lIGVsIGZhdm9yaXRvIG1hcmNhZG8gYcO6blxuICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRUb0FkZCwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudChcbiAgICAgICAgICBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgYWdlbnRGb3JUb2dnbGUsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2VycmFyIGRlc3B1w6lzIGRlIHF1ZSBlbCB0b2dnbGUgY29tcGxldGUgeSBhY3R1YWxpY2UgZWwgZXN0YWRvXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCA9PT0gc3VjY2Vzc1VwZGF0ZS5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgfVxuICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlKClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG5cbiAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICB9XG4gIH0sIFtzdWNjZXNzVXBkYXRlQWNjZXNzLCBmaWxlc1Byb2Nlc3NlZF0pXG5cbiAgLy8gdXNlRWZmZWN0IHBhcmEgbWFuZWphciBlbCBjaWVycmUgZGVsIG1vZGFsIGN1YW5kbyB0ZXJtaW5hbiBsb3MgYXJjaGl2b3MgZW4gY3JlYWNpw7NuIHNpbiBhY2Nlc2liaWxpZGFkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudFxuXG4gICAgLy8gU29sbyBwcm9jZXNhciBzaTpcbiAgICAvLyAtIEVzIHVuYSBvcGVyYWNpw7NuIGRlIGNyZWFjacOzblxuICAgIC8vIC0gTm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVuZGllbnRlXG4gICAgLy8gLSBMb3MgYXJjaGl2b3MgdGVybWluYXJvbiBkZSBwcm9jZXNhcnNlXG4gICAgLy8gLSBFbCBhZ2VudGUgZnVlIGNyZWFkbyBleGl0b3NhbWVudGVcbiAgICAvLyAtIEHDum4gbm8gc2UgaGEgY2VycmFkbyBlbCBtb2RhbFxuICAgIGlmIChcbiAgICAgIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScgJiZcbiAgICAgICFjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmXG4gICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgJiZcbiAgICAgIHN1Y2Nlc3NDcmVhdGUgJiZcbiAgICAgICFoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCAmJlxuICAgICAgIWlzU2hvd1Byb2Nlc3NGaWxlc1xuICAgICkge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRhbWJpw6luIG1hbmVqYXIgZWwgY2FzbyBjdWFuZG8gaGF5IGFjY2VzaWJpbGlkYWQgeSBhcmNoaXZvcyB0ZXJtaW5hcm9uXG4gICAgaWYgKFxuICAgICAgY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ICYmXG4gICAgICBzdWNjZXNzQ3JlYXRlICYmXG4gICAgICAhaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiZcbiAgICAgICFpc1Nob3dQcm9jZXNzRmlsZXNcbiAgICApIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MpIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBmaWxlc1Byb2Nlc3NlZCxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIHN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaXNTaG93UHJvY2Vzc0ZpbGVzLFxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2VzcyxcbiAgICB0LFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlQ2xvc2UsXG4gIF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNTaG93UHJvY2Vzc0ZpbGVzKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gYGtub3dsZWRnZS1iYXNlLnN0YXR1czoke2FnZW50QnlJZCA/IGFnZW50QnlJZD8uaWQgOiBzdWNjZXNzQ3JlYXRlPy5pZD8udG9TdHJpbmcoKX1gXG4gICAgICBpZiAoJF9zYykge1xuICAgICAgICBpZiAoaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgICAgJF9zYz8uc3Vic2NyaWJlSGFuZGxlcihjaGFubmVsLCB3ZWJTb2NrZXRGdW5jdGlvbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBtb2RlbERhdGEgPSB7XG4gICAgICAgICAgICBtb2RlbF9oYXNoOiBjaGFubmVsLFxuICAgICAgICAgICAgYWN0aW9uOiAkX3NjPy5hY3Rpb25UeXBlPy5TVUJTQ1JJQkUsXG4gICAgICAgICAgfVxuICAgICAgICAgICRfc2M/LnVwZGF0ZUNvbm5lY3Rpb25Nb2RlbChtb2RlbERhdGEsIGNoYW5uZWwsIHVzZXIsIHVzZXIsICRfc2MuY2hhbm5lbFR5cGU/Lk1PREVMX0NIQU5ORUwpXG4gICAgICAgICAgc2V0SXNTdWJzY3JpYmVkKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc1Nob3dQcm9jZXNzRmlsZXMsIGlzU3Vic2NyaWJlZCwgJF9zYywgYWdlbnRCeUlkLCBzdWNjZXNzQ3JlYXRlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuIHx8ICFhZ2VudE1vZGVscy5sZW5ndGgpIHJldHVyblxuICAgIGlmIChhZ2VudExvYWRpbmcgJiYgIXByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBjb25zdCBhcHBseUVkaXRpbmdBZ2VudCA9IChzb3VyY2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZS50eXBlICE9PSAnY3VzdG9tJyB8fCAhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFjY2Vzc0RlbmllZCcpKVxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgfSwgMzAwMClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+IHtcbiAgICAgICAgY29uc3QgYWdlbnRWYWx1ZXNUb1NldCA9IGJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsKHNvdXJjZSwgYWdlbnRNb2RlbHMsIHByZXYpXG4gICAgICAgIGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50ID0gYWdlbnRWYWx1ZXNUb1NldFxuICAgICAgICByZXR1cm4gYWdlbnRWYWx1ZXNUb1NldFxuICAgICAgfSlcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIGlmIChwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCkge1xuICAgICAgICBzZXRTZWN0aW9uKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50KVxuICAgICAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcHJlZmV0Y2hlZCA9IHByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudFxuICAgIGlmIChwcmVmZXRjaGVkKSB7XG4gICAgICBwcmVmZXRjaGVkQWdlbnRCeUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhcHBseUVkaXRpbmdBZ2VudChwcmVmZXRjaGVkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGFnZW50QnlJZCAmJiAhYWdlbnRMb2FkaW5nICYmIGFnZW50TW9kZWxzLmxlbmd0aCkge1xuICAgICAgYXBwbHlFZGl0aW5nQWdlbnQoYWdlbnRCeUlkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFpc0xvYWRpbmcgJiYgIWFnZW50TG9hZGluZyAmJiAhYWdlbnRCeUlkICYmICFtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHtcbiAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgIC4uLnByZXYuZ2VuZXJhbCxcbiAgICAgICAgICBhaU1vZGVsOiBhZ2VudE1vZGVsc1swXSxcbiAgICAgICAgfSxcbiAgICAgIH0pKVxuICAgIH1cbiAgfSwgW2FnZW50QnlJZCwgaXNPcGVuLCBpc0xvYWRpbmcsIGFnZW50TG9hZGluZywgYWdlbnRNb2RlbHM/Lmxlbmd0aCwgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nLCB0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChlcnJvckdldEFnZW50QnlJZCkge1xuICAgICAgaWYgKGVycm9yR2V0QWdlbnRCeUlkID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIikge1xuICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ2Vycm9yQWNjZXNzRGVuaWVkJykpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgfSwgMzAwMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKGVycm9yR2V0QWdlbnRCeUlkKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH0sIDMwMDApXG4gICAgfVxuICB9LCBbZXJyb3JHZXRBZ2VudEJ5SWRdKVxuXG4gIGNvbnN0IHNob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghbW9kYWxWYWx1ZXM/LmFjY2Vzc2liaWxpdHk/LmNsaWVudHMgfHwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5jbGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmNsaWVudHMuc29tZShjbGllbnQgPT4gY2xpZW50LmlzX2FjdGl2ZSA9PT0gZmFsc2UgfHwgY2xpZW50LmlzX2RlbGV0ZWQgPT09IHRydWUpXG4gIH0sIFttb2RhbFZhbHVlcz8uYWNjZXNzaWJpbGl0eT8uY2xpZW50c10pXG5cbiAgY29uc3QgaXNTYXZlQnV0dG9uRGlzYWJsZWQgPVxuICAgICF2YWxpZGF0ZUZpZWxkVmFsdWVzKG1vZGFsVmFsdWVzKSB8fFxuICAgIHZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUoKSB8fFxuICAgIGlzTG9hZGluZyB8fFxuICAgIGlzTG9hZGluZ0tub3dsZWRnZSB8fFxuICAgIGlzTG9hZGluZ0NyZWF0ZSB8fFxuICAgIGlzTG9hZGluZ1VwZGF0ZUFjY2VzcyB8fFxuICAgIHNob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyB8fFxuICAgIGhhc0ZpbGVFcnJvcnNcblxuICBjb25zdCBoYW5kbGVUb2dnbGVGYXZvcml0ZSA9ICgpID0+IHtcbiAgICBpZiAobW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlkKSB7XG4gICAgICAvLyBFeGlzdGluZyBhZ2VudFxuICAgICAgdG9nZ2xlRmF2b3JpdGUoXG4gICAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQsXG4gICAgICAgIHVwZGF0ZWRBZ2VudCA9PiB7XG4gICAgICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgICAgICBpc19mYXZvcml0ZTogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAvLyBBY3R1YWxpemFyIGVsIGVzdGFkbyBkZSBhZ2VudGVzIHkgb3JkZW5hciBjdWFuZG8gc2UgaGFjZSBkZXNkZSBlbCBtb2RhbCBBQk1cbiAgICAgICAgICB1cGRhdGVBZ2VudEZhdm9yaXRlKHVwZGF0ZWRBZ2VudCwgdHJ1ZSlcbiAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0RmF2b3JpdGUsIHtcbiAgICAgICAgICAgIG9wdGlvbjogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlID8gJ2FkZCcgOiAncmVtb3ZlJyxcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIG1vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgbmV3IGFnZW50XG4gICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgaXNfZmF2b3JpdGU6ICFwcmV2LmdlbmVyYWwuaXNfZmF2b3JpdGUsXG4gICAgICAgIH0sXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBpZiAoIWlzT3BlbiB8fCAoIXVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlICYmICF1c2VyUGVybWlzc2lvbnM/LmVkaXQgJiYgIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlKSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgIDxCYWNrZHJvcCB6SW5kZXg9ezExMTJ9IG9uQ2xpY2s9e2hhbmRsZUJhY2tkcm9wQ2xpY2t9PlxuICAgICAgPFNDQUFNV3JhcHBlciByZWY9e21vZGFsUmVmfSB0YWJJbmRleD17LTF9PlxuICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgIDxTQ0FBTVdyYXBwZXJTcGlubmVyPlxuICAgICAgICAgICAgPFNDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50PlxuICAgICAgICAgICAgICA8U3Bpbm5lckxvdHRpZSBzaXplPVwiODBweFwiIGNvbG9yPVwicHJpbWFyeVwiIC8+XG4gICAgICAgICAgICA8L1NDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50PlxuICAgICAgICAgIDwvU0NBQU1XcmFwcGVyU3Bpbm5lcj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2lzU2hvd1Byb2Nlc3NGaWxlcyAmJiBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA/IChcbiAgICAgICAgICAgICAgPEFibUxvYWRlckZpbGVzXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM9e21vZGFsVmFsdWVzLmtub3dsZWRnZX1cbiAgICAgICAgICAgICAgICBsYWJlbD17dChgcHJvY2Vzc2luZ0tub3dsZWRnZS4ke21vZGFsVmFsdWVzLmlzRWRpdGluZyA/ICdkZXNjcmlwdGlvblVwZGF0ZScgOiAnZGVzY3JpcHRpb25DcmVhdGUnfWApfVxuICAgICAgICAgICAgICAgIG9uVGltZW91dD17aGFuZGxlUHJvY2Vzc0ZpbGVzVGltZW91dH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyTGVmdD5cbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0KCdnZW5lcmFsU2VjdGlvbi5yZW1vdmVGYXZvcml0ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogdCgnZ2VuZXJhbFNlY3Rpb24uYWRkRmF2b3JpdGUnKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FBTUhlYWRlckZhdm9yaXRlIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZUZhdm9yaXRlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e21vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZSA/ICcjRkZDNjI0JyA6ICcjYTZhNmE2J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD17bW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlzX2Zhdm9yaXRlID8gJyNGRkM2MjQnIDogJ25vbmUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29saWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e21vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZSA/ICcnIDogJ3N0YXItZmF2b3JpdGUtaWNvbid9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1IZWFkZXJGYXZvcml0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1IZWFkZXJUaXRsZT57bW9kYWxWYWx1ZXM/LmlzRWRpdGluZyA/IHQoJ2VkaXRBZ2VudCcpIDogdCgnbmV3QWdlbnQnKX08L1NDQUFNSGVhZGVyVGl0bGU+XG4gICAgICAgICAgICAgICAgICA8L1NDQUFNSGVhZGVyTGVmdD5cbiAgICAgICAgICAgICAgICAgIDxTQ0FBTUhlYWRlckNsb3NlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuY2FuY2VsTW9kYWwpXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nIHx8IGlzTG9hZGluZ0tub3dsZWRnZSB8fCBpc0xvYWRpbmdDcmVhdGUgfHwgaXNMb2FkaW5nVXBkYXRlQWNjZXNzfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q3Jvc3MgY29sb3I9XCIjYTZhNmE2XCIgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgPC9TQ0FBTUhlYWRlckNsb3NlQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvU0NBQU1IZWFkZXI+XG4gICAgICAgICAgICAgICAgPFNDQUFNQ29udGVudCBoYXNTY3JvbGw9e3NlY3Rpb24gIT09ICdrbm93bGVkZ2UnfT5cbiAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXI+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdnZW5lcmFsJ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdnZW5lcmFsJyl9XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhYm0tYWdlbnQtbW9kYWwtZ2VuZXJhbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtgJHtzZWN0aW9uID09PSAnZ2VuZXJhbCcgPyAncmdiYSg2MywgNjMsIDYzLCAxKScgOiAncmdiYSgxNjYsIDE2NiwgMTY2LCAxKSd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVRpdGxlIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnZ2VuZXJhbCd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2dlbmVyYWxTZWN0aW9uLnRpdGxlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cblxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzZWN0aW9uID09PSAna25vd2xlZGdlJ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdrbm93bGVkZ2UnKX1cbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFibS1hZ2VudC1tb2RhbC1rbm93bGVkZ2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEJyYWluSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2Ake3NlY3Rpb24gPT09ICdrbm93bGVkZ2UnID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2tub3dsZWRnZSd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2tub3dsZWRnZVNlY3Rpb24udGl0bGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhckl0ZW1UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdhY3Rpb25zJ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdhY3Rpb25zJyl9XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhYm0tYWdlbnQtbW9kYWwtYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtgJHtzZWN0aW9uID09PSAnYWN0aW9ucycgPyAncmdiYSg2MywgNjMsIDYzLCAxKScgOiAncmdiYSgxNjYsIDE2NiwgMTY2LCAxKSd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVRpdGxlIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnYWN0aW9ucyd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2FjdGlvbnNTZWN0aW9uLnRpdGxlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cblxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnYWNjZXNzaWJpbGl0eSd9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VjdGlvbkNoYW5nZSgnYWNjZXNzaWJpbGl0eScpfVxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWJtLWFnZW50LW1vZGFsLWFjY2Vzc2liaWxpdHlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2liaWxpdHlJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YCR7c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi50aXRsZVRhYicpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIHtzaG91bGREaXNhYmxlU2F2ZUZvckNsaWVudHMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNsaWVudHNFcnJvcicpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1FcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWxlcnQgY29sb3I9XCIjQzcwNTA1XCIgd2lkdGg9XCIxNnB4XCIgaGVpZ2h0PVwiMTZweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbUVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cblxuICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXI+XG4gICAgICAgICAgICAgICAgICB7U2VjdGlvbkJ5S2V5W3NlY3Rpb25dKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBtb2RhbFZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6IGhhbmRsZVNldEFnZW50VmFsdWVzQnlLZXlzLFxuICAgICAgICAgICAgICAgICAgICBhZ2VudE1vZGVscyxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nS25vd2xlZGdlOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgbmV3S25vd2xlZGdlOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgb25SZW1vdmVFeGlzdGluZ0tub3dsZWRnZTogKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlTmV3S25vd2xlZGdlOiAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAgICAgb25GaWxlRXJyb3JDaGFuZ2U6IHNldEhhc0ZpbGVFcnJvcnMsXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L1NDQUFNQ29udGVudD5cbiAgICAgICAgICAgICAgICA8U0NBQU1Gb290ZXIgaXNFZGl0aW5nPXshIW1vZGFsVmFsdWVzPy5pc0VkaXRpbmcgJiYgISF1c2VyUGVybWlzc2lvbnM/LmRlbGV0ZX0+XG4gICAgICAgICAgICAgICAgICB7ISFtb2RhbFZhbHVlcz8uaXNFZGl0aW5nICYmXG4gICAgICAgICAgICAgICAgICAgICEhdXNlclBlcm1pc3Npb25zPy5kZWxldGUgJiZcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FBTURlbGV0ZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDVUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuV2l0aEljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dNb2RhbERlbGV0ZSh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nIHx8IGlzTG9hZGluZ0tub3dsZWRnZSB8fCBpc0xvYWRpbmdDcmVhdGUgfHwgaXNMb2FkaW5nVXBkYXRlQWNjZXNzfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8V3JhcHBlckNlbnRlckljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRyYXNoIGNvbG9yPVwiIzA4Y1wiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnZGVsZXRlQWdlbnQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9XcmFwcGVyQ2VudGVySWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQ1VCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTURlbGV0ZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcyNHB4JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2F2ZUJ1dHRvbiBpc0Rpc2FibGVkPXtpc1NhdmVCdXR0b25EaXNhYmxlZH0+XG4gICAgICAgICAgICAgICAgICAgICAgPENVQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDb25maXJtQWN0aW9uKG51bGwsICdjcmVhdGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1NhdmVCdXR0b25EaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gdCgnc2F2ZUNoYW5nZXMnKSA6IHQoJ2NyZWF0ZUFnZW50TGFiZWxCdXR0b24nKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2F2ZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvU0NBQU1Gb290ZXI+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NBQU1XcmFwcGVyPlxuICAgICAge3Nob3dNb2RhbERlbGV0ZSAmJiAoXG4gICAgICAgIDxEZWxldGVRdWVzdGlvbk1vZGFsXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01vZGFsRGVsZXRlKGZhbHNlKX1cbiAgICAgICAgICBoYW5kbGVycz17e1xuICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbjogKHByb3BzOiBhbnkpID0+IGhhbmRsZUNvbmZpcm1BY3Rpb24ocHJvcHMsICdkZWxldGUnKSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGNoYXQ9e3sgdGl0bGU6IG1vZGFsVmFsdWVzLmdlbmVyYWwubmFtZSwgaWQ6IG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQgfX1cbiAgICAgICAgICBhY3Rpb249XCJhZ2VudFwiXG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvQmFja2Ryb3A+LFxuICAgIHNlbGVjdG9yXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FB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
1592
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VDYWxsYmFjayIsImNyZWF0ZVBvcnRhbCIsInVzZVRyYW5zbGF0aW9uIiwiQ1VCdXR0b24iLCJDYXRlZ29yeSIsIkFsZXJ0IiwiVHJhc2giLCJTdGFyIiwiQ3Jvc3MiLCJTcGlubmVyTG90dGllIiwiVG9vbHRpcCIsIkFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIiwiQmFja2Ryb3AiLCJ1c2VVc2VyIiwiQWNjZXNzaWJpbGl0eUljb24iLCJCcmFpbkljb24iLCJ1c2VBZ2VudE1vZGVsIiwidXNlR2V0QWdlbnRCeUlkIiwiQWJtQWN0aW9uc1NlY3Rpb25WMiIsIkFibUdlbmVyYWxTZWN0aW9uIiwiQWJtS25vd2xlZGdlU2VjdGlvbiIsIlNDQUFNQ29udGVudCIsIlNDQUFNRm9vdGVyIiwiU0NBQU1IZWFkZXIiLCJTQ0FBTUhlYWRlclRpdGxlIiwiU0NBQU1IZWFkZXJMZWZ0IiwiU0NBQU1IZWFkZXJGYXZvcml0ZSIsIlNDQUFNSGVhZGVyQ2xvc2VCdXR0b24iLCJTQ0FBTVNpZGViYXIiLCJTQ0FBTVdyYXBwZXIiLCJTQ0FBTVNpZGViYXJJdGVtIiwiU0NBQU1TaWRlYmFySXRlbVRpdGxlIiwiU0NBQU1EZWxldGVCdXR0b24iLCJTQ0FBTVNhdmVCdXR0b24iLCJTQ0FBTVdyYXBwZXJTcGlubmVyIiwiU0NBQU1XcmFwcGVyU3Bpbm5lckNvbnRlbnQiLCJTQ0FBTVNpZGViYXJJdGVtRXJyb3IiLCJ1c2VDcmVhdGVBZ2VudCIsInVzZURlbGV0ZUFnZW50IiwidXNlU25hY2tCYXJNYW5hZ2VyIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVwZGF0ZUFnZW50IiwidXNlS25vd2xlZGdlT3BlcmF0aW9ucyIsIkFibUxvYWRlckZpbGVzIiwiV3JhcHBlckNlbnRlckljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJ1c2VBY2Nlc3NDbGllbnQiLCJ1c2VUb2dnbGVGYXZvcml0ZSIsImNyZWF0ZVNjaGVkdWxlIiwiZ2V0QWdlbnRDb25uZWN0b3JzIiwib3BlbkNvbm5lY3RvckF1dGhvcml6YXRpb25XaW5kb3dzIiwic2F2ZUFnZW50Q29ubmVjdG9ycyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImluaXRpYWxWYWx1ZXMiLCJPYmplY3QiLCJmcmVlemUiLCJpc0VkaXRpbmciLCJrbm93bGVkZ2UiLCJnZW5lcmFsIiwibmFtZSIsImVtb2ppIiwiaW50cm9kdWN0aW9uIiwiaW5wdXRQbGFjZWhvbGRlciIsImlzQWN0aXZlIiwiYWlNb2RlbCIsImlkIiwidXNlclByb21wdCIsImtub3dsZWRnZUJhc2VzIiwiaXNfZmF2b3JpdGUiLCJhY2Nlc3NpYmlsaXR5IiwiYWNjZXNzVHlwZSIsImNsaWVudHMiLCJhY3Rpb25zIiwic2VsZWN0ZWRUb29sR3JvdXBzIiwic2VsZWN0ZWRDb25uZWN0b3JzIiwiU2VjdGlvbkJ5S2V5IiwicHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwidmFsaWRhdGVGaWVsZFZhbHVlcyIsInZhbHVlVG9WYWxpZGF0ZSIsImJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsIiwiYWdlbnRCeUlkIiwiYWdlbnRNb2RlbHMiLCJwcmV2IiwiX2FnZW50QnlJZCRrbm93bGVkZ2VCIiwiX2FnZW50QnlJZCRjbGllbnRzIiwiYWdlbnRNb2RlbCIsImZpbmQiLCJtb2RlbCIsIm1vZGVsQWlJZCIsImNyZWF0ZWRfYnkiLCJjcmVhdGVkQnkiLCJtYXAiLCJrIiwiZmlsZSIsIkZpbGUiLCJmaWxlbmFtZSIsInRvU3RyaW5nIiwic2l6ZSIsImZpbGVfc2l6ZV9ieXRlcyIsInR5cGUiLCJvcmlnaW5hbF9maWxlX3R5cGUiLCJzdGF0dXMiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwiYWNjZXNzIiwiY2xpZW50IiwiX2NsaWVudCRpZCIsIl9jbGllbnQkaXNfYWN0aXZlIiwiX2NsaWVudCRpc19kZWxldGVkIiwiaXNfYWN0aXZlIiwiaXNfZGVsZXRlZCIsInRvb2xHcm91cFNsdWdzIiwiQWJtQWdlbnRNb2RhbCIsIl9yZWYiLCJfdXNlciRwZXJtaXNzaW9ucyIsIl9tb2RhbFZhbHVlcyRhY2Nlc3NpYjIiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDMiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDQiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDUiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDYiLCJhZGRBZ2VudCIsInVwZGF0ZUFnZW50IiwicmVtb3ZlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInVzZXIiLCJldmVudEFtcGxpdHVkZSIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsImN1cnJlbnRTZWxlY3RlZEFnZW50IiwiYWdlbnQiLCJzZWxlY3RBZ2VudCIsIl91c2VUb2dnbGVGYXZvcml0ZSIsInRvZ2dsZUZhdm9yaXRlIiwic2VsZWN0b3IiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNTdWJzY3JpYmVkIiwic2V0SXNTdWJzY3JpYmVkIiwibW9kYWxSZWYiLCJjb25uZWN0b3JBdXRoUG9wdXBSZWYiLCJoYXNQZW5kaW5nRmlsZXNSZWYiLCJhY3Rpb25zVG9GaWxlcyIsInRvRGVsZXRlIiwidG9VcGxvYWQiLCJhY2Nlc3NVcGRhdGVDb250ZXh0IiwiaXNGcm9tQ3JlYXRpb24iLCJpc0Zyb21FZGl0aW5nIiwiaGFzQWN0aW9uRmlsZXMiLCJvcGVyYXRpb25UeXBlIiwiaGFzQmVlbkNhbGxlZCIsImFjY2Vzc0hhbmRsZWRSZWYiLCJhZ2VudENyZWF0ZWRSZWYiLCJwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYiLCJwZW5kaW5nVHJpZ2dlclJlZiIsInByZWZldGNoZWRBZ2VudEJ5SWRSZWYiLCJmaWxlc0ZpbmlzaGVkUmVmIiwicHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImZpbGVzUHJvY2Vzc2VkIiwic2V0RmlsZXNQcm9jZXNzZWQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzT3BlbiIsInNldElzT3BlbiIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2hvd01vZGFsRGVsZXRlIiwic2V0U2hvd01vZGFsRGVsZXRlIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzZWN0aW9uIiwic2V0U2VjdGlvbiIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJtb2RhbFZhbHVlcyIsInNldE1vZGFsVmFsdWVzIiwiX3VzZUdldEFnZW50QnlJZCIsImFnZW50TG9hZGluZyIsImxvYWRpbmciLCJoYW5kbGVHZXRBZ2VudEJ5SWQiLCJoYW5kbGVDbGVhbkFnZW50IiwiZXJyb3JHZXRBZ2VudEJ5SWQiLCJlcnJvciIsIl91c2VBZ2VudE1vZGVsIiwiZ2V0QWxsQWdlbnRNb2RlbHMiLCJmaXJzdFZhbHVlQWdlbnQiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiaXNTaG93UHJvY2Vzc0ZpbGVzIiwic2V0SXNTaG93UHJvY2Vzc0ZpbGVzIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImhhc0ZpbGVFcnJvcnMiLCJzZXRIYXNGaWxlRXJyb3JzIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJfdXNlRGVsZXRlQWdlbnQiLCJoYW5kbGVEZWxldGVBZ2VudCIsInN1Y2Nlc3NEZWxldGUiLCJzdWNjZXNzIiwicmVzZXRTdWNjZXNzIiwiX3VzZVVwZGF0ZUFnZW50IiwiaGFuZGxlVXBkYXRlQWdlbnQiLCJzdWNjZXNzVXBkYXRlIiwicmVzZXRTdWNjZXNzVXBkYXRlIiwiX3VzZUNyZWF0ZUFnZW50IiwiaGFuZGxlQ3JlYXRlQWdlbnQiLCJpc0xvYWRpbmdDcmVhdGUiLCJzdWNjZXNzQ3JlYXRlIiwicmVzZXRTdWNjZXNzQ3JlYXRlIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlS25vd2xlZGdlT3BlcmF0aW8iLCJoYW5kbGVDcmVhdGVLbm93bGVkZ2VzIiwiaGFuZGxlRGVsZXRlS25vd2xlZGdlcyIsImhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMiLCJpc0xvYWRpbmdLbm93bGVkZ2UiLCJlcnJvcktub3dsZWRnZSIsInN1Y2Nlc3NLbm93bGVkZ2VEZWxldGUiLCJoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlIiwiaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlIiwiX3VzZUFjY2Vzc0NsaWVudCIsImhhbmRsZUFjY2Vzc0NsaWVudCIsInN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJpc0xvYWRpbmdVcGRhdGVBY2Nlc3MiLCJyZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJoYW5kbGVSZXNldFN1Y2Nlc3MiLCJhcmVDbGllbnRzQXJyYXlzRXF1YWwiLCJjbGllbnRzMSIsImNsaWVudHMyIiwibGVuZ3RoIiwiY2xpZW50czFJZHMiLCJjIiwiY2xpZW50SWQiLCJzb3J0IiwiY2xpZW50czJJZHMiLCJldmVyeSIsImluZGV4IiwiaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIiLCJjdXJyZW50IiwiYWNjZXNzVHlwZVNhbWUiLCJjbGllbnRzU2FtZSIsImhhc0FjdGlvbnNDaGFuZ2VkIiwiX21vZGFsVmFsdWVzJGFjdGlvbnMiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIyIiwiY3VycmVudEFjdGlvbnMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJvcmlnaW5hbEFjdGlvbnMiLCJzb21lIiwic2x1ZyIsImhhc0Nvbm5lY3RvckNoYW5nZXMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczIiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIzIiwiY3VycmVudENvbm5lY3RvcnMiLCJvcmlnaW5hbENvbm5lY3RvcnMiLCJwZXJzaXN0QWdlbnRDb25uZWN0b3JzIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImFnZW50SWQiLCJjb25uZWN0b3JTbHVncyIsInBvcHVwV2luZG93IiwicmVzcG9uc2UiLCJwZW5kaW5nQXV0aG9yaXphdGlvbnMiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0Iiwic2VudCIsInJlcXVpcmVzX2F1dGgiLCJhYnJ1cHQiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsInZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnI0IiwiX21vZGFsVmFsdWVzJGdlbmVyYWwkIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyNSIsIl9tb2RhbFZhbHVlcyRrbm93bGVkZyIsIl9maXJzdFZhbHVlQWdlbnQkY3VycjYiLCJfbW9kYWxWYWx1ZXMka25vd2xlZGcyIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyNyIsIl9hY3Rpb25zVG9GaWxlcyRjdXJyZSIsIl9hY3Rpb25zVG9GaWxlcyRjdXJyZTIiLCJ0b1VwZGF0ZSIsImhhc0FueVZhbHVlRm9yQ3JlYXRpb24iLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbCQyIiwiX2FnZW50TW9kZWxzJCIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsJDMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczQiLCJpc0RlZmF1bHRBaU1vZGVsIiwiZGVmYXVsdElucHV0UGxhY2Vob2xkZXIiLCJpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyIiwiZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciIsImlzRGVmYXVsdFVzZXJQcm9tcHQiLCJoYXNOYW1lIiwidHJpbSIsImhhc0Vtb2ppIiwiaGFzSW50cm9kdWN0aW9uIiwiaGFzSW5wdXRQbGFjZWhvbGRlciIsImhhc1VzZXJQcm9tcHQiLCJoYXNLbm93bGVkZ2UiLCJoYXNDdXN0b21BaU1vZGVsIiwiaGFzQWNjZXNzaWJpbGl0eSIsImhhc0FjdGlvbnMiLCJoYXNDb25uZWN0b3JzIiwiaGFzQ2hhbmdlc0ZvckVkaXRpbmciLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImhhbmRsZVRvZ2dsZUZhdm9yaXRlRm9yQWdlbnQiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwidXBkYXRlZEFnZW50IiwiaGFuZGxlQ2xvc2UiLCJza2lwQ29uZmlybWF0aW9uIiwiY29uZmlybU1lc3NhZ2UiLCJ3aW5kb3ciLCJjb25maXJtIiwiaGFuZGxlQmFja2Ryb3BDbGljayIsImV2ZW50IiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsImhhbmRsZVNlY3Rpb25DaGFuZ2UiLCJuZXdTZWN0aW9uIiwidGFiU2VjdGlvbiIsIm9wdGlvbiIsImhhbmRsZVNldEFnZW50VmFsdWVzQnlLZXlzIiwiX3JlZjMiLCJrZXkiLCJ2YWx1ZSIsImRlbGV0ZUtub3dsZWRnZSIsIm5leHRLbm93bGVkZ2UiLCJfYWN0aW9uc1RvRmlsZXMkY3VycmUzIiwicHVzaCIsImZpbGVzUHJldklkcyIsIlNldCIsIm5ld0ZpbGVzIiwiZmlsdGVyIiwiaGFzIiwidmFsdWVJZHMiLCJjb25jYXQiLCJrbm93bGVkZ2VGaWxlcyIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJfcmVmNCIsIl9jYWxsZWUyIiwiY2hhdCIsImFjdGlvbiIsIl9tb2RhbFZhbHVlcyRhY3Rpb25zNSIsImNvbm5lY3RvckNoYW5nZXMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczYiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnI4IiwiX21vZGFsVmFsdWVzJGFjdGlvbnM3IiwiX3QiLCJfY29udGV4dDIiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiY29uZmlybUFjdGlvbiIsIm9wZW4iLCJjbG9zZWQiLCJjbG9zZSIsIl94NCIsIl94NSIsImhhbmRsZVNldEFnZW50VmFsdWVzIiwiX2FnZW50VmFsdWVzJHZhbHVlcyIsIl9hZ2VudFZhbHVlcyR2YWx1ZXMzIiwiYWdlbnRWYWx1ZXMiLCJkZXRhaWwiLCJpbml0aWFsU2VjdGlvbiIsImluY2x1ZGVzIiwidmFsdWVzIiwiX2FnZW50VmFsdWVzJHZhbHVlczIiLCJwcmVmZXRjaGVkQWdlbnRCeUlkIiwibmV4dFZhbHVlcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX2RvY3VtZW50IiwiYm9keSIsIm9yaWdpbmFsT3ZlcmZsb3ciLCJzdHlsZSIsIm92ZXJmbG93IiwiaGFuZGxlQmVmb3JlVW5sb2FkIiwicHJldmVudERlZmF1bHQiLCJyZXR1cm5WYWx1ZSIsIl9tb2RhbFZhbHVlcyRhY3Rpb25zOCIsImNvbnNvbGUiLCJhZ2VudF9leHRlcm5hbF9pZCIsImVyciIsInByb21pc2VzIiwiZmlsZXNUb0RlbGV0ZSIsImZpbGVzVG9DcmVhdGUiLCJhZ2VudFdpdGhGYXZvcml0ZSIsImFnZW50Rm9yVG9nZ2xlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJhbGwiLCJmaWxlcyIsImFpQ2hhdEZhdm9yaXRlIiwiZmlsZXNUb1VwbG9hZCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImhhbmRsZVByb2Nlc3NGaWxlc1RpbWVvdXQiLCJ3ZWJTb2NrZXRGdW5jdGlvbiIsIl9yZWY1IiwibW9kZWxEYXRhIiwibW9kZWxfZGF0YSIsImZpbGVTdGF0dXMiLCJ1cGRhdGVkS25vd2xlZGdlIiwia25vd2xlZGdlX2Jhc2VfaWQiLCJoYXNQZW5kaW5nRmlsZXMiLCJoYXNFcnJvckZpbGVzIiwicHJldkNvdW50IiwiY29udGV4dCIsImFnZW50VG9BZGQiLCJfc3VjY2Vzc0NyZWF0ZSRpZCIsImNoYW5uZWwiLCIkX3NjIiwiXyRfc2MiLCJzdWJzY3JpYmVIYW5kbGVyIiwiXyRfc2MyIiwiXyRfc2MzIiwiXyRfc2MkY2hhbm5lbFR5cGUiLCJtb2RlbF9oYXNoIiwiYWN0aW9uVHlwZSIsIlNVQlNDUklCRSIsInVwZGF0ZUNvbm5lY3Rpb25Nb2RlbCIsImNoYW5uZWxUeXBlIiwiTU9ERUxfQ0hBTk5FTCIsImFwcGx5RWRpdGluZ0FnZW50Iiwic291cmNlIiwic2V0VGltZW91dCIsIl9jYWxsZWUzIiwiY29ubmVjdG9ycyIsIl90MiIsIl9jb250ZXh0MyIsImNvbm5lY3RvciIsImVuYWJsZWRfZm9yX2FnZW50IiwiYWdlbnRWYWx1ZXNUb1NldCIsInByZWZldGNoZWQiLCJzaG91bGREaXNhYmxlU2F2ZUZvckNsaWVudHMiLCJfbW9kYWxWYWx1ZXMkYWNjZXNzaWIiLCJpc1NhdmVCdXR0b25EaXNhYmxlZCIsImhhbmRsZVRvZ2dsZUZhdm9yaXRlIiwiX21vZGFsVmFsdWVzJGdlbmVyYWwiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDIiLCJjcmVhdGUiLCJlZGl0IiwiekluZGV4Iiwib25DbGljayIsImNoaWxkcmVuIiwicmVmIiwidGFiSW5kZXgiLCJjb2xvciIsImF0dGFjaG1lbnRzIiwibGFiZWwiLCJvblRpbWVvdXQiLCJ0aXRsZSIsIndpZHRoIiwiaGVpZ2h0IiwiZmlsbCIsInZhcmlhbnQiLCJjbGFzc05hbWUiLCJjYW5jZWxNb2RhbCIsImRpc2FibGVkIiwiaGFzU2Nyb2xsIiwiZXhpc3RpbmdLbm93bGVkZ2UiLCJuZXdLbm93bGVkZ2UiLCJvblJlbW92ZUV4aXN0aW5nS25vd2xlZGdlIiwib25SZW1vdmVOZXdLbm93bGVkZ2UiLCJvbkZpbGVFcnJvckNoYW5nZSIsImNoaWxkcmVuV2l0aEljb24iLCJkaXNwbGF5IiwiZ2FwIiwiaXNEaXNhYmxlZCIsIm9uQ2xvc2UiLCJoYW5kbGVycyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWFsZXJ0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tY3ljbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1uby11c2VsZXNzLWZyYWdtZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5cbmltcG9ydCB7IENVQnV0dG9uIH0gZnJvbSAnQHByb2plY3Rjb3IvYnV0dG9uL2xpYi9jb21wb25lbnRzL0NVQnV0dG9uJ1xuaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DYXRlZ29yeSdcbmltcG9ydCB7IEFsZXJ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQWxlcnQnXG5pbXBvcnQgeyBUcmFzaCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1RyYXNoJ1xuaW1wb3J0IHsgU3RhciB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1N0YXInXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgU3Bpbm5lckxvdHRpZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2Nvci1jb21tb25zL2xpYi9jb21wb25lbnRzL3NwaW5uZXItbG90dGllJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgQWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbidcbmltcG9ydCB7IEJhY2tkcm9wIH0gZnJvbSAnLi4vLi4vYXRvbXMvQmFja2Ryb3AnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IEFjY2Vzc2liaWxpdHlJY29uLCBCcmFpbkljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IHVzZUFnZW50TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBZ2VudE1vZGVsL3VzZUFnZW50TW9kZWwnXG5pbXBvcnQgeyBBZ2VudCwgQWdlbnRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgdXNlR2V0QWdlbnRCeUlkIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZ2V0QWdlbnRCeUlkJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQWJtQWN0aW9uc1NlY3Rpb25WMiwgQWJtR2VuZXJhbFNlY3Rpb24sIEFibUtub3dsZWRnZVNlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQWJtU2VjdGlvbidcbmltcG9ydCB7IE1vZGFsVmFsdWVzIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnRNb2RhbCdcbmltcG9ydCB7XG4gIFNDQUFNQ29udGVudCxcbiAgU0NBQU1Gb290ZXIsXG4gIFNDQUFNSGVhZGVyLFxuICBTQ0FBTUhlYWRlclRpdGxlLFxuICBTQ0FBTUhlYWRlckxlZnQsXG4gIFNDQUFNSGVhZGVyRmF2b3JpdGUsXG4gIFNDQUFNSGVhZGVyQ2xvc2VCdXR0b24sXG4gIFNDQUFNU2lkZWJhcixcbiAgU0NBQU1XcmFwcGVyLFxuICBTQ0FBTVNpZGViYXJJdGVtLFxuICBTQ0FBTVNpZGViYXJJdGVtVGl0bGUsXG4gIFNDQUFNRGVsZXRlQnV0dG9uLFxuICBTQ0FBTVNhdmVCdXR0b24sXG4gIFNDQUFNV3JhcHBlclNwaW5uZXIsXG4gIFNDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50LFxuICBTQ0FBTVNpZGViYXJJdGVtRXJyb3IsXG59IGZyb20gJy4vQWJtQWdlbnRNb2RhbC5zdHlsZXMnXG5pbXBvcnQgeyB1c2VDcmVhdGVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUFnZW50TW9kZWwvdXNlQ3JlYXRlQWdlbnQnXG5pbXBvcnQgeyB1c2VEZWxldGVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUFnZW50TW9kZWwvdXNlRGVsZXRlQWdlbnQnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyB1c2VVcGRhdGVBZ2VudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUFnZW50TW9kZWwvdXNlVXBkYXRlQWdlbnQnXG5pbXBvcnQgeyB1c2VLbm93bGVkZ2VPcGVyYXRpb25zIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlS25vd2xlZGdlJ1xuaW1wb3J0IHsgQWJtTG9hZGVyRmlsZXMgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1Mb2FkZXJGaWxlcydcbmltcG9ydCB7IFdyYXBwZXJDZW50ZXJJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvV3JhcHBlckNlbnRlckljb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBEZWxldGVRdWVzdGlvbk1vZGFsIH0gZnJvbSAnLi4vRGVsZXRlUXVlc3Rpb25Nb2RhbC9EZWxldGVRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHsgdXNlQWNjZXNzQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWNjZXNzQ2xpZW50L3VzZUFjY2Vzc0NsaWVudCdcbmltcG9ydCB7IHVzZVRvZ2dsZUZhdm9yaXRlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MnXG5pbXBvcnQgeyBjcmVhdGVTY2hlZHVsZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2NoZWR1bGVzJ1xuaW1wb3J0IHtcbiAgZ2V0QWdlbnRDb25uZWN0b3JzLFxuICBvcGVuQ29ubmVjdG9yQXV0aG9yaXphdGlvbldpbmRvd3MsXG4gIHNhdmVBZ2VudENvbm5lY3RvcnMsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2Nvbm5lY3RvcnMnXG5pbXBvcnQgdHlwZSB7IFBlbmRpbmdUcmlnZ2VyUGF5bG9hZCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9BYm1TZWN0aW9uL0FibVRyaWdnZXJzU2VjdGlvbi9BYm1UcmlnZ2Vyc1NlY3Rpb24uaW50ZXJmYWNlJ1xuXG5jb25zdCBpbml0aWFsVmFsdWVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGlzRWRpdGluZzogZmFsc2UsXG4gIGtub3dsZWRnZTogW10sXG4gIGdlbmVyYWw6IHtcbiAgICBuYW1lOiAnJyxcbiAgICBlbW9qaTogJycsXG4gICAgaW50cm9kdWN0aW9uOiAnJyxcbiAgICBpbnB1dFBsYWNlaG9sZGVyOiAnJyxcbiAgICBpc0FjdGl2ZTogZmFsc2UsXG4gICAgYWlNb2RlbDogbnVsbCxcbiAgICBpZDogbnVsbCxcbiAgICB1c2VyUHJvbXB0OiBudWxsLFxuICAgIGtub3dsZWRnZUJhc2VzOiBbXSxcbiAgICBpc19mYXZvcml0ZTogZmFsc2UsXG4gIH0sXG4gIGFjY2Vzc2liaWxpdHk6IHtcbiAgICBhY2Nlc3NUeXBlOiAnY29tcGFueScsXG4gICAgY2xpZW50czogbnVsbCxcbiAgfSxcbiAgYWN0aW9uczoge1xuICAgIHNlbGVjdGVkVG9vbEdyb3VwczogW10sXG4gICAgc2VsZWN0ZWRDb25uZWN0b3JzOiBbXSxcbiAgfSxcbn0pXG5cbnR5cGUgQWJtU2VjdGlvbiA9ICdnZW5lcmFsJyB8ICdrbm93bGVkZ2UnIHwgJ3RyYWluaW5nJyB8ICd0ZXN0aW5nJyB8ICdhY2Nlc3NpYmlsaXR5JyB8ICdhY3Rpb25zJ1xuXG5leHBvcnQgY29uc3QgU2VjdGlvbkJ5S2V5ID0ge1xuICBnZW5lcmFsOiAocHJvcHM6IHtcbiAgICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlbGV0ZUtub3dsZWRnZSxcbiAgICB9OiB7XG4gICAgICBrZXk6IHN0cmluZ1xuICAgICAgdmFsdWU6IHVua25vd25cbiAgICAgIGRlbGV0ZUtub3dsZWRnZT86IGJvb2xlYW5cbiAgICB9KSA9PiB2b2lkXG4gICAgYWdlbnRNb2RlbHM6IEFnZW50TW9kZWxbXVxuICAgIGxvYWRpbmc6IGJvb2xlYW5cbiAgfSkgPT4gPEFibUdlbmVyYWxTZWN0aW9uIHsuLi5wcm9wc30gLz4sXG4gIGtub3dsZWRnZTogKHByb3BzOiB7XG4gICAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiAoeyBrZXksIHZhbHVlIH06IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pID0+IHZvaWRcbiAgICBleGlzdGluZ0tub3dsZWRnZTogQXR0YWNobWVudEZpbGVbXVxuICAgIG5ld0tub3dsZWRnZTogQXR0YWNobWVudEZpbGVbXVxuICAgIG9uUmVtb3ZlRXhpc3RpbmdLbm93bGVkZ2U6IChmaWxlSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uUmVtb3ZlTmV3S25vd2xlZGdlOiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkZpbGVFcnJvckNoYW5nZTogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICB9KSA9PiA8QWJtS25vd2xlZGdlU2VjdGlvbiB7Li4ucHJvcHN9IC8+LFxuICBhY2Nlc3NpYmlsaXR5OiAocHJvcHM6IHtcbiAgICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gICAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM6ICh7IGtleSwgdmFsdWUgfTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkgPT4gdm9pZFxuICB9KSA9PiA8QWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24gey4uLnByb3BzfSAvPixcbiAgYWN0aW9uczogKHByb3BzOiB7XG4gICAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiAoeyBrZXksIHZhbHVlIH06IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pID0+IHZvaWRcbiAgfSkgPT4gPEFibUFjdGlvbnNTZWN0aW9uVjIgey4uLnByb3BzfSAvPixcbn1cblxudHlwZSBBYm1BZ2VudE1vZGFsUHJvcHMgPSB7XG4gIGFkZEFnZW50OiAobmV3QWdlbnQ6IEFnZW50LCBvcHRpb25zPzogeyBuYXZpZ2F0ZUhvbWU/OiBib29sZWFuIH0pID0+IHZvaWRcbiAgcmVtb3ZlQWdlbnQ6IChhZ2VudElkOiBudW1iZXIgfCBzdHJpbmcpID0+IHZvaWRcbiAgdXBkYXRlQWdlbnQ6ICh1cGRhdGVkQWdlbnQ6IEFnZW50KSA9PiB2b2lkXG4gIHVwZGF0ZUFnZW50RmF2b3JpdGU6ICh1cGRhdGVkQWdlbnQ6IEFnZW50LCBzaG91bGRTb3J0PzogYm9vbGVhbikgPT4gdm9pZFxuICBzZWxlY3RGaXJzdEFnZW50OiAoYWdlbnRJZDogc3RyaW5nKSA9PiB2b2lkXG59XG5cbmNvbnN0IHZhbGlkYXRlRmllbGRWYWx1ZXMgPSAodmFsdWVUb1ZhbGlkYXRlOiBNb2RhbFZhbHVlcykgPT4ge1xuICBpZiAoIXZhbHVlVG9WYWxpZGF0ZS5nZW5lcmFsLm5hbWUgfHwgIXZhbHVlVG9WYWxpZGF0ZS5nZW5lcmFsLnVzZXJQcm9tcHQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKiogTWlzbWEgZXN0cnVjdHVyYSBxdWUgZWwgZWZlY3RvIHF1ZSBoaWRyYXRhIGRlc2RlIHVzZUdldEFnZW50QnlJZCAodG9kYXMgbGFzIHBlc3Rhw7FhcyBkZWwgQUJNKS4gKi9cbmZ1bmN0aW9uIGJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsKFxuICBhZ2VudEJ5SWQ6IGFueSxcbiAgYWdlbnRNb2RlbHM6IEFnZW50TW9kZWxbXSxcbiAgcHJldjogTW9kYWxWYWx1ZXNcbik6IE1vZGFsVmFsdWVzIHtcbiAgY29uc3QgYWdlbnRNb2RlbCA9IGFnZW50TW9kZWxzLmZpbmQobW9kZWwgPT4gbW9kZWwuaWQgPT09IGFnZW50QnlJZC5tb2RlbEFpSWQpXG4gIHJldHVybiB7XG4gICAgLi4ucHJldixcbiAgICBpc0VkaXRpbmc6IHRydWUsXG4gICAgZ2VuZXJhbDoge1xuICAgICAgZW1vamk6IGFnZW50QnlJZC5lbW9qaSxcbiAgICAgIG5hbWU6IGFnZW50QnlJZC5uYW1lLFxuICAgICAgaW50cm9kdWN0aW9uOiBhZ2VudEJ5SWQuaW50cm9kdWN0aW9uLFxuICAgICAgaW5wdXRQbGFjZWhvbGRlcjogYWdlbnRCeUlkLmlucHV0UGxhY2Vob2xkZXIsXG4gICAgICBpc0FjdGl2ZTogYWdlbnRCeUlkLmlzQWN0aXZlLFxuICAgICAgYWlNb2RlbDogYWdlbnRNb2RlbCB8fCBudWxsLFxuICAgICAgaWQ6IGFnZW50QnlJZC5pZCxcbiAgICAgIHVzZXJQcm9tcHQ6IGFnZW50QnlJZC51c2VyUHJvbXB0LFxuICAgICAga25vd2xlZGdlQmFzZXM6IFtdLFxuICAgICAgaXNfZmF2b3JpdGU6IGFnZW50QnlJZC5pc19mYXZvcml0ZSxcbiAgICAgIGNyZWF0ZWRfYnk6IGFnZW50QnlJZC5jcmVhdGVkQnksXG4gICAgfSxcbiAgICBrbm93bGVkZ2U6XG4gICAgICBhZ2VudEJ5SWQua25vd2xlZGdlQmFzZXM/Lm1hcCgoazogYW55KSA9PiAoe1xuICAgICAgICBmaWxlOiBuZXcgRmlsZShbXSwgay5maWxlbmFtZSksXG4gICAgICAgIGlkOiBrLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWU6IGsuZmlsZW5hbWUsXG4gICAgICAgIHNpemU6IGsuZmlsZV9zaXplX2J5dGVzIHx8IDAsXG4gICAgICAgIHR5cGU6IGsub3JpZ2luYWxfZmlsZV90eXBlLFxuICAgICAgICBzdGF0dXM6IGsuc3RhdHVzLFxuICAgICAgICB1cmxfb3JpZ2luYWw6IGsudXJsX29yaWdpbmFsIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX3RodW1ibmFpbDogay51cmxfdGh1bWJuYWlsIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pKSB8fCBbXSxcbiAgICBhY2Nlc3NpYmlsaXR5OiB7XG4gICAgICBhY2Nlc3NUeXBlOiBhZ2VudEJ5SWQuYWNjZXNzLFxuICAgICAgY2xpZW50czpcbiAgICAgICAgYWdlbnRCeUlkLmNsaWVudHM/Lm1hcCgoY2xpZW50OiBhbnkpID0+ICh7XG4gICAgICAgICAgaWQ6IGNsaWVudC5pZD8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICBuYW1lOiBjbGllbnQubmFtZSxcbiAgICAgICAgICBpc19hY3RpdmU6IGNsaWVudC5pc19hY3RpdmUgPz8gZmFsc2UsXG4gICAgICAgICAgaXNfZGVsZXRlZDogY2xpZW50LmlzX2RlbGV0ZWQgPz8gZmFsc2UsXG4gICAgICAgIH0pKSB8fCBudWxsLFxuICAgIH0sXG4gICAgYWN0aW9uczoge1xuICAgICAgc2VsZWN0ZWRUb29sR3JvdXBzOiBhZ2VudEJ5SWQudG9vbEdyb3VwU2x1Z3MgfHwgW10sXG4gICAgICBzZWxlY3RlZENvbm5lY3RvcnM6IFtdLFxuICAgIH0sXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEFibUFnZW50TW9kYWwgPSAoe1xuICBhZGRBZ2VudCxcbiAgdXBkYXRlQWdlbnQsXG4gIHJlbW92ZUFnZW50LFxuICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICBzZWxlY3RGaXJzdEFnZW50LFxufTogQWJtQWdlbnRNb2RhbFByb3BzKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oJ2FibV9hZ2VudF9zZWN0aW9uJylcbiAgLy8gY29uc3QgJF9zYzogYW55ID0gbnVsbFxuICBjb25zdCB7IGFnZW50OiBjdXJyZW50U2VsZWN0ZWRBZ2VudCwgc2VsZWN0QWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCB7IHRvZ2dsZUZhdm9yaXRlIH0gPSB1c2VUb2dnbGVGYXZvcml0ZSgpXG4gIGNvbnN0IHNlbGVjdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FibS1hZ2VudC1tb2RhbCcpXG4gIGNvbnN0IFtpc1N1YnNjcmliZWQsIHNldElzU3Vic2NyaWJlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgbW9kYWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNvbm5lY3RvckF1dGhQb3B1cFJlZiA9IHVzZVJlZjxXaW5kb3cgfCBudWxsPihudWxsKVxuICBjb25zdCBoYXNQZW5kaW5nRmlsZXNSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGFjdGlvbnNUb0ZpbGVzID0gdXNlUmVmPGFueT4oe1xuICAgIHRvRGVsZXRlOiBbXSxcbiAgICB0b1VwbG9hZDogW10sXG4gIH0pXG4gIGNvbnN0IGFjY2Vzc1VwZGF0ZUNvbnRleHQgPSB1c2VSZWY8e1xuICAgIGlzRnJvbUNyZWF0aW9uOiBib29sZWFuXG4gICAgaXNGcm9tRWRpdGluZzogYm9vbGVhblxuICAgIGhhc0FjdGlvbkZpbGVzOiBib29sZWFuXG4gICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScgfCAndXBkYXRlJyB8IG51bGxcbiAgICBoYXNCZWVuQ2FsbGVkPzogYm9vbGVhblxuICB9Pih7XG4gICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICB9KVxuICBjb25zdCBhY2Nlc3NIYW5kbGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBhZ2VudENyZWF0ZWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmID0gdXNlUmVmPEFibVNlY3Rpb24gfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nVHJpZ2dlclJlZiA9IHVzZVJlZjxQZW5kaW5nVHJpZ2dlclBheWxvYWQgfCBudWxsPihudWxsKVxuICBjb25zdCBwcmVmZXRjaGVkQWdlbnRCeUlkUmVmID0gdXNlUmVmPGFueT4obnVsbClcbiAgY29uc3QgZmlsZXNGaW5pc2hlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgLy8gTWFyY2EgY3VhbmRvIGNlcnJhbW9zIGVsIGxvYWRlciBwb3IgZWwgdGltZW91dCBkZSBzZWd1cmlkYWQgZGUgYXJjaGl2b3MuXG4gIC8vIE1pZW50cmFzIGVzdMOpIGFjdGl2bywgbG9zIHVzZUVmZmVjdCBkZSBwb3N0LWd1YXJkYWRvIE5PIGRlYmVuIGRpc3BhcmFyXG4gIC8vIHNuYWNrYmFycyBkZSDDqXhpdG8gbmkgYXV0by1jZXJyYXIgZWwgbW9kYWwuXG4gIGNvbnN0IHByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbZmlsZXNQcm9jZXNzZWQsIHNldEZpbGVzUHJvY2Vzc2VkXSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dNb2RhbERlbGV0ZSwgc2V0U2hvd01vZGFsRGVsZXRlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VjdGlvbiwgc2V0U2VjdGlvbl0gPSB1c2VTdGF0ZTxBYm1TZWN0aW9uPignZ2VuZXJhbCcpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGFsVmFsdWVzLCBzZXRNb2RhbFZhbHVlc10gPSB1c2VTdGF0ZTx7XG4gICAgZ2VuZXJhbDogYW55XG4gICAga25vd2xlZGdlOiBhbnlcbiAgICBpc0VkaXRpbmc6IGJvb2xlYW5cbiAgICBhY2Nlc3NpYmlsaXR5OiBhbnlcbiAgICBhY3Rpb25zOiBhbnlcbiAgfT4oaW5pdGlhbFZhbHVlcylcbiAgY29uc3Qge1xuICAgIGxvYWRpbmc6IGFnZW50TG9hZGluZyxcbiAgICBoYW5kbGVHZXRBZ2VudEJ5SWQsXG4gICAgYWdlbnQ6IGFnZW50QnlJZCxcbiAgICBoYW5kbGVDbGVhbkFnZW50LFxuICAgIGVycm9yOiBlcnJvckdldEFnZW50QnlJZCxcbiAgfSA9IHVzZUdldEFnZW50QnlJZCgpXG4gIGNvbnN0IHsgYWdlbnRNb2RlbHMsIGdldEFsbEFnZW50TW9kZWxzIH0gPSB1c2VBZ2VudE1vZGVsKClcbiAgY29uc3QgZmlyc3RWYWx1ZUFnZW50ID0gdXNlUmVmPGFueT4obnVsbClcbiAgY29uc3QgW2lzU2hvd1Byb2Nlc3NGaWxlcywgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaGFzRmlsZUVycm9ycywgc2V0SGFzRmlsZUVycm9yc10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG5cbiAgY29uc3QgeyBoYW5kbGVEZWxldGVBZ2VudCwgc3VjY2Vzczogc3VjY2Vzc0RlbGV0ZSwgcmVzZXRTdWNjZXNzIH0gPSB1c2VEZWxldGVBZ2VudCgpXG4gIGNvbnN0IHsgaGFuZGxlVXBkYXRlQWdlbnQsIHN1Y2Nlc3M6IHN1Y2Nlc3NVcGRhdGUsIHJlc2V0U3VjY2VzczogcmVzZXRTdWNjZXNzVXBkYXRlIH0gPSB1c2VVcGRhdGVBZ2VudCgpXG5cbiAgY29uc3Qge1xuICAgIGhhbmRsZUNyZWF0ZUFnZW50LFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nQ3JlYXRlLFxuICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NDcmVhdGUsXG4gICAgcmVzZXRTdWNjZXNzOiByZXNldFN1Y2Nlc3NDcmVhdGUsXG4gIH0gPSB1c2VDcmVhdGVBZ2VudCgpXG5cbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhclN1Y2Nlc3MsIGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG5cbiAgY29uc3Qge1xuICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVBbmRDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nS25vd2xlZGdlLFxuICAgIGVycm9yOiBlcnJvcktub3dsZWRnZSxcbiAgICBzdWNjZXNzRGVsZXRlOiBzdWNjZXNzS25vd2xlZGdlRGVsZXRlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICB9ID0gdXNlS25vd2xlZGdlT3BlcmF0aW9ucygpXG5cbiAgY29uc3Qge1xuICAgIGhhbmRsZUFjY2Vzc0NsaWVudCxcbiAgICBzdWNjZXNzOiBzdWNjZXNzVXBkYXRlQWNjZXNzLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nVXBkYXRlQWNjZXNzLFxuICAgIGhhbmRsZVJlc2V0U3VjY2VzczogcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzLFxuICB9ID0gdXNlQWNjZXNzQ2xpZW50KClcblxuICBpZiAoIXNlbGVjdG9yKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGFyZUNsaWVudHNBcnJheXNFcXVhbCA9IChjbGllbnRzMTogYW55W10gfCBudWxsLCBjbGllbnRzMjogYW55W10gfCBudWxsKSA9PiB7XG4gICAgaWYgKCFjbGllbnRzMSAmJiAhY2xpZW50czIpIHJldHVybiB0cnVlXG4gICAgaWYgKCFjbGllbnRzMSB8fCAhY2xpZW50czIpIHJldHVybiBmYWxzZVxuICAgIGlmIChjbGllbnRzMS5sZW5ndGggIT09IGNsaWVudHMyLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBjbGllbnRzMUlkcyA9IGNsaWVudHMxLm1hcChjID0+IGMuY2xpZW50SWQpLnNvcnQoKVxuICAgIGNvbnN0IGNsaWVudHMySWRzID0gY2xpZW50czIubWFwKGMgPT4gYy5jbGllbnRJZCkuc29ydCgpXG5cbiAgICByZXR1cm4gY2xpZW50czFJZHMuZXZlcnkoKGlkLCBpbmRleCkgPT4gaWQgPT09IGNsaWVudHMySWRzW2luZGV4XSlcbiAgfVxuXG4gIGNvbnN0IGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkID0gKCkgPT4ge1xuICAgIGlmICghZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/LmFjY2Vzc2liaWxpdHkgfHwgIW1vZGFsVmFsdWVzPy5hY2Nlc3NpYmlsaXR5KSByZXR1cm4gdHJ1ZVxuXG4gICAgY29uc3QgYWNjZXNzVHlwZVNhbWUgPSBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZVxuICAgIGNvbnN0IGNsaWVudHNTYW1lID0gYXJlQ2xpZW50c0FycmF5c0VxdWFsKFxuICAgICAgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5jbGllbnRzLFxuICAgICAgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuYWNjZXNzaWJpbGl0eS5jbGllbnRzXG4gICAgKVxuXG4gICAgcmV0dXJuICFhY2Nlc3NUeXBlU2FtZSB8fCAhY2xpZW50c1NhbWVcbiAgfVxuXG4gIGNvbnN0IGhhc0FjdGlvbnNDaGFuZ2VkID0gKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRBY3Rpb25zID0gWy4uLihtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZFRvb2xHcm91cHMgfHwgW10pXS5zb3J0KClcbiAgICBjb25zdCBvcmlnaW5hbEFjdGlvbnMgPSBbLi4uKGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50Py5hY3Rpb25zPy5zZWxlY3RlZFRvb2xHcm91cHMgfHwgW10pXS5zb3J0KClcblxuICAgIGlmIChjdXJyZW50QWN0aW9ucy5sZW5ndGggIT09IG9yaWdpbmFsQWN0aW9ucy5sZW5ndGgpIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gY3VycmVudEFjdGlvbnMuc29tZSgoc2x1ZywgaW5kZXgpID0+IHNsdWcgIT09IG9yaWdpbmFsQWN0aW9uc1tpbmRleF0pXG4gIH1cblxuICBjb25zdCBoYXNDb25uZWN0b3JDaGFuZ2VzID0gKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRDb25uZWN0b3JzID0gWy4uLihtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZENvbm5lY3RvcnMgfHwgW10pXS5zb3J0KClcbiAgICBjb25zdCBvcmlnaW5hbENvbm5lY3RvcnMgPSBbLi4uKGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50Py5hY3Rpb25zPy5zZWxlY3RlZENvbm5lY3RvcnMgfHwgW10pXS5zb3J0KClcblxuICAgIGlmIChjdXJyZW50Q29ubmVjdG9ycy5sZW5ndGggIT09IG9yaWdpbmFsQ29ubmVjdG9ycy5sZW5ndGgpIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gY3VycmVudENvbm5lY3RvcnMuc29tZSgoc2x1ZywgaW5kZXgpID0+IHNsdWcgIT09IG9yaWdpbmFsQ29ubmVjdG9yc1tpbmRleF0pXG4gIH1cblxuICBjb25zdCBwZXJzaXN0QWdlbnRDb25uZWN0b3JzID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGFnZW50SWQ6IHN0cmluZywgY29ubmVjdG9yU2x1Z3M6IHN0cmluZ1tdLCBwb3B1cFdpbmRvdz86IFdpbmRvdyB8IG51bGwpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2F2ZUFnZW50Q29ubmVjdG9ycyhhZ2VudElkLCBjb25uZWN0b3JTbHVncylcbiAgICAgIGNvbnN0IHBlbmRpbmdBdXRob3JpemF0aW9ucyA9IHJlc3BvbnNlLnJlcXVpcmVzX2F1dGggfHwgW11cblxuICAgICAgb3BlbkNvbm5lY3RvckF1dGhvcml6YXRpb25XaW5kb3dzKHBlbmRpbmdBdXRob3JpemF0aW9ucywgcG9wdXBXaW5kb3cpXG4gICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3QgdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSA9ICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VmFsdWVBZ2VudC5jdXJyZW50Py5nZW5lcmFsIHx8ICFtb2RhbFZhbHVlcz8uZ2VuZXJhbCkgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gKFxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5uYW1lID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLm5hbWUgJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuZW1vamkgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwuZW1vamkgJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaW50cm9kdWN0aW9uID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLmludHJvZHVjdGlvbiAmJlxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIgJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuYWlNb2RlbD8uaWQgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwuYWlNb2RlbD8uaWQgJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC51c2VyUHJvbXB0ICYmXG4gICAgICAhaGFzQWN0aW9uc0NoYW5nZWQoKSAmJlxuICAgICAgIWhhc0Nvbm5lY3RvckNoYW5nZXMoKSAmJlxuICAgICAgKG1vZGFsVmFsdWVzLmtub3dsZWRnZT8ubGVuZ3RoID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudD8ua25vd2xlZGdlPy5sZW5ndGggfHxcbiAgICAgICAgKCFtb2RhbFZhbHVlcy5rbm93bGVkZ2U/Lmxlbmd0aCAmJiAhZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/Lmtub3dsZWRnZT8ubGVuZ3RoKSkgJiZcbiAgICAgICFhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBkYXRlPy5sZW5ndGggJiZcbiAgICAgICFhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlPy5sZW5ndGggJiZcbiAgICAgICFoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFzQW55VmFsdWVGb3JDcmVhdGlvbiA9ICgpID0+IHtcbiAgICBpZiAobW9kYWxWYWx1ZXMuaXNFZGl0aW5nKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGlzRGVmYXVsdEFpTW9kZWwgPSAhIWFnZW50TW9kZWxzLmxlbmd0aCAmJiBtb2RhbFZhbHVlcy5nZW5lcmFsLmFpTW9kZWw/LmlkID09PSBhZ2VudE1vZGVsc1swXT8uaWRcblxuICAgIGNvbnN0IGRlZmF1bHRJbnB1dFBsYWNlaG9sZGVyID0gdCgnZ2VuZXJhbFNlY3Rpb24uaW5wdXRQbGFjZWhvbGRlcicpXG4gICAgY29uc3QgaXNEZWZhdWx0SW5wdXRQbGFjZWhvbGRlciA9IG1vZGFsVmFsdWVzLmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlciA9PT0gZGVmYXVsdElucHV0UGxhY2Vob2xkZXJcblxuICAgIGNvbnN0IGRlZmF1bHRVc2VyUHJvbXB0UGxhY2Vob2xkZXIgPSB0KCdnZW5lcmFsU2VjdGlvbi5pbml0aWFsUHJvbXB0UGxhY2Vob2xkZXInKVxuICAgIGNvbnN0IGlzRGVmYXVsdFVzZXJQcm9tcHQgPVxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC51c2VyUHJvbXB0ID09PSBkZWZhdWx0VXNlclByb21wdFBsYWNlaG9sZGVyIHx8XG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09ICcnIHx8XG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09IG51bGxcblxuICAgIGNvbnN0IGhhc05hbWUgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLm5hbWUudHJpbSgpICE9PSAnJ1xuICAgIGNvbnN0IGhhc0Vtb2ppID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5lbW9qaS50cmltKCkgIT09ICcnXG4gICAgY29uc3QgaGFzSW50cm9kdWN0aW9uID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pbnRyb2R1Y3Rpb24udHJpbSgpICE9PSAnJ1xuICAgIGNvbnN0IGhhc0lucHV0UGxhY2Vob2xkZXIgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIudHJpbSgpICE9PSAnJyAmJiAhaXNEZWZhdWx0SW5wdXRQbGFjZWhvbGRlclxuICAgIGNvbnN0IGhhc1VzZXJQcm9tcHQgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQ/LnRyaW0oKSAhPT0gJycgJiYgIWlzRGVmYXVsdFVzZXJQcm9tcHRcbiAgICBjb25zdCBoYXNLbm93bGVkZ2UgPSAhIW1vZGFsVmFsdWVzLmtub3dsZWRnZS5sZW5ndGhcbiAgICBjb25zdCBoYXNDdXN0b21BaU1vZGVsID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5haU1vZGVsICYmICFpc0RlZmF1bHRBaU1vZGVsXG4gICAgY29uc3QgaGFzQWNjZXNzaWJpbGl0eSA9IG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknXG4gICAgY29uc3QgaGFzQWN0aW9ucyA9ICEhbW9kYWxWYWx1ZXMuYWN0aW9ucz8uc2VsZWN0ZWRUb29sR3JvdXBzPy5sZW5ndGhcbiAgICBjb25zdCBoYXNDb25uZWN0b3JzID0gISFtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZENvbm5lY3RvcnM/Lmxlbmd0aFxuXG4gICAgcmV0dXJuIChcbiAgICAgIGhhc05hbWUgfHxcbiAgICAgIGhhc0Vtb2ppIHx8XG4gICAgICBoYXNJbnRyb2R1Y3Rpb24gfHxcbiAgICAgIGhhc0lucHV0UGxhY2Vob2xkZXIgfHxcbiAgICAgIGhhc1VzZXJQcm9tcHQgfHxcbiAgICAgIGhhc0tub3dsZWRnZSB8fFxuICAgICAgaGFzQ3VzdG9tQWlNb2RlbCB8fFxuICAgICAgaGFzQWNjZXNzaWJpbGl0eSB8fFxuICAgICAgaGFzQWN0aW9ucyB8fFxuICAgICAgaGFzQ29ubmVjdG9yc1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhc0NoYW5nZXNGb3JFZGl0aW5nID0gKCkgPT4ge1xuICAgIGlmICghbW9kYWxWYWx1ZXMuaXNFZGl0aW5nKSByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiAoXG4gICAgICAhdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSgpIHx8XG4gICAgICAhIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUubGVuZ3RoIHx8XG4gICAgICAhIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFzUGVuZGluZ0NoYW5nZXMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGhhc0FueVZhbHVlRm9yQ3JlYXRpb24oKSB8fCBoYXNDaGFuZ2VzRm9yRWRpdGluZygpXG4gIH1cblxuICAvLyBIZWxwZXIgcGFyYSBtYW5lamFyIGVsIHRvZ2dsZSBkZSBmYXZvcml0byB5IGFjdHVhbGl6YXIgZWwgZXN0YWRvIGNvbiBvcmRlbmFtaWVudG9cbiAgY29uc3QgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudCA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudElkOiBzdHJpbmcsIGFnZW50OiBBZ2VudCwgb25TdWNjZXNzPzogKHVwZGF0ZWRBZ2VudDogQWdlbnQpID0+IHZvaWQsIG9uRXJyb3I/OiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICB0b2dnbGVGYXZvcml0ZShcbiAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgdXBkYXRlZEFnZW50ID0+IHtcbiAgICAgICAgICAvLyBBY3R1YWxpemFyIGVsIGVzdGFkbyBkZSBhZ2VudGVzIGNvbiBlbCByZXN1bHRhZG8gZGVsIHNlcnZpZG9yIHkgb3JkZW5hclxuICAgICAgICAgIHVwZGF0ZUFnZW50RmF2b3JpdGUodXBkYXRlZEFnZW50LCB0cnVlKVxuICAgICAgICAgIGlmIChvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIG9uU3VjY2Vzcyh1cGRhdGVkQWdlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgICAgIG9uRXJyb3IoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYWdlbnQuaXNfZmF2b3JpdGVcbiAgICAgIClcbiAgICB9LFxuICAgIFt0b2dnbGVGYXZvcml0ZSwgdXBkYXRlQWdlbnRGYXZvcml0ZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKHNraXBDb25maXJtYXRpb24gPSBmYWxzZSkgPT4ge1xuICAgIGlmICghc2tpcENvbmZpcm1hdGlvbiAmJiBoYXNQZW5kaW5nQ2hhbmdlcygpICYmICFzdWNjZXNzQ3JlYXRlICYmICFzdWNjZXNzVXBkYXRlICYmICFzdWNjZXNzRGVsZXRlKSB7XG4gICAgICBjb25zdCBjb25maXJtTWVzc2FnZSA9IG1vZGFsVmFsdWVzLmlzRWRpdGluZyA/IHQoJ2NvbmZpcm1DbG9zZUVkaXRBZ2VudCcpIDogdCgnY29uZmlybUNsb3NlQ3JlYXRlQWdlbnQnKVxuXG4gICAgICBpZiAoIXdpbmRvdy5jb25maXJtKGNvbmZpcm1NZXNzYWdlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRNb2RhbFZhbHVlcyhpbml0aWFsVmFsdWVzKVxuICAgIGhhbmRsZUNsZWFuQWdlbnQoKVxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUoKVxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50ID0ge1xuICAgICAgdG9EZWxldGU6IFtdLFxuICAgICAgdG9VcGxvYWQ6IFtdLFxuICAgIH1cbiAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICB9XG4gICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKGZhbHNlKVxuICAgIHNldElzU3Vic2NyaWJlZChmYWxzZSlcbiAgICBzZXRGaWxlc1Byb2Nlc3NlZCgwKVxuICAgIHNldFNlY3Rpb24oJ2dlbmVyYWwnKVxuICAgIHNldElzT3BlbihmYWxzZSlcbiAgICBhZ2VudENyZWF0ZWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCA9IG51bGxcbiAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICBwZW5kaW5nVHJpZ2dlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmICFpc1Nob3dQcm9jZXNzRmlsZXMpIHtcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVTZWN0aW9uQ2hhbmdlID0gKG5ld1NlY3Rpb246IEFibVNlY3Rpb24pID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMudGFiU2VjdGlvbiwgeyBvcHRpb246IG5ld1NlY3Rpb24gfSlcbiAgICBzZXRTZWN0aW9uKG5ld1NlY3Rpb24pXG4gIH1cblxuICBjb25zdCBoYW5kbGVTZXRBZ2VudFZhbHVlc0J5S2V5cyA9ICh7XG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgIGRlbGV0ZUtub3dsZWRnZSxcbiAgfToge1xuICAgIGtleTogc3RyaW5nXG4gICAgdmFsdWU6IHVua25vd25cbiAgICBkZWxldGVLbm93bGVkZ2U/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICBpZiAoa2V5ID09PSAna25vd2xlZGdlJykge1xuICAgICAgY29uc3QgbmV4dEtub3dsZWRnZSA9ICh2YWx1ZSBhcyBBdHRhY2htZW50RmlsZVtdIHwgdW5kZWZpbmVkKSB8fCBbXVxuICAgICAgaWYgKCFkZWxldGVLbm93bGVkZ2UpIHtcbiAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5wdXNoKC4uLm5leHRLbm93bGVkZ2UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmaWxlc1ByZXZJZHMgPSBuZXh0S25vd2xlZGdlLmxlbmd0aCA/IG5ldyBTZXQobmV4dEtub3dsZWRnZS5tYXAoZmlsZSA9PiBmaWxlLmlkKSkgOiBuZXcgU2V0KClcbiAgICAgICAgY29uc3QgbmV3RmlsZXMgPSBtb2RhbFZhbHVlcy5rbm93bGVkZ2UuZmlsdGVyKGZpbGUgPT4gIWZpbGVzUHJldklkcy5oYXMoZmlsZS5pZCkgJiYgZmlsZS5zdGF0dXMgIT09ICdzdGFydGVkJylcbiAgICAgICAgaWYgKCFuZXdGaWxlcy5sZW5ndGggJiYgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZUlkcyA9IG5ldyBTZXQobmV4dEtub3dsZWRnZS5tYXAoZmlsZSA9PiBmaWxlLmlkKSlcbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5maWx0ZXIoZmlsZSA9PiB2YWx1ZUlkcy5oYXMoZmlsZS5pZCkpXG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSA9IFsuLi4oYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSB8fCBbXSksIC4uLm5ld0ZpbGVzXVxuICAgICAgfVxuICAgIH1cbiAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IGtub3dsZWRnZUZpbGVzID1cbiAgICAgICAga2V5ID09PSAna25vd2xlZGdlJ1xuICAgICAgICAgID8gZGVsZXRlS25vd2xlZGdlXG4gICAgICAgICAgICA/ICh2YWx1ZSBhcyBBdHRhY2htZW50RmlsZVtdKVxuICAgICAgICAgICAgOiBbLi4uKHByZXYua25vd2xlZGdlIHx8IFtdKSwgLi4uKCh2YWx1ZSBhcyBBdHRhY2htZW50RmlsZVtdKSB8fCBbXSldXG4gICAgICAgICAgOiBudWxsXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICAuLi4oa2V5ID09PSAna25vd2xlZGdlJ1xuICAgICAgICAgID8geyBrbm93bGVkZ2U6IGtub3dsZWRnZUZpbGVzIH1cbiAgICAgICAgICA6IGtleSA9PT0gJ2FjY2Vzc2liaWxpdHknXG4gICAgICAgICAgICA/IHsgYWNjZXNzaWJpbGl0eTogdmFsdWUgfVxuICAgICAgICAgICAgOiBrZXkgPT09ICdhY3Rpb25zJ1xuICAgICAgICAgICAgICA/IHsgYWN0aW9uczogdmFsdWUgfVxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgICAgICAgICAgICBba2V5XTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVDb25maXJtQWN0aW9uID0gYXN5bmMgKGNoYXQ6IGFueSwgYWN0aW9uOiAnZGVsZXRlJyB8ICd1cGRhdGUnIHwgJ2NyZWF0ZScpID0+IHtcbiAgICAvLyBTb2xvIHBlcm1pdGlyIG9wZXJhY2lvbmVzIGRlIGFnZW50ZXMgY3VzdG9tIHNpIGxhIGZlYXR1cmUgZmxhZyBlc3TDoSBoYWJpbGl0YWRhXG4gICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5kZWxldGUpXG4gICAgICBoYW5kbGVEZWxldGVBZ2VudChjaGF0LmlkIGFzIHVua25vd24gYXMgc3RyaW5nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5jb25maXJtQWN0aW9uLCB7IG9wdGlvbjogbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gJ2VkaXRlJyA6ICdjcmVhdGUnIH0pXG4gICAgaWYgKG1vZGFsVmFsdWVzLmFjdGlvbnM/LnNlbGVjdGVkQ29ubmVjdG9ycz8ubGVuZ3RoKSB7XG4gICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCA9IHdpbmRvdy5vcGVuKCcnLCAnX2JsYW5rJywgJ3BvcHVwPXllcyx3aWR0aD01NjAsaGVpZ2h0PTc2MCcpXG4gICAgfVxuICAgIC8vIEFsIHJlaW50ZW50YXIgZ3VhcmRhciwgbGliZXJhciBlbCBmcmVubyBkZWwgdGltZW91dCBwcmV2aW8gcGFyYSBxdWUgbG9zXG4gICAgLy8gdXNlRWZmZWN0IGRlIHBvc3QtZ3VhcmRhZG8gdnVlbHZhbiBhIHBvZGVyIGRpc3BhcmFyIHNuYWNrYmFycyB5IGNlcnJhci5cbiAgICBwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBpZiAobW9kYWxWYWx1ZXMuaXNFZGl0aW5nKSB7XG4gICAgICBjb25zdCBjb25uZWN0b3JDaGFuZ2VzID0gaGFzQ29ubmVjdG9yQ2hhbmdlcygpXG5cbiAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkICYmIGNvbm5lY3RvckNoYW5nZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBwZXJzaXN0QWdlbnRDb25uZWN0b3JzKFxuICAgICAgICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgbW9kYWxWYWx1ZXMuYWN0aW9ucz8uc2VsZWN0ZWRDb25uZWN0b3JzIHx8IFtdLFxuICAgICAgICAgICAgY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnRcbiAgICAgICAgICApXG4gICAgICAgICAgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICAuLi5maXJzdFZhbHVlQWdlbnQuY3VycmVudCxcbiAgICAgICAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgICAgICAgLi4uZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/LmFjdGlvbnMsXG4gICAgICAgICAgICAgIHNlbGVjdGVkQ29ubmVjdG9yczogWy4uLihtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZENvbm5lY3RvcnMgfHwgW10pXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnZXJyb3JBZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgICBpZiAoY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQgJiYgIWNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50LmNsb3NlZCkge1xuICAgICAgICAgICAgY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQuY2xvc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCAmJiAhY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQuY2xvc2VkKSB7XG4gICAgICAgIGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50LmNsb3NlKClcbiAgICAgICAgY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSgpKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZVVwZGF0ZUFnZW50KG1vZGFsVmFsdWVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbm5lY3RvckNoYW5nZXMpIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWQnKSlcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBoYW5kbGVDcmVhdGVBZ2VudChtb2RhbFZhbHVlcylcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNldEFnZW50VmFsdWVzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnRWYWx1ZXMgfSA9IGV2ZW50LmRldGFpbFxuICAgICAgY29uc3QgaW5pdGlhbFNlY3Rpb24gPSBhZ2VudFZhbHVlcz8uaW5pdGlhbFNlY3Rpb24gYXMgQWJtU2VjdGlvbiB8IHVuZGVmaW5lZFxuICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPVxuICAgICAgICBpbml0aWFsU2VjdGlvbiAmJiBbJ2dlbmVyYWwnLCAna25vd2xlZGdlJywgJ2FjY2Vzc2liaWxpdHknLCAnYWN0aW9ucyddLmluY2x1ZGVzKGluaXRpYWxTZWN0aW9uKVxuICAgICAgICAgID8gaW5pdGlhbFNlY3Rpb25cbiAgICAgICAgICA6IG51bGxcblxuICAgICAgZ2V0QWxsQWdlbnRNb2RlbHMoKVxuICAgICAgc2V0SXNPcGVuKHRydWUpXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcblxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYWdlbnRWYWx1ZXMudmFsdWVzPy5pc0VkaXRpbmcpIHtcbiAgICAgICAgLy8gVmFsaWRhciBxdWUgbGEgZmVhdHVyZSBmbGFnIGVzdMOpIGhhYmlsaXRhZGEgYW50ZXMgZGUgY2FyZ2FyIGVsIGFnZW50ZSBwYXJhIGVkaXRhclxuICAgICAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFjY2Vzc0RlbmllZCcpKVxuICAgICAgICAgIHNldElzT3BlbihmYWxzZSlcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChhZ2VudFZhbHVlcy5wcmVmZXRjaGVkQWdlbnRCeUlkKSB7XG4gICAgICAgICAgaGFuZGxlQ2xlYW5BZ2VudCgpXG4gICAgICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gYWdlbnRWYWx1ZXMucHJlZmV0Y2hlZEFnZW50QnlJZFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGhhbmRsZUdldEFnZW50QnlJZChhZ2VudFZhbHVlcz8udmFsdWVzPy5nZW5lcmFsPy5pZCBhcyB1bmtub3duIGFzIHN0cmluZylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChhZ2VudFZhbHVlcy52YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlcyA9IHtcbiAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLFxuICAgICAgICAgIC4uLmFnZW50VmFsdWVzLnZhbHVlcyxcbiAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLmdlbmVyYWwsXG4gICAgICAgICAgICAuLi4oYWdlbnRWYWx1ZXMudmFsdWVzLmdlbmVyYWwgfHwge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgICAgICAgLi4uaW5pdGlhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LFxuICAgICAgICAgICAgLi4uKGFnZW50VmFsdWVzLnZhbHVlcy5hY2Nlc3NpYmlsaXR5IHx8IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLmluaXRpYWxWYWx1ZXMuYWN0aW9ucyxcbiAgICAgICAgICAgIC4uLihhZ2VudFZhbHVlcy52YWx1ZXMuYWN0aW9ucyB8fCB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBrbm93bGVkZ2U6IGFnZW50VmFsdWVzLnZhbHVlcy5rbm93bGVkZ2UgfHwgW10sXG4gICAgICAgIH1cblxuICAgICAgICBmaXJzdFZhbHVlQWdlbnQuY3VycmVudCA9IG5leHRWYWx1ZXNcbiAgICAgICAgc2V0TW9kYWxWYWx1ZXMobmV4dFZhbHVlcylcbiAgICAgIH1cblxuICAgICAgaWYgKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ICYmICFhZ2VudFZhbHVlcy52YWx1ZXM/LmlzRWRpdGluZykge1xuICAgICAgICBzZXRTZWN0aW9uKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50KVxuICAgICAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIGhhbmRsZVNldEFnZW50VmFsdWVzKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIGhhbmRsZVNldEFnZW50VmFsdWVzIGFzIEV2ZW50TGlzdGVuZXIpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyB1c2VFZmZlY3QgdG8gaGFuZGxlIHRoZSBvdmVyZmxvdyBvZiB0aGUgYm9keSB3aGVuIHRoZSBtb2RhbCBpcyBvcGVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxPdmVyZmxvdyA9IGJvZHkuc3R5bGUub3ZlcmZsb3dcbiAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gb3JpZ2luYWxPdmVyZmxvd1xuICAgIH1cbiAgfSwgW2lzT3Blbl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVCZWZvcmVVbmxvYWQgPSAoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IHQoJ2NvbmZpcm1SZWxvYWRCcm93c2VyJylcbiAgICAgICAgcmV0dXJuIHQoJ2NvbmZpcm1SZWxvYWRCcm93c2VyJylcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgaGFuZGxlQmVmb3JlVW5sb2FkKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgaGFuZGxlQmVmb3JlVW5sb2FkKVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgaGFzUGVuZGluZ0NoYW5nZXMsIHRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN1Y2Nlc3NEZWxldGUpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnREZWxldGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3MoKVxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCA9PT0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCkge1xuICAgICAgICBzZWxlY3RGaXJzdEFnZW50KGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCBhcyBzdHJpbmcpXG4gICAgICB9XG4gICAgICByZW1vdmVBZ2VudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKVxuICAgICAgc2V0U2hvd01vZGFsRGVsZXRlKGZhbHNlKVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH1cbiAgfSwgW3N1Y2Nlc3NEZWxldGVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRXZpdGFyIGVqZWN1Y2nDs24gbcO6bHRpcGxlIGRlbCBlZmVjdG9cbiAgICBpZiAoc3VjY2Vzc0NyZWF0ZSAmJiAhaXNMb2FkaW5nQ3JlYXRlICYmIGFnZW50Q3JlYXRlZFJlZi5jdXJyZW50ICE9PSBzdWNjZXNzQ3JlYXRlLmlkKSB7XG4gICAgICBhZ2VudENyZWF0ZWRSZWYuY3VycmVudCA9IHN1Y2Nlc3NDcmVhdGUuaWRcbiAgICAgIGlmIChtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZENvbm5lY3RvcnM/Lmxlbmd0aCkge1xuICAgICAgICBwZXJzaXN0QWdlbnRDb25uZWN0b3JzKFxuICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBtb2RhbFZhbHVlcy5hY3Rpb25zLnNlbGVjdGVkQ29ubmVjdG9ycyxcbiAgICAgICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudFxuICAgICAgICApLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgYWdlbnQgY29ubmVjdG9ycyBhZnRlciBjcmVhdGU6JywgZXJyb3IpXG4gICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFnZW50Q3JlYXRlZCcpKVxuICAgICAgICAgIGlmIChjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCAmJiAhY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQuY2xvc2VkKSB7XG4gICAgICAgICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudC5jbG9zZSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCAmJiAhY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQuY2xvc2VkKSB7XG4gICAgICAgIGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50LmNsb3NlKClcbiAgICAgICAgY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgICBpZiAocGVuZGluZ1RyaWdnZXJSZWYuY3VycmVudCkge1xuICAgICAgICBjcmVhdGVTY2hlZHVsZSh7IC4uLnBlbmRpbmdUcmlnZ2VyUmVmLmN1cnJlbnQsIGFnZW50X2V4dGVybmFsX2lkOiBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCkgfSkuY2F0Y2goZXJyID0+XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY3JlYXRpbmcgcGVuZGluZyB0cmlnZ2VyOicsIGVycilcbiAgICAgICAgKVxuICAgICAgICBwZW5kaW5nVHJpZ2dlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUubGVuZ3RoICYmIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBhY2Nlc2liaWxpZGFkIHBlcm8gaGF5IGFyY2hpdm9zLCBlc3RhYmxlY2VyIGVsIGNvbnRleHRvIHBhcmEgY3JlYWNpw7NuXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICBmaWxlc1RvRGVsZXRlOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLFxuICAgICAgICAgICAgZmlsZXNUb0NyZWF0ZTogYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZCxcbiAgICAgICAgICAgIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuXG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVybyBoYXkgYXJjaGl2b3MsIGVzdGFibGVjZXIgZWwgY29udGV4dG8gcGFyYSBjcmVhY2nDs25cbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtcbiAgICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBhY2Nlc2liaWxpZGFkIHBlcm8gaGF5IGFyY2hpdm9zLCBlc3RhYmxlY2VyIGVsIGNvbnRleHRvIHBhcmEgY3JlYWNpw7NuXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyh7IGZpbGVzOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLCBhZ2VudElkOiBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCkgfSksXG4gICAgICAgIF1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlICE9PSAnY29tcGFueScpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKGhhbmRsZUFjY2Vzc0NsaWVudChzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaXNfZmF2b3JpdGUpIHtcbiAgICAgICAgICBjb25zdCBhZ2VudFdpdGhGYXZvcml0ZSA9IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfVxuICAgICAgICAgIGFkZEFnZW50KGFnZW50V2l0aEZhdm9yaXRlKVxuICAgICAgICAgIC8vIEN1YW5kbyBzZSBjcmVhIHVuIGFnZW50ZSBudWV2bywgZWwgc2Vydmlkb3Igbm8gdGllbmUgZWwgZmF2b3JpdG8gbWFyY2FkbyBhw7puXG4gICAgICAgICAgLy8gRW50b25jZXMgY3VycmVudElzRmF2b3JpdGUgZGViZSBzZXIgZmFsc2UgcGFyYSBxdWUgZWwgdG9nZ2xlIGxvIG1hcnF1ZSBjb21vIHRydWVcbiAgICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiBmYWxzZSB9XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudChcbiAgICAgICAgICAgICAgICBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgYWdlbnRGb3JUb2dnbGUsXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVzb2x2ZSgpLFxuICAgICAgICAgICAgICAgICgpID0+IHJlamVjdCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZEFnZW50KHN1Y2Nlc3NDcmVhdGUpXG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyh0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAvLyBTb2xvIHJlc2V0ZWFyIGVsIGNvbnRleHRvIHNpIE5PIHNlIGhhIGxsYW1hZG8gdG9kYXbDrWFcbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgIGNvbnN0IHsgaGFzQWN0aW9uRmlsZXMgfSA9IGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudFxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogaGFzQWN0aW9uRmlsZXMgfHwgZmFsc2UsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0JlZW5DYWxsZWQpIHtcbiAgICAgICAgICBoYW5kbGVBY2Nlc3NDbGllbnQoc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KVxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBoYW5kbGVBY2Nlc3NDbGllbnQsIGVsIGFnZW50ZSBzZSBhZ3JlZ2Fyw6EgeSBlbCB0b2dnbGUgc2UgaGFyw6EgZW4gc3VjY2Vzc1VwZGF0ZUFjY2Vzc1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGZhdm9yaXRlIGlmIGl0IHdhcyBtYXJrZWQgZHVyaW5nIGNyZWF0aW9uXG4gICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAvLyBQcmltZXJvIGFncmVnYXIgZWwgYWdlbnRlIGEgbGEgbGlzdGEgKGFkZEFnZW50IHlhIG9yZGVuYSlcbiAgICAgICAgY29uc3QgYWdlbnRXaXRoRmF2b3JpdGUgPSB7IC4uLnN1Y2Nlc3NDcmVhdGUsIGlzX2Zhdm9yaXRlOiB0cnVlIH1cbiAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG5cbiAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgLy8gRW50b25jZXMgY3VycmVudElzRmF2b3JpdGUgZGViZSBzZXIgZmFsc2UgcGFyYSBxdWUgZWwgdG9nZ2xlIGxvIG1hcnF1ZSBjb21vIHRydWVcbiAgICAgICAgY29uc3QgYWdlbnRGb3JUb2dnbGUgPSB7IC4uLmFnZW50V2l0aEZhdm9yaXRlLCBpc19mYXZvcml0ZTogZmFsc2UgfVxuICAgICAgICAvLyBMdWVnbyBoYWNlciBlbCB0b2dnbGUgZGUgZmF2b3JpdG8gZW4gZWwgc2Vydmlkb3IgeSBhY3R1YWxpemFyIGVsIGVzdGFkb1xuICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICB1cGRhdGVkQWdlbnQgPT4ge1xuICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7IG9wdGlvbjogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlID8gJ2FkZCcgOiAncmVtb3ZlJyB9KVxuICAgICAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgICAgIHNlbGVjdEFnZW50KHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiB1cGRhdGVkQWdlbnQuaXNfZmF2b3JpdGUgfSlcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7IG9wdGlvbjogJ2FkZCcgfSlcbiAgICAgICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFdpdGhGYXZvcml0ZSlcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGlzTG9hZGluZ0NyZWF0ZSxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2VzcyxcbiAgICB0LFxuICAgIGFkZEFnZW50LFxuICAgIHNlbGVjdEFnZW50LFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgICByZXNldFN1Y2Nlc3NDcmVhdGUsXG4gICAgaGFuZGxlQ2xvc2UsXG4gICAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzVXBkYXRlKSB7XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGggJiYgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlXVxuICAgICAgICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBbLi4uYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZF1cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlID0gW11cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gW11cblxuICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMoe1xuICAgICAgICAgICAgICBmaWxlc1RvRGVsZXRlLFxuICAgICAgICAgICAgICBmaWxlc1RvQ3JlYXRlOiBmaWxlc1RvVXBsb2FkLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlXVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUgPSBbXVxuXG4gICAgICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICAgIGZpbGVzOiBmaWxlc1RvRGVsZXRlLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ3VwZGF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCkge1xuICAgICAgICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBbLi4uYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZF1cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gW11cblxuICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMoe1xuICAgICAgICAgICAgICBmaWxlczogZmlsZXNUb1VwbG9hZCxcbiAgICAgICAgICAgICAgYWdlbnRJZDogbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi4oaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKVxuICAgICAgICAgICAgICA/IFtoYW5kbGVBY2Nlc3NDbGllbnQobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KV1cbiAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgXSlcbiAgICAgICAgfVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgLy8gU29sbyByZXNldGVhciBlbCBjb250ZXh0byBzaSBOTyBzZSBoYSBsbGFtYWRvIHRvZGF2w61hIHkgTk8gaGF5IGFyY2hpdm9zIHBlbmRpZW50ZXNcbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCAmJiAhYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICd1cGRhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpIHtcbiAgICAgICAgICAvLyBMbGFtYXIgYSBoYW5kbGVBY2Nlc3NDbGllbnQgc29sbyB1bmEgdmV6XG4gICAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgICAgaGFuZGxlQWNjZXNzQ2xpZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSlcbiAgICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gU29sbyBjZXJyYXIgc2kgbm8gaGF5IGFyY2hpdm9zIHNpZW5kbyBwcm9jZXNhZG9zIG5pIGFjY2VzcyBwZW5kaWVudGVcbiAgICAgIGlmIChcbiAgICAgICAgIWhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ICYmXG4gICAgICAgICFpc1Nob3dQcm9jZXNzRmlsZXMgJiZcbiAgICAgICAgIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoICYmXG4gICAgICAgICFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQWN0aW9uRmlsZXMgJiZcbiAgICAgICAgIXN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiZcbiAgICAgICAgIXByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnRcbiAgICAgICkge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50VXBkYXRlZCcpKVxuICAgICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgICBpZiAoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkID09PSBzdWNjZXNzVXBkYXRlLmlkKSB7XG4gICAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJykpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBzdWNjZXNzVXBkYXRlLFxuICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQsXG4gICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgdXBkYXRlQWdlbnQsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZSxcbiAgICBoYW5kbGVDbG9zZSxcbiAgXSlcblxuICBjb25zdCBoYW5kbGVQcm9jZXNzRmlsZXNUaW1lb3V0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiYgIWlzU2hvd1Byb2Nlc3NGaWxlcykgcmV0dXJuXG5cbiAgICAvLyBBbCBjdW1wbGlyc2UgZWwgdGltZW91dCBhc3VtaW1vcyBxdWUgZWwgZ3VhcmRhZG8gZGVsIGFnZW50ZSBmdWUgZXhpdG9zb1xuICAgIC8vIChlbCBzZXJ2ZXIgcmVzcG9uZGnDsyBPSykgeSBxdWUgbG9zIGFyY2hpdm9zIHNlIGVudmlhcm9uIGNvcnJlY3RhbWVudGUuXG4gICAgLy8gU29sbyBwZXJkaW1vcyBsYSBjb25maXJtYWNpw7NuIGFzaW5jcsOzbmljYSBkZWwgV2ViU29ja2V0IHNvYnJlIHN1XG4gICAgLy8gcHJvY2VzYW1pZW50by4gQ2VycmFtb3MgdG9kbyBtb3N0cmFuZG8gZWwgc25hY2tiYXIgZGUgw6l4aXRvIHF1ZSBodWJpZXNlXG4gICAgLy8gZGlzcGFyYWRvIGVsIGZsdWpvIG5vcm1hbCBkZSDDqXhpdG8uXG5cbiAgICAvLyBGcmVubyBwYXJhIHF1ZSBsb3MgdXNlRWZmZWN0IGRlIHBvc3QtZ3VhcmRhZG8gbm8gcmUtZGlzcGFyZW4gc25hY2tiYXJzXG4gICAgLy8gbyBjaWVycmVzIGR1cGxpY2Fkb3MgY3VhbmRvIHNldElzU2hvd1Byb2Nlc3NGaWxlcyhmYWxzZSkgbG9zIGdhdGlsbGUuXG4gICAgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudCA9IHRydWVcblxuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcgJiYgc3VjY2Vzc1VwZGF0ZSkge1xuICAgICAgdXBkYXRlQWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgIGlmIChjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQgPT09IHN1Y2Nlc3NVcGRhdGUuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgIH0gZWxzZSBpZiAoIW1vZGFsVmFsdWVzLmlzRWRpdGluZyAmJiBzdWNjZXNzQ3JlYXRlKSB7XG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlKClcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcygpXG5cbiAgICBoYW5kbGVDbG9zZSgpXG4gIH0sIFtcbiAgICBpc1Nob3dQcm9jZXNzRmlsZXMsXG4gICAgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nLFxuICAgIHN1Y2Nlc3NVcGRhdGUsXG4gICAgc3VjY2Vzc0NyZWF0ZSxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICBjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlLFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlQ2xvc2UsXG4gIF0pXG5cbiAgY29uc3Qgd2ViU29ja2V0RnVuY3Rpb24gPSAoeyBtb2RlbF9kYXRhOiBtb2RlbERhdGEgfTogeyBtb2RlbF9kYXRhOiBhbnkgfSkgPT4ge1xuICAgIGNvbnN0IGZpbGVTdGF0dXMgPSBtb2RlbERhdGFcbiAgICBpZiAoZmlsZVN0YXR1cy5zdGF0dXMgPT09ICdkb25lJyB8fCBmaWxlU3RhdHVzLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkS25vd2xlZGdlID0gcHJldi5rbm93bGVkZ2UubWFwKGZpbGUgPT4ge1xuICAgICAgICAgIGlmIChmaWxlLm5hbWUgPT09IGZpbGVTdGF0dXMuZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmZpbGUsXG4gICAgICAgICAgICAgIHN0YXR1czogZmlsZVN0YXR1cy5zdGF0dXMsXG4gICAgICAgICAgICAgIGlkOiBmaWxlU3RhdHVzLmtub3dsZWRnZV9iYXNlX2lkIHx8IGZpbGUuaWQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaWxlXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGhhc1BlbmRpbmdGaWxlcyA9IHVwZGF0ZWRLbm93bGVkZ2Uuc29tZShmaWxlID0+IGZpbGUuc3RhdHVzID09PSAncGVuZGluZycpXG4gICAgICAgIGNvbnN0IGhhc0Vycm9yRmlsZXMgPSB1cGRhdGVkS25vd2xlZGdlLnNvbWUoZmlsZSA9PiBmaWxlLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpXG4gICAgICAgIGlmIChoYXNFcnJvckZpbGVzICYmICFoYXNQZW5kaW5nRmlsZXMpIHtcbiAgICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IoXG4gICAgICAgICAgICBtb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyB0KCdjb25maXJtQWdlbnRVcGRhdGVkV2l0aEZpbGVzRXJyb3InKSA6IHQoJ2NvbmZpcm1BZ2VudFdpdGhGaWxlc0Vycm9yJylcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc1BlbmRpbmdGaWxlcyAmJiAhaGFzRXJyb3JGaWxlcykge1xuICAgICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXMoZmFsc2UpXG5cbiAgICAgICAgICAvLyBTaSBoYWLDrWEgYWNjZXNzIHBlbmRpZW50ZSB5IHlhIGVzdGFiYSBtYW5lamFkbywgZm9yemFyIHF1ZSBlbCB1c2VFZmZlY3QgZGUgYWNjZXNzIHNlIGVqZWN1dGUgZGUgbnVldm9cbiAgICAgICAgICBpZiAoYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzICYmIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgc2V0RmlsZXNQcm9jZXNzZWQocHJldkNvdW50ID0+IHByZXZDb3VudCArIDEpXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgICAgICAgIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgICAgICAgIWZpbGVzRmluaXNoZWRSZWYuY3VycmVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gU2kgZXMgY3JlYWNpw7NuIHNpbiBhY2Nlc2liaWxpZGFkLCBtYXJjYXIgcXVlIGxvcyBhcmNoaXZvcyB0ZXJtaW5hcm9uXG4gICAgICAgICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgICBzZXRGaWxlc1Byb2Nlc3NlZChwcmV2Q291bnQgPT4gcHJldkNvdW50ICsgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgIGtub3dsZWRnZTogdXBkYXRlZEtub3dsZWRnZSxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzS25vd2xlZGdlRGVsZXRlICYmICFpc0xvYWRpbmdLbm93bGVkZ2UgJiYgIWVycm9yS25vd2xlZGdlKSB7XG4gICAgICAvLyBTb2xvIGNlcnJhciBzaSBOTyBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3NcbiAgICAgIGlmIChoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCB8fCBpc1Nob3dQcm9jZXNzRmlsZXMgfHwgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBTaSBlbCBsb2FkZXIgc2UgY2VycsOzIHBvciB0aW1lb3V0LCBubyBtb3N0cmFyIHNuYWNrYmFyIGRlIMOpeGl0byBuaSBjZXJyYXJcbiAgICAgIGlmIChwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWQnKSlcbiAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfVxuICAgIGlmIChlcnJvcktub3dsZWRnZSkge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcihcbiAgICAgICAgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gdCgnY29uZmlybUFnZW50VXBkYXRlZFdpdGhGaWxlc0Vycm9yJykgOiB0KCdjb25maXJtQWdlbnRXaXRoRmlsZXNFcnJvcicpXG4gICAgICApXG4gICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIH1cbiAgfSwgW3N1Y2Nlc3NLbm93bGVkZ2VEZWxldGUsIGlzTG9hZGluZ0tub3dsZWRnZSwgZXJyb3JLbm93bGVkZ2UsIGlzU2hvd1Byb2Nlc3NGaWxlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50XG5cbiAgICAvLyBTaSBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3MsIGVzcGVyYXIgYSBxdWUgdGVybWluZW5cbiAgICBpZiAoY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJiAoaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgfHwgaXNTaG93UHJvY2Vzc0ZpbGVzKSkge1xuICAgICAgLy8gU2kgc3VjY2Vzc1VwZGF0ZUFjY2VzcyBlc3TDoSBhY3Rpdm8sIG1hcmNhciBjb21vIG1hbmVqYWRvIHBlcm8gTk8gcmVzZXRlYXIgaGFzdGEgcXVlIHRlcm1pbmVuIGxvcyBhcmNoaXZvc1xuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiYgIWFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTaSB5YSBmdWUgbWFuZWphZG8geSBubyBoYXkgYXJjaGl2b3MgcGVuZGllbnRlcywgZWplY3V0YXIgZWwgY2llcnJlXG4gICAgaWYgKGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCAmJiBjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MpIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghc3VjY2Vzc1VwZGF0ZUFjY2Vzcykge1xuICAgICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuXG4gICAgaWYgKGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIC8vIFNpIGhheSBhcmNoaXZvcywgZWwgYWdlbnRlIHlhIGZ1ZSBhZ3JlZ2FkbyB5IGVsIHRvZ2dsZSB5YSBzZSBoaXpvIGVuIHN1Y2Nlc3NDcmVhdGVcbiAgICAgIC8vIFNvbG8gbmVjZXNpdGFtb3MgY2VycmFyIGVsIG1vZGFsXG4gICAgICBpZiAoY29udGV4dC5oYXNBY3Rpb25GaWxlcykge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBTaSBlbCBhZ2VudGUgZnVlIGNyZWFkbyBjb24gZmF2b3JpdG8sIG5lY2VzaXRhbW9zIG9yZGVuYXIgZGVzcHXDqXMgZGUgYWdyZWdhcmxvXG4gICAgICBjb25zdCBhZ2VudFRvQWRkID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSA/IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfSA6IHN1Y2Nlc3NDcmVhdGVcblxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIGFkZEFnZW50KGFnZW50VG9BZGQpXG4gICAgICBzZWxlY3RBZ2VudChhZ2VudFRvQWRkKVxuXG4gICAgICAvLyBTaSB0aWVuZSBmYXZvcml0bywgaGFjZXIgdG9nZ2xlIHkgYWN0dWFsaXphciBlc3RhZG8gYW50ZXMgZGUgY2VycmFyXG4gICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAvLyBDdWFuZG8gc2UgY3JlYSB1biBhZ2VudGUgbnVldm8sIGVsIHNlcnZpZG9yIG5vIHRpZW5lIGVsIGZhdm9yaXRvIG1hcmNhZG8gYcO6blxuICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRUb0FkZCwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudChcbiAgICAgICAgICBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgYWdlbnRGb3JUb2dnbGUsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2VycmFyIGRlc3B1w6lzIGRlIHF1ZSBlbCB0b2dnbGUgY29tcGxldGUgeSBhY3R1YWxpY2UgZWwgZXN0YWRvXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCA9PT0gc3VjY2Vzc1VwZGF0ZS5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgfVxuICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlKClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG5cbiAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICB9XG4gIH0sIFtzdWNjZXNzVXBkYXRlQWNjZXNzLCBmaWxlc1Byb2Nlc3NlZF0pXG5cbiAgLy8gdXNlRWZmZWN0IHBhcmEgbWFuZWphciBlbCBjaWVycmUgZGVsIG1vZGFsIGN1YW5kbyB0ZXJtaW5hbiBsb3MgYXJjaGl2b3MgZW4gY3JlYWNpw7NuIHNpbiBhY2Nlc2liaWxpZGFkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudFxuXG4gICAgLy8gU29sbyBwcm9jZXNhciBzaTpcbiAgICAvLyAtIEVzIHVuYSBvcGVyYWNpw7NuIGRlIGNyZWFjacOzblxuICAgIC8vIC0gTm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVuZGllbnRlXG4gICAgLy8gLSBMb3MgYXJjaGl2b3MgdGVybWluYXJvbiBkZSBwcm9jZXNhcnNlXG4gICAgLy8gLSBFbCBhZ2VudGUgZnVlIGNyZWFkbyBleGl0b3NhbWVudGVcbiAgICAvLyAtIEHDum4gbm8gc2UgaGEgY2VycmFkbyBlbCBtb2RhbFxuICAgIGlmIChcbiAgICAgIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScgJiZcbiAgICAgICFjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmXG4gICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgJiZcbiAgICAgIHN1Y2Nlc3NDcmVhdGUgJiZcbiAgICAgICFoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCAmJlxuICAgICAgIWlzU2hvd1Byb2Nlc3NGaWxlc1xuICAgICkge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRhbWJpw6luIG1hbmVqYXIgZWwgY2FzbyBjdWFuZG8gaGF5IGFjY2VzaWJpbGlkYWQgeSBhcmNoaXZvcyB0ZXJtaW5hcm9uXG4gICAgaWYgKFxuICAgICAgY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ICYmXG4gICAgICBzdWNjZXNzQ3JlYXRlICYmXG4gICAgICAhaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiZcbiAgICAgICFpc1Nob3dQcm9jZXNzRmlsZXNcbiAgICApIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MpIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBmaWxlc1Byb2Nlc3NlZCxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIHN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaXNTaG93UHJvY2Vzc0ZpbGVzLFxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2VzcyxcbiAgICB0LFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlQ2xvc2UsXG4gIF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNTaG93UHJvY2Vzc0ZpbGVzKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gYGtub3dsZWRnZS1iYXNlLnN0YXR1czoke2FnZW50QnlJZCA/IGFnZW50QnlJZD8uaWQgOiBzdWNjZXNzQ3JlYXRlPy5pZD8udG9TdHJpbmcoKX1gXG4gICAgICBpZiAoJF9zYykge1xuICAgICAgICBpZiAoaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgICAgJF9zYz8uc3Vic2NyaWJlSGFuZGxlcihjaGFubmVsLCB3ZWJTb2NrZXRGdW5jdGlvbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBtb2RlbERhdGEgPSB7XG4gICAgICAgICAgICBtb2RlbF9oYXNoOiBjaGFubmVsLFxuICAgICAgICAgICAgYWN0aW9uOiAkX3NjPy5hY3Rpb25UeXBlPy5TVUJTQ1JJQkUsXG4gICAgICAgICAgfVxuICAgICAgICAgICRfc2M/LnVwZGF0ZUNvbm5lY3Rpb25Nb2RlbChtb2RlbERhdGEsIGNoYW5uZWwsIHVzZXIsIHVzZXIsICRfc2MuY2hhbm5lbFR5cGU/Lk1PREVMX0NIQU5ORUwpXG4gICAgICAgICAgc2V0SXNTdWJzY3JpYmVkKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc1Nob3dQcm9jZXNzRmlsZXMsIGlzU3Vic2NyaWJlZCwgJF9zYywgYWdlbnRCeUlkLCBzdWNjZXNzQ3JlYXRlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuIHx8ICFhZ2VudE1vZGVscy5sZW5ndGgpIHJldHVyblxuICAgIGlmIChhZ2VudExvYWRpbmcgJiYgIXByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBjb25zdCBhcHBseUVkaXRpbmdBZ2VudCA9IChzb3VyY2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZS50eXBlICE9PSAnY3VzdG9tJyB8fCAhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFjY2Vzc0RlbmllZCcpKVxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgfSwgMzAwMClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICA7KGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ29ubmVjdG9yczogc3RyaW5nW10gPSBbXVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29ubmVjdG9ycyA9IGF3YWl0IGdldEFnZW50Q29ubmVjdG9ycyhzb3VyY2UuaWQudG9TdHJpbmcoKSlcbiAgICAgICAgICBzZWxlY3RlZENvbm5lY3RvcnMgPSBjb25uZWN0b3JzXG4gICAgICAgICAgICAuZmlsdGVyKGNvbm5lY3RvciA9PiBjb25uZWN0b3IuZW5hYmxlZF9mb3JfYWdlbnQpXG4gICAgICAgICAgICAubWFwKGNvbm5lY3RvciA9PiBjb25uZWN0b3Iuc2x1ZylcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhZ2VudCBjb25uZWN0b3JzOicsIGVycm9yKVxuICAgICAgICB9XG5cbiAgICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiB7XG4gICAgICAgICAgY29uc3QgYWdlbnRWYWx1ZXNUb1NldCA9IGJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsKHNvdXJjZSwgYWdlbnRNb2RlbHMsIHByZXYpXG4gICAgICAgICAgY29uc3QgbmV4dFZhbHVlcyA9IHtcbiAgICAgICAgICAgIC4uLmFnZW50VmFsdWVzVG9TZXQsXG4gICAgICAgICAgICBhY3Rpb25zOiB7XG4gICAgICAgICAgICAgIC4uLmFnZW50VmFsdWVzVG9TZXQuYWN0aW9ucyxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRDb25uZWN0b3JzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQgPSBuZXh0VmFsdWVzXG4gICAgICAgICAgcmV0dXJuIG5leHRWYWx1ZXNcbiAgICAgICAgfSlcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICBpZiAocGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBzZXRTZWN0aW9uKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50KVxuICAgICAgICAgIHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9KSgpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IHByZWZldGNoZWQgPSBwcmVmZXRjaGVkQWdlbnRCeUlkUmVmLmN1cnJlbnRcbiAgICBpZiAocHJlZmV0Y2hlZCkge1xuICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYXBwbHlFZGl0aW5nQWdlbnQocHJlZmV0Y2hlZClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhZ2VudEJ5SWQgJiYgIWFnZW50TG9hZGluZyAmJiBhZ2VudE1vZGVscy5sZW5ndGgpIHtcbiAgICAgIGFwcGx5RWRpdGluZ0FnZW50KGFnZW50QnlJZClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghaXNMb2FkaW5nICYmICFhZ2VudExvYWRpbmcgJiYgIWFnZW50QnlJZCAmJiAhbW9kYWxWYWx1ZXMuaXNFZGl0aW5nKSB7XG4gICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgYWlNb2RlbDogYWdlbnRNb2RlbHNbMF0sXG4gICAgICAgIH0sXG4gICAgICB9KSlcbiAgICB9XG4gICAgLy8gTm8gaW5jbHVpciBgaXNMb2FkaW5nYCBlbiBkZXBzOiBhbCB0ZXJtaW5hciBnZXRBZ2VudENvbm5lY3RvcnMgc2UgaGFjZSBzZXRJc0xvYWRpbmcoZmFsc2UpIHlcbiAgICAvLyBzZSByZS1lamVjdXRhcsOtYSBlbCBlZmVjdG8gY29uIGVsIG1pc21vIGFnZW50QnlJZCwgZHVwbGljYW5kbyBsYSBxdWVyeSBkZSBjb25uZWN0b3JzLlxuICB9LCBbYWdlbnRCeUlkLCBpc09wZW4sIGFnZW50TG9hZGluZywgYWdlbnRNb2RlbHM/Lmxlbmd0aCwgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nLCB0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChlcnJvckdldEFnZW50QnlJZCkge1xuICAgICAgaWYgKGVycm9yR2V0QWdlbnRCeUlkID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIikge1xuICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ2Vycm9yQWNjZXNzRGVuaWVkJykpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgfSwgMzAwMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKGVycm9yR2V0QWdlbnRCeUlkKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH0sIDMwMDApXG4gICAgfVxuICB9LCBbZXJyb3JHZXRBZ2VudEJ5SWRdKVxuXG4gIGNvbnN0IHNob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghbW9kYWxWYWx1ZXM/LmFjY2Vzc2liaWxpdHk/LmNsaWVudHMgfHwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5jbGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmNsaWVudHMuc29tZShjbGllbnQgPT4gY2xpZW50LmlzX2FjdGl2ZSA9PT0gZmFsc2UgfHwgY2xpZW50LmlzX2RlbGV0ZWQgPT09IHRydWUpXG4gIH0sIFttb2RhbFZhbHVlcz8uYWNjZXNzaWJpbGl0eT8uY2xpZW50c10pXG5cbiAgY29uc3QgaXNTYXZlQnV0dG9uRGlzYWJsZWQgPVxuICAgICF2YWxpZGF0ZUZpZWxkVmFsdWVzKG1vZGFsVmFsdWVzKSB8fFxuICAgIHZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUoKSB8fFxuICAgIGlzTG9hZGluZyB8fFxuICAgIGlzTG9hZGluZ0tub3dsZWRnZSB8fFxuICAgIGlzTG9hZGluZ0NyZWF0ZSB8fFxuICAgIGlzTG9hZGluZ1VwZGF0ZUFjY2VzcyB8fFxuICAgIHNob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyB8fFxuICAgIGhhc0ZpbGVFcnJvcnNcblxuICBjb25zdCBoYW5kbGVUb2dnbGVGYXZvcml0ZSA9ICgpID0+IHtcbiAgICBpZiAobW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlkKSB7XG4gICAgICAvLyBFeGlzdGluZyBhZ2VudFxuICAgICAgdG9nZ2xlRmF2b3JpdGUoXG4gICAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQsXG4gICAgICAgIHVwZGF0ZWRBZ2VudCA9PiB7XG4gICAgICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgICAgICBpc19mYXZvcml0ZTogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAvLyBBY3R1YWxpemFyIGVsIGVzdGFkbyBkZSBhZ2VudGVzIHkgb3JkZW5hciBjdWFuZG8gc2UgaGFjZSBkZXNkZSBlbCBtb2RhbCBBQk1cbiAgICAgICAgICB1cGRhdGVBZ2VudEZhdm9yaXRlKHVwZGF0ZWRBZ2VudCwgdHJ1ZSlcbiAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0RmF2b3JpdGUsIHtcbiAgICAgICAgICAgIG9wdGlvbjogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlID8gJ2FkZCcgOiAncmVtb3ZlJyxcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIG1vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgbmV3IGFnZW50XG4gICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgaXNfZmF2b3JpdGU6ICFwcmV2LmdlbmVyYWwuaXNfZmF2b3JpdGUsXG4gICAgICAgIH0sXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBpZiAoIWlzT3BlbiB8fCAoIXVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlICYmICF1c2VyUGVybWlzc2lvbnM/LmVkaXQgJiYgIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlKSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgIDxCYWNrZHJvcCB6SW5kZXg9ezExMTJ9IG9uQ2xpY2s9e2hhbmRsZUJhY2tkcm9wQ2xpY2t9PlxuICAgICAgPFNDQUFNV3JhcHBlciByZWY9e21vZGFsUmVmfSB0YWJJbmRleD17LTF9PlxuICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgIDxTQ0FBTVdyYXBwZXJTcGlubmVyPlxuICAgICAgICAgICAgPFNDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50PlxuICAgICAgICAgICAgICA8U3Bpbm5lckxvdHRpZSBzaXplPVwiODBweFwiIGNvbG9yPVwicHJpbWFyeVwiIC8+XG4gICAgICAgICAgICA8L1NDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50PlxuICAgICAgICAgIDwvU0NBQU1XcmFwcGVyU3Bpbm5lcj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2lzU2hvd1Byb2Nlc3NGaWxlcyAmJiBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA/IChcbiAgICAgICAgICAgICAgPEFibUxvYWRlckZpbGVzXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM9e21vZGFsVmFsdWVzLmtub3dsZWRnZX1cbiAgICAgICAgICAgICAgICBsYWJlbD17dChgcHJvY2Vzc2luZ0tub3dsZWRnZS4ke21vZGFsVmFsdWVzLmlzRWRpdGluZyA/ICdkZXNjcmlwdGlvblVwZGF0ZScgOiAnZGVzY3JpcHRpb25DcmVhdGUnfWApfVxuICAgICAgICAgICAgICAgIG9uVGltZW91dD17aGFuZGxlUHJvY2Vzc0ZpbGVzVGltZW91dH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyTGVmdD5cbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0KCdnZW5lcmFsU2VjdGlvbi5yZW1vdmVGYXZvcml0ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogdCgnZ2VuZXJhbFNlY3Rpb24uYWRkRmF2b3JpdGUnKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FBTUhlYWRlckZhdm9yaXRlIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZUZhdm9yaXRlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e21vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZSA/ICcjRkZDNjI0JyA6ICcjYTZhNmE2J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD17bW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlzX2Zhdm9yaXRlID8gJyNGRkM2MjQnIDogJ25vbmUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29saWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e21vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZSA/ICcnIDogJ3N0YXItZmF2b3JpdGUtaWNvbid9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1IZWFkZXJGYXZvcml0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1IZWFkZXJUaXRsZT57bW9kYWxWYWx1ZXM/LmlzRWRpdGluZyA/IHQoJ2VkaXRBZ2VudCcpIDogdCgnbmV3QWdlbnQnKX08L1NDQUFNSGVhZGVyVGl0bGU+XG4gICAgICAgICAgICAgICAgICA8L1NDQUFNSGVhZGVyTGVmdD5cbiAgICAgICAgICAgICAgICAgIDxTQ0FBTUhlYWRlckNsb3NlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuY2FuY2VsTW9kYWwpXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nIHx8IGlzTG9hZGluZ0tub3dsZWRnZSB8fCBpc0xvYWRpbmdDcmVhdGUgfHwgaXNMb2FkaW5nVXBkYXRlQWNjZXNzfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q3Jvc3MgY29sb3I9XCIjYTZhNmE2XCIgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgPC9TQ0FBTUhlYWRlckNsb3NlQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvU0NBQU1IZWFkZXI+XG4gICAgICAgICAgICAgICAgPFNDQUFNQ29udGVudCBoYXNTY3JvbGw9e3NlY3Rpb24gIT09ICdrbm93bGVkZ2UnfT5cbiAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXI+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdnZW5lcmFsJ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdnZW5lcmFsJyl9XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhYm0tYWdlbnQtbW9kYWwtZ2VuZXJhbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtgJHtzZWN0aW9uID09PSAnZ2VuZXJhbCcgPyAncmdiYSg2MywgNjMsIDYzLCAxKScgOiAncmdiYSgxNjYsIDE2NiwgMTY2LCAxKSd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVRpdGxlIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnZ2VuZXJhbCd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2dlbmVyYWxTZWN0aW9uLnRpdGxlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cblxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzZWN0aW9uID09PSAna25vd2xlZGdlJ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdrbm93bGVkZ2UnKX1cbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFibS1hZ2VudC1tb2RhbC1rbm93bGVkZ2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEJyYWluSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2Ake3NlY3Rpb24gPT09ICdrbm93bGVkZ2UnID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2tub3dsZWRnZSd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2tub3dsZWRnZVNlY3Rpb24udGl0bGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhckl0ZW1UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdhY3Rpb25zJ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdhY3Rpb25zJyl9XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhYm0tYWdlbnQtbW9kYWwtYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtgJHtzZWN0aW9uID09PSAnYWN0aW9ucycgPyAncmdiYSg2MywgNjMsIDYzLCAxKScgOiAncmdiYSgxNjYsIDE2NiwgMTY2LCAxKSd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVRpdGxlIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnYWN0aW9ucyd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2FjdGlvbnNTZWN0aW9uLnRpdGxlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cblxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnYWNjZXNzaWJpbGl0eSd9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VjdGlvbkNoYW5nZSgnYWNjZXNzaWJpbGl0eScpfVxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWJtLWFnZW50LW1vZGFsLWFjY2Vzc2liaWxpdHlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2liaWxpdHlJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YCR7c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi50aXRsZVRhYicpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIHtzaG91bGREaXNhYmxlU2F2ZUZvckNsaWVudHMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNsaWVudHNFcnJvcicpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1FcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWxlcnQgY29sb3I9XCIjQzcwNTA1XCIgd2lkdGg9XCIxNnB4XCIgaGVpZ2h0PVwiMTZweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbUVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFyPlxuICAgICAgICAgICAgICAgICAge1NlY3Rpb25CeUtleVtzZWN0aW9uXSh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogbW9kYWxWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiBoYW5kbGVTZXRBZ2VudFZhbHVlc0J5S2V5cyxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRNb2RlbHMsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0tub3dsZWRnZTogW10sXG4gICAgICAgICAgICAgICAgICAgIG5ld0tub3dsZWRnZTogW10sXG4gICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlRXhpc3RpbmdLbm93bGVkZ2U6ICgpID0+IHt9LFxuICAgICAgICAgICAgICAgICAgICBvblJlbW92ZU5ld0tub3dsZWRnZTogKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgICAgIG9uRmlsZUVycm9yQ2hhbmdlOiBzZXRIYXNGaWxlRXJyb3JzLFxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9TQ0FBTUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPFNDQUFNRm9vdGVyIGlzRWRpdGluZz17ISFtb2RhbFZhbHVlcz8uaXNFZGl0aW5nICYmICEhdXNlclBlcm1pc3Npb25zPy5kZWxldGV9PlxuICAgICAgICAgICAgICAgICAgeyEhbW9kYWxWYWx1ZXM/LmlzRWRpdGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAhIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1EZWxldGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q1VCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbldpdGhJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93TW9kYWxEZWxldGUodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0xvYWRpbmdLbm93bGVkZ2UgfHwgaXNMb2FkaW5nQ3JlYXRlIHx8IGlzTG9hZGluZ1VwZGF0ZUFjY2Vzc31cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFdyYXBwZXJDZW50ZXJJY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUcmFzaCBjb2xvcj1cIiMwOGNcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2RlbGV0ZUFnZW50Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvV3JhcHBlckNlbnRlckljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1EZWxldGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMjRweCcgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNhdmVCdXR0b24gaXNEaXNhYmxlZD17aXNTYXZlQnV0dG9uRGlzYWJsZWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxDVUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbihudWxsLCAnY3JlYXRlJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTYXZlQnV0dG9uRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge21vZGFsVmFsdWVzLmlzRWRpdGluZyA/IHQoJ3NhdmVDaGFuZ2VzJykgOiB0KCdjcmVhdGVBZ2VudExhYmVsQnV0dG9uJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9DVUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNhdmVCdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1NDQUFNRm9vdGVyPlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L1NDQUFNV3JhcHBlcj5cbiAgICAgIHtzaG93TW9kYWxEZWxldGUgJiYgKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNb2RhbERlbGV0ZShmYWxzZSl9XG4gICAgICAgICAgaGFuZGxlcnM9e3tcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb246IChwcm9wczogYW55KSA9PiBoYW5kbGVDb25maXJtQWN0aW9uKHByb3BzLCAnZGVsZXRlJyksXG4gICAgICAgICAgfX1cbiAgICAgICAgICBjaGF0PXt7IHRpdGxlOiBtb2RhbFZhbHVlcy5nZW5lcmFsLm5hbWUsIGlkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkIH19XG4gICAgICAgICAgYWN0aW9uPVwiYWdlbnRcIlxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L0JhY2tkcm9wPixcbiAgICBzZWxlY3RvclxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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