@projectcor/maia-components 2.11.40-4 → 2.11.40-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 (82) hide show
  1. package/lib/App.js +11 -22
  2. package/lib/components/atoms/MAIAInput/MAIAInput.js +321 -238
  3. package/lib/components/atoms/MAIAInput/styles.js +46 -75
  4. package/lib/components/atoms/icons/index.js +1 -2
  5. package/lib/components/index.js +1 -2
  6. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +4 -8
  7. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +3 -31
  8. package/lib/components/molecules/ChatAIMessages/newStyles.js +2 -5
  9. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +71 -9
  10. package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -5
  11. package/lib/components/molecules/Sidebar/Sidebar.js +5 -9
  12. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -6
  13. package/lib/components/organisms/ChatAI/ChatAI.js +37 -4
  14. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +2 -5
  15. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +3 -6
  16. package/lib/constants/config.js +1 -3
  17. package/lib/context/cor-user.js +1 -1
  18. package/lib/context/global-context.js +5 -1
  19. package/lib/dev/Providers.js +6 -11
  20. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  21. package/lib/hooks/useChatManager/useChatManager.js +24 -22
  22. package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
  23. package/lib/hooks/useChatMessages/useChatMessages.js +14 -30
  24. package/lib/hooks/useClientSearch.js +2 -3
  25. package/lib/hooks/useEvent.js +1 -6
  26. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -6
  27. package/lib/hooks/useProjectSearch.js +2 -3
  28. package/lib/hooks/useRecentClientsSearch.js +2 -3
  29. package/lib/hooks/useTaskPanel.js +10 -3
  30. package/lib/lang/br/index.js +1 -24
  31. package/lib/lang/en/index.js +1 -24
  32. package/lib/lang/es/index.js +1 -24
  33. package/lib/lang/fr/index.js +1 -23
  34. package/lib/services/maia/Chats/getChatMessages.js +4 -29
  35. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +8 -4
  36. package/lib/services/maia/Orchestrator/orchestrator.js +11 -8
  37. package/lib/services/maia/RecentProjects/getRecentProjects.js +4 -12
  38. package/lib/services/utils/mapChatMessages.js +5 -12
  39. package/lib/types/Chat.js +1 -1
  40. package/lib/types/agent.js +1 -1
  41. package/package.json +1 -1
  42. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +0 -36
  43. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +0 -181
  44. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +0 -39
  45. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +0 -324
  46. package/lib/components/atoms/ContextMentionChip/index.js +0 -4
  47. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +0 -195
  48. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +0 -6
  49. package/lib/components/atoms/ContextMentionEditor/index.js +0 -2
  50. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +0 -283
  51. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +0 -111
  52. package/lib/components/atoms/ContextMentionItem/index.js +0 -2
  53. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +0 -142
  54. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +0 -75
  55. package/lib/components/atoms/ContextMentionPopover/index.js +0 -3
  56. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +0 -269
  57. package/lib/components/atoms/icons/NotionIcon.js +0 -36
  58. package/lib/components/atoms/icons/SubtaskIcon.js +0 -36
  59. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +0 -68
  60. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +0 -6
  61. package/lib/components/molecules/ContextMentionInput/index.js +0 -2
  62. package/lib/constants/taskLinkIcon.js +0 -6
  63. package/lib/dev/DevContextMentionInput.js +0 -65
  64. package/lib/hooks/useCaretPosition.js +0 -35
  65. package/lib/hooks/useContextMentions.js +0 -270
  66. package/lib/hooks/useEntitySearch.js +0 -545
  67. package/lib/hooks/useMentionAllowedTypes.js +0 -103
  68. package/lib/hooks/useMentionPopover.js +0 -320
  69. package/lib/hooks/useTextOverflowEllipsisTooltip.js +0 -35
  70. package/lib/services/maia/RecentTasks/getRecentTasks.js +0 -54
  71. package/lib/services/maia/RecentTasks/index.js +0 -6
  72. package/lib/services/maia/RecentUsers/getRecentUsers.js +0 -59
  73. package/lib/services/maia/RecentUsers/index.js +0 -6
  74. package/lib/services/query/entitySearchQuery.js +0 -16
  75. package/lib/services/query/usersDirectoryQuery.js +0 -19
  76. package/lib/types/contextMention.js +0 -37
  77. package/lib/utils/contextMentionIcons.js +0 -115
  78. package/lib/utils/contextMentionLabel.js +0 -4
  79. package/lib/utils/contextMentionTypeLabel.js +0 -17
  80. package/lib/utils/maiaStreamdownRehypePlugins.js +0 -27
  81. package/lib/utils/openTaskInCorPanel.js +0 -18
  82. package/lib/utils/renderContextMentions.js +0 -293
@@ -1,545 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
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; }
5
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
- import _regeneratorRuntime from "@babel/runtime/regenerator";
7
- import { useLazyQuery } from '@apollo/client';
8
- import { useCallback, useEffect, useMemo, useState } from 'react';
9
- import { getRecentClients } from '../services/maia/RecentClients/getRecentClients';
10
- import { getRecentProjects } from '../services/maia/RecentProjects/getRecentProjects';
11
- import { getRecentTasks } from '../services/maia/RecentTasks/getRecentTasks';
12
- import { useUser } from '../context/cor-user';
13
- import { SEARCH_ENTITIES } from '../services/query/entitySearchQuery';
14
- import { SEARCH_CLIENTS } from '../services/query/ClientSearchQuery';
15
- import { USERS_DIRECTORY } from '../services/query/usersDirectoryQuery';
16
- import { SEARCH_QUERY_DEBOUNCE_MS } from '../constants/config';
17
- import { useDebounce } from './useDebounce';
18
- import { useT } from './useT';
19
-
20
- /**
21
- * Restringe los resultados al `clientId`/`projectId` del agente activo.
22
- * Cuando el agente está scopeado a un client/project, tanto los recents como
23
- * el search deben filtrar por ese contexto. Si el backend no entiende algún
24
- * campo lo ignora y se cae al comportamiento global.
25
- */
26
-
27
- var BASE_FILTERS_BY_TYPE = {
28
- project: {
29
- project: 'true',
30
- archived: 'all'
31
- },
32
- task: {
33
- task: 'true',
34
- archived: 'false'
35
- }
36
- };
37
-
38
- /**
39
- * Entradas para el argumento GraphQL `extra` (JSON string de array) al buscar tareas con contexto.
40
- * Ej.: [{"projectId":"881552"}]
41
- */
42
- var buildTaskSearchExtraEntries = function buildTaskSearchExtraEntries(scope) {
43
- var rawClient = (scope === null || scope === void 0 ? void 0 : scope.clientId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.clientId) !== null && (scope === null || scope === void 0 ? void 0 : scope.clientId) !== '' ? String(scope.clientId) : null;
44
- var rawProject = (scope === null || scope === void 0 ? void 0 : scope.projectId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.projectId) !== null && (scope === null || scope === void 0 ? void 0 : scope.projectId) !== '' ? String(scope.projectId) : null;
45
- var agentEntity = scope === null || scope === void 0 ? void 0 : scope.agentEntity;
46
- var entries = [];
47
- var pushClient = function pushClient() {
48
- if (rawClient) entries.push({
49
- clientId: rawClient
50
- });
51
- };
52
- var pushProject = function pushProject() {
53
- if (rawProject) entries.push({
54
- projectId: rawProject
55
- });
56
- };
57
- if (agentEntity === 'project') {
58
- if (rawProject) {
59
- pushProject();
60
- } else if (rawClient) {
61
- pushClient();
62
- }
63
- } else if (agentEntity === 'client') {
64
- pushClient();
65
- pushProject();
66
- } else {
67
- pushClient();
68
- pushProject();
69
- }
70
- return entries;
71
- };
72
- var buildTaskSearchExtra = function buildTaskSearchExtra(scope) {
73
- var entries = buildTaskSearchExtraEntries(scope);
74
- if (entries.length === 0) return undefined;
75
- return JSON.stringify(entries);
76
- };
77
-
78
- /**
79
- * Tab proyecto: con `clientId` en el scope, `extra` acota la búsqueda a proyectos de ese cliente.
80
- * Ej.: `[{"clientId":"47105"}]` junto a `filters` `{"project":"true","archived":"all"}`.
81
- */
82
- var buildProjectSearchExtra = function buildProjectSearchExtra(scope) {
83
- var rawClient = (scope === null || scope === void 0 ? void 0 : scope.clientId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.clientId) !== null && (scope === null || scope === void 0 ? void 0 : scope.clientId) !== '' ? String(scope.clientId) : null;
84
- if (!rawClient) return undefined;
85
- return JSON.stringify([{
86
- clientId: rawClient
87
- }]);
88
- };
89
- var buildSearchEntitiesExtra = function buildSearchEntitiesExtra(type, scope) {
90
- if (type === 'task') return buildTaskSearchExtra(scope);
91
- if (type === 'project') return buildProjectSearchExtra(scope);
92
- return undefined;
93
- };
94
-
95
- /**
96
- * Tab `task` / `project`: `filters` sólo tipo + archived (tareas: no archivadas); scope (clientId / projectId en tareas) en `extra`.
97
- */
98
- var buildFiltersForType = function buildFiltersForType(type) {
99
- if (type === 'project') {
100
- return JSON.stringify(BASE_FILTERS_BY_TYPE.project);
101
- }
102
- return JSON.stringify(BASE_FILTERS_BY_TYPE.task);
103
- };
104
-
105
- /**
106
- * Filtros para usersDirectory. El backend espera un JSON string con
107
- * withPosition, withTeams y searchInput. Le agregamos clientId/projectId
108
- * del scope en caso de que el backend los aproveche para filtrar por
109
- * contexto (si no los entiende los ignora).
110
- */
111
- var buildUsersDirectoryFilters = function buildUsersDirectoryFilters(q, scope) {
112
- var base = {
113
- withPosition: true,
114
- withTeams: true,
115
- searchInput: q
116
- };
117
- if ((scope === null || scope === void 0 ? void 0 : scope.clientId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.clientId) !== null && scope.clientId !== '') {
118
- base.clientId = String(scope.clientId);
119
- }
120
- if ((scope === null || scope === void 0 ? void 0 : scope.projectId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.projectId) !== null && scope.projectId !== '') {
121
- base.projectId = String(scope.projectId);
122
- }
123
- return JSON.stringify(base);
124
- };
125
- var highlightRange = function highlightRange(text, searchValue) {
126
- if (!searchValue) return undefined;
127
- var idx = text.toLowerCase().indexOf(searchValue.toLowerCase());
128
- if (idx < 0) return undefined;
129
- return {
130
- start: idx,
131
- length: searchValue.length
132
- };
133
- };
134
- var mapClientToItem = function mapClientToItem(c, searchValue) {
135
- var _c$totalProyectos, _c$totalProyectos2;
136
- return {
137
- id: c.id,
138
- type: 'client',
139
- primary: c.name,
140
- primaryHighlight: highlightRange(c.name, searchValue),
141
- breadcrumb: {
142
- count: (_c$totalProyectos = c.totalProyectos) !== null && _c$totalProyectos !== void 0 ? _c$totalProyectos : undefined,
143
- countLabel: 'projects'
144
- },
145
- raw: {
146
- id: c.id,
147
- name: c.name,
148
- totalProyectos: (_c$totalProyectos2 = c.totalProyectos) !== null && _c$totalProyectos2 !== void 0 ? _c$totalProyectos2 : null
149
- }
150
- };
151
- };
152
- var mapUserToItem = function mapUserToItem(u, searchValue) {
153
- var _u$firstName, _u$lastName, _u$picture, _u$positionName, _u$email;
154
- var fullName = "".concat((_u$firstName = u.firstName) !== null && _u$firstName !== void 0 ? _u$firstName : '', " ").concat((_u$lastName = u.lastName) !== null && _u$lastName !== void 0 ? _u$lastName : '').trim();
155
- var primary = fullName || u.email || String(u.id);
156
- return {
157
- id: u.id,
158
- type: 'user',
159
- primary: primary,
160
- primaryHighlight: highlightRange(primary, searchValue),
161
- raw: {
162
- id: u.id,
163
- name: primary,
164
- picture: (_u$picture = u.picture) !== null && _u$picture !== void 0 ? _u$picture : null,
165
- positionName: (_u$positionName = u.positionName) !== null && _u$positionName !== void 0 ? _u$positionName : null,
166
- email: (_u$email = u.email) !== null && _u$email !== void 0 ? _u$email : null
167
- }
168
- };
169
- };
170
- var mapCorUserToUserItem = function mapCorUserToUserItem(user, searchValue, meLabel) {
171
- var _user$firstName, _user$lastName, _user$user_position, _user$role;
172
- var fullName = "".concat((_user$firstName = user.firstName) !== null && _user$firstName !== void 0 ? _user$firstName : '', " ").concat((_user$lastName = user.lastName) !== null && _user$lastName !== void 0 ? _user$lastName : '').trim();
173
- var positionLine = ((_user$user_position = user.user_position) === null || _user$user_position === void 0 ? void 0 : _user$user_position.trim()) || ((_user$role = user.role) === null || _user$role === void 0 ? void 0 : _user$role.trim()) || null;
174
- return {
175
- id: user.id,
176
- type: 'user',
177
- primary: meLabel,
178
- primaryHighlight: highlightRange(meLabel, searchValue),
179
- raw: {
180
- id: user.id,
181
- name: fullName || String(user.id),
182
- picture: user.picture || null,
183
- positionName: positionLine,
184
- email: null
185
- }
186
- };
187
- };
188
- var mapRecentTaskToItem = function mapRecentTaskToItem(task, searchValue) {
189
- var _task$projectName;
190
- var showProjectNameInTaskRow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
191
- var primary = task.title && task.title.trim() || String(task.id);
192
- var projectName = showProjectNameInTaskRow ? (_task$projectName = task.projectName) !== null && _task$projectName !== void 0 ? _task$projectName : null : null;
193
- return {
194
- id: task.id,
195
- type: 'task',
196
- primary: primary,
197
- primaryHighlight: highlightRange(primary, searchValue),
198
- breadcrumb: projectName ? {
199
- parent: projectName
200
- } : undefined,
201
- raw: {
202
- id: task.id,
203
- name: primary,
204
- projectName: projectName
205
- }
206
- };
207
- };
208
- var mapSearchToItem = function mapSearchToItem(r, type, searchValue) {
209
- var _r$projectName, _r$projectName2, _r$clientId, _r$clientName, _r$feeId, _father$title;
210
- var showProjectNameInTaskRow = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
211
- var primary = r.title || r.projectName || '';
212
- var parent;
213
- if (type === 'project') parent = r.clientName;else if (type === 'task') parent = undefined;else parent = (_r$projectName = r.projectName) !== null && _r$projectName !== void 0 ? _r$projectName : r.clientName;
214
- var father = type === 'task' ? r.father : null;
215
- var hasFather = type === 'task' && father != null && father.id != null && String(father.id).length > 0;
216
- var taskProjectName = type === 'task' && !showProjectNameInTaskRow ? null : (_r$projectName2 = r.projectName) !== null && _r$projectName2 !== void 0 ? _r$projectName2 : null;
217
- return {
218
- id: r.id,
219
- type: type,
220
- primary: primary,
221
- primaryHighlight: highlightRange(primary, searchValue),
222
- breadcrumb: parent ? {
223
- parent: parent
224
- } : undefined,
225
- raw: {
226
- id: r.id,
227
- name: primary,
228
- clientId: (_r$clientId = r.clientId) !== null && _r$clientId !== void 0 ? _r$clientId : null,
229
- clientName: (_r$clientName = r.clientName) !== null && _r$clientName !== void 0 ? _r$clientName : null,
230
- projectName: taskProjectName,
231
- feeId: (_r$feeId = r.feeId) !== null && _r$feeId !== void 0 ? _r$feeId : null,
232
- fatherId: hasFather ? father.id : null,
233
- fatherTitle: hasFather ? ((_father$title = father.title) === null || _father$title === void 0 ? void 0 : _father$title.trim()) || null : null
234
- }
235
- };
236
- };
237
- var formatMcpPrimaryLabel = function formatMcpPrimaryLabel(slug) {
238
- return slug.replace(/_/g, ' ').replace(/\b\w/g, function (_char) {
239
- return _char.toUpperCase();
240
- });
241
- };
242
- var mapMcpSlugsToItems = function mapMcpSlugsToItems(slugs, searchValue) {
243
- var q = searchValue.trim().toLowerCase();
244
- var filtered = slugs;
245
- if (q) {
246
- filtered = slugs.filter(function (s) {
247
- var primary = formatMcpPrimaryLabel(s);
248
- return s.toLowerCase().includes(q) || primary.toLowerCase().includes(q);
249
- });
250
- }
251
- return filtered.map(function (slug) {
252
- var primary = formatMcpPrimaryLabel(slug);
253
- return {
254
- id: slug,
255
- type: 'mcp',
256
- primary: primary,
257
- primaryHighlight: highlightRange(primary, searchValue),
258
- raw: {
259
- id: slug,
260
- name: primary
261
- }
262
- };
263
- });
264
- };
265
- export var useEntitySearch = function useEntitySearch(type, scope) {
266
- var _scope$mcpSlugs;
267
- var corUser = useUser();
268
- var _useT = useT(),
269
- t = _useT.t,
270
- i18n = _useT.i18n;
271
- var _useState = useState(''),
272
- _useState2 = _slicedToArray(_useState, 2),
273
- searchValue = _useState2[0],
274
- setSearchValue = _useState2[1];
275
- var debouncedSearchValue = useDebounce(searchValue, SEARCH_QUERY_DEBOUNCE_MS);
276
- var _useState3 = useState([]),
277
- _useState4 = _slicedToArray(_useState3, 2),
278
- items = _useState4[0],
279
- setItems = _useState4[1];
280
- var _useState5 = useState(false),
281
- _useState6 = _slicedToArray(_useState5, 2),
282
- loading = _useState6[0],
283
- setLoading = _useState6[1];
284
- var _useState7 = useState(false),
285
- _useState8 = _slicedToArray(_useState7, 2),
286
- error = _useState8[0],
287
- setError = _useState8[1];
288
- var mcpSlugsKey = ((_scope$mcpSlugs = scope === null || scope === void 0 ? void 0 : scope.mcpSlugs) !== null && _scope$mcpSlugs !== void 0 ? _scope$mcpSlugs : []).join('|');
289
- var showProjectNameInTaskRow = (scope === null || scope === void 0 ? void 0 : scope.agentEntity) !== 'project';
290
-
291
- // Estabilizamos el scope para no disparar fetchs por cambios de identidad de objeto.
292
- var stableScope = useMemo(function () {
293
- var _scope$clientId, _scope$projectId, _scope$mcpSlugs2, _scope$agentEntity;
294
- return {
295
- clientId: (_scope$clientId = scope === null || scope === void 0 ? void 0 : scope.clientId) !== null && _scope$clientId !== void 0 ? _scope$clientId : null,
296
- projectId: (_scope$projectId = scope === null || scope === void 0 ? void 0 : scope.projectId) !== null && _scope$projectId !== void 0 ? _scope$projectId : null,
297
- mcpSlugs: (_scope$mcpSlugs2 = scope === null || scope === void 0 ? void 0 : scope.mcpSlugs) !== null && _scope$mcpSlugs2 !== void 0 ? _scope$mcpSlugs2 : [],
298
- agentEntity: (_scope$agentEntity = scope === null || scope === void 0 ? void 0 : scope.agentEntity) !== null && _scope$agentEntity !== void 0 ? _scope$agentEntity : null
299
- };
300
- }, [scope === null || scope === void 0 ? void 0 : scope.clientId, scope === null || scope === void 0 ? void 0 : scope.projectId, mcpSlugsKey, scope === null || scope === void 0 ? void 0 : scope.agentEntity]);
301
-
302
- // --- Search: project | task (GraphQL: search) ---
303
- var _useLazyQuery = useLazyQuery(SEARCH_ENTITIES, {
304
- variables: {
305
- limit: 20
306
- },
307
- fetchPolicy: 'network-only'
308
- }),
309
- _useLazyQuery2 = _slicedToArray(_useLazyQuery, 2),
310
- fetchSearchEntities = _useLazyQuery2[0],
311
- _useLazyQuery2$ = _useLazyQuery2[1],
312
- searchData = _useLazyQuery2$.data,
313
- searchLoading = _useLazyQuery2$.loading,
314
- searchError = _useLazyQuery2$.error;
315
-
316
- // --- Search: client (GraphQL) ---
317
- var _useLazyQuery3 = useLazyQuery(SEARCH_CLIENTS, {
318
- fetchPolicy: 'network-only'
319
- }),
320
- _useLazyQuery4 = _slicedToArray(_useLazyQuery3, 2),
321
- fetchSearchClients = _useLazyQuery4[0],
322
- _useLazyQuery4$ = _useLazyQuery4[1],
323
- clientsData = _useLazyQuery4$.data,
324
- clientsLoading = _useLazyQuery4$.loading,
325
- clientsError = _useLazyQuery4$.error;
326
-
327
- // --- Search: user (GraphQL: usersDirectory) ---
328
- var _useLazyQuery5 = useLazyQuery(USERS_DIRECTORY, {
329
- fetchPolicy: 'network-only'
330
- }),
331
- _useLazyQuery6 = _slicedToArray(_useLazyQuery5, 2),
332
- fetchUsersDirectory = _useLazyQuery6[0],
333
- _useLazyQuery6$ = _useLazyQuery6[1],
334
- usersData = _useLazyQuery6$.data,
335
- usersLoading = _useLazyQuery6$.loading,
336
- usersError = _useLazyQuery6$.error;
337
- var fetchRecent = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
338
- var _stableScope$mcpSlugs, slugs, data, mapped, _data, _mapped, recentTaskFilters, _data2, _t;
339
- return _regeneratorRuntime.wrap(function (_context) {
340
- while (1) switch (_context.prev = _context.next) {
341
- case 0:
342
- if (!(type === 'mcp')) {
343
- _context.next = 1;
344
- break;
345
- }
346
- slugs = (_stableScope$mcpSlugs = stableScope.mcpSlugs) !== null && _stableScope$mcpSlugs !== void 0 ? _stableScope$mcpSlugs : [];
347
- setLoading(false);
348
- setError(false);
349
- setItems(mapMcpSlugsToItems(slugs, ''));
350
- return _context.abrupt("return");
351
- case 1:
352
- setLoading(true);
353
- setError(false);
354
- _context.prev = 2;
355
- if (!(type === 'client')) {
356
- _context.next = 4;
357
- break;
358
- }
359
- _context.next = 3;
360
- return getRecentClients();
361
- case 3:
362
- data = _context.sent;
363
- mapped = (data !== null && data !== void 0 ? data : []).map(function (c) {
364
- return mapClientToItem(c, '');
365
- });
366
- setItems(mapped);
367
- _context.next = 9;
368
- break;
369
- case 4:
370
- if (!(type === 'project')) {
371
- _context.next = 6;
372
- break;
373
- }
374
- _context.next = 5;
375
- return getRecentProjects(stableScope.clientId ? {
376
- clientId: stableScope.clientId
377
- } : undefined);
378
- case 5:
379
- _data = _context.sent;
380
- _mapped = (Array.isArray(_data) ? _data : []).map(function (p) {
381
- return mapSearchToItem({
382
- id: p.id,
383
- title: p.title,
384
- type: 'project',
385
- clientId: p.clientId,
386
- feeId: p.feeId,
387
- clientName: p.clientName
388
- }, 'project', '');
389
- });
390
- setItems(_mapped);
391
- _context.next = 9;
392
- break;
393
- case 6:
394
- if (!(type === 'task')) {
395
- _context.next = 8;
396
- break;
397
- }
398
- if (stableScope.agentEntity === 'project') {
399
- recentTaskFilters = {
400
- projectId: stableScope.projectId
401
- };
402
- } else if (stableScope.agentEntity === 'client') {
403
- recentTaskFilters = {
404
- clientId: stableScope.clientId
405
- };
406
- }
407
- _context.next = 7;
408
- return getRecentTasks(recentTaskFilters);
409
- case 7:
410
- _data2 = _context.sent;
411
- setItems((_data2 !== null && _data2 !== void 0 ? _data2 : []).map(function (task) {
412
- return mapRecentTaskToItem(task, '', showProjectNameInTaskRow);
413
- }));
414
- _context.next = 9;
415
- break;
416
- case 8:
417
- if (type === 'user') {
418
- setItems([mapCorUserToUserItem(corUser, '', t('contextMention.me'))]);
419
- } else {
420
- setItems([]);
421
- }
422
- case 9:
423
- _context.next = 11;
424
- break;
425
- case 10:
426
- _context.prev = 10;
427
- _t = _context["catch"](2);
428
- setError(true);
429
- setItems([]);
430
- case 11:
431
- _context.prev = 11;
432
- setLoading(false);
433
- return _context.finish(11);
434
- case 12:
435
- case "end":
436
- return _context.stop();
437
- }
438
- }, _callee, null, [[2, 10, 11, 12]]);
439
- })), [type, stableScope, corUser, t, i18n.language]);
440
-
441
- // Disparar search al cambiar debounced value
442
- useEffect(function () {
443
- var q = debouncedSearchValue.trim();
444
- if (type === 'mcp') {
445
- var _stableScope$mcpSlugs2;
446
- var slugs = (_stableScope$mcpSlugs2 = stableScope.mcpSlugs) !== null && _stableScope$mcpSlugs2 !== void 0 ? _stableScope$mcpSlugs2 : [];
447
- setLoading(false);
448
- setError(false);
449
- setItems(mapMcpSlugsToItems(slugs, q));
450
- return;
451
- }
452
- if (!q) return;
453
- if (type === 'client') {
454
- fetchSearchClients({
455
- variables: {
456
- filter: {
457
- name: q
458
- },
459
- page: 1,
460
- perPage: 20
461
- }
462
- });
463
- } else if (type === 'user') {
464
- fetchUsersDirectory({
465
- variables: {
466
- filters: buildUsersDirectoryFilters(q, stableScope),
467
- page: 1
468
- }
469
- });
470
- } else {
471
- var filters = buildFiltersForType(type);
472
- var extra = buildSearchEntitiesExtra(type, stableScope);
473
- fetchSearchEntities({
474
- variables: _objectSpread({
475
- q: q,
476
- filters: filters
477
- }, extra !== undefined ? {
478
- extra: extra
479
- } : {})
480
- });
481
- }
482
- }, [debouncedSearchValue, type, stableScope, fetchSearchEntities, fetchSearchClients, fetchUsersDirectory]);
483
-
484
- // Sincronizar resultados de search
485
- useEffect(function () {
486
- if (type === 'mcp') return;
487
- var q = debouncedSearchValue.trim();
488
- if (!q) return;
489
- if (type === 'client') {
490
- var _clientsData$clients;
491
- setLoading(clientsLoading);
492
- if (clientsError) {
493
- setError(true);
494
- return;
495
- }
496
- if (clientsData !== null && clientsData !== void 0 && (_clientsData$clients = clientsData.clients) !== null && _clientsData$clients !== void 0 && _clientsData$clients.data) {
497
- setItems(clientsData.clients.data.map(function (c) {
498
- return mapClientToItem(c, q);
499
- }));
500
- setError(false);
501
- }
502
- } else if (type === 'user') {
503
- var _usersData$usersDirec;
504
- setLoading(usersLoading);
505
- if (usersError) {
506
- setError(true);
507
- return;
508
- }
509
- if (usersData !== null && usersData !== void 0 && (_usersData$usersDirec = usersData.usersDirectory) !== null && _usersData$usersDirec !== void 0 && _usersData$usersDirec.data) {
510
- setItems(usersData.usersDirectory.data.map(function (u) {
511
- return mapUserToItem(u, q);
512
- }));
513
- setError(false);
514
- }
515
- } else {
516
- setLoading(searchLoading);
517
- if (searchError) {
518
- setError(true);
519
- return;
520
- }
521
- if (searchData !== null && searchData !== void 0 && searchData.search) {
522
- setItems(searchData.search.map(function (r) {
523
- return mapSearchToItem(r, type, q, showProjectNameInTaskRow);
524
- }));
525
- setError(false);
526
- }
527
- }
528
- }, [searchData, clientsData, usersData, searchLoading, clientsLoading, usersLoading, searchError, clientsError, usersError, debouncedSearchValue, type, showProjectNameInTaskRow]);
529
-
530
- // Cuando se limpia el search, volver a recents
531
- useEffect(function () {
532
- if (!debouncedSearchValue.trim()) {
533
- fetchRecent();
534
- }
535
- }, [debouncedSearchValue, fetchRecent]);
536
- return {
537
- items: items,
538
- loading: loading,
539
- error: error,
540
- searchValue: searchValue,
541
- updateSearchValue: setSearchValue,
542
- fetchRecent: fetchRecent
543
- };
544
- };
545
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXp5UXVlcnkiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsImdldFJlY2VudENsaWVudHMiLCJnZXRSZWNlbnRQcm9qZWN0cyIsImdldFJlY2VudFRhc2tzIiwidXNlVXNlciIsIlNFQVJDSF9FTlRJVElFUyIsIlNFQVJDSF9DTElFTlRTIiwiVVNFUlNfRElSRUNUT1JZIiwiU0VBUkNIX1FVRVJZX0RFQk9VTkNFX01TIiwidXNlRGVib3VuY2UiLCJ1c2VUIiwiQkFTRV9GSUxURVJTX0JZX1RZUEUiLCJwcm9qZWN0IiwiYXJjaGl2ZWQiLCJ0YXNrIiwiYnVpbGRUYXNrU2VhcmNoRXh0cmFFbnRyaWVzIiwic2NvcGUiLCJyYXdDbGllbnQiLCJjbGllbnRJZCIsInVuZGVmaW5lZCIsIlN0cmluZyIsInJhd1Byb2plY3QiLCJwcm9qZWN0SWQiLCJhZ2VudEVudGl0eSIsImVudHJpZXMiLCJwdXNoQ2xpZW50IiwicHVzaCIsInB1c2hQcm9qZWN0IiwiYnVpbGRUYXNrU2VhcmNoRXh0cmEiLCJsZW5ndGgiLCJKU09OIiwic3RyaW5naWZ5IiwiYnVpbGRQcm9qZWN0U2VhcmNoRXh0cmEiLCJidWlsZFNlYXJjaEVudGl0aWVzRXh0cmEiLCJ0eXBlIiwiYnVpbGRGaWx0ZXJzRm9yVHlwZSIsImJ1aWxkVXNlcnNEaXJlY3RvcnlGaWx0ZXJzIiwicSIsImJhc2UiLCJ3aXRoUG9zaXRpb24iLCJ3aXRoVGVhbXMiLCJzZWFyY2hJbnB1dCIsImhpZ2hsaWdodFJhbmdlIiwidGV4dCIsInNlYXJjaFZhbHVlIiwiaWR4IiwidG9Mb3dlckNhc2UiLCJpbmRleE9mIiwic3RhcnQiLCJtYXBDbGllbnRUb0l0ZW0iLCJjIiwiX2MkdG90YWxQcm95ZWN0b3MiLCJfYyR0b3RhbFByb3llY3RvczIiLCJpZCIsInByaW1hcnkiLCJuYW1lIiwicHJpbWFyeUhpZ2hsaWdodCIsImJyZWFkY3J1bWIiLCJjb3VudCIsInRvdGFsUHJveWVjdG9zIiwiY291bnRMYWJlbCIsInJhdyIsIm1hcFVzZXJUb0l0ZW0iLCJ1IiwiX3UkZmlyc3ROYW1lIiwiX3UkbGFzdE5hbWUiLCJfdSRwaWN0dXJlIiwiX3UkcG9zaXRpb25OYW1lIiwiX3UkZW1haWwiLCJmdWxsTmFtZSIsImNvbmNhdCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwidHJpbSIsImVtYWlsIiwicGljdHVyZSIsInBvc2l0aW9uTmFtZSIsIm1hcENvclVzZXJUb1VzZXJJdGVtIiwidXNlciIsIm1lTGFiZWwiLCJfdXNlciRmaXJzdE5hbWUiLCJfdXNlciRsYXN0TmFtZSIsIl91c2VyJHVzZXJfcG9zaXRpb24iLCJfdXNlciRyb2xlIiwicG9zaXRpb25MaW5lIiwidXNlcl9wb3NpdGlvbiIsInJvbGUiLCJtYXBSZWNlbnRUYXNrVG9JdGVtIiwiX3Rhc2skcHJvamVjdE5hbWUiLCJzaG93UHJvamVjdE5hbWVJblRhc2tSb3ciLCJhcmd1bWVudHMiLCJ0aXRsZSIsInByb2plY3ROYW1lIiwicGFyZW50IiwibWFwU2VhcmNoVG9JdGVtIiwiciIsIl9yJHByb2plY3ROYW1lIiwiX3IkcHJvamVjdE5hbWUyIiwiX3IkY2xpZW50SWQiLCJfciRjbGllbnROYW1lIiwiX3IkZmVlSWQiLCJfZmF0aGVyJHRpdGxlIiwiY2xpZW50TmFtZSIsImZhdGhlciIsImhhc0ZhdGhlciIsInRhc2tQcm9qZWN0TmFtZSIsImZlZUlkIiwiZmF0aGVySWQiLCJmYXRoZXJUaXRsZSIsImZvcm1hdE1jcFByaW1hcnlMYWJlbCIsInNsdWciLCJyZXBsYWNlIiwiY2hhciIsInRvVXBwZXJDYXNlIiwibWFwTWNwU2x1Z3NUb0l0ZW1zIiwic2x1Z3MiLCJmaWx0ZXJlZCIsImZpbHRlciIsInMiLCJpbmNsdWRlcyIsIm1hcCIsInVzZUVudGl0eVNlYXJjaCIsIl9zY29wZSRtY3BTbHVncyIsImNvclVzZXIiLCJfdXNlVCIsInQiLCJpMThuIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2V0U2VhcmNoVmFsdWUiLCJkZWJvdW5jZWRTZWFyY2hWYWx1ZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXRlbXMiLCJzZXRJdGVtcyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwibG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImVycm9yIiwic2V0RXJyb3IiLCJtY3BTbHVnc0tleSIsIm1jcFNsdWdzIiwiam9pbiIsInN0YWJsZVNjb3BlIiwiX3Njb3BlJGNsaWVudElkIiwiX3Njb3BlJHByb2plY3RJZCIsIl9zY29wZSRtY3BTbHVnczIiLCJfc2NvcGUkYWdlbnRFbnRpdHkiLCJfdXNlTGF6eVF1ZXJ5IiwidmFyaWFibGVzIiwibGltaXQiLCJmZXRjaFBvbGljeSIsIl91c2VMYXp5UXVlcnkyIiwiZmV0Y2hTZWFyY2hFbnRpdGllcyIsIl91c2VMYXp5UXVlcnkyJCIsInNlYXJjaERhdGEiLCJkYXRhIiwic2VhcmNoTG9hZGluZyIsInNlYXJjaEVycm9yIiwiX3VzZUxhenlRdWVyeTMiLCJfdXNlTGF6eVF1ZXJ5NCIsImZldGNoU2VhcmNoQ2xpZW50cyIsIl91c2VMYXp5UXVlcnk0JCIsImNsaWVudHNEYXRhIiwiY2xpZW50c0xvYWRpbmciLCJjbGllbnRzRXJyb3IiLCJfdXNlTGF6eVF1ZXJ5NSIsIl91c2VMYXp5UXVlcnk2IiwiZmV0Y2hVc2Vyc0RpcmVjdG9yeSIsIl91c2VMYXp5UXVlcnk2JCIsInVzZXJzRGF0YSIsInVzZXJzTG9hZGluZyIsInVzZXJzRXJyb3IiLCJmZXRjaFJlY2VudCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX3N0YWJsZVNjb3BlJG1jcFNsdWdzIiwibWFwcGVkIiwiX2RhdGEiLCJfbWFwcGVkIiwicmVjZW50VGFza0ZpbHRlcnMiLCJfZGF0YTIiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiYWJydXB0Iiwic2VudCIsIkFycmF5IiwiaXNBcnJheSIsInAiLCJmaW5pc2giLCJzdG9wIiwibGFuZ3VhZ2UiLCJfc3RhYmxlU2NvcGUkbWNwU2x1Z3MyIiwicGFnZSIsInBlclBhZ2UiLCJmaWx0ZXJzIiwiZXh0cmEiLCJfb2JqZWN0U3ByZWFkIiwiX2NsaWVudHNEYXRhJGNsaWVudHMiLCJjbGllbnRzIiwiX3VzZXJzRGF0YSR1c2Vyc0RpcmVjIiwidXNlcnNEaXJlY3RvcnkiLCJzZWFyY2giLCJ1cGRhdGVTZWFyY2hWYWx1ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VFbnRpdHlTZWFyY2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlTGF6eVF1ZXJ5IH0gZnJvbSAnQGFwb2xsby9jbGllbnQnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0UmVjZW50Q2xpZW50cyB9IGZyb20gJy4uL3NlcnZpY2VzL21haWEvUmVjZW50Q2xpZW50cy9nZXRSZWNlbnRDbGllbnRzJ1xuaW1wb3J0IHsgZ2V0UmVjZW50UHJvamVjdHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudFByb2plY3RzL2dldFJlY2VudFByb2plY3RzJ1xuaW1wb3J0IHsgZ2V0UmVjZW50VGFza3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudFRhc2tzL2dldFJlY2VudFRhc2tzJ1xuaW1wb3J0IHR5cGUgeyBSZWNlbnRUYXNrSXRlbSB9IGZyb20gJy4uL3NlcnZpY2VzL21haWEvUmVjZW50VGFza3MvZ2V0UmVjZW50VGFza3MnXG5pbXBvcnQgdHlwZSB7IENPUlVzZXIgfSBmcm9tICcuLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBTRUFSQ0hfRU5USVRJRVMgfSBmcm9tICcuLi9zZXJ2aWNlcy9xdWVyeS9lbnRpdHlTZWFyY2hRdWVyeSdcbmltcG9ydCB7IFNFQVJDSF9DTElFTlRTIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvQ2xpZW50U2VhcmNoUXVlcnknXG5pbXBvcnQgeyBVU0VSU19ESVJFQ1RPUlkgfSBmcm9tICcuLi9zZXJ2aWNlcy9xdWVyeS91c2Vyc0RpcmVjdG9yeVF1ZXJ5J1xuaW1wb3J0IHsgU0VBUkNIX1FVRVJZX0RFQk9VTkNFX01TIH0gZnJvbSAnLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IHVzZURlYm91bmNlIH0gZnJvbSAnLi91c2VEZWJvdW5jZSdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuL3VzZVQnXG5pbXBvcnQgeyBDb250ZXh0RW50aXR5VHlwZSwgQ29udGV4dE1lbnRpb25JdGVtIH0gZnJvbSAnLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgdHlwZSB7IEFnZW50RW50aXR5IH0gZnJvbSAnLi4vdHlwZXMvYWdlbnQnXG5cbnR5cGUgUmF3U2VhcmNoUmVzdWx0ID0ge1xuICBpZDogc3RyaW5nIHwgbnVtYmVyXG4gIHRpdGxlOiBzdHJpbmdcbiAgdHlwZT86IHN0cmluZ1xuICBjbGllbnRJZD86IG51bWJlciB8IHN0cmluZyB8IG51bGxcbiAgZmVlSWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsXG4gIGNsaWVudE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIHByb2plY3ROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBmYXRoZXI/OiB7IGlkOiBzdHJpbmcgfCBudW1iZXI7IHRpdGxlPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbFxufVxuXG50eXBlIFJhd0NsaWVudCA9IHtcbiAgaWQ6IG51bWJlciB8IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgdG90YWxQcm95ZWN0b3M/OiBudW1iZXIgfCBudWxsXG59XG5cbnR5cGUgUmF3RGlyZWN0b3J5VXNlciA9IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlclxuICBmaXJzdE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIGxhc3ROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBlbWFpbD86IHN0cmluZyB8IG51bGxcbiAgcGljdHVyZT86IHN0cmluZyB8IG51bGxcbiAgcG9zaXRpb25OYW1lPzogc3RyaW5nIHwgbnVsbFxufVxuXG50eXBlIFNlYXJjaEVudGl0aWVzRGF0YSA9IHsgc2VhcmNoOiBSYXdTZWFyY2hSZXN1bHRbXSB8IG51bGwgfVxudHlwZSBTZWFyY2hDbGllbnRzRGF0YSA9IHtcbiAgY2xpZW50czoge1xuICAgIGRhdGE6IFJhd0NsaWVudFtdXG4gIH0gfCBudWxsXG59XG50eXBlIFVzZXJzRGlyZWN0b3J5RGF0YSA9IHtcbiAgdXNlcnNEaXJlY3Rvcnk6IHtcbiAgICB0b3RhbD86IG51bWJlciB8IG51bGxcbiAgICBkYXRhOiBSYXdEaXJlY3RvcnlVc2VyW10gfCBudWxsXG4gIH0gfCBudWxsXG59XG5cbi8qKlxuICogUmVzdHJpbmdlIGxvcyByZXN1bHRhZG9zIGFsIGBjbGllbnRJZGAvYHByb2plY3RJZGAgZGVsIGFnZW50ZSBhY3Rpdm8uXG4gKiBDdWFuZG8gZWwgYWdlbnRlIGVzdMOhIHNjb3BlYWRvIGEgdW4gY2xpZW50L3Byb2plY3QsIHRhbnRvIGxvcyByZWNlbnRzIGNvbW9cbiAqIGVsIHNlYXJjaCBkZWJlbiBmaWx0cmFyIHBvciBlc2UgY29udGV4dG8uIFNpIGVsIGJhY2tlbmQgbm8gZW50aWVuZGUgYWxnw7puXG4gKiBjYW1wbyBsbyBpZ25vcmEgeSBzZSBjYWUgYWwgY29tcG9ydGFtaWVudG8gZ2xvYmFsLlxuICovXG5leHBvcnQgdHlwZSBFbnRpdHlTZWFyY2hTY29wZSA9IHtcbiAgY2xpZW50SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIHByb2plY3RJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgLyoqIFNsdWdzIGRlbCBjb25lY3RvciBNQ1AgZGVsIGFnZW50ZSAobGlzdGFkbyBsb2NhbCwgc2luIEdyYXBoUUwpLiAqL1xuICBtY3BTbHVncz86IHN0cmluZ1tdXG4gIC8qKlxuICAgKiBgZW50aXR5YCBkZWwgYWdlbnRlIGFjdGl2by4gUGFyYSBlc3BlY2lhbGlzdGFzOlxuICAgKiAtIGBwcm9qZWN0YDogYsO6c3F1ZWRhIGRlIHRhcmVhcyBmdWVyemEgZmlsdHJvIHBvciBgcHJvamVjdElkYCBkZWwgY29udGV4dG8uXG4gICAqIC0gYGNsaWVudGA6IGLDunNxdWVkYSBkZSBwcm95ZWN0b3MgcG9yIGBjbGllbnRJZGA7IHRhcmVhcyBwb3IgY2xpZW50ZSAoeSBwcm95ZWN0byBzaSBhcGxpY2EpLlxuICAgKi9cbiAgYWdlbnRFbnRpdHk/OiBBZ2VudEVudGl0eSB8IG51bGxcbn1cblxudHlwZSBTZWFyY2hGaWx0ZXJhYmxlVHlwZSA9ICdwcm9qZWN0JyB8ICd0YXNrJ1xuXG5jb25zdCBCQVNFX0ZJTFRFUlNfQllfVFlQRTogUmVjb3JkPFNlYXJjaEZpbHRlcmFibGVUeXBlLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgcHJvamVjdDogeyBwcm9qZWN0OiAndHJ1ZScsIGFyY2hpdmVkOiAnYWxsJyB9LFxuICB0YXNrOiB7IHRhc2s6ICd0cnVlJywgYXJjaGl2ZWQ6ICdmYWxzZScgfSxcbn1cblxuLyoqXG4gKiBFbnRyYWRhcyBwYXJhIGVsIGFyZ3VtZW50byBHcmFwaFFMIGBleHRyYWAgKEpTT04gc3RyaW5nIGRlIGFycmF5KSBhbCBidXNjYXIgdGFyZWFzIGNvbiBjb250ZXh0by5cbiAqIEVqLjogW3tcInByb2plY3RJZFwiOlwiODgxNTUyXCJ9XVxuICovXG5jb25zdCBidWlsZFRhc2tTZWFyY2hFeHRyYUVudHJpZXMgPSAoc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSk6IEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0+IHtcbiAgY29uc3QgcmF3Q2xpZW50ID1cbiAgICBzY29wZT8uY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBzY29wZT8uY2xpZW50SWQgIT09IG51bGwgJiYgc2NvcGU/LmNsaWVudElkICE9PSAnJyA/IFN0cmluZyhzY29wZS5jbGllbnRJZCkgOiBudWxsXG4gIGNvbnN0IHJhd1Byb2plY3QgPVxuICAgIHNjb3BlPy5wcm9qZWN0SWQgIT09IHVuZGVmaW5lZCAmJiBzY29wZT8ucHJvamVjdElkICE9PSBudWxsICYmIHNjb3BlPy5wcm9qZWN0SWQgIT09ICcnXG4gICAgICA/IFN0cmluZyhzY29wZS5wcm9qZWN0SWQpXG4gICAgICA6IG51bGxcblxuICBjb25zdCBhZ2VudEVudGl0eSA9IHNjb3BlPy5hZ2VudEVudGl0eVxuICBjb25zdCBlbnRyaWVzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IFtdXG5cbiAgY29uc3QgcHVzaENsaWVudCA9ICgpID0+IHtcbiAgICBpZiAocmF3Q2xpZW50KSBlbnRyaWVzLnB1c2goeyBjbGllbnRJZDogcmF3Q2xpZW50IH0pXG4gIH1cbiAgY29uc3QgcHVzaFByb2plY3QgPSAoKSA9PiB7XG4gICAgaWYgKHJhd1Byb2plY3QpIGVudHJpZXMucHVzaCh7IHByb2plY3RJZDogcmF3UHJvamVjdCB9KVxuICB9XG5cbiAgaWYgKGFnZW50RW50aXR5ID09PSAncHJvamVjdCcpIHtcbiAgICBpZiAocmF3UHJvamVjdCkge1xuICAgICAgcHVzaFByb2plY3QoKVxuICAgIH0gZWxzZSBpZiAocmF3Q2xpZW50KSB7XG4gICAgICBwdXNoQ2xpZW50KClcbiAgICB9XG4gIH0gZWxzZSBpZiAoYWdlbnRFbnRpdHkgPT09ICdjbGllbnQnKSB7XG4gICAgcHVzaENsaWVudCgpXG4gICAgcHVzaFByb2plY3QoKVxuICB9IGVsc2Uge1xuICAgIHB1c2hDbGllbnQoKVxuICAgIHB1c2hQcm9qZWN0KClcbiAgfVxuXG4gIHJldHVybiBlbnRyaWVzXG59XG5cbmNvbnN0IGJ1aWxkVGFza1NlYXJjaEV4dHJhID0gKHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBlbnRyaWVzID0gYnVpbGRUYXNrU2VhcmNoRXh0cmFFbnRyaWVzKHNjb3BlKVxuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWRcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGVudHJpZXMpXG59XG5cbi8qKlxuICogVGFiIHByb3llY3RvOiBjb24gYGNsaWVudElkYCBlbiBlbCBzY29wZSwgYGV4dHJhYCBhY290YSBsYSBiw7pzcXVlZGEgYSBwcm95ZWN0b3MgZGUgZXNlIGNsaWVudGUuXG4gKiBFai46IGBbe1wiY2xpZW50SWRcIjpcIjQ3MTA1XCJ9XWAganVudG8gYSBgZmlsdGVyc2AgYHtcInByb2plY3RcIjpcInRydWVcIixcImFyY2hpdmVkXCI6XCJhbGxcIn1gLlxuICovXG5jb25zdCBidWlsZFByb2plY3RTZWFyY2hFeHRyYSA9IChzY29wZT86IEVudGl0eVNlYXJjaFNjb3BlKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcmF3Q2xpZW50ID1cbiAgICBzY29wZT8uY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBzY29wZT8uY2xpZW50SWQgIT09IG51bGwgJiYgc2NvcGU/LmNsaWVudElkICE9PSAnJyA/IFN0cmluZyhzY29wZS5jbGllbnRJZCkgOiBudWxsXG4gIGlmICghcmF3Q2xpZW50KSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShbeyBjbGllbnRJZDogcmF3Q2xpZW50IH1dKVxufVxuXG5jb25zdCBidWlsZFNlYXJjaEVudGl0aWVzRXh0cmEgPSAodHlwZTogU2VhcmNoRmlsdGVyYWJsZVR5cGUsIHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAodHlwZSA9PT0gJ3Rhc2snKSByZXR1cm4gYnVpbGRUYXNrU2VhcmNoRXh0cmEoc2NvcGUpXG4gIGlmICh0eXBlID09PSAncHJvamVjdCcpIHJldHVybiBidWlsZFByb2plY3RTZWFyY2hFeHRyYShzY29wZSlcbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFRhYiBgdGFza2AgLyBgcHJvamVjdGA6IGBmaWx0ZXJzYCBzw7NsbyB0aXBvICsgYXJjaGl2ZWQgKHRhcmVhczogbm8gYXJjaGl2YWRhcyk7IHNjb3BlIChjbGllbnRJZCAvIHByb2plY3RJZCBlbiB0YXJlYXMpIGVuIGBleHRyYWAuXG4gKi9cbmNvbnN0IGJ1aWxkRmlsdGVyc0ZvclR5cGUgPSAodHlwZTogU2VhcmNoRmlsdGVyYWJsZVR5cGUpOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KEJBU0VfRklMVEVSU19CWV9UWVBFLnByb2plY3QpXG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KEJBU0VfRklMVEVSU19CWV9UWVBFLnRhc2spXG59XG5cbi8qKlxuICogRmlsdHJvcyBwYXJhIHVzZXJzRGlyZWN0b3J5LiBFbCBiYWNrZW5kIGVzcGVyYSB1biBKU09OIHN0cmluZyBjb25cbiAqIHdpdGhQb3NpdGlvbiwgd2l0aFRlYW1zIHkgc2VhcmNoSW5wdXQuIExlIGFncmVnYW1vcyBjbGllbnRJZC9wcm9qZWN0SWRcbiAqIGRlbCBzY29wZSBlbiBjYXNvIGRlIHF1ZSBlbCBiYWNrZW5kIGxvcyBhcHJvdmVjaGUgcGFyYSBmaWx0cmFyIHBvclxuICogY29udGV4dG8gKHNpIG5vIGxvcyBlbnRpZW5kZSBsb3MgaWdub3JhKS5cbiAqL1xuY29uc3QgYnVpbGRVc2Vyc0RpcmVjdG9yeUZpbHRlcnMgPSAocTogc3RyaW5nLCBzY29wZT86IEVudGl0eVNlYXJjaFNjb3BlKTogc3RyaW5nID0+IHtcbiAgY29uc3QgYmFzZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgd2l0aFBvc2l0aW9uOiB0cnVlLFxuICAgIHdpdGhUZWFtczogdHJ1ZSxcbiAgICBzZWFyY2hJbnB1dDogcSxcbiAgfVxuICBpZiAoc2NvcGU/LmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgc2NvcGU/LmNsaWVudElkICE9PSBudWxsICYmIHNjb3BlLmNsaWVudElkICE9PSAnJykge1xuICAgIGJhc2UuY2xpZW50SWQgPSBTdHJpbmcoc2NvcGUuY2xpZW50SWQpXG4gIH1cbiAgaWYgKHNjb3BlPy5wcm9qZWN0SWQgIT09IHVuZGVmaW5lZCAmJiBzY29wZT8ucHJvamVjdElkICE9PSBudWxsICYmIHNjb3BlLnByb2plY3RJZCAhPT0gJycpIHtcbiAgICBiYXNlLnByb2plY3RJZCA9IFN0cmluZyhzY29wZS5wcm9qZWN0SWQpXG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGJhc2UpXG59XG5cbmNvbnN0IGhpZ2hsaWdodFJhbmdlID0gKHRleHQ6IHN0cmluZywgc2VhcmNoVmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAoIXNlYXJjaFZhbHVlKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IGlkeCA9IHRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpXG4gIGlmIChpZHggPCAwKSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiB7IHN0YXJ0OiBpZHgsIGxlbmd0aDogc2VhcmNoVmFsdWUubGVuZ3RoIH1cbn1cblxuY29uc3QgbWFwQ2xpZW50VG9JdGVtID0gKGM6IFJhd0NsaWVudCwgc2VhcmNoVmFsdWU6IHN0cmluZyk6IENvbnRleHRNZW50aW9uSXRlbSA9PiAoe1xuICBpZDogYy5pZCxcbiAgdHlwZTogJ2NsaWVudCcsXG4gIHByaW1hcnk6IGMubmFtZSxcbiAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UoYy5uYW1lLCBzZWFyY2hWYWx1ZSksXG4gIGJyZWFkY3J1bWI6IHtcbiAgICBjb3VudDogYy50b3RhbFByb3llY3RvcyA/PyB1bmRlZmluZWQsXG4gICAgY291bnRMYWJlbDogJ3Byb2plY3RzJyxcbiAgfSxcbiAgcmF3OiB7XG4gICAgaWQ6IGMuaWQsXG4gICAgbmFtZTogYy5uYW1lLFxuICAgIHRvdGFsUHJveWVjdG9zOiBjLnRvdGFsUHJveWVjdG9zID8/IG51bGwsXG4gIH0sXG59KVxuXG5jb25zdCBtYXBVc2VyVG9JdGVtID0gKHU6IFJhd0RpcmVjdG9yeVVzZXIsIHNlYXJjaFZhbHVlOiBzdHJpbmcpOiBDb250ZXh0TWVudGlvbkl0ZW0gPT4ge1xuICBjb25zdCBmdWxsTmFtZSA9IGAke3UuZmlyc3ROYW1lID8/ICcnfSAke3UubGFzdE5hbWUgPz8gJyd9YC50cmltKClcbiAgY29uc3QgcHJpbWFyeSA9IGZ1bGxOYW1lIHx8IHUuZW1haWwgfHwgU3RyaW5nKHUuaWQpXG5cbiAgcmV0dXJuIHtcbiAgICBpZDogdS5pZCxcbiAgICB0eXBlOiAndXNlcicsXG4gICAgcHJpbWFyeSxcbiAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgcmF3OiB7XG4gICAgICBpZDogdS5pZCxcbiAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICBwaWN0dXJlOiB1LnBpY3R1cmUgPz8gbnVsbCxcbiAgICAgIHBvc2l0aW9uTmFtZTogdS5wb3NpdGlvbk5hbWUgPz8gbnVsbCxcbiAgICAgIGVtYWlsOiB1LmVtYWlsID8/IG51bGwsXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBtYXBDb3JVc2VyVG9Vc2VySXRlbSA9ICh1c2VyOiBDT1JVc2VyLCBzZWFyY2hWYWx1ZTogc3RyaW5nLCBtZUxhYmVsOiBzdHJpbmcpOiBDb250ZXh0TWVudGlvbkl0ZW0gPT4ge1xuICBjb25zdCBmdWxsTmFtZSA9IGAke3VzZXIuZmlyc3ROYW1lID8/ICcnfSAke3VzZXIubGFzdE5hbWUgPz8gJyd9YC50cmltKClcbiAgY29uc3QgcG9zaXRpb25MaW5lID0gdXNlci51c2VyX3Bvc2l0aW9uPy50cmltKCkgfHwgdXNlci5yb2xlPy50cmltKCkgfHwgbnVsbFxuXG4gIHJldHVybiB7XG4gICAgaWQ6IHVzZXIuaWQsXG4gICAgdHlwZTogJ3VzZXInLFxuICAgIHByaW1hcnk6IG1lTGFiZWwsXG4gICAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UobWVMYWJlbCwgc2VhcmNoVmFsdWUpLFxuICAgIHJhdzoge1xuICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICBuYW1lOiBmdWxsTmFtZSB8fCBTdHJpbmcodXNlci5pZCksXG4gICAgICBwaWN0dXJlOiB1c2VyLnBpY3R1cmUgfHwgbnVsbCxcbiAgICAgIHBvc2l0aW9uTmFtZTogcG9zaXRpb25MaW5lLFxuICAgICAgZW1haWw6IG51bGwsXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBtYXBSZWNlbnRUYXNrVG9JdGVtID0gKFxuICB0YXNrOiBSZWNlbnRUYXNrSXRlbSxcbiAgc2VhcmNoVmFsdWU6IHN0cmluZyxcbiAgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93ID0gdHJ1ZVxuKTogQ29udGV4dE1lbnRpb25JdGVtID0+IHtcbiAgY29uc3QgcHJpbWFyeSA9ICh0YXNrLnRpdGxlICYmIHRhc2sudGl0bGUudHJpbSgpKSB8fCBTdHJpbmcodGFzay5pZClcbiAgY29uc3QgcHJvamVjdE5hbWUgPSBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cgPyAodGFzay5wcm9qZWN0TmFtZSA/PyBudWxsKSA6IG51bGxcbiAgcmV0dXJuIHtcbiAgICBpZDogdGFzay5pZCxcbiAgICB0eXBlOiAndGFzaycsXG4gICAgcHJpbWFyeSxcbiAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgYnJlYWRjcnVtYjogcHJvamVjdE5hbWUgPyB7IHBhcmVudDogcHJvamVjdE5hbWUgfSA6IHVuZGVmaW5lZCxcbiAgICByYXc6IHtcbiAgICAgIGlkOiB0YXNrLmlkLFxuICAgICAgbmFtZTogcHJpbWFyeSxcbiAgICAgIHByb2plY3ROYW1lLFxuICAgIH0sXG4gIH1cbn1cblxuY29uc3QgbWFwU2VhcmNoVG9JdGVtID0gKFxuICByOiBSYXdTZWFyY2hSZXN1bHQsXG4gIHR5cGU6IENvbnRleHRFbnRpdHlUeXBlLFxuICBzZWFyY2hWYWx1ZTogc3RyaW5nLFxuICBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cgPSB0cnVlXG4pOiBDb250ZXh0TWVudGlvbkl0ZW0gPT4ge1xuICBjb25zdCBwcmltYXJ5ID0gci50aXRsZSB8fCByLnByb2plY3ROYW1lIHx8ICcnXG4gIGxldCBwYXJlbnQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgaWYgKHR5cGUgPT09ICdwcm9qZWN0JykgcGFyZW50ID0gci5jbGllbnROYW1lXG4gIGVsc2UgaWYgKHR5cGUgPT09ICd0YXNrJykgcGFyZW50ID0gdW5kZWZpbmVkXG4gIGVsc2UgcGFyZW50ID0gci5wcm9qZWN0TmFtZSA/PyByLmNsaWVudE5hbWVcblxuICBjb25zdCBmYXRoZXIgPSB0eXBlID09PSAndGFzaycgPyByLmZhdGhlciA6IG51bGxcbiAgY29uc3QgaGFzRmF0aGVyID0gdHlwZSA9PT0gJ3Rhc2snICYmIGZhdGhlciAhPSBudWxsICYmIGZhdGhlci5pZCAhPSBudWxsICYmIFN0cmluZyhmYXRoZXIuaWQpLmxlbmd0aCA+IDBcblxuICBjb25zdCB0YXNrUHJvamVjdE5hbWUgPSB0eXBlID09PSAndGFzaycgJiYgIXNob3dQcm9qZWN0TmFtZUluVGFza1JvdyA/IG51bGwgOiAoci5wcm9qZWN0TmFtZSA/PyBudWxsKVxuXG4gIHJldHVybiB7XG4gICAgaWQ6IHIuaWQsXG4gICAgdHlwZSxcbiAgICBwcmltYXJ5LFxuICAgIHByaW1hcnlIaWdobGlnaHQ6IGhpZ2hsaWdodFJhbmdlKHByaW1hcnksIHNlYXJjaFZhbHVlKSxcbiAgICBicmVhZGNydW1iOiBwYXJlbnQgPyB7IHBhcmVudCB9IDogdW5kZWZpbmVkLFxuICAgIHJhdzoge1xuICAgICAgaWQ6IHIuaWQsXG4gICAgICBuYW1lOiBwcmltYXJ5LFxuICAgICAgY2xpZW50SWQ6IHIuY2xpZW50SWQgPz8gbnVsbCxcbiAgICAgIGNsaWVudE5hbWU6IHIuY2xpZW50TmFtZSA/PyBudWxsLFxuICAgICAgcHJvamVjdE5hbWU6IHRhc2tQcm9qZWN0TmFtZSxcbiAgICAgIGZlZUlkOiByLmZlZUlkID8/IG51bGwsXG4gICAgICBmYXRoZXJJZDogaGFzRmF0aGVyID8gZmF0aGVyLmlkIDogbnVsbCxcbiAgICAgIGZhdGhlclRpdGxlOiBoYXNGYXRoZXIgPyBmYXRoZXIudGl0bGU/LnRyaW0oKSB8fCBudWxsIDogbnVsbCxcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IGZvcm1hdE1jcFByaW1hcnlMYWJlbCA9IChzbHVnOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgc2x1Zy5yZXBsYWNlKC9fL2csICcgJykucmVwbGFjZSgvXFxiXFx3L2csIGNoYXIgPT4gY2hhci50b1VwcGVyQ2FzZSgpKVxuXG5jb25zdCBtYXBNY3BTbHVnc1RvSXRlbXMgPSAoc2x1Z3M6IHN0cmluZ1tdLCBzZWFyY2hWYWx1ZTogc3RyaW5nKTogQ29udGV4dE1lbnRpb25JdGVtW10gPT4ge1xuICBjb25zdCBxID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgbGV0IGZpbHRlcmVkID0gc2x1Z3NcbiAgaWYgKHEpIHtcbiAgICBmaWx0ZXJlZCA9IHNsdWdzLmZpbHRlcihzID0+IHtcbiAgICAgIGNvbnN0IHByaW1hcnkgPSBmb3JtYXRNY3BQcmltYXJ5TGFiZWwocylcbiAgICAgIHJldHVybiBzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSkgfHwgcHJpbWFyeS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpXG4gICAgfSlcbiAgfVxuICByZXR1cm4gZmlsdGVyZWQubWFwKHNsdWcgPT4ge1xuICAgIGNvbnN0IHByaW1hcnkgPSBmb3JtYXRNY3BQcmltYXJ5TGFiZWwoc2x1ZylcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNsdWcsXG4gICAgICB0eXBlOiAnbWNwJyBhcyBjb25zdCxcbiAgICAgIHByaW1hcnksXG4gICAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgICByYXc6IHtcbiAgICAgICAgaWQ6IHNsdWcsXG4gICAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICB9LFxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUVudGl0eVNlYXJjaCA9ICh0eXBlOiBDb250ZXh0RW50aXR5VHlwZSwgc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSkgPT4ge1xuICBjb25zdCBjb3JVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVCgpXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IGRlYm91bmNlZFNlYXJjaFZhbHVlID0gdXNlRGVib3VuY2Uoc2VhcmNoVmFsdWUsIFNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUylcblxuICBjb25zdCBbaXRlbXMsIHNldEl0ZW1zXSA9IHVzZVN0YXRlPENvbnRleHRNZW50aW9uSXRlbVtdPihbXSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgbWNwU2x1Z3NLZXkgPSAoc2NvcGU/Lm1jcFNsdWdzID8/IFtdKS5qb2luKCd8JylcbiAgY29uc3Qgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93ID0gc2NvcGU/LmFnZW50RW50aXR5ICE9PSAncHJvamVjdCdcblxuICAvLyBFc3RhYmlsaXphbW9zIGVsIHNjb3BlIHBhcmEgbm8gZGlzcGFyYXIgZmV0Y2hzIHBvciBjYW1iaW9zIGRlIGlkZW50aWRhZCBkZSBvYmpldG8uXG4gIGNvbnN0IHN0YWJsZVNjb3BlID0gdXNlTWVtbzxFbnRpdHlTZWFyY2hTY29wZT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIGNsaWVudElkOiBzY29wZT8uY2xpZW50SWQgPz8gbnVsbCxcbiAgICAgIHByb2plY3RJZDogc2NvcGU/LnByb2plY3RJZCA/PyBudWxsLFxuICAgICAgbWNwU2x1Z3M6IHNjb3BlPy5tY3BTbHVncyA/PyBbXSxcbiAgICAgIGFnZW50RW50aXR5OiBzY29wZT8uYWdlbnRFbnRpdHkgPz8gbnVsbCxcbiAgICB9KSxcbiAgICBbc2NvcGU/LmNsaWVudElkLCBzY29wZT8ucHJvamVjdElkLCBtY3BTbHVnc0tleSwgc2NvcGU/LmFnZW50RW50aXR5XVxuICApXG5cbiAgLy8gLS0tIFNlYXJjaDogcHJvamVjdCB8IHRhc2sgKEdyYXBoUUw6IHNlYXJjaCkgLS0tXG4gIGNvbnN0IFtmZXRjaFNlYXJjaEVudGl0aWVzLCB7IGRhdGE6IHNlYXJjaERhdGEsIGxvYWRpbmc6IHNlYXJjaExvYWRpbmcsIGVycm9yOiBzZWFyY2hFcnJvciB9XSA9XG4gICAgdXNlTGF6eVF1ZXJ5PFNlYXJjaEVudGl0aWVzRGF0YT4oU0VBUkNIX0VOVElUSUVTLCB7XG4gICAgICB2YXJpYWJsZXM6IHsgbGltaXQ6IDIwIH0sXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgfSlcblxuICAvLyAtLS0gU2VhcmNoOiBjbGllbnQgKEdyYXBoUUwpIC0tLVxuICBjb25zdCBbZmV0Y2hTZWFyY2hDbGllbnRzLCB7IGRhdGE6IGNsaWVudHNEYXRhLCBsb2FkaW5nOiBjbGllbnRzTG9hZGluZywgZXJyb3I6IGNsaWVudHNFcnJvciB9XSA9XG4gICAgdXNlTGF6eVF1ZXJ5PFNlYXJjaENsaWVudHNEYXRhPihTRUFSQ0hfQ0xJRU5UUywge1xuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgIH0pXG5cbiAgLy8gLS0tIFNlYXJjaDogdXNlciAoR3JhcGhRTDogdXNlcnNEaXJlY3RvcnkpIC0tLVxuICBjb25zdCBbZmV0Y2hVc2Vyc0RpcmVjdG9yeSwgeyBkYXRhOiB1c2Vyc0RhdGEsIGxvYWRpbmc6IHVzZXJzTG9hZGluZywgZXJyb3I6IHVzZXJzRXJyb3IgfV0gPVxuICAgIHVzZUxhenlRdWVyeTxVc2Vyc0RpcmVjdG9yeURhdGE+KFVTRVJTX0RJUkVDVE9SWSwge1xuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgIH0pXG5cbiAgY29uc3QgZmV0Y2hSZWNlbnQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKHR5cGUgPT09ICdtY3AnKSB7XG4gICAgICBjb25zdCBzbHVncyA9IHN0YWJsZVNjb3BlLm1jcFNsdWdzID8/IFtdXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgICBzZXRJdGVtcyhtYXBNY3BTbHVnc1RvSXRlbXMoc2x1Z3MsICcnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICBzZXRFcnJvcihmYWxzZSlcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGUgPT09ICdjbGllbnQnKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZWNlbnRDbGllbnRzKClcbiAgICAgICAgY29uc3QgbWFwcGVkID0gKGRhdGEgPz8gW10pLm1hcChjID0+IG1hcENsaWVudFRvSXRlbShjLCAnJykpXG4gICAgICAgIHNldEl0ZW1zKG1hcHBlZClcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZWNlbnRQcm9qZWN0cyhzdGFibGVTY29wZS5jbGllbnRJZCA/IHsgY2xpZW50SWQ6IHN0YWJsZVNjb3BlLmNsaWVudElkIH0gOiB1bmRlZmluZWQpXG4gICAgICAgIGNvbnN0IG1hcHBlZCA9IChBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtdKS5tYXAocCA9PlxuICAgICAgICAgIG1hcFNlYXJjaFRvSXRlbShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgICAgIHRpdGxlOiBwLnRpdGxlLFxuICAgICAgICAgICAgICB0eXBlOiAncHJvamVjdCcsXG4gICAgICAgICAgICAgIGNsaWVudElkOiBwLmNsaWVudElkLFxuICAgICAgICAgICAgICBmZWVJZDogcC5mZWVJZCxcbiAgICAgICAgICAgICAgY2xpZW50TmFtZTogcC5jbGllbnROYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdwcm9qZWN0JyxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIHNldEl0ZW1zKG1hcHBlZClcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3Rhc2snKSB7XG4gICAgICAgIGxldCByZWNlbnRUYXNrRmlsdGVyczogeyBwcm9qZWN0SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsOyBjbGllbnRJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGwgfSB8IHVuZGVmaW5lZFxuICAgICAgICBpZiAoc3RhYmxlU2NvcGUuYWdlbnRFbnRpdHkgPT09ICdwcm9qZWN0Jykge1xuICAgICAgICAgIHJlY2VudFRhc2tGaWx0ZXJzID0geyBwcm9qZWN0SWQ6IHN0YWJsZVNjb3BlLnByb2plY3RJZCB9XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhYmxlU2NvcGUuYWdlbnRFbnRpdHkgPT09ICdjbGllbnQnKSB7XG4gICAgICAgICAgcmVjZW50VGFza0ZpbHRlcnMgPSB7IGNsaWVudElkOiBzdGFibGVTY29wZS5jbGllbnRJZCB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFJlY2VudFRhc2tzKHJlY2VudFRhc2tGaWx0ZXJzKVxuICAgICAgICBzZXRJdGVtcygoZGF0YSA/PyBbXSkubWFwKHRhc2sgPT4gbWFwUmVjZW50VGFza1RvSXRlbSh0YXNrLCAnJywgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93KSkpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd1c2VyJykge1xuICAgICAgICBzZXRJdGVtcyhbbWFwQ29yVXNlclRvVXNlckl0ZW0oY29yVXNlciwgJycsIHQoJ2NvbnRleHRNZW50aW9uLm1lJykpXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEl0ZW1zKFtdKVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgIHNldEl0ZW1zKFtdKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfSwgW3R5cGUsIHN0YWJsZVNjb3BlLCBjb3JVc2VyLCB0LCBpMThuLmxhbmd1YWdlXSlcblxuICAvLyBEaXNwYXJhciBzZWFyY2ggYWwgY2FtYmlhciBkZWJvdW5jZWQgdmFsdWVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBxID0gZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpXG5cbiAgICBpZiAodHlwZSA9PT0gJ21jcCcpIHtcbiAgICAgIGNvbnN0IHNsdWdzID0gc3RhYmxlU2NvcGUubWNwU2x1Z3MgPz8gW11cbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIHNldEl0ZW1zKG1hcE1jcFNsdWdzVG9JdGVtcyhzbHVncywgcSkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXEpIHJldHVyblxuXG4gICAgaWYgKHR5cGUgPT09ICdjbGllbnQnKSB7XG4gICAgICBmZXRjaFNlYXJjaENsaWVudHMoe1xuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBmaWx0ZXI6IHsgbmFtZTogcSB9LFxuICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgcGVyUGFnZTogMjAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICBmZXRjaFVzZXJzRGlyZWN0b3J5KHtcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgZmlsdGVyczogYnVpbGRVc2Vyc0RpcmVjdG9yeUZpbHRlcnMocSwgc3RhYmxlU2NvcGUpLFxuICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gYnVpbGRGaWx0ZXJzRm9yVHlwZSh0eXBlKVxuICAgICAgY29uc3QgZXh0cmEgPSBidWlsZFNlYXJjaEVudGl0aWVzRXh0cmEodHlwZSwgc3RhYmxlU2NvcGUpXG4gICAgICBmZXRjaFNlYXJjaEVudGl0aWVzKHtcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgcSxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIC4uLihleHRyYSAhPT0gdW5kZWZpbmVkID8geyBleHRyYSB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtkZWJvdW5jZWRTZWFyY2hWYWx1ZSwgdHlwZSwgc3RhYmxlU2NvcGUsIGZldGNoU2VhcmNoRW50aXRpZXMsIGZldGNoU2VhcmNoQ2xpZW50cywgZmV0Y2hVc2Vyc0RpcmVjdG9yeV0pXG5cbiAgLy8gU2luY3Jvbml6YXIgcmVzdWx0YWRvcyBkZSBzZWFyY2hcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZSA9PT0gJ21jcCcpIHJldHVyblxuXG4gICAgY29uc3QgcSA9IGRlYm91bmNlZFNlYXJjaFZhbHVlLnRyaW0oKVxuICAgIGlmICghcSkgcmV0dXJuXG5cbiAgICBpZiAodHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIHNldExvYWRpbmcoY2xpZW50c0xvYWRpbmcpXG4gICAgICBpZiAoY2xpZW50c0Vycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGNsaWVudHNEYXRhPy5jbGllbnRzPy5kYXRhKSB7XG4gICAgICAgIHNldEl0ZW1zKGNsaWVudHNEYXRhLmNsaWVudHMuZGF0YS5tYXAoYyA9PiBtYXBDbGllbnRUb0l0ZW0oYywgcSkpKVxuICAgICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd1c2VyJykge1xuICAgICAgc2V0TG9hZGluZyh1c2Vyc0xvYWRpbmcpXG4gICAgICBpZiAodXNlcnNFcnJvcikge1xuICAgICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmICh1c2Vyc0RhdGE/LnVzZXJzRGlyZWN0b3J5Py5kYXRhKSB7XG4gICAgICAgIHNldEl0ZW1zKHVzZXJzRGF0YS51c2Vyc0RpcmVjdG9yeS5kYXRhLm1hcCh1ID0+IG1hcFVzZXJUb0l0ZW0odSwgcSkpKVxuICAgICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2V0TG9hZGluZyhzZWFyY2hMb2FkaW5nKVxuICAgICAgaWYgKHNlYXJjaEVycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaERhdGE/LnNlYXJjaCkge1xuICAgICAgICBzZXRJdGVtcyhzZWFyY2hEYXRhLnNlYXJjaC5tYXAociA9PiBtYXBTZWFyY2hUb0l0ZW0ociwgdHlwZSwgcSwgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93KSkpXG4gICAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIHNlYXJjaERhdGEsXG4gICAgY2xpZW50c0RhdGEsXG4gICAgdXNlcnNEYXRhLFxuICAgIHNlYXJjaExvYWRpbmcsXG4gICAgY2xpZW50c0xvYWRpbmcsXG4gICAgdXNlcnNMb2FkaW5nLFxuICAgIHNlYXJjaEVycm9yLFxuICAgIGNsaWVudHNFcnJvcixcbiAgICB1c2Vyc0Vycm9yLFxuICAgIGRlYm91bmNlZFNlYXJjaFZhbHVlLFxuICAgIHR5cGUsXG4gICAgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93LFxuICBdKVxuXG4gIC8vIEN1YW5kbyBzZSBsaW1waWEgZWwgc2VhcmNoLCB2b2x2ZXIgYSByZWNlbnRzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkZWJvdW5jZWRTZWFyY2hWYWx1ZS50cmltKCkpIHtcbiAgICAgIGZldGNoUmVjZW50KClcbiAgICB9XG4gIH0sIFtkZWJvdW5jZWRTZWFyY2hWYWx1ZSwgZmV0Y2hSZWNlbnRdKVxuXG4gIHJldHVybiB7XG4gICAgaXRlbXMsXG4gICAgbG9hZGluZyxcbiAgICBlcnJvcixcbiAgICBzZWFyY2hWYWx1ZSxcbiAgICB1cGRhdGVTZWFyY2hWYWx1ZTogc2V0U2VhcmNoVmFsdWUsXG4gICAgZmV0Y2hSZWNlbnQsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsU0FBU0EsWUFBWSxRQUFRLGdCQUFnQjtBQUM3QyxTQUFTQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNqRSxTQUFTQyxnQkFBZ0IsUUFBUSxpREFBaUQ7QUFDbEYsU0FBU0MsaUJBQWlCLFFBQVEsbURBQW1EO0FBQ3JGLFNBQVNDLGNBQWMsUUFBUSw2Q0FBNkM7QUFHNUUsU0FBU0MsT0FBTyxRQUFRLHFCQUFxQjtBQUM3QyxTQUFTQyxlQUFlLFFBQVEscUNBQXFDO0FBQ3JFLFNBQVNDLGNBQWMsUUFBUSxxQ0FBcUM7QUFDcEUsU0FBU0MsZUFBZSxRQUFRLHVDQUF1QztBQUN2RSxTQUFTQyx3QkFBd0IsUUFBUSxxQkFBcUI7QUFDOUQsU0FBU0MsV0FBVyxRQUFRLGVBQWU7QUFDM0MsU0FBU0MsSUFBSSxRQUFRLFFBQVE7O0FBMkM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBZ0JBLElBQU1DLG9CQUEwRSxHQUFHO0VBQ2pGQyxPQUFPLEVBQUU7SUFBRUEsT0FBTyxFQUFFLE1BQU07SUFBRUMsUUFBUSxFQUFFO0VBQU0sQ0FBQztFQUM3Q0MsSUFBSSxFQUFFO0lBQUVBLElBQUksRUFBRSxNQUFNO0lBQUVELFFBQVEsRUFBRTtFQUFRO0FBQzFDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNRSwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUFJQyxLQUF5QixFQUFvQztFQUNoRyxJQUFNQyxTQUFTLEdBQ2IsQ0FBQUQsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxL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QyxxQkFBQSxHQUFUbkMsU0FBUyxDQUFFb0MsY0FBYyxjQUFBRCxxQkFBQSxlQUF6QkEscUJBQUEsQ0FBMkJqRCxJQUFJLEVBQUU7UUFDbkN6QixRQUFRLENBQUN1QyxTQUFTLENBQUNvQyxjQUFjLENBQUNsRCxJQUFJLENBQUN4QyxHQUFHLENBQUMsVUFBQXpELENBQUM7VUFBQSxPQUFJRCxhQUFhLENBQUNDLENBQUMsRUFBRTFCLENBQUMsQ0FBQztRQUFBLEVBQUMsQ0FBQztRQUNyRTBHLFFBQVEsQ0FBQyxLQUFLLENBQUM7TUFDakI7SUFDRixDQUFDLE1BQU07TUFDTEosVUFBVSxDQUFDc0IsYUFBYSxDQUFDO01BQ3pCLElBQUlDLFdBQVcsRUFBRTtRQUNmbkIsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNkO01BQ0Y7TUFDQSxJQUFJZ0IsVUFBVSxhQUFWQSxVQUFVLGVBQVZBLFVBQVUsQ0FBRW9ELE1BQU0sRUFBRTtRQUN0QjVFLFFBQVEsQ0FBQ3dCLFVBQVUsQ0FBQ29ELE1BQU0sQ0FBQzNGLEdBQUcsQ0FBQyxVQUFBekIsQ0FBQztVQUFBLE9BQUlELGVBQWUsQ0FBQ0MsQ0FBQyxFQUFFN0QsSUFBSSxFQUFFRyxDQUFDLEVBQUVvRCx3QkFBd0IsQ0FBQztRQUFBLEVBQUMsQ0FBQztRQUMzRnNELFFBQVEsQ0FBQyxLQUFLLENBQUM7TUFDakI7SUFDRjtFQUNGLENBQUMsRUFBRSxDQUNEZ0IsVUFBVSxFQUNWUSxXQUFXLEVBQ1hPLFNBQVMsRUFDVGIsYUFBYSxFQUNiTyxjQUFjLEVBQ2RPLFlBQVksRUFDWmIsV0FBVyxFQUNYTyxZQUFZLEVBQ1pPLFVBQVUsRUFDVjdDLG9CQUFvQixFQUNwQmpHLElBQUksRUFDSnVELHdCQUF3QixDQUN6QixDQUFDOztFQUVGO0VBQ0EzRixTQUFTLENBQUMsWUFBTTtJQUNkLElBQUksQ0FBQ3FJLG9CQUFvQixDQUFDMUQsSUFBSSxDQUFDLENBQUMsRUFBRTtNQUNoQ3dHLFdBQVcsQ0FBQyxDQUFDO0lBQ2Y7RUFDRixDQUFDLEVBQUUsQ0FBQzlDLG9CQUFvQixFQUFFOEMsV0FBVyxDQUFDLENBQUM7RUFFdkMsT0FBTztJQUNMM0MsS0FBSyxFQUFMQSxLQUFLO0lBQ0xJLE9BQU8sRUFBUEEsT0FBTztJQUNQSSxLQUFLLEVBQUxBLEtBQUs7SUFDTGxHLFdBQVcsRUFBWEEsV0FBVztJQUNYd0ssaUJBQWlCLEVBQUVsRixjQUFjO0lBQ2pDK0MsV0FBVyxFQUFYQTtFQUNGLENBQUM7QUFDSCxDQUFDIiwiaWdub3JlTGlzdCI6W119