@projectcor/maia-components 2.11.40-10 → 2.11.40-2
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.
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +3 -5
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +4 -7
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +30 -96
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +44 -43
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +30 -61
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +4 -30
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +1 -5
- package/lib/components/molecules/ChatAIMessages/newStyles.js +3 -3
- package/lib/context/cor-user.js +1 -1
- package/lib/hooks/useContextMentions.js +14 -14
- package/lib/hooks/useEntitySearch.js +65 -535
- package/lib/hooks/useMentionPopover.js +4 -17
- package/lib/hooks/useTextOverflowEllipsisTooltip.js +2 -1
- package/lib/services/maia/RecentTasks/getRecentTasks.js +4 -15
- package/lib/services/query/entitySearchQuery.js +2 -4
- package/lib/utils/renderContextMentions.js +9 -15
- package/package.json +1 -2
|
@@ -1,28 +1,21 @@
|
|
|
1
|
-
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
2
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
4
3
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
5
|
-
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
6
4
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
7
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";
|
|
8
7
|
import { useLazyQuery } from '@apollo/client';
|
|
9
8
|
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
10
9
|
import { getRecentClients } from '../services/maia/RecentClients/getRecentClients';
|
|
11
10
|
import { getRecentProjects } from '../services/maia/RecentProjects/getRecentProjects';
|
|
12
11
|
import { getRecentTasks } from '../services/maia/RecentTasks/getRecentTasks';
|
|
13
12
|
import { useUser } from '../context/cor-user';
|
|
14
|
-
import {
|
|
13
|
+
import { SEARCH_ENTITIES } from '../services/query/entitySearchQuery';
|
|
15
14
|
import { SEARCH_CLIENTS } from '../services/query/ClientSearchQuery';
|
|
16
15
|
import { USERS_DIRECTORY } from '../services/query/usersDirectoryQuery';
|
|
17
16
|
import { SEARCH_QUERY_DEBOUNCE_MS } from '../constants/config';
|
|
18
17
|
import { useDebounce } from './useDebounce';
|
|
19
18
|
import { useT } from './useT';
|
|
20
|
-
var normalizePositiveInt = function normalizePositiveInt(value, fallback) {
|
|
21
|
-
var parsed = Number(value);
|
|
22
|
-
if (!Number.isFinite(parsed)) return fallback;
|
|
23
|
-
var normalized = Math.floor(parsed);
|
|
24
|
-
return normalized > 0 ? normalized : fallback;
|
|
25
|
-
};
|
|
26
19
|
|
|
27
20
|
/**
|
|
28
21
|
* Restringe los resultados al `clientId`/`projectId` del agente activo.
|
|
@@ -83,15 +76,20 @@ var buildTaskSearchExtra = function buildTaskSearchExtra(scope) {
|
|
|
83
76
|
};
|
|
84
77
|
|
|
85
78
|
/**
|
|
86
|
-
* Tab proyecto:
|
|
87
|
-
*
|
|
79
|
+
* Tab proyecto: temporalmente NO enviamos `clientId` en `extra`.
|
|
80
|
+
* El backend hoy no está aplicando bien ese filtro para project search.
|
|
81
|
+
*
|
|
82
|
+
* TODO: reactivar cuando el filtro por clientId en projects funcione.
|
|
88
83
|
*/
|
|
89
84
|
var buildProjectSearchExtra = function buildProjectSearchExtra(scope) {
|
|
90
85
|
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;
|
|
91
|
-
if (
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
86
|
+
// if (rawClient) {
|
|
87
|
+
// // Filtro desactivado temporalmente.
|
|
88
|
+
// }
|
|
89
|
+
// if (!rawClient) return undefined
|
|
90
|
+
// return JSON.stringify([{ clientId: rawClient }])
|
|
91
|
+
if (rawClient) return undefined;
|
|
92
|
+
return undefined;
|
|
95
93
|
};
|
|
96
94
|
var buildSearchEntitiesExtra = function buildSearchEntitiesExtra(type, scope) {
|
|
97
95
|
if (type === 'task') return buildTaskSearchExtra(scope);
|
|
@@ -115,14 +113,17 @@ var buildFiltersForType = function buildFiltersForType(type) {
|
|
|
115
113
|
* del scope en caso de que el backend los aproveche para filtrar por
|
|
116
114
|
* contexto (si no los entiende los ignora).
|
|
117
115
|
*/
|
|
118
|
-
var buildUsersDirectoryFilters = function buildUsersDirectoryFilters(q) {
|
|
116
|
+
var buildUsersDirectoryFilters = function buildUsersDirectoryFilters(q, scope) {
|
|
119
117
|
var base = {
|
|
120
118
|
withPosition: true,
|
|
121
|
-
withTeams: true
|
|
119
|
+
withTeams: true,
|
|
120
|
+
searchInput: q
|
|
122
121
|
};
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
122
|
+
if ((scope === null || scope === void 0 ? void 0 : scope.clientId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.clientId) !== null && scope.clientId !== '') {
|
|
123
|
+
base.clientId = String(scope.clientId);
|
|
124
|
+
}
|
|
125
|
+
if ((scope === null || scope === void 0 ? void 0 : scope.projectId) !== undefined && (scope === null || scope === void 0 ? void 0 : scope.projectId) !== null && scope.projectId !== '') {
|
|
126
|
+
base.projectId = String(scope.projectId);
|
|
126
127
|
}
|
|
127
128
|
return JSON.stringify(base);
|
|
128
129
|
};
|
|
@@ -135,14 +136,6 @@ var highlightRange = function highlightRange(text, searchValue) {
|
|
|
135
136
|
length: searchValue.length
|
|
136
137
|
};
|
|
137
138
|
};
|
|
138
|
-
var firstDefined = function firstDefined() {
|
|
139
|
-
for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
140
|
-
values[_key] = arguments[_key];
|
|
141
|
-
}
|
|
142
|
-
return values.find(function (value) {
|
|
143
|
-
return value !== undefined && value !== null;
|
|
144
|
-
});
|
|
145
|
-
};
|
|
146
139
|
var mapClientToItem = function mapClientToItem(c, searchValue) {
|
|
147
140
|
var _c$totalProyectos, _c$totalProyectos2;
|
|
148
141
|
return {
|
|
@@ -180,10 +173,9 @@ var mapUserToItem = function mapUserToItem(u, searchValue) {
|
|
|
180
173
|
};
|
|
181
174
|
};
|
|
182
175
|
var mapCorUserToUserItem = function mapCorUserToUserItem(user, searchValue, meLabel) {
|
|
183
|
-
var _user$firstName, _user$lastName, _user$user_position, _user$
|
|
176
|
+
var _user$firstName, _user$lastName, _user$user_position, _user$role;
|
|
184
177
|
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();
|
|
185
|
-
|
|
186
|
-
var positionLine = ((_user$user_position = user.user_position) === null || _user$user_position === void 0 ? void 0 : _user$user_position.trim()) || null;
|
|
178
|
+
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;
|
|
187
179
|
return {
|
|
188
180
|
id: user.id,
|
|
189
181
|
type: 'user',
|
|
@@ -194,69 +186,35 @@ var mapCorUserToUserItem = function mapCorUserToUserItem(user, searchValue, meLa
|
|
|
194
186
|
name: fullName || String(user.id),
|
|
195
187
|
picture: user.picture || null,
|
|
196
188
|
positionName: positionLine,
|
|
197
|
-
email:
|
|
189
|
+
email: null
|
|
198
190
|
}
|
|
199
191
|
};
|
|
200
192
|
};
|
|
201
193
|
var mapRecentTaskToItem = function mapRecentTaskToItem(task, searchValue) {
|
|
202
194
|
var _task$projectName;
|
|
203
|
-
var showProjectNameInTaskRow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
204
195
|
var primary = task.title && task.title.trim() || String(task.id);
|
|
205
|
-
var projectName = showProjectNameInTaskRow ? (_task$projectName = task.projectName) !== null && _task$projectName !== void 0 ? _task$projectName : null : null;
|
|
206
196
|
return {
|
|
207
197
|
id: task.id,
|
|
208
198
|
type: 'task',
|
|
209
199
|
primary: primary,
|
|
210
200
|
primaryHighlight: highlightRange(primary, searchValue),
|
|
211
|
-
breadcrumb: projectName ? {
|
|
212
|
-
parent: projectName
|
|
201
|
+
breadcrumb: task.projectName ? {
|
|
202
|
+
parent: task.projectName
|
|
213
203
|
} : undefined,
|
|
214
204
|
raw: {
|
|
215
205
|
id: task.id,
|
|
216
206
|
name: primary,
|
|
217
|
-
projectName: projectName
|
|
207
|
+
projectName: (_task$projectName = task.projectName) !== null && _task$projectName !== void 0 ? _task$projectName : null
|
|
218
208
|
}
|
|
219
209
|
};
|
|
220
210
|
};
|
|
221
|
-
var normalizeTaskFamilyRecord = function normalizeTaskFamilyRecord(record) {
|
|
222
|
-
var _record$title, _firstDefined, _record$project, _record$father, _record$father2;
|
|
223
|
-
var taskFamilyId = record._id;
|
|
224
|
-
var id = taskFamilyId;
|
|
225
|
-
if (id === undefined || id === null || String(id) === '') return null;
|
|
226
|
-
var title = ((_record$title = record.title) !== null && _record$title !== void 0 ? _record$title : '').trim() || String(id);
|
|
227
|
-
var projectName = (_firstDefined = firstDefined((_record$project = record.project) === null || _record$project === void 0 ? void 0 : _record$project.name, (_record$father = record.father) === null || _record$father === void 0 ? void 0 : _record$father.title)) !== null && _firstDefined !== void 0 ? _firstDefined : null;
|
|
228
|
-
var hasFather = !!firstDefined(record.taskFather, (_record$father2 = record.father) === null || _record$father2 === void 0 ? void 0 : _record$father2.id);
|
|
229
|
-
return {
|
|
230
|
-
id: id,
|
|
231
|
-
title: title,
|
|
232
|
-
type: hasFather ? 'subtask' : 'task',
|
|
233
|
-
projectName: projectName
|
|
234
|
-
};
|
|
235
|
-
};
|
|
236
|
-
var normalizeProjectsFallbackRecord = function normalizeProjectsFallbackRecord(record) {
|
|
237
|
-
var _record$name, _firstDefined2, _record$client, _record$client$name, _record$client2;
|
|
238
|
-
var id = record.id;
|
|
239
|
-
if (id === undefined || id === null || String(id) === '') return null;
|
|
240
|
-
var title = (_record$name = record.name) !== null && _record$name !== void 0 ? _record$name : '';
|
|
241
|
-
var clientId = (_firstDefined2 = firstDefined(record.clientId, (_record$client = record.client) === null || _record$client === void 0 ? void 0 : _record$client.id)) !== null && _firstDefined2 !== void 0 ? _firstDefined2 : null;
|
|
242
|
-
var clientName = (_record$client$name = (_record$client2 = record.client) === null || _record$client2 === void 0 ? void 0 : _record$client2.name) !== null && _record$client$name !== void 0 ? _record$client$name : null;
|
|
243
|
-
return {
|
|
244
|
-
id: id,
|
|
245
|
-
title: title,
|
|
246
|
-
type: 'project',
|
|
247
|
-
clientId: clientId,
|
|
248
|
-
clientName: clientName
|
|
249
|
-
};
|
|
250
|
-
};
|
|
251
211
|
var mapSearchToItem = function mapSearchToItem(r, type, searchValue) {
|
|
252
|
-
var _r$projectName, _r$
|
|
253
|
-
var showProjectNameInTaskRow = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
212
|
+
var _r$projectName, _r$clientId, _r$clientName, _r$projectName2, _r$feeId, _father$title;
|
|
254
213
|
var primary = r.title || r.projectName || '';
|
|
255
214
|
var parent;
|
|
256
215
|
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;
|
|
257
216
|
var father = type === 'task' ? r.father : null;
|
|
258
217
|
var hasFather = type === 'task' && father != null && father.id != null && String(father.id).length > 0;
|
|
259
|
-
var taskProjectName = type === 'task' && !showProjectNameInTaskRow ? null : (_r$projectName2 = r.projectName) !== null && _r$projectName2 !== void 0 ? _r$projectName2 : null;
|
|
260
218
|
return {
|
|
261
219
|
id: r.id,
|
|
262
220
|
type: type,
|
|
@@ -270,7 +228,7 @@ var mapSearchToItem = function mapSearchToItem(r, type, searchValue) {
|
|
|
270
228
|
name: primary,
|
|
271
229
|
clientId: (_r$clientId = r.clientId) !== null && _r$clientId !== void 0 ? _r$clientId : null,
|
|
272
230
|
clientName: (_r$clientName = r.clientName) !== null && _r$clientName !== void 0 ? _r$clientName : null,
|
|
273
|
-
projectName:
|
|
231
|
+
projectName: (_r$projectName2 = r.projectName) !== null && _r$projectName2 !== void 0 ? _r$projectName2 : null,
|
|
274
232
|
feeId: (_r$feeId = r.feeId) !== null && _r$feeId !== void 0 ? _r$feeId : null,
|
|
275
233
|
fatherId: hasFather ? father.id : null,
|
|
276
234
|
fatherTitle: hasFather ? ((_father$title = father.title) === null || _father$title === void 0 ? void 0 : _father$title.trim()) || null : null
|
|
@@ -309,7 +267,8 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
309
267
|
var _scope$mcpSlugs;
|
|
310
268
|
var corUser = useUser();
|
|
311
269
|
var _useT = useT(),
|
|
312
|
-
t = _useT.t
|
|
270
|
+
t = _useT.t,
|
|
271
|
+
i18n = _useT.i18n;
|
|
313
272
|
var _useState = useState(''),
|
|
314
273
|
_useState2 = _slicedToArray(_useState, 2),
|
|
315
274
|
searchValue = _useState2[0],
|
|
@@ -327,28 +286,7 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
327
286
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
328
287
|
error = _useState8[0],
|
|
329
288
|
setError = _useState8[1];
|
|
330
|
-
var _useState9 = useState(false),
|
|
331
|
-
_useState0 = _slicedToArray(_useState9, 2),
|
|
332
|
-
hideRecentsLabel = _useState0[0],
|
|
333
|
-
setHideRecentsLabel = _useState0[1];
|
|
334
|
-
var _useState1 = useState(false),
|
|
335
|
-
_useState10 = _slicedToArray(_useState1, 2),
|
|
336
|
-
hasMore = _useState10[0],
|
|
337
|
-
setHasMore = _useState10[1];
|
|
338
|
-
var _useState11 = useState(false),
|
|
339
|
-
_useState12 = _slicedToArray(_useState11, 2),
|
|
340
|
-
isLoadingMore = _useState12[0],
|
|
341
|
-
setIsLoadingMore = _useState12[1];
|
|
342
|
-
var _useState13 = useState(1),
|
|
343
|
-
_useState14 = _slicedToArray(_useState13, 2),
|
|
344
|
-
currentPage = _useState14[0],
|
|
345
|
-
setCurrentPage = _useState14[1];
|
|
346
|
-
var _useState15 = useState('none'),
|
|
347
|
-
_useState16 = _slicedToArray(_useState15, 2),
|
|
348
|
-
activePaginationSource = _useState16[0],
|
|
349
|
-
setActivePaginationSource = _useState16[1];
|
|
350
289
|
var mcpSlugsKey = ((_scope$mcpSlugs = scope === null || scope === void 0 ? void 0 : scope.mcpSlugs) !== null && _scope$mcpSlugs !== void 0 ? _scope$mcpSlugs : []).join('|');
|
|
351
|
-
var showProjectNameInTaskRow = (scope === null || scope === void 0 ? void 0 : scope.agentEntity) !== 'project';
|
|
352
290
|
|
|
353
291
|
// Estabilizamos el scope para no disparar fetchs por cambios de identidad de objeto.
|
|
354
292
|
var stableScope = useMemo(function () {
|
|
@@ -396,46 +334,8 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
396
334
|
usersData = _useLazyQuery6$.data,
|
|
397
335
|
usersLoading = _useLazyQuery6$.loading,
|
|
398
336
|
usersError = _useLazyQuery6$.error;
|
|
399
|
-
var syncUsersPagination = useCallback(function (payload) {
|
|
400
|
-
var _payload$usersDirecto, _payload$usersDirecto2;
|
|
401
|
-
var page = normalizePositiveInt(payload === null || payload === void 0 || (_payload$usersDirecto = payload.usersDirectory) === null || _payload$usersDirecto === void 0 ? void 0 : _payload$usersDirecto.page, 1);
|
|
402
|
-
var lastPage = normalizePositiveInt(payload === null || payload === void 0 || (_payload$usersDirecto2 = payload.usersDirectory) === null || _payload$usersDirecto2 === void 0 ? void 0 : _payload$usersDirecto2.lastPage, page);
|
|
403
|
-
setCurrentPage(page);
|
|
404
|
-
setHasMore(page < lastPage);
|
|
405
|
-
}, []);
|
|
406
|
-
var syncClientsPagination = useCallback(function (payload) {
|
|
407
|
-
var _payload$clients, _payload$clients2;
|
|
408
|
-
var page = normalizePositiveInt(payload === null || payload === void 0 || (_payload$clients = payload.clients) === null || _payload$clients === void 0 ? void 0 : _payload$clients.page, 1);
|
|
409
|
-
var lastPage = normalizePositiveInt(payload === null || payload === void 0 || (_payload$clients2 = payload.clients) === null || _payload$clients2 === void 0 ? void 0 : _payload$clients2.lastPage, page);
|
|
410
|
-
setCurrentPage(page);
|
|
411
|
-
setHasMore(page < lastPage);
|
|
412
|
-
}, []);
|
|
413
|
-
var syncTaskFallbackPagination = useCallback(function (payload) {
|
|
414
|
-
var _payload$taskFamily, _payload$taskFamily2;
|
|
415
|
-
var page = normalizePositiveInt(payload === null || payload === void 0 || (_payload$taskFamily = payload.taskFamily) === null || _payload$taskFamily === void 0 ? void 0 : _payload$taskFamily.page, 1);
|
|
416
|
-
var lastPage = normalizePositiveInt(payload === null || payload === void 0 || (_payload$taskFamily2 = payload.taskFamily) === null || _payload$taskFamily2 === void 0 ? void 0 : _payload$taskFamily2.lastPage, page);
|
|
417
|
-
setCurrentPage(page);
|
|
418
|
-
setHasMore(page < lastPage);
|
|
419
|
-
}, []);
|
|
420
|
-
var syncProjectFallbackPagination = useCallback(function (payload) {
|
|
421
|
-
var _payload$projects, _payload$projects2;
|
|
422
|
-
var page = normalizePositiveInt(payload === null || payload === void 0 || (_payload$projects = payload.projects) === null || _payload$projects === void 0 ? void 0 : _payload$projects.page, 1);
|
|
423
|
-
var lastPage = normalizePositiveInt(payload === null || payload === void 0 || (_payload$projects2 = payload.projects) === null || _payload$projects2 === void 0 ? void 0 : _payload$projects2.lastPage, page);
|
|
424
|
-
setCurrentPage(page);
|
|
425
|
-
setHasMore(page < lastPage);
|
|
426
|
-
}, []);
|
|
427
|
-
var _useLazyQuery7 = useLazyQuery(TASK_FAMILY_FALLBACK, {
|
|
428
|
-
fetchPolicy: 'network-only'
|
|
429
|
-
}),
|
|
430
|
-
_useLazyQuery8 = _slicedToArray(_useLazyQuery7, 1),
|
|
431
|
-
fetchTaskFamilyFallback = _useLazyQuery8[0];
|
|
432
|
-
var _useLazyQuery9 = useLazyQuery(PROJECTS_FALLBACK, {
|
|
433
|
-
fetchPolicy: 'network-only'
|
|
434
|
-
}),
|
|
435
|
-
_useLazyQuery0 = _slicedToArray(_useLazyQuery9, 1),
|
|
436
|
-
fetchProjectsFallback = _useLazyQuery0[0];
|
|
437
337
|
var fetchRecent = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
438
|
-
var _stableScope$mcpSlugs, slugs, data, mapped, _data, _mapped,
|
|
338
|
+
var _stableScope$mcpSlugs, slugs, data, mapped, _data, _mapped, _data2, _t;
|
|
439
339
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
440
340
|
while (1) switch (_context.prev = _context.next) {
|
|
441
341
|
case 0:
|
|
@@ -447,9 +347,6 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
447
347
|
setLoading(false);
|
|
448
348
|
setError(false);
|
|
449
349
|
setItems(mapMcpSlugsToItems(slugs, ''));
|
|
450
|
-
setHideRecentsLabel(false);
|
|
451
|
-
setActivePaginationSource('none');
|
|
452
|
-
setHasMore(false);
|
|
453
350
|
return _context.abrupt("return");
|
|
454
351
|
case 1:
|
|
455
352
|
setLoading(true);
|
|
@@ -467,14 +364,11 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
467
364
|
return mapClientToItem(c, '');
|
|
468
365
|
});
|
|
469
366
|
setItems(mapped);
|
|
470
|
-
|
|
471
|
-
setActivePaginationSource('none');
|
|
472
|
-
setHasMore(false);
|
|
473
|
-
_context.next = 17;
|
|
367
|
+
_context.next = 9;
|
|
474
368
|
break;
|
|
475
369
|
case 4:
|
|
476
370
|
if (!(type === 'project')) {
|
|
477
|
-
_context.next =
|
|
371
|
+
_context.next = 6;
|
|
478
372
|
break;
|
|
479
373
|
}
|
|
480
374
|
_context.next = 5;
|
|
@@ -493,161 +387,47 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
493
387
|
clientName: p.clientName
|
|
494
388
|
}, 'project', '');
|
|
495
389
|
});
|
|
496
|
-
if (!(_mapped.length === 0)) {
|
|
497
|
-
_context.next = 7;
|
|
498
|
-
break;
|
|
499
|
-
}
|
|
500
|
-
argumentsFilter = stableScope.clientId !== null && stableScope.clientId !== undefined && stableScope.clientId !== '' ? {
|
|
501
|
-
client_id: [String(stableScope.clientId)]
|
|
502
|
-
} : undefined;
|
|
503
|
-
_context.next = 6;
|
|
504
|
-
return fetchProjectsFallback({
|
|
505
|
-
variables: _objectSpread(_objectSpread({}, argumentsFilter ? {
|
|
506
|
-
arguments: argumentsFilter
|
|
507
|
-
} : {}), {}, {
|
|
508
|
-
page: 1,
|
|
509
|
-
perPage: 20
|
|
510
|
-
})
|
|
511
|
-
});
|
|
512
|
-
case 6:
|
|
513
|
-
_yield$fetchProjectsF = _context.sent;
|
|
514
|
-
fallbackData = _yield$fetchProjectsF.data;
|
|
515
|
-
fallbackMapped = ((_fallbackData$project = fallbackData === null || fallbackData === void 0 || (_fallbackData$project2 = fallbackData.projects) === null || _fallbackData$project2 === void 0 ? void 0 : _fallbackData$project2.data) !== null && _fallbackData$project !== void 0 ? _fallbackData$project : []).map(normalizeProjectsFallbackRecord).filter(function (item) {
|
|
516
|
-
return item !== null;
|
|
517
|
-
}).map(function (item) {
|
|
518
|
-
return mapSearchToItem(item, 'project', '');
|
|
519
|
-
});
|
|
520
|
-
_mapped = fallbackMapped;
|
|
521
|
-
setHideRecentsLabel(fallbackMapped.length > 0);
|
|
522
|
-
setActivePaginationSource('project-fallback');
|
|
523
|
-
syncProjectFallbackPagination(fallbackData);
|
|
524
|
-
_context.next = 8;
|
|
525
|
-
break;
|
|
526
|
-
case 7:
|
|
527
|
-
setHideRecentsLabel(false);
|
|
528
|
-
setActivePaginationSource('none');
|
|
529
|
-
setHasMore(false);
|
|
530
|
-
case 8:
|
|
531
390
|
setItems(_mapped);
|
|
532
|
-
_context.next =
|
|
391
|
+
_context.next = 9;
|
|
533
392
|
break;
|
|
534
|
-
case
|
|
393
|
+
case 6:
|
|
535
394
|
if (!(type === 'task')) {
|
|
536
|
-
_context.next =
|
|
395
|
+
_context.next = 8;
|
|
537
396
|
break;
|
|
538
397
|
}
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
};
|
|
543
|
-
} else if (stableScope.agentEntity === 'client') {
|
|
544
|
-
recentTaskFilters = {
|
|
545
|
-
clientId: stableScope.clientId
|
|
546
|
-
};
|
|
547
|
-
}
|
|
548
|
-
_context.next = 10;
|
|
549
|
-
return getRecentTasks(recentTaskFilters);
|
|
550
|
-
case 10:
|
|
398
|
+
_context.next = 7;
|
|
399
|
+
return getRecentTasks();
|
|
400
|
+
case 7:
|
|
551
401
|
_data2 = _context.sent;
|
|
552
|
-
|
|
553
|
-
return mapRecentTaskToItem(task, ''
|
|
554
|
-
});
|
|
555
|
-
|
|
556
|
-
_context.next = 12;
|
|
557
|
-
break;
|
|
558
|
-
}
|
|
559
|
-
filter = {};
|
|
560
|
-
if (stableScope.projectId !== null && stableScope.projectId !== undefined && stableScope.projectId !== '') {
|
|
561
|
-
filter.projectIds = [String(stableScope.projectId)];
|
|
562
|
-
}
|
|
563
|
-
if (stableScope.clientId !== null && stableScope.clientId !== undefined && stableScope.clientId !== '') {
|
|
564
|
-
filter.clientIds = [String(stableScope.clientId)];
|
|
565
|
-
}
|
|
566
|
-
_context.next = 11;
|
|
567
|
-
return fetchTaskFamilyFallback({
|
|
568
|
-
variables: _objectSpread(_objectSpread({}, Object.keys(filter).length > 0 ? {
|
|
569
|
-
filter: filter
|
|
570
|
-
} : {}), {}, {
|
|
571
|
-
pagination: {
|
|
572
|
-
offset: 0,
|
|
573
|
-
size: 20
|
|
574
|
-
}
|
|
575
|
-
})
|
|
576
|
-
});
|
|
577
|
-
case 11:
|
|
578
|
-
_yield$fetchTaskFamil = _context.sent;
|
|
579
|
-
_fallbackData = _yield$fetchTaskFamil.data;
|
|
580
|
-
taskItems = ((_fallbackData$taskFam = _fallbackData === null || _fallbackData === void 0 || (_fallbackData$taskFam2 = _fallbackData.taskFamily) === null || _fallbackData$taskFam2 === void 0 ? void 0 : _fallbackData$taskFam2.data) !== null && _fallbackData$taskFam !== void 0 ? _fallbackData$taskFam : []).map(normalizeTaskFamilyRecord).filter(function (item) {
|
|
581
|
-
return item !== null;
|
|
582
|
-
}).map(function (task) {
|
|
583
|
-
return mapRecentTaskToItem(task, '', showProjectNameInTaskRow);
|
|
584
|
-
});
|
|
585
|
-
setHideRecentsLabel(taskItems.length > 0);
|
|
586
|
-
setActivePaginationSource('task-fallback');
|
|
587
|
-
syncTaskFallbackPagination(_fallbackData);
|
|
588
|
-
_context.next = 13;
|
|
402
|
+
setItems((_data2 !== null && _data2 !== void 0 ? _data2 : []).map(function (task) {
|
|
403
|
+
return mapRecentTaskToItem(task, '');
|
|
404
|
+
}));
|
|
405
|
+
_context.next = 9;
|
|
589
406
|
break;
|
|
590
|
-
case
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
setItems(taskItems);
|
|
596
|
-
_context.next = 17;
|
|
597
|
-
break;
|
|
598
|
-
case 14:
|
|
599
|
-
if (!(type === 'user')) {
|
|
600
|
-
_context.next = 16;
|
|
601
|
-
break;
|
|
407
|
+
case 8:
|
|
408
|
+
if (type === 'user') {
|
|
409
|
+
setItems([mapCorUserToUserItem(corUser, '', t('contextMention.me'))]);
|
|
410
|
+
} else {
|
|
411
|
+
setItems([]);
|
|
602
412
|
}
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
variables: {
|
|
606
|
-
filters: buildUsersDirectoryFilters(''),
|
|
607
|
-
page: 1
|
|
608
|
-
}
|
|
609
|
-
});
|
|
610
|
-
case 15:
|
|
611
|
-
_yield$fetchUsersDire = _context.sent;
|
|
612
|
-
_data3 = _yield$fetchUsersDire.data;
|
|
613
|
-
_mapped2 = ((_data3$usersDirectory = _data3 === null || _data3 === void 0 || (_data3$usersDirectory2 = _data3.usersDirectory) === null || _data3$usersDirectory2 === void 0 ? void 0 : _data3$usersDirectory2.data) !== null && _data3$usersDirectory !== void 0 ? _data3$usersDirectory : []).map(function (u) {
|
|
614
|
-
return mapUserToItem(u, '');
|
|
615
|
-
});
|
|
616
|
-
meItem = mapCorUserToUserItem(corUser, '', t('contextMention.me'));
|
|
617
|
-
withoutMe = _mapped2.filter(function (item) {
|
|
618
|
-
return String(item.id) !== String(meItem.id);
|
|
619
|
-
});
|
|
620
|
-
setItems([meItem].concat(_toConsumableArray(withoutMe)));
|
|
621
|
-
syncUsersPagination(_data3);
|
|
622
|
-
setHideRecentsLabel(false);
|
|
623
|
-
setActivePaginationSource('users');
|
|
624
|
-
_context.next = 17;
|
|
625
|
-
break;
|
|
626
|
-
case 16:
|
|
627
|
-
setItems([]);
|
|
628
|
-
setHideRecentsLabel(false);
|
|
629
|
-
setActivePaginationSource('none');
|
|
630
|
-
setHasMore(false);
|
|
631
|
-
setCurrentPage(1);
|
|
632
|
-
case 17:
|
|
633
|
-
_context.next = 19;
|
|
413
|
+
case 9:
|
|
414
|
+
_context.next = 11;
|
|
634
415
|
break;
|
|
635
|
-
case
|
|
636
|
-
_context.prev =
|
|
416
|
+
case 10:
|
|
417
|
+
_context.prev = 10;
|
|
637
418
|
_t = _context["catch"](2);
|
|
638
419
|
setError(true);
|
|
639
420
|
setItems([]);
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
_context.prev = 19;
|
|
421
|
+
case 11:
|
|
422
|
+
_context.prev = 11;
|
|
643
423
|
setLoading(false);
|
|
644
|
-
return _context.finish(
|
|
645
|
-
case
|
|
424
|
+
return _context.finish(11);
|
|
425
|
+
case 12:
|
|
646
426
|
case "end":
|
|
647
427
|
return _context.stop();
|
|
648
428
|
}
|
|
649
|
-
}, _callee, null, [[2,
|
|
650
|
-
})), [type, stableScope,
|
|
429
|
+
}, _callee, null, [[2, 10, 11, 12]]);
|
|
430
|
+
})), [type, stableScope, corUser, t, i18n.language]);
|
|
651
431
|
|
|
652
432
|
// Disparar search al cambiar debounced value
|
|
653
433
|
useEffect(function () {
|
|
@@ -671,15 +451,13 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
671
451
|
perPage: 20
|
|
672
452
|
}
|
|
673
453
|
});
|
|
674
|
-
setActivePaginationSource('clients-search');
|
|
675
454
|
} else if (type === 'user') {
|
|
676
455
|
fetchUsersDirectory({
|
|
677
456
|
variables: {
|
|
678
|
-
filters: buildUsersDirectoryFilters(q),
|
|
457
|
+
filters: buildUsersDirectoryFilters(q, stableScope),
|
|
679
458
|
page: 1
|
|
680
459
|
}
|
|
681
460
|
});
|
|
682
|
-
setActivePaginationSource('users');
|
|
683
461
|
} else {
|
|
684
462
|
var filters = buildFiltersForType(type);
|
|
685
463
|
var extra = buildSearchEntitiesExtra(type, stableScope);
|
|
@@ -691,8 +469,6 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
691
469
|
extra: extra
|
|
692
470
|
} : {})
|
|
693
471
|
});
|
|
694
|
-
setActivePaginationSource('none');
|
|
695
|
-
setHasMore(false);
|
|
696
472
|
}
|
|
697
473
|
}, [debouncedSearchValue, type, stableScope, fetchSearchEntities, fetchSearchClients, fetchUsersDirectory]);
|
|
698
474
|
|
|
@@ -701,7 +477,6 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
701
477
|
if (type === 'mcp') return;
|
|
702
478
|
var q = debouncedSearchValue.trim();
|
|
703
479
|
if (!q) return;
|
|
704
|
-
setHideRecentsLabel(false);
|
|
705
480
|
if (type === 'client') {
|
|
706
481
|
var _clientsData$clients;
|
|
707
482
|
setLoading(clientsLoading);
|
|
@@ -713,7 +488,6 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
713
488
|
setItems(clientsData.clients.data.map(function (c) {
|
|
714
489
|
return mapClientToItem(c, q);
|
|
715
490
|
}));
|
|
716
|
-
syncClientsPagination(clientsData);
|
|
717
491
|
setError(false);
|
|
718
492
|
}
|
|
719
493
|
} else if (type === 'user') {
|
|
@@ -724,19 +498,9 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
724
498
|
return;
|
|
725
499
|
}
|
|
726
500
|
if (usersData !== null && usersData !== void 0 && (_usersData$usersDirec = usersData.usersDirectory) !== null && _usersData$usersDirec !== void 0 && _usersData$usersDirec.data) {
|
|
727
|
-
|
|
501
|
+
setItems(usersData.usersDirectory.data.map(function (u) {
|
|
728
502
|
return mapUserToItem(u, q);
|
|
729
|
-
});
|
|
730
|
-
var meId = String(corUser.id);
|
|
731
|
-
var hasMeInResults = mapped.some(function (item) {
|
|
732
|
-
return String(item.id) === meId;
|
|
733
|
-
});
|
|
734
|
-
var withoutMe = mapped.filter(function (item) {
|
|
735
|
-
return String(item.id) !== meId;
|
|
736
|
-
});
|
|
737
|
-
var meItem = mapCorUserToUserItem(corUser, q, t('contextMention.me'));
|
|
738
|
-
setItems(hasMeInResults ? [meItem].concat(_toConsumableArray(withoutMe)) : mapped);
|
|
739
|
-
syncUsersPagination(usersData);
|
|
503
|
+
}));
|
|
740
504
|
setError(false);
|
|
741
505
|
}
|
|
742
506
|
} else {
|
|
@@ -747,242 +511,12 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
747
511
|
}
|
|
748
512
|
if (searchData !== null && searchData !== void 0 && searchData.search) {
|
|
749
513
|
setItems(searchData.search.map(function (r) {
|
|
750
|
-
return mapSearchToItem(r, type, q
|
|
514
|
+
return mapSearchToItem(r, type, q);
|
|
751
515
|
}));
|
|
752
|
-
setHasMore(false);
|
|
753
516
|
setError(false);
|
|
754
517
|
}
|
|
755
518
|
}
|
|
756
|
-
}, [searchData, clientsData, usersData, searchLoading, clientsLoading, usersLoading, searchError, clientsError, usersError, debouncedSearchValue, type
|
|
757
|
-
var loadMore = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
758
|
-
var safeCurrentPage, nextPage, q, _data$usersDirectory, _data$usersDirectory2, _data$usersDirectory$, _data$usersDirectory3, _data$usersDirectory$2, _data$usersDirectory4, _yield$fetchUsersDire2, data, nextItems, _data4$clients, _data4$clients2, _data4$clients$data$l, _data4$clients3, _data4$clients$data, _data4$clients4, _yield$fetchSearchCli, _data4, _nextItems, _data5$taskFamily, _data5$taskFamily2, _data5$taskFamily$dat, _data5$taskFamily3, _data5$taskFamily$dat2, _data5$taskFamily4, filter, _yield$fetchTaskFamil2, _data5, _nextItems2, _data6$projects, _data6$projects2, _data6$projects$data$, _data6$projects3, _data6$projects$data, _data6$projects4, argumentsFilter, _yield$fetchProjectsF2, _data6, _nextItems3, _t2;
|
|
759
|
-
return _regeneratorRuntime.wrap(function (_context2) {
|
|
760
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
761
|
-
case 0:
|
|
762
|
-
if (!(isLoadingMore || !hasMore || activePaginationSource === 'none')) {
|
|
763
|
-
_context2.next = 1;
|
|
764
|
-
break;
|
|
765
|
-
}
|
|
766
|
-
console.info('[useEntitySearch] loadMore skipped', {
|
|
767
|
-
isLoadingMore: isLoadingMore,
|
|
768
|
-
hasMore: hasMore,
|
|
769
|
-
activePaginationSource: activePaginationSource
|
|
770
|
-
});
|
|
771
|
-
return _context2.abrupt("return");
|
|
772
|
-
case 1:
|
|
773
|
-
safeCurrentPage = normalizePositiveInt(currentPage, 1);
|
|
774
|
-
nextPage = safeCurrentPage + 1;
|
|
775
|
-
q = debouncedSearchValue.trim();
|
|
776
|
-
console.info('[useEntitySearch] loadMore start', {
|
|
777
|
-
source: activePaginationSource,
|
|
778
|
-
currentPage: currentPage,
|
|
779
|
-
nextPage: nextPage,
|
|
780
|
-
query: q
|
|
781
|
-
});
|
|
782
|
-
setIsLoadingMore(true);
|
|
783
|
-
_context2.prev = 2;
|
|
784
|
-
if (!(activePaginationSource === 'users')) {
|
|
785
|
-
_context2.next = 4;
|
|
786
|
-
break;
|
|
787
|
-
}
|
|
788
|
-
_context2.next = 3;
|
|
789
|
-
return fetchUsersDirectory({
|
|
790
|
-
variables: {
|
|
791
|
-
filters: buildUsersDirectoryFilters(q),
|
|
792
|
-
page: nextPage
|
|
793
|
-
}
|
|
794
|
-
});
|
|
795
|
-
case 3:
|
|
796
|
-
_yield$fetchUsersDire2 = _context2.sent;
|
|
797
|
-
data = _yield$fetchUsersDire2.data;
|
|
798
|
-
console.info('[useEntitySearch] users loadMore response', {
|
|
799
|
-
page: data === null || data === void 0 || (_data$usersDirectory = data.usersDirectory) === null || _data$usersDirectory === void 0 ? void 0 : _data$usersDirectory.page,
|
|
800
|
-
lastPage: data === null || data === void 0 || (_data$usersDirectory2 = data.usersDirectory) === null || _data$usersDirectory2 === void 0 ? void 0 : _data$usersDirectory2.lastPage,
|
|
801
|
-
count: (_data$usersDirectory$ = data === null || data === void 0 || (_data$usersDirectory3 = data.usersDirectory) === null || _data$usersDirectory3 === void 0 || (_data$usersDirectory3 = _data$usersDirectory3.data) === null || _data$usersDirectory3 === void 0 ? void 0 : _data$usersDirectory3.length) !== null && _data$usersDirectory$ !== void 0 ? _data$usersDirectory$ : 0
|
|
802
|
-
});
|
|
803
|
-
nextItems = ((_data$usersDirectory$2 = data === null || data === void 0 || (_data$usersDirectory4 = data.usersDirectory) === null || _data$usersDirectory4 === void 0 ? void 0 : _data$usersDirectory4.data) !== null && _data$usersDirectory$2 !== void 0 ? _data$usersDirectory$2 : []).map(function (u) {
|
|
804
|
-
return mapUserToItem(u, q);
|
|
805
|
-
});
|
|
806
|
-
setItems(function (prev) {
|
|
807
|
-
if (!q) {
|
|
808
|
-
var _prev$;
|
|
809
|
-
var meItem = ((_prev$ = prev[0]) === null || _prev$ === void 0 ? void 0 : _prev$.type) === 'user' ? prev[0] : mapCorUserToUserItem(corUser, '', t('contextMention.me'));
|
|
810
|
-
var _existingIds = new Set(prev.map(function (item) {
|
|
811
|
-
return String(item.id);
|
|
812
|
-
}));
|
|
813
|
-
var _appended = nextItems.filter(function (item) {
|
|
814
|
-
return !_existingIds.has(String(item.id));
|
|
815
|
-
});
|
|
816
|
-
var withoutMe = prev.filter(function (item) {
|
|
817
|
-
return String(item.id) !== String(meItem.id);
|
|
818
|
-
});
|
|
819
|
-
return [meItem].concat(_toConsumableArray(withoutMe), _toConsumableArray(_appended));
|
|
820
|
-
}
|
|
821
|
-
var existingIds = new Set(prev.map(function (item) {
|
|
822
|
-
return "".concat(item.type, "-").concat(item.id);
|
|
823
|
-
}));
|
|
824
|
-
var appended = nextItems.filter(function (item) {
|
|
825
|
-
return !existingIds.has("".concat(item.type, "-").concat(item.id));
|
|
826
|
-
});
|
|
827
|
-
return [].concat(_toConsumableArray(prev), _toConsumableArray(appended));
|
|
828
|
-
});
|
|
829
|
-
syncUsersPagination(data);
|
|
830
|
-
_context2.next = 10;
|
|
831
|
-
break;
|
|
832
|
-
case 4:
|
|
833
|
-
if (!(activePaginationSource === 'clients-search')) {
|
|
834
|
-
_context2.next = 6;
|
|
835
|
-
break;
|
|
836
|
-
}
|
|
837
|
-
_context2.next = 5;
|
|
838
|
-
return fetchSearchClients({
|
|
839
|
-
variables: {
|
|
840
|
-
filter: {
|
|
841
|
-
name: q
|
|
842
|
-
},
|
|
843
|
-
page: nextPage,
|
|
844
|
-
perPage: 20
|
|
845
|
-
}
|
|
846
|
-
});
|
|
847
|
-
case 5:
|
|
848
|
-
_yield$fetchSearchCli = _context2.sent;
|
|
849
|
-
_data4 = _yield$fetchSearchCli.data;
|
|
850
|
-
console.info('[useEntitySearch] clients loadMore response', {
|
|
851
|
-
page: _data4 === null || _data4 === void 0 || (_data4$clients = _data4.clients) === null || _data4$clients === void 0 ? void 0 : _data4$clients.page,
|
|
852
|
-
lastPage: _data4 === null || _data4 === void 0 || (_data4$clients2 = _data4.clients) === null || _data4$clients2 === void 0 ? void 0 : _data4$clients2.lastPage,
|
|
853
|
-
count: (_data4$clients$data$l = _data4 === null || _data4 === void 0 || (_data4$clients3 = _data4.clients) === null || _data4$clients3 === void 0 || (_data4$clients3 = _data4$clients3.data) === null || _data4$clients3 === void 0 ? void 0 : _data4$clients3.length) !== null && _data4$clients$data$l !== void 0 ? _data4$clients$data$l : 0
|
|
854
|
-
});
|
|
855
|
-
_nextItems = ((_data4$clients$data = _data4 === null || _data4 === void 0 || (_data4$clients4 = _data4.clients) === null || _data4$clients4 === void 0 ? void 0 : _data4$clients4.data) !== null && _data4$clients$data !== void 0 ? _data4$clients$data : []).map(function (c) {
|
|
856
|
-
return mapClientToItem(c, q);
|
|
857
|
-
});
|
|
858
|
-
setItems(function (prev) {
|
|
859
|
-
var existingIds = new Set(prev.map(function (item) {
|
|
860
|
-
return "".concat(item.type, "-").concat(item.id);
|
|
861
|
-
}));
|
|
862
|
-
var appended = _nextItems.filter(function (item) {
|
|
863
|
-
return !existingIds.has("".concat(item.type, "-").concat(item.id));
|
|
864
|
-
});
|
|
865
|
-
return [].concat(_toConsumableArray(prev), _toConsumableArray(appended));
|
|
866
|
-
});
|
|
867
|
-
syncClientsPagination(_data4);
|
|
868
|
-
_context2.next = 10;
|
|
869
|
-
break;
|
|
870
|
-
case 6:
|
|
871
|
-
if (!(activePaginationSource === 'task-fallback')) {
|
|
872
|
-
_context2.next = 8;
|
|
873
|
-
break;
|
|
874
|
-
}
|
|
875
|
-
filter = {};
|
|
876
|
-
if (stableScope.projectId !== null && stableScope.projectId !== undefined && stableScope.projectId !== '') {
|
|
877
|
-
filter.projectIds = [String(stableScope.projectId)];
|
|
878
|
-
}
|
|
879
|
-
if (stableScope.clientId !== null && stableScope.clientId !== undefined && stableScope.clientId !== '') {
|
|
880
|
-
filter.clientIds = [String(stableScope.clientId)];
|
|
881
|
-
}
|
|
882
|
-
_context2.next = 7;
|
|
883
|
-
return fetchTaskFamilyFallback({
|
|
884
|
-
variables: _objectSpread(_objectSpread({}, Object.keys(filter).length > 0 ? {
|
|
885
|
-
filter: filter
|
|
886
|
-
} : {}), {}, {
|
|
887
|
-
pagination: {
|
|
888
|
-
offset: (nextPage - 1) * 20,
|
|
889
|
-
size: 20
|
|
890
|
-
}
|
|
891
|
-
})
|
|
892
|
-
});
|
|
893
|
-
case 7:
|
|
894
|
-
_yield$fetchTaskFamil2 = _context2.sent;
|
|
895
|
-
_data5 = _yield$fetchTaskFamil2.data;
|
|
896
|
-
console.info('[useEntitySearch] task fallback loadMore response', {
|
|
897
|
-
page: _data5 === null || _data5 === void 0 || (_data5$taskFamily = _data5.taskFamily) === null || _data5$taskFamily === void 0 ? void 0 : _data5$taskFamily.page,
|
|
898
|
-
lastPage: _data5 === null || _data5 === void 0 || (_data5$taskFamily2 = _data5.taskFamily) === null || _data5$taskFamily2 === void 0 ? void 0 : _data5$taskFamily2.lastPage,
|
|
899
|
-
count: (_data5$taskFamily$dat = _data5 === null || _data5 === void 0 || (_data5$taskFamily3 = _data5.taskFamily) === null || _data5$taskFamily3 === void 0 || (_data5$taskFamily3 = _data5$taskFamily3.data) === null || _data5$taskFamily3 === void 0 ? void 0 : _data5$taskFamily3.length) !== null && _data5$taskFamily$dat !== void 0 ? _data5$taskFamily$dat : 0
|
|
900
|
-
});
|
|
901
|
-
_nextItems2 = ((_data5$taskFamily$dat2 = _data5 === null || _data5 === void 0 || (_data5$taskFamily4 = _data5.taskFamily) === null || _data5$taskFamily4 === void 0 ? void 0 : _data5$taskFamily4.data) !== null && _data5$taskFamily$dat2 !== void 0 ? _data5$taskFamily$dat2 : []).map(normalizeTaskFamilyRecord).filter(function (item) {
|
|
902
|
-
return item !== null;
|
|
903
|
-
}).map(function (task) {
|
|
904
|
-
return mapRecentTaskToItem(task, '', showProjectNameInTaskRow);
|
|
905
|
-
});
|
|
906
|
-
setItems(function (prev) {
|
|
907
|
-
var existingIds = new Set(prev.map(function (item) {
|
|
908
|
-
return "".concat(item.type, "-").concat(item.id);
|
|
909
|
-
}));
|
|
910
|
-
var appended = _nextItems2.filter(function (item) {
|
|
911
|
-
return !existingIds.has("".concat(item.type, "-").concat(item.id));
|
|
912
|
-
});
|
|
913
|
-
return [].concat(_toConsumableArray(prev), _toConsumableArray(appended));
|
|
914
|
-
});
|
|
915
|
-
syncTaskFallbackPagination(_data5);
|
|
916
|
-
_context2.next = 10;
|
|
917
|
-
break;
|
|
918
|
-
case 8:
|
|
919
|
-
if (!(activePaginationSource === 'project-fallback')) {
|
|
920
|
-
_context2.next = 10;
|
|
921
|
-
break;
|
|
922
|
-
}
|
|
923
|
-
argumentsFilter = stableScope.clientId !== null && stableScope.clientId !== undefined && stableScope.clientId !== '' ? {
|
|
924
|
-
client_id: [String(stableScope.clientId)]
|
|
925
|
-
} : undefined;
|
|
926
|
-
_context2.next = 9;
|
|
927
|
-
return fetchProjectsFallback({
|
|
928
|
-
variables: _objectSpread(_objectSpread({}, argumentsFilter ? {
|
|
929
|
-
arguments: argumentsFilter
|
|
930
|
-
} : {}), {}, {
|
|
931
|
-
page: nextPage,
|
|
932
|
-
perPage: 20
|
|
933
|
-
})
|
|
934
|
-
});
|
|
935
|
-
case 9:
|
|
936
|
-
_yield$fetchProjectsF2 = _context2.sent;
|
|
937
|
-
_data6 = _yield$fetchProjectsF2.data;
|
|
938
|
-
console.info('[useEntitySearch] project fallback loadMore response', {
|
|
939
|
-
page: _data6 === null || _data6 === void 0 || (_data6$projects = _data6.projects) === null || _data6$projects === void 0 ? void 0 : _data6$projects.page,
|
|
940
|
-
lastPage: _data6 === null || _data6 === void 0 || (_data6$projects2 = _data6.projects) === null || _data6$projects2 === void 0 ? void 0 : _data6$projects2.lastPage,
|
|
941
|
-
count: (_data6$projects$data$ = _data6 === null || _data6 === void 0 || (_data6$projects3 = _data6.projects) === null || _data6$projects3 === void 0 || (_data6$projects3 = _data6$projects3.data) === null || _data6$projects3 === void 0 ? void 0 : _data6$projects3.length) !== null && _data6$projects$data$ !== void 0 ? _data6$projects$data$ : 0
|
|
942
|
-
});
|
|
943
|
-
_nextItems3 = ((_data6$projects$data = _data6 === null || _data6 === void 0 || (_data6$projects4 = _data6.projects) === null || _data6$projects4 === void 0 ? void 0 : _data6$projects4.data) !== null && _data6$projects$data !== void 0 ? _data6$projects$data : []).map(normalizeProjectsFallbackRecord).filter(function (item) {
|
|
944
|
-
return item !== null;
|
|
945
|
-
}).map(function (item) {
|
|
946
|
-
return mapSearchToItem(item, 'project', '');
|
|
947
|
-
});
|
|
948
|
-
setItems(function (prev) {
|
|
949
|
-
var existingIds = new Set(prev.map(function (item) {
|
|
950
|
-
return "".concat(item.type, "-").concat(item.id);
|
|
951
|
-
}));
|
|
952
|
-
var appended = _nextItems3.filter(function (item) {
|
|
953
|
-
return !existingIds.has("".concat(item.type, "-").concat(item.id));
|
|
954
|
-
});
|
|
955
|
-
return [].concat(_toConsumableArray(prev), _toConsumableArray(appended));
|
|
956
|
-
});
|
|
957
|
-
syncProjectFallbackPagination(_data6);
|
|
958
|
-
case 10:
|
|
959
|
-
_context2.next = 12;
|
|
960
|
-
break;
|
|
961
|
-
case 11:
|
|
962
|
-
_context2.prev = 11;
|
|
963
|
-
_t2 = _context2["catch"](2);
|
|
964
|
-
console.error('[useEntitySearch] loadMore failed', {
|
|
965
|
-
source: activePaginationSource,
|
|
966
|
-
nextPage: nextPage,
|
|
967
|
-
error: _t2
|
|
968
|
-
});
|
|
969
|
-
// Evita loop de reintentos automáticos por scroll cuando backend está caído (ej. 503).
|
|
970
|
-
setError(true);
|
|
971
|
-
setHasMore(false);
|
|
972
|
-
case 12:
|
|
973
|
-
_context2.prev = 12;
|
|
974
|
-
setIsLoadingMore(false);
|
|
975
|
-
console.info('[useEntitySearch] loadMore finished', {
|
|
976
|
-
source: activePaginationSource,
|
|
977
|
-
nextPage: nextPage
|
|
978
|
-
});
|
|
979
|
-
return _context2.finish(12);
|
|
980
|
-
case 13:
|
|
981
|
-
case "end":
|
|
982
|
-
return _context2.stop();
|
|
983
|
-
}
|
|
984
|
-
}, _callee2, null, [[2, 11, 12, 13]]);
|
|
985
|
-
})), [isLoadingMore, hasMore, currentPage, activePaginationSource, debouncedSearchValue, fetchUsersDirectory, fetchSearchClients, fetchTaskFamilyFallback, fetchProjectsFallback, stableScope.projectId, stableScope.clientId, showProjectNameInTaskRow, corUser, t, syncClientsPagination, syncUsersPagination, syncTaskFallbackPagination, syncProjectFallbackPagination]);
|
|
519
|
+
}, [searchData, clientsData, usersData, searchLoading, clientsLoading, usersLoading, searchError, clientsError, usersError, debouncedSearchValue, type]);
|
|
986
520
|
|
|
987
521
|
// Cuando se limpia el search, volver a recents
|
|
988
522
|
useEffect(function () {
|
|
@@ -994,13 +528,9 @@ export var useEntitySearch = function useEntitySearch(type, scope) {
|
|
|
994
528
|
items: items,
|
|
995
529
|
loading: loading,
|
|
996
530
|
error: error,
|
|
997
|
-
hideRecentsLabel: hideRecentsLabel,
|
|
998
|
-
hasMore: hasMore,
|
|
999
|
-
isLoadingMore: isLoadingMore,
|
|
1000
|
-
loadMore: loadMore,
|
|
1001
531
|
searchValue: searchValue,
|
|
1002
532
|
updateSearchValue: setSearchValue,
|
|
1003
533
|
fetchRecent: fetchRecent
|
|
1004
534
|
};
|
|
1005
535
|
};
|
|
1006
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXp5UXVlcnkiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsImdldFJlY2VudENsaWVudHMiLCJnZXRSZWNlbnRQcm9qZWN0cyIsImdldFJlY2VudFRhc2tzIiwidXNlVXNlciIsIlBST0pFQ1RTX0ZBTExCQUNLIiwiU0VBUkNIX0VOVElUSUVTIiwiVEFTS19GQU1JTFlfRkFMTEJBQ0siLCJTRUFSQ0hfQ0xJRU5UUyIsIlVTRVJTX0RJUkVDVE9SWSIsIlNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUyIsInVzZURlYm91bmNlIiwidXNlVCIsIm5vcm1hbGl6ZVBvc2l0aXZlSW50IiwidmFsdWUiLCJmYWxsYmFjayIsInBhcnNlZCIsIk51bWJlciIsImlzRmluaXRlIiwibm9ybWFsaXplZCIsIk1hdGgiLCJmbG9vciIsIkJBU0VfRklMVEVSU19CWV9UWVBFIiwicHJvamVjdCIsImFyY2hpdmVkIiwidGFzayIsImJ1aWxkVGFza1NlYXJjaEV4dHJhRW50cmllcyIsInNjb3BlIiwicmF3Q2xpZW50IiwiY2xpZW50SWQiLCJ1bmRlZmluZWQiLCJTdHJpbmciLCJyYXdQcm9qZWN0IiwicHJvamVjdElkIiwiYWdlbnRFbnRpdHkiLCJlbnRyaWVzIiwicHVzaENsaWVudCIsInB1c2giLCJwdXNoUHJvamVjdCIsImJ1aWxkVGFza1NlYXJjaEV4dHJhIiwibGVuZ3RoIiwiSlNPTiIsInN0cmluZ2lmeSIsImJ1aWxkUHJvamVjdFNlYXJjaEV4dHJhIiwiYnVpbGRTZWFyY2hFbnRpdGllc0V4dHJhIiwidHlwZSIsImJ1aWxkRmlsdGVyc0ZvclR5cGUiLCJidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyIsInEiLCJiYXNlIiwid2l0aFBvc2l0aW9uIiwid2l0aFRlYW1zIiwidHJpbW1lZFEiLCJ0cmltIiwic2VhcmNoSW5wdXQiLCJoaWdobGlnaHRSYW5nZSIsInRleHQiLCJzZWFyY2hWYWx1ZSIsImlkeCIsInRvTG93ZXJDYXNlIiwiaW5kZXhPZiIsInN0YXJ0IiwiZmlyc3REZWZpbmVkIiwiX2xlbiIsImFyZ3VtZW50cyIsInZhbHVlcyIsIkFycmF5IiwiX2tleSIsImZpbmQiLCJtYXBDbGllbnRUb0l0ZW0iLCJjIiwiX2MkdG90YWxQcm95ZWN0b3MiLCJfYyR0b3RhbFByb3llY3RvczIiLCJpZCIsInByaW1hcnkiLCJuYW1lIiwicHJpbWFyeUhpZ2hsaWdodCIsImJyZWFkY3J1bWIiLCJjb3VudCIsInRvdGFsUHJveWVjdG9zIiwiY291bnRMYWJlbCIsInJhdyIsIm1hcFVzZXJUb0l0ZW0iLCJ1IiwiX3UkZmlyc3ROYW1lIiwiX3UkbGFzdE5hbWUiLCJfdSRwaWN0dXJlIiwiX3UkcG9zaXRpb25OYW1lIiwiX3UkZW1haWwiLCJmdWxsTmFtZSIsImNvbmNhdCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiZW1haWwiLCJwaWN0dXJlIiwicG9zaXRpb25OYW1lIiwibWFwQ29yVXNlclRvVXNlckl0ZW0iLCJ1c2VyIiwibWVMYWJlbCIsIl91c2VyJGZpcnN0TmFtZSIsIl91c2VyJGxhc3ROYW1lIiwiX3VzZXIkdXNlcl9wb3NpdGlvbiIsIl91c2VyJGVtYWlsIiwicG9zaXRpb25MaW5lIiwidXNlcl9wb3NpdGlvbiIsIm1hcFJlY2VudFRhc2tUb0l0ZW0iLCJfdGFzayRwcm9qZWN0TmFtZSIsInNob3dQcm9qZWN0TmFtZUluVGFza1JvdyIsInRpdGxlIiwicHJvamVjdE5hbWUiLCJwYXJlbnQiLCJub3JtYWxpemVUYXNrRmFtaWx5UmVjb3JkIiwicmVjb3JkIiwiX3JlY29yZCR0aXRsZSIsIl9maXJzdERlZmluZWQiLCJfcmVjb3JkJHByb2plY3QiLCJfcmVjb3JkJGZhdGhlciIsIl9yZWNvcmQkZmF0aGVyMiIsInRhc2tGYW1pbHlJZCIsIl9pZCIsImZhdGhlciIsImhhc0ZhdGhlciIsInRhc2tGYXRoZXIiLCJub3JtYWxpemVQcm9qZWN0c0ZhbGxiYWNrUmVjb3JkIiwiX3JlY29yZCRuYW1lIiwiX2ZpcnN0RGVmaW5lZDIiLCJfcmVjb3JkJGNsaWVudCIsIl9yZWNvcmQkY2xpZW50JG5hbWUiLCJfcmVjb3JkJGNsaWVudDIiLCJjbGllbnQiLCJjbGllbnROYW1lIiwibWFwU2VhcmNoVG9JdGVtIiwiciIsIl9yJHByb2plY3ROYW1lIiwiX3IkcHJvamVjdE5hbWUyIiwiX3IkY2xpZW50SWQiLCJfciRjbGllbnROYW1lIiwiX3IkZmVlSWQiLCJfZmF0aGVyJHRpdGxlIiwidGFza1Byb2plY3ROYW1lIiwiZmVlSWQiLCJmYXRoZXJJZCIsImZhdGhlclRpdGxlIiwiZm9ybWF0TWNwUHJpbWFyeUxhYmVsIiwic2x1ZyIsInJlcGxhY2UiLCJjaGFyIiwidG9VcHBlckNhc2UiLCJtYXBNY3BTbHVnc1RvSXRlbXMiLCJzbHVncyIsImZpbHRlcmVkIiwiZmlsdGVyIiwicyIsImluY2x1ZGVzIiwibWFwIiwidXNlRW50aXR5U2VhcmNoIiwiX3Njb3BlJG1jcFNsdWdzIiwiY29yVXNlciIsIl91c2VUIiwidCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNldFNlYXJjaFZhbHVlIiwiZGVib3VuY2VkU2VhcmNoVmFsdWUiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsIml0ZW1zIiwic2V0SXRlbXMiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJlcnJvciIsInNldEVycm9yIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJoaWRlUmVjZW50c0xhYmVsIiwic2V0SGlkZVJlY2VudHNMYWJlbCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImhhc01vcmUiLCJzZXRIYXNNb3JlIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsImlzTG9hZGluZ01vcmUiLCJzZXRJc0xvYWRpbmdNb3JlIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsImN1cnJlbnRQYWdlIiwic2V0Q3VycmVudFBhZ2UiLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwiYWN0aXZlUGFnaW5hdGlvblNvdXJjZSIsInNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UiLCJtY3BTbHVnc0tleSIsIm1jcFNsdWdzIiwiam9pbiIsInN0YWJsZVNjb3BlIiwiX3Njb3BlJGNsaWVudElkIiwiX3Njb3BlJHByb2plY3RJZCIsIl9zY29wZSRtY3BTbHVnczIiLCJfc2NvcGUkYWdlbnRFbnRpdHkiLCJfdXNlTGF6eVF1ZXJ5IiwidmFyaWFibGVzIiwibGltaXQiLCJmZXRjaFBvbGljeSIsIl91c2VMYXp5UXVlcnkyIiwiZmV0Y2hTZWFyY2hFbnRpdGllcyIsIl91c2VMYXp5UXVlcnkyJCIsInNlYXJjaERhdGEiLCJkYXRhIiwic2VhcmNoTG9hZGluZyIsInNlYXJjaEVycm9yIiwiX3VzZUxhenlRdWVyeTMiLCJfdXNlTGF6eVF1ZXJ5NCIsImZldGNoU2VhcmNoQ2xpZW50cyIsIl91c2VMYXp5UXVlcnk0JCIsImNsaWVudHNEYXRhIiwiY2xpZW50c0xvYWRpbmciLCJjbGllbnRzRXJyb3IiLCJfdXNlTGF6eVF1ZXJ5NSIsIl91c2VMYXp5UXVlcnk2IiwiZmV0Y2hVc2Vyc0RpcmVjdG9yeSIsIl91c2VMYXp5UXVlcnk2JCIsInVzZXJzRGF0YSIsInVzZXJzTG9hZGluZyIsInVzZXJzRXJyb3IiLCJzeW5jVXNlcnNQYWdpbmF0aW9uIiwicGF5bG9hZCIsIl9wYXlsb2FkJHVzZXJzRGlyZWN0byIsIl9wYXlsb2FkJHVzZXJzRGlyZWN0bzIiLCJwYWdlIiwidXNlcnNEaXJlY3RvcnkiLCJsYXN0UGFnZSIsInN5bmNDbGllbnRzUGFnaW5hdGlvbiIsIl9wYXlsb2FkJGNsaWVudHMiLCJfcGF5bG9hZCRjbGllbnRzMiIsImNsaWVudHMiLCJzeW5jVGFza0ZhbGxiYWNrUGFnaW5hdGlvbiIsIl9wYXlsb2FkJHRhc2tGYW1pbHkiLCJfcGF5bG9hZCR0YXNrRmFtaWx5MiIsInRhc2tGYW1pbHkiLCJzeW5jUHJvamVjdEZhbGxiYWNrUGFnaW5hdGlvbiIsIl9wYXlsb2FkJHByb2plY3RzIiwiX3BheWxvYWQkcHJvamVjdHMyIiwicHJvamVjdHMiLCJfdXNlTGF6eVF1ZXJ5NyIsIl91c2VMYXp5UXVlcnk4IiwiZmV0Y2hUYXNrRmFtaWx5RmFsbGJhY2siLCJfdXNlTGF6eVF1ZXJ5OSIsIl91c2VMYXp5UXVlcnkwIiwiZmV0Y2hQcm9qZWN0c0ZhbGxiYWNrIiwiZmV0Y2hSZWNlbnQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl9zdGFibGVTY29wZSRtY3BTbHVncyIsIm1hcHBlZCIsIl9kYXRhIiwiX21hcHBlZCIsIl9mYWxsYmFja0RhdGEkcHJvamVjdCIsIl9mYWxsYmFja0RhdGEkcHJvamVjdDIiLCJhcmd1bWVudHNGaWx0ZXIiLCJfeWllbGQkZmV0Y2hQcm9qZWN0c0YiLCJmYWxsYmFja0RhdGEiLCJmYWxsYmFja01hcHBlZCIsInJlY2VudFRhc2tGaWx0ZXJzIiwiX2RhdGEyIiwidGFza0l0ZW1zIiwiX2ZhbGxiYWNrRGF0YSR0YXNrRmFtIiwiX2ZhbGxiYWNrRGF0YSR0YXNrRmFtMiIsIl95aWVsZCRmZXRjaFRhc2tGYW1pbCIsIl9mYWxsYmFja0RhdGEiLCJfZGF0YTMkdXNlcnNEaXJlY3RvcnkiLCJfZGF0YTMkdXNlcnNEaXJlY3RvcnkyIiwiX3lpZWxkJGZldGNoVXNlcnNEaXJlIiwiX2RhdGEzIiwiX21hcHBlZDIiLCJtZUl0ZW0iLCJ3aXRob3V0TWUiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiYWJydXB0Iiwic2VudCIsImlzQXJyYXkiLCJwIiwiY2xpZW50X2lkIiwiX29iamVjdFNwcmVhZCIsInBlclBhZ2UiLCJpdGVtIiwicHJvamVjdElkcyIsImNsaWVudElkcyIsIk9iamVjdCIsImtleXMiLCJwYWdpbmF0aW9uIiwib2Zmc2V0Iiwic2l6ZSIsImZpbHRlcnMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJmaW5pc2giLCJzdG9wIiwiX3N0YWJsZVNjb3BlJG1jcFNsdWdzMiIsImV4dHJhIiwiX2NsaWVudHNEYXRhJGNsaWVudHMiLCJfdXNlcnNEYXRhJHVzZXJzRGlyZWMiLCJtZUlkIiwiaGFzTWVJblJlc3VsdHMiLCJzb21lIiwic2VhcmNoIiwibG9hZE1vcmUiLCJfY2FsbGVlMiIsInNhZmVDdXJyZW50UGFnZSIsIm5leHRQYWdlIiwiX2RhdGEkdXNlcnNEaXJlY3RvcnkiLCJfZGF0YSR1c2Vyc0RpcmVjdG9yeTIiLCJfZGF0YSR1c2Vyc0RpcmVjdG9yeSQiLCJfZGF0YSR1c2Vyc0RpcmVjdG9yeTMiLCJfZGF0YSR1c2Vyc0RpcmVjdG9yeSQyIiwiX2RhdGEkdXNlcnNEaXJlY3Rvcnk0IiwiX3lpZWxkJGZldGNoVXNlcnNEaXJlMiIsIm5leHRJdGVtcyIsIl9kYXRhNCRjbGllbnRzIiwiX2RhdGE0JGNsaWVudHMyIiwiX2RhdGE0JGNsaWVudHMkZGF0YSRsIiwiX2RhdGE0JGNsaWVudHMzIiwiX2RhdGE0JGNsaWVudHMkZGF0YSIsIl9kYXRhNCRjbGllbnRzNCIsIl95aWVsZCRmZXRjaFNlYXJjaENsaSIsIl9kYXRhNCIsIl9uZXh0SXRlbXMiLCJfZGF0YTUkdGFza0ZhbWlseSIsIl9kYXRhNSR0YXNrRmFtaWx5MiIsIl9kYXRhNSR0YXNrRmFtaWx5JGRhdCIsIl9kYXRhNSR0YXNrRmFtaWx5MyIsIl9kYXRhNSR0YXNrRmFtaWx5JGRhdDIiLCJfZGF0YTUkdGFza0ZhbWlseTQiLCJfeWllbGQkZmV0Y2hUYXNrRmFtaWwyIiwiX2RhdGE1IiwiX25leHRJdGVtczIiLCJfZGF0YTYkcHJvamVjdHMiLCJfZGF0YTYkcHJvamVjdHMyIiwiX2RhdGE2JHByb2plY3RzJGRhdGEkIiwiX2RhdGE2JHByb2plY3RzMyIsIl9kYXRhNiRwcm9qZWN0cyRkYXRhIiwiX2RhdGE2JHByb2plY3RzNCIsIl95aWVsZCRmZXRjaFByb2plY3RzRjIiLCJfZGF0YTYiLCJfbmV4dEl0ZW1zMyIsIl90MiIsIl9jb250ZXh0MiIsImNvbnNvbGUiLCJpbmZvIiwic291cmNlIiwicXVlcnkiLCJfcHJldiQiLCJleGlzdGluZ0lkcyIsIlNldCIsImFwcGVuZGVkIiwiaGFzIiwidXBkYXRlU2VhcmNoVmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlRW50aXR5U2VhcmNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUxhenlRdWVyeSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFJlY2VudENsaWVudHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudENsaWVudHMvZ2V0UmVjZW50Q2xpZW50cydcbmltcG9ydCB7IGdldFJlY2VudFByb2plY3RzIH0gZnJvbSAnLi4vc2VydmljZXMvbWFpYS9SZWNlbnRQcm9qZWN0cy9nZXRSZWNlbnRQcm9qZWN0cydcbmltcG9ydCB7IGdldFJlY2VudFRhc2tzIH0gZnJvbSAnLi4vc2VydmljZXMvbWFpYS9SZWNlbnRUYXNrcy9nZXRSZWNlbnRUYXNrcydcbmltcG9ydCB0eXBlIHsgUmVjZW50VGFza0l0ZW0gfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudFRhc2tzL2dldFJlY2VudFRhc2tzJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBQUk9KRUNUU19GQUxMQkFDSywgU0VBUkNIX0VOVElUSUVTLCBUQVNLX0ZBTUlMWV9GQUxMQkFDSyB9IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L2VudGl0eVNlYXJjaFF1ZXJ5J1xuaW1wb3J0IHsgU0VBUkNIX0NMSUVOVFMgfSBmcm9tICcuLi9zZXJ2aWNlcy9xdWVyeS9DbGllbnRTZWFyY2hRdWVyeSdcbmltcG9ydCB7IFVTRVJTX0RJUkVDVE9SWSB9IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L3VzZXJzRGlyZWN0b3J5UXVlcnknXG5pbXBvcnQgeyBTRUFSQ0hfUVVFUllfREVCT1VOQ0VfTVMgfSBmcm9tICcuLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgdXNlRGVib3VuY2UgfSBmcm9tICcuL3VzZURlYm91bmNlJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4vdXNlVCdcbmltcG9ydCB7IENvbnRleHRFbnRpdHlUeXBlLCBDb250ZXh0TWVudGlvbkl0ZW0gfSBmcm9tICcuLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB0eXBlIHsgQWdlbnRFbnRpdHkgfSBmcm9tICcuLi90eXBlcy9hZ2VudCdcblxudHlwZSBSYXdTZWFyY2hSZXN1bHQgPSB7XG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgdGl0bGU6IHN0cmluZ1xuICB0eXBlPzogc3RyaW5nXG4gIGNsaWVudElkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbFxuICBmZWVJZD86IG51bWJlciB8IHN0cmluZyB8IG51bGxcbiAgY2xpZW50TmFtZT86IHN0cmluZyB8IG51bGxcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIGZhdGhlcj86IHsgaWQ6IHN0cmluZyB8IG51bWJlcjsgdGl0bGU/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsXG59XG5cbnR5cGUgUmF3Q2xpZW50ID0ge1xuICBpZDogbnVtYmVyIHwgc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICB0b3RhbFByb3llY3Rvcz86IG51bWJlciB8IG51bGxcbn1cblxudHlwZSBSYXdEaXJlY3RvcnlVc2VyID0ge1xuICBpZDogc3RyaW5nIHwgbnVtYmVyXG4gIGZpcnN0TmFtZT86IHN0cmluZyB8IG51bGxcbiAgbGFzdE5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIGVtYWlsPzogc3RyaW5nIHwgbnVsbFxuICBwaWN0dXJlPzogc3RyaW5nIHwgbnVsbFxuICBwb3NpdGlvbk5hbWU/OiBzdHJpbmcgfCBudWxsXG59XG5cbnR5cGUgU2VhcmNoRW50aXRpZXNEYXRhID0geyBzZWFyY2g6IFJhd1NlYXJjaFJlc3VsdFtdIHwgbnVsbCB9XG50eXBlIFNlYXJjaENsaWVudHNEYXRhID0ge1xuICBjbGllbnRzOiB7XG4gICAgdG90YWw/OiBudW1iZXIgfCBudWxsXG4gICAgcGVyUGFnZT86IG51bWJlciB8IG51bGxcbiAgICBwYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIGxhc3RQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIGRhdGE6IFJhd0NsaWVudFtdXG4gIH0gfCBudWxsXG59XG50eXBlIFVzZXJzRGlyZWN0b3J5RGF0YSA9IHtcbiAgdXNlcnNEaXJlY3Rvcnk6IHtcbiAgICB0b3RhbD86IG51bWJlciB8IG51bGxcbiAgICBwZXJQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIHBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgbGFzdFBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgZGF0YTogUmF3RGlyZWN0b3J5VXNlcltdIHwgbnVsbFxuICB9IHwgbnVsbFxufVxuXG50eXBlIFRhc2tGYW1pbHlSZWNvcmQgPSB7XG4gIF9pZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgdGl0bGU/OiBzdHJpbmcgfCBudWxsXG4gIHByb2plY3RJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgdGFza0ZhdGhlcj86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgZmF0aGVyPzogeyBpZD86IHN0cmluZyB8IG51bWJlciB8IG51bGw7IHRpdGxlPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbFxuICBwcm9qZWN0PzogeyBpZD86IHN0cmluZyB8IG51bWJlciB8IG51bGw7IG5hbWU/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsXG59XG5cbnR5cGUgVGFza0ZhbWlseURhdGEgPSB7XG4gIHRhc2tGYW1pbHk/OiB7XG4gICAgdG90YWw/OiBudW1iZXIgfCBudWxsXG4gICAgcGVyUGFnZT86IG51bWJlciB8IG51bGxcbiAgICBwYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIGxhc3RQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIGRhdGE/OiBUYXNrRmFtaWx5UmVjb3JkW10gfCBudWxsXG4gIH0gfCBudWxsXG59XG5cbnR5cGUgRmFsbGJhY2tQcm9qZWN0UmVjb3JkID0ge1xuICBpZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgbmFtZT86IHN0cmluZyB8IG51bGxcbiAgY2xpZW50SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIGNsaWVudD86IHsgaWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsOyBuYW1lPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbFxufVxuXG50eXBlIFByb2plY3RzRmFsbGJhY2tEYXRhID0ge1xuICBwcm9qZWN0cz86IHtcbiAgICB0b3RhbD86IG51bWJlciB8IG51bGxcbiAgICBwZXJQYWdlPzogbnVtYmVyIHwgbnVsbFxuICAgIHBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgbGFzdFBhZ2U/OiBudW1iZXIgfCBudWxsXG4gICAgZGF0YT86IEZhbGxiYWNrUHJvamVjdFJlY29yZFtdIHwgbnVsbFxuICB9IHwgbnVsbFxufVxuXG50eXBlIFBhZ2luYXRpb25Tb3VyY2UgPSAnbm9uZScgfCAndXNlcnMnIHwgJ2NsaWVudHMtc2VhcmNoJyB8ICd0YXNrLWZhbGxiYWNrJyB8ICdwcm9qZWN0LWZhbGxiYWNrJ1xuXG5jb25zdCBub3JtYWxpemVQb3NpdGl2ZUludCA9ICh2YWx1ZTogdW5rbm93biwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSlcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSkgcmV0dXJuIGZhbGxiYWNrXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBNYXRoLmZsb29yKHBhcnNlZClcbiAgcmV0dXJuIG5vcm1hbGl6ZWQgPiAwID8gbm9ybWFsaXplZCA6IGZhbGxiYWNrXG59XG5cbi8qKlxuICogUmVzdHJpbmdlIGxvcyByZXN1bHRhZG9zIGFsIGBjbGllbnRJZGAvYHByb2plY3RJZGAgZGVsIGFnZW50ZSBhY3Rpdm8uXG4gKiBDdWFuZG8gZWwgYWdlbnRlIGVzdMOhIHNjb3BlYWRvIGEgdW4gY2xpZW50L3Byb2plY3QsIHRhbnRvIGxvcyByZWNlbnRzIGNvbW9cbiAqIGVsIHNlYXJjaCBkZWJlbiBmaWx0cmFyIHBvciBlc2UgY29udGV4dG8uIFNpIGVsIGJhY2tlbmQgbm8gZW50aWVuZGUgYWxnw7puXG4gKiBjYW1wbyBsbyBpZ25vcmEgeSBzZSBjYWUgYWwgY29tcG9ydGFtaWVudG8gZ2xvYmFsLlxuICovXG5leHBvcnQgdHlwZSBFbnRpdHlTZWFyY2hTY29wZSA9IHtcbiAgY2xpZW50SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIHByb2plY3RJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgLyoqIFNsdWdzIGRlbCBjb25lY3RvciBNQ1AgZGVsIGFnZW50ZSAobGlzdGFkbyBsb2NhbCwgc2luIEdyYXBoUUwpLiAqL1xuICBtY3BTbHVncz86IHN0cmluZ1tdXG4gIC8qKlxuICAgKiBgZW50aXR5YCBkZWwgYWdlbnRlIGFjdGl2by4gUGFyYSBlc3BlY2lhbGlzdGFzOlxuICAgKiAtIGBwcm9qZWN0YDogYsO6c3F1ZWRhIGRlIHRhcmVhcyBmdWVyemEgZmlsdHJvIHBvciBgcHJvamVjdElkYCBkZWwgY29udGV4dG8uXG4gICAqIC0gYGNsaWVudGA6IGLDunNxdWVkYSBkZSBwcm95ZWN0b3MgcG9yIGBjbGllbnRJZGA7IHRhcmVhcyBwb3IgY2xpZW50ZSAoeSBwcm95ZWN0byBzaSBhcGxpY2EpLlxuICAgKi9cbiAgYWdlbnRFbnRpdHk/OiBBZ2VudEVudGl0eSB8IG51bGxcbn1cblxudHlwZSBTZWFyY2hGaWx0ZXJhYmxlVHlwZSA9ICdwcm9qZWN0JyB8ICd0YXNrJ1xuXG5jb25zdCBCQVNFX0ZJTFRFUlNfQllfVFlQRTogUmVjb3JkPFNlYXJjaEZpbHRlcmFibGVUeXBlLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgcHJvamVjdDogeyBwcm9qZWN0OiAndHJ1ZScsIGFyY2hpdmVkOiAnYWxsJyB9LFxuICB0YXNrOiB7IHRhc2s6ICd0cnVlJywgYXJjaGl2ZWQ6ICdmYWxzZScgfSxcbn1cblxuLyoqXG4gKiBFbnRyYWRhcyBwYXJhIGVsIGFyZ3VtZW50byBHcmFwaFFMIGBleHRyYWAgKEpTT04gc3RyaW5nIGRlIGFycmF5KSBhbCBidXNjYXIgdGFyZWFzIGNvbiBjb250ZXh0by5cbiAqIEVqLjogW3tcInByb2plY3RJZFwiOlwiODgxNTUyXCJ9XVxuICovXG5jb25zdCBidWlsZFRhc2tTZWFyY2hFeHRyYUVudHJpZXMgPSAoc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSk6IEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0+IHtcbiAgY29uc3QgcmF3Q2xpZW50ID1cbiAgICBzY29wZT8uY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBzY29wZT8uY2xpZW50SWQgIT09IG51bGwgJiYgc2NvcGU/LmNsaWVudElkICE9PSAnJyA/IFN0cmluZyhzY29wZS5jbGllbnRJZCkgOiBudWxsXG4gIGNvbnN0IHJhd1Byb2plY3QgPVxuICAgIHNjb3BlPy5wcm9qZWN0SWQgIT09IHVuZGVmaW5lZCAmJiBzY29wZT8ucHJvamVjdElkICE9PSBudWxsICYmIHNjb3BlPy5wcm9qZWN0SWQgIT09ICcnXG4gICAgICA/IFN0cmluZyhzY29wZS5wcm9qZWN0SWQpXG4gICAgICA6IG51bGxcblxuICBjb25zdCBhZ2VudEVudGl0eSA9IHNjb3BlPy5hZ2VudEVudGl0eVxuICBjb25zdCBlbnRyaWVzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IFtdXG5cbiAgY29uc3QgcHVzaENsaWVudCA9ICgpID0+IHtcbiAgICBpZiAocmF3Q2xpZW50KSBlbnRyaWVzLnB1c2goeyBjbGllbnRJZDogcmF3Q2xpZW50IH0pXG4gIH1cbiAgY29uc3QgcHVzaFByb2plY3QgPSAoKSA9PiB7XG4gICAgaWYgKHJhd1Byb2plY3QpIGVudHJpZXMucHVzaCh7IHByb2plY3RJZDogcmF3UHJvamVjdCB9KVxuICB9XG5cbiAgaWYgKGFnZW50RW50aXR5ID09PSAncHJvamVjdCcpIHtcbiAgICBpZiAocmF3UHJvamVjdCkge1xuICAgICAgcHVzaFByb2plY3QoKVxuICAgIH0gZWxzZSBpZiAocmF3Q2xpZW50KSB7XG4gICAgICBwdXNoQ2xpZW50KClcbiAgICB9XG4gIH0gZWxzZSBpZiAoYWdlbnRFbnRpdHkgPT09ICdjbGllbnQnKSB7XG4gICAgcHVzaENsaWVudCgpXG4gICAgcHVzaFByb2plY3QoKVxuICB9IGVsc2Uge1xuICAgIHB1c2hDbGllbnQoKVxuICAgIHB1c2hQcm9qZWN0KClcbiAgfVxuXG4gIHJldHVybiBlbnRyaWVzXG59XG5cbmNvbnN0IGJ1aWxkVGFza1NlYXJjaEV4dHJhID0gKHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBlbnRyaWVzID0gYnVpbGRUYXNrU2VhcmNoRXh0cmFFbnRyaWVzKHNjb3BlKVxuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWRcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGVudHJpZXMpXG59XG5cbi8qKlxuICogVGFiIHByb3llY3RvOiBjb24gYGNsaWVudElkYCBlbiBlbCBzY29wZSwgYGV4dHJhYCBhY290YSBsYSBiw7pzcXVlZGEgYSBwcm95ZWN0b3MgZGUgZXNlIGNsaWVudGUuXG4gKiBFai46IGBbe1wiY2xpZW50SWRcIjpcIjQ3MTA1XCJ9XWAganVudG8gYSBgZmlsdGVyc2AgYHtcInByb2plY3RcIjpcInRydWVcIixcImFyY2hpdmVkXCI6XCJhbGxcIn1gLlxuICovXG5jb25zdCBidWlsZFByb2plY3RTZWFyY2hFeHRyYSA9IChzY29wZT86IEVudGl0eVNlYXJjaFNjb3BlKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcmF3Q2xpZW50ID1cbiAgICBzY29wZT8uY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBzY29wZT8uY2xpZW50SWQgIT09IG51bGwgJiYgc2NvcGU/LmNsaWVudElkICE9PSAnJyA/IFN0cmluZyhzY29wZS5jbGllbnRJZCkgOiBudWxsXG4gIGlmICghcmF3Q2xpZW50KSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShbeyBjbGllbnRJZDogcmF3Q2xpZW50IH1dKVxufVxuXG5jb25zdCBidWlsZFNlYXJjaEVudGl0aWVzRXh0cmEgPSAodHlwZTogU2VhcmNoRmlsdGVyYWJsZVR5cGUsIHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAodHlwZSA9PT0gJ3Rhc2snKSByZXR1cm4gYnVpbGRUYXNrU2VhcmNoRXh0cmEoc2NvcGUpXG4gIGlmICh0eXBlID09PSAncHJvamVjdCcpIHJldHVybiBidWlsZFByb2plY3RTZWFyY2hFeHRyYShzY29wZSlcbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFRhYiBgdGFza2AgLyBgcHJvamVjdGA6IGBmaWx0ZXJzYCBzw7NsbyB0aXBvICsgYXJjaGl2ZWQgKHRhcmVhczogbm8gYXJjaGl2YWRhcyk7IHNjb3BlIChjbGllbnRJZCAvIHByb2plY3RJZCBlbiB0YXJlYXMpIGVuIGBleHRyYWAuXG4gKi9cbmNvbnN0IGJ1aWxkRmlsdGVyc0ZvclR5cGUgPSAodHlwZTogU2VhcmNoRmlsdGVyYWJsZVR5cGUpOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KEJBU0VfRklMVEVSU19CWV9UWVBFLnByb2plY3QpXG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KEJBU0VfRklMVEVSU19CWV9UWVBFLnRhc2spXG59XG5cbi8qKlxuICogRmlsdHJvcyBwYXJhIHVzZXJzRGlyZWN0b3J5LiBFbCBiYWNrZW5kIGVzcGVyYSB1biBKU09OIHN0cmluZyBjb25cbiAqIHdpdGhQb3NpdGlvbiwgd2l0aFRlYW1zIHkgc2VhcmNoSW5wdXQuIExlIGFncmVnYW1vcyBjbGllbnRJZC9wcm9qZWN0SWRcbiAqIGRlbCBzY29wZSBlbiBjYXNvIGRlIHF1ZSBlbCBiYWNrZW5kIGxvcyBhcHJvdmVjaGUgcGFyYSBmaWx0cmFyIHBvclxuICogY29udGV4dG8gKHNpIG5vIGxvcyBlbnRpZW5kZSBsb3MgaWdub3JhKS5cbiAqL1xuY29uc3QgYnVpbGRVc2Vyc0RpcmVjdG9yeUZpbHRlcnMgPSAocTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgYmFzZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgd2l0aFBvc2l0aW9uOiB0cnVlLFxuICAgIHdpdGhUZWFtczogdHJ1ZSxcbiAgfVxuICBjb25zdCB0cmltbWVkUSA9IHEudHJpbSgpXG4gIGlmICh0cmltbWVkUSkge1xuICAgIGJhc2Uuc2VhcmNoSW5wdXQgPSB0cmltbWVkUVxuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShiYXNlKVxufVxuXG5jb25zdCBoaWdobGlnaHRSYW5nZSA9ICh0ZXh0OiBzdHJpbmcsIHNlYXJjaFZhbHVlOiBzdHJpbmcpID0+IHtcbiAgaWYgKCFzZWFyY2hWYWx1ZSkgcmV0dXJuIHVuZGVmaW5lZFxuICBjb25zdCBpZHggPSB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKVxuICBpZiAoaWR4IDwgMCkgcmV0dXJuIHVuZGVmaW5lZFxuICByZXR1cm4geyBzdGFydDogaWR4LCBsZW5ndGg6IHNlYXJjaFZhbHVlLmxlbmd0aCB9XG59XG5cbmNvbnN0IGZpcnN0RGVmaW5lZCA9IDxUPiguLi52YWx1ZXM6IEFycmF5PFQgfCBudWxsIHwgdW5kZWZpbmVkPik6IFQgfCB1bmRlZmluZWQgPT5cbiAgdmFsdWVzLmZpbmQodmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbClcblxuY29uc3QgbWFwQ2xpZW50VG9JdGVtID0gKGM6IFJhd0NsaWVudCwgc2VhcmNoVmFsdWU6IHN0cmluZyk6IENvbnRleHRNZW50aW9uSXRlbSA9PiAoe1xuICBpZDogYy5pZCxcbiAgdHlwZTogJ2NsaWVudCcsXG4gIHByaW1hcnk6IGMubmFtZSxcbiAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UoYy5uYW1lLCBzZWFyY2hWYWx1ZSksXG4gIGJyZWFkY3J1bWI6IHtcbiAgICBjb3VudDogYy50b3RhbFByb3llY3RvcyA/PyB1bmRlZmluZWQsXG4gICAgY291bnRMYWJlbDogJ3Byb2plY3RzJyxcbiAgfSxcbiAgcmF3OiB7XG4gICAgaWQ6IGMuaWQsXG4gICAgbmFtZTogYy5uYW1lLFxuICAgIHRvdGFsUHJveWVjdG9zOiBjLnRvdGFsUHJveWVjdG9zID8/IG51bGwsXG4gIH0sXG59KVxuXG5jb25zdCBtYXBVc2VyVG9JdGVtID0gKHU6IFJhd0RpcmVjdG9yeVVzZXIsIHNlYXJjaFZhbHVlOiBzdHJpbmcpOiBDb250ZXh0TWVudGlvbkl0ZW0gPT4ge1xuICBjb25zdCBmdWxsTmFtZSA9IGAke3UuZmlyc3ROYW1lID8/ICcnfSAke3UubGFzdE5hbWUgPz8gJyd9YC50cmltKClcbiAgY29uc3QgcHJpbWFyeSA9IGZ1bGxOYW1lIHx8IHUuZW1haWwgfHwgU3RyaW5nKHUuaWQpXG5cbiAgcmV0dXJuIHtcbiAgICBpZDogdS5pZCxcbiAgICB0eXBlOiAndXNlcicsXG4gICAgcHJpbWFyeSxcbiAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgcmF3OiB7XG4gICAgICBpZDogdS5pZCxcbiAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICBwaWN0dXJlOiB1LnBpY3R1cmUgPz8gbnVsbCxcbiAgICAgIHBvc2l0aW9uTmFtZTogdS5wb3NpdGlvbk5hbWUgPz8gbnVsbCxcbiAgICAgIGVtYWlsOiB1LmVtYWlsID8/IG51bGwsXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBtYXBDb3JVc2VyVG9Vc2VySXRlbSA9IChcbiAgdXNlcjogUmV0dXJuVHlwZTx0eXBlb2YgdXNlVXNlcj4sXG4gIHNlYXJjaFZhbHVlOiBzdHJpbmcsXG4gIG1lTGFiZWw6IHN0cmluZ1xuKTogQ29udGV4dE1lbnRpb25JdGVtID0+IHtcbiAgY29uc3QgZnVsbE5hbWUgPSBgJHt1c2VyLmZpcnN0TmFtZSA/PyAnJ30gJHt1c2VyLmxhc3ROYW1lID8/ICcnfWAudHJpbSgpXG4gIC8qKiBTb2xvIGNhcmdvIHJlYWw7IHNpbiBmYWxsYmFjayBhIGByb2xlYCAobGEgVUkgbXVlc3RyYSDigJxTaW4gcG9zaWNpw7Nu4oCdIHNpIGZhbHRhKS4gKi9cbiAgY29uc3QgcG9zaXRpb25MaW5lID0gdXNlci51c2VyX3Bvc2l0aW9uPy50cmltKCkgfHwgbnVsbFxuXG4gIHJldHVybiB7XG4gICAgaWQ6IHVzZXIuaWQsXG4gICAgdHlwZTogJ3VzZXInLFxuICAgIHByaW1hcnk6IG1lTGFiZWwsXG4gICAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UobWVMYWJlbCwgc2VhcmNoVmFsdWUpLFxuICAgIHJhdzoge1xuICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICBuYW1lOiBmdWxsTmFtZSB8fCBTdHJpbmcodXNlci5pZCksXG4gICAgICBwaWN0dXJlOiB1c2VyLnBpY3R1cmUgfHwgbnVsbCxcbiAgICAgIHBvc2l0aW9uTmFtZTogcG9zaXRpb25MaW5lLFxuICAgICAgZW1haWw6IHVzZXIuZW1haWw/LnRyaW0oKSB8fCBudWxsLFxuICAgIH0sXG4gIH1cbn1cblxuY29uc3QgbWFwUmVjZW50VGFza1RvSXRlbSA9IChcbiAgdGFzazogUmVjZW50VGFza0l0ZW0sXG4gIHNlYXJjaFZhbHVlOiBzdHJpbmcsXG4gIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyA9IHRydWVcbik6IENvbnRleHRNZW50aW9uSXRlbSA9PiB7XG4gIGNvbnN0IHByaW1hcnkgPSAodGFzay50aXRsZSAmJiB0YXNrLnRpdGxlLnRyaW0oKSkgfHwgU3RyaW5nKHRhc2suaWQpXG4gIGNvbnN0IHByb2plY3ROYW1lID0gc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93ID8gKHRhc2sucHJvamVjdE5hbWUgPz8gbnVsbCkgOiBudWxsXG4gIHJldHVybiB7XG4gICAgaWQ6IHRhc2suaWQsXG4gICAgdHlwZTogJ3Rhc2snLFxuICAgIHByaW1hcnksXG4gICAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UocHJpbWFyeSwgc2VhcmNoVmFsdWUpLFxuICAgIGJyZWFkY3J1bWI6IHByb2plY3ROYW1lID8geyBwYXJlbnQ6IHByb2plY3ROYW1lIH0gOiB1bmRlZmluZWQsXG4gICAgcmF3OiB7XG4gICAgICBpZDogdGFzay5pZCxcbiAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICBwcm9qZWN0TmFtZSxcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZVRhc2tGYW1pbHlSZWNvcmQgPSAocmVjb3JkOiBUYXNrRmFtaWx5UmVjb3JkKTogUmVjZW50VGFza0l0ZW0gfCBudWxsID0+IHtcbiAgY29uc3QgeyBfaWQ6IHRhc2tGYW1pbHlJZCB9ID0gcmVjb3JkXG4gIGNvbnN0IGlkID0gdGFza0ZhbWlseUlkXG4gIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBudWxsIHx8IFN0cmluZyhpZCkgPT09ICcnKSByZXR1cm4gbnVsbFxuICBjb25zdCB0aXRsZSA9IChyZWNvcmQudGl0bGUgPz8gJycpLnRyaW0oKSB8fCBTdHJpbmcoaWQpXG4gIGNvbnN0IHByb2plY3ROYW1lID0gZmlyc3REZWZpbmVkKHJlY29yZC5wcm9qZWN0Py5uYW1lLCByZWNvcmQuZmF0aGVyPy50aXRsZSkgPz8gbnVsbFxuICBjb25zdCBoYXNGYXRoZXIgPSAhIWZpcnN0RGVmaW5lZChyZWNvcmQudGFza0ZhdGhlciwgcmVjb3JkLmZhdGhlcj8uaWQpXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgdGl0bGUsXG4gICAgdHlwZTogaGFzRmF0aGVyID8gJ3N1YnRhc2snIDogJ3Rhc2snLFxuICAgIHByb2plY3ROYW1lLFxuICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZVByb2plY3RzRmFsbGJhY2tSZWNvcmQgPSAocmVjb3JkOiBGYWxsYmFja1Byb2plY3RSZWNvcmQpOiBSYXdTZWFyY2hSZXN1bHQgfCBudWxsID0+IHtcbiAgY29uc3QgeyBpZCB9ID0gcmVjb3JkXG4gIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBudWxsIHx8IFN0cmluZyhpZCkgPT09ICcnKSByZXR1cm4gbnVsbFxuICBjb25zdCB0aXRsZSA9IHJlY29yZC5uYW1lID8/ICcnXG4gIGNvbnN0IGNsaWVudElkID0gZmlyc3REZWZpbmVkKHJlY29yZC5jbGllbnRJZCwgcmVjb3JkLmNsaWVudD8uaWQpID8/IG51bGxcbiAgY29uc3QgY2xpZW50TmFtZSA9IHJlY29yZC5jbGllbnQ/Lm5hbWUgPz8gbnVsbFxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIHRpdGxlLFxuICAgIHR5cGU6ICdwcm9qZWN0JyxcbiAgICBjbGllbnRJZCxcbiAgICBjbGllbnROYW1lLFxuICB9XG59XG5cbmNvbnN0IG1hcFNlYXJjaFRvSXRlbSA9IChcbiAgcjogUmF3U2VhcmNoUmVzdWx0LFxuICB0eXBlOiBDb250ZXh0RW50aXR5VHlwZSxcbiAgc2VhcmNoVmFsdWU6IHN0cmluZyxcbiAgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93ID0gdHJ1ZVxuKTogQ29udGV4dE1lbnRpb25JdGVtID0+IHtcbiAgY29uc3QgcHJpbWFyeSA9IHIudGl0bGUgfHwgci5wcm9qZWN0TmFtZSB8fCAnJ1xuICBsZXQgcGFyZW50OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gIGlmICh0eXBlID09PSAncHJvamVjdCcpIHBhcmVudCA9IHIuY2xpZW50TmFtZVxuICBlbHNlIGlmICh0eXBlID09PSAndGFzaycpIHBhcmVudCA9IHVuZGVmaW5lZFxuICBlbHNlIHBhcmVudCA9IHIucHJvamVjdE5hbWUgPz8gci5jbGllbnROYW1lXG5cbiAgY29uc3QgZmF0aGVyID0gdHlwZSA9PT0gJ3Rhc2snID8gci5mYXRoZXIgOiBudWxsXG4gIGNvbnN0IGhhc0ZhdGhlciA9IHR5cGUgPT09ICd0YXNrJyAmJiBmYXRoZXIgIT0gbnVsbCAmJiBmYXRoZXIuaWQgIT0gbnVsbCAmJiBTdHJpbmcoZmF0aGVyLmlkKS5sZW5ndGggPiAwXG5cbiAgY29uc3QgdGFza1Byb2plY3ROYW1lID0gdHlwZSA9PT0gJ3Rhc2snICYmICFzaG93UHJvamVjdE5hbWVJblRhc2tSb3cgPyBudWxsIDogKHIucHJvamVjdE5hbWUgPz8gbnVsbClcblxuICByZXR1cm4ge1xuICAgIGlkOiByLmlkLFxuICAgIHR5cGUsXG4gICAgcHJpbWFyeSxcbiAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgYnJlYWRjcnVtYjogcGFyZW50ID8geyBwYXJlbnQgfSA6IHVuZGVmaW5lZCxcbiAgICByYXc6IHtcbiAgICAgIGlkOiByLmlkLFxuICAgICAgbmFtZTogcHJpbWFyeSxcbiAgICAgIGNsaWVudElkOiByLmNsaWVudElkID8/IG51bGwsXG4gICAgICBjbGllbnROYW1lOiByLmNsaWVudE5hbWUgPz8gbnVsbCxcbiAgICAgIHByb2plY3ROYW1lOiB0YXNrUHJvamVjdE5hbWUsXG4gICAgICBmZWVJZDogci5mZWVJZCA/PyBudWxsLFxuICAgICAgZmF0aGVySWQ6IGhhc0ZhdGhlciA/IGZhdGhlci5pZCA6IG51bGwsXG4gICAgICBmYXRoZXJUaXRsZTogaGFzRmF0aGVyID8gZmF0aGVyLnRpdGxlPy50cmltKCkgfHwgbnVsbCA6IG51bGwsXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBmb3JtYXRNY3BQcmltYXJ5TGFiZWwgPSAoc2x1Zzogc3RyaW5nKTogc3RyaW5nID0+XG4gIHNsdWcucmVwbGFjZSgvXy9nLCAnICcpLnJlcGxhY2UoL1xcYlxcdy9nLCBjaGFyID0+IGNoYXIudG9VcHBlckNhc2UoKSlcblxuY29uc3QgbWFwTWNwU2x1Z3NUb0l0ZW1zID0gKHNsdWdzOiBzdHJpbmdbXSwgc2VhcmNoVmFsdWU6IHN0cmluZyk6IENvbnRleHRNZW50aW9uSXRlbVtdID0+IHtcbiAgY29uc3QgcSA9IHNlYXJjaFZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gIGxldCBmaWx0ZXJlZCA9IHNsdWdzXG4gIGlmIChxKSB7XG4gICAgZmlsdGVyZWQgPSBzbHVncy5maWx0ZXIocyA9PiB7XG4gICAgICBjb25zdCBwcmltYXJ5ID0gZm9ybWF0TWNwUHJpbWFyeUxhYmVsKHMpXG4gICAgICByZXR1cm4gcy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpIHx8IHByaW1hcnkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGZpbHRlcmVkLm1hcChzbHVnID0+IHtcbiAgICBjb25zdCBwcmltYXJ5ID0gZm9ybWF0TWNwUHJpbWFyeUxhYmVsKHNsdWcpXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBzbHVnLFxuICAgICAgdHlwZTogJ21jcCcgYXMgY29uc3QsXG4gICAgICBwcmltYXJ5LFxuICAgICAgcHJpbWFyeUhpZ2hsaWdodDogaGlnaGxpZ2h0UmFuZ2UocHJpbWFyeSwgc2VhcmNoVmFsdWUpLFxuICAgICAgcmF3OiB7XG4gICAgICAgIGlkOiBzbHVnLFxuICAgICAgICBuYW1lOiBwcmltYXJ5LFxuICAgICAgfSxcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBjb25zdCB1c2VFbnRpdHlTZWFyY2ggPSAodHlwZTogQ29udGV4dEVudGl0eVR5cGUsIHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpID0+IHtcbiAgY29uc3QgY29yVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBkZWJvdW5jZWRTZWFyY2hWYWx1ZSA9IHVzZURlYm91bmNlKHNlYXJjaFZhbHVlLCBTRUFSQ0hfUVVFUllfREVCT1VOQ0VfTVMpXG5cbiAgY29uc3QgW2l0ZW1zLCBzZXRJdGVtc10gPSB1c2VTdGF0ZTxDb250ZXh0TWVudGlvbkl0ZW1bXT4oW10pXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaGlkZVJlY2VudHNMYWJlbCwgc2V0SGlkZVJlY2VudHNMYWJlbF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2hhc01vcmUsIHNldEhhc01vcmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc0xvYWRpbmdNb3JlLCBzZXRJc0xvYWRpbmdNb3JlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY3VycmVudFBhZ2UsIHNldEN1cnJlbnRQYWdlXSA9IHVzZVN0YXRlKDEpXG4gIGNvbnN0IFthY3RpdmVQYWdpbmF0aW9uU291cmNlLCBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlXSA9IHVzZVN0YXRlPFBhZ2luYXRpb25Tb3VyY2U+KCdub25lJylcblxuICBjb25zdCBtY3BTbHVnc0tleSA9IChzY29wZT8ubWNwU2x1Z3MgPz8gW10pLmpvaW4oJ3wnKVxuICBjb25zdCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cgPSBzY29wZT8uYWdlbnRFbnRpdHkgIT09ICdwcm9qZWN0J1xuXG4gIC8vIEVzdGFiaWxpemFtb3MgZWwgc2NvcGUgcGFyYSBubyBkaXNwYXJhciBmZXRjaHMgcG9yIGNhbWJpb3MgZGUgaWRlbnRpZGFkIGRlIG9iamV0by5cbiAgY29uc3Qgc3RhYmxlU2NvcGUgPSB1c2VNZW1vPEVudGl0eVNlYXJjaFNjb3BlPihcbiAgICAoKSA9PiAoe1xuICAgICAgY2xpZW50SWQ6IHNjb3BlPy5jbGllbnRJZCA/PyBudWxsLFxuICAgICAgcHJvamVjdElkOiBzY29wZT8ucHJvamVjdElkID8/IG51bGwsXG4gICAgICBtY3BTbHVnczogc2NvcGU/Lm1jcFNsdWdzID8/IFtdLFxuICAgICAgYWdlbnRFbnRpdHk6IHNjb3BlPy5hZ2VudEVudGl0eSA/PyBudWxsLFxuICAgIH0pLFxuICAgIFtzY29wZT8uY2xpZW50SWQsIHNjb3BlPy5wcm9qZWN0SWQsIG1jcFNsdWdzS2V5LCBzY29wZT8uYWdlbnRFbnRpdHldXG4gIClcblxuICAvLyAtLS0gU2VhcmNoOiBwcm9qZWN0IHwgdGFzayAoR3JhcGhRTDogc2VhcmNoKSAtLS1cbiAgY29uc3QgW2ZldGNoU2VhcmNoRW50aXRpZXMsIHsgZGF0YTogc2VhcmNoRGF0YSwgbG9hZGluZzogc2VhcmNoTG9hZGluZywgZXJyb3I6IHNlYXJjaEVycm9yIH1dID1cbiAgICB1c2VMYXp5UXVlcnk8U2VhcmNoRW50aXRpZXNEYXRhPihTRUFSQ0hfRU5USVRJRVMsIHtcbiAgICAgIHZhcmlhYmxlczogeyBsaW1pdDogMjAgfSxcbiAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICB9KVxuXG4gIC8vIC0tLSBTZWFyY2g6IGNsaWVudCAoR3JhcGhRTCkgLS0tXG4gIGNvbnN0IFtmZXRjaFNlYXJjaENsaWVudHMsIHsgZGF0YTogY2xpZW50c0RhdGEsIGxvYWRpbmc6IGNsaWVudHNMb2FkaW5nLCBlcnJvcjogY2xpZW50c0Vycm9yIH1dID1cbiAgICB1c2VMYXp5UXVlcnk8U2VhcmNoQ2xpZW50c0RhdGE+KFNFQVJDSF9DTElFTlRTLCB7XG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgfSlcblxuICAvLyAtLS0gU2VhcmNoOiB1c2VyIChHcmFwaFFMOiB1c2Vyc0RpcmVjdG9yeSkgLS0tXG4gIGNvbnN0IFtmZXRjaFVzZXJzRGlyZWN0b3J5LCB7IGRhdGE6IHVzZXJzRGF0YSwgbG9hZGluZzogdXNlcnNMb2FkaW5nLCBlcnJvcjogdXNlcnNFcnJvciB9XSA9XG4gICAgdXNlTGF6eVF1ZXJ5PFVzZXJzRGlyZWN0b3J5RGF0YT4oVVNFUlNfRElSRUNUT1JZLCB7XG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgfSlcblxuICBjb25zdCBzeW5jVXNlcnNQYWdpbmF0aW9uID0gdXNlQ2FsbGJhY2soKHBheWxvYWQ/OiBVc2Vyc0RpcmVjdG9yeURhdGEgfCBudWxsKSA9PiB7XG4gICAgY29uc3QgcGFnZSA9IG5vcm1hbGl6ZVBvc2l0aXZlSW50KHBheWxvYWQ/LnVzZXJzRGlyZWN0b3J5Py5wYWdlLCAxKVxuICAgIGNvbnN0IGxhc3RQYWdlID0gbm9ybWFsaXplUG9zaXRpdmVJbnQocGF5bG9hZD8udXNlcnNEaXJlY3Rvcnk/Lmxhc3RQYWdlLCBwYWdlKVxuICAgIHNldEN1cnJlbnRQYWdlKHBhZ2UpXG4gICAgc2V0SGFzTW9yZShwYWdlIDwgbGFzdFBhZ2UpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN5bmNDbGllbnRzUGFnaW5hdGlvbiA9IHVzZUNhbGxiYWNrKChwYXlsb2FkPzogU2VhcmNoQ2xpZW50c0RhdGEgfCBudWxsKSA9PiB7XG4gICAgY29uc3QgcGFnZSA9IG5vcm1hbGl6ZVBvc2l0aXZlSW50KHBheWxvYWQ/LmNsaWVudHM/LnBhZ2UsIDEpXG4gICAgY29uc3QgbGFzdFBhZ2UgPSBub3JtYWxpemVQb3NpdGl2ZUludChwYXlsb2FkPy5jbGllbnRzPy5sYXN0UGFnZSwgcGFnZSlcbiAgICBzZXRDdXJyZW50UGFnZShwYWdlKVxuICAgIHNldEhhc01vcmUocGFnZSA8IGxhc3RQYWdlKVxuICB9LCBbXSlcblxuICBjb25zdCBzeW5jVGFza0ZhbGxiYWNrUGFnaW5hdGlvbiA9IHVzZUNhbGxiYWNrKChwYXlsb2FkPzogVGFza0ZhbWlseURhdGEgfCBudWxsKSA9PiB7XG4gICAgY29uc3QgcGFnZSA9IG5vcm1hbGl6ZVBvc2l0aXZlSW50KHBheWxvYWQ/LnRhc2tGYW1pbHk/LnBhZ2UsIDEpXG4gICAgY29uc3QgbGFzdFBhZ2UgPSBub3JtYWxpemVQb3NpdGl2ZUludChwYXlsb2FkPy50YXNrRmFtaWx5Py5sYXN0UGFnZSwgcGFnZSlcbiAgICBzZXRDdXJyZW50UGFnZShwYWdlKVxuICAgIHNldEhhc01vcmUocGFnZSA8IGxhc3RQYWdlKVxuICB9LCBbXSlcblxuICBjb25zdCBzeW5jUHJvamVjdEZhbGxiYWNrUGFnaW5hdGlvbiA9IHVzZUNhbGxiYWNrKChwYXlsb2FkPzogUHJvamVjdHNGYWxsYmFja0RhdGEgfCBudWxsKSA9PiB7XG4gICAgY29uc3QgcGFnZSA9IG5vcm1hbGl6ZVBvc2l0aXZlSW50KHBheWxvYWQ/LnByb2plY3RzPy5wYWdlLCAxKVxuICAgIGNvbnN0IGxhc3RQYWdlID0gbm9ybWFsaXplUG9zaXRpdmVJbnQocGF5bG9hZD8ucHJvamVjdHM/Lmxhc3RQYWdlLCBwYWdlKVxuICAgIHNldEN1cnJlbnRQYWdlKHBhZ2UpXG4gICAgc2V0SGFzTW9yZShwYWdlIDwgbGFzdFBhZ2UpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IFtmZXRjaFRhc2tGYW1pbHlGYWxsYmFja10gPSB1c2VMYXp5UXVlcnk8VGFza0ZhbWlseURhdGE+KFRBU0tfRkFNSUxZX0ZBTExCQUNLLCB7XG4gICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICB9KVxuXG4gIGNvbnN0IFtmZXRjaFByb2plY3RzRmFsbGJhY2tdID0gdXNlTGF6eVF1ZXJ5PFByb2plY3RzRmFsbGJhY2tEYXRhPihQUk9KRUNUU19GQUxMQkFDSywge1xuICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgfSlcblxuICBjb25zdCBmZXRjaFJlY2VudCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAodHlwZSA9PT0gJ21jcCcpIHtcbiAgICAgIGNvbnN0IHNsdWdzID0gc3RhYmxlU2NvcGUubWNwU2x1Z3MgPz8gW11cbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIHNldEl0ZW1zKG1hcE1jcFNsdWdzVG9JdGVtcyhzbHVncywgJycpKVxuICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgIHNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UoJ25vbmUnKVxuICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICBzZXRFcnJvcihmYWxzZSlcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGUgPT09ICdjbGllbnQnKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZWNlbnRDbGllbnRzKClcbiAgICAgICAgY29uc3QgbWFwcGVkID0gKGRhdGEgPz8gW10pLm1hcChjID0+IG1hcENsaWVudFRvSXRlbShjLCAnJykpXG4gICAgICAgIHNldEl0ZW1zKG1hcHBlZClcbiAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgnbm9uZScpXG4gICAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwcm9qZWN0Jykge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVjZW50UHJvamVjdHMoc3RhYmxlU2NvcGUuY2xpZW50SWQgPyB7IGNsaWVudElkOiBzdGFibGVTY29wZS5jbGllbnRJZCB9IDogdW5kZWZpbmVkKVxuICAgICAgICBsZXQgbWFwcGVkID0gKEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogW10pLm1hcChwID0+XG4gICAgICAgICAgbWFwU2VhcmNoVG9JdGVtKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgICAgICAgdGl0bGU6IHAudGl0bGUsXG4gICAgICAgICAgICAgIHR5cGU6ICdwcm9qZWN0JyxcbiAgICAgICAgICAgICAgY2xpZW50SWQ6IHAuY2xpZW50SWQsXG4gICAgICAgICAgICAgIGZlZUlkOiBwLmZlZUlkLFxuICAgICAgICAgICAgICBjbGllbnROYW1lOiBwLmNsaWVudE5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3Byb2plY3QnLFxuICAgICAgICAgICAgJydcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgaWYgKG1hcHBlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb25zdCBhcmd1bWVudHNGaWx0ZXIgPVxuICAgICAgICAgICAgc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09IG51bGwgJiYgc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gJydcbiAgICAgICAgICAgICAgPyB7IGNsaWVudF9pZDogW1N0cmluZyhzdGFibGVTY29wZS5jbGllbnRJZCldIH1cbiAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICBjb25zdCB7IGRhdGE6IGZhbGxiYWNrRGF0YSB9ID0gYXdhaXQgZmV0Y2hQcm9qZWN0c0ZhbGxiYWNrKHtcbiAgICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgICAuLi4oYXJndW1lbnRzRmlsdGVyID8geyBhcmd1bWVudHM6IGFyZ3VtZW50c0ZpbHRlciB9IDoge30pLFxuICAgICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgICBwZXJQYWdlOiAyMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zdCBmYWxsYmFja01hcHBlZCA9IChmYWxsYmFja0RhdGE/LnByb2plY3RzPy5kYXRhID8/IFtdKVxuICAgICAgICAgICAgLm1hcChub3JtYWxpemVQcm9qZWN0c0ZhbGxiYWNrUmVjb3JkKVxuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgUmF3U2VhcmNoUmVzdWx0ID0+IGl0ZW0gIT09IG51bGwpXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4gbWFwU2VhcmNoVG9JdGVtKGl0ZW0sICdwcm9qZWN0JywgJycpKVxuICAgICAgICAgIG1hcHBlZCA9IGZhbGxiYWNrTWFwcGVkXG4gICAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxsYmFja01hcHBlZC5sZW5ndGggPiAwKVxuICAgICAgICAgIHNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UoJ3Byb2plY3QtZmFsbGJhY2snKVxuICAgICAgICAgIHN5bmNQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uKGZhbGxiYWNrRGF0YSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgICAgICAgIHNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UoJ25vbmUnKVxuICAgICAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgICAgc2V0SXRlbXMobWFwcGVkKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndGFzaycpIHtcbiAgICAgICAgbGV0IHJlY2VudFRhc2tGaWx0ZXJzOiB7IHByb2plY3RJZD86IHN0cmluZyB8IG51bWJlciB8IG51bGw7IGNsaWVudElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB9IHwgdW5kZWZpbmVkXG4gICAgICAgIGlmIChzdGFibGVTY29wZS5hZ2VudEVudGl0eSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgICAgICAgcmVjZW50VGFza0ZpbHRlcnMgPSB7IHByb2plY3RJZDogc3RhYmxlU2NvcGUucHJvamVjdElkIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGFibGVTY29wZS5hZ2VudEVudGl0eSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgICByZWNlbnRUYXNrRmlsdGVycyA9IHsgY2xpZW50SWQ6IHN0YWJsZVNjb3BlLmNsaWVudElkIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0UmVjZW50VGFza3MocmVjZW50VGFza0ZpbHRlcnMpXG4gICAgICAgIGxldCB0YXNrSXRlbXMgPSAoZGF0YSA/PyBbXSkubWFwKHRhc2sgPT4gbWFwUmVjZW50VGFza1RvSXRlbSh0YXNrLCAnJywgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93KSlcbiAgICAgICAgaWYgKHRhc2tJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9XG4gICAgICAgICAgaWYgKHN0YWJsZVNjb3BlLnByb2plY3RJZCAhPT0gbnVsbCAmJiBzdGFibGVTY29wZS5wcm9qZWN0SWQgIT09IHVuZGVmaW5lZCAmJiBzdGFibGVTY29wZS5wcm9qZWN0SWQgIT09ICcnKSB7XG4gICAgICAgICAgICBmaWx0ZXIucHJvamVjdElkcyA9IFtTdHJpbmcoc3RhYmxlU2NvcGUucHJvamVjdElkKV1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSBudWxsICYmIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09ICcnKSB7XG4gICAgICAgICAgICBmaWx0ZXIuY2xpZW50SWRzID0gW1N0cmluZyhzdGFibGVTY29wZS5jbGllbnRJZCldXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgZGF0YTogZmFsbGJhY2tEYXRhIH0gPSBhd2FpdCBmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayh7XG4gICAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgICAgLi4uKE9iamVjdC5rZXlzKGZpbHRlcikubGVuZ3RoID4gMCA/IHsgZmlsdGVyIH0gOiB7fSksXG4gICAgICAgICAgICAgIHBhZ2luYXRpb246IHsgb2Zmc2V0OiAwLCBzaXplOiAyMCB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRhc2tJdGVtcyA9IChmYWxsYmFja0RhdGE/LnRhc2tGYW1pbHk/LmRhdGEgPz8gW10pXG4gICAgICAgICAgICAubWFwKG5vcm1hbGl6ZVRhc2tGYW1pbHlSZWNvcmQpXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSZWNlbnRUYXNrSXRlbSA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAgICAgLm1hcCh0YXNrID0+IG1hcFJlY2VudFRhc2tUb0l0ZW0odGFzaywgJycsIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdykpXG4gICAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbCh0YXNrSXRlbXMubGVuZ3RoID4gMClcbiAgICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCd0YXNrLWZhbGxiYWNrJylcbiAgICAgICAgICBzeW5jVGFza0ZhbGxiYWNrUGFnaW5hdGlvbihmYWxsYmFja0RhdGEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdub25lJylcbiAgICAgICAgICBzZXRIYXNNb3JlKGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIHNldEl0ZW1zKHRhc2tJdGVtcylcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZmV0Y2hVc2Vyc0RpcmVjdG9yeSh7XG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBmaWx0ZXJzOiBidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycygnJyksXG4gICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG1hcHBlZCA9IChkYXRhPy51c2Vyc0RpcmVjdG9yeT8uZGF0YSA/PyBbXSkubWFwKHUgPT4gbWFwVXNlclRvSXRlbSh1LCAnJykpXG4gICAgICAgIGNvbnN0IG1lSXRlbSA9IG1hcENvclVzZXJUb1VzZXJJdGVtKGNvclVzZXIsICcnLCB0KCdjb250ZXh0TWVudGlvbi5tZScpKVxuICAgICAgICBjb25zdCB3aXRob3V0TWUgPSBtYXBwZWQuZmlsdGVyKGl0ZW0gPT4gU3RyaW5nKGl0ZW0uaWQpICE9PSBTdHJpbmcobWVJdGVtLmlkKSlcbiAgICAgICAgc2V0SXRlbXMoW21lSXRlbSwgLi4ud2l0aG91dE1lXSlcbiAgICAgICAgc3luY1VzZXJzUGFnaW5hdGlvbihkYXRhKVxuICAgICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCd1c2VycycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRJdGVtcyhbXSlcbiAgICAgICAgc2V0SGlkZVJlY2VudHNMYWJlbChmYWxzZSlcbiAgICAgICAgc2V0QWN0aXZlUGFnaW5hdGlvblNvdXJjZSgnbm9uZScpXG4gICAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgICAgIHNldEN1cnJlbnRQYWdlKDEpXG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgc2V0SXRlbXMoW10pXG4gICAgICBzZXRIaWRlUmVjZW50c0xhYmVsKGZhbHNlKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfSwgW1xuICAgIHR5cGUsXG4gICAgc3RhYmxlU2NvcGUsXG4gICAgZmV0Y2hVc2Vyc0RpcmVjdG9yeSxcbiAgICBmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayxcbiAgICBmZXRjaFByb2plY3RzRmFsbGJhY2ssXG4gICAgc3luY1VzZXJzUGFnaW5hdGlvbixcbiAgICBzeW5jVGFza0ZhbGxiYWNrUGFnaW5hdGlvbixcbiAgICBzeW5jUHJvamVjdEZhbGxiYWNrUGFnaW5hdGlvbixcbiAgICBzaG93UHJvamVjdE5hbWVJblRhc2tSb3csXG4gICAgY29yVXNlcixcbiAgICB0LFxuICBdKVxuXG4gIC8vIERpc3BhcmFyIHNlYXJjaCBhbCBjYW1iaWFyIGRlYm91bmNlZCB2YWx1ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHEgPSBkZWJvdW5jZWRTZWFyY2hWYWx1ZS50cmltKClcblxuICAgIGlmICh0eXBlID09PSAnbWNwJykge1xuICAgICAgY29uc3Qgc2x1Z3MgPSBzdGFibGVTY29wZS5tY3BTbHVncyA/PyBbXVxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgc2V0SXRlbXMobWFwTWNwU2x1Z3NUb0l0ZW1zKHNsdWdzLCBxKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghcSkgcmV0dXJuXG5cbiAgICBpZiAodHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIGZldGNoU2VhcmNoQ2xpZW50cyh7XG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIGZpbHRlcjogeyBuYW1lOiBxIH0sXG4gICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICBwZXJQYWdlOiAyMCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdjbGllbnRzLXNlYXJjaCcpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndXNlcicpIHtcbiAgICAgIGZldGNoVXNlcnNEaXJlY3Rvcnkoe1xuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBmaWx0ZXJzOiBidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyhxKSxcbiAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIHNldEFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UoJ3VzZXJzJylcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlsdGVycyA9IGJ1aWxkRmlsdGVyc0ZvclR5cGUodHlwZSlcbiAgICAgIGNvbnN0IGV4dHJhID0gYnVpbGRTZWFyY2hFbnRpdGllc0V4dHJhKHR5cGUsIHN0YWJsZVNjb3BlKVxuICAgICAgZmV0Y2hTZWFyY2hFbnRpdGllcyh7XG4gICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgIHEsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAuLi4oZXh0cmEgIT09IHVuZGVmaW5lZCA/IHsgZXh0cmEgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICBzZXRBY3RpdmVQYWdpbmF0aW9uU291cmNlKCdub25lJylcbiAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgfVxuICB9LCBbZGVib3VuY2VkU2VhcmNoVmFsdWUsIHR5cGUsIHN0YWJsZVNjb3BlLCBmZXRjaFNlYXJjaEVudGl0aWVzLCBmZXRjaFNlYXJjaENsaWVudHMsIGZldGNoVXNlcnNEaXJlY3RvcnldKVxuXG4gIC8vIFNpbmNyb25pemFyIHJlc3VsdGFkb3MgZGUgc2VhcmNoXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGUgPT09ICdtY3AnKSByZXR1cm5cblxuICAgIGNvbnN0IHEgPSBkZWJvdW5jZWRTZWFyY2hWYWx1ZS50cmltKClcbiAgICBpZiAoIXEpIHJldHVyblxuICAgIHNldEhpZGVSZWNlbnRzTGFiZWwoZmFsc2UpXG5cbiAgICBpZiAodHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIHNldExvYWRpbmcoY2xpZW50c0xvYWRpbmcpXG4gICAgICBpZiAoY2xpZW50c0Vycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGNsaWVudHNEYXRhPy5jbGllbnRzPy5kYXRhKSB7XG4gICAgICAgIHNldEl0ZW1zKGNsaWVudHNEYXRhLmNsaWVudHMuZGF0YS5tYXAoYyA9PiBtYXBDbGllbnRUb0l0ZW0oYywgcSkpKVxuICAgICAgICBzeW5jQ2xpZW50c1BhZ2luYXRpb24oY2xpZW50c0RhdGEpXG4gICAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICBzZXRMb2FkaW5nKHVzZXJzTG9hZGluZylcbiAgICAgIGlmICh1c2Vyc0Vycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHVzZXJzRGF0YT8udXNlcnNEaXJlY3Rvcnk/LmRhdGEpIHtcbiAgICAgICAgY29uc3QgbWFwcGVkID0gdXNlcnNEYXRhLnVzZXJzRGlyZWN0b3J5LmRhdGEubWFwKHUgPT4gbWFwVXNlclRvSXRlbSh1LCBxKSlcbiAgICAgICAgY29uc3QgbWVJZCA9IFN0cmluZyhjb3JVc2VyLmlkKVxuICAgICAgICBjb25zdCBoYXNNZUluUmVzdWx0cyA9IG1hcHBlZC5zb21lKGl0ZW0gPT4gU3RyaW5nKGl0ZW0uaWQpID09PSBtZUlkKVxuICAgICAgICBjb25zdCB3aXRob3V0TWUgPSBtYXBwZWQuZmlsdGVyKGl0ZW0gPT4gU3RyaW5nKGl0ZW0uaWQpICE9PSBtZUlkKVxuICAgICAgICBjb25zdCBtZUl0ZW0gPSBtYXBDb3JVc2VyVG9Vc2VySXRlbShjb3JVc2VyLCBxLCB0KCdjb250ZXh0TWVudGlvbi5tZScpKVxuICAgICAgICBzZXRJdGVtcyhoYXNNZUluUmVzdWx0cyA/IFttZUl0ZW0sIC4uLndpdGhvdXRNZV0gOiBtYXBwZWQpXG4gICAgICAgIHN5bmNVc2Vyc1BhZ2luYXRpb24odXNlcnNEYXRhKVxuICAgICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2V0TG9hZGluZyhzZWFyY2hMb2FkaW5nKVxuICAgICAgaWYgKHNlYXJjaEVycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaERhdGE/LnNlYXJjaCkge1xuICAgICAgICBzZXRJdGVtcyhzZWFyY2hEYXRhLnNlYXJjaC5tYXAociA9PiBtYXBTZWFyY2hUb0l0ZW0ociwgdHlwZSwgcSwgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93KSkpXG4gICAgICAgIHNldEhhc01vcmUoZmFsc2UpXG4gICAgICAgIHNldEVycm9yKGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIHNlYXJjaERhdGEsXG4gICAgY2xpZW50c0RhdGEsXG4gICAgdXNlcnNEYXRhLFxuICAgIHNlYXJjaExvYWRpbmcsXG4gICAgY2xpZW50c0xvYWRpbmcsXG4gICAgdXNlcnNMb2FkaW5nLFxuICAgIHNlYXJjaEVycm9yLFxuICAgIGNsaWVudHNFcnJvcixcbiAgICB1c2Vyc0Vycm9yLFxuICAgIGRlYm91bmNlZFNlYXJjaFZhbHVlLFxuICAgIHR5cGUsXG4gICAgc3luY0NsaWVudHNQYWdpbmF0aW9uLFxuICAgIHN5bmNVc2Vyc1BhZ2luYXRpb24sXG4gICAgc2hvd1Byb2plY3ROYW1lSW5UYXNrUm93LFxuICAgIGNvclVzZXIsXG4gICAgdCxcbiAgXSlcblxuICBjb25zdCBsb2FkTW9yZSA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nTW9yZSB8fCAhaGFzTW9yZSB8fCBhY3RpdmVQYWdpbmF0aW9uU291cmNlID09PSAnbm9uZScpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3VzZUVudGl0eVNlYXJjaF0gbG9hZE1vcmUgc2tpcHBlZCcsIHtcbiAgICAgICAgaXNMb2FkaW5nTW9yZSxcbiAgICAgICAgaGFzTW9yZSxcbiAgICAgICAgYWN0aXZlUGFnaW5hdGlvblNvdXJjZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgc2FmZUN1cnJlbnRQYWdlID0gbm9ybWFsaXplUG9zaXRpdmVJbnQoY3VycmVudFBhZ2UsIDEpXG4gICAgY29uc3QgbmV4dFBhZ2UgPSBzYWZlQ3VycmVudFBhZ2UgKyAxXG4gICAgY29uc3QgcSA9IGRlYm91bmNlZFNlYXJjaFZhbHVlLnRyaW0oKVxuICAgIGNvbnNvbGUuaW5mbygnW3VzZUVudGl0eVNlYXJjaF0gbG9hZE1vcmUgc3RhcnQnLCB7XG4gICAgICBzb3VyY2U6IGFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UsXG4gICAgICBjdXJyZW50UGFnZSxcbiAgICAgIG5leHRQYWdlLFxuICAgICAgcXVlcnk6IHEsXG4gICAgfSlcbiAgICBzZXRJc0xvYWRpbmdNb3JlKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGlmIChhY3RpdmVQYWdpbmF0aW9uU291cmNlID09PSAndXNlcnMnKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZmV0Y2hVc2Vyc0RpcmVjdG9yeSh7XG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBmaWx0ZXJzOiBidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyhxKSxcbiAgICAgICAgICAgIHBhZ2U6IG5leHRQYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnNvbGUuaW5mbygnW3VzZUVudGl0eVNlYXJjaF0gdXNlcnMgbG9hZE1vcmUgcmVzcG9uc2UnLCB7XG4gICAgICAgICAgcGFnZTogZGF0YT8udXNlcnNEaXJlY3Rvcnk/LnBhZ2UsXG4gICAgICAgICAgbGFzdFBhZ2U6IGRhdGE/LnVzZXJzRGlyZWN0b3J5Py5sYXN0UGFnZSxcbiAgICAgICAgICBjb3VudDogZGF0YT8udXNlcnNEaXJlY3Rvcnk/LmRhdGE/Lmxlbmd0aCA/PyAwLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBuZXh0SXRlbXMgPSAoZGF0YT8udXNlcnNEaXJlY3Rvcnk/LmRhdGEgPz8gW10pLm1hcCh1ID0+IG1hcFVzZXJUb0l0ZW0odSwgcSkpXG4gICAgICAgIHNldEl0ZW1zKHByZXYgPT4ge1xuICAgICAgICAgIGlmICghcSkge1xuICAgICAgICAgICAgY29uc3QgbWVJdGVtID1cbiAgICAgICAgICAgICAgcHJldlswXT8udHlwZSA9PT0gJ3VzZXInID8gcHJldlswXSA6IG1hcENvclVzZXJUb1VzZXJJdGVtKGNvclVzZXIsICcnLCB0KCdjb250ZXh0TWVudGlvbi5tZScpKVxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KHByZXYubWFwKGl0ZW0gPT4gU3RyaW5nKGl0ZW0uaWQpKSlcbiAgICAgICAgICAgIGNvbnN0IGFwcGVuZGVkID0gbmV4dEl0ZW1zLmZpbHRlcihpdGVtID0+ICFleGlzdGluZ0lkcy5oYXMoU3RyaW5nKGl0ZW0uaWQpKSlcbiAgICAgICAgICAgIGNvbnN0IHdpdGhvdXRNZSA9IHByZXYuZmlsdGVyKGl0ZW0gPT4gU3RyaW5nKGl0ZW0uaWQpICE9PSBTdHJpbmcobWVJdGVtLmlkKSlcbiAgICAgICAgICAgIHJldHVybiBbbWVJdGVtLCAuLi53aXRob3V0TWUsIC4uLmFwcGVuZGVkXVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQocHJldi5tYXAoaXRlbSA9PiBgJHtpdGVtLnR5cGV9LSR7aXRlbS5pZH1gKSlcbiAgICAgICAgICBjb25zdCBhcHBlbmRlZCA9IG5leHRJdGVtcy5maWx0ZXIoaXRlbSA9PiAhZXhpc3RpbmdJZHMuaGFzKGAke2l0ZW0udHlwZX0tJHtpdGVtLmlkfWApKVxuICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgLi4uYXBwZW5kZWRdXG4gICAgICAgIH0pXG4gICAgICAgIHN5bmNVc2Vyc1BhZ2luYXRpb24oZGF0YSlcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlUGFnaW5hdGlvblNvdXJjZSA9PT0gJ2NsaWVudHMtc2VhcmNoJykge1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGZldGNoU2VhcmNoQ2xpZW50cyh7XG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBmaWx0ZXI6IHsgbmFtZTogcSB9LFxuICAgICAgICAgICAgcGFnZTogbmV4dFBhZ2UsXG4gICAgICAgICAgICBwZXJQYWdlOiAyMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICBjb25zb2xlLmluZm8oJ1t1c2VFbnRpdHlTZWFyY2hdIGNsaWVudHMgbG9hZE1vcmUgcmVzcG9uc2UnLCB7XG4gICAgICAgICAgcGFnZTogZGF0YT8uY2xpZW50cz8ucGFnZSxcbiAgICAgICAgICBsYXN0UGFnZTogZGF0YT8uY2xpZW50cz8ubGFzdFBhZ2UsXG4gICAgICAgICAgY291bnQ6IGRhdGE/LmNsaWVudHM/LmRhdGE/Lmxlbmd0aCA/PyAwLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBuZXh0SXRlbXMgPSAoZGF0YT8uY2xpZW50cz8uZGF0YSA/PyBbXSkubWFwKGMgPT4gbWFwQ2xpZW50VG9JdGVtKGMsIHEpKVxuICAgICAgICBzZXRJdGVtcyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQocHJldi5tYXAoaXRlbSA9PiBgJHtpdGVtLnR5cGV9LSR7aXRlbS5pZH1gKSlcbiAgICAgICAgICBjb25zdCBhcHBlbmRlZCA9IG5leHRJdGVtcy5maWx0ZXIoaXRlbSA9PiAhZXhpc3RpbmdJZHMuaGFzKGAke2l0ZW0udHlwZX0tJHtpdGVtLmlkfWApKVxuICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgLi4uYXBwZW5kZWRdXG4gICAgICAgIH0pXG4gICAgICAgIHN5bmNDbGllbnRzUGFnaW5hdGlvbihkYXRhKVxuICAgICAgfSBlbHNlIGlmIChhY3RpdmVQYWdpbmF0aW9uU291cmNlID09PSAndGFzay1mYWxsYmFjaycpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fVxuICAgICAgICBpZiAoc3RhYmxlU2NvcGUucHJvamVjdElkICE9PSBudWxsICYmIHN0YWJsZVNjb3BlLnByb2plY3RJZCAhPT0gdW5kZWZpbmVkICYmIHN0YWJsZVNjb3BlLnByb2plY3RJZCAhPT0gJycpIHtcbiAgICAgICAgICBmaWx0ZXIucHJvamVjdElkcyA9IFtTdHJpbmcoc3RhYmxlU2NvcGUucHJvamVjdElkKV1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09IG51bGwgJiYgc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBzdGFibGVTY29wZS5jbGllbnRJZCAhPT0gJycpIHtcbiAgICAgICAgICBmaWx0ZXIuY2xpZW50SWRzID0gW1N0cmluZyhzdGFibGVTY29wZS5jbGllbnRJZCldXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayh7XG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoZmlsdGVyKS5sZW5ndGggPiAwID8geyBmaWx0ZXIgfSA6IHt9KSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHsgb2Zmc2V0OiAobmV4dFBhZ2UgLSAxKSAqIDIwLCBzaXplOiAyMCB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnNvbGUuaW5mbygnW3VzZUVudGl0eVNlYXJjaF0gdGFzayBmYWxsYmFjayBsb2FkTW9yZSByZXNwb25zZScsIHtcbiAgICAgICAgICBwYWdlOiBkYXRhPy50YXNrRmFtaWx5Py5wYWdlLFxuICAgICAgICAgIGxhc3RQYWdlOiBkYXRhPy50YXNrRmFtaWx5Py5sYXN0UGFnZSxcbiAgICAgICAgICBjb3VudDogZGF0YT8udGFza0ZhbWlseT8uZGF0YT8ubGVuZ3RoID8/IDAsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG5leHRJdGVtcyA9IChkYXRhPy50YXNrRmFtaWx5Py5kYXRhID8/IFtdKVxuICAgICAgICAgIC5tYXAobm9ybWFsaXplVGFza0ZhbWlseVJlY29yZClcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSZWNlbnRUYXNrSXRlbSA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAgIC5tYXAodGFzayA9PiBtYXBSZWNlbnRUYXNrVG9JdGVtKHRhc2ssICcnLCBzaG93UHJvamVjdE5hbWVJblRhc2tSb3cpKVxuICAgICAgICBzZXRJdGVtcyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQocHJldi5tYXAoaXRlbSA9PiBgJHtpdGVtLnR5cGV9LSR7aXRlbS5pZH1gKSlcbiAgICAgICAgICBjb25zdCBhcHBlbmRlZCA9IG5leHRJdGVtcy5maWx0ZXIoaXRlbSA9PiAhZXhpc3RpbmdJZHMuaGFzKGAke2l0ZW0udHlwZX0tJHtpdGVtLmlkfWApKVxuICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgLi4uYXBwZW5kZWRdXG4gICAgICAgIH0pXG4gICAgICAgIHN5bmNUYXNrRmFsbGJhY2tQYWdpbmF0aW9uKGRhdGEpXG4gICAgICB9IGVsc2UgaWYgKGFjdGl2ZVBhZ2luYXRpb25Tb3VyY2UgPT09ICdwcm9qZWN0LWZhbGxiYWNrJykge1xuICAgICAgICBjb25zdCBhcmd1bWVudHNGaWx0ZXIgPVxuICAgICAgICAgIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSBudWxsICYmIHN0YWJsZVNjb3BlLmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgc3RhYmxlU2NvcGUuY2xpZW50SWQgIT09ICcnXG4gICAgICAgICAgICA/IHsgY2xpZW50X2lkOiBbU3RyaW5nKHN0YWJsZVNjb3BlLmNsaWVudElkKV0gfVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBmZXRjaFByb2plY3RzRmFsbGJhY2soe1xuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgLi4uKGFyZ3VtZW50c0ZpbHRlciA/IHsgYXJndW1lbnRzOiBhcmd1bWVudHNGaWx0ZXIgfSA6IHt9KSxcbiAgICAgICAgICAgIHBhZ2U6IG5leHRQYWdlLFxuICAgICAgICAgICAgcGVyUGFnZTogMjAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgY29uc29sZS5pbmZvKCdbdXNlRW50aXR5U2VhcmNoXSBwcm9qZWN0IGZhbGxiYWNrIGxvYWRNb3JlIHJlc3BvbnNlJywge1xuICAgICAgICAgIHBhZ2U6IGRhdGE/LnByb2plY3RzPy5wYWdlLFxuICAgICAgICAgIGxhc3RQYWdlOiBkYXRhPy5wcm9qZWN0cz8ubGFzdFBhZ2UsXG4gICAgICAgICAgY291bnQ6IGRhdGE/LnByb2plY3RzPy5kYXRhPy5sZW5ndGggPz8gMCxcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgbmV4dEl0ZW1zID0gKGRhdGE/LnByb2plY3RzPy5kYXRhID8/IFtdKVxuICAgICAgICAgIC5tYXAobm9ybWFsaXplUHJvamVjdHNGYWxsYmFja1JlY29yZClcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSYXdTZWFyY2hSZXN1bHQgPT4gaXRlbSAhPT0gbnVsbClcbiAgICAgICAgICAubWFwKGl0ZW0gPT4gbWFwU2VhcmNoVG9JdGVtKGl0ZW0sICdwcm9qZWN0JywgJycpKVxuICAgICAgICBzZXRJdGVtcyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQocHJldi5tYXAoaXRlbSA9PiBgJHtpdGVtLnR5cGV9LSR7aXRlbS5pZH1gKSlcbiAgICAgICAgICBjb25zdCBhcHBlbmRlZCA9IG5leHRJdGVtcy5maWx0ZXIoaXRlbSA9PiAhZXhpc3RpbmdJZHMuaGFzKGAke2l0ZW0udHlwZX0tJHtpdGVtLmlkfWApKVxuICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgLi4uYXBwZW5kZWRdXG4gICAgICAgIH0pXG4gICAgICAgIHN5bmNQcm9qZWN0RmFsbGJhY2tQYWdpbmF0aW9uKGRhdGEpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbdXNlRW50aXR5U2VhcmNoXSBsb2FkTW9yZSBmYWlsZWQnLCB7XG4gICAgICAgIHNvdXJjZTogYWN0aXZlUGFnaW5hdGlvblNvdXJjZSxcbiAgICAgICAgbmV4dFBhZ2UsXG4gICAgICAgIGVycm9yOiBlcnIsXG4gICAgICB9KVxuICAgICAgLy8gRXZpdGEgbG9vcCBkZSByZWludGVudG9zIGF1dG9tw6F0aWNvcyBwb3Igc2Nyb2xsIGN1YW5kbyBiYWNrZW5kIGVzdMOhIGNhw61kbyAoZWouIDUwMykuXG4gICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgc2V0SGFzTW9yZShmYWxzZSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nTW9yZShmYWxzZSlcbiAgICAgIGNvbnNvbGUuaW5mbygnW3VzZUVudGl0eVNlYXJjaF0gbG9hZE1vcmUgZmluaXNoZWQnLCB7IHNvdXJjZTogYWN0aXZlUGFnaW5hdGlvblNvdXJjZSwgbmV4dFBhZ2UgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIGhhc01vcmUsXG4gICAgY3VycmVudFBhZ2UsXG4gICAgYWN0aXZlUGFnaW5hdGlvblNvdXJjZSxcbiAgICBkZWJvdW5jZWRTZWFyY2hWYWx1ZSxcbiAgICBmZXRjaFVzZXJzRGlyZWN0b3J5LFxuICAgIGZldGNoU2VhcmNoQ2xpZW50cyxcbiAgICBmZXRjaFRhc2tGYW1pbHlGYWxsYmFjayxcbiAgICBmZXRjaFByb2plY3RzRmFsbGJhY2ssXG4gICAgc3RhYmxlU2NvcGUucHJvamVjdElkLFxuICAgIHN0YWJsZVNjb3BlLmNsaWVudElkLFxuICAgIHNob3dQcm9qZWN0TmFtZUluVGFza1JvdyxcbiAgICBjb3JVc2VyLFxuICAgIHQsXG4gICAgc3luY0NsaWVudHNQYWdpbmF0aW9uLFxuICAgIHN5bmNVc2Vyc1BhZ2luYXRpb24sXG4gICAgc3luY1Rhc2tGYWxsYmFja1BhZ2luYXRpb24sXG4gICAgc3luY1Byb2plY3RGYWxsYmFja1BhZ2luYXRpb24sXG4gIF0pXG5cbiAgLy8gQ3VhbmRvIHNlIGxpbXBpYSBlbCBzZWFyY2gsIHZvbHZlciBhIHJlY2VudHNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRlYm91bmNlZFNlYXJjaFZhbHVlLnRyaW0oKSkge1xuICAgICAgZmV0Y2hSZWNlbnQoKVxuICAgIH1cbiAgfSwgW2RlYm91bmNlZFNlYXJjaFZhbHVlLCBmZXRjaFJlY2VudF0pXG5cbiAgcmV0dXJuIHtcbiAgICBpdGVtcyxcbiAgICBsb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIGhpZGVSZWNlbnRzTGFiZWwsXG4gICAgaGFzTW9yZSxcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIGxvYWRNb3JlLFxuICAgIHNlYXJjaFZhbHVlLFxuICAgIHVwZGF0ZVNlYXJjaFZhbHVlOiBzZXRTZWFyY2hWYWx1ZSxcbiAgICBmZXRjaFJlY2VudCxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsU0FBU0EsWUFBWSxRQUFRLGdCQUFnQjtBQUM3QyxTQUFTQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNqRSxTQUFTQyxnQkFBZ0IsUUFBUSxpREFBaUQ7QUFDbEYsU0FBU0MsaUJBQWlCLFFBQVEsbURBQW1EO0FBQ3JGLFNBQVNDLGNBQWMsUUFBUSw2Q0FBNkM7QUFFNUUsU0FBU0MsT0FBTyxRQUFRLHFCQUFxQjtBQUM3QyxTQUFTQyxpQkFBaUIsRUFBRUMsZUFBZSxFQUFFQyxvQkFBb0IsUUFBUSxxQ0FBcUM7QUFDOUcsU0FBU0MsY0FBYyxRQUFRLHFDQUFxQztBQUNwRSxTQUFTQyxlQUFlLFFBQVEsdUNBQXVDO0FBQ3ZFLFNBQVNDLHdCQUF3QixRQUFRLHFCQUFxQjtBQUM5RCxTQUFTQyxXQUFXLFFBQVEsZUFBZTtBQUMzQyxTQUFTQyxJQUFJLFFBQVEsUUFBUTtBQXdGN0IsSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBSUMsS0FBYyxFQUFFQyxRQUFnQixFQUFhO0VBQ3pFLElBQU1DLE1BQU0sR0FBR0MsTUFBTSxDQUFDSCxLQUFLLENBQUM7RUFDNUIsSUFBSSxDQUFDRyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0YsTUFBTSxDQUFDLEVBQUUsT0FBT0QsUUFBUTtFQUM3QyxJQUFNSSxVQUFVLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDTCxNQUFNLENBQUM7RUFDckMsT0FBT0csVUFBVSxHQUFHLENBQUMsR0FBR0EsVUFBVSxHQUFHSixRQUFRO0FBQy9DLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQWdCQSxJQUFNTyxvQkFBMEUsR0FBRztFQUNqRkMsT0FBTyxFQUFFO0lBQUVBLE9BQU8sRUFBRSxNQUFNO0lBQUVDLFFBQVEsRUFBRTtFQUFNLENB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QUFLLEVBQUFvTDtVQUNQLENBQUMsQ0FBQztVQUNGO1VBQ0FuTCxRQUFRLENBQUMsSUFBSSxDQUFDO1VBQ2RRLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFBQTtVQUFBNEssU0FBQSxDQUFBckUsSUFBQTtVQUVqQm5HLGdCQUFnQixDQUFDLEtBQUssQ0FBQztVQUN2QnlLLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHFDQUFxQyxFQUFFO1lBQUVDLE1BQU0sRUFBRXBLLHNCQUFzQjtZQUFFNEgsUUFBUSxFQUFSQTtVQUFTLENBQUMsQ0FBQztVQUFBLE9BQUFxQyxTQUFBLENBQUFsRCxNQUFBO1FBQUE7UUFBQTtVQUFBLE9BQUFrRCxTQUFBLENBQUFqRCxJQUFBO01BQUE7SUFBQSxHQUFBVSxRQUFBO0VBQUEsQ0FFcEcsSUFBRSxDQUNEbEksYUFBYSxFQUNiSixPQUFPLEVBQ1BRLFdBQVcsRUFDWEksc0JBQXNCLEVBQ3RCL0Isb0JBQW9CLEVBQ3BCNkQsbUJBQW1CLEVBQ25CUCxrQkFBa0IsRUFDbEJpQyx1QkFBdUIsRUFDdkJHLHFCQUFxQixFQUNyQnRELFdBQVcsQ0FBQ3ZLLFNBQVMsRUFDckJ1SyxXQUFXLENBQUMzSyxRQUFRLEVBQ3BCOEUsd0JBQXdCLEVBQ3hCa0QsT0FBTyxFQUNQRSxDQUFDLEVBQ0Q4RSxxQkFBcUIsRUFDckJQLG1CQUFtQixFQUNuQlcsMEJBQTBCLEVBQzFCSSw2QkFBNkIsQ0FDOUIsQ0FBQzs7RUFFRjtFQUNBdlAsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJLENBQUNzSyxvQkFBb0IsQ0FBQy9HLElBQUksQ0FBQyxDQUFDLEVBQUU7TUFDaEMwTSxXQUFXLENBQUMsQ0FBQztJQUNmO0VBQ0YsQ0FBQyxFQUFFLENBQUMzRixvQkFBb0IsRUFBRTJGLFdBQVcsQ0FBQyxDQUFDO0VBRXZDLE9BQU87SUFDTHhGLEtBQUssRUFBTEEsS0FBSztJQUNMSSxPQUFPLEVBQVBBLE9BQU87SUFDUEksS0FBSyxFQUFMQSxLQUFLO0lBQ0xJLGdCQUFnQixFQUFoQkEsZ0JBQWdCO0lBQ2hCSSxPQUFPLEVBQVBBLE9BQU87SUFDUEksYUFBYSxFQUFiQSxhQUFhO0lBQ2JpSSxRQUFRLEVBQVJBLFFBQVE7SUFDUm5RLFdBQVcsRUFBWEEsV0FBVztJQUNYcVQsaUJBQWlCLEVBQUUzTSxjQUFjO0lBQ2pDNEYsV0FBVyxFQUFYQTtFQUNGLENBQUM7QUFDSCxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
536
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VMYXp5UXVlcnkiLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsImdldFJlY2VudENsaWVudHMiLCJnZXRSZWNlbnRQcm9qZWN0cyIsImdldFJlY2VudFRhc2tzIiwidXNlVXNlciIsIlNFQVJDSF9FTlRJVElFUyIsIlNFQVJDSF9DTElFTlRTIiwiVVNFUlNfRElSRUNUT1JZIiwiU0VBUkNIX1FVRVJZX0RFQk9VTkNFX01TIiwidXNlRGVib3VuY2UiLCJ1c2VUIiwiQkFTRV9GSUxURVJTX0JZX1RZUEUiLCJwcm9qZWN0IiwiYXJjaGl2ZWQiLCJ0YXNrIiwiYnVpbGRUYXNrU2VhcmNoRXh0cmFFbnRyaWVzIiwic2NvcGUiLCJyYXdDbGllbnQiLCJjbGllbnRJZCIsInVuZGVmaW5lZCIsIlN0cmluZyIsInJhd1Byb2plY3QiLCJwcm9qZWN0SWQiLCJhZ2VudEVudGl0eSIsImVudHJpZXMiLCJwdXNoQ2xpZW50IiwicHVzaCIsInB1c2hQcm9qZWN0IiwiYnVpbGRUYXNrU2VhcmNoRXh0cmEiLCJsZW5ndGgiLCJKU09OIiwic3RyaW5naWZ5IiwiYnVpbGRQcm9qZWN0U2VhcmNoRXh0cmEiLCJidWlsZFNlYXJjaEVudGl0aWVzRXh0cmEiLCJ0eXBlIiwiYnVpbGRGaWx0ZXJzRm9yVHlwZSIsImJ1aWxkVXNlcnNEaXJlY3RvcnlGaWx0ZXJzIiwicSIsImJhc2UiLCJ3aXRoUG9zaXRpb24iLCJ3aXRoVGVhbXMiLCJzZWFyY2hJbnB1dCIsImhpZ2hsaWdodFJhbmdlIiwidGV4dCIsInNlYXJjaFZhbHVlIiwiaWR4IiwidG9Mb3dlckNhc2UiLCJpbmRleE9mIiwic3RhcnQiLCJtYXBDbGllbnRUb0l0ZW0iLCJjIiwiX2MkdG90YWxQcm95ZWN0b3MiLCJfYyR0b3RhbFByb3llY3RvczIiLCJpZCIsInByaW1hcnkiLCJuYW1lIiwicHJpbWFyeUhpZ2hsaWdodCIsImJyZWFkY3J1bWIiLCJjb3VudCIsInRvdGFsUHJveWVjdG9zIiwiY291bnRMYWJlbCIsInJhdyIsIm1hcFVzZXJUb0l0ZW0iLCJ1IiwiX3UkZmlyc3ROYW1lIiwiX3UkbGFzdE5hbWUiLCJfdSRwaWN0dXJlIiwiX3UkcG9zaXRpb25OYW1lIiwiX3UkZW1haWwiLCJmdWxsTmFtZSIsImNvbmNhdCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwidHJpbSIsImVtYWlsIiwicGljdHVyZSIsInBvc2l0aW9uTmFtZSIsIm1hcENvclVzZXJUb1VzZXJJdGVtIiwidXNlciIsIm1lTGFiZWwiLCJfdXNlciRmaXJzdE5hbWUiLCJfdXNlciRsYXN0TmFtZSIsIl91c2VyJHVzZXJfcG9zaXRpb24iLCJfdXNlciRyb2xlIiwicG9zaXRpb25MaW5lIiwidXNlcl9wb3NpdGlvbiIsInJvbGUiLCJtYXBSZWNlbnRUYXNrVG9JdGVtIiwiX3Rhc2skcHJvamVjdE5hbWUiLCJ0aXRsZSIsInByb2plY3ROYW1lIiwicGFyZW50IiwibWFwU2VhcmNoVG9JdGVtIiwiciIsIl9yJHByb2plY3ROYW1lIiwiX3IkY2xpZW50SWQiLCJfciRjbGllbnROYW1lIiwiX3IkcHJvamVjdE5hbWUyIiwiX3IkZmVlSWQiLCJfZmF0aGVyJHRpdGxlIiwiY2xpZW50TmFtZSIsImZhdGhlciIsImhhc0ZhdGhlciIsImZlZUlkIiwiZmF0aGVySWQiLCJmYXRoZXJUaXRsZSIsImZvcm1hdE1jcFByaW1hcnlMYWJlbCIsInNsdWciLCJyZXBsYWNlIiwiY2hhciIsInRvVXBwZXJDYXNlIiwibWFwTWNwU2x1Z3NUb0l0ZW1zIiwic2x1Z3MiLCJmaWx0ZXJlZCIsImZpbHRlciIsInMiLCJpbmNsdWRlcyIsIm1hcCIsInVzZUVudGl0eVNlYXJjaCIsIl9zY29wZSRtY3BTbHVncyIsImNvclVzZXIiLCJfdXNlVCIsInQiLCJpMThuIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2V0U2VhcmNoVmFsdWUiLCJkZWJvdW5jZWRTZWFyY2hWYWx1ZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXRlbXMiLCJzZXRJdGVtcyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwibG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImVycm9yIiwic2V0RXJyb3IiLCJtY3BTbHVnc0tleSIsIm1jcFNsdWdzIiwiam9pbiIsInN0YWJsZVNjb3BlIiwiX3Njb3BlJGNsaWVudElkIiwiX3Njb3BlJHByb2plY3RJZCIsIl9zY29wZSRtY3BTbHVnczIiLCJfc2NvcGUkYWdlbnRFbnRpdHkiLCJfdXNlTGF6eVF1ZXJ5IiwidmFyaWFibGVzIiwibGltaXQiLCJmZXRjaFBvbGljeSIsIl91c2VMYXp5UXVlcnkyIiwiZmV0Y2hTZWFyY2hFbnRpdGllcyIsIl91c2VMYXp5UXVlcnkyJCIsInNlYXJjaERhdGEiLCJkYXRhIiwic2VhcmNoTG9hZGluZyIsInNlYXJjaEVycm9yIiwiX3VzZUxhenlRdWVyeTMiLCJfdXNlTGF6eVF1ZXJ5NCIsImZldGNoU2VhcmNoQ2xpZW50cyIsIl91c2VMYXp5UXVlcnk0JCIsImNsaWVudHNEYXRhIiwiY2xpZW50c0xvYWRpbmciLCJjbGllbnRzRXJyb3IiLCJfdXNlTGF6eVF1ZXJ5NSIsIl91c2VMYXp5UXVlcnk2IiwiZmV0Y2hVc2Vyc0RpcmVjdG9yeSIsIl91c2VMYXp5UXVlcnk2JCIsInVzZXJzRGF0YSIsInVzZXJzTG9hZGluZyIsInVzZXJzRXJyb3IiLCJmZXRjaFJlY2VudCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX3N0YWJsZVNjb3BlJG1jcFNsdWdzIiwibWFwcGVkIiwiX2RhdGEiLCJfbWFwcGVkIiwiX2RhdGEyIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImFicnVwdCIsInNlbnQiLCJBcnJheSIsImlzQXJyYXkiLCJwIiwiZmluaXNoIiwic3RvcCIsImxhbmd1YWdlIiwiX3N0YWJsZVNjb3BlJG1jcFNsdWdzMiIsInBhZ2UiLCJwZXJQYWdlIiwiZmlsdGVycyIsImV4dHJhIiwiX29iamVjdFNwcmVhZCIsIl9jbGllbnRzRGF0YSRjbGllbnRzIiwiY2xpZW50cyIsIl91c2Vyc0RhdGEkdXNlcnNEaXJlYyIsInVzZXJzRGlyZWN0b3J5Iiwic2VhcmNoIiwidXBkYXRlU2VhcmNoVmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlRW50aXR5U2VhcmNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUxhenlRdWVyeSB9IGZyb20gJ0BhcG9sbG8vY2xpZW50J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFJlY2VudENsaWVudHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudENsaWVudHMvZ2V0UmVjZW50Q2xpZW50cydcbmltcG9ydCB7IGdldFJlY2VudFByb2plY3RzIH0gZnJvbSAnLi4vc2VydmljZXMvbWFpYS9SZWNlbnRQcm9qZWN0cy9nZXRSZWNlbnRQcm9qZWN0cydcbmltcG9ydCB7IGdldFJlY2VudFRhc2tzIH0gZnJvbSAnLi4vc2VydmljZXMvbWFpYS9SZWNlbnRUYXNrcy9nZXRSZWNlbnRUYXNrcydcbmltcG9ydCB0eXBlIHsgUmVjZW50VGFza0l0ZW0gfSBmcm9tICcuLi9zZXJ2aWNlcy9tYWlhL1JlY2VudFRhc2tzL2dldFJlY2VudFRhc2tzJ1xuaW1wb3J0IHR5cGUgeyBDT1JVc2VyIH0gZnJvbSAnLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgU0VBUkNIX0VOVElUSUVTIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvZW50aXR5U2VhcmNoUXVlcnknXG5pbXBvcnQgeyBTRUFSQ0hfQ0xJRU5UUyB9IGZyb20gJy4uL3NlcnZpY2VzL3F1ZXJ5L0NsaWVudFNlYXJjaFF1ZXJ5J1xuaW1wb3J0IHsgVVNFUlNfRElSRUNUT1JZIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnkvdXNlcnNEaXJlY3RvcnlRdWVyeSdcbmltcG9ydCB7IFNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUyB9IGZyb20gJy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyB1c2VEZWJvdW5jZSB9IGZyb20gJy4vdXNlRGVib3VuY2UnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi91c2VUJ1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uSXRlbSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHR5cGUgeyBBZ2VudEVudGl0eSB9IGZyb20gJy4uL3R5cGVzL2FnZW50J1xuXG50eXBlIFJhd1NlYXJjaFJlc3VsdCA9IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlclxuICB0aXRsZTogc3RyaW5nXG4gIHR5cGU/OiBzdHJpbmdcbiAgY2xpZW50SWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsXG4gIGZlZUlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbFxuICBjbGllbnROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBwcm9qZWN0TmFtZT86IHN0cmluZyB8IG51bGxcbiAgZmF0aGVyPzogeyBpZDogc3RyaW5nIHwgbnVtYmVyOyB0aXRsZT86IHN0cmluZyB8IG51bGwgfSB8IG51bGxcbn1cblxudHlwZSBSYXdDbGllbnQgPSB7XG4gIGlkOiBudW1iZXIgfCBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHRvdGFsUHJveWVjdG9zPzogbnVtYmVyIHwgbnVsbFxufVxuXG50eXBlIFJhd0RpcmVjdG9yeVVzZXIgPSB7XG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgZmlyc3ROYW1lPzogc3RyaW5nIHwgbnVsbFxuICBsYXN0TmFtZT86IHN0cmluZyB8IG51bGxcbiAgZW1haWw/OiBzdHJpbmcgfCBudWxsXG4gIHBpY3R1cmU/OiBzdHJpbmcgfCBudWxsXG4gIHBvc2l0aW9uTmFtZT86IHN0cmluZyB8IG51bGxcbn1cblxudHlwZSBTZWFyY2hFbnRpdGllc0RhdGEgPSB7IHNlYXJjaDogUmF3U2VhcmNoUmVzdWx0W10gfCBudWxsIH1cbnR5cGUgU2VhcmNoQ2xpZW50c0RhdGEgPSB7XG4gIGNsaWVudHM6IHtcbiAgICBkYXRhOiBSYXdDbGllbnRbXVxuICB9IHwgbnVsbFxufVxudHlwZSBVc2Vyc0RpcmVjdG9yeURhdGEgPSB7XG4gIHVzZXJzRGlyZWN0b3J5OiB7XG4gICAgdG90YWw/OiBudW1iZXIgfCBudWxsXG4gICAgZGF0YTogUmF3RGlyZWN0b3J5VXNlcltdIHwgbnVsbFxuICB9IHwgbnVsbFxufVxuXG4vKipcbiAqIFJlc3RyaW5nZSBsb3MgcmVzdWx0YWRvcyBhbCBgY2xpZW50SWRgL2Bwcm9qZWN0SWRgIGRlbCBhZ2VudGUgYWN0aXZvLlxuICogQ3VhbmRvIGVsIGFnZW50ZSBlc3TDoSBzY29wZWFkbyBhIHVuIGNsaWVudC9wcm9qZWN0LCB0YW50byBsb3MgcmVjZW50cyBjb21vXG4gKiBlbCBzZWFyY2ggZGViZW4gZmlsdHJhciBwb3IgZXNlIGNvbnRleHRvLiBTaSBlbCBiYWNrZW5kIG5vIGVudGllbmRlIGFsZ8O6blxuICogY2FtcG8gbG8gaWdub3JhIHkgc2UgY2FlIGFsIGNvbXBvcnRhbWllbnRvIGdsb2JhbC5cbiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5U2VhcmNoU2NvcGUgPSB7XG4gIGNsaWVudElkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbFxuICBwcm9qZWN0SWQ/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIC8qKiBTbHVncyBkZWwgY29uZWN0b3IgTUNQIGRlbCBhZ2VudGUgKGxpc3RhZG8gbG9jYWwsIHNpbiBHcmFwaFFMKS4gKi9cbiAgbWNwU2x1Z3M/OiBzdHJpbmdbXVxuICAvKipcbiAgICogYGVudGl0eWAgZGVsIGFnZW50ZSBhY3Rpdm8uIFBhcmEgZXNwZWNpYWxpc3RhczpcbiAgICogLSBgcHJvamVjdGA6IGLDunNxdWVkYSBkZSB0YXJlYXMgZnVlcnphIGZpbHRybyBwb3IgYHByb2plY3RJZGAgZGVsIGNvbnRleHRvLlxuICAgKiAtIGBjbGllbnRgOiBiw7pzcXVlZGEgZGUgcHJveWVjdG9zIHBvciBgY2xpZW50SWRgOyB0YXJlYXMgcG9yIGNsaWVudGUgKHkgcHJveWVjdG8gc2kgYXBsaWNhKS5cbiAgICovXG4gIGFnZW50RW50aXR5PzogQWdlbnRFbnRpdHkgfCBudWxsXG59XG5cbnR5cGUgU2VhcmNoRmlsdGVyYWJsZVR5cGUgPSAncHJvamVjdCcgfCAndGFzaydcblxuY29uc3QgQkFTRV9GSUxURVJTX0JZX1RZUEU6IFJlY29yZDxTZWFyY2hGaWx0ZXJhYmxlVHlwZSwgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7XG4gIHByb2plY3Q6IHsgcHJvamVjdDogJ3RydWUnLCBhcmNoaXZlZDogJ2FsbCcgfSxcbiAgdGFzazogeyB0YXNrOiAndHJ1ZScsIGFyY2hpdmVkOiAnZmFsc2UnIH0sXG59XG5cbi8qKlxuICogRW50cmFkYXMgcGFyYSBlbCBhcmd1bWVudG8gR3JhcGhRTCBgZXh0cmFgIChKU09OIHN0cmluZyBkZSBhcnJheSkgYWwgYnVzY2FyIHRhcmVhcyBjb24gY29udGV4dG8uXG4gKiBFai46IFt7XCJwcm9qZWN0SWRcIjpcIjg4MTU1MlwifV1cbiAqL1xuY29uc3QgYnVpbGRUYXNrU2VhcmNoRXh0cmFFbnRyaWVzID0gKHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9PiB7XG4gIGNvbnN0IHJhd0NsaWVudCA9XG4gICAgc2NvcGU/LmNsaWVudElkICE9PSB1bmRlZmluZWQgJiYgc2NvcGU/LmNsaWVudElkICE9PSBudWxsICYmIHNjb3BlPy5jbGllbnRJZCAhPT0gJycgPyBTdHJpbmcoc2NvcGUuY2xpZW50SWQpIDogbnVsbFxuICBjb25zdCByYXdQcm9qZWN0ID1cbiAgICBzY29wZT8ucHJvamVjdElkICE9PSB1bmRlZmluZWQgJiYgc2NvcGU/LnByb2plY3RJZCAhPT0gbnVsbCAmJiBzY29wZT8ucHJvamVjdElkICE9PSAnJ1xuICAgICAgPyBTdHJpbmcoc2NvcGUucHJvamVjdElkKVxuICAgICAgOiBudWxsXG5cbiAgY29uc3QgYWdlbnRFbnRpdHkgPSBzY29wZT8uYWdlbnRFbnRpdHlcbiAgY29uc3QgZW50cmllczogQXJyYXk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSBbXVxuXG4gIGNvbnN0IHB1c2hDbGllbnQgPSAoKSA9PiB7XG4gICAgaWYgKHJhd0NsaWVudCkgZW50cmllcy5wdXNoKHsgY2xpZW50SWQ6IHJhd0NsaWVudCB9KVxuICB9XG4gIGNvbnN0IHB1c2hQcm9qZWN0ID0gKCkgPT4ge1xuICAgIGlmIChyYXdQcm9qZWN0KSBlbnRyaWVzLnB1c2goeyBwcm9qZWN0SWQ6IHJhd1Byb2plY3QgfSlcbiAgfVxuXG4gIGlmIChhZ2VudEVudGl0eSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgaWYgKHJhd1Byb2plY3QpIHtcbiAgICAgIHB1c2hQcm9qZWN0KClcbiAgICB9IGVsc2UgaWYgKHJhd0NsaWVudCkge1xuICAgICAgcHVzaENsaWVudCgpXG4gICAgfVxuICB9IGVsc2UgaWYgKGFnZW50RW50aXR5ID09PSAnY2xpZW50Jykge1xuICAgIHB1c2hDbGllbnQoKVxuICAgIHB1c2hQcm9qZWN0KClcbiAgfSBlbHNlIHtcbiAgICBwdXNoQ2xpZW50KClcbiAgICBwdXNoUHJvamVjdCgpXG4gIH1cblxuICByZXR1cm4gZW50cmllc1xufVxuXG5jb25zdCBidWlsZFRhc2tTZWFyY2hFeHRyYSA9IChzY29wZT86IEVudGl0eVNlYXJjaFNjb3BlKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgZW50cmllcyA9IGJ1aWxkVGFza1NlYXJjaEV4dHJhRW50cmllcyhzY29wZSlcbiAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShlbnRyaWVzKVxufVxuXG4vKipcbiAqIFRhYiBwcm95ZWN0bzogdGVtcG9yYWxtZW50ZSBOTyBlbnZpYW1vcyBgY2xpZW50SWRgIGVuIGBleHRyYWAuXG4gKiBFbCBiYWNrZW5kIGhveSBubyBlc3TDoSBhcGxpY2FuZG8gYmllbiBlc2UgZmlsdHJvIHBhcmEgcHJvamVjdCBzZWFyY2guXG4gKlxuICogVE9ETzogcmVhY3RpdmFyIGN1YW5kbyBlbCBmaWx0cm8gcG9yIGNsaWVudElkIGVuIHByb2plY3RzIGZ1bmNpb25lLlxuICovXG5jb25zdCBidWlsZFByb2plY3RTZWFyY2hFeHRyYSA9IChzY29wZT86IEVudGl0eVNlYXJjaFNjb3BlKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcmF3Q2xpZW50ID1cbiAgICBzY29wZT8uY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBzY29wZT8uY2xpZW50SWQgIT09IG51bGwgJiYgc2NvcGU/LmNsaWVudElkICE9PSAnJyA/IFN0cmluZyhzY29wZS5jbGllbnRJZCkgOiBudWxsXG4gIC8vIGlmIChyYXdDbGllbnQpIHtcbiAgLy8gICAvLyBGaWx0cm8gZGVzYWN0aXZhZG8gdGVtcG9yYWxtZW50ZS5cbiAgLy8gfVxuICAvLyBpZiAoIXJhd0NsaWVudCkgcmV0dXJuIHVuZGVmaW5lZFxuICAvLyByZXR1cm4gSlNPTi5zdHJpbmdpZnkoW3sgY2xpZW50SWQ6IHJhd0NsaWVudCB9XSlcbiAgaWYgKHJhd0NsaWVudCkgcmV0dXJuIHVuZGVmaW5lZFxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbmNvbnN0IGJ1aWxkU2VhcmNoRW50aXRpZXNFeHRyYSA9ICh0eXBlOiBTZWFyY2hGaWx0ZXJhYmxlVHlwZSwgc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh0eXBlID09PSAndGFzaycpIHJldHVybiBidWlsZFRhc2tTZWFyY2hFeHRyYShzY29wZSlcbiAgaWYgKHR5cGUgPT09ICdwcm9qZWN0JykgcmV0dXJuIGJ1aWxkUHJvamVjdFNlYXJjaEV4dHJhKHNjb3BlKVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogVGFiIGB0YXNrYCAvIGBwcm9qZWN0YDogYGZpbHRlcnNgIHPDs2xvIHRpcG8gKyBhcmNoaXZlZCAodGFyZWFzOiBubyBhcmNoaXZhZGFzKTsgc2NvcGUgKGNsaWVudElkIC8gcHJvamVjdElkIGVuIHRhcmVhcykgZW4gYGV4dHJhYC5cbiAqL1xuY29uc3QgYnVpbGRGaWx0ZXJzRm9yVHlwZSA9ICh0eXBlOiBTZWFyY2hGaWx0ZXJhYmxlVHlwZSk6IHN0cmluZyA9PiB7XG4gIGlmICh0eXBlID09PSAncHJvamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoQkFTRV9GSUxURVJTX0JZX1RZUEUucHJvamVjdClcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoQkFTRV9GSUxURVJTX0JZX1RZUEUudGFzaylcbn1cblxuLyoqXG4gKiBGaWx0cm9zIHBhcmEgdXNlcnNEaXJlY3RvcnkuIEVsIGJhY2tlbmQgZXNwZXJhIHVuIEpTT04gc3RyaW5nIGNvblxuICogd2l0aFBvc2l0aW9uLCB3aXRoVGVhbXMgeSBzZWFyY2hJbnB1dC4gTGUgYWdyZWdhbW9zIGNsaWVudElkL3Byb2plY3RJZFxuICogZGVsIHNjb3BlIGVuIGNhc28gZGUgcXVlIGVsIGJhY2tlbmQgbG9zIGFwcm92ZWNoZSBwYXJhIGZpbHRyYXIgcG9yXG4gKiBjb250ZXh0byAoc2kgbm8gbG9zIGVudGllbmRlIGxvcyBpZ25vcmEpLlxuICovXG5jb25zdCBidWlsZFVzZXJzRGlyZWN0b3J5RmlsdGVycyA9IChxOiBzdHJpbmcsIHNjb3BlPzogRW50aXR5U2VhcmNoU2NvcGUpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBiYXNlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICB3aXRoUG9zaXRpb246IHRydWUsXG4gICAgd2l0aFRlYW1zOiB0cnVlLFxuICAgIHNlYXJjaElucHV0OiBxLFxuICB9XG4gIGlmIChzY29wZT8uY2xpZW50SWQgIT09IHVuZGVmaW5lZCAmJiBzY29wZT8uY2xpZW50SWQgIT09IG51bGwgJiYgc2NvcGUuY2xpZW50SWQgIT09ICcnKSB7XG4gICAgYmFzZS5jbGllbnRJZCA9IFN0cmluZyhzY29wZS5jbGllbnRJZClcbiAgfVxuICBpZiAoc2NvcGU/LnByb2plY3RJZCAhPT0gdW5kZWZpbmVkICYmIHNjb3BlPy5wcm9qZWN0SWQgIT09IG51bGwgJiYgc2NvcGUucHJvamVjdElkICE9PSAnJykge1xuICAgIGJhc2UucHJvamVjdElkID0gU3RyaW5nKHNjb3BlLnByb2plY3RJZClcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYmFzZSlcbn1cblxuY29uc3QgaGlnaGxpZ2h0UmFuZ2UgPSAodGV4dDogc3RyaW5nLCBzZWFyY2hWYWx1ZTogc3RyaW5nKSA9PiB7XG4gIGlmICghc2VhcmNoVmFsdWUpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgaWR4ID0gdGV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgaWYgKGlkeCA8IDApIHJldHVybiB1bmRlZmluZWRcbiAgcmV0dXJuIHsgc3RhcnQ6IGlkeCwgbGVuZ3RoOiBzZWFyY2hWYWx1ZS5sZW5ndGggfVxufVxuXG5jb25zdCBtYXBDbGllbnRUb0l0ZW0gPSAoYzogUmF3Q2xpZW50LCBzZWFyY2hWYWx1ZTogc3RyaW5nKTogQ29udGV4dE1lbnRpb25JdGVtID0+ICh7XG4gIGlkOiBjLmlkLFxuICB0eXBlOiAnY2xpZW50JyxcbiAgcHJpbWFyeTogYy5uYW1lLFxuICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShjLm5hbWUsIHNlYXJjaFZhbHVlKSxcbiAgYnJlYWRjcnVtYjoge1xuICAgIGNvdW50OiBjLnRvdGFsUHJveWVjdG9zID8/IHVuZGVmaW5lZCxcbiAgICBjb3VudExhYmVsOiAncHJvamVjdHMnLFxuICB9LFxuICByYXc6IHtcbiAgICBpZDogYy5pZCxcbiAgICBuYW1lOiBjLm5hbWUsXG4gICAgdG90YWxQcm95ZWN0b3M6IGMudG90YWxQcm95ZWN0b3MgPz8gbnVsbCxcbiAgfSxcbn0pXG5cbmNvbnN0IG1hcFVzZXJUb0l0ZW0gPSAodTogUmF3RGlyZWN0b3J5VXNlciwgc2VhcmNoVmFsdWU6IHN0cmluZyk6IENvbnRleHRNZW50aW9uSXRlbSA9PiB7XG4gIGNvbnN0IGZ1bGxOYW1lID0gYCR7dS5maXJzdE5hbWUgPz8gJyd9ICR7dS5sYXN0TmFtZSA/PyAnJ31gLnRyaW0oKVxuICBjb25zdCBwcmltYXJ5ID0gZnVsbE5hbWUgfHwgdS5lbWFpbCB8fCBTdHJpbmcodS5pZClcblxuICByZXR1cm4ge1xuICAgIGlkOiB1LmlkLFxuICAgIHR5cGU6ICd1c2VyJyxcbiAgICBwcmltYXJ5LFxuICAgIHByaW1hcnlIaWdobGlnaHQ6IGhpZ2hsaWdodFJhbmdlKHByaW1hcnksIHNlYXJjaFZhbHVlKSxcbiAgICByYXc6IHtcbiAgICAgIGlkOiB1LmlkLFxuICAgICAgbmFtZTogcHJpbWFyeSxcbiAgICAgIHBpY3R1cmU6IHUucGljdHVyZSA/PyBudWxsLFxuICAgICAgcG9zaXRpb25OYW1lOiB1LnBvc2l0aW9uTmFtZSA/PyBudWxsLFxuICAgICAgZW1haWw6IHUuZW1haWwgPz8gbnVsbCxcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IG1hcENvclVzZXJUb1VzZXJJdGVtID0gKHVzZXI6IENPUlVzZXIsIHNlYXJjaFZhbHVlOiBzdHJpbmcsIG1lTGFiZWw6IHN0cmluZyk6IENvbnRleHRNZW50aW9uSXRlbSA9PiB7XG4gIGNvbnN0IGZ1bGxOYW1lID0gYCR7dXNlci5maXJzdE5hbWUgPz8gJyd9ICR7dXNlci5sYXN0TmFtZSA/PyAnJ31gLnRyaW0oKVxuICBjb25zdCBwb3NpdGlvbkxpbmUgPSB1c2VyLnVzZXJfcG9zaXRpb24/LnRyaW0oKSB8fCB1c2VyLnJvbGU/LnRyaW0oKSB8fCBudWxsXG5cbiAgcmV0dXJuIHtcbiAgICBpZDogdXNlci5pZCxcbiAgICB0eXBlOiAndXNlcicsXG4gICAgcHJpbWFyeTogbWVMYWJlbCxcbiAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShtZUxhYmVsLCBzZWFyY2hWYWx1ZSksXG4gICAgcmF3OiB7XG4gICAgICBpZDogdXNlci5pZCxcbiAgICAgIG5hbWU6IGZ1bGxOYW1lIHx8IFN0cmluZyh1c2VyLmlkKSxcbiAgICAgIHBpY3R1cmU6IHVzZXIucGljdHVyZSB8fCBudWxsLFxuICAgICAgcG9zaXRpb25OYW1lOiBwb3NpdGlvbkxpbmUsXG4gICAgICBlbWFpbDogbnVsbCxcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IG1hcFJlY2VudFRhc2tUb0l0ZW0gPSAodGFzazogUmVjZW50VGFza0l0ZW0sIHNlYXJjaFZhbHVlOiBzdHJpbmcpOiBDb250ZXh0TWVudGlvbkl0ZW0gPT4ge1xuICBjb25zdCBwcmltYXJ5ID0gKHRhc2sudGl0bGUgJiYgdGFzay50aXRsZS50cmltKCkpIHx8IFN0cmluZyh0YXNrLmlkKVxuICByZXR1cm4ge1xuICAgIGlkOiB0YXNrLmlkLFxuICAgIHR5cGU6ICd0YXNrJyxcbiAgICBwcmltYXJ5LFxuICAgIHByaW1hcnlIaWdobGlnaHQ6IGhpZ2hsaWdodFJhbmdlKHByaW1hcnksIHNlYXJjaFZhbHVlKSxcbiAgICBicmVhZGNydW1iOiB0YXNrLnByb2plY3ROYW1lID8geyBwYXJlbnQ6IHRhc2sucHJvamVjdE5hbWUgfSA6IHVuZGVmaW5lZCxcbiAgICByYXc6IHtcbiAgICAgIGlkOiB0YXNrLmlkLFxuICAgICAgbmFtZTogcHJpbWFyeSxcbiAgICAgIHByb2plY3ROYW1lOiB0YXNrLnByb2plY3ROYW1lID8/IG51bGwsXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBtYXBTZWFyY2hUb0l0ZW0gPSAocjogUmF3U2VhcmNoUmVzdWx0LCB0eXBlOiBDb250ZXh0RW50aXR5VHlwZSwgc2VhcmNoVmFsdWU6IHN0cmluZyk6IENvbnRleHRNZW50aW9uSXRlbSA9PiB7XG4gIGNvbnN0IHByaW1hcnkgPSByLnRpdGxlIHx8IHIucHJvamVjdE5hbWUgfHwgJydcbiAgbGV0IHBhcmVudDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICBpZiAodHlwZSA9PT0gJ3Byb2plY3QnKSBwYXJlbnQgPSByLmNsaWVudE5hbWVcbiAgZWxzZSBpZiAodHlwZSA9PT0gJ3Rhc2snKSBwYXJlbnQgPSB1bmRlZmluZWRcbiAgZWxzZSBwYXJlbnQgPSByLnByb2plY3ROYW1lID8/IHIuY2xpZW50TmFtZVxuXG4gIGNvbnN0IGZhdGhlciA9IHR5cGUgPT09ICd0YXNrJyA/IHIuZmF0aGVyIDogbnVsbFxuICBjb25zdCBoYXNGYXRoZXIgPSB0eXBlID09PSAndGFzaycgJiYgZmF0aGVyICE9IG51bGwgJiYgZmF0aGVyLmlkICE9IG51bGwgJiYgU3RyaW5nKGZhdGhlci5pZCkubGVuZ3RoID4gMFxuXG4gIHJldHVybiB7XG4gICAgaWQ6IHIuaWQsXG4gICAgdHlwZSxcbiAgICBwcmltYXJ5LFxuICAgIHByaW1hcnlIaWdobGlnaHQ6IGhpZ2hsaWdodFJhbmdlKHByaW1hcnksIHNlYXJjaFZhbHVlKSxcbiAgICBicmVhZGNydW1iOiBwYXJlbnQgPyB7IHBhcmVudCB9IDogdW5kZWZpbmVkLFxuICAgIHJhdzoge1xuICAgICAgaWQ6IHIuaWQsXG4gICAgICBuYW1lOiBwcmltYXJ5LFxuICAgICAgY2xpZW50SWQ6IHIuY2xpZW50SWQgPz8gbnVsbCxcbiAgICAgIGNsaWVudE5hbWU6IHIuY2xpZW50TmFtZSA/PyBudWxsLFxuICAgICAgcHJvamVjdE5hbWU6IHIucHJvamVjdE5hbWUgPz8gbnVsbCxcbiAgICAgIGZlZUlkOiByLmZlZUlkID8/IG51bGwsXG4gICAgICBmYXRoZXJJZDogaGFzRmF0aGVyID8gZmF0aGVyLmlkIDogbnVsbCxcbiAgICAgIGZhdGhlclRpdGxlOiBoYXNGYXRoZXIgPyBmYXRoZXIudGl0bGU/LnRyaW0oKSB8fCBudWxsIDogbnVsbCxcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IGZvcm1hdE1jcFByaW1hcnlMYWJlbCA9IChzbHVnOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgc2x1Zy5yZXBsYWNlKC9fL2csICcgJykucmVwbGFjZSgvXFxiXFx3L2csIGNoYXIgPT4gY2hhci50b1VwcGVyQ2FzZSgpKVxuXG5jb25zdCBtYXBNY3BTbHVnc1RvSXRlbXMgPSAoc2x1Z3M6IHN0cmluZ1tdLCBzZWFyY2hWYWx1ZTogc3RyaW5nKTogQ29udGV4dE1lbnRpb25JdGVtW10gPT4ge1xuICBjb25zdCBxID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgbGV0IGZpbHRlcmVkID0gc2x1Z3NcbiAgaWYgKHEpIHtcbiAgICBmaWx0ZXJlZCA9IHNsdWdzLmZpbHRlcihzID0+IHtcbiAgICAgIGNvbnN0IHByaW1hcnkgPSBmb3JtYXRNY3BQcmltYXJ5TGFiZWwocylcbiAgICAgIHJldHVybiBzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSkgfHwgcHJpbWFyeS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpXG4gICAgfSlcbiAgfVxuICByZXR1cm4gZmlsdGVyZWQubWFwKHNsdWcgPT4ge1xuICAgIGNvbnN0IHByaW1hcnkgPSBmb3JtYXRNY3BQcmltYXJ5TGFiZWwoc2x1ZylcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNsdWcsXG4gICAgICB0eXBlOiAnbWNwJyBhcyBjb25zdCxcbiAgICAgIHByaW1hcnksXG4gICAgICBwcmltYXJ5SGlnaGxpZ2h0OiBoaWdobGlnaHRSYW5nZShwcmltYXJ5LCBzZWFyY2hWYWx1ZSksXG4gICAgICByYXc6IHtcbiAgICAgICAgaWQ6IHNsdWcsXG4gICAgICAgIG5hbWU6IHByaW1hcnksXG4gICAgICB9LFxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUVudGl0eVNlYXJjaCA9ICh0eXBlOiBDb250ZXh0RW50aXR5VHlwZSwgc2NvcGU/OiBFbnRpdHlTZWFyY2hTY29wZSkgPT4ge1xuICBjb25zdCBjb3JVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVCgpXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IGRlYm91bmNlZFNlYXJjaFZhbHVlID0gdXNlRGVib3VuY2Uoc2VhcmNoVmFsdWUsIFNFQVJDSF9RVUVSWV9ERUJPVU5DRV9NUylcblxuICBjb25zdCBbaXRlbXMsIHNldEl0ZW1zXSA9IHVzZVN0YXRlPENvbnRleHRNZW50aW9uSXRlbVtdPihbXSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgbWNwU2x1Z3NLZXkgPSAoc2NvcGU/Lm1jcFNsdWdzID8/IFtdKS5qb2luKCd8JylcblxuICAvLyBFc3RhYmlsaXphbW9zIGVsIHNjb3BlIHBhcmEgbm8gZGlzcGFyYXIgZmV0Y2hzIHBvciBjYW1iaW9zIGRlIGlkZW50aWRhZCBkZSBvYmpldG8uXG4gIGNvbnN0IHN0YWJsZVNjb3BlID0gdXNlTWVtbzxFbnRpdHlTZWFyY2hTY29wZT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIGNsaWVudElkOiBzY29wZT8uY2xpZW50SWQgPz8gbnVsbCxcbiAgICAgIHByb2plY3RJZDogc2NvcGU/LnByb2plY3RJZCA/PyBudWxsLFxuICAgICAgbWNwU2x1Z3M6IHNjb3BlPy5tY3BTbHVncyA/PyBbXSxcbiAgICAgIGFnZW50RW50aXR5OiBzY29wZT8uYWdlbnRFbnRpdHkgPz8gbnVsbCxcbiAgICB9KSxcbiAgICBbc2NvcGU/LmNsaWVudElkLCBzY29wZT8ucHJvamVjdElkLCBtY3BTbHVnc0tleSwgc2NvcGU/LmFnZW50RW50aXR5XVxuICApXG5cbiAgLy8gLS0tIFNlYXJjaDogcHJvamVjdCB8IHRhc2sgKEdyYXBoUUw6IHNlYXJjaCkgLS0tXG4gIGNvbnN0IFtmZXRjaFNlYXJjaEVudGl0aWVzLCB7IGRhdGE6IHNlYXJjaERhdGEsIGxvYWRpbmc6IHNlYXJjaExvYWRpbmcsIGVycm9yOiBzZWFyY2hFcnJvciB9XSA9XG4gICAgdXNlTGF6eVF1ZXJ5PFNlYXJjaEVudGl0aWVzRGF0YT4oU0VBUkNIX0VOVElUSUVTLCB7XG4gICAgICB2YXJpYWJsZXM6IHsgbGltaXQ6IDIwIH0sXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgfSlcblxuICAvLyAtLS0gU2VhcmNoOiBjbGllbnQgKEdyYXBoUUwpIC0tLVxuICBjb25zdCBbZmV0Y2hTZWFyY2hDbGllbnRzLCB7IGRhdGE6IGNsaWVudHNEYXRhLCBsb2FkaW5nOiBjbGllbnRzTG9hZGluZywgZXJyb3I6IGNsaWVudHNFcnJvciB9XSA9XG4gICAgdXNlTGF6eVF1ZXJ5PFNlYXJjaENsaWVudHNEYXRhPihTRUFSQ0hfQ0xJRU5UUywge1xuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgIH0pXG5cbiAgLy8gLS0tIFNlYXJjaDogdXNlciAoR3JhcGhRTDogdXNlcnNEaXJlY3RvcnkpIC0tLVxuICBjb25zdCBbZmV0Y2hVc2Vyc0RpcmVjdG9yeSwgeyBkYXRhOiB1c2Vyc0RhdGEsIGxvYWRpbmc6IHVzZXJzTG9hZGluZywgZXJyb3I6IHVzZXJzRXJyb3IgfV0gPVxuICAgIHVzZUxhenlRdWVyeTxVc2Vyc0RpcmVjdG9yeURhdGE+KFVTRVJTX0RJUkVDVE9SWSwge1xuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgIH0pXG5cbiAgY29uc3QgZmV0Y2hSZWNlbnQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKHR5cGUgPT09ICdtY3AnKSB7XG4gICAgICBjb25zdCBzbHVncyA9IHN0YWJsZVNjb3BlLm1jcFNsdWdzID8/IFtdXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0RXJyb3IoZmFsc2UpXG4gICAgICBzZXRJdGVtcyhtYXBNY3BTbHVnc1RvSXRlbXMoc2x1Z3MsICcnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICBzZXRFcnJvcihmYWxzZSlcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGUgPT09ICdjbGllbnQnKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZWNlbnRDbGllbnRzKClcbiAgICAgICAgY29uc3QgbWFwcGVkID0gKGRhdGEgPz8gW10pLm1hcChjID0+IG1hcENsaWVudFRvSXRlbShjLCAnJykpXG4gICAgICAgIHNldEl0ZW1zKG1hcHBlZClcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3Byb2plY3QnKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZWNlbnRQcm9qZWN0cyhzdGFibGVTY29wZS5jbGllbnRJZCA/IHsgY2xpZW50SWQ6IHN0YWJsZVNjb3BlLmNsaWVudElkIH0gOiB1bmRlZmluZWQpXG4gICAgICAgIGNvbnN0IG1hcHBlZCA9IChBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtdKS5tYXAocCA9PlxuICAgICAgICAgIG1hcFNlYXJjaFRvSXRlbShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgICAgIHRpdGxlOiBwLnRpdGxlLFxuICAgICAgICAgICAgICB0eXBlOiAncHJvamVjdCcsXG4gICAgICAgICAgICAgIGNsaWVudElkOiBwLmNsaWVudElkLFxuICAgICAgICAgICAgICBmZWVJZDogcC5mZWVJZCxcbiAgICAgICAgICAgICAgY2xpZW50TmFtZTogcC5jbGllbnROYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdwcm9qZWN0JyxcbiAgICAgICAgICAgICcnXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIHNldEl0ZW1zKG1hcHBlZClcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3Rhc2snKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRSZWNlbnRUYXNrcygpXG4gICAgICAgIHNldEl0ZW1zKChkYXRhID8/IFtdKS5tYXAodGFzayA9PiBtYXBSZWNlbnRUYXNrVG9JdGVtKHRhc2ssICcnKSkpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd1c2VyJykge1xuICAgICAgICBzZXRJdGVtcyhbbWFwQ29yVXNlclRvVXNlckl0ZW0oY29yVXNlciwgJycsIHQoJ2NvbnRleHRNZW50aW9uLm1lJykpXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEl0ZW1zKFtdKVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgc2V0RXJyb3IodHJ1ZSlcbiAgICAgIHNldEl0ZW1zKFtdKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfSwgW3R5cGUsIHN0YWJsZVNjb3BlLCBjb3JVc2VyLCB0LCBpMThuLmxhbmd1YWdlXSlcblxuICAvLyBEaXNwYXJhciBzZWFyY2ggYWwgY2FtYmlhciBkZWJvdW5jZWQgdmFsdWVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBxID0gZGVib3VuY2VkU2VhcmNoVmFsdWUudHJpbSgpXG5cbiAgICBpZiAodHlwZSA9PT0gJ21jcCcpIHtcbiAgICAgIGNvbnN0IHNsdWdzID0gc3RhYmxlU2NvcGUubWNwU2x1Z3MgPz8gW11cbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIHNldEl0ZW1zKG1hcE1jcFNsdWdzVG9JdGVtcyhzbHVncywgcSkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXEpIHJldHVyblxuXG4gICAgaWYgKHR5cGUgPT09ICdjbGllbnQnKSB7XG4gICAgICBmZXRjaFNlYXJjaENsaWVudHMoe1xuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBmaWx0ZXI6IHsgbmFtZTogcSB9LFxuICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgcGVyUGFnZTogMjAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICBmZXRjaFVzZXJzRGlyZWN0b3J5KHtcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgZmlsdGVyczogYnVpbGRVc2Vyc0RpcmVjdG9yeUZpbHRlcnMocSwgc3RhYmxlU2NvcGUpLFxuICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gYnVpbGRGaWx0ZXJzRm9yVHlwZSh0eXBlKVxuICAgICAgY29uc3QgZXh0cmEgPSBidWlsZFNlYXJjaEVudGl0aWVzRXh0cmEodHlwZSwgc3RhYmxlU2NvcGUpXG4gICAgICBmZXRjaFNlYXJjaEVudGl0aWVzKHtcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgcSxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIC4uLihleHRyYSAhPT0gdW5kZWZpbmVkID8geyBleHRyYSB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtkZWJvdW5jZWRTZWFyY2hWYWx1ZSwgdHlwZSwgc3RhYmxlU2NvcGUsIGZldGNoU2VhcmNoRW50aXRpZXMsIGZldGNoU2VhcmNoQ2xpZW50cywgZmV0Y2hVc2Vyc0RpcmVjdG9yeV0pXG5cbiAgLy8gU2luY3Jvbml6YXIgcmVzdWx0YWRvcyBkZSBzZWFyY2hcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZSA9PT0gJ21jcCcpIHJldHVyblxuXG4gICAgY29uc3QgcSA9IGRlYm91bmNlZFNlYXJjaFZhbHVlLnRyaW0oKVxuICAgIGlmICghcSkgcmV0dXJuXG5cbiAgICBpZiAodHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIHNldExvYWRpbmcoY2xpZW50c0xvYWRpbmcpXG4gICAgICBpZiAoY2xpZW50c0Vycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGNsaWVudHNEYXRhPy5jbGllbnRzPy5kYXRhKSB7XG4gICAgICAgIHNldEl0ZW1zKGNsaWVudHNEYXRhLmNsaWVudHMuZGF0YS5tYXAoYyA9PiBtYXBDbGllbnRUb0l0ZW0oYywgcSkpKVxuICAgICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd1c2VyJykge1xuICAgICAgc2V0TG9hZGluZyh1c2Vyc0xvYWRpbmcpXG4gICAgICBpZiAodXNlcnNFcnJvcikge1xuICAgICAgICBzZXRFcnJvcih0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmICh1c2Vyc0RhdGE/LnVzZXJzRGlyZWN0b3J5Py5kYXRhKSB7XG4gICAgICAgIHNldEl0ZW1zKHVzZXJzRGF0YS51c2Vyc0RpcmVjdG9yeS5kYXRhLm1hcCh1ID0+IG1hcFVzZXJUb0l0ZW0odSwgcSkpKVxuICAgICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2V0TG9hZGluZyhzZWFyY2hMb2FkaW5nKVxuICAgICAgaWYgKHNlYXJjaEVycm9yKSB7XG4gICAgICAgIHNldEVycm9yKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaERhdGE/LnNlYXJjaCkge1xuICAgICAgICBzZXRJdGVtcyhzZWFyY2hEYXRhLnNlYXJjaC5tYXAociA9PiBtYXBTZWFyY2hUb0l0ZW0ociwgdHlwZSwgcSkpKVxuICAgICAgICBzZXRFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBzZWFyY2hEYXRhLFxuICAgIGNsaWVudHNEYXRhLFxuICAgIHVzZXJzRGF0YSxcbiAgICBzZWFyY2hMb2FkaW5nLFxuICAgIGNsaWVudHNMb2FkaW5nLFxuICAgIHVzZXJzTG9hZGluZyxcbiAgICBzZWFyY2hFcnJvcixcbiAgICBjbGllbnRzRXJyb3IsXG4gICAgdXNlcnNFcnJvcixcbiAgICBkZWJvdW5jZWRTZWFyY2hWYWx1ZSxcbiAgICB0eXBlLFxuICBdKVxuXG4gIC8vIEN1YW5kbyBzZSBsaW1waWEgZWwgc2VhcmNoLCB2b2x2ZXIgYSByZWNlbnRzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkZWJvdW5jZWRTZWFyY2hWYWx1ZS50cmltKCkpIHtcbiAgICAgIGZldGNoUmVjZW50KClcbiAgICB9XG4gIH0sIFtkZWJvdW5jZWRTZWFyY2hWYWx1ZSwgZmV0Y2hSZWNlbnRdKVxuXG4gIHJldHVybiB7XG4gICAgaXRlbXMsXG4gICAgbG9hZGluZyxcbiAgICBlcnJvcixcbiAgICBzZWFyY2hWYWx1ZSxcbiAgICB1cGRhdGVTZWFyY2hWYWx1ZTogc2V0U2VhcmNoVmFsdWUsXG4gICAgZmV0Y2hSZWNlbnQsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsU0FBU0EsWUFBWSxRQUFRLGdCQUFnQjtBQUM3QyxTQUFTQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNqRSxTQUFTQyxnQkFBZ0IsUUFBUSxpREFBaUQ7QUFDbEYsU0FBU0MsaUJBQWlCLFFBQVEsbURBQW1EO0FBQ3JGLFNBQVNDLGNBQWMsUUFBUSw2Q0FBNkM7QUFHNUUsU0FBU0MsT0FBTyxRQUFRLHFCQUFxQjtBQUM3QyxTQUFTQyxlQUFlLFFBQVEscUNBQXFDO0FBQ3JFLFNBQVNDLGNBQWMsUUFBUSxxQ0FBcUM7QUFDcEUsU0FBU0MsZUFBZSxRQUFRLHVDQUF1QztBQUN2RSxTQUFTQyx3QkFBd0IsUUFBUSxxQkFBcUI7QUFDOUQsU0FBU0MsV0FBVyxRQUFRLGVBQWU7QUFDM0MsU0FBU0MsSUFBSSxRQUFRLFFBQVE7O0FBMkM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBZ0JBLElBQU1DLG9CQUEwRSxHQUFHO0VBQ2pGQyxPQUFPLEVBQUU7SUFBRUEsT0FBTyxFQUFFLE1BQU07SUFBRUMsUUFBUSxFQUFFO0VBQU0sQ0FBQztFQUM3Q0MsSUFBSSxF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
|