@projectcor/maia-components 2.35.9 → 2.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +2 -0
  2. package/lib/components/atoms/ActionableButton.js +1 -6
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +63 -4
  4. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +16 -4
  5. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +12 -1
  6. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +127 -5
  7. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +2 -29
  8. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +24 -33
  9. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +2 -19
  10. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +4 -14
  11. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.styles.js +3 -12
  12. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +4 -20
  13. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -18
  14. package/lib/components/atoms/MAIAInput/MAIAInput.js +243 -42
  15. package/lib/components/atoms/MAIAInput/styles.js +41 -44
  16. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +208 -0
  17. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +77 -0
  18. package/lib/components/atoms/SkillsDropdown/index.js +2 -0
  19. package/lib/components/atoms/icons/PlusIcon.js +29 -0
  20. package/lib/components/atoms/icons/SkillCreatedByIcon.js +20 -0
  21. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +23 -0
  22. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +23 -0
  23. package/lib/components/atoms/icons/SkillsNavIcon.js +4 -7
  24. package/lib/components/atoms/icons/index.js +5 -1
  25. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +34 -11
  26. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +5 -3
  27. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +5 -16
  28. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +2 -23
  29. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +5 -33
  30. package/lib/components/molecules/ChatAIHome/styles.js +2 -11
  31. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +20 -31
  32. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +4 -9
  33. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +61 -21
  34. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  35. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +1 -8
  36. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +9 -15
  37. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +3 -14
  38. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -2
  39. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +11 -17
  40. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +5 -14
  41. package/lib/components/molecules/ChatAIModal/layout.js +2 -2
  42. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +2 -12
  43. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +3 -3
  44. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +334 -272
  45. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +132 -109
  46. package/lib/components/molecules/ChatFooter/ChatFooter.js +57 -63
  47. package/lib/components/molecules/ChatFooter/styles.js +6 -12
  48. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +1 -3
  49. package/lib/components/molecules/MessageFeedback/MessageFeedback.js +5 -15
  50. package/lib/components/molecules/Sidebar/Sidebar.js +15 -7
  51. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +3 -3
  52. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +30 -40
  53. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +25 -31
  54. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +430 -203
  55. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +131 -74
  56. package/lib/components/organisms/ChatAI/ChatAI.js +1 -6
  57. package/lib/constants/config.js +1 -4
  58. package/lib/constants/permissions/utils.js +3 -3
  59. package/lib/hooks/useAgentModel/useCreateAgent.js +6 -6
  60. package/lib/hooks/useAgentModel/useUpdateAgent.js +6 -6
  61. package/lib/hooks/useChatManager/useChatManager.js +38 -58
  62. package/lib/hooks/useContextMentions.js +96 -56
  63. package/lib/hooks/useEntitySearch.js +92 -278
  64. package/lib/hooks/useEvent.js +15 -2
  65. package/lib/hooks/useMentionAllowedTypes.js +9 -25
  66. package/lib/hooks/useMentionPopover.js +9 -33
  67. package/lib/hooks/useSkillsCatalog.js +66 -0
  68. package/lib/lang/br/index.js +39 -12
  69. package/lib/lang/en/index.js +39 -12
  70. package/lib/lang/es/index.js +40 -13
  71. package/lib/lang/fr/index.js +40 -13
  72. package/lib/services/maia/Agents/setAgentToolGroups.js +2 -2
  73. package/lib/services/maia/Chats/getChatsByUserId.js +1 -1
  74. package/lib/services/maia/Orchestrator/orchestrator.js +16 -7
  75. package/lib/services/maia/Skills/createSkill.js +1 -1
  76. package/lib/services/maia/Skills/getSkills.js +70 -40
  77. package/lib/services/maia/Skills/updateSkill.js +1 -1
  78. package/lib/services/maia/index.js +2 -4
  79. package/lib/services/utils/fetchCOR.js +57 -106
  80. package/lib/services/utils/index.js +1 -2
  81. package/lib/store/faqsStore.types.js +1 -1
  82. package/lib/store/index.js +1 -2
  83. package/lib/store/sessions/sessionStreamManager.js +35 -61
  84. package/lib/store/sessions/sessions.types.js +1 -1
  85. package/lib/store/useChatsStore.js +3 -3
  86. package/lib/test/buttonMock.js +22 -0
  87. package/lib/test/fetchPolyfill.js +160 -0
  88. package/lib/test/fileMock.js +2 -0
  89. package/lib/test/global-context.js +49 -0
  90. package/lib/test/iconMock.js +19 -0
  91. package/lib/test/mockFetch.js +49 -0
  92. package/lib/test/portalRoot.js +13 -0
  93. package/lib/test/styleMock.js +2 -0
  94. package/lib/test/test-utils.js +26 -0
  95. package/lib/test/tooltipMock.js +11 -0
  96. package/lib/types/Chat.js +1 -1
  97. package/lib/types/FrequentlyAskedQuestion.js +1 -1
  98. package/lib/types/agentModal.js +1 -1
  99. package/lib/types/skill.js +1 -1
  100. package/lib/utils/contextMentionTriggers.js +2 -5
  101. package/lib/utils/normalizeAgentConnectors.js +44 -16
  102. package/lib/utils/renderContextMentions.js +39 -18
  103. package/package.json +9 -6
  104. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.js +0 -28
  105. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.styles.js +0 -47
  106. package/lib/components/molecules/UsageBlockedBanner/index.js +0 -2
  107. package/lib/services/maia/Usage/getUsage.js +0 -45
  108. package/lib/services/maia/Usage/index.js +0 -6
  109. package/lib/services/utils/MaiaApiError.js +0 -34
  110. package/lib/store/useUsageStore.js +0 -111
  111. package/lib/types/usage.js +0 -9
  112. package/lib/utils/usageBlockedMessage.js +0 -11
@@ -14,8 +14,6 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
14
14
  /* eslint-disable no-constant-condition */
15
15
  /* eslint-disable @typescript-eslint/no-explicit-any */
16
16
  import maia from '../../services/maia';
17
- import { isMaiaApiError } from '../../services/utils/MaiaApiError';
18
- import { getUsageStoreState, isUsageQuotaExceededError } from '../useUsageStore';
19
17
  import { getInitialStreamActivity, getThinkingLoadingMessage, getWritingStreamActivity, resolveHitlNodeStreamActivity, resolveInitialHitlStreamActivity, resolveToolActionLabel } from '../../utils/streamActivityMessages';
20
18
  import { isCompleteLikeSsePayload, mergeStreamChunk } from '../../utils/sseStreamContent';
21
19
  import { reasoningStore } from '../../hooks/useReasoningTrace';
@@ -401,7 +399,7 @@ export var sessionStreamManager = {
401
399
  },
402
400
  startStream: function startStream(params) {
403
401
  return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
404
- var sessionId, placeholderId, request, callbacks, t, activityOptions, agentId, agentName, controller, active, response, _callbacks$onError2, _callbacks$onError3, _t4;
402
+ var sessionId, placeholderId, request, callbacks, t, activityOptions, agentId, agentName, controller, active, response, _callbacks$onError2, _t4;
405
403
  return _regeneratorRuntime.wrap(function (_context2) {
406
404
  while (1) switch (_context2.prev = _context2.next) {
407
405
  case 0:
@@ -468,12 +466,7 @@ export var sessionStreamManager = {
468
466
  });
469
467
  store().setActivity(sessionId, null);
470
468
  store().setStatus(sessionId, 'error');
471
- if (isMaiaApiError(_t4) && isUsageQuotaExceededError(_t4.code)) {
472
- getUsageStoreState().applyQuotaExceeded();
473
- (_callbacks$onError2 = callbacks.onError) === null || _callbacks$onError2 === void 0 || _callbacks$onError2.call(callbacks, _t4.code, _t4.message);
474
- } else {
475
- (_callbacks$onError3 = callbacks.onError) === null || _callbacks$onError3 === void 0 || _callbacks$onError3.call(callbacks);
476
- }
469
+ (_callbacks$onError2 = callbacks.onError) === null || _callbacks$onError2 === void 0 || _callbacks$onError2.call(callbacks);
477
470
  }
478
471
  case 7:
479
472
  _context2.prev = 7;
@@ -493,7 +486,7 @@ export var sessionStreamManager = {
493
486
  /** Resume HITL (`continue-thread`) keyed por sessionId — mismo motor que orchestrator. */startContinueStream: function startContinueStream(params) {
494
487
  return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
495
488
  var _ref4;
496
- var sessionId, placeholderId, continueRequest, callbacks, t, hitlExecutionContext, agentId, agentName, controller, active, sseParams, response, _callbacks$onError4, _callbacks$onError5, _t5;
489
+ var sessionId, placeholderId, continueRequest, callbacks, t, hitlExecutionContext, agentId, agentName, controller, active, sseParams, response, _callbacks$onError3, _t5;
497
490
  return _regeneratorRuntime.wrap(function (_context3) {
498
491
  while (1) switch (_context3.prev = _context3.next) {
499
492
  case 0:
@@ -578,12 +571,7 @@ export var sessionStreamManager = {
578
571
  });
579
572
  store().setActivity(sessionId, null);
580
573
  store().setStatus(sessionId, 'error');
581
- if (isMaiaApiError(_t5) && isUsageQuotaExceededError(_t5.code)) {
582
- getUsageStoreState().applyQuotaExceeded();
583
- (_callbacks$onError4 = callbacks.onError) === null || _callbacks$onError4 === void 0 || _callbacks$onError4.call(callbacks, _t5.code, _t5.message);
584
- } else {
585
- (_callbacks$onError5 = callbacks.onError) === null || _callbacks$onError5 === void 0 || _callbacks$onError5.call(callbacks);
586
- }
574
+ (_callbacks$onError3 = callbacks.onError) === null || _callbacks$onError3 === void 0 || _callbacks$onError3.call(callbacks);
587
575
  }
588
576
  case 8:
589
577
  _context3.prev = 8;
@@ -603,7 +591,7 @@ export var sessionStreamManager = {
603
591
  },
604
592
  /** Regenera la respuesta de un turno (`retry_completion`) — mismo motor SSE que orchestrator. */startRetryStream: function startRetryStream(params) {
605
593
  return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
606
- var sessionId, placeholderId, retryRequest, callbacks, t, activityOptions, agentId, agentName, controller, active, sseParams, response, detail, data, _callbacks$onError6, _callbacks$onError7, _t6, _t7;
594
+ var sessionId, placeholderId, retryRequest, callbacks, t, activityOptions, agentId, agentName, controller, active, sseParams, response, detail, data, _callbacks$onError4, _t6, _t7;
607
595
  return _regeneratorRuntime.wrap(function (_context4) {
608
596
  while (1) switch (_context4.prev = _context4.next) {
609
597
  case 0:
@@ -627,15 +615,6 @@ export var sessionStreamManager = {
627
615
  reason: 'limit'
628
616
  });
629
617
  case 2:
630
- if (!getUsageStoreState().blocked) {
631
- _context4.next = 3;
632
- break;
633
- }
634
- return _context4.abrupt("return", {
635
- started: false,
636
- reason: 'usage_blocked'
637
- });
638
- case 3:
639
618
  controller = new AbortController();
640
619
  active = {
641
620
  sessionId: sessionId,
@@ -667,34 +646,34 @@ export var sessionStreamManager = {
667
646
  agentId: agentId,
668
647
  agentName: agentName
669
648
  };
670
- _context4.prev = 4;
671
- _context4.next = 5;
649
+ _context4.prev = 3;
650
+ _context4.next = 4;
672
651
  return maia.Orchestrator.retryCompletion(retryRequest, controller.signal);
673
- case 5:
652
+ case 4:
674
653
  response = _context4.sent;
675
654
  if (response.ok) {
676
- _context4.next = 11;
655
+ _context4.next = 10;
677
656
  break;
678
657
  }
679
658
  if (!(response.status === 404)) {
680
- _context4.next = 10;
659
+ _context4.next = 9;
681
660
  break;
682
661
  }
683
- _context4.prev = 6;
684
- _context4.next = 7;
662
+ _context4.prev = 5;
663
+ _context4.next = 6;
685
664
  return response.json();
686
- case 7:
665
+ case 6:
687
666
  data = _context4.sent;
688
667
  detail = typeof data.detail === 'string' ? data.detail : undefined;
689
- _context4.next = 9;
668
+ _context4.next = 8;
690
669
  break;
691
- case 8:
692
- _context4.prev = 8;
693
- _t6 = _context4["catch"](6);
670
+ case 7:
671
+ _context4.prev = 7;
672
+ _t6 = _context4["catch"](5);
694
673
  detail = undefined;
695
- case 9:
674
+ case 8:
696
675
  if (!(detail === 'Turn not found')) {
697
- _context4.next = 10;
676
+ _context4.next = 9;
698
677
  break;
699
678
  }
700
679
  sessionStreamingText.clear(sessionId);
@@ -710,17 +689,17 @@ export var sessionStreamManager = {
710
689
  started: false,
711
690
  reason: 'turn_not_found'
712
691
  });
713
- case 10:
692
+ case 9:
714
693
  throw new Error("retry_completion failed: ".concat(response.status));
715
- case 11:
716
- _context4.next = 12;
694
+ case 10:
695
+ _context4.next = 11;
717
696
  return parseSessionSSE(response, active, sseParams);
718
- case 12:
719
- _context4.next = 14;
697
+ case 11:
698
+ _context4.next = 13;
720
699
  break;
721
- case 13:
722
- _context4.prev = 13;
723
- _t7 = _context4["catch"](4);
700
+ case 12:
701
+ _context4.prev = 12;
702
+ _t7 = _context4["catch"](3);
724
703
  if (!active.isStopped) {
725
704
  sessionStreamingText.clear(sessionId);
726
705
  store().patchMeta(sessionId, {
@@ -729,26 +708,21 @@ export var sessionStreamManager = {
729
708
  });
730
709
  store().setActivity(sessionId, null);
731
710
  store().setStatus(sessionId, 'error');
732
- if (isMaiaApiError(_t7) && isUsageQuotaExceededError(_t7.code)) {
733
- getUsageStoreState().applyQuotaExceeded();
734
- (_callbacks$onError6 = callbacks.onError) === null || _callbacks$onError6 === void 0 || _callbacks$onError6.call(callbacks, _t7.code, _t7.message);
735
- } else {
736
- (_callbacks$onError7 = callbacks.onError) === null || _callbacks$onError7 === void 0 || _callbacks$onError7.call(callbacks);
737
- }
711
+ (_callbacks$onError4 = callbacks.onError) === null || _callbacks$onError4 === void 0 || _callbacks$onError4.call(callbacks);
738
712
  }
739
- case 14:
740
- _context4.prev = 14;
713
+ case 13:
714
+ _context4.prev = 13;
741
715
  activeStreams["delete"](sessionId);
742
- return _context4.finish(14);
743
- case 15:
716
+ return _context4.finish(13);
717
+ case 14:
744
718
  return _context4.abrupt("return", {
745
719
  started: true
746
720
  });
747
- case 16:
721
+ case 15:
748
722
  case "end":
749
723
  return _context4.stop();
750
724
  }
751
- }, _callee4, null, [[4, 13, 14, 15], [6, 8]]);
725
+ }, _callee4, null, [[3, 12, 13, 14], [5, 7]]);
752
726
  }))();
753
727
  },
754
728
  /** Cancelación explícita del usuario (mensaje "cancelado"). */stopStream: function stopStream(sessionId, callbacks) {
@@ -794,4 +768,4 @@ export var sessionStreamManager = {
794
768
  });
795
769
  }
796
770
  };
797
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWlhIiwiaXNNYWlhQXBpRXJyb3IiLCJnZXRVc2FnZVN0b3JlU3RhdGUiLCJpc1VzYWdlUXVvdGFFeGNlZWRlZEVycm9yIiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlVG9vbEFjdGlvbkxhYmVsIiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInJlYXNvbmluZ1N0b3JlIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInNlc3Npb25IaXRsQ29udGV4dCIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJTVFJFQU1fVEhST1RUTEVfTVMiLCJhY3RpdmVTdHJlYW1zIiwiTWFwIiwic3RvcmUiLCJnZXRTdGF0ZSIsImlzU3RyZWFtQWN0aXZlIiwic2Vzc2lvbklkIiwiaGFzIiwiZ2V0QWN0aXZlU3RyZWFtQ291bnQiLCJzaXplIiwicGFyc2VTZXNzaW9uU1NFIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJhY3RpdmUiLCJwYXJhbXMiLCJfcGFyYW1zJGhpdGxFeGVjdXRpb24iLCJfcmVzcG9uc2UkYm9keSIsIl9kYXRhJGVycm9yIiwiX2RhdGEkZXJyb3IyIiwiX2NhbGxiYWNrcyRvbkVycm9yIiwiX2RhdGEkZXJyb3IzIiwiX2RhdGEkZXJyb3I0IiwicGxhY2Vob2xkZXJJZCIsImNhbGxiYWNrcyIsInQiLCJoaXRsRXhlY3V0aW9uQ29udGV4dCIsInBlbmRpbmdDb250ZW50IiwidGhyb3R0bGVUaW1lciIsImZsdXNoVG9TdG9yZXMiLCJlbWl0VGhyb3R0bGVkIiwiZmx1c2hQZW5kaW5nIiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImhhc1N0YXJ0ZWRXcml0aW5nIiwiZW5zdXJlV3JpdGluZ1N0YXJ0ZWQiLCJhcHBseVN0cmVhbUNodW5rIiwiY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQiLCJhcHBseVN0cmVhbUNvbXBsZXRlIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpbmUiLCJfbGluZSRzcGxpdCIsIl9saW5lJHNwbGl0MiIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwiZGF0YVN0ciIsImRhdGEiLCJ0aGlua2luZ0RlbHRhIiwic3RlcFRvb2wiLCJzdGVwVHlwZSIsImxhYmVsIiwiY2h1bmsiLCJfY2h1bmsiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJpc1ByZUFwcHJvdmVkIiwiX3JlZjMiLCJfdCIsIl90MiIsIl90MyIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiZ2V0IiwiY29udGVudCIsIl9jYWxsYmFja3Mkb25TdHJlYW1VcCIsInNldFRleHQiLCJvblN0cmVhbVVwZGF0ZSIsImNhbGwiLCJ3aW5kb3ciLCJzZXRUaW1lb3V0IiwidG9FbWl0IiwiY2xlYXJUaW1lb3V0IiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfY2FsbGJhY2tzJG9uU3RhcnRXcmkiLCJwYXRjaE1ldGEiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJzZXRTdGF0dXMiLCJzZXRBY3Rpdml0eSIsIm9uU3RhcnRXcml0aW5nIiwic3luY0xpdmVOYXJyYXRpb24iLCJtYXJrQW5zd2VyUmVzZXQiLCJwYXlsb2FkIiwiX3BheWxvYWQkYWdlbnRfaWQiLCJfc3ViYWdlbnRSYXckcmVzb2x2ZWQiLCJfcmVmMiIsIl9jYWxsYmFja3Mkb25GaW5pc2hTdCIsImZpbmFsQ29udGVudCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsImF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5Iiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImFnZW50X2lkIiwiYWdlbnRJZCIsImNvbXBsZXRlZEFnZW50SWQiLCJTdHJpbmciLCJ0cmltIiwic3ViYWdlbnRSYXciLCJzdWJhZ2VudCIsInJlc29sdmVkQ29udGV4dCIsInJlc29sdmVkX2NvbnRleHQiLCJyZWFzb25pbmciLCJmaW5pc2giLCJmaW5pc2hQYXlsb2FkIiwib25GaW5pc2hTdHJlYW0iLCJpc1N0b3BwZWQiLCJjYW5jZWwiLCJhYnJ1cHQiLCJyZWFkIiwic2VudCIsImRlY29kZSIsInN0cmVhbSIsInNwbGl0IiwicG9wIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJzIiwibiIsIl9zbGljZWRUb0FycmF5IiwicmVwbGFjZSIsIkpTT04iLCJwYXJzZSIsImRlbHRhIiwiaSIsImFwcGVuZFRoaW5raW5nIiwicGhhc2UiLCJtZXNzYWdlIiwidG9vbCIsInR5cGUiLCJzdGF0dXMiLCJjYXB0dXJlTGVhZGluZ0Zyb21Cb2R5IiwiYXBwbHlTdGVwIiwic2hvdWxkQ2xlYXJTdHJlYW1Gb3JMZWFkaW5nIiwibm9kZSIsInVuZGVmaW5lZCIsInRocmVhZF9pZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImF1dG9fYXBwcm92ZWQiLCJhcHByb3ZhbF9zdGF0dXMiLCJjbGVhciIsIm9uQXBwcm92YWxSZXF1aXJlZCIsInBlbmRpbmdfYWN0aW9ucyIsImxlbmd0aCIsImNvbnNvbGUiLCJlcnJvciIsInNldEVycm9yIiwib25FcnJvciIsIndhcm4iLCJlIiwiZiIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwic2Vzc2lvblN0cmVhbU1hbmFnZXIiLCJpc0FjdGl2ZSIsImdldEFjdGl2ZUNvdW50IiwiZ2V0QWN0aXZlU2Vzc2lvbklkcyIsImZyb20iLCJrZXlzIiwic3RhcnRTdHJlYW0iLCJfY2FsbGVlMiIsInJlcXVlc3QiLCJhY3Rpdml0eU9wdGlvbnMiLCJhZ2VudE5hbWUiLCJjb250cm9sbGVyIiwiX2NhbGxiYWNrcyRvbkVycm9yMiIsIl9jYWxsYmFja3Mkb25FcnJvcjMiLCJfdDQiLCJfY29udGV4dDIiLCJzdGFydGVkIiwicmVhc29uIiwiQWJvcnRDb250cm9sbGVyIiwic2V0IiwiZW5zdXJlU2Vzc2lvbiIsIl9vYmplY3RTcHJlYWQiLCJzdGFydCIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsInNpZ25hbCIsImNvZGUiLCJhcHBseVF1b3RhRXhjZWVkZWQiLCJzdGFydENvbnRpbnVlU3RyZWFtIiwiX2NhbGxlZTMiLCJfcmVmNCIsImNvbnRpbnVlUmVxdWVzdCIsInNzZVBhcmFtcyIsIl9jYWxsYmFja3Mkb25FcnJvcjQiLCJfY2FsbGJhY2tzJG9uRXJyb3I1IiwiX3Q1IiwiX2NvbnRleHQzIiwiY29udGludWVUaHJlYWQiLCJvayIsImNvbmNhdCIsInN0YXJ0UmV0cnlTdHJlYW0iLCJfY2FsbGVlNCIsInJldHJ5UmVxdWVzdCIsImRldGFpbCIsIl9jYWxsYmFja3Mkb25FcnJvcjYiLCJfY2FsbGJhY2tzJG9uRXJyb3I3IiwiX3Q2IiwiX3Q3IiwiX2NvbnRleHQ0IiwiYmxvY2tlZCIsInJldHJ5Q29tcGxldGlvbiIsImpzb24iLCJzdG9wU3RyZWFtIiwiX2NhbGxiYWNrcyRvblN0b3AiLCJhYm9ydCIsInBhcnRpYWxUZXh0IiwiZ2V0U25hcHNob3QiLCJ0ZXh0Iiwib25TdG9wIiwiYWJvcnRTaWxlbnRseSIsIl9zdG9yZSRnZXRNZXRhIiwiZ2V0TWV0YSIsImFib3J0QWxsIiwiX3RoaXMiLCJmb3JFYWNoIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1NYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3RhbnQtY29uZGl0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgaXNNYWlhQXBpRXJyb3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91dGlscy9NYWlhQXBpRXJyb3InXG5pbXBvcnQgeyBnZXRVc2FnZVN0b3JlU3RhdGUsIGlzVXNhZ2VRdW90YUV4Y2VlZGVkRXJyb3IgfSBmcm9tICcuLi91c2VVc2FnZVN0b3JlJ1xuaW1wb3J0IHR5cGUgeyBBcHByb3ZhbFJlcXVlc3QgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5LFxuICBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlLFxuICBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZVRvb2xBY3Rpb25MYWJlbCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB0eXBlIHsgSGl0bEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkLCBtZXJnZVN0cmVhbUNodW5rIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3NlU3RyZWFtQ29udGVudCdcbmltcG9ydCB7IHJlYXNvbmluZ1N0b3JlIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1N0ZXBQYXlsb2FkLCBSZWFzb25pbmdUcmFjZVBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9yZWFzb25pbmcnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtaW5nVGV4dCB9IGZyb20gJy4vc2Vzc2lvblN0cmVhbWluZ1RleHQnXG5pbXBvcnQgeyB1c2VTZXNzaW9uc1N0b3JlIH0gZnJvbSAnLi91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCB9IGZyb20gJy4vc2Vzc2lvbk5vdGlmaWNhdGlvbnMnXG5pbXBvcnQgeyBzZXNzaW9uSGl0bENvbnRleHQgfSBmcm9tICcuL3Nlc3Npb25IaXRsQ29udGV4dCdcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbkZpbmlzaFBheWxvYWQsIFNlc3Npb25TdHJlYW1DYWxsYmFja3MsIFN0YXJ0U3RyZWFtUmVzdWx0IH0gZnJvbSAnLi9zZXNzaW9ucy50eXBlcydcblxudHlwZSBPcmNoZXN0cmF0b3JSZXF1ZXN0ID0gUGFyYW1ldGVyczx0eXBlb2YgbWFpYS5PcmNoZXN0cmF0b3Iub3JjaGVzdHJhdG9yPlswXVxudHlwZSBDb250aW51ZVRocmVhZFJlcXVlc3QgPSBQYXJhbWV0ZXJzPHR5cGVvZiBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZD5bMF1cbnR5cGUgUmV0cnlDb21wbGV0aW9uUmVxdWVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIG1haWEuT3JjaGVzdHJhdG9yLnJldHJ5Q29tcGxldGlvbj5bMF1cblxuLyoqIENvbXBhdGlibGUgY29uIGVsIGB0YCBkZSBpMThuZXh0ICh1c28gZGUgdW5hIHNvbGEga2V5KS4gKi9cbnR5cGUgVHJhbnNsYXRlRm4gPSAoa2V5OiBzdHJpbmcpID0+IHN0cmluZ1xuXG50eXBlIFN0YXJ0U3RyZWFtUGFyYW1zID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBwbGFjZWhvbGRlcklkOiBzdHJpbmdcbiAgcmVxdWVzdDogT3JjaGVzdHJhdG9yUmVxdWVzdFxuICBjYWxsYmFja3M6IFNlc3Npb25TdHJlYW1DYWxsYmFja3NcbiAgdDogVHJhbnNsYXRlRm5cbiAgYWN0aXZpdHlPcHRpb25zPzoge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBoYXNBdHRhY2htZW50cz86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50c0NvdW50PzogbnVtYmVyXG4gIH1cbiAgaGl0bEV4ZWN1dGlvbkNvbnRleHQ/OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGxcbiAgYWdlbnRJZD86IHN0cmluZyB8IG51bWJlclxuICBhZ2VudE5hbWU/OiBzdHJpbmdcbn1cblxudHlwZSBTdGFydENvbnRpbnVlU3RyZWFtUGFyYW1zID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBwbGFjZWhvbGRlcklkOiBzdHJpbmdcbiAgY29udGludWVSZXF1ZXN0OiBDb250aW51ZVRocmVhZFJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGhpdGxFeGVjdXRpb25Db250ZXh0PzogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsXG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgU3RhcnRSZXRyeVN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIHJldHJ5UmVxdWVzdDogUmV0cnlDb21wbGV0aW9uUmVxdWVzdFxuICBjYWxsYmFja3M6IFNlc3Npb25TdHJlYW1DYWxsYmFja3NcbiAgdDogVHJhbnNsYXRlRm5cbiAgYWN0aXZpdHlPcHRpb25zPzoge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBoYXNBdHRhY2htZW50cz86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50c0NvdW50PzogbnVtYmVyXG4gIH1cbiAgYWdlbnRJZD86IHN0cmluZyB8IG51bWJlclxuICBhZ2VudE5hbWU/OiBzdHJpbmdcbn1cblxudHlwZSBBY3RpdmVTdHJlYW0gPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlclxuICBpc1N0b3BwZWQ6IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBNw6F4aW1vIGRlIHNlc2lvbmVzIGdlbmVyYW5kbyBlbiBwYXJhbGVsby4gUHJvdGVnZSByZWQvcmVjdXJzb3MgZGVsIGNsaWVudGUuXG4gKiBBanVzdGFibGUgYSBmdXR1cm8gdsOtYSBmbGFnIGRlbCBob3N0LlxuICovXG5leHBvcnQgY29uc3QgTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyA9IDRcblxuY29uc3QgU1RSRUFNX1RIUk9UVExFX01TID0gMTZcblxuY29uc3QgYWN0aXZlU3RyZWFtcyA9IG5ldyBNYXA8c3RyaW5nLCBBY3RpdmVTdHJlYW0+KClcblxuY29uc3Qgc3RvcmUgPSAoKSA9PiB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKClcblxuY29uc3QgaXNTdHJlYW1BY3RpdmUgPSAoc2Vzc2lvbklkOiBzdHJpbmcpOiBib29sZWFuID0+IGFjdGl2ZVN0cmVhbXMuaGFzKHNlc3Npb25JZClcblxuY29uc3QgZ2V0QWN0aXZlU3RyZWFtQ291bnQgPSAoKTogbnVtYmVyID0+IGFjdGl2ZVN0cmVhbXMuc2l6ZVxuXG5jb25zdCBwYXJzZVNlc3Npb25TU0UgPSBhc3luYyAocmVzcG9uc2U6IFJlc3BvbnNlLCBhY3RpdmU6IEFjdGl2ZVN0cmVhbSwgcGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY2FsbGJhY2tzLCB0IH0gPSBwYXJhbXNcbiAgY29uc3QgaGl0bEV4ZWN1dGlvbkNvbnRleHQgPSBwYXJhbXMuaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gc2Vzc2lvbkhpdGxDb250ZXh0LmdldChzZXNzaW9uSWQpXG5cbiAgbGV0IHBlbmRpbmdDb250ZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBsZXQgdGhyb3R0bGVUaW1lcjogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICBjb25zdCBmbHVzaFRvU3RvcmVzID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnNldFRleHQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjb250ZW50KVxuICAgIGNhbGxiYWNrcy5vblN0cmVhbVVwZGF0ZT8uKGNvbnRlbnQpXG4gIH1cblxuICBjb25zdCBlbWl0VGhyb3R0bGVkID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgIHBlbmRpbmdDb250ZW50ID0gY29udGVudFxuICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHJldHVyblxuICAgIHRocm90dGxlVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICAgIGZsdXNoVG9TdG9yZXModG9FbWl0KVxuICAgICAgfVxuICAgIH0sIFNUUkVBTV9USFJPVFRMRV9NUylcbiAgfVxuXG4gIGNvbnN0IGZsdXNoUGVuZGluZyA9ICgpID0+IHtcbiAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRocm90dGxlVGltZXIpXG4gICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgIH1cbiAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgZmx1c2hUb1N0b3Jlcyh0b0VtaXQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgaWYgKCFyZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIGxldCBidWZmZXIgPSAnJ1xuICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgbGV0IGhhc1N0YXJ0ZWRXcml0aW5nID0gZmFsc2VcblxuICBjb25zdCBlbnN1cmVXcml0aW5nU3RhcnRlZCA9ICgpID0+IHtcbiAgICBpZiAoaGFzU3RhcnRlZFdyaXRpbmcpIHJldHVyblxuICAgIGhhc1N0YXJ0ZWRXcml0aW5nID0gdHJ1ZVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUsIGlzV3JpdGluZzogdHJ1ZSB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3dyaXRpbmcnKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkodCkpXG4gICAgY2FsbGJhY2tzLm9uU3RhcnRXcml0aW5nPy4oKVxuICB9XG5cbiAgY29uc3QgYXBwbHlTdHJlYW1DaHVuayA9IChjaHVuazogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFjaHVuaykgcmV0dXJuXG4gICAgYWNjdW11bGF0ZWRDb250ZW50ID0gbWVyZ2VTdHJlYW1DaHVuayhhY2N1bXVsYXRlZENvbnRlbnQsIGNodW5rKVxuICAgIHJlYXNvbmluZ1N0b3JlLnN5bmNMaXZlTmFycmF0aW9uKHBsYWNlaG9sZGVySWQsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICBlbWl0VGhyb3R0bGVkKGFjY3VtdWxhdGVkQ29udGVudClcbiAgfVxuXG4gIGNvbnN0IGNsZWFyU3RyZWFtTGlrZUFuc3dlclJlc2V0ID0gKCkgPT4ge1xuICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhyb3R0bGVUaW1lcilcbiAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgfVxuICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgIGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gICAgZmx1c2hUb1N0b3JlcygnJylcbiAgICByZWFzb25pbmdTdG9yZS5tYXJrQW5zd2VyUmVzZXQocGxhY2Vob2xkZXJJZClcbiAgfVxuXG4gIGNvbnN0IGFwcGx5U3RyZWFtQ29tcGxldGUgPSAocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAocGF5bG9hZC5jb250ZW50IGFzIHN0cmluZykgfHwgYWNjdW11bGF0ZWRDb250ZW50XG4gICAgY29uc3Qgc291cmNlcyA9IHBheWxvYWQuc291cmNlcyB8fCBudWxsXG4gICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKHBheWxvYWQubWVtb3J5X3Nlc3Npb25faWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLmF0dGFjaG1lbnRzKSA/IHBheWxvYWQuYXR0YWNobWVudHMgOiBudWxsXG4gICAgbGV0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5zdWdnZXN0X3JlcGx5KSkge1xuICAgICAgc3VnZ2VzdGlvbnMgPSBwYXlsb2FkLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW11cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5zdWdnZXN0aW9ucykpIHtcbiAgICAgIHN1Z2dlc3Rpb25zID0gcGF5bG9hZC5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXVxuICAgIH1cbiAgICBjb25zdCBhZ2VudElkUmF3ID0gcGF5bG9hZC5hZ2VudF9pZCA/PyBwYXlsb2FkLmFnZW50SWRcbiAgICBjb25zdCBjb21wbGV0ZWRBZ2VudElkID0gYWdlbnRJZFJhdyAhPSBudWxsICYmIFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgIT09ICcnID8gU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSA6IG51bGxcbiAgICBjb25zdCBzdWJhZ2VudFJhdyA9IHBheWxvYWQuc3ViYWdlbnQgYXMgeyByZXNvbHZlZF9jb250ZXh0PzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuICAgIGNvbnN0IHJlc29sdmVkQ29udGV4dCA9IHN1YmFnZW50UmF3Py5yZXNvbHZlZF9jb250ZXh0ID8/IG51bGxcbiAgICBjb25zdCByZWFzb25pbmcgPSAocGF5bG9hZC5yZWFzb25pbmcgYXMgUmVhc29uaW5nVHJhY2VQYXlsb2FkIHwgbnVsbCkgPz8gbnVsbFxuXG4gICAgcmVhc29uaW5nU3RvcmUuZmluaXNoKHBsYWNlaG9sZGVySWQsIHJlYXNvbmluZylcbiAgICBmbHVzaFBlbmRpbmcoKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnY29tcGxldGUnKVxuXG4gICAgY29uc3QgZmluaXNoUGF5bG9hZDogU2Vzc2lvbkZpbmlzaFBheWxvYWQgPSB7XG4gICAgICBjb250ZW50OiBmaW5hbENvbnRlbnQsXG4gICAgICBzb3VyY2VzLFxuICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgYXR0YWNobWVudHMsXG4gICAgICBzdWdnZXN0aW9ucyxcbiAgICAgIGNvbXBsZXRlZEFnZW50SWQsXG4gICAgICByZXNvbHZlZENvbnRleHQsXG4gICAgICByZWFzb25pbmcsXG4gICAgfVxuICAgIGNhbGxiYWNrcy5vbkZpbmlzaFN0cmVhbT8uKGZpbmlzaFBheWxvYWQpXG5cbiAgICAvLyBFbCB0ZXh0byBlbiB2aXZvIE5PIHNlIGxpbXBpYSBhY8OhIGEgcHJvcMOzc2l0by4gRWwgcGxhY2Vob2xkZXIgc2UgdmEgY29uIGVsXG4gICAgLy8gYGRyb3BgIHF1ZSBoYWNlIGVsIGNvbnN1bWlkb3IsIHkgY29uIMOpbCBzdSBzdXNjcmlwY2nDs247IHZhY2lhcmxvIGFudGVzIGxvXG4gICAgLy8gZGVqYWJhIG1vbnRhZG8geSBzaW4gdGV4dG8gKGFsdHVyYSAwKSBkdXJhbnRlIH4yNW1zOiBlbCBmbGlja2VyIGRlIGZpbiBkZVxuICAgIC8vIHN0cmVhbS4gTm8gYWxjYW56YSBjb24gZGlmZXJpcmxvLCBwb3JxdWUgZXN0ZSBjbGVhciB2aWFqYSBlbiBTeW5jTGFuZVxuICAgIC8vIChzdG9yZSBleHRlcm5vKSB5IGVsIHN3YXAgZGUgbWVuc2FqZXMgZW4gRGVmYXVsdExhbmUsIGFzw60gcXVlIHNpZW1wcmUgc2VcbiAgICAvLyBjdWVsYSBlbiBlbCBtZWRpby4gRWwgc2xvdCBzZSBsaWJlcmEgZW4gZWwgcHLDs3hpbW8gYHN0YXJ0KClgIGRlIGxhIHNlc2nDs24sXG4gICAgLy8geSBlbiBzdG9wL2Vycm9yL2FwcHJvdmFsL2NhbWJpbyBkZSBzZXNpw7NuLCBxdWUgc8OtIGxsYW1hbiBgY2xlYXJgLlxuICB9XG5cbiAgdHJ5IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgIGlmIChkb25lKSBicmVha1xuXG4gICAgICBpZiAoYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgaWYgKGxpbmUudHJpbSgpID09PSAnJykgY29udGludWVcblxuICAgICAgICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICAgICAgICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIGNvbnRpbnVlXG5cbiAgICAgICAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gICAgICAgIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuXG4gICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3RoaW5raW5nJzoge1xuICAgICAgICAgICAgICBjb25zdCB0aGlua2luZ0RlbHRhID0gdHlwZW9mIGRhdGEuZGVsdGEgPT09ICdzdHJpbmcnID8gZGF0YS5kZWx0YSA6ICcnXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5pID09PSAnbnVtYmVyJyAmJiB0aGlua2luZ0RlbHRhKSB7XG4gICAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuYXBwZW5kVGhpbmtpbmcocGxhY2Vob2xkZXJJZCwgZGF0YS5pLCB0aGlua2luZ0RlbHRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghaGFzU3RhcnRlZFdyaXRpbmcpIHtcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCB7IHBoYXNlOiAndGhpbmtpbmcnLCBtZXNzYWdlOiBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlKDAsIHQpIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRWwgYmFja2VuZCBkZXNjYXJ0YSBsbyBlbWl0aWRvIHkgcmVpbmljaWEgbGEgcmVzcHVlc3RhIGRlc2RlIGNlcm8uXG4gICAgICAgICAgICBjYXNlICdhbnN3ZXJfcmVzZXQnOlxuICAgICAgICAgICAgICBjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCgpXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGNhc2UgJ3JlYXNvbmluZ19zdGVwJzoge1xuICAgICAgICAgICAgICBjb25zdCBzdGVwVG9vbCA9IHR5cGVvZiBkYXRhLnRvb2wgPT09ICdzdHJpbmcnID8gZGF0YS50b29sIDogJydcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcFR5cGUgPSB0eXBlb2YgZGF0YS50eXBlID09PSAnc3RyaW5nJyA/IGRhdGEudHlwZSA6ICcnXG4gICAgICAgICAgICAgIGlmIChzdGVwVG9vbCAmJiBzdGVwVHlwZSAhPT0gJ2hhbmRvZmYnICYmIGRhdGEuc3RhdHVzID09PSAncnVubmluZycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHJlc29sdmVUb29sQWN0aW9uTGFiZWwoc3RlcFRvb2wsIHQsICdwcmVzZW50JylcbiAgICAgICAgICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogbGFiZWwgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuY2FwdHVyZUxlYWRpbmdGcm9tQm9keShwbGFjZWhvbGRlcklkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuYXBwbHlTdGVwKHBsYWNlaG9sZGVySWQsIGRhdGEgYXMgUmVhc29uaW5nU3RlcFBheWxvYWQpXG4gICAgICAgICAgICAgICAgaWYgKHJlYXNvbmluZ1N0b3JlLnNob3VsZENsZWFyU3RyZWFtRm9yTGVhZGluZyhwbGFjZWhvbGRlcklkLCBhY2N1bXVsYXRlZENvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICBjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ3Rva2VuJzoge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdjb250ZW50Jzoge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICBpZiAoaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1Db21wbGV0ZShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICBpZiAoZGF0YS5ub2RlID09PSAnYWdlbnRfdHJhbnNmZXInKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1lc3NhZ2UgJiYgdHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoXG4gICAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eShcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhLnRocmVhZF9pZCA9PT0gJ3N0cmluZycgPyBkYXRhLnRocmVhZF9pZCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOiB7XG4gICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgIC8vIFByZWFwcm9iYWRvIChhdXRvLWFwcHJvdmUgbyBkZXRlY2Npw7NuIG1hbnVhbCk6IGVsIHN0cmVhbSBubyBzZSBjb3J0YSxcbiAgICAgICAgICAgICAgLy8gc2lndWUgZWplY3V0YW5kbyBsYXMgYWNjaW9uZXMgc2luIGVzcGVyYXIgZGVjaXNpw7NuIGRlbCB1c3VhcmlvLlxuICAgICAgICAgICAgICBjb25zdCBpc1ByZUFwcHJvdmVkID1cbiAgICAgICAgICAgICAgICBkYXRhLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgIGRhdGEuYXV0b19hcHByb3ZlZCA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgIGRhdGEuYXBwcm92YWxfc3RhdHVzID09PSAnYXBwcm92ZWQnXG4gICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIGlmICghaXNQcmVBcHByb3ZlZCkge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmZpbmlzaChwbGFjZWhvbGRlcklkLCAoZGF0YS5yZWFzb25pbmcgYXMgUmVhc29uaW5nVHJhY2VQYXlsb2FkIHwgbnVsbCkgPz8gbnVsbClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdhd2FpdGluZ19hcHByb3ZhbCcpXG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkFwcHJvdmFsUmVxdWlyZWQ/LihkYXRhIGFzIEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICBpZiAoaXNQcmVBcHByb3ZlZCAmJiBBcnJheS5pc0FycmF5KGRhdGEucGVuZGluZ19hY3Rpb25zKSAmJiBkYXRhLnBlbmRpbmdfYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkodCwgaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gdW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBkYXRhLmVycm9yKVxuICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldEVycm9yKHNlc3Npb25JZCwgeyB0eXBlOiBkYXRhLmVycm9yPy50eXBlLCBtZXNzYWdlOiBkYXRhLmVycm9yPy5tZXNzYWdlIH0pXG4gICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LihkYXRhLmVycm9yPy50eXBlLCBkYXRhLmVycm9yPy5tZXNzYWdlKVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gU1NFIGV2ZW50IHR5cGU6JywgZXZlbnRUeXBlKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBmbHVzaFBlbmRpbmcoKVxuICB9XG59XG5cbi8qKlxuICogTWFuYWdlciBzaW5nbGV0b24gKG1vZHVsZS1sZXZlbCkgcXVlIGNvcnJlIE4gc3RyZWFtcyBkZWwgb3JjaGVzdHJhdG9yIGVuXG4gKiBwYXJhbGVsbywgdW5vIHBvciBgc2Vzc2lvbklkYC4gU29icmV2aXZlIGEgY2FtYmlvcyBkZSB2aXN0YSB5IGFsIGNpZXJyZSBkZWxcbiAqIG1vZGFsOiBsb3Mgc3RyZWFtcyBzb2xvIHNlIGNhbmNlbGFuIGNvbiBzdG9wIGV4cGzDrWNpdG8gZGVsIHVzdWFyaW8gbyBhbFxuICogY29tcGxldGFyL2Vycm9yYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXNzaW9uU3RyZWFtTWFuYWdlciA9IHtcbiAgaXNBY3RpdmU6IGlzU3RyZWFtQWN0aXZlLFxuICBnZXRBY3RpdmVDb3VudDogZ2V0QWN0aXZlU3RyZWFtQ291bnQsXG4gIGdldEFjdGl2ZVNlc3Npb25JZHM6ICgpOiBzdHJpbmdbXSA9PiBBcnJheS5mcm9tKGFjdGl2ZVN0cmVhbXMua2V5cygpKSxcblxuICBhc3luYyBzdGFydFN0cmVhbShwYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zKTogUHJvbWlzZTxTdGFydFN0cmVhbVJlc3VsdD4ge1xuICAgIGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQoKVxuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIHJlcXVlc3QsIGNhbGxiYWNrcywgdCwgYWN0aXZpdHlPcHRpb25zLCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgaWYgKGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdhbHJlYWR5X2FjdGl2ZScgfVxuICAgIH1cbiAgICBpZiAoZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnbGltaXQnIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLihhZ2VudElkICE9IG51bGwgPyB7IGFnZW50SWQgfSA6IHt9KSxcbiAgICAgIC4uLihhZ2VudE5hbWUgIT0gbnVsbCA/IHsgYWdlbnROYW1lIH0gOiB7fSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHJlYXNvbmluZ1N0b3JlLnN0YXJ0KHBsYWNlaG9sZGVySWQpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSh0LCBhY3Rpdml0eU9wdGlvbnMgPz8ge30pKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3Iub3JjaGVzdHJhdG9yKHJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgYXdhaXQgcGFyc2VTZXNzaW9uU1NFKHJlc3BvbnNlLCBhY3RpdmUsIHBhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcblxuICAgICAgICBpZiAoaXNNYWlhQXBpRXJyb3IoZXJyb3IpICYmIGlzVXNhZ2VRdW90YUV4Y2VlZGVkRXJyb3IoZXJyb3IuY29kZSkpIHtcbiAgICAgICAgICBnZXRVc2FnZVN0b3JlU3RhdGUoKS5hcHBseVF1b3RhRXhjZWVkZWQoKVxuICAgICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oZXJyb3IuY29kZSwgZXJyb3IubWVzc2FnZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgLyoqIFJlc3VtZSBISVRMIChgY29udGludWUtdGhyZWFkYCkga2V5ZWQgcG9yIHNlc3Npb25JZCDigJQgbWlzbW8gbW90b3IgcXVlIG9yY2hlc3RyYXRvci4gKi9cbiAgYXN5bmMgc3RhcnRDb250aW51ZVN0cmVhbShwYXJhbXM6IFN0YXJ0Q29udGludWVTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGludWVSZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGhpdGxFeGVjdXRpb25Db250ZXh0LCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgaWYgKGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdhbHJlYWR5X2FjdGl2ZScgfVxuICAgIH1cbiAgICBpZiAoZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnbGltaXQnIH1cbiAgICB9XG5cbiAgICBpZiAoaGl0bEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICAgIHNlc3Npb25IaXRsQ29udGV4dC5zZXQoc2Vzc2lvbklkLCBoaXRsRXhlY3V0aW9uQ29udGV4dClcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLihhZ2VudElkICE9IG51bGwgPyB7IGFnZW50SWQgfSA6IHt9KSxcbiAgICAgIC4uLihhZ2VudE5hbWUgIT0gbnVsbCA/IHsgYWdlbnROYW1lIH0gOiB7fSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSh0LCBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZCkgPz8gdW5kZWZpbmVkKVxuICAgIClcblxuICAgIGNvbnN0IHNzZVBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgcmVxdWVzdDoge30gYXMgT3JjaGVzdHJhdG9yUmVxdWVzdCxcbiAgICAgIGNhbGxiYWNrcyxcbiAgICAgIHQsXG4gICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dDogaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gc2Vzc2lvbkhpdGxDb250ZXh0LmdldChzZXNzaW9uSWQpLFxuICAgICAgYWdlbnRJZCxcbiAgICAgIGFnZW50TmFtZSxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZChjb250aW51ZVJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnRpbnVlLXRocmVhZCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgICB9XG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgc3NlUGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuXG4gICAgICAgIGlmIChpc01haWFBcGlFcnJvcihlcnJvcikgJiYgaXNVc2FnZVF1b3RhRXhjZWVkZWRFcnJvcihlcnJvci5jb2RlKSkge1xuICAgICAgICAgIGdldFVzYWdlU3RvcmVTdGF0ZSgpLmFwcGx5UXVvdGFFeGNlZWRlZCgpXG4gICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LihlcnJvci5jb2RlLCBlcnJvci5tZXNzYWdlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAgIHNlc3Npb25IaXRsQ29udGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgLyoqIFJlZ2VuZXJhIGxhIHJlc3B1ZXN0YSBkZSB1biB0dXJubyAoYHJldHJ5X2NvbXBsZXRpb25gKSDigJQgbWlzbW8gbW90b3IgU1NFIHF1ZSBvcmNoZXN0cmF0b3IuICovXG4gIGFzeW5jIHN0YXJ0UmV0cnlTdHJlYW0ocGFyYW1zOiBTdGFydFJldHJ5U3RyZWFtUGFyYW1zKTogUHJvbWlzZTxTdGFydFN0cmVhbVJlc3VsdD4ge1xuICAgIGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQoKVxuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIHJldHJ5UmVxdWVzdCwgY2FsbGJhY2tzLCB0LCBhY3Rpdml0eU9wdGlvbnMsIGFnZW50SWQsIGFnZW50TmFtZSB9ID0gcGFyYW1zXG5cbiAgICBpZiAoaXNTdHJlYW1BY3RpdmUoc2Vzc2lvbklkKSkge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2FscmVhZHlfYWN0aXZlJyB9XG4gICAgfVxuICAgIGlmIChnZXRBY3RpdmVTdHJlYW1Db3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdsaW1pdCcgfVxuICAgIH1cbiAgICBpZiAoZ2V0VXNhZ2VTdG9yZVN0YXRlKCkuYmxvY2tlZCkge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ3VzYWdlX2Jsb2NrZWQnIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLihhZ2VudElkICE9IG51bGwgPyB7IGFnZW50SWQgfSA6IHt9KSxcbiAgICAgIC4uLihhZ2VudE5hbWUgIT0gbnVsbCA/IHsgYWdlbnROYW1lIH0gOiB7fSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkodCwgYWN0aXZpdHlPcHRpb25zID8/IHt9KSlcblxuICAgIGNvbnN0IHNzZVBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgcmVxdWVzdDoge30gYXMgT3JjaGVzdHJhdG9yUmVxdWVzdCxcbiAgICAgIGNhbGxiYWNrcyxcbiAgICAgIHQsXG4gICAgICBhY3Rpdml0eU9wdGlvbnMsXG4gICAgICBhZ2VudElkLFxuICAgICAgYWdlbnROYW1lLFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLnJldHJ5Q29tcGxldGlvbihyZXRyeVJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICBsZXQgZGV0YWlsOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHsgZGV0YWlsPzogc3RyaW5nIH1cbiAgICAgICAgICAgIGRldGFpbCA9IHR5cGVvZiBkYXRhLmRldGFpbCA9PT0gJ3N0cmluZycgPyBkYXRhLmRldGFpbCA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgZGV0YWlsID0gdW5kZWZpbmVkXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZXRhaWwgPT09ICdUdXJuIG5vdCBmb3VuZCcpIHtcbiAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlLCBwbGFjZWhvbGRlcklkOiBudWxsIH0pXG4gICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2lkbGUnKVxuICAgICAgICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ3R1cm5fbm90X2ZvdW5kJyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcmV0cnlfY29tcGxldGlvbiBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgICB9XG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgc3NlUGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuXG4gICAgICAgIGlmIChpc01haWFBcGlFcnJvcihlcnJvcikgJiYgaXNVc2FnZVF1b3RhRXhjZWVkZWRFcnJvcihlcnJvci5jb2RlKSkge1xuICAgICAgICAgIGdldFVzYWdlU3RvcmVTdGF0ZSgpLmFwcGx5UXVvdGFFeGNlZWRlZCgpXG4gICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LihlcnJvci5jb2RlLCBlcnJvci5tZXNzYWdlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogQ2FuY2VsYWNpw7NuIGV4cGzDrWNpdGEgZGVsIHVzdWFyaW8gKG1lbnNhamUgXCJjYW5jZWxhZG9cIikuICovXG4gIHN0b3BTdHJlYW0oc2Vzc2lvbklkOiBzdHJpbmcsIGNhbGxiYWNrcz86IFNlc3Npb25TdHJlYW1DYWxsYmFja3MpIHtcbiAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVTdHJlYW1zLmdldChzZXNzaW9uSWQpXG4gICAgaWYgKCFhY3RpdmUpIHJldHVyblxuICAgIGFjdGl2ZS5pc1N0b3BwZWQgPSB0cnVlXG4gICAgYWN0aXZlLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAvLyBFbCBwYXJjaWFsIHNlIHJlc2NhdGEgYW50ZXMgZGUgbGltcGlhcjogZWwgYmFja2VuZCBsbyBwZXJzaXN0ZSwgcGVybyBzaSBubyBsb1xuICAgIC8vIHBhc2Ftb3MgYWwgY2FsbGJhY2sgZGVzYXBhcmVjZSBkZSBwYW50YWxsYSBoYXN0YSBlbCBwcsOzeGltbyBmZXRjaCBkZSBsYSBzZXNpw7NuLlxuICAgIGNvbnN0IHBhcnRpYWxUZXh0ID0gc2Vzc2lvblN0cmVhbWluZ1RleHQuZ2V0U25hcHNob3Qoc2Vzc2lvbklkKS50ZXh0XG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnY2FuY2VsbGVkJylcbiAgICBjYWxsYmFja3M/Lm9uU3RvcD8uKHBhcnRpYWxUZXh0KVxuICB9LFxuXG4gIC8qKiBBYm9ydGEgc2luIG1hcmNhciBcImNhbmNlbGFkb1wiICh1c28gaW50ZXJubyAvIGxpbXBpZXphKS4gKi9cbiAgYWJvcnRTaWxlbnRseShzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZVN0cmVhbXMuZ2V0KHNlc3Npb25JZClcbiAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuXG4gICAgYWN0aXZlLmlzU3RvcHBlZCA9IHRydWVcbiAgICBhY3RpdmUuY29udHJvbGxlci5hYm9ydCgpXG4gICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIGlmIChzdG9yZSgpLmdldE1ldGEoc2Vzc2lvbklkKT8uc3RhdHVzICE9PSAnY29tcGxldGUnKSB7XG4gICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdpZGxlJylcbiAgICB9XG4gIH0sXG5cbiAgYWJvcnRBbGwoKSB7XG4gICAgQXJyYXkuZnJvbShhY3RpdmVTdHJlYW1zLmtleXMoKSkuZm9yRWFjaChzZXNzaW9uSWQgPT4gdGhpcy5hYm9ydFNpbGVudGx5KHNlc3Npb25JZCkpXG4gIH0sXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLElBQUksTUFBTSxxQkFBcUI7QUFDdEMsU0FBU0MsY0FBYyxRQUFRLG1DQUFtQztBQUNsRSxTQUFTQyxrQkFBa0IsRUFBRUMseUJBQXlCLFFBQVEsa0JBQWtCO0FBRWhGLFNBQ0VDLHdCQUF3QixFQUN4QkMseUJBQXlCLEVBQ3pCQyx3QkFBd0IsRUFDeEJDLDZCQUE2QixFQUM3QkMsZ0NBQWdDLEVBQ2hDQyxzQkFBc0IsUUFDakIsb0NBQW9DO0FBRTND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
771
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWlhIiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlVG9vbEFjdGlvbkxhYmVsIiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInJlYXNvbmluZ1N0b3JlIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInNlc3Npb25IaXRsQ29udGV4dCIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJTVFJFQU1fVEhST1RUTEVfTVMiLCJhY3RpdmVTdHJlYW1zIiwiTWFwIiwic3RvcmUiLCJnZXRTdGF0ZSIsImlzU3RyZWFtQWN0aXZlIiwic2Vzc2lvbklkIiwiaGFzIiwiZ2V0QWN0aXZlU3RyZWFtQ291bnQiLCJzaXplIiwicGFyc2VTZXNzaW9uU1NFIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJhY3RpdmUiLCJwYXJhbXMiLCJfcGFyYW1zJGhpdGxFeGVjdXRpb24iLCJfcmVzcG9uc2UkYm9keSIsIl9kYXRhJGVycm9yIiwiX2RhdGEkZXJyb3IyIiwiX2NhbGxiYWNrcyRvbkVycm9yIiwiX2RhdGEkZXJyb3IzIiwiX2RhdGEkZXJyb3I0IiwicGxhY2Vob2xkZXJJZCIsImNhbGxiYWNrcyIsInQiLCJoaXRsRXhlY3V0aW9uQ29udGV4dCIsInBlbmRpbmdDb250ZW50IiwidGhyb3R0bGVUaW1lciIsImZsdXNoVG9TdG9yZXMiLCJlbWl0VGhyb3R0bGVkIiwiZmx1c2hQZW5kaW5nIiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImhhc1N0YXJ0ZWRXcml0aW5nIiwiZW5zdXJlV3JpdGluZ1N0YXJ0ZWQiLCJhcHBseVN0cmVhbUNodW5rIiwiY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQiLCJhcHBseVN0cmVhbUNvbXBsZXRlIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpbmUiLCJfbGluZSRzcGxpdCIsIl9saW5lJHNwbGl0MiIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwiZGF0YVN0ciIsImRhdGEiLCJ0aGlua2luZ0RlbHRhIiwic3RlcFRvb2wiLCJzdGVwVHlwZSIsImxhYmVsIiwiY2h1bmsiLCJfY2h1bmsiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJpc1ByZUFwcHJvdmVkIiwiX3JlZjMiLCJfdCIsIl90MiIsIl90MyIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiZ2V0IiwiY29udGVudCIsIl9jYWxsYmFja3Mkb25TdHJlYW1VcCIsInNldFRleHQiLCJvblN0cmVhbVVwZGF0ZSIsImNhbGwiLCJ3aW5kb3ciLCJzZXRUaW1lb3V0IiwidG9FbWl0IiwiY2xlYXJUaW1lb3V0IiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfY2FsbGJhY2tzJG9uU3RhcnRXcmkiLCJwYXRjaE1ldGEiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJzZXRTdGF0dXMiLCJzZXRBY3Rpdml0eSIsIm9uU3RhcnRXcml0aW5nIiwic3luY0xpdmVOYXJyYXRpb24iLCJtYXJrQW5zd2VyUmVzZXQiLCJwYXlsb2FkIiwiX3BheWxvYWQkYWdlbnRfaWQiLCJfc3ViYWdlbnRSYXckcmVzb2x2ZWQiLCJfcmVmMiIsIl9jYWxsYmFja3Mkb25GaW5pc2hTdCIsImZpbmFsQ29udGVudCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsImF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5Iiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImFnZW50X2lkIiwiYWdlbnRJZCIsImNvbXBsZXRlZEFnZW50SWQiLCJTdHJpbmciLCJ0cmltIiwic3ViYWdlbnRSYXciLCJzdWJhZ2VudCIsInJlc29sdmVkQ29udGV4dCIsInJlc29sdmVkX2NvbnRleHQiLCJyZWFzb25pbmciLCJmaW5pc2giLCJmaW5pc2hQYXlsb2FkIiwib25GaW5pc2hTdHJlYW0iLCJpc1N0b3BwZWQiLCJjYW5jZWwiLCJhYnJ1cHQiLCJyZWFkIiwic2VudCIsImRlY29kZSIsInN0cmVhbSIsInNwbGl0IiwicG9wIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJzIiwibiIsIl9zbGljZWRUb0FycmF5IiwicmVwbGFjZSIsIkpTT04iLCJwYXJzZSIsImRlbHRhIiwiaSIsImFwcGVuZFRoaW5raW5nIiwicGhhc2UiLCJtZXNzYWdlIiwidG9vbCIsInR5cGUiLCJzdGF0dXMiLCJjYXB0dXJlTGVhZGluZ0Zyb21Cb2R5IiwiYXBwbHlTdGVwIiwic2hvdWxkQ2xlYXJTdHJlYW1Gb3JMZWFkaW5nIiwibm9kZSIsInVuZGVmaW5lZCIsInRocmVhZF9pZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImF1dG9fYXBwcm92ZWQiLCJhcHByb3ZhbF9zdGF0dXMiLCJjbGVhciIsIm9uQXBwcm92YWxSZXF1aXJlZCIsInBlbmRpbmdfYWN0aW9ucyIsImxlbmd0aCIsImNvbnNvbGUiLCJlcnJvciIsInNldEVycm9yIiwib25FcnJvciIsIndhcm4iLCJlIiwiZiIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwic2Vzc2lvblN0cmVhbU1hbmFnZXIiLCJpc0FjdGl2ZSIsImdldEFjdGl2ZUNvdW50IiwiZ2V0QWN0aXZlU2Vzc2lvbklkcyIsImZyb20iLCJrZXlzIiwic3RhcnRTdHJlYW0iLCJfY2FsbGVlMiIsInJlcXVlc3QiLCJhY3Rpdml0eU9wdGlvbnMiLCJhZ2VudE5hbWUiLCJjb250cm9sbGVyIiwiX2NhbGxiYWNrcyRvbkVycm9yMiIsIl90NCIsIl9jb250ZXh0MiIsInN0YXJ0ZWQiLCJyZWFzb24iLCJBYm9ydENvbnRyb2xsZXIiLCJzZXQiLCJlbnN1cmVTZXNzaW9uIiwiX29iamVjdFNwcmVhZCIsInN0YXJ0IiwiT3JjaGVzdHJhdG9yIiwib3JjaGVzdHJhdG9yIiwic2lnbmFsIiwic3RhcnRDb250aW51ZVN0cmVhbSIsIl9jYWxsZWUzIiwiX3JlZjQiLCJjb250aW51ZVJlcXVlc3QiLCJzc2VQYXJhbXMiLCJfY2FsbGJhY2tzJG9uRXJyb3IzIiwiX3Q1IiwiX2NvbnRleHQzIiwiY29udGludWVUaHJlYWQiLCJvayIsImNvbmNhdCIsInN0YXJ0UmV0cnlTdHJlYW0iLCJfY2FsbGVlNCIsInJldHJ5UmVxdWVzdCIsImRldGFpbCIsIl9jYWxsYmFja3Mkb25FcnJvcjQiLCJfdDYiLCJfdDciLCJfY29udGV4dDQiLCJyZXRyeUNvbXBsZXRpb24iLCJqc29uIiwic3RvcFN0cmVhbSIsIl9jYWxsYmFja3Mkb25TdG9wIiwiYWJvcnQiLCJwYXJ0aWFsVGV4dCIsImdldFNuYXBzaG90IiwidGV4dCIsIm9uU3RvcCIsImFib3J0U2lsZW50bHkiLCJfc3RvcmUkZ2V0TWV0YSIsImdldE1ldGEiLCJhYm9ydEFsbCIsIl90aGlzIiwiZm9yRWFjaCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnN0YW50LWNvbmRpdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB0eXBlIHsgQXBwcm92YWxSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7XG4gIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSxcbiAgZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSxcbiAgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVUb29sQWN0aW9uTGFiZWwsXG59IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgdHlwZSB7IEhpdGxFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCwgbWVyZ2VTdHJlYW1DaHVuayB9IGZyb20gJy4uLy4uL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQnXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdTdGVwUGF5bG9hZCwgUmVhc29uaW5nVHJhY2VQYXlsb2FkIH0gZnJvbSAnLi4vLi4vdHlwZXMvcmVhc29uaW5nJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbWluZ1RleHQgfSBmcm9tICcuL3Nlc3Npb25TdHJlYW1pbmdUZXh0J1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4vdXNlU2Vzc2lvbnNTdG9yZSdcbmltcG9ydCB7IGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQgfSBmcm9tICcuL3Nlc3Npb25Ob3RpZmljYXRpb25zJ1xuaW1wb3J0IHsgc2Vzc2lvbkhpdGxDb250ZXh0IH0gZnJvbSAnLi9zZXNzaW9uSGl0bENvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFNlc3Npb25GaW5pc2hQYXlsb2FkLCBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzLCBTdGFydFN0cmVhbVJlc3VsdCB9IGZyb20gJy4vc2Vzc2lvbnMudHlwZXMnXG5cbnR5cGUgT3JjaGVzdHJhdG9yUmVxdWVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcj5bMF1cbnR5cGUgQ29udGludWVUaHJlYWRSZXF1ZXN0ID0gUGFyYW1ldGVyczx0eXBlb2YgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQ+WzBdXG50eXBlIFJldHJ5Q29tcGxldGlvblJlcXVlc3QgPSBQYXJhbWV0ZXJzPHR5cGVvZiBtYWlhLk9yY2hlc3RyYXRvci5yZXRyeUNvbXBsZXRpb24+WzBdXG5cbi8qKiBDb21wYXRpYmxlIGNvbiBlbCBgdGAgZGUgaTE4bmV4dCAodXNvIGRlIHVuYSBzb2xhIGtleSkuICovXG50eXBlIFRyYW5zbGF0ZUZuID0gKGtleTogc3RyaW5nKSA9PiBzdHJpbmdcblxudHlwZSBTdGFydFN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIHJlcXVlc3Q6IE9yY2hlc3RyYXRvclJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGFjdGl2aXR5T3B0aW9ucz86IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaGFzQXR0YWNobWVudHM/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHNDb3VudD86IG51bWJlclxuICB9XG4gIGhpdGxFeGVjdXRpb25Db250ZXh0PzogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsXG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgU3RhcnRDb250aW51ZVN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIGNvbnRpbnVlUmVxdWVzdDogQ29udGludWVUaHJlYWRSZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBoaXRsRXhlY3V0aW9uQ29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbFxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIFN0YXJ0UmV0cnlTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICByZXRyeVJlcXVlc3Q6IFJldHJ5Q29tcGxldGlvblJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGFjdGl2aXR5T3B0aW9ucz86IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaGFzQXR0YWNobWVudHM/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHNDb3VudD86IG51bWJlclxuICB9XG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgQWN0aXZlU3RyZWFtID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXJcbiAgaXNTdG9wcGVkOiBib29sZWFuXG59XG5cbi8qKlxuICogTcOheGltbyBkZSBzZXNpb25lcyBnZW5lcmFuZG8gZW4gcGFyYWxlbG8uIFByb3RlZ2UgcmVkL3JlY3Vyc29zIGRlbCBjbGllbnRlLlxuICogQWp1c3RhYmxlIGEgZnV0dXJvIHbDrWEgZmxhZyBkZWwgaG9zdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgPSA0XG5cbmNvbnN0IFNUUkVBTV9USFJPVFRMRV9NUyA9IDE2XG5cbmNvbnN0IGFjdGl2ZVN0cmVhbXMgPSBuZXcgTWFwPHN0cmluZywgQWN0aXZlU3RyZWFtPigpXG5cbmNvbnN0IHN0b3JlID0gKCkgPT4gdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpXG5cbmNvbnN0IGlzU3RyZWFtQWN0aXZlID0gKHNlc3Npb25JZDogc3RyaW5nKTogYm9vbGVhbiA9PiBhY3RpdmVTdHJlYW1zLmhhcyhzZXNzaW9uSWQpXG5cbmNvbnN0IGdldEFjdGl2ZVN0cmVhbUNvdW50ID0gKCk6IG51bWJlciA9PiBhY3RpdmVTdHJlYW1zLnNpemVcblxuY29uc3QgcGFyc2VTZXNzaW9uU1NFID0gYXN5bmMgKHJlc3BvbnNlOiBSZXNwb25zZSwgYWN0aXZlOiBBY3RpdmVTdHJlYW0sIHBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNhbGxiYWNrcywgdCB9ID0gcGFyYW1zXG4gIGNvbnN0IGhpdGxFeGVjdXRpb25Db250ZXh0ID0gcGFyYW1zLmhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHNlc3Npb25IaXRsQ29udGV4dC5nZXQoc2Vzc2lvbklkKVxuXG4gIGxldCBwZW5kaW5nQ29udGVudDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgbGV0IHRocm90dGxlVGltZXI6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgY29uc3QgZmx1c2hUb1N0b3JlcyA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zZXRUZXh0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGVudClcbiAgICBjYWxsYmFja3Mub25TdHJlYW1VcGRhdGU/Lihjb250ZW50KVxuICB9XG5cbiAgY29uc3QgZW1pdFRocm90dGxlZCA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICBwZW5kaW5nQ29udGVudCA9IGNvbnRlbnRcbiAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSByZXR1cm5cbiAgICB0aHJvdHRsZVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgICBmbHVzaFRvU3RvcmVzKHRvRW1pdClcbiAgICAgIH1cbiAgICB9LCBTVFJFQU1fVEhST1RUTEVfTVMpXG4gIH1cblxuICBjb25zdCBmbHVzaFBlbmRpbmcgPSAoKSA9PiB7XG4gICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aHJvdHRsZVRpbWVyKVxuICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICB9XG4gICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgIGZsdXNoVG9TdG9yZXModG9FbWl0KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBoYXNTdGFydGVkV3JpdGluZyA9IGZhbHNlXG5cbiAgY29uc3QgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQgPSAoKSA9PiB7XG4gICAgaWYgKGhhc1N0YXJ0ZWRXcml0aW5nKSByZXR1cm5cbiAgICBoYXNTdGFydGVkV3JpdGluZyA9IHRydWVcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlLCBpc1dyaXRpbmc6IHRydWUgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd3cml0aW5nJylcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5KHQpKVxuICAgIGNhbGxiYWNrcy5vblN0YXJ0V3JpdGluZz8uKClcbiAgfVxuXG4gIGNvbnN0IGFwcGx5U3RyZWFtQ2h1bmsgPSAoY2h1bms6IHN0cmluZykgPT4ge1xuICAgIGlmICghY2h1bmspIHJldHVyblxuICAgIGFjY3VtdWxhdGVkQ29udGVudCA9IG1lcmdlU3RyZWFtQ2h1bmsoYWNjdW11bGF0ZWRDb250ZW50LCBjaHVuaylcbiAgICByZWFzb25pbmdTdG9yZS5zeW5jTGl2ZU5hcnJhdGlvbihwbGFjZWhvbGRlcklkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgZW1pdFRocm90dGxlZChhY2N1bXVsYXRlZENvbnRlbnQpXG4gIH1cblxuICBjb25zdCBjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCA9ICgpID0+IHtcbiAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRocm90dGxlVGltZXIpXG4gICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgIH1cbiAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICAgIGZsdXNoVG9TdG9yZXMoJycpXG4gICAgcmVhc29uaW5nU3RvcmUubWFya0Fuc3dlclJlc2V0KHBsYWNlaG9sZGVySWQpXG4gIH1cblxuICBjb25zdCBhcHBseVN0cmVhbUNvbXBsZXRlID0gKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgY29uc3QgZmluYWxDb250ZW50ID0gKHBheWxvYWQuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgIGNvbnN0IHNvdXJjZXMgPSBwYXlsb2FkLnNvdXJjZXMgfHwgbnVsbFxuICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IChwYXlsb2FkLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdHRhY2htZW50cykgPyBwYXlsb2FkLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgIGxldCBzdWdnZXN0aW9uczogc3RyaW5nW10gfCBudWxsID0gbnVsbFxuICAgIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuc3VnZ2VzdF9yZXBseSkpIHtcbiAgICAgIHN1Z2dlc3Rpb25zID0gcGF5bG9hZC5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuc3VnZ2VzdGlvbnMpKSB7XG4gICAgICBzdWdnZXN0aW9ucyA9IHBheWxvYWQuc3VnZ2VzdGlvbnMgYXMgc3RyaW5nW11cbiAgICB9XG4gICAgY29uc3QgYWdlbnRJZFJhdyA9IHBheWxvYWQuYWdlbnRfaWQgPz8gcGF5bG9hZC5hZ2VudElkXG4gICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9IGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgY29uc3Qgc3ViYWdlbnRSYXcgPSBwYXlsb2FkLnN1YmFnZW50IGFzIHsgcmVzb2x2ZWRfY29udGV4dD86IHVua25vd24gfSB8IG51bGwgfCB1bmRlZmluZWRcbiAgICBjb25zdCByZXNvbHZlZENvbnRleHQgPSBzdWJhZ2VudFJhdz8ucmVzb2x2ZWRfY29udGV4dCA/PyBudWxsXG4gICAgY29uc3QgcmVhc29uaW5nID0gKHBheWxvYWQucmVhc29uaW5nIGFzIFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGwpID8/IG51bGxcblxuICAgIHJlYXNvbmluZ1N0b3JlLmZpbmlzaChwbGFjZWhvbGRlcklkLCByZWFzb25pbmcpXG4gICAgZmx1c2hQZW5kaW5nKClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2NvbXBsZXRlJylcblxuICAgIGNvbnN0IGZpbmlzaFBheWxvYWQ6IFNlc3Npb25GaW5pc2hQYXlsb2FkID0ge1xuICAgICAgY29udGVudDogZmluYWxDb250ZW50LFxuICAgICAgc291cmNlcyxcbiAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICBjb21wbGV0ZWRBZ2VudElkLFxuICAgICAgcmVzb2x2ZWRDb250ZXh0LFxuICAgICAgcmVhc29uaW5nLFxuICAgIH1cbiAgICBjYWxsYmFja3Mub25GaW5pc2hTdHJlYW0/LihmaW5pc2hQYXlsb2FkKVxuXG4gICAgLy8gRWwgdGV4dG8gZW4gdml2byBOTyBzZSBsaW1waWEgYWPDoSBhIHByb3DDs3NpdG8uIEVsIHBsYWNlaG9sZGVyIHNlIHZhIGNvbiBlbFxuICAgIC8vIGBkcm9wYCBxdWUgaGFjZSBlbCBjb25zdW1pZG9yLCB5IGNvbiDDqWwgc3Ugc3VzY3JpcGNpw7NuOyB2YWNpYXJsbyBhbnRlcyBsb1xuICAgIC8vIGRlamFiYSBtb250YWRvIHkgc2luIHRleHRvIChhbHR1cmEgMCkgZHVyYW50ZSB+MjVtczogZWwgZmxpY2tlciBkZSBmaW4gZGVcbiAgICAvLyBzdHJlYW0uIE5vIGFsY2FuemEgY29uIGRpZmVyaXJsbywgcG9ycXVlIGVzdGUgY2xlYXIgdmlhamEgZW4gU3luY0xhbmVcbiAgICAvLyAoc3RvcmUgZXh0ZXJubykgeSBlbCBzd2FwIGRlIG1lbnNhamVzIGVuIERlZmF1bHRMYW5lLCBhc8OtIHF1ZSBzaWVtcHJlIHNlXG4gICAgLy8gY3VlbGEgZW4gZWwgbWVkaW8uIEVsIHNsb3Qgc2UgbGliZXJhIGVuIGVsIHByw7N4aW1vIGBzdGFydCgpYCBkZSBsYSBzZXNpw7NuLFxuICAgIC8vIHkgZW4gc3RvcC9lcnJvci9hcHByb3ZhbC9jYW1iaW8gZGUgc2VzacOzbiwgcXVlIHPDrSBsbGFtYW4gYGNsZWFyYC5cbiAgfVxuXG4gIHRyeSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgICBpZiAoZG9uZSkgYnJlYWtcblxuICAgICAgaWYgKGFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGlmIChsaW5lLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlXG5cbiAgICAgICAgY29uc3QgW2V2ZW50TGluZSwgZGF0YUxpbmVdID0gbGluZS5zcGxpdCgnXFxuJylcbiAgICAgICAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50TGluZS5yZXBsYWNlKCdldmVudDogJywgJycpLnRyaW0oKVxuICAgICAgICBjb25zdCBkYXRhU3RyID0gZGF0YUxpbmUucmVwbGFjZSgnZGF0YTogJywgJycpLnRyaW0oKVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcblxuICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICd0aGlua2luZyc6IHtcbiAgICAgICAgICAgICAgY29uc3QgdGhpbmtpbmdEZWx0YSA9IHR5cGVvZiBkYXRhLmRlbHRhID09PSAnc3RyaW5nJyA/IGRhdGEuZGVsdGEgOiAnJ1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuaSA9PT0gJ251bWJlcicgJiYgdGhpbmtpbmdEZWx0YSkge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmFwcGVuZFRoaW5raW5nKHBsYWNlaG9sZGVySWQsIGRhdGEuaSwgdGhpbmtpbmdEZWx0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgeyBwaGFzZTogJ3RoaW5raW5nJywgbWVzc2FnZTogZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSgwLCB0KSB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVsIGJhY2tlbmQgZGVzY2FydGEgbG8gZW1pdGlkbyB5IHJlaW5pY2lhIGxhIHJlc3B1ZXN0YSBkZXNkZSBjZXJvLlxuICAgICAgICAgICAgY2FzZSAnYW5zd2VyX3Jlc2V0JzpcbiAgICAgICAgICAgICAgY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQoKVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdyZWFzb25pbmdfc3RlcCc6IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcFRvb2wgPSB0eXBlb2YgZGF0YS50b29sID09PSAnc3RyaW5nJyA/IGRhdGEudG9vbCA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IHN0ZXBUeXBlID0gdHlwZW9mIGRhdGEudHlwZSA9PT0gJ3N0cmluZycgPyBkYXRhLnR5cGUgOiAnJ1xuICAgICAgICAgICAgICBpZiAoc3RlcFRvb2wgJiYgc3RlcFR5cGUgIT09ICdoYW5kb2ZmJyAmJiBkYXRhLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSByZXNvbHZlVG9vbEFjdGlvbkxhYmVsKHN0ZXBUb29sLCB0LCAncHJlc2VudCcpXG4gICAgICAgICAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgeyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IGxhYmVsIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5pID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmNhcHR1cmVMZWFkaW5nRnJvbUJvZHkocGxhY2Vob2xkZXJJZCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmFwcGx5U3RlcChwbGFjZWhvbGRlcklkLCBkYXRhIGFzIFJlYXNvbmluZ1N0ZXBQYXlsb2FkKVxuICAgICAgICAgICAgICAgIGlmIChyZWFzb25pbmdTdG9yZS5zaG91bGRDbGVhclN0cmVhbUZvckxlYWRpbmcocGxhY2Vob2xkZXJJZCwgYWNjdW11bGF0ZWRDb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICd0b2tlbic6IHtcbiAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGRhdGEuY29udGVudCA6ICcnXG4gICAgICAgICAgICAgIGVuc3VyZVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICAgICAgYXBwbHlTdHJlYW1DaHVuayhjaHVuaylcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnY29udGVudCc6IHtcbiAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGRhdGEuY29udGVudCA6ICcnXG4gICAgICAgICAgICAgIGVuc3VyZVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICAgICAgYXBwbHlTdHJlYW1DaHVuayhjaHVuaylcbiAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdub2RlJzpcbiAgICAgICAgICAgICAgaWYgKGRhdGEubm9kZSA9PT0gJ2FnZW50X3RyYW5zZmVyJykge1xuICAgICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUgfSlcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tZXNzYWdlICYmIHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KFxuICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHkoXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgdCxcbiAgICAgICAgICAgICAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZGF0YS50aHJlYWRfaWQgPT09ICdzdHJpbmcnID8gZGF0YS50aHJlYWRfaWQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGNhc2UgJ2FwcHJvdmFsX3JlcXVpcmVkJzoge1xuICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAvLyBQcmVhcHJvYmFkbyAoYXV0by1hcHByb3ZlIG8gZGV0ZWNjacOzbiBtYW51YWwpOiBlbCBzdHJlYW0gbm8gc2UgY29ydGEsXG4gICAgICAgICAgICAgIC8vIHNpZ3VlIGVqZWN1dGFuZG8gbGFzIGFjY2lvbmVzIHNpbiBlc3BlcmFyIGRlY2lzacOzbiBkZWwgdXN1YXJpby5cbiAgICAgICAgICAgICAgY29uc3QgaXNQcmVBcHByb3ZlZCA9XG4gICAgICAgICAgICAgICAgZGF0YS5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICBkYXRhLmF1dG9fYXBwcm92ZWQgPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICBkYXRhLmFwcHJvdmFsX3N0YXR1cyA9PT0gJ2FwcHJvdmVkJ1xuICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICBpZiAoIWlzUHJlQXBwcm92ZWQpIHtcbiAgICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5maW5pc2gocGxhY2Vob2xkZXJJZCwgKGRhdGEucmVhc29uaW5nIGFzIFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGwpID8/IG51bGwpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UgfSlcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnYXdhaXRpbmdfYXBwcm92YWwnKVxuICAgICAgICAgICAgICBjYWxsYmFja3Mub25BcHByb3ZhbFJlcXVpcmVkPy4oZGF0YSBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgaWYgKGlzUHJlQXBwcm92ZWQgJiYgQXJyYXkuaXNBcnJheShkYXRhLnBlbmRpbmdfYWN0aW9ucykgJiYgZGF0YS5wZW5kaW5nX2FjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUgfSlcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTU0UgRXJyb3I6JywgZGF0YS5lcnJvcilcbiAgICAgICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRFcnJvcihzZXNzaW9uSWQsIHsgdHlwZTogZGF0YS5lcnJvcj8udHlwZSwgbWVzc2FnZTogZGF0YS5lcnJvcj8ubWVzc2FnZSB9KVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oZGF0YS5lcnJvcj8udHlwZSwgZGF0YS5lcnJvcj8ubWVzc2FnZSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtub3duIFNTRSBldmVudCB0eXBlOicsIGV2ZW50VHlwZSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgZmx1c2hQZW5kaW5nKClcbiAgfVxufVxuXG4vKipcbiAqIE1hbmFnZXIgc2luZ2xldG9uIChtb2R1bGUtbGV2ZWwpIHF1ZSBjb3JyZSBOIHN0cmVhbXMgZGVsIG9yY2hlc3RyYXRvciBlblxuICogcGFyYWxlbG8sIHVubyBwb3IgYHNlc3Npb25JZGAuIFNvYnJldml2ZSBhIGNhbWJpb3MgZGUgdmlzdGEgeSBhbCBjaWVycmUgZGVsXG4gKiBtb2RhbDogbG9zIHN0cmVhbXMgc29sbyBzZSBjYW5jZWxhbiBjb24gc3RvcCBleHBsw61jaXRvIGRlbCB1c3VhcmlvIG8gYWxcbiAqIGNvbXBsZXRhci9lcnJvcmFyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vzc2lvblN0cmVhbU1hbmFnZXIgPSB7XG4gIGlzQWN0aXZlOiBpc1N0cmVhbUFjdGl2ZSxcbiAgZ2V0QWN0aXZlQ291bnQ6IGdldEFjdGl2ZVN0cmVhbUNvdW50LFxuICBnZXRBY3RpdmVTZXNzaW9uSWRzOiAoKTogc3RyaW5nW10gPT4gQXJyYXkuZnJvbShhY3RpdmVTdHJlYW1zLmtleXMoKSksXG5cbiAgYXN5bmMgc3RhcnRTdHJlYW0ocGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyk6IFByb21pc2U8U3RhcnRTdHJlYW1SZXN1bHQ+IHtcbiAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcblxuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCByZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGFjdGl2aXR5T3B0aW9ucywgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGlmIChpc1N0cmVhbUFjdGl2ZShzZXNzaW9uSWQpKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnYWxyZWFkeV9hY3RpdmUnIH1cbiAgICB9XG4gICAgaWYgKGdldEFjdGl2ZVN0cmVhbUNvdW50KCkgPj0gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2xpbWl0JyB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IGFjdGl2ZTogQWN0aXZlU3RyZWFtID0geyBzZXNzaW9uSWQsIGNvbnRyb2xsZXIsIGlzU3RvcHBlZDogZmFsc2UgfVxuICAgIGFjdGl2ZVN0cmVhbXMuc2V0KHNlc3Npb25JZCwgYWN0aXZlKVxuXG4gICAgc3RvcmUoKS5lbnN1cmVTZXNzaW9uKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHtcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICAuLi4oYWdlbnRJZCAhPSBudWxsID8geyBhZ2VudElkIH0gOiB7fSksXG4gICAgICAuLi4oYWdlbnROYW1lICE9IG51bGwgPyB7IGFnZW50TmFtZSB9IDoge30pLFxuICAgIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICByZWFzb25pbmdTdG9yZS5zdGFydChwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkodCwgYWN0aXZpdHlPcHRpb25zID8/IHt9KSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcihyZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGF3YWl0IHBhcnNlU2Vzc2lvblNTRShyZXNwb25zZSwgYWN0aXZlLCBwYXJhbXMpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgLyoqIFJlc3VtZSBISVRMIChgY29udGludWUtdGhyZWFkYCkga2V5ZWQgcG9yIHNlc3Npb25JZCDigJQgbWlzbW8gbW90b3IgcXVlIG9yY2hlc3RyYXRvci4gKi9cbiAgYXN5bmMgc3RhcnRDb250aW51ZVN0cmVhbShwYXJhbXM6IFN0YXJ0Q29udGludWVTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGludWVSZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGhpdGxFeGVjdXRpb25Db250ZXh0LCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgaWYgKGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdhbHJlYWR5X2FjdGl2ZScgfVxuICAgIH1cbiAgICBpZiAoZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnbGltaXQnIH1cbiAgICB9XG5cbiAgICBpZiAoaGl0bEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICAgIHNlc3Npb25IaXRsQ29udGV4dC5zZXQoc2Vzc2lvbklkLCBoaXRsRXhlY3V0aW9uQ29udGV4dClcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLihhZ2VudElkICE9IG51bGwgPyB7IGFnZW50SWQgfSA6IHt9KSxcbiAgICAgIC4uLihhZ2VudE5hbWUgIT0gbnVsbCA/IHsgYWdlbnROYW1lIH0gOiB7fSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSh0LCBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZCkgPz8gdW5kZWZpbmVkKVxuICAgIClcblxuICAgIGNvbnN0IHNzZVBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgcmVxdWVzdDoge30gYXMgT3JjaGVzdHJhdG9yUmVxdWVzdCxcbiAgICAgIGNhbGxiYWNrcyxcbiAgICAgIHQsXG4gICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dDogaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gc2Vzc2lvbkhpdGxDb250ZXh0LmdldChzZXNzaW9uSWQpLFxuICAgICAgYWdlbnRJZCxcbiAgICAgIGFnZW50TmFtZSxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZChjb250aW51ZVJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnRpbnVlLXRocmVhZCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgICB9XG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgc3NlUGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKClcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgICAgc2Vzc2lvbkhpdGxDb250ZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogUmVnZW5lcmEgbGEgcmVzcHVlc3RhIGRlIHVuIHR1cm5vIChgcmV0cnlfY29tcGxldGlvbmApIOKAlCBtaXNtbyBtb3RvciBTU0UgcXVlIG9yY2hlc3RyYXRvci4gKi9cbiAgYXN5bmMgc3RhcnRSZXRyeVN0cmVhbShwYXJhbXM6IFN0YXJ0UmV0cnlTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgcmV0cnlSZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGFjdGl2aXR5T3B0aW9ucywgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGlmIChpc1N0cmVhbUFjdGl2ZShzZXNzaW9uSWQpKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnYWxyZWFkeV9hY3RpdmUnIH1cbiAgICB9XG4gICAgaWYgKGdldEFjdGl2ZVN0cmVhbUNvdW50KCkgPj0gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2xpbWl0JyB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IGFjdGl2ZTogQWN0aXZlU3RyZWFtID0geyBzZXNzaW9uSWQsIGNvbnRyb2xsZXIsIGlzU3RvcHBlZDogZmFsc2UgfVxuICAgIGFjdGl2ZVN0cmVhbXMuc2V0KHNlc3Npb25JZCwgYWN0aXZlKVxuXG4gICAgc3RvcmUoKS5lbnN1cmVTZXNzaW9uKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHtcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICAuLi4oYWdlbnRJZCAhPSBudWxsID8geyBhZ2VudElkIH0gOiB7fSksXG4gICAgICAuLi4oYWdlbnROYW1lICE9IG51bGwgPyB7IGFnZW50TmFtZSB9IDoge30pLFxuICAgIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHQsIGFjdGl2aXR5T3B0aW9ucyA/PyB7fSkpXG5cbiAgICBjb25zdCBzc2VQYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIHJlcXVlc3Q6IHt9IGFzIE9yY2hlc3RyYXRvclJlcXVlc3QsXG4gICAgICBjYWxsYmFja3MsXG4gICAgICB0LFxuICAgICAgYWN0aXZpdHlPcHRpb25zLFxuICAgICAgYWdlbnRJZCxcbiAgICAgIGFnZW50TmFtZSxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5yZXRyeUNvbXBsZXRpb24ocmV0cnlSZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgbGV0IGRldGFpbDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IGRldGFpbD86IHN0cmluZyB9XG4gICAgICAgICAgICBkZXRhaWwgPSB0eXBlb2YgZGF0YS5kZXRhaWwgPT09ICdzdHJpbmcnID8gZGF0YS5kZXRhaWwgOiB1bmRlZmluZWRcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGRldGFpbCA9IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGV0YWlsID09PSAnVHVybiBub3QgZm91bmQnKSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSwgcGxhY2Vob2xkZXJJZDogbnVsbCB9KVxuICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdpZGxlJylcbiAgICAgICAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICd0dXJuX25vdF9mb3VuZCcgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJldHJ5X2NvbXBsZXRpb24gZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgICAgfVxuICAgICAgYXdhaXQgcGFyc2VTZXNzaW9uU1NFKHJlc3BvbnNlLCBhY3RpdmUsIHNzZVBhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LigpXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogQ2FuY2VsYWNpw7NuIGV4cGzDrWNpdGEgZGVsIHVzdWFyaW8gKG1lbnNhamUgXCJjYW5jZWxhZG9cIikuICovXG4gIHN0b3BTdHJlYW0oc2Vzc2lvbklkOiBzdHJpbmcsIGNhbGxiYWNrcz86IFNlc3Npb25TdHJlYW1DYWxsYmFja3MpIHtcbiAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVTdHJlYW1zLmdldChzZXNzaW9uSWQpXG4gICAgaWYgKCFhY3RpdmUpIHJldHVyblxuICAgIGFjdGl2ZS5pc1N0b3BwZWQgPSB0cnVlXG4gICAgYWN0aXZlLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAvLyBFbCBwYXJjaWFsIHNlIHJlc2NhdGEgYW50ZXMgZGUgbGltcGlhcjogZWwgYmFja2VuZCBsbyBwZXJzaXN0ZSwgcGVybyBzaSBubyBsb1xuICAgIC8vIHBhc2Ftb3MgYWwgY2FsbGJhY2sgZGVzYXBhcmVjZSBkZSBwYW50YWxsYSBoYXN0YSBlbCBwcsOzeGltbyBmZXRjaCBkZSBsYSBzZXNpw7NuLlxuICAgIGNvbnN0IHBhcnRpYWxUZXh0ID0gc2Vzc2lvblN0cmVhbWluZ1RleHQuZ2V0U25hcHNob3Qoc2Vzc2lvbklkKS50ZXh0XG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnY2FuY2VsbGVkJylcbiAgICBjYWxsYmFja3M/Lm9uU3RvcD8uKHBhcnRpYWxUZXh0KVxuICB9LFxuXG4gIC8qKiBBYm9ydGEgc2luIG1hcmNhciBcImNhbmNlbGFkb1wiICh1c28gaW50ZXJubyAvIGxpbXBpZXphKS4gKi9cbiAgYWJvcnRTaWxlbnRseShzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZVN0cmVhbXMuZ2V0KHNlc3Npb25JZClcbiAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuXG4gICAgYWN0aXZlLmlzU3RvcHBlZCA9IHRydWVcbiAgICBhY3RpdmUuY29udHJvbGxlci5hYm9ydCgpXG4gICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIGlmIChzdG9yZSgpLmdldE1ldGEoc2Vzc2lvbklkKT8uc3RhdHVzICE9PSAnY29tcGxldGUnKSB7XG4gICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdpZGxlJylcbiAgICB9XG4gIH0sXG5cbiAgYWJvcnRBbGwoKSB7XG4gICAgQXJyYXkuZnJvbShhY3RpdmVTdHJlYW1zLmtleXMoKSkuZm9yRWFjaChzZXNzaW9uSWQgPT4gdGhpcy5hYm9ydFNpbGVudGx5KHNlc3Npb25JZCkpXG4gIH0sXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLElBQUksTUFBTSxxQkFBcUI7QUFFdEMsU0FDRUMsd0JBQXdCLEVBQ3hCQyx5QkFBeUIsRUFDekJDLHdCQUF3QixFQUN4QkMsNkJBQTZCLEVBQzdCQyxnQ0FBZ0MsRUFDaENDLHNCQUFzQixRQUNqQixvQ0FBb0M7QUFFM0MsU0FBU0Msd0JBQXdCLEVBQUVDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUN6RixTQUFTQyxjQUFjLFFBQVEsK0JBQStCO0FBRTlELFNBQVNDLG9CQUFvQixRQUFRLHdCQUF3QjtBQUM3RCxTQUFTQyxnQkFBZ0IsUUFBUSxvQkFBb0I7QUFDckQsU0FBU0MscUNBQXFDLFFBQVEsd0JBQXdCO0FBQzlFLFNBQVNDLGtCQUFrQixRQUFRLHNCQUFzQjs7QUFPekQ7O0FBcURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxzQkFBc0IsR0FBRyxDQUFDO0FBRXZDLElBQU1DLGtC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
@@ -32,4 +32,4 @@ export var isActiveSessionStatus = function isActiveSessionStatus(status) {
32
32
  /** Evento `maia-chat-session-meta` persistido para rehidratación sin refetch. */
33
33
 
34
34
  /** Cache en memoria de sesiones ya visitadas (evita refetch al volver). */
35
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBQ1RJVkVfU0VTU0lPTl9TVEFUVVNFUyIsImlzQWN0aXZlU2Vzc2lvblN0YXR1cyIsInN0YXR1cyIsImluY2x1ZGVzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25zLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2hhdE1lc3NhZ2UsIEFwcHJvdmFsUmVxdWVzdCB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgdHlwZSB7IEFnZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB9IGZyb20gJy4uLy4uL3R5cGVzL3JlYXNvbmluZydcblxuLyoqXG4gKiBFc3RhZG8gZGUgYWx0byBuaXZlbCBkZSB1bmEgc2VzacOzbiByZXNwZWN0byBhbCBhZ2VudGUuIENhZGEgc2VzacOzblxuICogKHRocmVhZC9jaGF0KSB0aWVuZSBzdSBwcm9waW8gY2ljbG8gZGUgdmlkYSBpbmRlcGVuZGllbnRlLCBsbyBxdWUgcGVybWl0ZVxuICogdGVuZXIgdmFyaWFzIGdlbmVyYW5kbyBlbiBwYXJhbGVsby5cbiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvblN0YXR1cyA9ICdpZGxlJyB8ICd0aGlua2luZycgfCAnd3JpdGluZycgfCAnYXdhaXRpbmdfYXBwcm92YWwnIHwgJ2NvbXBsZXRlJyB8ICdlcnJvcicgfCAnY2FuY2VsbGVkJ1xuXG4vKiogRXN0YWRvcyBlbiBsb3MgcXVlIGxhIHNlc2nDs24gZXN0w6EgdHJhYmFqYW5kbyAobW9zdHJhbW9zIGluZGljYWRvcikuICovXG5leHBvcnQgY29uc3QgQUNUSVZFX1NFU1NJT05fU1RBVFVTRVM6IHJlYWRvbmx5IFNlc3Npb25TdGF0dXNbXSA9IFsndGhpbmtpbmcnLCAnd3JpdGluZycsICdhd2FpdGluZ19hcHByb3ZhbCddXG5cbmV4cG9ydCBjb25zdCBpc0FjdGl2ZVNlc3Npb25TdGF0dXMgPSAoc3RhdHVzOiBTZXNzaW9uU3RhdHVzIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PlxuICBzdGF0dXMgIT0gbnVsbCAmJiBBQ1RJVkVfU0VTU0lPTl9TVEFUVVNFUy5pbmNsdWRlcyhzdGF0dXMpXG5cbmV4cG9ydCB0eXBlIFNlc3Npb25FcnJvciA9IHtcbiAgdHlwZT86IHN0cmluZ1xuICBtZXNzYWdlPzogc3RyaW5nXG59IHwgbnVsbFxuXG4vKipcbiAqIE1ldGFkYXRhIHJlYWN0aXZhIGRlIHVuYSBzZXNpw7NuIChsbyBxdWUgbGEgVUkgbmVjZXNpdGEgcGFyYSBwaW50YXIgZXN0YWRvLFxuICogaW5kaWNhZG9yZXMgeSBub3RpZmljYWNpb25lcykuIEVsIHRleHRvIGVuIHZpdm8gTk8gdml2ZSBhY8OhOiB2aWFqYSBwb3JcbiAqIGBzZXNzaW9uU3RyZWFtaW5nVGV4dGAgcGFyYSBubyByZS1yZW5kZXJpemFyIGxpc3RhcyBlbiBjYWRhIHRva2VuLlxuICovXG5leHBvcnQgdHlwZSBTZXNzaW9uUnVudGltZU1ldGEgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHN0YXR1czogU2Vzc2lvblN0YXR1c1xuICAvKiogRmllbCBhIGBzZXRMb2FkaW5nYCBkZWwgbW90b3Igb3JpZ2luYWw6IGhheSB1bmEgcmVxdWVzdCBlbiB2dWVsby4gKi9cbiAgaXNMb2FkaW5nOiBib29sZWFuXG4gIC8qKiBGaWVsIGEgYHNldElzV3JpdGluZ2A6IHlhIGxsZWdhcm9uIHRva2VucyB5IHNlIGVzdMOhIHBpbnRhbmRvIHRleHRvLiAqL1xuICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgc3RyZWFtQWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbFxuICBsb2FkaW5nTWVzc2FnZTogc3RyaW5nIHwgbnVsbFxuICAvKiogSWQgZGVsIG1lbnNhamUgcGxhY2Vob2xkZXIgcXVlIHNlIGVzdMOhIHBpbnRhbmRvIG1pZW50cmFzIGhhY2Ugc3RyZWFtaW5nLiAqL1xuICBwbGFjZWhvbGRlcklkOiBzdHJpbmcgfCBudWxsXG4gIHN0YXJ0ZWRBdDogbnVtYmVyIHwgbnVsbFxuICBmaW5pc2hlZEF0OiBudW1iZXIgfCBudWxsXG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG4gIHRpdGxlPzogc3RyaW5nIHwgbnVsbFxuICBlcnJvcjogU2Vzc2lvbkVycm9yXG59XG5cbi8qKiBTbmFwc2hvdCBkZWwgdGV4dG8gZW4gc3RyZWFtaW5nIGRlIHVuYSBzZXNpw7NuIChob3QgcGF0aCkuICovXG5leHBvcnQgdHlwZSBTZXNzaW9uU3RyZWFtaW5nU25hcHNob3QgPSB7XG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZyB8IG51bGxcbiAgdGV4dDogc3RyaW5nXG59XG5cbi8qKiBQYXlsb2FkIGNvbnNvbGlkYWRvIHF1ZSBlbWl0ZSBlbCBtYW5hZ2VyIGFsIGNvbXBsZXRhciB1biBzdHJlYW0uICovXG5leHBvcnQgdHlwZSBTZXNzaW9uRmluaXNoUGF5bG9hZCA9IHtcbiAgY29udGVudDogc3RyaW5nXG4gIHNvdXJjZXM6IHVua25vd25cbiAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmdcbiAgYXR0YWNobWVudHM6IHVua25vd25bXSB8IG51bGxcbiAgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdIHwgbnVsbFxuICBjb21wbGV0ZWRBZ2VudElkOiBzdHJpbmcgfCBudWxsXG4gIHJlc29sdmVkQ29udGV4dDogdW5rbm93blxuICByZWFzb25pbmc6IFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGxcbn1cblxuLyoqXG4gKiBDYWxsYmFja3MgcG9yIHNlc2nDs24gcGFyYSBxdWUgYHVzZUNoYXRNYW5hZ2VyYCByZWFjY2lvbmUgYWwgY2ljbG8gZGUgdmlkYVxuICogZGVsIHN0cmVhbSBzaW4gYWNvcGxhciBsYSBsw7NnaWNhIGRlIG1lbnNhamVzIC8gc2lkZS1lZmZlY3RzIGFsIG1hbmFnZXIuXG4gKi9cbmV4cG9ydCB0eXBlIFNlc3Npb25TdHJlYW1DYWxsYmFja3MgPSB7XG4gIG9uU3RyZWFtVXBkYXRlPzogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZFxuICBvblN0YXJ0V3JpdGluZz86ICgpID0+IHZvaWRcbiAgb25GaW5pc2hTdHJlYW0/OiAocGF5bG9hZDogU2Vzc2lvbkZpbmlzaFBheWxvYWQpID0+IHZvaWRcbiAgb25TdG9wPzogKHBhcnRpYWxUZXh0OiBzdHJpbmcpID0+IHZvaWRcbiAgb25FcnJvcj86IChlcnJvclR5cGU/OiBzdHJpbmcsIGVycm9yTWVzc2FnZT86IHN0cmluZykgPT4gdm9pZFxuICBvbkFwcHJvdmFsUmVxdWlyZWQ/OiAoYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcpID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgU3RhcnRTdHJlYW1SZXN1bHQgPVxuICB8IHsgc3RhcnRlZDogdHJ1ZSB9XG4gIHwgeyBzdGFydGVkOiBmYWxzZTsgcmVhc29uOiAnbGltaXQnIHwgJ2FscmVhZHlfYWN0aXZlJyB8ICd0dXJuX25vdF9mb3VuZCcgfCAndXNhZ2VfYmxvY2tlZCcgfVxuXG4vKiogU2xpY2UgZGUgbWVuc2FqZXMgcG9yIHNlc2nDs24gKGZ1bGwgc3RvcmUpLiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvbk1lc3NhZ2VzTWFwID0gUmVjb3JkPHN0cmluZywgQ2hhdE1lc3NhZ2VbXT5cblxuLyoqIENvbnRleHRvIGRlIGNvbnZlcnNhY2nDs24gcmVzdGF1cmFibGUgYWwgcmVhYnJpciB1bmEgc2VzacOzbiBjYWNoZWFkYS4gKi9cbmV4cG9ydCB0eXBlIFNlc3Npb25Db252ZXJzYXRpb25NZXRhID0ge1xuICBwcm9qZWN0SWRNZXNzYWdlPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBwcm9qZWN0TmFtZUZyb21TZXNzaW9uPzogc3RyaW5nIHwgbnVsbFxuICBjbGllbnRJZEZyb21TZXNzaW9uPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBjbGllbnROYW1lRnJvbVNlc3Npb24/OiBzdHJpbmcgfCBudWxsXG4gIHRhc2tJZEZyb21TZXNzaW9uPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICB0YXNrTmFtZUZyb21TZXNzaW9uPzogc3RyaW5nIHwgbnVsbFxufVxuXG4vKiogRXZlbnRvIGBtYWlhLWNoYXQtc2Vzc2lvbi1tZXRhYCBwZXJzaXN0aWRvIHBhcmEgcmVoaWRyYXRhY2nDs24gc2luIHJlZmV0Y2guICovXG5leHBvcnQgdHlwZSBTZXNzaW9uTWV0YUV2ZW50RGV0YWlsID0ge1xuICBjaGF0SWQ6IHN0cmluZ1xuICBhZ2VudFR5cGU/OiBzdHJpbmdcbiAgYWdlbnRFbnRpdHk/OiBzdHJpbmdcbiAgcHJvamVjdElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBwcm9qZWN0TmFtZT86IHN0cmluZyB8IG51bGxcbiAgY2xpZW50SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIGNsaWVudE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIHRhc2tJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgdGFza05hbWU/OiBzdHJpbmcgfCBudWxsXG59XG5cbi8qKiBDYWNoZSBlbiBtZW1vcmlhIGRlIHNlc2lvbmVzIHlhIHZpc2l0YWRhcyAoZXZpdGEgcmVmZXRjaCBhbCB2b2x2ZXIpLiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvblZpZXdDYWNoZSA9IHtcbiAgaHlkcmF0ZWRGcm9tQXBpOiBib29sZWFuXG4gIGxhc3RFdmFsdWF0ZWRLZXk6IG51bWJlciB8IHVuZGVmaW5lZFxuICBjb252ZXJzYXRpb25NZXRhOiBTZXNzaW9uQ29udmVyc2F0aW9uTWV0YSB8IG51bGxcbiAgc2Vzc2lvbk1ldGFFdmVudDogU2Vzc2lvbk1ldGFFdmVudERldGFpbCB8IG51bGxcbiAgYWdlbnRTbmFwc2hvdDogQWdlbnQgfCBudWxsXG59XG5cbmV4cG9ydCB0eXBlIFNlc3Npb25WaWV3Q2FjaGVNYXAgPSBSZWNvcmQ8c3RyaW5nLCBTZXNzaW9uVmlld0NhY2hlPlxuIl0sIm1hcHBpbmdzIjoiQUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0EsT0FBTyxJQUFNQSx1QkFBaUQsR0FBRyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLENBQUM7QUFFN0csT0FBTyxJQUFNQyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJQyxNQUFpQztFQUFBLE9BQ3JFQSxNQUFNLElBQUksSUFBSSxJQUFJRix1QkFBdUIsQ0FBQ0csUUFBUSxDQUFDRCxNQUFNLENBQUM7QUFBQTs7QUFPNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFvQkE7O0FBTUE7O0FBWUE7QUFDQTtBQUNBO0FBQ0E7O0FBY0E7O0FBR0E7O0FBVUE7O0FBYUEiLCJpZ25vcmVMaXN0IjpbXX0=
35
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBQ1RJVkVfU0VTU0lPTl9TVEFUVVNFUyIsImlzQWN0aXZlU2Vzc2lvblN0YXR1cyIsInN0YXR1cyIsImluY2x1ZGVzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25zLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2hhdE1lc3NhZ2UsIEFwcHJvdmFsUmVxdWVzdCB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgdHlwZSB7IEFnZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB9IGZyb20gJy4uLy4uL3R5cGVzL3JlYXNvbmluZydcblxuLyoqXG4gKiBFc3RhZG8gZGUgYWx0byBuaXZlbCBkZSB1bmEgc2VzacOzbiByZXNwZWN0byBhbCBhZ2VudGUuIENhZGEgc2VzacOzblxuICogKHRocmVhZC9jaGF0KSB0aWVuZSBzdSBwcm9waW8gY2ljbG8gZGUgdmlkYSBpbmRlcGVuZGllbnRlLCBsbyBxdWUgcGVybWl0ZVxuICogdGVuZXIgdmFyaWFzIGdlbmVyYW5kbyBlbiBwYXJhbGVsby5cbiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvblN0YXR1cyA9ICdpZGxlJyB8ICd0aGlua2luZycgfCAnd3JpdGluZycgfCAnYXdhaXRpbmdfYXBwcm92YWwnIHwgJ2NvbXBsZXRlJyB8ICdlcnJvcicgfCAnY2FuY2VsbGVkJ1xuXG4vKiogRXN0YWRvcyBlbiBsb3MgcXVlIGxhIHNlc2nDs24gZXN0w6EgdHJhYmFqYW5kbyAobW9zdHJhbW9zIGluZGljYWRvcikuICovXG5leHBvcnQgY29uc3QgQUNUSVZFX1NFU1NJT05fU1RBVFVTRVM6IHJlYWRvbmx5IFNlc3Npb25TdGF0dXNbXSA9IFsndGhpbmtpbmcnLCAnd3JpdGluZycsICdhd2FpdGluZ19hcHByb3ZhbCddXG5cbmV4cG9ydCBjb25zdCBpc0FjdGl2ZVNlc3Npb25TdGF0dXMgPSAoc3RhdHVzOiBTZXNzaW9uU3RhdHVzIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PlxuICBzdGF0dXMgIT0gbnVsbCAmJiBBQ1RJVkVfU0VTU0lPTl9TVEFUVVNFUy5pbmNsdWRlcyhzdGF0dXMpXG5cbmV4cG9ydCB0eXBlIFNlc3Npb25FcnJvciA9IHtcbiAgdHlwZT86IHN0cmluZ1xuICBtZXNzYWdlPzogc3RyaW5nXG59IHwgbnVsbFxuXG4vKipcbiAqIE1ldGFkYXRhIHJlYWN0aXZhIGRlIHVuYSBzZXNpw7NuIChsbyBxdWUgbGEgVUkgbmVjZXNpdGEgcGFyYSBwaW50YXIgZXN0YWRvLFxuICogaW5kaWNhZG9yZXMgeSBub3RpZmljYWNpb25lcykuIEVsIHRleHRvIGVuIHZpdm8gTk8gdml2ZSBhY8OhOiB2aWFqYSBwb3JcbiAqIGBzZXNzaW9uU3RyZWFtaW5nVGV4dGAgcGFyYSBubyByZS1yZW5kZXJpemFyIGxpc3RhcyBlbiBjYWRhIHRva2VuLlxuICovXG5leHBvcnQgdHlwZSBTZXNzaW9uUnVudGltZU1ldGEgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHN0YXR1czogU2Vzc2lvblN0YXR1c1xuICAvKiogRmllbCBhIGBzZXRMb2FkaW5nYCBkZWwgbW90b3Igb3JpZ2luYWw6IGhheSB1bmEgcmVxdWVzdCBlbiB2dWVsby4gKi9cbiAgaXNMb2FkaW5nOiBib29sZWFuXG4gIC8qKiBGaWVsIGEgYHNldElzV3JpdGluZ2A6IHlhIGxsZWdhcm9uIHRva2VucyB5IHNlIGVzdMOhIHBpbnRhbmRvIHRleHRvLiAqL1xuICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgc3RyZWFtQWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbFxuICBsb2FkaW5nTWVzc2FnZTogc3RyaW5nIHwgbnVsbFxuICAvKiogSWQgZGVsIG1lbnNhamUgcGxhY2Vob2xkZXIgcXVlIHNlIGVzdMOhIHBpbnRhbmRvIG1pZW50cmFzIGhhY2Ugc3RyZWFtaW5nLiAqL1xuICBwbGFjZWhvbGRlcklkOiBzdHJpbmcgfCBudWxsXG4gIHN0YXJ0ZWRBdDogbnVtYmVyIHwgbnVsbFxuICBmaW5pc2hlZEF0OiBudW1iZXIgfCBudWxsXG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG4gIHRpdGxlPzogc3RyaW5nIHwgbnVsbFxuICBlcnJvcjogU2Vzc2lvbkVycm9yXG59XG5cbi8qKiBTbmFwc2hvdCBkZWwgdGV4dG8gZW4gc3RyZWFtaW5nIGRlIHVuYSBzZXNpw7NuIChob3QgcGF0aCkuICovXG5leHBvcnQgdHlwZSBTZXNzaW9uU3RyZWFtaW5nU25hcHNob3QgPSB7XG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZyB8IG51bGxcbiAgdGV4dDogc3RyaW5nXG59XG5cbi8qKiBQYXlsb2FkIGNvbnNvbGlkYWRvIHF1ZSBlbWl0ZSBlbCBtYW5hZ2VyIGFsIGNvbXBsZXRhciB1biBzdHJlYW0uICovXG5leHBvcnQgdHlwZSBTZXNzaW9uRmluaXNoUGF5bG9hZCA9IHtcbiAgY29udGVudDogc3RyaW5nXG4gIHNvdXJjZXM6IHVua25vd25cbiAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmdcbiAgYXR0YWNobWVudHM6IHVua25vd25bXSB8IG51bGxcbiAgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdIHwgbnVsbFxuICBjb21wbGV0ZWRBZ2VudElkOiBzdHJpbmcgfCBudWxsXG4gIHJlc29sdmVkQ29udGV4dDogdW5rbm93blxuICByZWFzb25pbmc6IFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGxcbn1cblxuLyoqXG4gKiBDYWxsYmFja3MgcG9yIHNlc2nDs24gcGFyYSBxdWUgYHVzZUNoYXRNYW5hZ2VyYCByZWFjY2lvbmUgYWwgY2ljbG8gZGUgdmlkYVxuICogZGVsIHN0cmVhbSBzaW4gYWNvcGxhciBsYSBsw7NnaWNhIGRlIG1lbnNhamVzIC8gc2lkZS1lZmZlY3RzIGFsIG1hbmFnZXIuXG4gKi9cbmV4cG9ydCB0eXBlIFNlc3Npb25TdHJlYW1DYWxsYmFja3MgPSB7XG4gIG9uU3RyZWFtVXBkYXRlPzogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZFxuICBvblN0YXJ0V3JpdGluZz86ICgpID0+IHZvaWRcbiAgb25GaW5pc2hTdHJlYW0/OiAocGF5bG9hZDogU2Vzc2lvbkZpbmlzaFBheWxvYWQpID0+IHZvaWRcbiAgb25TdG9wPzogKHBhcnRpYWxUZXh0OiBzdHJpbmcpID0+IHZvaWRcbiAgb25FcnJvcj86IChlcnJvclR5cGU/OiBzdHJpbmcsIGVycm9yTWVzc2FnZT86IHN0cmluZykgPT4gdm9pZFxuICBvbkFwcHJvdmFsUmVxdWlyZWQ/OiAoYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcpID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgU3RhcnRTdHJlYW1SZXN1bHQgPVxuICB7IHN0YXJ0ZWQ6IHRydWUgfSB8IHsgc3RhcnRlZDogZmFsc2U7IHJlYXNvbjogJ2xpbWl0JyB8ICdhbHJlYWR5X2FjdGl2ZScgfCAndHVybl9ub3RfZm91bmQnIH1cblxuLyoqIFNsaWNlIGRlIG1lbnNhamVzIHBvciBzZXNpw7NuIChmdWxsIHN0b3JlKS4gKi9cbmV4cG9ydCB0eXBlIFNlc3Npb25NZXNzYWdlc01hcCA9IFJlY29yZDxzdHJpbmcsIENoYXRNZXNzYWdlW10+XG5cbi8qKiBDb250ZXh0byBkZSBjb252ZXJzYWNpw7NuIHJlc3RhdXJhYmxlIGFsIHJlYWJyaXIgdW5hIHNlc2nDs24gY2FjaGVhZGEuICovXG5leHBvcnQgdHlwZSBTZXNzaW9uQ29udmVyc2F0aW9uTWV0YSA9IHtcbiAgcHJvamVjdElkTWVzc2FnZT86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgcHJvamVjdE5hbWVGcm9tU2Vzc2lvbj86IHN0cmluZyB8IG51bGxcbiAgY2xpZW50SWRGcm9tU2Vzc2lvbj86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgY2xpZW50TmFtZUZyb21TZXNzaW9uPzogc3RyaW5nIHwgbnVsbFxuICB0YXNrSWRGcm9tU2Vzc2lvbj86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgdGFza05hbWVGcm9tU2Vzc2lvbj86IHN0cmluZyB8IG51bGxcbn1cblxuLyoqIEV2ZW50byBgbWFpYS1jaGF0LXNlc3Npb24tbWV0YWAgcGVyc2lzdGlkbyBwYXJhIHJlaGlkcmF0YWNpw7NuIHNpbiByZWZldGNoLiAqL1xuZXhwb3J0IHR5cGUgU2Vzc2lvbk1ldGFFdmVudERldGFpbCA9IHtcbiAgY2hhdElkOiBzdHJpbmdcbiAgYWdlbnRUeXBlPzogc3RyaW5nXG4gIGFnZW50RW50aXR5Pzogc3RyaW5nXG4gIHByb2plY3RJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIGNsaWVudElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBjbGllbnROYW1lPzogc3RyaW5nIHwgbnVsbFxuICB0YXNrSWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIHRhc2tOYW1lPzogc3RyaW5nIHwgbnVsbFxufVxuXG4vKiogQ2FjaGUgZW4gbWVtb3JpYSBkZSBzZXNpb25lcyB5YSB2aXNpdGFkYXMgKGV2aXRhIHJlZmV0Y2ggYWwgdm9sdmVyKS4gKi9cbmV4cG9ydCB0eXBlIFNlc3Npb25WaWV3Q2FjaGUgPSB7XG4gIGh5ZHJhdGVkRnJvbUFwaTogYm9vbGVhblxuICBsYXN0RXZhbHVhdGVkS2V5OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgY29udmVyc2F0aW9uTWV0YTogU2Vzc2lvbkNvbnZlcnNhdGlvbk1ldGEgfCBudWxsXG4gIHNlc3Npb25NZXRhRXZlbnQ6IFNlc3Npb25NZXRhRXZlbnREZXRhaWwgfCBudWxsXG4gIGFnZW50U25hcHNob3Q6IEFnZW50IHwgbnVsbFxufVxuXG5leHBvcnQgdHlwZSBTZXNzaW9uVmlld0NhY2hlTWFwID0gUmVjb3JkPHN0cmluZywgU2Vzc2lvblZpZXdDYWNoZT5cbiJdLCJtYXBwaW5ncyI6IkFBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBLE9BQU8sSUFBTUEsdUJBQWlELEdBQUcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDO0FBRTdHLE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBSUMsTUFBaUM7RUFBQSxPQUNyRUEsTUFBTSxJQUFJLElBQUksSUFBSUYsdUJBQXVCLENBQUNHLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDO0FBQUE7O0FBTzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBb0JBOztBQU1BOztBQVlBO0FBQ0E7QUFDQTtBQUNBOztBQWFBOztBQUdBOztBQVVBOztBQWFBIiwiaWdub3JlTGlzdCI6W119