@projectcor/maia-components 2.11.103-4 → 2.11.103-5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/lib/App.js +44 -19
  2. package/lib/components/atoms/MAIAInput/MAIAInput.js +1 -6
  3. package/lib/components/atoms/icons/index.js +1 -2
  4. package/lib/components/index.js +2 -1
  5. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +91 -4
  6. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +7 -46
  7. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +69 -308
  8. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +18 -28
  9. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +2 -9
  10. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +61 -69
  11. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +1 -5
  12. package/lib/components/molecules/ChatFooter/ChatFooter.js +2 -4
  13. package/lib/components/molecules/Sidebar/Sidebar.js +61 -104
  14. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +1 -16
  15. package/lib/components/molecules/Sidebar/Sidebar.styles.js +29 -30
  16. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +35 -6
  17. package/lib/components/organisms/ChatAI/ChatAI.js +40 -131
  18. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +543 -0
  19. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  20. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  21. package/lib/context/global-context.js +1 -3
  22. package/lib/dev/DevMaiaPage.js +30 -0
  23. package/lib/hooks/useAgentModel/useCreateAgent.js +61 -14
  24. package/lib/hooks/useAgentModel/useUpdateAgent.js +58 -11
  25. package/lib/hooks/useChatManager/useChatManager.js +438 -530
  26. package/lib/hooks/useChatMessages/useChatMessages.js +236 -427
  27. package/lib/hooks/useChats/useChats.js +4 -21
  28. package/lib/hooks/useEvent.js +2 -1
  29. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  30. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +521 -139
  31. package/lib/hooks/useStreamingMessage/index.js +3 -2
  32. package/lib/hooks/useStreamingMessage/streamingStore.js +69 -0
  33. package/lib/hooks/useStreamingMessage/useStreamingMessage.js +17 -13
  34. package/lib/index.js +5 -2
  35. package/lib/lang/br/index.js +9 -11
  36. package/lib/lang/en/index.js +9 -11
  37. package/lib/lang/es/index.js +9 -11
  38. package/lib/lang/fr/index.js +10 -13
  39. package/lib/services/maia/Agents/connectors.js +250 -0
  40. package/lib/services/maia/Chats/getChatsByUserId.js +4 -6
  41. package/lib/services/maia/Chats/index.js +1 -3
  42. package/lib/store/chatsStore.types.js +1 -1
  43. package/lib/store/useChatsStore.js +12 -149
  44. package/lib/types/Chat.js +1 -1
  45. package/lib/types/agentModal.js +1 -1
  46. package/lib/utils/normalizeAgentConnectors.js +28 -3
  47. package/package.json +3 -3
  48. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.js +0 -20
  49. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.styles.js +0 -20
  50. package/lib/components/atoms/SessionGeneratingDot/index.js +0 -2
  51. package/lib/components/atoms/icons/MaiaSparkleIcon.js +0 -75
  52. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.js +0 -66
  53. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.styles.js +0 -55
  54. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/index.js +0 -2
  55. package/lib/hooks/useMinimizedPillBottomOffset.js +0 -97
  56. package/lib/services/maia/Chats/markSessionAsRead.js +0 -32
  57. package/lib/store/chatsSidebarOptimistic.js +0 -92
  58. package/lib/store/maiaMinimizedPersistence.js +0 -49
  59. package/lib/store/sessions/activeView.js +0 -22
  60. package/lib/store/sessions/index.js +0 -9
  61. package/lib/store/sessions/sessionHitlContext.js +0 -15
  62. package/lib/store/sessions/sessionNotificationSound.js +0 -57
  63. package/lib/store/sessions/sessionNotifications.js +0 -110
  64. package/lib/store/sessions/sessionNotifications.types.js +0 -2
  65. package/lib/store/sessions/sessionStreamManager.js +0 -576
  66. package/lib/store/sessions/sessionStreamingText.js +0 -80
  67. package/lib/store/sessions/sessions.types.js +0 -35
  68. package/lib/store/sessions/useSessionMeta.js +0 -39
  69. package/lib/store/sessions/useSessionStreamingText.js +0 -18
  70. package/lib/store/sessions/useSessionsStore.js +0 -197
  71. package/lib/utils/formatUnreadCount.js +0 -6
  72. package/lib/utils/maiaHostOpen.js +0 -54
@@ -6,6 +6,7 @@ export { ProjectSummaryModal } from './molecules/ProjectSummaryModal';
6
6
  export { ContextMentionInput } from './molecules/ContextMentionInput';
7
7
  export { ProjectSummary } from './organisms/ProjectSummary';
8
8
  export { ChatAI } from './organisms/ChatAI';
9
+ export { ChatAIPage } from './organisms/ChatAIPage';
9
10
  export { ProjectAIButton } from './organisms/ProjectAIButton';
10
11
  export { ClientAIButton } from './organisms/ClientAIButton';
11
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQUlBQnV0dG9uIiwiTWFpYVdyYXBwZXIiLCJNQUlBRXJyb3IiLCJBSUljb24iLCJQcm9qZWN0U3VtbWFyeU1vZGFsIiwiQ29udGV4dE1lbnRpb25JbnB1dCIsIlByb2plY3RTdW1tYXJ5IiwiQ2hhdEFJIiwiUHJvamVjdEFJQnV0dG9uIiwiQ2xpZW50QUlCdXR0b24iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBNQUlBQnV0dG9uIH0gZnJvbSAnLi9hdG9tcy9NQUlBQnV0dG9uJ1xuZXhwb3J0IHsgTWFpYVdyYXBwZXIgfSBmcm9tICcuL2F0b21zL01haWFXcmFwcGVyJ1xuZXhwb3J0IHsgTUFJQUVycm9yIH0gZnJvbSAnLi9hdG9tcy9NQUlBRXJyb3InXG5cbmV4cG9ydCB7IEFJSWNvbiB9IGZyb20gJy4vYXRvbXMvaWNvbnMnXG5cbmV4cG9ydCB7IFByb2plY3RTdW1tYXJ5TW9kYWwgfSBmcm9tICcuL21vbGVjdWxlcy9Qcm9qZWN0U3VtbWFyeU1vZGFsJ1xuZXhwb3J0IHsgQ29udGV4dE1lbnRpb25JbnB1dCB9IGZyb20gJy4vbW9sZWN1bGVzL0NvbnRleHRNZW50aW9uSW5wdXQnXG5cbmV4cG9ydCB7IFByb2plY3RTdW1tYXJ5IH0gZnJvbSAnLi9vcmdhbmlzbXMvUHJvamVjdFN1bW1hcnknXG5leHBvcnQgeyBDaGF0QUkgfSBmcm9tICcuL29yZ2FuaXNtcy9DaGF0QUknXG5leHBvcnQgeyBQcm9qZWN0QUlCdXR0b24gfSBmcm9tICcuL29yZ2FuaXNtcy9Qcm9qZWN0QUlCdXR0b24nXG5leHBvcnQgeyBDbGllbnRBSUJ1dHRvbiB9IGZyb20gJy4vb3JnYW5pc21zL0NsaWVudEFJQnV0dG9uJ1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxVQUFVLFFBQVEsb0JBQW9CO0FBQy9DLFNBQVNDLFdBQVcsUUFBUSxxQkFBcUI7QUFDakQsU0FBU0MsU0FBUyxRQUFRLG1CQUFtQjtBQUU3QyxTQUFTQyxNQUFNLFFBQVEsZUFBZTtBQUV0QyxTQUFTQyxtQkFBbUIsUUFBUSxpQ0FBaUM7QUFDckUsU0FBU0MsbUJBQW1CLFFBQVEsaUNBQWlDO0FBRXJFLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFDM0QsU0FBU0MsTUFBTSxRQUFRLG9CQUFvQjtBQUMzQyxTQUFTQyxlQUFlLFFBQVEsNkJBQTZCO0FBQzdELFNBQVNDLGNBQWMsUUFBUSw0QkFBNEIiLCJpZ25vcmVMaXN0IjpbXX0=
12
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQUlBQnV0dG9uIiwiTWFpYVdyYXBwZXIiLCJNQUlBRXJyb3IiLCJBSUljb24iLCJQcm9qZWN0U3VtbWFyeU1vZGFsIiwiQ29udGV4dE1lbnRpb25JbnB1dCIsIlByb2plY3RTdW1tYXJ5IiwiQ2hhdEFJIiwiQ2hhdEFJUGFnZSIsIlByb2plY3RBSUJ1dHRvbiIsIkNsaWVudEFJQnV0dG9uIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgTUFJQUJ1dHRvbiB9IGZyb20gJy4vYXRvbXMvTUFJQUJ1dHRvbidcbmV4cG9ydCB7IE1haWFXcmFwcGVyIH0gZnJvbSAnLi9hdG9tcy9NYWlhV3JhcHBlcidcbmV4cG9ydCB7IE1BSUFFcnJvciB9IGZyb20gJy4vYXRvbXMvTUFJQUVycm9yJ1xuXG5leHBvcnQgeyBBSUljb24gfSBmcm9tICcuL2F0b21zL2ljb25zJ1xuXG5leHBvcnQgeyBQcm9qZWN0U3VtbWFyeU1vZGFsIH0gZnJvbSAnLi9tb2xlY3VsZXMvUHJvamVjdFN1bW1hcnlNb2RhbCdcbmV4cG9ydCB7IENvbnRleHRNZW50aW9uSW5wdXQgfSBmcm9tICcuL21vbGVjdWxlcy9Db250ZXh0TWVudGlvbklucHV0J1xuXG5leHBvcnQgeyBQcm9qZWN0U3VtbWFyeSB9IGZyb20gJy4vb3JnYW5pc21zL1Byb2plY3RTdW1tYXJ5J1xuZXhwb3J0IHsgQ2hhdEFJIH0gZnJvbSAnLi9vcmdhbmlzbXMvQ2hhdEFJJ1xuZXhwb3J0IHsgQ2hhdEFJUGFnZSB9IGZyb20gJy4vb3JnYW5pc21zL0NoYXRBSVBhZ2UnXG5leHBvcnQgeyBQcm9qZWN0QUlCdXR0b24gfSBmcm9tICcuL29yZ2FuaXNtcy9Qcm9qZWN0QUlCdXR0b24nXG5leHBvcnQgeyBDbGllbnRBSUJ1dHRvbiB9IGZyb20gJy4vb3JnYW5pc21zL0NsaWVudEFJQnV0dG9uJ1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxVQUFVLFFBQVEsb0JBQW9CO0FBQy9DLFNBQVNDLFdBQVcsUUFBUSxxQkFBcUI7QUFDakQsU0FBU0MsU0FBUyxRQUFRLG1CQUFtQjtBQUU3QyxTQUFTQyxNQUFNLFFBQVEsZUFBZTtBQUV0QyxTQUFTQyxtQkFBbUIsUUFBUSxpQ0FBaUM7QUFDckUsU0FBU0MsbUJBQW1CLFFBQVEsaUNBQWlDO0FBRXJFLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFDM0QsU0FBU0MsTUFBTSxRQUFRLG9CQUFvQjtBQUMzQyxTQUFTQyxVQUFVLFFBQVEsd0JBQXdCO0FBQ25ELFNBQVNDLGVBQWUsUUFBUSw2QkFBNkI7QUFDN0QsU0FBU0MsY0FBYyxRQUFRLDRCQUE0QiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,3 +1,4 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
1
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
4
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -7,10 +8,19 @@ import { useTranslation } from 'react-i18next';
7
8
  import { OptionAccessibility } from '../../../atoms/OptionAccessibility';
8
9
  import { OptionCorPermission } from '../../../atoms/OptionCorPermission';
9
10
  import { EVENTS, useEvent } from '../../../../hooks/useEvent';
11
+ import { getAvailableConnectors } from '../../../../services/maia/Agents/connectors';
12
+ import { NETSUITE_CONNECTOR_SLUG } from '../../../../utils/normalizeAgentConnectors';
10
13
  import { SCAASWrapper, SCAASHeader, SCAASTitle, SCAASSubtitle, SCAASContent, SCAASSection, SCAASSectionHeader, SCAASSectionTitle, SCAASSectionSubtitle, SCAASOptionsContainer, SCAASDivider } from './AbmAccessibilitySection.styles';
11
14
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
+ var FALLBACK_CONNECTORS = [{
16
+ id: 0,
17
+ slug: NETSUITE_CONNECTOR_SLUG,
18
+ name: 'NetSuite',
19
+ requires_auth: true,
20
+ is_active: true
21
+ }];
12
22
  export var AbmAccessibilitySection = function AbmAccessibilitySection(_ref) {
13
- var _values$accessibility, _values$accessibility2, _values$accessibility3, _values$accessibility4, _formValues$clients;
23
+ var _values$accessibility, _values$accessibility2, _values$accessibility3, _values$accessibility4, _values$accessibility5, _values$accessibility7, _formValues$clients;
14
24
  var values = _ref.values,
15
25
  handleSetAgentValues = _ref.handleSetAgentValues;
16
26
  var _useTranslation = useTranslation('abm_agent_section'),
@@ -19,11 +29,16 @@ export var AbmAccessibilitySection = function AbmAccessibilitySection(_ref) {
19
29
  var _useState = useState({
20
30
  accessType: (values === null || values === void 0 || (_values$accessibility = values.accessibility) === null || _values$accessibility === void 0 ? void 0 : _values$accessibility.accessType) || 'company',
21
31
  clients: (values === null || values === void 0 || (_values$accessibility2 = values.accessibility) === null || _values$accessibility2 === void 0 ? void 0 : _values$accessibility2.clients) || null,
22
- taskAccess: (_values$accessibility3 = values === null || values === void 0 || (_values$accessibility4 = values.accessibility) === null || _values$accessibility4 === void 0 ? void 0 : _values$accessibility4.taskAccess) !== null && _values$accessibility3 !== void 0 ? _values$accessibility3 : true
32
+ taskAccess: (_values$accessibility3 = values === null || values === void 0 || (_values$accessibility4 = values.accessibility) === null || _values$accessibility4 === void 0 ? void 0 : _values$accessibility4.taskAccess) !== null && _values$accessibility3 !== void 0 ? _values$accessibility3 : true,
33
+ selectedConnectors: (values === null || values === void 0 || (_values$accessibility5 = values.accessibility) === null || _values$accessibility5 === void 0 ? void 0 : _values$accessibility5.selectedConnectors) || []
23
34
  }),
24
35
  _useState2 = _slicedToArray(_useState, 2),
25
36
  formValues = _useState2[0],
26
37
  setFormValues = _useState2[1];
38
+ var _useState3 = useState(FALLBACK_CONNECTORS),
39
+ _useState4 = _slicedToArray(_useState3, 2),
40
+ catalogConnectors = _useState4[0],
41
+ setCatalogConnectors = _useState4[1];
27
42
  var _handleSelectOption = function handleSelectOption(option, clients) {
28
43
  var optionMapping = {
29
44
  company: 'all_company',
@@ -36,7 +51,8 @@ export var AbmAccessibilitySection = function AbmAccessibilitySection(_ref) {
36
51
  var valueToSend = {
37
52
  accessType: option,
38
53
  clients: null,
39
- taskAccess: formValues.taskAccess
54
+ taskAccess: formValues.taskAccess,
55
+ selectedConnectors: formValues.selectedConnectors
40
56
  };
41
57
  if (option !== 'clients' || !clients) {
42
58
  setFormValues(valueToSend);
@@ -67,6 +83,40 @@ export var AbmAccessibilitySection = function AbmAccessibilitySection(_ref) {
67
83
  });
68
84
  });
69
85
  };
86
+ var handleConnectorAccessChange = function handleConnectorAccessChange(slug, checked) {
87
+ eventAmplitude(EVENTS.connectorMcp, {
88
+ option: checked ? 'on' : 'off',
89
+ slug: slug
90
+ });
91
+ setFormValues(function (prev) {
92
+ var next = new Set(prev.selectedConnectors);
93
+ if (checked) {
94
+ next.add(slug);
95
+ } else {
96
+ next["delete"](slug);
97
+ }
98
+ return _objectSpread(_objectSpread({}, prev), {}, {
99
+ selectedConnectors: Array.from(next)
100
+ });
101
+ });
102
+ };
103
+ useEffect(function () {
104
+ var _values$accessibility6;
105
+ var nextConnectors = values === null || values === void 0 || (_values$accessibility6 = values.accessibility) === null || _values$accessibility6 === void 0 ? void 0 : _values$accessibility6.selectedConnectors;
106
+ if (!nextConnectors) {
107
+ return;
108
+ }
109
+ setFormValues(function (prev) {
110
+ var current = _toConsumableArray(prev.selectedConnectors).sort().join('|');
111
+ var incoming = _toConsumableArray(nextConnectors).sort().join('|');
112
+ if (current === incoming) {
113
+ return prev;
114
+ }
115
+ return _objectSpread(_objectSpread({}, prev), {}, {
116
+ selectedConnectors: nextConnectors
117
+ });
118
+ });
119
+ }, [values === null || values === void 0 || (_values$accessibility7 = values.accessibility) === null || _values$accessibility7 === void 0 ? void 0 : _values$accessibility7.selectedConnectors]);
70
120
  useEffect(function () {
71
121
  if (formValues) {
72
122
  handleSetAgentValues === null || handleSetAgentValues === void 0 || handleSetAgentValues({
@@ -75,6 +125,24 @@ export var AbmAccessibilitySection = function AbmAccessibilitySection(_ref) {
75
125
  });
76
126
  }
77
127
  }, [formValues]);
128
+ useEffect(function () {
129
+ var cancelled = false;
130
+ getAvailableConnectors().then(function (connectors) {
131
+ if (!cancelled) {
132
+ setCatalogConnectors(connectors.filter(function (connector) {
133
+ return connector.is_active && connector.slug === NETSUITE_CONNECTOR_SLUG;
134
+ }));
135
+ }
136
+ })["catch"](function (error) {
137
+ console.error('Error fetching connectors catalog:', error);
138
+ if (!cancelled) {
139
+ setCatalogConnectors(FALLBACK_CONNECTORS);
140
+ }
141
+ });
142
+ return function () {
143
+ cancelled = true;
144
+ };
145
+ }, []);
78
146
  return /*#__PURE__*/_jsxs(SCAASWrapper, {
79
147
  children: [/*#__PURE__*/_jsxs(SCAASHeader, {
80
148
  $index: 0,
@@ -98,6 +166,25 @@ export var AbmAccessibilitySection = function AbmAccessibilitySection(_ref) {
98
166
  checked: formValues.taskAccess,
99
167
  onChange: handleTaskAccessChange
100
168
  })]
169
+ }), /*#__PURE__*/_jsx(SCAASDivider, {}), /*#__PURE__*/_jsxs(SCAASSection, {
170
+ children: [/*#__PURE__*/_jsxs(SCAASSectionHeader, {
171
+ children: [/*#__PURE__*/_jsx(SCAASSectionTitle, {
172
+ children: t('accessibilitySection.mcpPermissionsTitle')
173
+ }), /*#__PURE__*/_jsx(SCAASSectionSubtitle, {
174
+ children: t('accessibilitySection.mcpPermissionsSubtitle')
175
+ })]
176
+ }), catalogConnectors.map(function (connector) {
177
+ return /*#__PURE__*/_jsx(OptionCorPermission, {
178
+ title: connector.slug === NETSUITE_CONNECTOR_SLUG ? t('accessibilitySection.netsuiteAccessTitle') : connector.name,
179
+ description: connector.slug === NETSUITE_CONNECTOR_SLUG ? t('accessibilitySection.netsuiteAccessDescription') : connector.description || t('accessibilitySection.connectorAccessDescription', {
180
+ name: connector.name
181
+ }),
182
+ checked: formValues.selectedConnectors.includes(connector.slug),
183
+ onChange: function onChange(checked) {
184
+ return handleConnectorAccessChange(connector.slug, checked);
185
+ }
186
+ }, connector.slug);
187
+ })]
101
188
  }), /*#__PURE__*/_jsx(SCAASDivider, {}), /*#__PURE__*/_jsxs(SCAASSection, {
102
189
  children: [/*#__PURE__*/_jsxs(SCAASSectionHeader, {
103
190
  children: [/*#__PURE__*/_jsx(SCAASSectionTitle, {
@@ -146,4 +233,4 @@ export var AbmAccessibilitySection = function AbmAccessibilitySection(_ref) {
146
233
  })]
147
234
  });
148
235
  };
149
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsInVzZVRyYW5zbGF0aW9uIiwiT3B0aW9uQWNjZXNzaWJpbGl0eSIsIk9wdGlvbkNvclBlcm1pc3Npb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsIlNDQUFTV3JhcHBlciIsIlNDQUFTSGVhZGVyIiwiU0NBQVNUaXRsZSIsIlNDQUFTU3VidGl0bGUiLCJTQ0FBU0NvbnRlbnQiLCJTQ0FBU1NlY3Rpb24iLCJTQ0FBU1NlY3Rpb25IZWFkZXIiLCJTQ0FBU1NlY3Rpb25UaXRsZSIsIlNDQUFTU2VjdGlvblN1YnRpdGxlIiwiU0NBQVNPcHRpb25zQ29udGFpbmVyIiwiU0NBQVNEaXZpZGVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIiwiX3JlZiIsIl92YWx1ZXMkYWNjZXNzaWJpbGl0eSIsIl92YWx1ZXMkYWNjZXNzaWJpbGl0eTIiLCJfdmFsdWVzJGFjY2Vzc2liaWxpdHkzIiwiX3ZhbHVlcyRhY2Nlc3NpYmlsaXR5NCIsIl9mb3JtVmFsdWVzJGNsaWVudHMiLCJ2YWx1ZXMiLCJoYW5kbGVTZXRBZ2VudFZhbHVlcyIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJldmVudEFtcGxpdHVkZSIsIl91c2VTdGF0ZSIsImFjY2Vzc1R5cGUiLCJhY2Nlc3NpYmlsaXR5IiwiY2xpZW50cyIsInRhc2tBY2Nlc3MiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJmb3JtVmFsdWVzIiwic2V0Rm9ybVZhbHVlcyIsImhhbmRsZVNlbGVjdE9wdGlvbiIsIm9wdGlvbiIsIm9wdGlvbk1hcHBpbmciLCJjb21wYW55Iiwib25seV9tZSIsImFjY2Vzc2liaWxpdHlUeXBlIiwidmFsdWVUb1NlbmQiLCJjbGllbnRGb3JtRGF0YSIsIm1hcCIsImNsaWVudCIsImlkIiwibmFtZSIsImlzX2FjdGl2ZSIsImlzX2RlbGV0ZWQiLCJsZW5ndGgiLCJhY2Nlc3NpYmlsaXR5U2VsZWN0Q2xpZW50IiwiX29iamVjdFNwcmVhZCIsImhhbmRsZVRhc2tBY2Nlc3NDaGFuZ2UiLCJjaGVja2VkIiwiY29ubmVjdG9yQ29yIiwicHJldiIsImtleSIsInZhbHVlIiwiY2hpbGRyZW4iLCIkaW5kZXgiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwib25DaGFuZ2UiLCJvcHRpb25TZWxlY3RlZCIsImlzQ2xpZW50IiwicHJvcHMiLCJzZWxlY3RlZENsaWVudHMiLCJfY2xpZW50JG5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgT3B0aW9uQWNjZXNzaWJpbGl0eSB9IGZyb20gJy4uLy4uLy4uL2F0b21zL09wdGlvbkFjY2Vzc2liaWxpdHknXG5pbXBvcnQgeyBPcHRpb25Db3JQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vYXRvbXMvT3B0aW9uQ29yUGVybWlzc2lvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7XG4gIFNDQUFTV3JhcHBlcixcbiAgU0NBQVNIZWFkZXIsXG4gIFNDQUFTVGl0bGUsXG4gIFNDQUFTU3VidGl0bGUsXG4gIFNDQUFTQ29udGVudCxcbiAgU0NBQVNTZWN0aW9uLFxuICBTQ0FBU1NlY3Rpb25IZWFkZXIsXG4gIFNDQUFTU2VjdGlvblRpdGxlLFxuICBTQ0FBU1NlY3Rpb25TdWJ0aXRsZSxcbiAgU0NBQVNPcHRpb25zQ29udGFpbmVyLFxuICBTQ0FBU0RpdmlkZXIsXG59IGZyb20gJy4vQWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24uc3R5bGVzJ1xuaW1wb3J0IHsgQ2xpZW50Rm9ybURhdGEgfSBmcm9tICcuL0FibUFjY2Vzc2liaWxpdHlTZWN0aW9uLmludGVyZmFjZSdcblxuaW50ZXJmYWNlIEFibUFjY2Vzc2liaWxpdHlTZWN0aW9uUHJvcHMge1xuICB2YWx1ZXM/OiB7XG4gICAgYWNjZXNzaWJpbGl0eT86IHtcbiAgICAgIGFjY2Vzc1R5cGU/OiBzdHJpbmdcbiAgICAgIGNsaWVudHM/OiBDbGllbnRGb3JtRGF0YVtdIHwgbnVsbFxuICAgICAgdGFza0FjY2Vzcz86IGJvb2xlYW5cbiAgICB9XG4gIH1cbiAgaGFuZGxlU2V0QWdlbnRWYWx1ZXM/OiAoeyBrZXksIHZhbHVlIH06IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IEFibUFjY2Vzc2liaWxpdHlTZWN0aW9uID0gKHsgdmFsdWVzLCBoYW5kbGVTZXRBZ2VudFZhbHVlcyB9OiBBYm1BY2Nlc3NpYmlsaXR5U2VjdGlvblByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oJ2FibV9hZ2VudF9zZWN0aW9uJylcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG5cbiAgY29uc3QgW2Zvcm1WYWx1ZXMsIHNldEZvcm1WYWx1ZXNdID0gdXNlU3RhdGU8e1xuICAgIGFjY2Vzc1R5cGU6IHN0cmluZ1xuICAgIGNsaWVudHM6IENsaWVudEZvcm1EYXRhW10gfCBudWxsXG4gICAgdGFza0FjY2VzczogYm9vbGVhblxuICB9Pih7XG4gICAgYWNjZXNzVHlwZTogdmFsdWVzPy5hY2Nlc3NpYmlsaXR5Py5hY2Nlc3NUeXBlIHx8ICdjb21wYW55JyxcbiAgICBjbGllbnRzOiB2YWx1ZXM/LmFjY2Vzc2liaWxpdHk/LmNsaWVudHMgfHwgbnVsbCxcbiAgICB0YXNrQWNjZXNzOiB2YWx1ZXM/LmFjY2Vzc2liaWxpdHk/LnRhc2tBY2Nlc3MgPz8gdHJ1ZSxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RPcHRpb24gPSAob3B0aW9uOiBzdHJpbmcsIGNsaWVudHM/OiBDbGllbnRGb3JtRGF0YVtdIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbk1hcHBpbmc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICBjb21wYW55OiAnYWxsX2NvbXBhbnknLFxuICAgICAgY2xpZW50czogJ2J5X2NsaWVudGVzJyxcbiAgICAgIG9ubHlfbWU6ICdqdXN0X21lJyxcbiAgICB9XG5cbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWNjZXNzaWJpbGl0eVR5cGUsIHsgb3B0aW9uOiBvcHRpb25NYXBwaW5nW29wdGlvbl0gfSlcblxuICAgIGNvbnN0IHZhbHVlVG9TZW5kID0ge1xuICAgICAgYWNjZXNzVHlwZTogb3B0aW9uLFxuICAgICAgY2xpZW50czogbnVsbCBhcyBDbGllbnRGb3JtRGF0YVtdIHwgbnVsbCxcbiAgICAgIHRhc2tBY2Nlc3M6IGZvcm1WYWx1ZXMudGFza0FjY2VzcyxcbiAgICB9XG4gICAgaWYgKG9wdGlvbiAhPT0gJ2NsaWVudHMnIHx8ICFjbGllbnRzKSB7XG4gICAgICBzZXRGb3JtVmFsdWVzKHZhbHVlVG9TZW5kKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY2xpZW50Rm9ybURhdGEgPSBjbGllbnRzLm1hcChjbGllbnQgPT4gKHtcbiAgICAgIGlkOiBjbGllbnQuaWQsXG4gICAgICBuYW1lOiBjbGllbnQubmFtZSxcbiAgICAgIGlzX2FjdGl2ZTogY2xpZW50LmlzX2FjdGl2ZSxcbiAgICAgIGlzX2RlbGV0ZWQ6IGNsaWVudC5pc19kZWxldGVkLFxuICAgIH0pKVxuXG4gICAgaWYgKGNsaWVudHMgJiYgY2xpZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWNjZXNzaWJpbGl0eVNlbGVjdENsaWVudClcbiAgICB9XG5cbiAgICBzZXRGb3JtVmFsdWVzKHsgLi4udmFsdWVUb1NlbmQsIGNsaWVudHM6IGNsaWVudEZvcm1EYXRhIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVUYXNrQWNjZXNzQ2hhbmdlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuY29ubmVjdG9yQ29yLCB7IG9wdGlvbjogY2hlY2tlZCA/ICdvbicgOiAnb2ZmJyB9KVxuXG4gICAgc2V0Rm9ybVZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgdGFza0FjY2VzczogY2hlY2tlZCxcbiAgICB9KSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZvcm1WYWx1ZXMpIHtcbiAgICAgIGhhbmRsZVNldEFnZW50VmFsdWVzPy4oe1xuICAgICAgICBrZXk6ICdhY2Nlc3NpYmlsaXR5JyxcbiAgICAgICAgdmFsdWU6IGZvcm1WYWx1ZXMsXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW2Zvcm1WYWx1ZXNdKVxuXG4gIHJldHVybiAoXG4gICAgPFNDQUFTV3JhcHBlcj5cbiAgICAgIDxTQ0FBU0hlYWRlciAkaW5kZXg9ezB9PlxuICAgICAgICA8U0NBQVNUaXRsZT57dCgnYWNjZXNzaWJpbGl0eVNlY3Rpb24udGl0bGVTZWN0aW9uJyl9PC9TQ0FBU1RpdGxlPlxuICAgICAgICA8U0NBQVNTdWJ0aXRsZT57dCgnYWNjZXNzaWJpbGl0eVNlY3Rpb24uc3VidGl0bGVTZWN0aW9uJyl9PC9TQ0FBU1N1YnRpdGxlPlxuICAgICAgPC9TQ0FBU0hlYWRlcj5cbiAgICAgIDxTQ0FBU0NvbnRlbnQgJGluZGV4PXsxfT5cbiAgICAgICAgPFNDQUFTU2VjdGlvbj5cbiAgICAgICAgICA8U0NBQVNTZWN0aW9uSGVhZGVyPlxuICAgICAgICAgICAgPFNDQUFTU2VjdGlvblRpdGxlPnt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi5jb3JQZXJtaXNzaW9uc1RpdGxlJyl9PC9TQ0FBU1NlY3Rpb25UaXRsZT5cbiAgICAgICAgICAgIDxTQ0FBU1NlY3Rpb25TdWJ0aXRsZT57dCgnYWNjZXNzaWJpbGl0eVNlY3Rpb24uY29yUGVybWlzc2lvbnNTdWJ0aXRsZScpfTwvU0NBQVNTZWN0aW9uU3VidGl0bGU+XG4gICAgICAgICAgPC9TQ0FBU1NlY3Rpb25IZWFkZXI+XG4gICAgICAgICAgPE9wdGlvbkNvclBlcm1pc3Npb25cbiAgICAgICAgICAgIHRpdGxlPXt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi50YXNrQWNjZXNzVGl0bGUnKX1cbiAgICAgICAgICAgIGRlc2NyaXB0aW9uPXt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi50YXNrQWNjZXNzRGVzY3JpcHRpb24nKX1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2Zvcm1WYWx1ZXMudGFza0FjY2Vzc31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVUYXNrQWNjZXNzQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU0NBQVNTZWN0aW9uPlxuXG4gICAgICAgIDxTQ0FBU0RpdmlkZXIgLz5cblxuICAgICAgICA8U0NBQVNTZWN0aW9uPlxuICAgICAgICAgIDxTQ0FBU1NlY3Rpb25IZWFkZXI+XG4gICAgICAgICAgICA8U0NBQVNTZWN0aW9uVGl0bGU+e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLnZpc2liaWxpdHlUaXRsZScpfTwvU0NBQVNTZWN0aW9uVGl0bGU+XG4gICAgICAgICAgICA8U0NBQVNTZWN0aW9uU3VidGl0bGU+e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLndob0NhbkFjY2VzcycpfTwvU0NBQVNTZWN0aW9uU3VidGl0bGU+XG4gICAgICAgICAgPC9TQ0FBU1NlY3Rpb25IZWFkZXI+XG4gICAgICAgICAgPFNDQUFTT3B0aW9uc0NvbnRhaW5lcj5cbiAgICAgICAgICAgIDxPcHRpb25BY2Nlc3NpYmlsaXR5XG4gICAgICAgICAgICAgIHRpdGxlPXt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi5hbGxDb21wYW55VGl0bGUnKX1cbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmFsbENvbXBhbnlEZXNjcmlwdGlvbicpfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249eygpID0+IGhhbmRsZVNlbGVjdE9wdGlvbignY29tcGFueScpfVxuICAgICAgICAgICAgICBvcHRpb25TZWxlY3RlZD17Zm9ybVZhbHVlcy5hY2Nlc3NUeXBlfVxuICAgICAgICAgICAgICBuYW1lPVwiY29tcGFueVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPE9wdGlvbkFjY2Vzc2liaWxpdHlcbiAgICAgICAgICAgICAgdGl0bGU9e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNsaWVudFRpdGxlJyl9XG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi5jbGllbnREZXNjcmlwdGlvbicpfVxuICAgICAgICAgICAgICBpc0NsaWVudD17Zm9ybVZhbHVlcy5hY2Nlc3NUeXBlID09PSAnY2xpZW50cyd9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbj17KHByb3BzPzogQ2xpZW50Rm9ybURhdGFbXSkgPT4gaGFuZGxlU2VsZWN0T3B0aW9uKCdjbGllbnRzJywgcHJvcHMpfVxuICAgICAgICAgICAgICBvcHRpb25TZWxlY3RlZD17Zm9ybVZhbHVlcy5hY2Nlc3NUeXBlfVxuICAgICAgICAgICAgICBuYW1lPVwiY2xpZW50c1wiXG4gICAgICAgICAgICAgIHNlbGVjdGVkQ2xpZW50cz17Zm9ybVZhbHVlcy5jbGllbnRzPy5tYXAoY2xpZW50ID0+ICh7XG4gICAgICAgICAgICAgICAgaWQ6IGNsaWVudC5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiBjbGllbnQubmFtZSA/PyAnJyxcbiAgICAgICAgICAgICAgICBpc19hY3RpdmU6IGNsaWVudC5pc19hY3RpdmUsXG4gICAgICAgICAgICAgICAgaXNfZGVsZXRlZDogY2xpZW50LmlzX2RlbGV0ZWQsXG4gICAgICAgICAgICAgIH0pKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8T3B0aW9uQWNjZXNzaWJpbGl0eVxuICAgICAgICAgICAgICB0aXRsZT17dCgnYWNjZXNzaWJpbGl0eVNlY3Rpb24ub3duVGl0bGUnKX1cbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLm93bkRlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbj17KCkgPT4gaGFuZGxlU2VsZWN0T3B0aW9uKCdvbmx5X21lJyl9XG4gICAgICAgICAgICAgIG9wdGlvblNlbGVjdGVkPXtmb3JtVmFsdWVzLmFjY2Vzc1R5cGV9XG4gICAgICAgICAgICAgIG5hbWU9XCJvbmx5X21lXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FBU09wdGlvbnNDb250YWluZXI+XG4gICAgICAgIDwvU0NBQVNTZWN0aW9uPlxuICAgICAgPC9TQ0FBU0NvbnRlbnQ+XG4gICAgPC9TQ0FBU1dyYXBwZXI+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFNBQVNBLFFBQVEsRUFBRUMsU0FBUyxRQUFRLE9BQU87QUFDM0MsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsbUJBQW1CLFFBQVEsb0NBQW9DO0FBQ3hFLFNBQVNDLG1CQUFtQixRQUFRLG9DQUFvQztBQUN4RSxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSw0QkFBNEI7QUFDN0QsU0FDRUMsWUFBWSxFQUNaQyxXQUFXLEVBQ1hDLFVBQVUsRUFDVkMsYUFBYSxFQUNiQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsa0JBQWtCLEVBQ2xCQyxpQkFBaUIsRUFDakJDLG9CQUFvQixFQUNwQkMscUJBQXFCLEVBQ3JCQyxZQUFZLFFBQ1Asa0NBQWtDO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQTtBQWN6QyxPQUFPLElBQU1DLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQUFDLElBQUEsRUFB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
236
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsInVzZVRyYW5zbGF0aW9uIiwiT3B0aW9uQWNjZXNzaWJpbGl0eSIsIk9wdGlvbkNvclBlcm1pc3Npb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldEF2YWlsYWJsZUNvbm5lY3RvcnMiLCJORVRTVUlURV9DT05ORUNUT1JfU0xVRyIsIlNDQUFTV3JhcHBlciIsIlNDQUFTSGVhZGVyIiwiU0NBQVNUaXRsZSIsIlNDQUFTU3VidGl0bGUiLCJTQ0FBU0NvbnRlbnQiLCJTQ0FBU1NlY3Rpb24iLCJTQ0FBU1NlY3Rpb25IZWFkZXIiLCJTQ0FBU1NlY3Rpb25UaXRsZSIsIlNDQUFTU2VjdGlvblN1YnRpdGxlIiwiU0NBQVNPcHRpb25zQ29udGFpbmVyIiwiU0NBQVNEaXZpZGVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZBTExCQUNLX0NPTk5FQ1RPUlMiLCJpZCIsInNsdWciLCJuYW1lIiwicmVxdWlyZXNfYXV0aCIsImlzX2FjdGl2ZSIsIkFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIiwiX3JlZiIsIl92YWx1ZXMkYWNjZXNzaWJpbGl0eSIsIl92YWx1ZXMkYWNjZXNzaWJpbGl0eTIiLCJfdmFsdWVzJGFjY2Vzc2liaWxpdHkzIiwiX3ZhbHVlcyRhY2Nlc3NpYmlsaXR5NCIsIl92YWx1ZXMkYWNjZXNzaWJpbGl0eTUiLCJfdmFsdWVzJGFjY2Vzc2liaWxpdHk3IiwiX2Zvcm1WYWx1ZXMkY2xpZW50cyIsInZhbHVlcyIsImhhbmRsZVNldEFnZW50VmFsdWVzIiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZVN0YXRlIiwiYWNjZXNzVHlwZSIsImFjY2Vzc2liaWxpdHkiLCJjbGllbnRzIiwidGFza0FjY2VzcyIsInNlbGVjdGVkQ29ubmVjdG9ycyIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImZvcm1WYWx1ZXMiLCJzZXRGb3JtVmFsdWVzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJjYXRhbG9nQ29ubmVjdG9ycyIsInNldENhdGFsb2dDb25uZWN0b3JzIiwiaGFuZGxlU2VsZWN0T3B0aW9uIiwib3B0aW9uIiwib3B0aW9uTWFwcGluZyIsImNvbXBhbnkiLCJvbmx5X21lIiwiYWNjZXNzaWJpbGl0eVR5cGUiLCJ2YWx1ZVRvU2VuZCIsImNsaWVudEZvcm1EYXRhIiwibWFwIiwiY2xpZW50IiwiaXNfZGVsZXRlZCIsImxlbmd0aCIsImFjY2Vzc2liaWxpdHlTZWxlY3RDbGllbnQiLCJfb2JqZWN0U3ByZWFkIiwiaGFuZGxlVGFza0FjY2Vzc0NoYW5nZSIsImNoZWNrZWQiLCJjb25uZWN0b3JDb3IiLCJwcmV2IiwiaGFuZGxlQ29ubmVjdG9yQWNjZXNzQ2hhbmdlIiwiY29ubmVjdG9yTWNwIiwibmV4dCIsIlNldCIsImFkZCIsIkFycmF5IiwiZnJvbSIsIl92YWx1ZXMkYWNjZXNzaWJpbGl0eTYiLCJuZXh0Q29ubmVjdG9ycyIsImN1cnJlbnQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJzb3J0Iiwiam9pbiIsImluY29taW5nIiwia2V5IiwidmFsdWUiLCJjYW5jZWxsZWQiLCJ0aGVuIiwiY29ubmVjdG9ycyIsImZpbHRlciIsImNvbm5lY3RvciIsImVycm9yIiwiY29uc29sZSIsImNoaWxkcmVuIiwiJGluZGV4IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm9uQ2hhbmdlIiwiaW5jbHVkZXMiLCJvcHRpb25TZWxlY3RlZCIsImlzQ2xpZW50IiwicHJvcHMiLCJzZWxlY3RlZENsaWVudHMiLCJfY2xpZW50JG5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgT3B0aW9uQWNjZXNzaWJpbGl0eSB9IGZyb20gJy4uLy4uLy4uL2F0b21zL09wdGlvbkFjY2Vzc2liaWxpdHknXG5pbXBvcnQgeyBPcHRpb25Db3JQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vYXRvbXMvT3B0aW9uQ29yUGVybWlzc2lvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGdldEF2YWlsYWJsZUNvbm5lY3RvcnMsIHR5cGUgQ2F0YWxvZ0Nvbm5lY3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2Nvbm5lY3RvcnMnXG5pbXBvcnQgeyBORVRTVUlURV9DT05ORUNUT1JfU0xVRyB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL25vcm1hbGl6ZUFnZW50Q29ubmVjdG9ycydcbmltcG9ydCB7XG4gIFNDQUFTV3JhcHBlcixcbiAgU0NBQVNIZWFkZXIsXG4gIFNDQUFTVGl0bGUsXG4gIFNDQUFTU3VidGl0bGUsXG4gIFNDQUFTQ29udGVudCxcbiAgU0NBQVNTZWN0aW9uLFxuICBTQ0FBU1NlY3Rpb25IZWFkZXIsXG4gIFNDQUFTU2VjdGlvblRpdGxlLFxuICBTQ0FBU1NlY3Rpb25TdWJ0aXRsZSxcbiAgU0NBQVNPcHRpb25zQ29udGFpbmVyLFxuICBTQ0FBU0RpdmlkZXIsXG59IGZyb20gJy4vQWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24uc3R5bGVzJ1xuaW1wb3J0IHsgQ2xpZW50Rm9ybURhdGEgfSBmcm9tICcuL0FibUFjY2Vzc2liaWxpdHlTZWN0aW9uLmludGVyZmFjZSdcblxuY29uc3QgRkFMTEJBQ0tfQ09OTkVDVE9SUzogQ2F0YWxvZ0Nvbm5lY3RvcltdID0gW1xuICB7XG4gICAgaWQ6IDAsXG4gICAgc2x1ZzogTkVUU1VJVEVfQ09OTkVDVE9SX1NMVUcsXG4gICAgbmFtZTogJ05ldFN1aXRlJyxcbiAgICByZXF1aXJlc19hdXRoOiB0cnVlLFxuICAgIGlzX2FjdGl2ZTogdHJ1ZSxcbiAgfSxcbl1cblxuaW50ZXJmYWNlIEFibUFjY2Vzc2liaWxpdHlTZWN0aW9uUHJvcHMge1xuICB2YWx1ZXM/OiB7XG4gICAgYWNjZXNzaWJpbGl0eT86IHtcbiAgICAgIGFjY2Vzc1R5cGU/OiBzdHJpbmdcbiAgICAgIGNsaWVudHM/OiBDbGllbnRGb3JtRGF0YVtdIHwgbnVsbFxuICAgICAgdGFza0FjY2Vzcz86IGJvb2xlYW5cbiAgICAgIHNlbGVjdGVkQ29ubmVjdG9ycz86IHN0cmluZ1tdXG4gICAgfVxuICB9XG4gIGhhbmRsZVNldEFnZW50VmFsdWVzPzogKHsga2V5LCB2YWx1ZSB9OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBBYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbiA9ICh7IHZhbHVlcywgaGFuZGxlU2V0QWdlbnRWYWx1ZXMgfTogQWJtQWNjZXNzaWJpbGl0eVNlY3Rpb25Qcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCdhYm1fYWdlbnRfc2VjdGlvbicpXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuXG4gIGNvbnN0IFtmb3JtVmFsdWVzLCBzZXRGb3JtVmFsdWVzXSA9IHVzZVN0YXRlPHtcbiAgICBhY2Nlc3NUeXBlOiBzdHJpbmdcbiAgICBjbGllbnRzOiBDbGllbnRGb3JtRGF0YVtdIHwgbnVsbFxuICAgIHRhc2tBY2Nlc3M6IGJvb2xlYW5cbiAgICBzZWxlY3RlZENvbm5lY3RvcnM6IHN0cmluZ1tdXG4gIH0+KHtcbiAgICBhY2Nlc3NUeXBlOiB2YWx1ZXM/LmFjY2Vzc2liaWxpdHk/LmFjY2Vzc1R5cGUgfHwgJ2NvbXBhbnknLFxuICAgIGNsaWVudHM6IHZhbHVlcz8uYWNjZXNzaWJpbGl0eT8uY2xpZW50cyB8fCBudWxsLFxuICAgIHRhc2tBY2Nlc3M6IHZhbHVlcz8uYWNjZXNzaWJpbGl0eT8udGFza0FjY2VzcyA/PyB0cnVlLFxuICAgIHNlbGVjdGVkQ29ubmVjdG9yczogdmFsdWVzPy5hY2Nlc3NpYmlsaXR5Py5zZWxlY3RlZENvbm5lY3RvcnMgfHwgW10sXG4gIH0pXG4gIGNvbnN0IFtjYXRhbG9nQ29ubmVjdG9ycywgc2V0Q2F0YWxvZ0Nvbm5lY3RvcnNdID0gdXNlU3RhdGU8Q2F0YWxvZ0Nvbm5lY3RvcltdPihGQUxMQkFDS19DT05ORUNUT1JTKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IChvcHRpb246IHN0cmluZywgY2xpZW50cz86IENsaWVudEZvcm1EYXRhW10gfCBudWxsKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9uTWFwcGluZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgIGNvbXBhbnk6ICdhbGxfY29tcGFueScsXG4gICAgICBjbGllbnRzOiAnYnlfY2xpZW50ZXMnLFxuICAgICAgb25seV9tZTogJ2p1c3RfbWUnLFxuICAgIH1cblxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5hY2Nlc3NpYmlsaXR5VHlwZSwgeyBvcHRpb246IG9wdGlvbk1hcHBpbmdbb3B0aW9uXSB9KVxuXG4gICAgY29uc3QgdmFsdWVUb1NlbmQgPSB7XG4gICAgICBhY2Nlc3NUeXBlOiBvcHRpb24sXG4gICAgICBjbGllbnRzOiBudWxsIGFzIENsaWVudEZvcm1EYXRhW10gfCBudWxsLFxuICAgICAgdGFza0FjY2VzczogZm9ybVZhbHVlcy50YXNrQWNjZXNzLFxuICAgICAgc2VsZWN0ZWRDb25uZWN0b3JzOiBmb3JtVmFsdWVzLnNlbGVjdGVkQ29ubmVjdG9ycyxcbiAgICB9XG4gICAgaWYgKG9wdGlvbiAhPT0gJ2NsaWVudHMnIHx8ICFjbGllbnRzKSB7XG4gICAgICBzZXRGb3JtVmFsdWVzKHZhbHVlVG9TZW5kKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY2xpZW50Rm9ybURhdGEgPSBjbGllbnRzLm1hcChjbGllbnQgPT4gKHtcbiAgICAgIGlkOiBjbGllbnQuaWQsXG4gICAgICBuYW1lOiBjbGllbnQubmFtZSxcbiAgICAgIGlzX2FjdGl2ZTogY2xpZW50LmlzX2FjdGl2ZSxcbiAgICAgIGlzX2RlbGV0ZWQ6IGNsaWVudC5pc19kZWxldGVkLFxuICAgIH0pKVxuXG4gICAgaWYgKGNsaWVudHMgJiYgY2xpZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWNjZXNzaWJpbGl0eVNlbGVjdENsaWVudClcbiAgICB9XG5cbiAgICBzZXRGb3JtVmFsdWVzKHsgLi4udmFsdWVUb1NlbmQsIGNsaWVudHM6IGNsaWVudEZvcm1EYXRhIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVUYXNrQWNjZXNzQ2hhbmdlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuY29ubmVjdG9yQ29yLCB7IG9wdGlvbjogY2hlY2tlZCA/ICdvbicgOiAnb2ZmJyB9KVxuXG4gICAgc2V0Rm9ybVZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgdGFza0FjY2VzczogY2hlY2tlZCxcbiAgICB9KSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNvbm5lY3RvckFjY2Vzc0NoYW5nZSA9IChzbHVnOiBzdHJpbmcsIGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuY29ubmVjdG9yTWNwLCB7IG9wdGlvbjogY2hlY2tlZCA/ICdvbicgOiAnb2ZmJywgc2x1ZyB9KVxuXG4gICAgc2V0Rm9ybVZhbHVlcyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KHByZXYuc2VsZWN0ZWRDb25uZWN0b3JzKVxuICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgbmV4dC5hZGQoc2x1ZylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQuZGVsZXRlKHNsdWcpXG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBzZWxlY3RlZENvbm5lY3RvcnM6IEFycmF5LmZyb20obmV4dCksXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbmV4dENvbm5lY3RvcnMgPSB2YWx1ZXM/LmFjY2Vzc2liaWxpdHk/LnNlbGVjdGVkQ29ubmVjdG9yc1xuICAgIGlmICghbmV4dENvbm5lY3RvcnMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRGb3JtVmFsdWVzKHByZXYgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IFsuLi5wcmV2LnNlbGVjdGVkQ29ubmVjdG9yc10uc29ydCgpLmpvaW4oJ3wnKVxuICAgICAgY29uc3QgaW5jb21pbmcgPSBbLi4ubmV4dENvbm5lY3RvcnNdLnNvcnQoKS5qb2luKCd8JylcbiAgICAgIGlmIChjdXJyZW50ID09PSBpbmNvbWluZykge1xuICAgICAgICByZXR1cm4gcHJldlxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgc2VsZWN0ZWRDb25uZWN0b3JzOiBuZXh0Q29ubmVjdG9ycyxcbiAgICAgIH1cbiAgICB9KVxuICB9LCBbdmFsdWVzPy5hY2Nlc3NpYmlsaXR5Py5zZWxlY3RlZENvbm5lY3RvcnNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZvcm1WYWx1ZXMpIHtcbiAgICAgIGhhbmRsZVNldEFnZW50VmFsdWVzPy4oe1xuICAgICAgICBrZXk6ICdhY2Nlc3NpYmlsaXR5JyxcbiAgICAgICAgdmFsdWU6IGZvcm1WYWx1ZXMsXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW2Zvcm1WYWx1ZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlXG4gICAgZ2V0QXZhaWxhYmxlQ29ubmVjdG9ycygpXG4gICAgICAudGhlbihjb25uZWN0b3JzID0+IHtcbiAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICBzZXRDYXRhbG9nQ29ubmVjdG9ycyhcbiAgICAgICAgICAgIGNvbm5lY3RvcnMuZmlsdGVyKFxuICAgICAgICAgICAgICBjb25uZWN0b3IgPT4gY29ubmVjdG9yLmlzX2FjdGl2ZSAmJiBjb25uZWN0b3Iuc2x1ZyA9PT0gTkVUU1VJVEVfQ09OTkVDVE9SX1NMVUdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjb25uZWN0b3JzIGNhdGFsb2c6JywgZXJyb3IpXG4gICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgc2V0Q2F0YWxvZ0Nvbm5lY3RvcnMoRkFMTEJBQ0tfQ09OTkVDVE9SUylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2FuY2VsbGVkID0gdHJ1ZVxuICAgIH1cbiAgfSwgW10pXG5cbiAgcmV0dXJuIChcbiAgICA8U0NBQVNXcmFwcGVyPlxuICAgICAgPFNDQUFTSGVhZGVyICRpbmRleD17MH0+XG4gICAgICAgIDxTQ0FBU1RpdGxlPnt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi50aXRsZVNlY3Rpb24nKX08L1NDQUFTVGl0bGU+XG4gICAgICAgIDxTQ0FBU1N1YnRpdGxlPnt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi5zdWJ0aXRsZVNlY3Rpb24nKX08L1NDQUFTU3VidGl0bGU+XG4gICAgICA8L1NDQUFTSGVhZGVyPlxuICAgICAgPFNDQUFTQ29udGVudCAkaW5kZXg9ezF9PlxuICAgICAgICA8U0NBQVNTZWN0aW9uPlxuICAgICAgICAgIDxTQ0FBU1NlY3Rpb25IZWFkZXI+XG4gICAgICAgICAgICA8U0NBQVNTZWN0aW9uVGl0bGU+e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNvclBlcm1pc3Npb25zVGl0bGUnKX08L1NDQUFTU2VjdGlvblRpdGxlPlxuICAgICAgICAgICAgPFNDQUFTU2VjdGlvblN1YnRpdGxlPnt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi5jb3JQZXJtaXNzaW9uc1N1YnRpdGxlJyl9PC9TQ0FBU1NlY3Rpb25TdWJ0aXRsZT5cbiAgICAgICAgICA8L1NDQUFTU2VjdGlvbkhlYWRlcj5cbiAgICAgICAgICA8T3B0aW9uQ29yUGVybWlzc2lvblxuICAgICAgICAgICAgdGl0bGU9e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLnRhc2tBY2Nlc3NUaXRsZScpfVxuICAgICAgICAgICAgZGVzY3JpcHRpb249e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLnRhc2tBY2Nlc3NEZXNjcmlwdGlvbicpfVxuICAgICAgICAgICAgY2hlY2tlZD17Zm9ybVZhbHVlcy50YXNrQWNjZXNzfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRhc2tBY2Nlc3NDaGFuZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TQ0FBU1NlY3Rpb24+XG5cbiAgICAgICAgPFNDQUFTRGl2aWRlciAvPlxuXG4gICAgICAgIDxTQ0FBU1NlY3Rpb24+XG4gICAgICAgICAgPFNDQUFTU2VjdGlvbkhlYWRlcj5cbiAgICAgICAgICAgIDxTQ0FBU1NlY3Rpb25UaXRsZT57dCgnYWNjZXNzaWJpbGl0eVNlY3Rpb24ubWNwUGVybWlzc2lvbnNUaXRsZScpfTwvU0NBQVNTZWN0aW9uVGl0bGU+XG4gICAgICAgICAgICA8U0NBQVNTZWN0aW9uU3VidGl0bGU+e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLm1jcFBlcm1pc3Npb25zU3VidGl0bGUnKX08L1NDQUFTU2VjdGlvblN1YnRpdGxlPlxuICAgICAgICAgIDwvU0NBQVNTZWN0aW9uSGVhZGVyPlxuICAgICAgICAgIHtjYXRhbG9nQ29ubmVjdG9ycy5tYXAoY29ubmVjdG9yID0+IChcbiAgICAgICAgICAgIDxPcHRpb25Db3JQZXJtaXNzaW9uXG4gICAgICAgICAgICAgIGtleT17Y29ubmVjdG9yLnNsdWd9XG4gICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICBjb25uZWN0b3Iuc2x1ZyA9PT0gTkVUU1VJVEVfQ09OTkVDVE9SX1NMVUdcbiAgICAgICAgICAgICAgICAgID8gdCgnYWNjZXNzaWJpbGl0eVNlY3Rpb24ubmV0c3VpdGVBY2Nlc3NUaXRsZScpXG4gICAgICAgICAgICAgICAgICA6IGNvbm5lY3Rvci5uYW1lXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249e1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rvci5zbHVnID09PSBORVRTVUlURV9DT05ORUNUT1JfU0xVR1xuICAgICAgICAgICAgICAgICAgPyB0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi5uZXRzdWl0ZUFjY2Vzc0Rlc2NyaXB0aW9uJylcbiAgICAgICAgICAgICAgICAgIDogY29ubmVjdG9yLmRlc2NyaXB0aW9uIHx8XG4gICAgICAgICAgICAgICAgICAgIHQoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNvbm5lY3RvckFjY2Vzc0Rlc2NyaXB0aW9uJywgeyBuYW1lOiBjb25uZWN0b3IubmFtZSB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e2Zvcm1WYWx1ZXMuc2VsZWN0ZWRDb25uZWN0b3JzLmluY2x1ZGVzKGNvbm5lY3Rvci5zbHVnKX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2NoZWNrZWQgPT4gaGFuZGxlQ29ubmVjdG9yQWNjZXNzQ2hhbmdlKGNvbm5lY3Rvci5zbHVnLCBjaGVja2VkKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU0NBQVNTZWN0aW9uPlxuXG4gICAgICAgIDxTQ0FBU0RpdmlkZXIgLz5cblxuICAgICAgICA8U0NBQVNTZWN0aW9uPlxuICAgICAgICAgIDxTQ0FBU1NlY3Rpb25IZWFkZXI+XG4gICAgICAgICAgICA8U0NBQVNTZWN0aW9uVGl0bGU+e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLnZpc2liaWxpdHlUaXRsZScpfTwvU0NBQVNTZWN0aW9uVGl0bGU+XG4gICAgICAgICAgICA8U0NBQVNTZWN0aW9uU3VidGl0bGU+e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLndob0NhbkFjY2VzcycpfTwvU0NBQVNTZWN0aW9uU3VidGl0bGU+XG4gICAgICAgICAgPC9TQ0FBU1NlY3Rpb25IZWFkZXI+XG4gICAgICAgICAgPFNDQUFTT3B0aW9uc0NvbnRhaW5lcj5cbiAgICAgICAgICAgIDxPcHRpb25BY2Nlc3NpYmlsaXR5XG4gICAgICAgICAgICAgIHRpdGxlPXt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi5hbGxDb21wYW55VGl0bGUnKX1cbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmFsbENvbXBhbnlEZXNjcmlwdGlvbicpfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249eygpID0+IGhhbmRsZVNlbGVjdE9wdGlvbignY29tcGFueScpfVxuICAgICAgICAgICAgICBvcHRpb25TZWxlY3RlZD17Zm9ybVZhbHVlcy5hY2Nlc3NUeXBlfVxuICAgICAgICAgICAgICBuYW1lPVwiY29tcGFueVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPE9wdGlvbkFjY2Vzc2liaWxpdHlcbiAgICAgICAgICAgICAgdGl0bGU9e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNsaWVudFRpdGxlJyl9XG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi5jbGllbnREZXNjcmlwdGlvbicpfVxuICAgICAgICAgICAgICBpc0NsaWVudD17Zm9ybVZhbHVlcy5hY2Nlc3NUeXBlID09PSAnY2xpZW50cyd9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbj17KHByb3BzPzogQ2xpZW50Rm9ybURhdGFbXSkgPT4gaGFuZGxlU2VsZWN0T3B0aW9uKCdjbGllbnRzJywgcHJvcHMpfVxuICAgICAgICAgICAgICBvcHRpb25TZWxlY3RlZD17Zm9ybVZhbHVlcy5hY2Nlc3NUeXBlfVxuICAgICAgICAgICAgICBuYW1lPVwiY2xpZW50c1wiXG4gICAgICAgICAgICAgIHNlbGVjdGVkQ2xpZW50cz17Zm9ybVZhbHVlcy5jbGllbnRzPy5tYXAoY2xpZW50ID0+ICh7XG4gICAgICAgICAgICAgICAgaWQ6IGNsaWVudC5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiBjbGllbnQubmFtZSA/PyAnJyxcbiAgICAgICAgICAgICAgICBpc19hY3RpdmU6IGNsaWVudC5pc19hY3RpdmUsXG4gICAgICAgICAgICAgICAgaXNfZGVsZXRlZDogY2xpZW50LmlzX2RlbGV0ZWQsXG4gICAgICAgICAgICAgIH0pKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8T3B0aW9uQWNjZXNzaWJpbGl0eVxuICAgICAgICAgICAgICB0aXRsZT17dCgnYWNjZXNzaWJpbGl0eVNlY3Rpb24ub3duVGl0bGUnKX1cbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLm93bkRlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbj17KCkgPT4gaGFuZGxlU2VsZWN0T3B0aW9uKCdvbmx5X21lJyl9XG4gICAgICAgICAgICAgIG9wdGlvblNlbGVjdGVkPXtmb3JtVmFsdWVzLmFjY2Vzc1R5cGV9XG4gICAgICAgICAgICAgIG5hbWU9XCJvbmx5X21lXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FBU09wdGlvbnNDb250YWluZXI+XG4gICAgICAgIDwvU0NBQVNTZWN0aW9uPlxuICAgICAgPC9TQ0FBU0NvbnRlbnQ+XG4gICAgPC9TQ0FBU1dyYXBwZXI+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxTQUFTQSxRQUFRLEVBQUVDLFNBQVMsUUFBUSxPQUFPO0FBQzNDLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLG1CQUFt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