@projectcor/maia-components 2.11.63-1 → 2.11.63-3

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 (95) hide show
  1. package/lib/App.js +6 -2
  2. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +7 -3
  3. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +4 -2
  4. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +29 -2
  5. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +33 -24
  6. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +40 -7
  7. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +2 -2
  8. package/lib/components/atoms/icons/RocketIcon.js +31 -0
  9. package/lib/components/atoms/icons/SkillIcon.js +30 -0
  10. package/lib/components/atoms/icons/SkillsNavIcon.js +27 -0
  11. package/lib/components/atoms/icons/WrenchIcon.js +42 -0
  12. package/lib/components/atoms/icons/index.js +4 -1
  13. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +2 -2
  14. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.js +522 -0
  15. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.styles.js +234 -0
  16. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/catalog.js +437 -0
  17. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/index.js +3 -0
  18. package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +3 -3
  19. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +2 -2
  20. package/lib/components/molecules/AbmSection/AbmSkillsSection.styles.js +80 -0
  21. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.interface.js +2 -0
  22. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.js +722 -0
  23. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.styles.js +165 -0
  24. package/lib/components/molecules/AbmSection/AbmTriggersSection/index.js +2 -0
  25. package/lib/components/molecules/AbmSection/index.js +2 -1
  26. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +21 -2
  27. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +60 -16
  28. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +2 -2
  29. package/lib/components/molecules/ChatAIModal/constants.js +10 -2
  30. package/lib/components/molecules/ChatAIMyRoutines/ChatAIMyRoutines.js +486 -0
  31. package/lib/components/molecules/ChatAIMyRoutines/ChatAIMyRoutines.styles.js +184 -0
  32. package/lib/components/molecules/ChatAIMyRoutines/index.js +2 -0
  33. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +357 -0
  34. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +145 -0
  35. package/lib/components/molecules/ChatAIMySkills/index.js +2 -0
  36. package/lib/components/molecules/ChatFooter/ChatFooter.js +1 -1
  37. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
  38. package/lib/components/molecules/SchedulesPage/SchedulesPage.js +610 -0
  39. package/lib/components/molecules/SchedulesPage/index.js +2 -0
  40. package/lib/components/molecules/Sidebar/Sidebar.js +61 -28
  41. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +15 -11
  42. package/lib/components/molecules/SkillsPage/SkillsPage.js +708 -0
  43. package/lib/components/molecules/SkillsPage/index.js +2 -0
  44. package/lib/components/molecules/maiaSectionModalStyles.js +91 -0
  45. package/lib/components/molecules/maiaSectionUiTokens.js +31 -0
  46. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +269 -56
  47. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +4 -4
  48. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +160 -0
  49. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +34 -0
  50. package/lib/components/organisms/AbmSkillGenerateModal/index.js +2 -0
  51. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +446 -0
  52. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +98 -0
  53. package/lib/components/organisms/AbmSkillModal/index.js +2 -0
  54. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +17 -2
  55. package/lib/constants/config.js +4 -1
  56. package/lib/dev/DevAbmAgentModal.js +114 -0
  57. package/lib/dev/mocks/abmModalMocks.js +193 -0
  58. package/lib/hooks/useAgentModel/useCreateAgent.js +11 -10
  59. package/lib/hooks/useAgentModel/useUpdateAgent.js +12 -11
  60. package/lib/hooks/useContextMentions.js +61 -13
  61. package/lib/hooks/useEntitySearch.js +273 -142
  62. package/lib/hooks/useMentionAllowedTypes.js +46 -11
  63. package/lib/hooks/useMentionPopover.js +64 -30
  64. package/lib/hooks/useProjectSearch.js +4 -28
  65. package/lib/hooks/useRecentClientsSearch.js +4 -34
  66. package/lib/lang/br/index.js +572 -3
  67. package/lib/lang/en/index.js +572 -3
  68. package/lib/lang/es/index.js +572 -3
  69. package/lib/lang/fr/index.js +304 -4
  70. package/lib/services/maia/Agents/connectors.js +110 -0
  71. package/lib/services/maia/Agents/createAgent.js +1 -1
  72. package/lib/services/maia/Agents/getAgentById.js +3 -2
  73. package/lib/services/maia/Agents/skills.js +164 -0
  74. package/lib/services/maia/Agents/updateAgent.js +1 -1
  75. package/lib/services/maia/Orchestrator/orchestrator.js +1 -2
  76. package/lib/services/maia/Schedules/createSchedule.js +39 -0
  77. package/lib/services/maia/Schedules/deleteSchedule.js +36 -0
  78. package/lib/services/maia/Schedules/getMySchedules.js +55 -0
  79. package/lib/services/maia/Schedules/getSchedules.js +58 -0
  80. package/lib/services/maia/Schedules/index.js +5 -0
  81. package/lib/services/maia/Skills/createSkill.js +39 -0
  82. package/lib/services/maia/Skills/deleteSkill.js +38 -0
  83. package/lib/services/maia/Skills/generateSkill.js +41 -0
  84. package/lib/services/maia/Skills/getSkills.js +90 -0
  85. package/lib/services/maia/Skills/updateSkill.js +39 -0
  86. package/lib/types/Chat.js +1 -1
  87. package/lib/types/agent.js +1 -1
  88. package/lib/types/agentModal.js +1 -1
  89. package/lib/types/agentSkill.js +2 -0
  90. package/lib/types/attachment.js +2 -0
  91. package/lib/types/contextMention.js +1 -1
  92. package/lib/types/skill.js +2 -0
  93. package/lib/utils/contextMentionIcons.js +29 -1
  94. package/lib/utils/renderContextMentions.js +9 -4
  95. package/package.json +1 -1
@@ -0,0 +1,486 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ import ReactDOM from 'react-dom';
6
+ import { useCallback, useEffect, useRef, useState } from 'react';
7
+ import { useTranslation } from 'react-i18next';
8
+ import { MenuDots } from '@projectcor/icons/lib/components/MenuDots';
9
+ import { ChevronDown } from '@projectcor/icons/lib/components/ChevronDown';
10
+ import { Cross } from '@projectcor/icons/lib/components/Cross';
11
+ import { AbmTriggersSection } from '../AbmSection/AbmTriggersSection/AbmTriggersSection';
12
+ import { Backdrop } from '../../atoms/Backdrop';
13
+ import { fetchMaia } from '../../../services/maia/client';
14
+ import { getMySchedules, deleteSchedule } from '../../../services/maia/Schedules';
15
+ import { DeleteQuestionModal } from '../../organisms/DeleteQuestionModal/DeleteQuestionModal';
16
+ import { MAIAIsologo } from '../../atoms/icons';
17
+ import { Loader } from '../../atoms/Loader';
18
+ import { maiaSectionUi as u } from '../maiaSectionUiTokens';
19
+ import { SCAgentSelectorContainer, SCAgentSelectorList, SCAgentSelectorLoadingRow, SCAgentSelectorOption, SCAgentSelectorTrigger, MAIA_SECTION_MODAL_Z, SCFieldWithDropdownZ } from '../maiaSectionModalStyles';
20
+ import { SCMRActionsRow, SCMRBody, SCMRCardBody, SCMRCardButton, SCMRCardContentText, SCMRCardFooter, SCMRCardFrequency, SCMRCardHeader, SCMRCardMenu, SCMRCardMenuItem, SCMRCardMenuItems, SCMRCardTitleName, SCMRCardTopRow, SCMRCardsOuter, SCMRCardsRow, SCMRContainer, SCMRCreateButton, SCMRCreateButtonText, SCMREmptyStateButton, SCMREmptyStateColumn, SCMREmptyStateRoot, SCMREmptyStateSubtitle, SCMREmptyStateTitleBlock, SCMREmptyStateTitle, SCMRKebabButton, SCMRLoadWrapper, SCMRModalBodyScroll, SCMRModalCancelButton, SCMRModalCloseButton, SCMRModalContent, SCMRModalFooter, SCMRModalHeader, SCMRModalSaveButton, SCMRModalTitle, SCMRModalWrapper, SCMRStatusBadge, SCMRSubtitle, SCMRTitle, SCMRTitleInner, SCMRTitleWrap } from './ChatAIMyRoutines.styles';
21
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
22
+ var routineToFormState = function routineToFormState(routine) {
23
+ var _routine$name, _routine$hour, _routine$minute, _routine$day_of_week;
24
+ return {
25
+ name: (_routine$name = routine.name) !== null && _routine$name !== void 0 ? _routine$name : '',
26
+ input: routine.input,
27
+ scheduleType: routine.schedule_type,
28
+ hour: (_routine$hour = routine.hour) !== null && _routine$hour !== void 0 ? _routine$hour : 12,
29
+ minute: (_routine$minute = routine.minute) !== null && _routine$minute !== void 0 ? _routine$minute : 0,
30
+ dayOfWeek: (_routine$day_of_week = routine.day_of_week) !== null && _routine$day_of_week !== void 0 ? _routine$day_of_week : 0,
31
+ timezone: routine.timezone
32
+ };
33
+ };
34
+ export var ChatAIMyRoutines = function ChatAIMyRoutines() {
35
+ var _document$getElementB, _selectedAgent$id;
36
+ var _useTranslation = useTranslation('abm_agent_section'),
37
+ t = _useTranslation.t;
38
+ var _useState = useState([]),
39
+ _useState2 = _slicedToArray(_useState, 2),
40
+ routines = _useState2[0],
41
+ setRoutines = _useState2[1];
42
+ var _useState3 = useState(false),
43
+ _useState4 = _slicedToArray(_useState3, 2),
44
+ loading = _useState4[0],
45
+ setLoading = _useState4[1];
46
+ var _useState5 = useState(false),
47
+ _useState6 = _slicedToArray(_useState5, 2),
48
+ panelOpen = _useState6[0],
49
+ setPanelOpen = _useState6[1];
50
+ var _useState7 = useState(null),
51
+ _useState8 = _slicedToArray(_useState7, 2),
52
+ editingRoutine = _useState8[0],
53
+ setEditingRoutine = _useState8[1];
54
+ var _useState9 = useState(null),
55
+ _useState0 = _slicedToArray(_useState9, 2),
56
+ templateForm = _useState0[0],
57
+ setTemplateForm = _useState0[1];
58
+ var _useState1 = useState([]),
59
+ _useState10 = _slicedToArray(_useState1, 2),
60
+ agents = _useState10[0],
61
+ setAgents = _useState10[1];
62
+ var _useState11 = useState(false),
63
+ _useState12 = _slicedToArray(_useState11, 2),
64
+ loadingAgents = _useState12[0],
65
+ setLoadingAgents = _useState12[1];
66
+ var _useState13 = useState(null),
67
+ _useState14 = _slicedToArray(_useState13, 2),
68
+ selectedAgent = _useState14[0],
69
+ setSelectedAgent = _useState14[1];
70
+ var _useState15 = useState(false),
71
+ _useState16 = _slicedToArray(_useState15, 2),
72
+ dropdownOpen = _useState16[0],
73
+ setDropdownOpen = _useState16[1];
74
+ var _useState17 = useState(0),
75
+ _useState18 = _slicedToArray(_useState17, 2),
76
+ submitCount = _useState18[0],
77
+ setSubmitCount = _useState18[1];
78
+ var _useState19 = useState(false),
79
+ _useState20 = _slicedToArray(_useState19, 2),
80
+ isFormValid = _useState20[0],
81
+ setIsFormValid = _useState20[1];
82
+ var _useState21 = useState(null),
83
+ _useState22 = _slicedToArray(_useState21, 2),
84
+ menuOpenForId = _useState22[0],
85
+ setMenuOpenForId = _useState22[1];
86
+ var _useState23 = useState(null),
87
+ _useState24 = _slicedToArray(_useState23, 2),
88
+ routineToDelete = _useState24[0],
89
+ setRoutineToDelete = _useState24[1];
90
+ var dropdownRef = useRef(null);
91
+ var fetchRoutines = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
92
+ var result, _t;
93
+ return _regeneratorRuntime.wrap(function (_context) {
94
+ while (1) switch (_context.prev = _context.next) {
95
+ case 0:
96
+ setLoading(true);
97
+ _context.prev = 1;
98
+ _context.next = 2;
99
+ return getMySchedules({
100
+ limit: 100,
101
+ offset: 0
102
+ });
103
+ case 2:
104
+ result = _context.sent;
105
+ setRoutines(result.data);
106
+ _context.next = 4;
107
+ break;
108
+ case 3:
109
+ _context.prev = 3;
110
+ _t = _context["catch"](1);
111
+ case 4:
112
+ _context.prev = 4;
113
+ setLoading(false);
114
+ return _context.finish(4);
115
+ case 5:
116
+ case "end":
117
+ return _context.stop();
118
+ }
119
+ }, _callee, null, [[1, 3, 4, 5]]);
120
+ })), []);
121
+ var fetchAgents = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
122
+ var response, data, agentList, _t2;
123
+ return _regeneratorRuntime.wrap(function (_context2) {
124
+ while (1) switch (_context2.prev = _context2.next) {
125
+ case 0:
126
+ setLoadingAgents(true);
127
+ _context2.prev = 1;
128
+ _context2.next = 2;
129
+ return fetchMaia({
130
+ path: 'agents?agent_type=custom&limit=100&offset=0',
131
+ method: 'GET'
132
+ });
133
+ case 2:
134
+ response = _context2.sent;
135
+ _context2.next = 3;
136
+ return response.json();
137
+ case 3:
138
+ data = _context2.sent;
139
+ agentList = (data.data || []).map(function (a) {
140
+ return {
141
+ id: a.id,
142
+ name: a.name,
143
+ emoji: a.emoji || ''
144
+ };
145
+ });
146
+ setAgents(agentList);
147
+ if (agentList.length === 1) {
148
+ setSelectedAgent(agentList[0]);
149
+ setDropdownOpen(false);
150
+ }
151
+ _context2.next = 5;
152
+ break;
153
+ case 4:
154
+ _context2.prev = 4;
155
+ _t2 = _context2["catch"](1);
156
+ case 5:
157
+ _context2.prev = 5;
158
+ setLoadingAgents(false);
159
+ return _context2.finish(5);
160
+ case 6:
161
+ case "end":
162
+ return _context2.stop();
163
+ }
164
+ }, _callee2, null, [[1, 4, 5, 6]]);
165
+ })), []);
166
+ useEffect(function () {
167
+ fetchRoutines();
168
+ }, [fetchRoutines]);
169
+ useEffect(function () {
170
+ if (!panelOpen) {
171
+ return undefined;
172
+ }
173
+ setDropdownOpen(false);
174
+ fetchAgents();
175
+ return undefined;
176
+ }, [panelOpen, fetchAgents]);
177
+ var openCreatePanel = useCallback(function () {
178
+ setEditingRoutine(null);
179
+ setTemplateForm(null);
180
+ setSelectedAgent(null);
181
+ setIsFormValid(false);
182
+ setSubmitCount(0);
183
+ setPanelOpen(true);
184
+ }, []);
185
+ var openDetailPanel = useCallback(function (routine) {
186
+ var _routine$agent_name, _routine$agent_emoji;
187
+ setEditingRoutine(routine);
188
+ setTemplateForm(routineToFormState(routine));
189
+ setSelectedAgent(routine.agent_external_id ? {
190
+ id: routine.agent_external_id,
191
+ name: (_routine$agent_name = routine.agent_name) !== null && _routine$agent_name !== void 0 ? _routine$agent_name : '',
192
+ emoji: (_routine$agent_emoji = routine.agent_emoji) !== null && _routine$agent_emoji !== void 0 ? _routine$agent_emoji : ''
193
+ } : null);
194
+ setIsFormValid(false);
195
+ setSubmitCount(0);
196
+ setPanelOpen(true);
197
+ }, []);
198
+ var closePanel = useCallback(function () {
199
+ setPanelOpen(false);
200
+ setEditingRoutine(null);
201
+ setTemplateForm(null);
202
+ }, []);
203
+ useEffect(function () {
204
+ if (!dropdownOpen) {
205
+ return undefined;
206
+ }
207
+ var closeIfOutside = function closeIfOutside(e) {
208
+ var _dropdownRef$current;
209
+ if (!((_dropdownRef$current = dropdownRef.current) !== null && _dropdownRef$current !== void 0 && _dropdownRef$current.contains(e.target))) setDropdownOpen(false);
210
+ };
211
+ document.addEventListener('click', closeIfOutside);
212
+ return function () {
213
+ return document.removeEventListener('click', closeIfOutside);
214
+ };
215
+ }, [dropdownOpen]);
216
+ useEffect(function () {
217
+ var handleClickOutside = function handleClickOutside() {
218
+ if (menuOpenForId) setMenuOpenForId(null);
219
+ };
220
+ document.addEventListener('click', handleClickOutside);
221
+ return function () {
222
+ return document.removeEventListener('click', handleClickOutside);
223
+ };
224
+ }, [menuOpenForId]);
225
+ var handleCreateSuccess = useCallback(function () {
226
+ closePanel();
227
+ setSelectedAgent(null);
228
+ fetchRoutines();
229
+ }, [closePanel, fetchRoutines]);
230
+ var handleConfirmDelete = useCallback(/*#__PURE__*/function () {
231
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(chat) {
232
+ var _t3;
233
+ return _regeneratorRuntime.wrap(function (_context3) {
234
+ while (1) switch (_context3.prev = _context3.next) {
235
+ case 0:
236
+ _context3.prev = 0;
237
+ _context3.next = 1;
238
+ return deleteSchedule(chat.id);
239
+ case 1:
240
+ setRoutineToDelete(null);
241
+ fetchRoutines();
242
+ _context3.next = 3;
243
+ break;
244
+ case 2:
245
+ _context3.prev = 2;
246
+ _t3 = _context3["catch"](0);
247
+ case 3:
248
+ case "end":
249
+ return _context3.stop();
250
+ }
251
+ }, _callee3, null, [[0, 2]]);
252
+ }));
253
+ return function (_x) {
254
+ return _ref3.apply(this, arguments);
255
+ };
256
+ }(), [fetchRoutines]);
257
+ var frequencyLabel = function frequencyLabel(schedule) {
258
+ var _map$schedule$schedul;
259
+ var map = {
260
+ minutely: t('triggersSection.frequencies.minutely'),
261
+ hourly: t('triggersSection.frequencies.hourly'),
262
+ daily: t('triggersSection.frequencies.daily'),
263
+ weekly: t('triggersSection.frequencies.weekly')
264
+ };
265
+ return (_map$schedule$schedul = map[schedule.schedule_type]) !== null && _map$schedule$schedul !== void 0 ? _map$schedule$schedul : schedule.schedule_type;
266
+ };
267
+ var statusLabel = function statusLabel(status) {
268
+ var _map$status;
269
+ var map = {
270
+ active: t('triggersSection.status.active'),
271
+ paused: t('triggersSection.status.paused'),
272
+ disabled: t('triggersSection.status.disabled')
273
+ };
274
+ return (_map$status = map[status]) !== null && _map$status !== void 0 ? _map$status : status;
275
+ };
276
+ var selectedLabel = selectedAgent ? "".concat(selectedAgent.emoji ? "".concat(selectedAgent.emoji, " ") : '').concat(selectedAgent.name) : t('triggersSection.selectAgent');
277
+ var deleteModalChat = routineToDelete ? {
278
+ title: routineToDelete.name || t('triggersSection.untitledRoutine'),
279
+ id: routineToDelete.id
280
+ } : null;
281
+ var container = (_document$getElementB = document.getElementById('modal-root-actions')) !== null && _document$getElementB !== void 0 ? _document$getElementB : document.body;
282
+ return /*#__PURE__*/_jsxs(SCMRContainer, {
283
+ $hasItems: !!routines.length,
284
+ children: [/*#__PURE__*/_jsx(MAIAIsologo, {}), /*#__PURE__*/_jsxs(SCMRBody, {
285
+ $canCreate: true,
286
+ children: [routines.length ? /*#__PURE__*/_jsxs(SCMRTitleWrap, {
287
+ children: [/*#__PURE__*/_jsxs(SCMRTitleInner, {
288
+ children: [/*#__PURE__*/_jsx(SCMRTitle, {
289
+ children: t('triggersSection.myRoutinesTitle')
290
+ }), /*#__PURE__*/_jsx(SCMRSubtitle, {
291
+ children: t('triggersSection.myRoutinesSubtitle')
292
+ })]
293
+ }), /*#__PURE__*/_jsx(SCMRActionsRow, {
294
+ children: /*#__PURE__*/_jsx(SCMRCreateButton, {
295
+ type: "button",
296
+ onClick: openCreatePanel,
297
+ children: /*#__PURE__*/_jsx(SCMRCreateButtonText, {
298
+ children: t('triggersSection.newRoutine')
299
+ })
300
+ })
301
+ })]
302
+ }) : null, loading ? /*#__PURE__*/_jsx(SCMRLoadWrapper, {
303
+ children: /*#__PURE__*/_jsx(Loader, {
304
+ size: "small"
305
+ })
306
+ }) : null, !loading && routines.length ? /*#__PURE__*/_jsx(SCMRCardsOuter, {
307
+ children: /*#__PURE__*/_jsx(SCMRCardsRow, {
308
+ children: routines.map(function (routine) {
309
+ var _routine$agent_name2;
310
+ return /*#__PURE__*/_jsxs(SCMRCardButton, {
311
+ type: "button",
312
+ onClick: function onClick() {
313
+ return openDetailPanel(routine);
314
+ },
315
+ children: [/*#__PURE__*/_jsx(SCMRCardHeader, {
316
+ children: /*#__PURE__*/_jsxs(SCMRCardTopRow, {
317
+ children: [/*#__PURE__*/_jsx(SCMRCardTitleName, {
318
+ children: routine.name || t('triggersSection.untitledRoutine')
319
+ }), /*#__PURE__*/_jsx(SCMRKebabButton, {
320
+ type: "button",
321
+ "aria-label": t('triggersSection.deleteRoutine'),
322
+ onClick: function onClick(event) {
323
+ event.preventDefault();
324
+ event.stopPropagation();
325
+ setMenuOpenForId(function (prev) {
326
+ return prev === routine.id ? null : routine.id;
327
+ });
328
+ },
329
+ children: /*#__PURE__*/_jsx(MenuDots, {
330
+ color: "#999",
331
+ width: 15,
332
+ height: 15
333
+ })
334
+ })]
335
+ })
336
+ }), /*#__PURE__*/_jsxs(SCMRCardBody, {
337
+ children: [/*#__PURE__*/_jsx(SCMRCardContentText, {
338
+ children: routine.agent_emoji || routine.agent_name ? "".concat(routine.agent_emoji ? "".concat(routine.agent_emoji, " ") : '').concat((_routine$agent_name2 = routine.agent_name) !== null && _routine$agent_name2 !== void 0 ? _routine$agent_name2 : '') : ''
339
+ }), /*#__PURE__*/_jsxs(SCMRCardFooter, {
340
+ children: [/*#__PURE__*/_jsx(SCMRCardFrequency, {
341
+ children: frequencyLabel(routine)
342
+ }), /*#__PURE__*/_jsx(SCMRStatusBadge, {
343
+ $status: routine.status,
344
+ children: statusLabel(routine.status)
345
+ })]
346
+ })]
347
+ }), menuOpenForId === routine.id ? /*#__PURE__*/_jsx(SCMRCardMenu, {
348
+ onClick: function onClick(event) {
349
+ event.preventDefault();
350
+ event.stopPropagation();
351
+ },
352
+ children: /*#__PURE__*/_jsx(SCMRCardMenuItems, {
353
+ children: /*#__PURE__*/_jsx(SCMRCardMenuItem, {
354
+ type: "button",
355
+ onClick: function onClick() {
356
+ setRoutineToDelete(routine);
357
+ setMenuOpenForId(null);
358
+ },
359
+ children: t('triggersSection.deleteRoutine')
360
+ })
361
+ })
362
+ }) : null]
363
+ }, routine.id);
364
+ })
365
+ })
366
+ }) : null, !loading && !routines.length ? /*#__PURE__*/_jsxs(SCMREmptyStateRoot, {
367
+ children: [/*#__PURE__*/_jsx(SCMREmptyStateColumn, {
368
+ children: /*#__PURE__*/_jsxs(SCMREmptyStateTitleBlock, {
369
+ children: [/*#__PURE__*/_jsx(SCMREmptyStateTitle, {
370
+ children: t('triggersSection.myRoutinesEmptyTitle')
371
+ }), /*#__PURE__*/_jsx(SCMREmptyStateSubtitle, {
372
+ children: t('triggersSection.myRoutinesEmptyDescription')
373
+ })]
374
+ })
375
+ }), /*#__PURE__*/_jsx(SCMREmptyStateButton, {
376
+ type: "button",
377
+ onClick: openCreatePanel,
378
+ children: t('triggersSection.newRoutine')
379
+ })]
380
+ }) : null]
381
+ }), panelOpen && /*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/_jsx(Backdrop, {
382
+ onClick: closePanel,
383
+ zIndex: MAIA_SECTION_MODAL_Z,
384
+ children: /*#__PURE__*/_jsxs(SCMRModalWrapper, {
385
+ onClick: function onClick(e) {
386
+ return e.stopPropagation();
387
+ },
388
+ children: [/*#__PURE__*/_jsxs(SCMRModalHeader, {
389
+ children: [/*#__PURE__*/_jsx(SCMRModalTitle, {
390
+ children: editingRoutine ? t('triggersSection.routineDetail') : t('triggersSection.newRoutine')
391
+ }), /*#__PURE__*/_jsx(SCMRModalCloseButton, {
392
+ type: "button",
393
+ "aria-label": t('triggersSection.back'),
394
+ onClick: closePanel,
395
+ children: /*#__PURE__*/_jsx(Cross, {
396
+ color: "#a6a6a6",
397
+ width: 18,
398
+ height: 18
399
+ })
400
+ })]
401
+ }), /*#__PURE__*/_jsxs(SCMRModalContent, {
402
+ children: [/*#__PURE__*/_jsxs(SCFieldWithDropdownZ, {
403
+ children: [t('triggersSection.agent'), /*#__PURE__*/_jsx(SCAgentSelectorContainer, {
404
+ ref: dropdownRef,
405
+ children: editingRoutine ? /*#__PURE__*/_jsx(SCAgentSelectorTrigger, {
406
+ open: false,
407
+ type: "button",
408
+ disabled: true,
409
+ children: /*#__PURE__*/_jsx("span", {
410
+ children: selectedLabel
411
+ })
412
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
413
+ children: [/*#__PURE__*/_jsxs(SCAgentSelectorTrigger, {
414
+ open: dropdownOpen,
415
+ onClick: function onClick() {
416
+ return setDropdownOpen(function (prev) {
417
+ return !prev;
418
+ });
419
+ },
420
+ type: "button",
421
+ children: [/*#__PURE__*/_jsx("span", {
422
+ children: loadingAgents ? t('triggersSection.loadingAgents') : selectedLabel
423
+ }), /*#__PURE__*/_jsx(ChevronDown, {
424
+ width: "14px",
425
+ height: "14px",
426
+ color: dropdownOpen ? u.agentAccent : u.textMuted
427
+ })]
428
+ }), dropdownOpen && /*#__PURE__*/_jsx(SCAgentSelectorList, {
429
+ children: loadingAgents ? /*#__PURE__*/_jsx(SCAgentSelectorLoadingRow, {
430
+ children: t('triggersSection.loadingAgents')
431
+ }) : agents.map(function (agent) {
432
+ return /*#__PURE__*/_jsxs(SCAgentSelectorOption, {
433
+ isSelected: (selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.id) === agent.id,
434
+ onMouseDown: function onMouseDown(e) {
435
+ e.stopPropagation();
436
+ },
437
+ onClick: function onClick() {
438
+ setSelectedAgent(agent);
439
+ setDropdownOpen(false);
440
+ },
441
+ children: [agent.emoji ? "".concat(agent.emoji, " ") : '', agent.name]
442
+ }, agent.id);
443
+ })
444
+ })]
445
+ })
446
+ })]
447
+ }), /*#__PURE__*/_jsx(SCMRModalBodyScroll, {
448
+ children: /*#__PURE__*/_jsx(AbmTriggersSection, {
449
+ agentExternalId: (_selectedAgent$id = selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.id) !== null && _selectedAgent$id !== void 0 ? _selectedAgent$id : null,
450
+ initialForm: templateForm !== null && templateForm !== void 0 ? templateForm : undefined,
451
+ submitCount: submitCount,
452
+ onSuccess: handleCreateSuccess,
453
+ onValidityChange: setIsFormValid,
454
+ standaloneCreateOnly: true
455
+ })
456
+ })]
457
+ }), /*#__PURE__*/_jsxs(SCMRModalFooter, {
458
+ children: [/*#__PURE__*/_jsx(SCMRModalCancelButton, {
459
+ type: "button",
460
+ onClick: closePanel,
461
+ children: t('triggersSection.back')
462
+ }), !editingRoutine && /*#__PURE__*/_jsx(SCMRModalSaveButton, {
463
+ type: "button",
464
+ disabled: !isFormValid,
465
+ onClick: function onClick() {
466
+ return setSubmitCount(function (prev) {
467
+ return prev + 1;
468
+ });
469
+ },
470
+ children: t('triggersSection.save')
471
+ })]
472
+ })]
473
+ })
474
+ }), container), deleteModalChat ? /*#__PURE__*/_jsx(DeleteQuestionModal, {
475
+ action: "routine",
476
+ chat: deleteModalChat,
477
+ onClose: function onClose() {
478
+ return setRoutineToDelete(null);
479
+ },
480
+ handlers: {
481
+ handleConfirmAction: handleConfirmDelete
482
+ }
483
+ }) : null]
484
+ });
485
+ };
486
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdERPTSIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VUcmFuc2xhdGlvbiIsIk1lbnVEb3RzIiwiQ2hldnJvbkRvd24iLCJDcm9zcyIsIkFibVRyaWdnZXJzU2VjdGlvbiIsIkJhY2tkcm9wIiwiZmV0Y2hNYWlhIiwiZ2V0TXlTY2hlZHVsZXMiLCJkZWxldGVTY2hlZHVsZSIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJNQUlBSXNvbG9nbyIsIkxvYWRlciIsIm1haWFTZWN0aW9uVWkiLCJ1IiwiU0NBZ2VudFNlbGVjdG9yQ29udGFpbmVyIiwiU0NBZ2VudFNlbGVjdG9yTGlzdCIsIlNDQWdlbnRTZWxlY3RvckxvYWRpbmdSb3ciLCJTQ0FnZW50U2VsZWN0b3JPcHRpb24iLCJTQ0FnZW50U2VsZWN0b3JUcmlnZ2VyIiwiTUFJQV9TRUNUSU9OX01PREFMX1oiLCJTQ0ZpZWxkV2l0aERyb3Bkb3duWiIsIlNDTVJBY3Rpb25zUm93IiwiU0NNUkJvZHkiLCJTQ01SQ2FyZEJvZHkiLCJTQ01SQ2FyZEJ1dHRvbiIsIlNDTVJDYXJkQ29udGVudFRleHQiLCJTQ01SQ2FyZEZvb3RlciIsIlNDTVJDYXJkRnJlcXVlbmN5IiwiU0NNUkNhcmRIZWFkZXIiLCJTQ01SQ2FyZE1lbnUiLCJTQ01SQ2FyZE1lbnVJdGVtIiwiU0NNUkNhcmRNZW51SXRlbXMiLCJTQ01SQ2FyZFRpdGxlTmFtZSIsIlNDTVJDYXJkVG9wUm93IiwiU0NNUkNhcmRzT3V0ZXIiLCJTQ01SQ2FyZHNSb3ciLCJTQ01SQ29udGFpbmVyIiwiU0NNUkNyZWF0ZUJ1dHRvbiIsIlNDTVJDcmVhdGVCdXR0b25UZXh0IiwiU0NNUkVtcHR5U3RhdGVCdXR0b24iLCJTQ01SRW1wdHlTdGF0ZUNvbHVtbiIsIlNDTVJFbXB0eVN0YXRlUm9vdCIsIlNDTVJFbXB0eVN0YXRlU3VidGl0bGUiLCJTQ01SRW1wdHlTdGF0ZVRpdGxlQmxvY2siLCJTQ01SRW1wdHlTdGF0ZVRpdGxlIiwiU0NNUktlYmFiQnV0dG9uIiwiU0NNUkxvYWRXcmFwcGVyIiwiU0NNUk1vZGFsQm9keVNjcm9sbCIsIlNDTVJNb2RhbENhbmNlbEJ1dHRvbiIsIlNDTVJNb2RhbENsb3NlQnV0dG9uIiwiU0NNUk1vZGFsQ29udGVudCIsIlNDTVJNb2RhbEZvb3RlciIsIlNDTVJNb2RhbEhlYWRlciIsIlNDTVJNb2RhbFNhdmVCdXR0b24iLCJTQ01STW9kYWxUaXRsZSIsIlNDTVJNb2RhbFdyYXBwZXIiLCJTQ01SU3RhdHVzQmFkZ2UiLCJTQ01SU3VidGl0bGUiLCJTQ01SVGl0bGUiLCJTQ01SVGl0bGVJbm5lciIsIlNDTVJUaXRsZVdyYXAiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJyb3V0aW5lVG9Gb3JtU3RhdGUiLCJyb3V0aW5lIiwiX3JvdXRpbmUkbmFtZSIsIl9yb3V0aW5lJGhvdXIiLCJfcm91dGluZSRtaW51dGUiLCJfcm91dGluZSRkYXlfb2Zfd2VlayIsIm5hbWUiLCJpbnB1dCIsInNjaGVkdWxlVHlwZSIsInNjaGVkdWxlX3R5cGUiLCJob3VyIiwibWludXRlIiwiZGF5T2ZXZWVrIiwiZGF5X29mX3dlZWsiLCJ0aW1lem9uZSIsIkNoYXRBSU15Um91dGluZXMiLCJfZG9jdW1lbnQkZ2V0RWxlbWVudEIiLCJfc2VsZWN0ZWRBZ2VudCRpZCIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJyb3V0aW5lcyIsInNldFJvdXRpbmVzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwicGFuZWxPcGVuIiwic2V0UGFuZWxPcGVuIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJlZGl0aW5nUm91dGluZSIsInNldEVkaXRpbmdSb3V0aW5lIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJ0ZW1wbGF0ZUZvcm0iLCJzZXRUZW1wbGF0ZUZvcm0iLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJhZ2VudHMiLCJzZXRBZ2VudHMiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwibG9hZGluZ0FnZW50cyIsInNldExvYWRpbmdBZ2VudHMiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0Iiwic2VsZWN0ZWRBZ2VudCIsInNldFNlbGVjdGVkQWdlbnQiLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwiZHJvcGRvd25PcGVuIiwic2V0RHJvcGRvd25PcGVuIiwiX3VzZVN0YXRlMTciLCJfdXNlU3RhdGUxOCIsInN1Ym1pdENvdW50Iiwic2V0U3VibWl0Q291bnQiLCJfdXNlU3RhdGUxOSIsIl91c2VTdGF0ZTIwIiwiaXNGb3JtVmFsaWQiLCJzZXRJc0Zvcm1WYWxpZCIsIl91c2VTdGF0ZTIxIiwiX3VzZVN0YXRlMjIiLCJtZW51T3BlbkZvcklkIiwic2V0TWVudU9wZW5Gb3JJZCIsIl91c2VTdGF0ZTIzIiwiX3VzZVN0YXRlMjQiLCJyb3V0aW5lVG9EZWxldGUiLCJzZXRSb3V0aW5lVG9EZWxldGUiLCJkcm9wZG93blJlZiIsImZldGNoUm91dGluZXMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3VsdCIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJsaW1pdCIsIm9mZnNldCIsInNlbnQiLCJkYXRhIiwiZmluaXNoIiwic3RvcCIsImZldGNoQWdlbnRzIiwiX2NhbGxlZTIiLCJyZXNwb25zZSIsImFnZW50TGlzdCIsIl90MiIsIl9jb250ZXh0MiIsInBhdGgiLCJtZXRob2QiLCJqc29uIiwibWFwIiwiYSIsImlkIiwiZW1vamkiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJvcGVuQ3JlYXRlUGFuZWwiLCJvcGVuRGV0YWlsUGFuZWwiLCJfcm91dGluZSRhZ2VudF9uYW1lIiwiX3JvdXRpbmUkYWdlbnRfZW1vamkiLCJhZ2VudF9leHRlcm5hbF9pZCIsImFnZW50X25hbWUiLCJhZ2VudF9lbW9qaSIsImNsb3NlUGFuZWwiLCJjbG9zZUlmT3V0c2lkZSIsImUiLCJfZHJvcGRvd25SZWYkY3VycmVudCIsImN1cnJlbnQiLCJjb250YWlucyIsInRhcmdldCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVDbGlja091dHNpZGUiLCJoYW5kbGVDcmVhdGVTdWNjZXNzIiwiaGFuZGxlQ29uZmlybURlbGV0ZSIsIl9yZWYzIiwiX2NhbGxlZTMiLCJjaGF0IiwiX3QzIiwiX2NvbnRleHQzIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImZyZXF1ZW5jeUxhYmVsIiwic2NoZWR1bGUiLCJfbWFwJHNjaGVkdWxlJHNjaGVkdWwiLCJtaW51dGVseSIsImhvdXJseSIsImRhaWx5Iiwid2Vla2x5Iiwic3RhdHVzTGFiZWwiLCJzdGF0dXMiLCJfbWFwJHN0YXR1cyIsImFjdGl2ZSIsInBhdXNlZCIsImRpc2FibGVkIiwic2VsZWN0ZWRMYWJlbCIsImNvbmNhdCIsImRlbGV0ZU1vZGFsQ2hhdCIsInRpdGxlIiwiY29udGFpbmVyIiwiZ2V0RWxlbWVudEJ5SWQiLCJib2R5IiwiJGhhc0l0ZW1zIiwiY2hpbGRyZW4iLCIkY2FuQ3JlYXRlIiwidHlwZSIsIm9uQ2xpY2siLCJzaXplIiwiX3JvdXRpbmUkYWdlbnRfbmFtZTIiLCJldmVudCIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsIiRzdGF0dXMiLCJjcmVhdGVQb3J0YWwiLCJ6SW5kZXgiLCJyZWYiLCJvcGVuIiwiYWdlbnRBY2NlbnQiLCJ0ZXh0TXV0ZWQiLCJhZ2VudCIsImlzU2VsZWN0ZWQiLCJvbk1vdXNlRG93biIsImFnZW50RXh0ZXJuYWxJZCIsImluaXRpYWxGb3JtIiwib25TdWNjZXNzIiwib25WYWxpZGl0eUNoYW5nZSIsInN0YW5kYWxvbmVDcmVhdGVPbmx5IiwiYWN0aW9uIiwib25DbG9zZSIsImhhbmRsZXJzIiwiaGFuZGxlQ29uZmlybUFjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNeVJvdXRpbmVzL0NoYXRBSU15Um91dGluZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBNZW51RG90cyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL01lbnVEb3RzJ1xuaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGV2cm9uRG93bidcbmltcG9ydCB7IENyb3NzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3MnXG5pbXBvcnQgeyBBYm1UcmlnZ2Vyc1NlY3Rpb24gfSBmcm9tICcuLi9BYm1TZWN0aW9uL0FibVRyaWdnZXJzU2VjdGlvbi9BYm1UcmlnZ2Vyc1NlY3Rpb24nXG5pbXBvcnQgdHlwZSB7IFRyaWdnZXJGb3JtU3RhdGUgfSBmcm9tICcuLi9BYm1TZWN0aW9uL0FibVRyaWdnZXJzU2VjdGlvbi9BYm1UcmlnZ2Vyc1NlY3Rpb24uaW50ZXJmYWNlJ1xuaW1wb3J0IHsgQmFja2Ryb3AgfSBmcm9tICcuLi8uLi9hdG9tcy9CYWNrZHJvcCdcbmltcG9ydCB7IGZldGNoTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvY2xpZW50J1xuaW1wb3J0IHsgZ2V0TXlTY2hlZHVsZXMsIGRlbGV0ZVNjaGVkdWxlLCB0eXBlIFNjaGVkdWxlV2l0aEFnZW50UmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NjaGVkdWxlcydcbmltcG9ydCB7IERlbGV0ZVF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvRGVsZXRlUXVlc3Rpb25Nb2RhbC9EZWxldGVRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHsgTUFJQUlzb2xvZ28gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IG1haWFTZWN0aW9uVWkgYXMgdSB9IGZyb20gJy4uL21haWFTZWN0aW9uVWlUb2tlbnMnXG5pbXBvcnQge1xuICBTQ0FnZW50U2VsZWN0b3JDb250YWluZXIsXG4gIFNDQWdlbnRTZWxlY3Rvckxpc3QsXG4gIFNDQWdlbnRTZWxlY3RvckxvYWRpbmdSb3csXG4gIFNDQWdlbnRTZWxlY3Rvck9wdGlvbixcbiAgU0NBZ2VudFNlbGVjdG9yVHJpZ2dlcixcbiAgTUFJQV9TRUNUSU9OX01PREFMX1osXG4gIFNDRmllbGRXaXRoRHJvcGRvd25aLFxufSBmcm9tICcuLi9tYWlhU2VjdGlvbk1vZGFsU3R5bGVzJ1xuaW1wb3J0IHtcbiAgU0NNUkFjdGlvbnNSb3csXG4gIFNDTVJCb2R5LFxuICBTQ01SQ2FyZEJvZHksXG4gIFNDTVJDYXJkQnV0dG9uLFxuICBTQ01SQ2FyZENvbnRlbnRUZXh0LFxuICBTQ01SQ2FyZEZvb3RlcixcbiAgU0NNUkNhcmRGcmVxdWVuY3ksXG4gIFNDTVJDYXJkSGVhZGVyLFxuICBTQ01SQ2FyZE1lbnUsXG4gIFNDTVJDYXJkTWVudUl0ZW0sXG4gIFNDTVJDYXJkTWVudUl0ZW1zLFxuICBTQ01SQ2FyZFRpdGxlTmFtZSxcbiAgU0NNUkNhcmRUb3BSb3csXG4gIFNDTVJDYXJkc091dGVyLFxuICBTQ01SQ2FyZHNSb3csXG4gIFNDTVJDb250YWluZXIsXG4gIFNDTVJDcmVhdGVCdXR0b24sXG4gIFNDTVJDcmVhdGVCdXR0b25UZXh0LFxuICBTQ01SRW1wdHlTdGF0ZUJ1dHRvbixcbiAgU0NNUkVtcHR5U3RhdGVDb2x1bW4sXG4gIFNDTVJFbXB0eVN0YXRlUm9vdCxcbiAgU0NNUkVtcHR5U3RhdGVTdWJ0aXRsZSxcbiAgU0NNUkVtcHR5U3RhdGVUaXRsZUJsb2NrLFxuICBTQ01SRW1wdHlTdGF0ZVRpdGxlLFxuICBTQ01SS2ViYWJCdXR0b24sXG4gIFNDTVJMb2FkV3JhcHBlcixcbiAgU0NNUk1vZGFsQm9keVNjcm9sbCxcbiAgU0NNUk1vZGFsQ2FuY2VsQnV0dG9uLFxuICBTQ01STW9kYWxDbG9zZUJ1dHRvbixcbiAgU0NNUk1vZGFsQ29udGVudCxcbiAgU0NNUk1vZGFsRm9vdGVyLFxuICBTQ01STW9kYWxIZWFkZXIsXG4gIFNDTVJNb2RhbFNhdmVCdXR0b24sXG4gIFNDTVJNb2RhbFRpdGxlLFxuICBTQ01STW9kYWxXcmFwcGVyLFxuICBTQ01SU3RhdHVzQmFkZ2UsXG4gIFNDTVJTdWJ0aXRsZSxcbiAgU0NNUlRpdGxlLFxuICBTQ01SVGl0bGVJbm5lcixcbiAgU0NNUlRpdGxlV3JhcCxcbn0gZnJvbSAnLi9DaGF0QUlNeVJvdXRpbmVzLnN0eWxlcydcblxudHlwZSBBZ2VudE9wdGlvbiA9IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBlbW9qaTogc3RyaW5nIH1cblxuY29uc3Qgcm91dGluZVRvRm9ybVN0YXRlID0gKHJvdXRpbmU6IFNjaGVkdWxlV2l0aEFnZW50UmVzcG9uc2UpOiBQYXJ0aWFsPFRyaWdnZXJGb3JtU3RhdGU+ID0+ICh7XG4gIG5hbWU6IHJvdXRpbmUubmFtZSA/PyAnJyxcbiAgaW5wdXQ6IHJvdXRpbmUuaW5wdXQsXG4gIHNjaGVkdWxlVHlwZTogcm91dGluZS5zY2hlZHVsZV90eXBlLFxuICBob3VyOiByb3V0aW5lLmhvdXIgPz8gMTIsXG4gIG1pbnV0ZTogcm91dGluZS5taW51dGUgPz8gMCxcbiAgZGF5T2ZXZWVrOiByb3V0aW5lLmRheV9vZl93ZWVrID8/IDAsXG4gIHRpbWV6b25lOiByb3V0aW5lLnRpbWV6b25lLFxufSlcblxuZXhwb3J0IGNvbnN0IENoYXRBSU15Um91dGluZXMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oJ2FibV9hZ2VudF9zZWN0aW9uJylcbiAgY29uc3QgW3JvdXRpbmVzLCBzZXRSb3V0aW5lc10gPSB1c2VTdGF0ZTxTY2hlZHVsZVdpdGhBZ2VudFJlc3BvbnNlW10+KFtdKVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3BhbmVsT3Blbiwgc2V0UGFuZWxPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZWRpdGluZ1JvdXRpbmUsIHNldEVkaXRpbmdSb3V0aW5lXSA9IHVzZVN0YXRlPFNjaGVkdWxlV2l0aEFnZW50UmVzcG9uc2UgfCBudWxsPihudWxsKVxuICBjb25zdCBbdGVtcGxhdGVGb3JtLCBzZXRUZW1wbGF0ZUZvcm1dID0gdXNlU3RhdGU8UGFydGlhbDxUcmlnZ2VyRm9ybVN0YXRlPiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFthZ2VudHMsIHNldEFnZW50c10gPSB1c2VTdGF0ZTxBZ2VudE9wdGlvbltdPihbXSlcbiAgY29uc3QgW2xvYWRpbmdBZ2VudHMsIHNldExvYWRpbmdBZ2VudHNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZEFnZW50LCBzZXRTZWxlY3RlZEFnZW50XSA9IHVzZVN0YXRlPEFnZW50T3B0aW9uIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2Ryb3Bkb3duT3Blbiwgc2V0RHJvcGRvd25PcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc3VibWl0Q291bnQsIHNldFN1Ym1pdENvdW50XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtpc0Zvcm1WYWxpZCwgc2V0SXNGb3JtVmFsaWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFttZW51T3BlbkZvcklkLCBzZXRNZW51T3BlbkZvcklkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtyb3V0aW5lVG9EZWxldGUsIHNldFJvdXRpbmVUb0RlbGV0ZV0gPSB1c2VTdGF0ZTxTY2hlZHVsZVdpdGhBZ2VudFJlc3BvbnNlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgZHJvcGRvd25SZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG5cbiAgY29uc3QgZmV0Y2hSb3V0aW5lcyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldE15U2NoZWR1bGVzKHsgbGltaXQ6IDEwMCwgb2Zmc2V0OiAwIH0pXG4gICAgICBzZXRSb3V0aW5lcyhyZXN1bHQuZGF0YSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHNpbGVudGx5IGZhaWxcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGZldGNoQWdlbnRzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldExvYWRpbmdBZ2VudHModHJ1ZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgICAgICBwYXRoOiAnYWdlbnRzP2FnZW50X3R5cGU9Y3VzdG9tJmxpbWl0PTEwMCZvZmZzZXQ9MCcsXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB9KVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgY29uc3QgYWdlbnRMaXN0OiBBZ2VudE9wdGlvbltdID0gKGRhdGEuZGF0YSB8fCBbXSkubWFwKChhOiBhbnkpID0+ICh7XG4gICAgICAgIGlkOiBhLmlkLFxuICAgICAgICBuYW1lOiBhLm5hbWUsXG4gICAgICAgIGVtb2ppOiBhLmVtb2ppIHx8ICcnLFxuICAgICAgfSkpXG4gICAgICBzZXRBZ2VudHMoYWdlbnRMaXN0KVxuICAgICAgaWYgKGFnZW50TGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWRBZ2VudChhZ2VudExpc3RbMF0pXG4gICAgICAgIHNldERyb3Bkb3duT3BlbihmYWxzZSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHNpbGVudGx5IGZhaWxcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZ0FnZW50cyhmYWxzZSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZmV0Y2hSb3V0aW5lcygpXG4gIH0sIFtmZXRjaFJvdXRpbmVzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcGFuZWxPcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIHNldERyb3Bkb3duT3BlbihmYWxzZSlcbiAgICBmZXRjaEFnZW50cygpXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9LCBbcGFuZWxPcGVuLCBmZXRjaEFnZW50c10pXG5cbiAgY29uc3Qgb3BlbkNyZWF0ZVBhbmVsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEVkaXRpbmdSb3V0aW5lKG51bGwpXG4gICAgc2V0VGVtcGxhdGVGb3JtKG51bGwpXG4gICAgc2V0U2VsZWN0ZWRBZ2VudChudWxsKVxuICAgIHNldElzRm9ybVZhbGlkKGZhbHNlKVxuICAgIHNldFN1Ym1pdENvdW50KDApXG4gICAgc2V0UGFuZWxPcGVuKHRydWUpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IG9wZW5EZXRhaWxQYW5lbCA9IHVzZUNhbGxiYWNrKChyb3V0aW5lOiBTY2hlZHVsZVdpdGhBZ2VudFJlc3BvbnNlKSA9PiB7XG4gICAgc2V0RWRpdGluZ1JvdXRpbmUocm91dGluZSlcbiAgICBzZXRUZW1wbGF0ZUZvcm0ocm91dGluZVRvRm9ybVN0YXRlKHJvdXRpbmUpKVxuICAgIHNldFNlbGVjdGVkQWdlbnQoXG4gICAgICByb3V0aW5lLmFnZW50X2V4dGVybmFsX2lkXG4gICAgICAgID8geyBpZDogcm91dGluZS5hZ2VudF9leHRlcm5hbF9pZCwgbmFtZTogcm91dGluZS5hZ2VudF9uYW1lID8/ICcnLCBlbW9qaTogcm91dGluZS5hZ2VudF9lbW9qaSA/PyAnJyB9XG4gICAgICAgIDogbnVsbFxuICAgIClcbiAgICBzZXRJc0Zvcm1WYWxpZChmYWxzZSlcbiAgICBzZXRTdWJtaXRDb3VudCgwKVxuICAgIHNldFBhbmVsT3Blbih0cnVlKVxuICB9LCBbXSlcblxuICBjb25zdCBjbG9zZVBhbmVsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFBhbmVsT3BlbihmYWxzZSlcbiAgICBzZXRFZGl0aW5nUm91dGluZShudWxsKVxuICAgIHNldFRlbXBsYXRlRm9ybShudWxsKVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZHJvcGRvd25PcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIGNvbnN0IGNsb3NlSWZPdXRzaWRlID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghZHJvcGRvd25SZWYuY3VycmVudD8uY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHNldERyb3Bkb3duT3BlbihmYWxzZSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZUlmT3V0c2lkZSlcbiAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjbG9zZUlmT3V0c2lkZSlcbiAgfSwgW2Ryb3Bkb3duT3Blbl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoKSA9PiB7XG4gICAgICBpZiAobWVudU9wZW5Gb3JJZCkgc2V0TWVudU9wZW5Gb3JJZChudWxsKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGlja091dHNpZGUpXG4gIH0sIFttZW51T3BlbkZvcklkXSlcblxuICBjb25zdCBoYW5kbGVDcmVhdGVTdWNjZXNzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsb3NlUGFuZWwoKVxuICAgIHNldFNlbGVjdGVkQWdlbnQobnVsbClcbiAgICBmZXRjaFJvdXRpbmVzKClcbiAgfSwgW2Nsb3NlUGFuZWwsIGZldGNoUm91dGluZXNdKVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1EZWxldGUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoY2hhdDogeyBpZDogc3RyaW5nIH0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGRlbGV0ZVNjaGVkdWxlKGNoYXQuaWQpXG4gICAgICAgIHNldFJvdXRpbmVUb0RlbGV0ZShudWxsKVxuICAgICAgICBmZXRjaFJvdXRpbmVzKClcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBzaWxlbnRseSBmYWlsXG4gICAgICB9XG4gICAgfSxcbiAgICBbZmV0Y2hSb3V0aW5lc11cbiAgKVxuXG4gIGNvbnN0IGZyZXF1ZW5jeUxhYmVsID0gKHNjaGVkdWxlOiBTY2hlZHVsZVdpdGhBZ2VudFJlc3BvbnNlKSA9PiB7XG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgbWludXRlbHk6IHQoJ3RyaWdnZXJzU2VjdGlvbi5mcmVxdWVuY2llcy5taW51dGVseScpLFxuICAgICAgaG91cmx5OiB0KCd0cmlnZ2Vyc1NlY3Rpb24uZnJlcXVlbmNpZXMuaG91cmx5JyksXG4gICAgICBkYWlseTogdCgndHJpZ2dlcnNTZWN0aW9uLmZyZXF1ZW5jaWVzLmRhaWx5JyksXG4gICAgICB3ZWVrbHk6IHQoJ3RyaWdnZXJzU2VjdGlvbi5mcmVxdWVuY2llcy53ZWVrbHknKSxcbiAgICB9XG4gICAgcmV0dXJuIG1hcFtzY2hlZHVsZS5zY2hlZHVsZV90eXBlXSA/PyBzY2hlZHVsZS5zY2hlZHVsZV90eXBlXG4gIH1cblxuICBjb25zdCBzdGF0dXNMYWJlbCA9IChzdGF0dXM6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIGFjdGl2ZTogdCgndHJpZ2dlcnNTZWN0aW9uLnN0YXR1cy5hY3RpdmUnKSxcbiAgICAgIHBhdXNlZDogdCgndHJpZ2dlcnNTZWN0aW9uLnN0YXR1cy5wYXVzZWQnKSxcbiAgICAgIGRpc2FibGVkOiB0KCd0cmlnZ2Vyc1NlY3Rpb24uc3RhdHVzLmRpc2FibGVkJyksXG4gICAgfVxuICAgIHJldHVybiBtYXBbc3RhdHVzXSA/PyBzdGF0dXNcbiAgfVxuXG4gIGNvbnN0IHNlbGVjdGVkTGFiZWwgPSBzZWxlY3RlZEFnZW50XG4gICAgPyBgJHtzZWxlY3RlZEFnZW50LmVtb2ppID8gYCR7c2VsZWN0ZWRBZ2VudC5lbW9qaX0gYCA6ICcnfSR7c2VsZWN0ZWRBZ2VudC5uYW1lfWBcbiAgICA6IHQoJ3RyaWdnZXJzU2VjdGlvbi5zZWxlY3RBZ2VudCcpXG5cbiAgY29uc3QgZGVsZXRlTW9kYWxDaGF0ID0gcm91dGluZVRvRGVsZXRlXG4gICAgPyB7IHRpdGxlOiByb3V0aW5lVG9EZWxldGUubmFtZSB8fCB0KCd0cmlnZ2Vyc1NlY3Rpb24udW50aXRsZWRSb3V0aW5lJyksIGlkOiByb3V0aW5lVG9EZWxldGUuaWQgfVxuICAgIDogbnVsbFxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1yb290LWFjdGlvbnMnKSA/PyBkb2N1bWVudC5ib2R5XG5cbiAgcmV0dXJuIChcbiAgICA8U0NNUkNvbnRhaW5lciAkaGFzSXRlbXM9eyEhcm91dGluZXMubGVuZ3RofT5cbiAgICAgIDxNQUlBSXNvbG9nbyAvPlxuXG4gICAgICA8U0NNUkJvZHkgJGNhbkNyZWF0ZT5cbiAgICAgICAge3JvdXRpbmVzLmxlbmd0aCA/IChcbiAgICAgICAgICA8U0NNUlRpdGxlV3JhcD5cbiAgICAgICAgICAgIDxTQ01SVGl0bGVJbm5lcj5cbiAgICAgICAgICAgICAgPFNDTVJUaXRsZT57dCgndHJpZ2dlcnNTZWN0aW9uLm15Um91dGluZXNUaXRsZScpfTwvU0NNUlRpdGxlPlxuICAgICAgICAgICAgICA8U0NNUlN1YnRpdGxlPnt0KCd0cmlnZ2Vyc1NlY3Rpb24ubXlSb3V0aW5lc1N1YnRpdGxlJyl9PC9TQ01SU3VidGl0bGU+XG4gICAgICAgICAgICA8L1NDTVJUaXRsZUlubmVyPlxuICAgICAgICAgICAgPFNDTVJBY3Rpb25zUm93PlxuICAgICAgICAgICAgICA8U0NNUkNyZWF0ZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17b3BlbkNyZWF0ZVBhbmVsfT5cbiAgICAgICAgICAgICAgICA8U0NNUkNyZWF0ZUJ1dHRvblRleHQ+e3QoJ3RyaWdnZXJzU2VjdGlvbi5uZXdSb3V0aW5lJyl9PC9TQ01SQ3JlYXRlQnV0dG9uVGV4dD5cbiAgICAgICAgICAgICAgPC9TQ01SQ3JlYXRlQnV0dG9uPlxuICAgICAgICAgICAgPC9TQ01SQWN0aW9uc1Jvdz5cbiAgICAgICAgICA8L1NDTVJUaXRsZVdyYXA+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgIDxTQ01STG9hZFdyYXBwZXI+XG4gICAgICAgICAgICA8TG9hZGVyIHNpemU9XCJzbWFsbFwiIC8+XG4gICAgICAgICAgPC9TQ01STG9hZFdyYXBwZXI+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIHshbG9hZGluZyAmJiByb3V0aW5lcy5sZW5ndGggPyAoXG4gICAgICAgICAgPFNDTVJDYXJkc091dGVyPlxuICAgICAgICAgICAgPFNDTVJDYXJkc1Jvdz5cbiAgICAgICAgICAgICAge3JvdXRpbmVzLm1hcChyb3V0aW5lID0+IChcbiAgICAgICAgICAgICAgICA8U0NNUkNhcmRCdXR0b24ga2V5PXtyb3V0aW5lLmlkfSB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gb3BlbkRldGFpbFBhbmVsKHJvdXRpbmUpfT5cbiAgICAgICAgICAgICAgICAgIDxTQ01SQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDTVJDYXJkVG9wUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01SQ2FyZFRpdGxlTmFtZT57cm91dGluZS5uYW1lIHx8IHQoJ3RyaWdnZXJzU2VjdGlvbi51bnRpdGxlZFJvdXRpbmUnKX08L1NDTVJDYXJkVGl0bGVOYW1lPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01SS2ViYWJCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgndHJpZ2dlcnNTZWN0aW9uLmRlbGV0ZVJvdXRpbmUnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNZW51T3BlbkZvcklkKHByZXYgPT4gKHByZXYgPT09IHJvdXRpbmUuaWQgPyBudWxsIDogcm91dGluZS5pZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNZW51RG90cyBjb2xvcj1cIiM5OTlcIiB3aWR0aD17MTV9IGhlaWdodD17MTV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ01SS2ViYWJCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNUkNhcmRUb3BSb3c+XG4gICAgICAgICAgICAgICAgICA8L1NDTVJDYXJkSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFNDTVJDYXJkQm9keT5cbiAgICAgICAgICAgICAgICAgICAgPFNDTVJDYXJkQ29udGVudFRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAge3JvdXRpbmUuYWdlbnRfZW1vamkgfHwgcm91dGluZS5hZ2VudF9uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGAke3JvdXRpbmUuYWdlbnRfZW1vamkgPyBgJHtyb3V0aW5lLmFnZW50X2Vtb2ppfSBgIDogJyd9JHtyb3V0aW5lLmFnZW50X25hbWUgPz8gJyd9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01SQ2FyZENvbnRlbnRUZXh0PlxuICAgICAgICAgICAgICAgICAgICA8U0NNUkNhcmRGb290ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTVJDYXJkRnJlcXVlbmN5PntmcmVxdWVuY3lMYWJlbChyb3V0aW5lKX08L1NDTVJDYXJkRnJlcXVlbmN5PlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01SU3RhdHVzQmFkZ2UgJHN0YXR1cz17cm91dGluZS5zdGF0dXN9PntzdGF0dXNMYWJlbChyb3V0aW5lLnN0YXR1cyl9PC9TQ01SU3RhdHVzQmFkZ2U+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNUkNhcmRGb290ZXI+XG4gICAgICAgICAgICAgICAgICA8L1NDTVJDYXJkQm9keT5cbiAgICAgICAgICAgICAgICAgIHttZW51T3BlbkZvcklkID09PSByb3V0aW5lLmlkID8gKFxuICAgICAgICAgICAgICAgICAgICA8U0NNUkNhcmRNZW51XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTVJDYXJkTWVudUl0ZW1zPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNDTVJDYXJkTWVudUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSb3V0aW5lVG9EZWxldGUocm91dGluZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNZW51T3BlbkZvcklkKG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCd0cmlnZ2Vyc1NlY3Rpb24uZGVsZXRlUm91dGluZScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01SQ2FyZE1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NNUkNhcmRNZW51SXRlbXM+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNUkNhcmRNZW51PlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9TQ01SQ2FyZEJ1dHRvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1NDTVJDYXJkc1Jvdz5cbiAgICAgICAgICA8L1NDTVJDYXJkc091dGVyPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7IWxvYWRpbmcgJiYgIXJvdXRpbmVzLmxlbmd0aCA/IChcbiAgICAgICAgICA8U0NNUkVtcHR5U3RhdGVSb290PlxuICAgICAgICAgICAgPFNDTVJFbXB0eVN0YXRlQ29sdW1uPlxuICAgICAgICAgICAgICA8U0NNUkVtcHR5U3RhdGVUaXRsZUJsb2NrPlxuICAgICAgICAgICAgICAgIDxTQ01SRW1wdHlTdGF0ZVRpdGxlPnt0KCd0cmlnZ2Vyc1NlY3Rpb24ubXlSb3V0aW5lc0VtcHR5VGl0bGUnKX08L1NDTVJFbXB0eVN0YXRlVGl0bGU+XG4gICAgICAgICAgICAgICAgPFNDTVJFbXB0eVN0YXRlU3VidGl0bGU+e3QoJ3RyaWdnZXJzU2VjdGlvbi5teVJvdXRpbmVzRW1wdHlEZXNjcmlwdGlvbicpfTwvU0NNUkVtcHR5U3RhdGVTdWJ0aXRsZT5cbiAgICAgICAgICAgICAgPC9TQ01SRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgICAgICA8L1NDTVJFbXB0eVN0YXRlQ29sdW1uPlxuICAgICAgICAgICAgPFNDTVJFbXB0eVN0YXRlQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtvcGVuQ3JlYXRlUGFuZWx9PlxuICAgICAgICAgICAgICB7dCgndHJpZ2dlcnNTZWN0aW9uLm5ld1JvdXRpbmUnKX1cbiAgICAgICAgICAgIDwvU0NNUkVtcHR5U3RhdGVCdXR0b24+XG4gICAgICAgICAgPC9TQ01SRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9TQ01SQm9keT5cblxuICAgICAge3BhbmVsT3BlbiAmJlxuICAgICAgICBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICAgICAgPEJhY2tkcm9wIG9uQ2xpY2s9e2Nsb3NlUGFuZWx9IHpJbmRleD17TUFJQV9TRUNUSU9OX01PREFMX1p9PlxuICAgICAgICAgICAgPFNDTVJNb2RhbFdyYXBwZXIgb25DbGljaz17ZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfT5cbiAgICAgICAgICAgICAgPFNDTVJNb2RhbEhlYWRlcj5cbiAgICAgICAgICAgICAgICA8U0NNUk1vZGFsVGl0bGU+XG4gICAgICAgICAgICAgICAgICB7ZWRpdGluZ1JvdXRpbmUgPyB0KCd0cmlnZ2Vyc1NlY3Rpb24ucm91dGluZURldGFpbCcpIDogdCgndHJpZ2dlcnNTZWN0aW9uLm5ld1JvdXRpbmUnKX1cbiAgICAgICAgICAgICAgICA8L1NDTVJNb2RhbFRpdGxlPlxuICAgICAgICAgICAgICAgIDxTQ01STW9kYWxDbG9zZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD17dCgndHJpZ2dlcnNTZWN0aW9uLmJhY2snKX0gb25DbGljaz17Y2xvc2VQYW5lbH0+XG4gICAgICAgICAgICAgICAgICA8Q3Jvc3MgY29sb3I9XCIjYTZhNmE2XCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgIDwvU0NNUk1vZGFsQ2xvc2VCdXR0b24+XG4gICAgICAgICAgICAgIDwvU0NNUk1vZGFsSGVhZGVyPlxuICAgICAgICAgICAgICA8U0NNUk1vZGFsQ29udGVudD5cbiAgICAgICAgICAgICAgICA8U0NGaWVsZFdpdGhEcm9wZG93blo+XG4gICAgICAgICAgICAgICAgICB7dCgndHJpZ2dlcnNTZWN0aW9uLmFnZW50Jyl9XG4gICAgICAgICAgICAgICAgICA8U0NBZ2VudFNlbGVjdG9yQ29udGFpbmVyIHJlZj17ZHJvcGRvd25SZWYgYXMgYW55fT5cbiAgICAgICAgICAgICAgICAgICAge2VkaXRpbmdSb3V0aW5lID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FnZW50U2VsZWN0b3JUcmlnZ2VyIG9wZW49e2ZhbHNlfSB0eXBlPVwiYnV0dG9uXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57c2VsZWN0ZWRMYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FnZW50U2VsZWN0b3JUcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U0NBZ2VudFNlbGVjdG9yVHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXtkcm9wZG93bk9wZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldERyb3Bkb3duT3BlbihwcmV2ID0+ICFwcmV2KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntsb2FkaW5nQWdlbnRzID8gdCgndHJpZ2dlcnNTZWN0aW9uLmxvYWRpbmdBZ2VudHMnKSA6IHNlbGVjdGVkTGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gd2lkdGg9XCIxNHB4XCIgaGVpZ2h0PVwiMTRweFwiIGNvbG9yPXtkcm9wZG93bk9wZW4gPyB1LmFnZW50QWNjZW50IDogdS50ZXh0TXV0ZWR9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NDQWdlbnRTZWxlY3RvclRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZHJvcGRvd25PcGVuICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDQWdlbnRTZWxlY3Rvckxpc3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2xvYWRpbmdBZ2VudHMgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NBZ2VudFNlbGVjdG9yTG9hZGluZ1Jvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ3RyaWdnZXJzU2VjdGlvbi5sb2FkaW5nQWdlbnRzJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NDQWdlbnRTZWxlY3RvckxvYWRpbmdSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50cy5tYXAoYWdlbnQgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NBZ2VudFNlbGVjdG9yT3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXthZ2VudC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZEFnZW50Py5pZCA9PT0gYWdlbnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZURvd249e2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRBZ2VudChhZ2VudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldERyb3Bkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FnZW50LmVtb2ppID8gYCR7YWdlbnQuZW1vaml9IGAgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YWdlbnQubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ0FnZW50U2VsZWN0b3JPcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NBZ2VudFNlbGVjdG9yTGlzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L1NDQWdlbnRTZWxlY3RvckNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L1NDRmllbGRXaXRoRHJvcGRvd25aPlxuICAgICAgICAgICAgICAgIDxTQ01STW9kYWxCb2R5U2Nyb2xsPlxuICAgICAgICAgICAgICAgICAgPEFibVRyaWdnZXJzU2VjdGlvblxuICAgICAgICAgICAgICAgICAgICBhZ2VudEV4dGVybmFsSWQ9e3NlbGVjdGVkQWdlbnQ/LmlkID8/IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGb3JtPXt0ZW1wbGF0ZUZvcm0gPz8gdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICBzdWJtaXRDb3VudD17c3VibWl0Q291bnR9XG4gICAgICAgICAgICAgICAgICAgIG9uU3VjY2Vzcz17aGFuZGxlQ3JlYXRlU3VjY2Vzc31cbiAgICAgICAgICAgICAgICAgICAgb25WYWxpZGl0eUNoYW5nZT17c2V0SXNGb3JtVmFsaWR9XG4gICAgICAgICAgICAgICAgICAgIHN0YW5kYWxvbmVDcmVhdGVPbmx5XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvU0NNUk1vZGFsQm9keVNjcm9sbD5cbiAgICAgICAgICAgICAgPC9TQ01STW9kYWxDb250ZW50PlxuICAgICAgICAgICAgICA8U0NNUk1vZGFsRm9vdGVyPlxuICAgICAgICAgICAgICAgIDxTQ01STW9kYWxDYW5jZWxCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2Nsb3NlUGFuZWx9PlxuICAgICAgICAgICAgICAgICAge3QoJ3RyaWdnZXJzU2VjdGlvbi5iYWNrJyl9XG4gICAgICAgICAgICAgICAgPC9TQ01STW9kYWxDYW5jZWxCdXR0b24+XG4gICAgICAgICAgICAgICAgeyFlZGl0aW5nUm91dGluZSAmJiAoXG4gICAgICAgICAgICAgICAgICA8U0NNUk1vZGFsU2F2ZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFpc0Zvcm1WYWxpZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U3VibWl0Q291bnQocHJldiA9PiBwcmV2ICsgMSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt0KCd0cmlnZ2Vyc1NlY3Rpb24uc2F2ZScpfVxuICAgICAgICAgICAgICAgICAgPC9TQ01STW9kYWxTYXZlQnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvU0NNUk1vZGFsRm9vdGVyPlxuICAgICAgICAgICAgPC9TQ01STW9kYWxXcmFwcGVyPlxuICAgICAgICAgIDwvQmFja2Ryb3A+LFxuICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICApfVxuXG4gICAgICB7ZGVsZXRlTW9kYWxDaGF0ID8gKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIGFjdGlvbj1cInJvdXRpbmVcIlxuICAgICAgICAgIGNoYXQ9e2RlbGV0ZU1vZGFsQ2hhdH1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRSb3V0aW5lVG9EZWxldGUobnVsbCl9XG4gICAgICAgICAgaGFuZGxlcnM9e3sgaGFuZGxlQ29uZmlybUFjdGlvbjogaGFuZGxlQ29uZmlybURlbGV0ZSB9fVxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9TQ01SQ29udGFpbmVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0EsT0FBT0EsUUFBUSxNQUFNLFdBQVc7QUFDaEMsU0FBU0MsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDaEUsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsUUFBUSxRQUFRLDJDQUEyQztBQUNwRSxTQUFTQyxXQUFXLFFBQVEsOENBQThDO0FBQzFFLFNBQVNDLEtBQUssUUFB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