@projectcor/maia-components 2.11.64 → 2.11.65-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/lib/components/atoms/Chip/Chip.js +49 -15
  2. package/lib/components/atoms/Chip/styles.js +7 -3
  3. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +38 -6
  4. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +21 -13
  5. package/lib/components/atoms/MAIAInput/MAIAInput.js +8 -5
  6. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +6 -4
  7. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +10 -5
  8. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +15 -9
  9. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +13 -12
  10. package/lib/components/molecules/ChatFooter/ChatFooter.js +105 -21
  11. package/lib/components/molecules/ChatFooter/styles.js +11 -2
  12. package/lib/components/molecules/Sidebar/Sidebar.js +9 -5
  13. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +2 -2
  14. package/lib/context/global-context.js +8 -1
  15. package/lib/hooks/useChatManager/useChatManager.js +155 -30
  16. package/lib/hooks/useChatMessages/useChatMessages.js +1 -1
  17. package/lib/hooks/useContextPinPopover.js +228 -0
  18. package/lib/hooks/useEntitySearch.js +74 -129
  19. package/lib/hooks/useMentionAllowedTypes.js +11 -1
  20. package/lib/hooks/useMentionPopover.js +3 -2
  21. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  22. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +16 -7
  23. package/lib/hooks/useProjectSearch.js +4 -28
  24. package/lib/hooks/useProjectSummaryConfig.js +74 -4
  25. package/lib/hooks/useRecentClientsSearch.js +4 -34
  26. package/lib/lang/br/index.js +7 -1
  27. package/lib/lang/en/index.js +7 -1
  28. package/lib/lang/es/index.js +7 -1
  29. package/lib/lang/fr/index.js +7 -1
  30. package/lib/services/maia/Agents/getAgents.js +68 -91
  31. package/lib/services/maia/Chats/getChatsByUserId.js +13 -9
  32. package/lib/services/maia/Orchestrator/orchestrator.js +15 -5
  33. package/lib/services/utils/validateIsMaia.js +2 -2
  34. package/lib/types/agent.js +1 -1
  35. package/lib/utils/hitlAnalytics.js +3 -3
  36. package/package.json +1 -1
@@ -17,20 +17,19 @@ import { useState, useCallback, useRef } from 'react';
17
17
  import { useTranslation } from 'react-i18next';
18
18
  import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
19
19
  import { fetchMaia } from '../client';
20
- import { useUser } from '../../../context/cor-user';
21
- import { isMaiaCloneAgentsRoleBlocked } from '../../../constants/maiaTaskPanelAccess';
20
+ import { useUser, CORUserRole } from '../../../context/cor-user';
22
21
  import { mapCORLang } from '../../../lang/utils';
22
+ var isMaiaAgent = function isMaiaAgent(agent) {
23
+ return agent.type === 'orchestrator';
24
+ };
23
25
 
24
26
  /**
25
- * Ordena los agentes: agentes clone primero (si existen), luego favoritos alfabéticamente, luego no favoritos alfabéticamente
27
+ * Ordena los agentes: MAIA primero (si existe), luego favoritos alfabéticamente, luego no favoritos alfabéticamente
26
28
  */
27
29
  var sortAgents = function sortAgents(agents) {
28
- // Separar agentes clone del resto
29
- var cloneAgents = agents.filter(function (ag) {
30
- return ag.type === 'clone';
31
- });
30
+ var maiaAgents = agents.filter(isMaiaAgent);
32
31
  var otherAgents = agents.filter(function (ag) {
33
- return ag.type !== 'clone';
32
+ return !isMaiaAgent(ag);
34
33
  });
35
34
 
36
35
  // Separar favoritos y no favoritos
@@ -44,9 +43,7 @@ var sortAgents = function sortAgents(agents) {
44
43
  }).sort(function (a, b) {
45
44
  return a.name.localeCompare(b.name);
46
45
  });
47
-
48
- // Combinar: clones primero, luego favoritos, luego no favoritos
49
- return cloneAgents.length ? [].concat(_toConsumableArray(cloneAgents), _toConsumableArray(favorites), _toConsumableArray(nonFavorites)) : [].concat(_toConsumableArray(favorites), _toConsumableArray(nonFavorites));
46
+ return maiaAgents.length ? [].concat(_toConsumableArray(maiaAgents), _toConsumableArray(favorites), _toConsumableArray(nonFavorites)) : [].concat(_toConsumableArray(favorites), _toConsumableArray(nonFavorites));
50
47
  };
51
48
  export var useGetAgents = function useGetAgents(_ref) {
52
49
  var selectAgent = _ref.selectAgent,
@@ -80,7 +77,7 @@ export var useGetAgents = function useGetAgents(_ref) {
80
77
  var lastSelectedAgentRef = useRef(null);
81
78
  var isRefreshingRef = useRef(false);
82
79
  var lastRequestRef = useRef(null);
83
- var canFetchCloneAgents = !isMaiaCloneAgentsRoleBlocked(user, section);
80
+ var userRolesDisabled = [CORUserRole.COLLABORATOR, CORUserRole.FREELANCER, CORUserRole.CLIENT];
84
81
  var addAgent = useCallback(function (newAgent, options) {
85
82
  setAgents(function (prev) {
86
83
  // Verificar si el agente ya existe para evitar duplicados
@@ -180,7 +177,7 @@ export var useGetAgents = function useGetAgents(_ref) {
180
177
  var handleGetAgents = useCallback(/*#__PURE__*/function () {
181
178
  var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(agentToSelect) {
182
179
  var _agentToSelect$id;
183
- var requestKey, isMultiAgents, agentParsed, hasMore, nextOffset, cloneAgents, customAgents, customHasMore, customNextOffset, is403, loadCloneAgents, loadCustomAgents, shouldRequestCloneAgents, queryParams, path, response, data, _responseError$respon, _responseError$messag, _responseError$messag2, is403Error, _agentParsed, _agentParsed2, _lastSelectedAgentRef, _lastSelectedAgentRef2, availableAgents, _availableAgents, firstAgent, _lastSelectedAgentRef3, _availableAgents2, _availableAgents3, firstAvailableAgent, _t3, _t4;
180
+ var requestKey, isMultiAgents, agentParsed, hasMore, nextOffset, customAgents, customHasMore, customNextOffset, is403, canFetchCloneAgents, maiaAgents, loadCloneAgents, loadCustomAgents, queryParams, queryString, path, response, data, _responseError$respon, _responseError$messag, _responseError$messag2, is403Error, _agentParsed, _agentParsed2, _lastSelectedAgentRef, _lastSelectedAgentRef2, availableAgents, _availableAgents, firstAgent, _lastSelectedAgentRef3, _availableAgents2, _availableAgents3, firstAvailableAgent, _t3, _t4;
184
181
  return _regeneratorRuntime.wrap(function (_context3) {
185
182
  while (1) switch (_context3.prev = _context3.next) {
186
183
  case 0:
@@ -211,7 +208,6 @@ export var useGetAgents = function useGetAgents(_ref) {
211
208
  break;
212
209
  }
213
210
  // Query clone (Maia) y custom son independientes → se disparan en paralelo.
214
- cloneAgents = [];
215
211
  customAgents = [];
216
212
  customHasMore = false;
217
213
  customNextOffset = null;
@@ -219,9 +215,11 @@ export var useGetAgents = function useGetAgents(_ref) {
219
215
  var _err$response, _err$message, _err$message2;
220
216
  return (err === null || err === void 0 || (_err$response = err.response) === null || _err$response === void 0 ? void 0 : _err$response.status) === 403 || (err === null || err === void 0 ? void 0 : err.status) === 403 || (err === null || err === void 0 || (_err$message = err.message) === null || _err$message === void 0 ? void 0 : _err$message.includes("You don't have permission to view agents")) || (err === null || err === void 0 || (_err$message2 = err.message) === null || _err$message2 === void 0 ? void 0 : _err$message2.includes('Failed fetching data'));
221
217
  }; // fetchCOR lanza esto para 403 sin 'Access denied'
218
+ canFetchCloneAgents = !userRolesDisabled.includes(user === null || user === void 0 ? void 0 : user.role_id);
219
+ maiaAgents = [];
222
220
  loadCloneAgents = /*#__PURE__*/function () {
223
221
  var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
224
- var _maiaData$data, orderParam, maiaResponse, maiaData, _t;
222
+ var _maiaData$data, maiaResponse, maiaData, _t;
225
223
  return _regeneratorRuntime.wrap(function (_context) {
226
224
  while (1) switch (_context.prev = _context.next) {
227
225
  case 0:
@@ -232,10 +230,9 @@ export var useGetAgents = function useGetAgents(_ref) {
232
230
  return _context.abrupt("return");
233
231
  case 1:
234
232
  _context.prev = 1;
235
- orderParam = section === 'client' ? '&order=client,project' : section === 'project' || section === 'header' || section === 'task' ? '&order=project,client' : '';
236
233
  _context.next = 2;
237
234
  return fetchMaia({
238
- path: "agents?agent_type=clone&lang=".concat(mapCORLang(i18n.language)).concat(orderParam),
235
+ path: "agents?agent_type=orchestrator&lang=".concat(mapCORLang(i18n.language)),
239
236
  method: 'GET'
240
237
  });
241
238
  case 2:
@@ -244,9 +241,7 @@ export var useGetAgents = function useGetAgents(_ref) {
244
241
  return maiaResponse.json();
245
242
  case 3:
246
243
  maiaData = _context.sent;
247
- cloneAgents = ((_maiaData$data = maiaData.data) === null || _maiaData$data === void 0 ? void 0 : _maiaData$data.filter(function (ag) {
248
- return ag.type === 'clone';
249
- })) || [];
244
+ maiaAgents = ((_maiaData$data = maiaData.data) === null || _maiaData$data === void 0 ? void 0 : _maiaData$data.filter(isMaiaAgent)) || [];
250
245
  _context.next = 5;
251
246
  break;
252
247
  case 4:
@@ -318,10 +313,7 @@ export var useGetAgents = function useGetAgents(_ref) {
318
313
  // Si customAgents está vacío (por 403), agentParsed será []
319
314
  agentParsed = customAgents;
320
315
  } else {
321
- // Rol con acceso a clones: cloneAgents + customAgents
322
- // Si customAgents está vacío (por 403) pero hay cloneAgents, agentParsed tendrá los clones
323
- // Si no hay cloneAgents ni customAgents, agentParsed será []
324
- agentParsed = cloneAgents.length ? [].concat(_toConsumableArray(cloneAgents), _toConsumableArray(customAgents)) : customAgents;
316
+ agentParsed = maiaAgents.length ? [].concat(_toConsumableArray(maiaAgents), _toConsumableArray(customAgents)) : customAgents;
325
317
  }
326
318
  // Ordenar: Maia primero, luego favoritos alfabéticamente, luego no favoritos alfabéticamente
327
319
  agentParsed = sortAgents(agentParsed);
@@ -337,56 +329,47 @@ export var useGetAgents = function useGetAgents(_ref) {
337
329
  if (agentParsed.length === 0) {
338
330
  setError(null);
339
331
  }
340
- _context3.next = 12;
332
+ _context3.next = 11;
341
333
  break;
342
334
  case 5:
343
- shouldRequestCloneAgents = canFetchCloneAgents && (section === 'project' || section === 'client' || section === 'header' || section === 'task');
344
- if (shouldRequestCloneAgents) {
345
- _context3.next = 6;
346
- break;
347
- }
348
- setAgents({
349
- data: [],
350
- has_more: false,
351
- next_offset: null
352
- });
353
- setError(null);
354
- _context3.next = 12;
355
- break;
356
- case 6:
335
+ // Lógica para project, client o header sin multiAgents (mismo criterio de orden project/client; header añade paginación)
357
336
  queryParams = new URLSearchParams();
358
- queryParams.append('agent_type', 'clone');
359
- queryParams.append('lang', mapCORLang(i18n.language));
360
- queryParams.append('order', section === 'client' ? 'client,project' : 'project,client');
361
- if (section === 'header') {
362
- queryParams.append('limit', '7');
363
- queryParams.append('offset', '0');
337
+ if (section === 'project' || section === 'client' || section === 'header' || section === 'task') {
338
+ queryParams.append('agent_type', 'orchestrator');
339
+ queryParams.append('lang', mapCORLang(i18n.language));
340
+ if (section === 'header') {
341
+ queryParams.append('limit', '7');
342
+ queryParams.append('offset', '0');
343
+ }
364
344
  }
365
- path = "agents?".concat(queryParams.toString());
366
- _context3.prev = 7;
367
- _context3.next = 8;
345
+ queryString = queryParams.toString();
346
+ path = "agents".concat(queryString ? "?".concat(queryString) : '');
347
+ _context3.prev = 6;
348
+ _context3.next = 7;
368
349
  return fetchMaia({
369
350
  path: path,
370
351
  method: 'GET'
371
352
  });
372
- case 8:
353
+ case 7:
373
354
  response = _context3.sent;
374
- _context3.next = 9;
355
+ _context3.next = 8;
375
356
  return response.json();
376
- case 9:
357
+ case 8:
377
358
  data = _context3.sent;
359
+ // data.data ya contiene el/los agentes orquestadores de la query agent_type=orchestrator
378
360
  agentParsed = data.data || [];
361
+ // Ordenar: Maia primero, luego favoritos alfabéticamente, luego no favoritos alfabéticamente
379
362
  agentParsed = sortAgents(agentParsed);
380
363
  hasMore = data.has_more;
381
364
  nextOffset = data.next_offset;
382
365
  setAgents(_objectSpread(_objectSpread({}, data), {}, {
383
366
  data: agentParsed
384
367
  }));
385
- _context3.next = 12;
368
+ _context3.next = 11;
386
369
  break;
387
- case 10:
388
- _context3.prev = 10;
389
- _t3 = _context3["catch"](7);
370
+ case 9:
371
+ _context3.prev = 9;
372
+ _t3 = _context3["catch"](6);
390
373
  // Verificar si el error es 403
391
374
  // fetchCOR puede lanzar diferentes tipos de errores:
392
375
  // 1. Error con errorData.detail si incluye 'Access denied'
@@ -394,7 +377,7 @@ export var useGetAgents = function useGetAgents(_ref) {
394
377
  // 3. Necesitamos verificar el status code si está disponible
395
378
  is403Error = (_t3 === null || _t3 === void 0 || (_responseError$respon = _t3.response) === null || _responseError$respon === void 0 ? void 0 : _responseError$respon.status) === 403 || (_t3 === null || _t3 === void 0 ? void 0 : _t3.status) === 403 || (_t3 === null || _t3 === void 0 || (_responseError$messag = _t3.message) === null || _responseError$messag === void 0 ? void 0 : _responseError$messag.includes("You don't have permission to view agents")) || (_t3 === null || _t3 === void 0 || (_responseError$messag2 = _t3.message) === null || _responseError$messag2 === void 0 ? void 0 : _responseError$messag2.includes('Failed fetching data')); // fetchCOR lanza esto para 403 sin 'Access denied'
396
379
  if (!is403Error) {
397
- _context3.next = 11;
380
+ _context3.next = 10;
398
381
  break;
399
382
  }
400
383
  // Si es 403, establecer agentes vacíos y continuar
@@ -404,11 +387,11 @@ export var useGetAgents = function useGetAgents(_ref) {
404
387
  next_offset: null
405
388
  });
406
389
  setError(null);
407
- _context3.next = 12;
390
+ _context3.next = 11;
408
391
  break;
409
- case 11:
392
+ case 10:
410
393
  throw _t3;
411
- case 12:
394
+ case 11:
412
395
  // Lógica de select agent - Solo seleccionar si hay agentes disponibles
413
396
  if (agentParsed.length > 0) {
414
397
  if (agentToSelect && agentParsed.find(function (agentToRequest) {
@@ -421,8 +404,8 @@ export var useGetAgents = function useGetAgents(_ref) {
421
404
  } else if ((_agentParsed = agentParsed) !== null && _agentParsed !== void 0 && _agentParsed[0] && (!agent || !agentParsed.find(function (a) {
422
405
  return a.id === agent.id;
423
406
  }))) {
424
- availableAgents = window.MAIA_CHAT_AI_FEATURE_ACCESS && canFetchCloneAgents ? agentParsed : agentParsed.filter(function (agentItem) {
425
- return agentItem.type !== 'clone';
407
+ availableAgents = window.MAIA_CHAT_AI_FEATURE_ACCESS && !userRolesDisabled.includes(user.role_id) ? agentParsed : agentParsed.filter(function (agentItem) {
408
+ return !isMaiaAgent(agentItem);
426
409
  });
427
410
  _availableAgents = _slicedToArray(availableAgents, 1), firstAgent = _availableAgents[0];
428
411
  if (firstAgent && ((_lastSelectedAgentRef2 = lastSelectedAgentRef.current) === null || _lastSelectedAgentRef2 === void 0 ? void 0 : _lastSelectedAgentRef2.id) !== firstAgent.id) {
@@ -430,8 +413,8 @@ export var useGetAgents = function useGetAgents(_ref) {
430
413
  selectAgent(firstAgent);
431
414
  }
432
415
  } else if (agentToSelect && (_agentParsed2 = agentParsed) !== null && _agentParsed2 !== void 0 && _agentParsed2.length) {
433
- _availableAgents2 = window.MAIA_CHAT_AI_FEATURE_ACCESS && canFetchCloneAgents ? agentParsed : agentParsed.filter(function (agentItem) {
434
- return agentItem.type !== 'clone';
416
+ _availableAgents2 = window.MAIA_CHAT_AI_FEATURE_ACCESS && !userRolesDisabled.includes(user.role_id) ? agentParsed : agentParsed.filter(function (agentItem) {
417
+ return !isMaiaAgent(agentItem);
435
418
  });
436
419
  _availableAgents3 = _slicedToArray(_availableAgents2, 1), firstAvailableAgent = _availableAgents3[0];
437
420
  if (firstAvailableAgent && ((_lastSelectedAgentRef3 = lastSelectedAgentRef.current) === null || _lastSelectedAgentRef3 === void 0 ? void 0 : _lastSelectedAgentRef3.id) !== firstAvailableAgent.id) {
@@ -441,32 +424,32 @@ export var useGetAgents = function useGetAgents(_ref) {
441
424
  }
442
425
  }
443
426
  setLoading(false);
444
- _context3.next = 14;
427
+ _context3.next = 13;
445
428
  break;
446
- case 13:
447
- _context3.prev = 13;
429
+ case 12:
430
+ _context3.prev = 12;
448
431
  _t4 = _context3["catch"](3);
449
432
  setError(_t4 instanceof Error ? _t4.message : 'An unknown error occurred');
450
433
  setLoading(false);
451
- case 14:
452
- _context3.prev = 14;
434
+ case 13:
435
+ _context3.prev = 13;
453
436
  isRefreshingRef.current = false;
454
437
  setTimeout(function () {
455
438
  if (!isRefreshingRef.current) {
456
439
  lastRequestRef.current = null;
457
440
  }
458
441
  }, 100);
459
- return _context3.finish(14);
460
- case 15:
442
+ return _context3.finish(13);
443
+ case 14:
461
444
  case "end":
462
445
  return _context3.stop();
463
446
  }
464
- }, _callee3, null, [[3, 13, 14, 15], [7, 10]]);
447
+ }, _callee3, null, [[3, 12, 13, 14], [6, 9]]);
465
448
  }));
466
449
  return function (_x) {
467
450
  return _ref5.apply(this, arguments);
468
451
  };
469
- }(), [selectAgent, section, agent, loading, canFetchCloneAgents, i18n.language]);
452
+ }(), [selectAgent, section, agent, loading]);
470
453
  var loadMoreAgents = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
471
454
  var isMultiAgents, canLoadMore, path, queryParams, response, data, _t5;
472
455
  return _regeneratorRuntime.wrap(function (_context4) {
@@ -488,11 +471,10 @@ export var useGetAgents = function useGetAgents(_ref) {
488
471
  // Mantener cantidad impar de cards: primera carga 7, siguientes +6 (7, 13, 19, ...)
489
472
  path = "agents?agent_type=custom&limit=6&offset=".concat(agents.next_offset);
490
473
  } else {
491
- // Si no es multiAgents, cargar más agentes clone (Maia) — mismo order que project para header
474
+ // Si no es multiAgents, cargar más agentes orquestadores (MAIA)
492
475
  queryParams = new URLSearchParams();
493
- queryParams.append('agent_type', 'clone');
476
+ queryParams.append('agent_type', 'orchestrator');
494
477
  queryParams.append('lang', mapCORLang(i18n.language));
495
- queryParams.append('order', 'project,client');
496
478
  queryParams.append('limit', '7');
497
479
  queryParams.append('offset', agents.next_offset.toString());
498
480
  path = "agents?".concat(queryParams.toString());
@@ -511,29 +493,24 @@ export var useGetAgents = function useGetAgents(_ref) {
511
493
  // Acumular agentes, excluyendo duplicados
512
494
  setAgents(function (prev) {
513
495
  if (isMultiAgents) {
514
- // Lógica para multiAgents: separar clone y custom
515
- // Mantener todos los agentes clone existentes al inicio
516
- var existingCloneAgents = prev.data.filter(function (ag) {
517
- return ag.type === 'clone';
518
- });
496
+ // Lógica para multiAgents: separar MAIA y custom
497
+ var existingMaiaAgents = prev.data.filter(isMaiaAgent);
519
498
 
520
- // Obtener IDs existentes (excluyendo clones)
499
+ // Obtener IDs existentes (excluyendo MAIA)
521
500
  var _existingIds = new Set(prev.data.filter(function (ag) {
522
- return ag.type !== 'clone';
501
+ return !isMaiaAgent(ag);
523
502
  }).map(function (ag) {
524
503
  return ag.id;
525
504
  }));
526
505
 
527
- // Filtrar nuevos agents que no estén ya en la lista (y que no sean clone)
506
+ // Filtrar nuevos agents que no estén ya en la lista (y que no sean MAIA)
528
507
  var _newAgents = data.data.filter(function (ag) {
529
- return ag.type !== 'clone' && !_existingIds.has(ag.id);
508
+ return !isMaiaAgent(ag) && !_existingIds.has(ag.id);
530
509
  });
531
-
532
- // Construir el nuevo array: clones primero, luego los agents existentes que no sean clone, luego los nuevos
533
- var _newData = existingCloneAgents.length ? [].concat(_toConsumableArray(existingCloneAgents), _toConsumableArray(prev.data.filter(function (ag) {
534
- return ag.type !== 'clone';
510
+ var _newData = existingMaiaAgents.length ? [].concat(_toConsumableArray(existingMaiaAgents), _toConsumableArray(prev.data.filter(function (ag) {
511
+ return !isMaiaAgent(ag);
535
512
  })), _toConsumableArray(_newAgents)) : [].concat(_toConsumableArray(prev.data.filter(function (ag) {
536
- return ag.type !== 'clone';
513
+ return !isMaiaAgent(ag);
537
514
  })), _toConsumableArray(_newAgents));
538
515
 
539
516
  // Ordenar: Maia primero, luego favoritos alfabéticamente, luego no favoritos alfabéticamente
@@ -544,7 +521,7 @@ export var useGetAgents = function useGetAgents(_ref) {
544
521
  next_offset: data.next_offset
545
522
  };
546
523
  }
547
- // Lógica para !isMultiAgents: todos los agentes son clone, simplemente agregar evitando duplicados
524
+ // Lógica para !isMultiAgents: agregar evitando duplicados
548
525
  var existingIds = new Set(prev.data.map(function (ag) {
549
526
  return ag.id;
550
527
  }));
@@ -590,4 +567,4 @@ export var useGetAgents = function useGetAgents(_ref) {
590
567
  sortAgentsList: sortAgentsList
591
568
  };
592
569
  };
593
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlVHJhbnNsYXRpb24iLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJmZXRjaE1haWEiLCJ1c2VVc2VyIiwiaXNNYWlhQ2xvbmVBZ2VudHNSb2xlQmxvY2tlZCIsIm1hcENPUkxhbmciLCJzb3J0QWdlbnRzIiwiYWdlbnRzIiwiY2xvbmVBZ2VudHMiLCJmaWx0ZXIiLCJhZyIsInR5cGUiLCJvdGhlckFnZW50cyIsImZhdm9yaXRlcyIsImlzX2Zhdm9yaXRlIiwic29ydCIsImEiLCJiIiwibmFtZSIsImxvY2FsZUNvbXBhcmUiLCJub25GYXZvcml0ZXMiLCJsZW5ndGgiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJ1c2VHZXRBZ2VudHMiLCJfcmVmIiwic2VsZWN0QWdlbnQiLCJzZWN0aW9uIiwiYWdlbnQiLCJoYW5kbGVHb0hvbWUiLCJ1c2VyIiwiX3VzZVN0YXRlIiwiZGF0YSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNldEFnZW50cyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImxvYWRpbmdNb3JlIiwic2V0TG9hZGluZ01vcmUiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImVycm9yIiwic2V0RXJyb3IiLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJpMThuIiwibGFzdFNlbGVjdGVkQWdlbnRSZWYiLCJpc1JlZnJlc2hpbmdSZWYiLCJsYXN0UmVxdWVzdFJlZiIsImNhbkZldGNoQ2xvbmVBZ2VudHMiLCJhZGRBZ2VudCIsIm5ld0FnZW50Iiwib3B0aW9ucyIsInByZXYiLCJhZ2VudEV4aXN0cyIsInNvbWUiLCJleGlzdGluZ0FnZW50IiwiaWQiLCJuZXdEYXRhIiwic29ydGVkRGF0YSIsIl9vYmplY3RTcHJlYWQiLCJuYXZpZ2F0ZUhvbWUiLCJyZW1vdmVBZ2VudCIsImFnZW50SWQiLCJ0b1N0cmluZyIsInVwZGF0ZUFnZW50IiwidXBkYXRlZEFnZW50IiwidXBkYXRlZERhdGEiLCJtYXAiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2hvdWxkU29ydCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIl9yZWYyIiwibWVzc2FnZSIsImFnZW50RmllbGRzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwibWVyZ2VkQWdlbnQiLCJmaW5hbERhdGEiLCJmaW5kIiwiX3JlZjMiLCJfZXhjbHVkZWQyIiwiX3JlZjQiLCJfZXhjbHVkZWQzIiwic29ydEFnZW50c0xpc3QiLCJzZWxlY3RGaXJzdEFnZW50IiwiZmlyc3RBZ2VudCIsImZpbmRJbmRleCIsImFnZW50RGF0YSIsImN1cnJlbnQiLCJoYW5kbGVHZXRBZ2VudHMiLCJfcmVmNSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlMyIsImFnZW50VG9TZWxlY3QiLCJfYWdlbnRUb1NlbGVjdCRpZCIsInJlcXVlc3RLZXkiLCJpc011bHRpQWdlbnRzIiwiYWdlbnRQYXJzZWQiLCJoYXNNb3JlIiwibmV4dE9mZnNldCIsImN1c3RvbUFnZW50cyIsImN1c3RvbUhhc01vcmUiLCJjdXN0b21OZXh0T2Zmc2V0IiwiaXM0MDMiLCJsb2FkQ2xvbmVBZ2VudHMiLCJsb2FkQ3VzdG9tQWdlbnRzIiwic2hvdWxkUmVxdWVzdENsb25lQWdlbnRzIiwicXVlcnlQYXJhbXMiLCJwYXRoIiwicmVzcG9uc2UiLCJfcmVzcG9uc2VFcnJvciRyZXNwb24iLCJfcmVzcG9uc2VFcnJvciRtZXNzYWciLCJfcmVzcG9uc2VFcnJvciRtZXNzYWcyIiwiaXM0MDNFcnJvciIsIl9hZ2VudFBhcnNlZCIsIl9hZ2VudFBhcnNlZDIiLCJfbGFzdFNlbGVjdGVkQWdlbnRSZWYiLCJfbGFzdFNlbGVjdGVkQWdlbnRSZWYyIiwiYXZhaWxhYmxlQWdlbnRzIiwiX2F2YWlsYWJsZUFnZW50cyIsIl9sYXN0U2VsZWN0ZWRBZ2VudFJlZjMiLCJfYXZhaWxhYmxlQWdlbnRzMiIsIl9hdmFpbGFibGVBZ2VudHMzIiwiZmlyc3RBdmFpbGFibGVBZ2VudCIsIl90MyIsIl90NCIsIndyYXAiLCJfY29udGV4dDMiLCJuZXh0IiwiYWJydXB0Iiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImVyciIsIl9lcnIkcmVzcG9uc2UiLCJfZXJyJG1lc3NhZ2UiLCJfZXJyJG1lc3NhZ2UyIiwic3RhdHVzIiwiaW5jbHVkZXMiLCJfcmVmNiIsIl9jYWxsZWUiLCJfbWFpYURhdGEkZGF0YSIsIm9yZGVyUGFyYW0iLCJtYWlhUmVzcG9uc2UiLCJtYWlhRGF0YSIsIl90IiwiX2NvbnRleHQiLCJsYW5ndWFnZSIsIm1ldGhvZCIsInNlbnQiLCJqc29uIiwic3RvcCIsImFwcGx5IiwiX3JlZjciLCJfY2FsbGVlMiIsImN1c3RvbVJlc3BvbnNlIiwiY3VzdG9tRGF0YSIsIl90MiIsIl9jb250ZXh0MiIsImhhc19tb3JlIiwibmV4dF9vZmZzZXQiLCJQcm9taXNlIiwiYWxsIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXBwZW5kIiwiYWdlbnRUb1JlcXVlc3QiLCJhZ2VudEl0ZW0iLCJFcnJvciIsInNldFRpbWVvdXQiLCJmaW5pc2giLCJfeCIsImxvYWRNb3JlQWdlbnRzIiwiX2NhbGxlZTQiLCJjYW5Mb2FkTW9yZSIsIl90NSIsIl9jb250ZXh0NCIsImV4aXN0aW5nQ2xvbmVBZ2VudHMiLCJleGlzdGluZ0lkcyIsIlNldCIsIm5ld0FnZW50cyIsImhhcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9tYWlhL0FnZW50cy9nZXRBZ2VudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IHVzZVNuYWNrQmFyTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi9jbGllbnQnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL21haWFUYXNrUGFuZWxBY2Nlc3MnXG5pbXBvcnQgeyBtYXBDT1JMYW5nIH0gZnJvbSAnLi4vLi4vLi4vbGFuZy91dGlscydcblxuLyoqXG4gKiBPcmRlbmEgbG9zIGFnZW50ZXM6IGFnZW50ZXMgY2xvbmUgcHJpbWVybyAoc2kgZXhpc3RlbiksIGx1ZWdvIGZhdm9yaXRvcyBhbGZhYsOpdGljYW1lbnRlLCBsdWVnbyBubyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZVxuICovXG5jb25zdCBzb3J0QWdlbnRzID0gKGFnZW50czogQWdlbnRbXSk6IEFnZW50W10gPT4ge1xuICAvLyBTZXBhcmFyIGFnZW50ZXMgY2xvbmUgZGVsIHJlc3RvXG4gIGNvbnN0IGNsb25lQWdlbnRzID0gYWdlbnRzLmZpbHRlcihhZyA9PiBhZy50eXBlID09PSAnY2xvbmUnKVxuICBjb25zdCBvdGhlckFnZW50cyA9IGFnZW50cy5maWx0ZXIoYWcgPT4gYWcudHlwZSAhPT0gJ2Nsb25lJylcblxuICAvLyBTZXBhcmFyIGZhdm9yaXRvcyB5IG5vIGZhdm9yaXRvc1xuICBjb25zdCBmYXZvcml0ZXMgPSBvdGhlckFnZW50cy5maWx0ZXIoYWcgPT4gYWcuaXNfZmF2b3JpdGUpLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpXG4gIGNvbnN0IG5vbkZhdm9yaXRlcyA9IG90aGVyQWdlbnRzLmZpbHRlcihhZyA9PiAhYWcuaXNfZmF2b3JpdGUpLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpXG5cbiAgLy8gQ29tYmluYXI6IGNsb25lcyBwcmltZXJvLCBsdWVnbyBmYXZvcml0b3MsIGx1ZWdvIG5vIGZhdm9yaXRvc1xuICByZXR1cm4gY2xvbmVBZ2VudHMubGVuZ3RoID8gWy4uLmNsb25lQWdlbnRzLCAuLi5mYXZvcml0ZXMsIC4uLm5vbkZhdm9yaXRlc10gOiBbLi4uZmF2b3JpdGVzLCAuLi5ub25GYXZvcml0ZXNdXG59XG5cbnR5cGUgVXNlR2V0QWdlbnRzUHJvcHMgPSB7XG4gIHNlbGVjdEFnZW50OiAoYWdlbnQ6IEFnZW50KSA9PiB2b2lkXG4gIHNlY3Rpb246ICdwcm9qZWN0JyB8ICdoZWFkZXInIHwgJ2NsaWVudCcgfCAndGFzaydcbiAgYWdlbnQ6IEFnZW50IHwgbnVsbFxuICBoYW5kbGVHb0hvbWU6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgQWRkQWdlbnRPcHRpb25zID0ge1xuICAvKiogUG9yIGRlZmVjdG8gYHRydWVgIChjb21wb3J0YW1pZW50byBBQk0pLiBQYXNhciBgZmFsc2VgIGFsIGluc2VydGFyIGFnZW50ZSBjcmVhZG8gcG9yIGNoYXQgc2luIGNhbWJpYXIgZGUgdmlzdGEuICovXG4gIG5hdmlnYXRlSG9tZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUdldEFnZW50cyA9ICh7IHNlbGVjdEFnZW50LCBzZWN0aW9uLCBhZ2VudCwgaGFuZGxlR29Ib21lIH06IFVzZUdldEFnZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgW2FnZW50cywgc2V0QWdlbnRzXSA9IHVzZVN0YXRlPHsgZGF0YTogQWdlbnRbXTsgaGFzX21vcmU/OiBib29sZWFuOyBuZXh0X29mZnNldD86IG51bWJlciB8IG51bGwgfT4oeyBkYXRhOiBbXSB9KVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2xvYWRpbmdNb3JlLCBzZXRMb2FkaW5nTW9yZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oJ2NoYXRfYWlfc2VjdGlvbicpXG4gIGNvbnN0IGxhc3RTZWxlY3RlZEFnZW50UmVmID0gdXNlUmVmPEFnZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNSZWZyZXNoaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBsYXN0UmVxdWVzdFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGNhbkZldGNoQ2xvbmVBZ2VudHMgPSAhaXNNYWlhQ2xvbmVBZ2VudHNSb2xlQmxvY2tlZCh1c2VyLCBzZWN0aW9uKVxuXG4gIGNvbnN0IGFkZEFnZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKG5ld0FnZW50OiBBZ2VudCwgb3B0aW9ucz86IEFkZEFnZW50T3B0aW9ucykgPT4ge1xuICAgICAgc2V0QWdlbnRzKHByZXYgPT4ge1xuICAgICAgICAvLyBWZXJpZmljYXIgc2kgZWwgYWdlbnRlIHlhIGV4aXN0ZSBwYXJhIGV2aXRhciBkdXBsaWNhZG9zXG4gICAgICAgIGNvbnN0IGFnZW50RXhpc3RzID0gcHJldi5kYXRhLnNvbWUoZXhpc3RpbmdBZ2VudCA9PiBleGlzdGluZ0FnZW50LmlkID09PSBuZXdBZ2VudC5pZClcbiAgICAgICAgaWYgKGFnZW50RXhpc3RzKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdEYXRhID0gWy4uLnByZXYuZGF0YSwgbmV3QWdlbnRdXG4gICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSBzb3J0QWdlbnRzKG5ld0RhdGEpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICBkYXRhOiBzb3J0ZWREYXRhLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKG9wdGlvbnM/Lm5hdmlnYXRlSG9tZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgaGFuZGxlR29Ib21lKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVHb0hvbWVdXG4gIClcblxuICBjb25zdCByZW1vdmVBZ2VudCA9IHVzZUNhbGxiYWNrKChhZ2VudElkOiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgICBzZXRBZ2VudHMocHJldiA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIGRhdGE6IHByZXYuZGF0YS5maWx0ZXIoYSA9PiBhLmlkICE9PSBhZ2VudElkLnRvU3RyaW5nKCkpLFxuICAgIH0pKVxuICB9LCBbXSlcblxuICBjb25zdCB1cGRhdGVBZ2VudCA9IHVzZUNhbGxiYWNrKCh1cGRhdGVkQWdlbnQ6IEFnZW50KSA9PiB7XG4gICAgc2V0QWdlbnRzKHByZXYgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBwcmV2LmRhdGEubWFwKGV4aXN0aW5nQWdlbnQgPT5cbiAgICAgICAgZXhpc3RpbmdBZ2VudC5pZCA9PT0gdXBkYXRlZEFnZW50LmlkID8gdXBkYXRlZEFnZW50IDogZXhpc3RpbmdBZ2VudFxuICAgICAgKVxuICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHNvcnRBZ2VudHModXBkYXRlZERhdGEpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBkYXRhOiBzb3J0ZWREYXRhLFxuICAgICAgfVxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHVwZGF0ZUFnZW50RmF2b3JpdGUgPSB1c2VDYWxsYmFjayhcbiAgICAodXBkYXRlZEFnZW50OiBBZ2VudCwgc2hvdWxkU29ydDogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XG4gICAgICBzZXRBZ2VudHMocHJldiA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gcHJldi5kYXRhLm1hcChleGlzdGluZ0FnZW50ID0+IHtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdBZ2VudC5pZCA9PT0gdXBkYXRlZEFnZW50LmlkKSB7XG4gICAgICAgICAgICBjb25zdCB7IG1lc3NhZ2UsIC4uLmFnZW50RmllbGRzIH0gPSB1cGRhdGVkQWdlbnQgYXMgYW55XG4gICAgICAgICAgICBjb25zdCBtZXJnZWRBZ2VudCA9IHsgLi4uZXhpc3RpbmdBZ2VudCwgLi4uYWdlbnRGaWVsZHMgfVxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlZEFnZW50XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBleGlzdGluZ0FnZW50XG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU29sbyBvcmRlbmFyIHNpIHNob3VsZFNvcnQgZXMgdHJ1ZVxuICAgICAgICBjb25zdCBmaW5hbERhdGEgPSBzaG91bGRTb3J0ID8gc29ydEFnZW50cyh1cGRhdGVkRGF0YSkgOiB1cGRhdGVkRGF0YVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICBkYXRhOiBmaW5hbERhdGEsXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIEFjdHVhbGl6YXIgZWwgYWdlbnRlIHNlbGVjY2lvbmFkbyBzaSBlcyBlbCBxdWUgc2UgZXN0w6EgYWN0dWFsaXphbmRvXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSB1cGRhdGVkQWdlbnQuaWQpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdBZ2VudCA9IGFnZW50cy5kYXRhLmZpbmQoYSA9PiBhLmlkID09PSB1cGRhdGVkQWdlbnQuaWQpXG4gICAgICAgIGlmIChleGlzdGluZ0FnZW50KSB7XG4gICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCAuLi5hZ2VudEZpZWxkcyB9ID0gdXBkYXRlZEFnZW50IGFzIGFueVxuICAgICAgICAgIGNvbnN0IG1lcmdlZEFnZW50ID0geyAuLi5leGlzdGluZ0FnZW50LCAuLi5hZ2VudEZpZWxkcyB9XG4gICAgICAgICAgc2VsZWN0QWdlbnQobWVyZ2VkQWdlbnQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCAuLi5hZ2VudEZpZWxkcyB9ID0gdXBkYXRlZEFnZW50IGFzIGFueVxuICAgICAgICAgIHNlbGVjdEFnZW50KGFnZW50RmllbGRzIGFzIEFnZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbYWdlbnQsIHNlbGVjdEFnZW50LCBhZ2VudHMuZGF0YV1cbiAgKVxuXG4gIGNvbnN0IHNvcnRBZ2VudHNMaXN0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEFnZW50cyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSBzb3J0QWdlbnRzKHByZXYuZGF0YSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGRhdGE6IHNvcnRlZERhdGEsXG4gICAgICB9XG4gICAgfSlcbiAgfSwgW10pXG5cbiAgY29uc3Qgc2VsZWN0Rmlyc3RBZ2VudCA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudElkPzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoYWdlbnRzLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kSW5kZXgoYWdlbnREYXRhID0+IGFnZW50RGF0YS5pZCA9PT0gYWdlbnRJZClcbiAgICAgICAgbGFzdFNlbGVjdGVkQWdlbnRSZWYuY3VycmVudCA9IGFnZW50cy5kYXRhW2ZpcnN0QWdlbnQgPT09IDAgPyAxIDogMF1cbiAgICAgICAgc2VsZWN0QWdlbnQoYWdlbnRzLmRhdGFbZmlyc3RBZ2VudCA9PT0gMCA/IDEgOiAwXSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudHMuZGF0YSwgc2VsZWN0QWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVHZXRBZ2VudHMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoYWdlbnRUb1NlbGVjdD86IEFnZW50KSA9PiB7XG4gICAgICBpZiAoaXNSZWZyZXNoaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RLZXkgPSBhZ2VudFRvU2VsZWN0Py5pZD8udG9TdHJpbmcoKSB8fCAnZGVmYXVsdCdcbiAgICAgIGlmIChsYXN0UmVxdWVzdFJlZi5jdXJyZW50ID09PSByZXF1ZXN0S2V5ICYmICFsb2FkaW5nKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpc1JlZnJlc2hpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGxhc3RSZXF1ZXN0UmVmLmN1cnJlbnQgPSByZXF1ZXN0S2V5XG4gICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICBzZXRFcnJvcihudWxsKVxuXG4gICAgICBjb25zdCBpc011bHRpQWdlbnRzID0gISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGFnZW50UGFyc2VkOiBBZ2VudFtdID0gW11cbiAgICAgICAgbGV0IGhhc01vcmUgPSBmYWxzZVxuICAgICAgICBsZXQgbmV4dE9mZnNldDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgICAgICAvLyBTaSB0aWVuZSBmZWF0dXJlIGFjY2VzcyBtdWx0aSBhZ2VudHMsIGhhY2VyIGRvcyBxdWVyaWVzIChNYWlhICsgY3VzdG9tKSBlbiBjdWFscXVpZXIgc2VjY2nDs25cbiAgICAgICAgaWYgKGlzTXVsdGlBZ2VudHMpIHtcbiAgICAgICAgICAvLyBRdWVyeSBjbG9uZSAoTWFpYSkgeSBjdXN0b20gc29uIGluZGVwZW5kaWVudGVzIOKGkiBzZSBkaXNwYXJhbiBlbiBwYXJhbGVsby5cbiAgICAgICAgICBsZXQgY2xvbmVBZ2VudHM6IEFnZW50W10gPSBbXVxuICAgICAgICAgIGxldCBjdXN0b21BZ2VudHM6IEFnZW50W10gPSBbXVxuICAgICAgICAgIGxldCBjdXN0b21IYXNNb3JlID0gZmFsc2VcbiAgICAgICAgICBsZXQgY3VzdG9tTmV4dE9mZnNldDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgICAgICAgIGNvbnN0IGlzNDAzID0gKGVycjogYW55KTogYm9vbGVhbiA9PlxuICAgICAgICAgICAgZXJyPy5yZXNwb25zZT8uc3RhdHVzID09PSA0MDMgfHxcbiAgICAgICAgICAgIGVycj8uc3RhdHVzID09PSA0MDMgfHxcbiAgICAgICAgICAgIGVycj8ubWVzc2FnZT8uaW5jbHVkZXMoXCJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHZpZXcgYWdlbnRzXCIpIHx8XG4gICAgICAgICAgICBlcnI/Lm1lc3NhZ2U/LmluY2x1ZGVzKCdGYWlsZWQgZmV0Y2hpbmcgZGF0YScpIC8vIGZldGNoQ09SIGxhbnphIGVzdG8gcGFyYSA0MDMgc2luICdBY2Nlc3MgZGVuaWVkJ1xuXG4gICAgICAgICAgY29uc3QgbG9hZENsb25lQWdlbnRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjYW5GZXRjaENsb25lQWdlbnRzKSByZXR1cm5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZGVyUGFyYW0gPVxuICAgICAgICAgICAgICAgIHNlY3Rpb24gPT09ICdjbGllbnQnXG4gICAgICAgICAgICAgICAgICA/ICcmb3JkZXI9Y2xpZW50LHByb2plY3QnXG4gICAgICAgICAgICAgICAgICA6IHNlY3Rpb24gPT09ICdwcm9qZWN0JyB8fCBzZWN0aW9uID09PSAnaGVhZGVyJyB8fCBzZWN0aW9uID09PSAndGFzaydcbiAgICAgICAgICAgICAgICAgICAgPyAnJm9yZGVyPXByb2plY3QsY2xpZW50J1xuICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IG1haWFSZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPWNsb25lJmxhbmc9JHttYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpfSR7b3JkZXJQYXJhbX1gLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIGNvbnN0IG1haWFEYXRhID0gYXdhaXQgbWFpYVJlc3BvbnNlLmpzb24oKVxuICAgICAgICAgICAgICBjbG9uZUFnZW50cyA9IG1haWFEYXRhLmRhdGE/LmZpbHRlcigoYWc6IEFnZW50KSA9PiBhZy50eXBlID09PSAnY2xvbmUnKSB8fCBbXVxuICAgICAgICAgICAgfSBjYXRjaCAobWFpYUVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgLy8gU2kgZXMgNDAzLCBjb250aW51YXIgc2luIGxvcyBjbG9uZUFnZW50czsgc2kgZXMgb3RybyBlcnJvciwgcHJvcGFnYXJsb1xuICAgICAgICAgICAgICBpZiAoIWlzNDAzKG1haWFFcnJvcikpIHRocm93IG1haWFFcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGxvYWRDdXN0b21BZ2VudHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBjdXN0b21SZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgICAgICAgcGF0aDogJ2FnZW50cz9hZ2VudF90eXBlPWN1c3RvbSZsaW1pdD03Jm9mZnNldD0wJyxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBjb25zdCBjdXN0b21EYXRhID0gYXdhaXQgY3VzdG9tUmVzcG9uc2UuanNvbigpXG4gICAgICAgICAgICAgIGN1c3RvbUFnZW50cyA9IGN1c3RvbURhdGEuZGF0YSB8fCBbXVxuICAgICAgICAgICAgICBjdXN0b21IYXNNb3JlID0gY3VzdG9tRGF0YS5oYXNfbW9yZSB8fCBmYWxzZVxuICAgICAgICAgICAgICBjdXN0b21OZXh0T2Zmc2V0ID0gY3VzdG9tRGF0YS5uZXh0X29mZnNldCB8fCBudWxsXG4gICAgICAgICAgICB9IGNhdGNoIChjdXN0b21FcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgIC8vIFNpIGVzIDQwMywgY29udGludWFyIHNpbiBsb3MgY3VzdG9tQWdlbnRzIChxdWVkYSBjb21vIGFycmF5IHZhY8Otbyk7IHNpIG5vLCBwcm9wYWdhcmxvXG4gICAgICAgICAgICAgIGlmICghaXM0MDMoY3VzdG9tRXJyb3IpKSB0aHJvdyBjdXN0b21FcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtsb2FkQ2xvbmVBZ2VudHMoKSwgbG9hZEN1c3RvbUFnZW50cygpXSlcblxuICAgICAgICAgIC8vIENvbWJpbmFyOiBhZ2VudGVzIGNsb25lIHByaW1lcm8sIGx1ZWdvIGxvcyBjdXN0b20gKHNpIGV4aXN0ZW4pXG4gICAgICAgICAgLy8gU2kgZWwgdXN1YXJpbyB0aWVuZSB1biByb2wgZGVzaGFiaWxpdGFkbywgbm8gaW5jbHVpciBjbG9uZUFnZW50c1xuICAgICAgICAgIGlmICghY2FuRmV0Y2hDbG9uZUFnZW50cykge1xuICAgICAgICAgICAgLy8gUm9sIHNpbiBhY2Nlc28gYSBjbG9uZXMgKHAuIGVqLiBjb2xhYm9yYWRvciBmdWVyYSBkZWwgcGlsb3RvKTogc29sbyBjdXN0b21BZ2VudHNcbiAgICAgICAgICAgIC8vIFNpIGN1c3RvbUFnZW50cyBlc3TDoSB2YWPDrW8gKHBvciA0MDMpLCBhZ2VudFBhcnNlZCBzZXLDoSBbXVxuICAgICAgICAgICAgYWdlbnRQYXJzZWQgPSBjdXN0b21BZ2VudHNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUm9sIGNvbiBhY2Nlc28gYSBjbG9uZXM6IGNsb25lQWdlbnRzICsgY3VzdG9tQWdlbnRzXG4gICAgICAgICAgICAvLyBTaSBjdXN0b21BZ2VudHMgZXN0w6EgdmFjw61vIChwb3IgNDAzKSBwZXJvIGhheSBjbG9uZUFnZW50cywgYWdlbnRQYXJzZWQgdGVuZHLDoSBsb3MgY2xvbmVzXG4gICAgICAgICAgICAvLyBTaSBubyBoYXkgY2xvbmVBZ2VudHMgbmkgY3VzdG9tQWdlbnRzLCBhZ2VudFBhcnNlZCBzZXLDoSBbXVxuICAgICAgICAgICAgYWdlbnRQYXJzZWQgPSBjbG9uZUFnZW50cy5sZW5ndGggPyBbLi4uY2xvbmVBZ2VudHMsIC4uLmN1c3RvbUFnZW50c10gOiBjdXN0b21BZ2VudHNcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gT3JkZW5hcjogTWFpYSBwcmltZXJvLCBsdWVnbyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZSwgbHVlZ28gbm8gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGVcbiAgICAgICAgICBhZ2VudFBhcnNlZCA9IHNvcnRBZ2VudHMoYWdlbnRQYXJzZWQpXG4gICAgICAgICAgaGFzTW9yZSA9IGN1c3RvbUhhc01vcmVcbiAgICAgICAgICBuZXh0T2Zmc2V0ID0gY3VzdG9tTmV4dE9mZnNldFxuXG4gICAgICAgICAgc2V0QWdlbnRzKHtcbiAgICAgICAgICAgIGRhdGE6IGFnZW50UGFyc2VkLFxuICAgICAgICAgICAgaGFzX21vcmU6IGhhc01vcmUsXG4gICAgICAgICAgICBuZXh0X29mZnNldDogbmV4dE9mZnNldCxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFnZW50ZXMgZGVzcHXDqXMgZGUgcHJvY2VzYXIgbGFzIHF1ZXJpZXMsIGxpbXBpYXIgZWwgZXJyb3JcbiAgICAgICAgICBpZiAoYWdlbnRQYXJzZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzZXRFcnJvcihudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzaG91bGRSZXF1ZXN0Q2xvbmVBZ2VudHMgPVxuICAgICAgICAgICAgY2FuRmV0Y2hDbG9uZUFnZW50cyAmJlxuICAgICAgICAgICAgKHNlY3Rpb24gPT09ICdwcm9qZWN0JyB8fCBzZWN0aW9uID09PSAnY2xpZW50JyB8fCBzZWN0aW9uID09PSAnaGVhZGVyJyB8fCBzZWN0aW9uID09PSAndGFzaycpXG5cbiAgICAgICAgICBpZiAoIXNob3VsZFJlcXVlc3RDbG9uZUFnZW50cykge1xuICAgICAgICAgICAgc2V0QWdlbnRzKHsgZGF0YTogW10sIGhhc19tb3JlOiBmYWxzZSwgbmV4dF9vZmZzZXQ6IG51bGwgfSlcbiAgICAgICAgICAgIHNldEVycm9yKG51bGwpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gICAgICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ2FnZW50X3R5cGUnLCAnY2xvbmUnKVxuICAgICAgICAgICAgcXVlcnlQYXJhbXMuYXBwZW5kKCdsYW5nJywgbWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKSlcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnb3JkZXInLCBzZWN0aW9uID09PSAnY2xpZW50JyA/ICdjbGllbnQscHJvamVjdCcgOiAncHJvamVjdCxjbGllbnQnKVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdoZWFkZXInKSB7XG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnbGltaXQnLCAnNycpXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnb2Zmc2V0JywgJzAnKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXRoID0gYGFnZW50cz8ke3F1ZXJ5UGFyYW1zLnRvU3RyaW5nKCl9YFxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgICAgICAgYWdlbnRQYXJzZWQgPSBkYXRhLmRhdGEgfHwgW11cbiAgICAgICAgICAgICAgYWdlbnRQYXJzZWQgPSBzb3J0QWdlbnRzKGFnZW50UGFyc2VkKVxuICAgICAgICAgICAgICBoYXNNb3JlID0gZGF0YS5oYXNfbW9yZVxuICAgICAgICAgICAgICBuZXh0T2Zmc2V0ID0gZGF0YS5uZXh0X29mZnNldFxuXG4gICAgICAgICAgICAgIHNldEFnZW50cyh7XG4gICAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgICBkYXRhOiBhZ2VudFBhcnNlZCxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gY2F0Y2ggKHJlc3BvbnNlRXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICAvLyBWZXJpZmljYXIgc2kgZWwgZXJyb3IgZXMgNDAzXG4gICAgICAgICAgICAgIC8vIGZldGNoQ09SIHB1ZWRlIGxhbnphciBkaWZlcmVudGVzIHRpcG9zIGRlIGVycm9yZXM6XG4gICAgICAgICAgICAgIC8vIDEuIEVycm9yIGNvbiBlcnJvckRhdGEuZGV0YWlsIHNpIGluY2x1eWUgJ0FjY2VzcyBkZW5pZWQnXG4gICAgICAgICAgICAgIC8vIDIuIEVycm9yIGdlbsOpcmljbyAnRmFpbGVkIGZldGNoaW5nIGRhdGEnIHNpIGVzIDQwMyBwZXJvIG5vIGluY2x1eWUgJ0FjY2VzcyBkZW5pZWQnXG4gICAgICAgICAgICAgIC8vIDMuIE5lY2VzaXRhbW9zIHZlcmlmaWNhciBlbCBzdGF0dXMgY29kZSBzaSBlc3TDoSBkaXNwb25pYmxlXG4gICAgICAgICAgICAgIGNvbnN0IGlzNDAzRXJyb3IgPVxuICAgICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMyB8fFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3I/LnN0YXR1cyA9PT0gNDAzIHx8XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvcj8ubWVzc2FnZT8uaW5jbHVkZXMoXCJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHZpZXcgYWdlbnRzXCIpIHx8XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvcj8ubWVzc2FnZT8uaW5jbHVkZXMoJ0ZhaWxlZCBmZXRjaGluZyBkYXRhJykgLy8gZmV0Y2hDT1IgbGFuemEgZXN0byBwYXJhIDQwMyBzaW4gJ0FjY2VzcyBkZW5pZWQnXG5cbiAgICAgICAgICAgICAgaWYgKGlzNDAzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBTaSBlcyA0MDMsIGVzdGFibGVjZXIgYWdlbnRlcyB2YWPDrW9zIHkgY29udGludWFyXG4gICAgICAgICAgICAgICAgc2V0QWdlbnRzKHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxuICAgICAgICAgICAgICAgICAgaGFzX21vcmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbmV4dF9vZmZzZXQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNpIGVzIG90cm8gZXJyb3IsIGxhbnphcmxvXG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2VFcnJvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTMOzZ2ljYSBkZSBzZWxlY3QgYWdlbnQgLSBTb2xvIHNlbGVjY2lvbmFyIHNpIGhheSBhZ2VudGVzIGRpc3BvbmlibGVzXG4gICAgICAgIGlmIChhZ2VudFBhcnNlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKGFnZW50VG9TZWxlY3QgJiYgYWdlbnRQYXJzZWQuZmluZCgoYWdlbnRUb1JlcXVlc3Q6IEFnZW50KSA9PiBhZ2VudFRvUmVxdWVzdC5pZCA9PT0gYWdlbnRUb1NlbGVjdC5pZCkpIHtcbiAgICAgICAgICAgIGlmIChsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50Py5pZCAhPT0gYWdlbnRUb1NlbGVjdC5pZCkge1xuICAgICAgICAgICAgICBsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50ID0gYWdlbnRUb1NlbGVjdFxuICAgICAgICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFRvU2VsZWN0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoYWdlbnRQYXJzZWQ/LlswXSAmJiAoIWFnZW50IHx8ICFhZ2VudFBhcnNlZC5maW5kKChhOiBBZ2VudCkgPT4gYS5pZCA9PT0gYWdlbnQuaWQpKSkge1xuICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlQWdlbnRzID1cbiAgICAgICAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyAmJiBjYW5GZXRjaENsb25lQWdlbnRzXG4gICAgICAgICAgICAgICAgPyBhZ2VudFBhcnNlZFxuICAgICAgICAgICAgICAgIDogYWdlbnRQYXJzZWQuZmlsdGVyKChhZ2VudEl0ZW06IEFnZW50KSA9PiBhZ2VudEl0ZW0udHlwZSAhPT0gJ2Nsb25lJylcblxuICAgICAgICAgICAgY29uc3QgW2ZpcnN0QWdlbnRdID0gYXZhaWxhYmxlQWdlbnRzXG4gICAgICAgICAgICBpZiAoZmlyc3RBZ2VudCAmJiBsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50Py5pZCAhPT0gZmlyc3RBZ2VudC5pZCkge1xuICAgICAgICAgICAgICBsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50ID0gZmlyc3RBZ2VudFxuICAgICAgICAgICAgICBzZWxlY3RBZ2VudChmaXJzdEFnZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoYWdlbnRUb1NlbGVjdCAmJiBhZ2VudFBhcnNlZD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBhdmFpbGFibGVBZ2VudHMgPVxuICAgICAgICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTICYmIGNhbkZldGNoQ2xvbmVBZ2VudHNcbiAgICAgICAgICAgICAgICA/IGFnZW50UGFyc2VkXG4gICAgICAgICAgICAgICAgOiBhZ2VudFBhcnNlZC5maWx0ZXIoKGFnZW50SXRlbTogQWdlbnQpID0+IGFnZW50SXRlbS50eXBlICE9PSAnY2xvbmUnKVxuXG4gICAgICAgICAgICBjb25zdCBbZmlyc3RBdmFpbGFibGVBZ2VudF0gPSBhdmFpbGFibGVBZ2VudHNcbiAgICAgICAgICAgIGlmIChmaXJzdEF2YWlsYWJsZUFnZW50ICYmIGxhc3RTZWxlY3RlZEFnZW50UmVmLmN1cnJlbnQ/LmlkICE9PSBmaXJzdEF2YWlsYWJsZUFnZW50LmlkKSB7XG4gICAgICAgICAgICAgIGxhc3RTZWxlY3RlZEFnZW50UmVmLmN1cnJlbnQgPSBmaXJzdEF2YWlsYWJsZUFnZW50XG4gICAgICAgICAgICAgIHNlbGVjdEFnZW50KGZpcnN0QXZhaWxhYmxlQWdlbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzZXRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnKVxuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNSZWZyZXNoaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoIWlzUmVmcmVzaGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBsYXN0UmVxdWVzdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlbGVjdEFnZW50LCBzZWN0aW9uLCBhZ2VudCwgbG9hZGluZywgY2FuRmV0Y2hDbG9uZUFnZW50cywgaTE4bi5sYW5ndWFnZV1cbiAgKVxuXG4gIGNvbnN0IGxvYWRNb3JlQWdlbnRzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlzTXVsdGlBZ2VudHMgPSAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICAgIC8vIENhcmdhciBtw6FzOiBlbiBoZWFkZXIgc2llbXByZTsgZW4gcHJvamVjdCBzb2xvIHNpIGlzTXVsdGlBZ2VudHMgKHBvcnF1ZSBzb2xvIGVudG9uY2VzIGhheSBwYWdpbmFjacOzbiBkZSBjdXN0b20pXG4gICAgY29uc3QgY2FuTG9hZE1vcmUgPSBzZWN0aW9uID09PSAnaGVhZGVyJyB8fCBpc011bHRpQWdlbnRzXG4gICAgaWYgKCFjYW5Mb2FkTW9yZSB8fCAhYWdlbnRzLmhhc19tb3JlIHx8ICFhZ2VudHMubmV4dF9vZmZzZXQgfHwgbG9hZGluZ01vcmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldExvYWRpbmdNb3JlKHRydWUpXG4gICAgc2V0RXJyb3IobnVsbClcblxuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aDogc3RyaW5nXG5cbiAgICAgIC8vIFNpIGVzIG11bHRpQWdlbnRzLCBzb2xvIGNhcmdhciBhZ2VudHMgY3VzdG9tIChNYWlhIHlhIGVzdMOhIGNhcmdhZG8pXG4gICAgICBpZiAoaXNNdWx0aUFnZW50cykge1xuICAgICAgICAvLyBNYW50ZW5lciBjYW50aWRhZCBpbXBhciBkZSBjYXJkczogcHJpbWVyYSBjYXJnYSA3LCBzaWd1aWVudGVzICs2ICg3LCAxMywgMTksIC4uLilcbiAgICAgICAgcGF0aCA9IGBhZ2VudHM/YWdlbnRfdHlwZT1jdXN0b20mbGltaXQ9NiZvZmZzZXQ9JHthZ2VudHMubmV4dF9vZmZzZXR9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2kgbm8gZXMgbXVsdGlBZ2VudHMsIGNhcmdhciBtw6FzIGFnZW50ZXMgY2xvbmUgKE1haWEpIOKAlCBtaXNtbyBvcmRlciBxdWUgcHJvamVjdCBwYXJhIGhlYWRlclxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ2FnZW50X3R5cGUnLCAnY2xvbmUnKVxuICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ2xhbmcnLCBtYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpKVxuICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ29yZGVyJywgJ3Byb2plY3QsY2xpZW50JylcbiAgICAgICAgcXVlcnlQYXJhbXMuYXBwZW5kKCdsaW1pdCcsICc3JylcbiAgICAgICAgcXVlcnlQYXJhbXMuYXBwZW5kKCdvZmZzZXQnLCBhZ2VudHMubmV4dF9vZmZzZXQudG9TdHJpbmcoKSlcbiAgICAgICAgcGF0aCA9IGBhZ2VudHM/JHtxdWVyeVBhcmFtcy50b1N0cmluZygpfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgICAgICBwYXRoLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuXG4gICAgICAvLyBBY3VtdWxhciBhZ2VudGVzLCBleGNsdXllbmRvIGR1cGxpY2Fkb3NcbiAgICAgIHNldEFnZW50cyhwcmV2ID0+IHtcbiAgICAgICAgaWYgKGlzTXVsdGlBZ2VudHMpIHtcbiAgICAgICAgICAvLyBMw7NnaWNhIHBhcmEgbXVsdGlBZ2VudHM6IHNlcGFyYXIgY2xvbmUgeSBjdXN0b21cbiAgICAgICAgICAvLyBNYW50ZW5lciB0b2RvcyBsb3MgYWdlbnRlcyBjbG9uZSBleGlzdGVudGVzIGFsIGluaWNpb1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQ2xvbmVBZ2VudHMgPSBwcmV2LmRhdGEuZmlsdGVyKChhZzogQWdlbnQpID0+IGFnLnR5cGUgPT09ICdjbG9uZScpXG5cbiAgICAgICAgICAvLyBPYnRlbmVyIElEcyBleGlzdGVudGVzIChleGNsdXllbmRvIGNsb25lcylcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQocHJldi5kYXRhLmZpbHRlcigoYWc6IEFnZW50KSA9PiBhZy50eXBlICE9PSAnY2xvbmUnKS5tYXAoKGFnOiBBZ2VudCkgPT4gYWcuaWQpKVxuXG4gICAgICAgICAgLy8gRmlsdHJhciBudWV2b3MgYWdlbnRzIHF1ZSBubyBlc3TDqW4geWEgZW4gbGEgbGlzdGEgKHkgcXVlIG5vIHNlYW4gY2xvbmUpXG4gICAgICAgICAgY29uc3QgbmV3QWdlbnRzID0gZGF0YS5kYXRhLmZpbHRlcigoYWc6IEFnZW50KSA9PiBhZy50eXBlICE9PSAnY2xvbmUnICYmICFleGlzdGluZ0lkcy5oYXMoYWcuaWQpKVxuXG4gICAgICAgICAgLy8gQ29uc3RydWlyIGVsIG51ZXZvIGFycmF5OiBjbG9uZXMgcHJpbWVybywgbHVlZ28gbG9zIGFnZW50cyBleGlzdGVudGVzIHF1ZSBubyBzZWFuIGNsb25lLCBsdWVnbyBsb3MgbnVldm9zXG4gICAgICAgICAgY29uc3QgbmV3RGF0YSA9IGV4aXN0aW5nQ2xvbmVBZ2VudHMubGVuZ3RoXG4gICAgICAgICAgICA/IFsuLi5leGlzdGluZ0Nsb25lQWdlbnRzLCAuLi5wcmV2LmRhdGEuZmlsdGVyKChhZzogQWdlbnQpID0+IGFnLnR5cGUgIT09ICdjbG9uZScpLCAuLi5uZXdBZ2VudHNdXG4gICAgICAgICAgICA6IFsuLi5wcmV2LmRhdGEuZmlsdGVyKChhZzogQWdlbnQpID0+IGFnLnR5cGUgIT09ICdjbG9uZScpLCAuLi5uZXdBZ2VudHNdXG5cbiAgICAgICAgICAvLyBPcmRlbmFyOiBNYWlhIHByaW1lcm8sIGx1ZWdvIGZhdm9yaXRvcyBhbGZhYsOpdGljYW1lbnRlLCBsdWVnbyBubyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZVxuICAgICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSBzb3J0QWdlbnRzKG5ld0RhdGEpXG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogc29ydGVkRGF0YSxcbiAgICAgICAgICAgIGhhc19tb3JlOiBkYXRhLmhhc19tb3JlLFxuICAgICAgICAgICAgbmV4dF9vZmZzZXQ6IGRhdGEubmV4dF9vZmZzZXQsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEzDs2dpY2EgcGFyYSAhaXNNdWx0aUFnZW50czogdG9kb3MgbG9zIGFnZW50ZXMgc29uIGNsb25lLCBzaW1wbGVtZW50ZSBhZ3JlZ2FyIGV2aXRhbmRvIGR1cGxpY2Fkb3NcbiAgICAgICAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KHByZXYuZGF0YS5tYXAoKGFnOiBBZ2VudCkgPT4gYWcuaWQpKVxuICAgICAgICBjb25zdCBuZXdBZ2VudHMgPSAoZGF0YS5kYXRhIHx8IFtdKS5maWx0ZXIoKGFnOiBBZ2VudCkgPT4gIWV4aXN0aW5nSWRzLmhhcyhhZy5pZCkpXG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBbLi4ucHJldi5kYXRhLCAuLi5uZXdBZ2VudHNdXG5cbiAgICAgICAgLy8gT3JkZW5hcjogTWFpYSBwcmltZXJvLCBsdWVnbyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZSwgbHVlZ28gbm8gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGVcbiAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHNvcnRBZ2VudHMobmV3RGF0YSlcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHNvcnRlZERhdGEsXG4gICAgICAgICAgaGFzX21vcmU6IGRhdGEuaGFzX21vcmUsXG4gICAgICAgICAgbmV4dF9vZmZzZXQ6IGRhdGEubmV4dF9vZmZzZXQsXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIHNldExvYWRpbmdNb3JlKGZhbHNlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdzbmFja2Jhci5sb2FkTW9yZUFnZW50cy5lcnJvcicpKVxuICAgICAgc2V0TG9hZGluZ01vcmUoZmFsc2UpXG4gICAgfVxuICB9LCBbc2VjdGlvbiwgYWdlbnRzLmhhc19tb3JlLCBhZ2VudHMubmV4dF9vZmZzZXQsIGxvYWRpbmdNb3JlLCBpMThuLmxhbmd1YWdlXSlcblxuICByZXR1cm4ge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsV0FB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
570
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlVHJhbnNsYXRpb24iLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJmZXRjaE1haWEiLCJ1c2VVc2VyIiwiQ09SVXNlclJvbGUiLCJtYXBDT1JMYW5nIiwiaXNNYWlhQWdlbnQiLCJhZ2VudCIsInR5cGUiLCJzb3J0QWdlbnRzIiwiYWdlbnRzIiwibWFpYUFnZW50cyIsImZpbHRlciIsIm90aGVyQWdlbnRzIiwiYWciLCJmYXZvcml0ZXMiLCJpc19mYXZvcml0ZSIsInNvcnQiLCJhIiwiYiIsIm5hbWUiLCJsb2NhbGVDb21wYXJlIiwibm9uRmF2b3JpdGVzIiwibGVuZ3RoIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwidXNlR2V0QWdlbnRzIiwiX3JlZiIsInNlbGVjdEFnZW50Iiwic2VjdGlvbiIsImhhbmRsZUdvSG9tZSIsInVzZXIiLCJfdXNlU3RhdGUiLCJkYXRhIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2V0QWdlbnRzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwibG9hZGluZ01vcmUiLCJzZXRMb2FkaW5nTW9yZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiZXJyb3IiLCJzZXRFcnJvciIsIl91c2VTbmFja0Jhck1hbmFnZXIiLCJoYW5kbGVTbmFja2JhckVycm9yIiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsImkxOG4iLCJsYXN0U2VsZWN0ZWRBZ2VudFJlZiIsImlzUmVmcmVzaGluZ1JlZiIsImxhc3RSZXF1ZXN0UmVmIiwidXNlclJvbGVzRGlzYWJsZWQiLCJDT0xMQUJPUkFUT1IiLCJGUkVFTEFOQ0VSIiwiQ0xJRU5UIiwiYWRkQWdlbnQiLCJuZXdBZ2VudCIsIm9wdGlvbnMiLCJwcmV2IiwiYWdlbnRFeGlzdHMiLCJzb21lIiwiZXhpc3RpbmdBZ2VudCIsImlkIiwibmV3RGF0YSIsInNvcnRlZERhdGEiLCJfb2JqZWN0U3ByZWFkIiwibmF2aWdhdGVIb21lIiwicmVtb3ZlQWdlbnQiLCJhZ2VudElkIiwidG9TdHJpbmciLCJ1cGRhdGVBZ2VudCIsInVwZGF0ZWRBZ2VudCIsInVwZGF0ZWREYXRhIiwibWFwIiwidXBkYXRlQWdlbnRGYXZvcml0ZSIsInNob3VsZFNvcnQiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJfcmVmMiIsIm1lc3NhZ2UiLCJhZ2VudEZpZWxkcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsIm1lcmdlZEFnZW50IiwiZmluYWxEYXRhIiwiZmluZCIsIl9yZWYzIiwiX2V4Y2x1ZGVkMiIsIl9yZWY0IiwiX2V4Y2x1ZGVkMyIsInNvcnRBZ2VudHNMaXN0Iiwic2VsZWN0Rmlyc3RBZ2VudCIsImZpcnN0QWdlbnQiLCJmaW5kSW5kZXgiLCJhZ2VudERhdGEiLCJjdXJyZW50IiwiaGFuZGxlR2V0QWdlbnRzIiwiX3JlZjUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZTMiLCJhZ2VudFRvU2VsZWN0IiwiX2FnZW50VG9TZWxlY3QkaWQiLCJyZXF1ZXN0S2V5IiwiaXNNdWx0aUFnZW50cyIsImFnZW50UGFyc2VkIiwiaGFzTW9yZSIsIm5leHRPZmZzZXQiLCJjdXN0b21BZ2VudHMiLCJjdXN0b21IYXNNb3JlIiwiY3VzdG9tTmV4dE9mZnNldCIsImlzNDAzIiwiY2FuRmV0Y2hDbG9uZUFnZW50cyIsImxvYWRDbG9uZUFnZW50cyIsImxvYWRDdXN0b21BZ2VudHMiLCJxdWVyeVBhcmFtcyIsInF1ZXJ5U3RyaW5nIiwicGF0aCIsInJlc3BvbnNlIiwiX3Jlc3BvbnNlRXJyb3IkcmVzcG9uIiwiX3Jlc3BvbnNlRXJyb3IkbWVzc2FnIiwiX3Jlc3BvbnNlRXJyb3IkbWVzc2FnMiIsImlzNDAzRXJyb3IiLCJfYWdlbnRQYXJzZWQiLCJfYWdlbnRQYXJzZWQyIiwiX2xhc3RTZWxlY3RlZEFnZW50UmVmIiwiX2xhc3RTZWxlY3RlZEFnZW50UmVmMiIsImF2YWlsYWJsZUFnZW50cyIsIl9hdmFpbGFibGVBZ2VudHMiLCJfbGFzdFNlbGVjdGVkQWdlbnRSZWYzIiwiX2F2YWlsYWJsZUFnZW50czIiLCJfYXZhaWxhYmxlQWdlbnRzMyIsImZpcnN0QXZhaWxhYmxlQWdlbnQiLCJfdDMiLCJfdDQiLCJ3cmFwIiwiX2NvbnRleHQzIiwibmV4dCIsImFicnVwdCIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJlcnIiLCJfZXJyJHJlc3BvbnNlIiwiX2VyciRtZXNzYWdlIiwiX2VyciRtZXNzYWdlMiIsInN0YXR1cyIsImluY2x1ZGVzIiwicm9sZV9pZCIsIl9yZWY2IiwiX2NhbGxlZSIsIl9tYWlhRGF0YSRkYXRhIiwibWFpYVJlc3BvbnNlIiwibWFpYURhdGEiLCJfdCIsIl9jb250ZXh0IiwibGFuZ3VhZ2UiLCJtZXRob2QiLCJzZW50IiwianNvbiIsInN0b3AiLCJhcHBseSIsIl9yZWY3IiwiX2NhbGxlZTIiLCJjdXN0b21SZXNwb25zZSIsImN1c3RvbURhdGEiLCJfdDIiLCJfY29udGV4dDIiLCJoYXNfbW9yZSIsIm5leHRfb2Zmc2V0IiwiUHJvbWlzZSIsImFsbCIsIlVSTFNlYXJjaFBhcmFtcyIsImFwcGVuZCIsImFnZW50VG9SZXF1ZXN0IiwiYWdlbnRJdGVtIiwiRXJyb3IiLCJzZXRUaW1lb3V0IiwiZmluaXNoIiwiX3giLCJsb2FkTW9yZUFnZW50cyIsIl9jYWxsZWU0IiwiY2FuTG9hZE1vcmUiLCJfdDUiLCJfY29udGV4dDQiLCJleGlzdGluZ01haWFBZ2VudHMiLCJleGlzdGluZ0lkcyIsIlNldCIsIm5ld0FnZW50cyIsImhhcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9tYWlhL0FnZW50cy9nZXRBZ2VudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IHVzZVNuYWNrQmFyTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi9jbGllbnQnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlclJvbGUgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgU2VjdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBtYXBDT1JMYW5nIH0gZnJvbSAnLi4vLi4vLi4vbGFuZy91dGlscydcblxuY29uc3QgaXNNYWlhQWdlbnQgPSAoYWdlbnQ6IEFnZW50KSA9PiBhZ2VudC50eXBlID09PSAnb3JjaGVzdHJhdG9yJ1xuXG4vKipcbiAqIE9yZGVuYSBsb3MgYWdlbnRlczogTUFJQSBwcmltZXJvIChzaSBleGlzdGUpLCBsdWVnbyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZSwgbHVlZ28gbm8gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGVcbiAqL1xuY29uc3Qgc29ydEFnZW50cyA9IChhZ2VudHM6IEFnZW50W10pOiBBZ2VudFtdID0+IHtcbiAgY29uc3QgbWFpYUFnZW50cyA9IGFnZW50cy5maWx0ZXIoaXNNYWlhQWdlbnQpXG4gIGNvbnN0IG90aGVyQWdlbnRzID0gYWdlbnRzLmZpbHRlcihhZyA9PiAhaXNNYWlhQWdlbnQoYWcpKVxuXG4gIC8vIFNlcGFyYXIgZmF2b3JpdG9zIHkgbm8gZmF2b3JpdG9zXG4gIGNvbnN0IGZhdm9yaXRlcyA9IG90aGVyQWdlbnRzLmZpbHRlcihhZyA9PiBhZy5pc19mYXZvcml0ZSkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSlcbiAgY29uc3Qgbm9uRmF2b3JpdGVzID0gb3RoZXJBZ2VudHMuZmlsdGVyKGFnID0+ICFhZy5pc19mYXZvcml0ZSkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSlcblxuICByZXR1cm4gbWFpYUFnZW50cy5sZW5ndGggPyBbLi4ubWFpYUFnZW50cywgLi4uZmF2b3JpdGVzLCAuLi5ub25GYXZvcml0ZXNdIDogWy4uLmZhdm9yaXRlcywgLi4ubm9uRmF2b3JpdGVzXVxufVxuXG50eXBlIFVzZUdldEFnZW50c1Byb3BzID0ge1xuICBzZWxlY3RBZ2VudDogKGFnZW50OiBBZ2VudCkgPT4gdm9pZFxuICBzZWN0aW9uOiBTZWN0aW9uXG4gIGFnZW50OiBBZ2VudCB8IG51bGxcbiAgaGFuZGxlR29Ib21lOiAoKSA9PiB2b2lkXG59XG5cbmV4cG9ydCB0eXBlIEFkZEFnZW50T3B0aW9ucyA9IHtcbiAgLyoqIFBvciBkZWZlY3RvIGB0cnVlYCAoY29tcG9ydGFtaWVudG8gQUJNKS4gUGFzYXIgYGZhbHNlYCBhbCBpbnNlcnRhciBhZ2VudGUgY3JlYWRvIHBvciBjaGF0IHNpbiBjYW1iaWFyIGRlIHZpc3RhLiAqL1xuICBuYXZpZ2F0ZUhvbWU/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCB1c2VHZXRBZ2VudHMgPSAoeyBzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGhhbmRsZUdvSG9tZSB9OiBVc2VHZXRBZ2VudHNQcm9wcykgPT4ge1xuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IFthZ2VudHMsIHNldEFnZW50c10gPSB1c2VTdGF0ZTx7IGRhdGE6IEFnZW50W107IGhhc19tb3JlPzogYm9vbGVhbjsgbmV4dF9vZmZzZXQ/OiBudW1iZXIgfCBudWxsIH0+KHsgZGF0YTogW10gfSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtsb2FkaW5nTW9yZSwgc2V0TG9hZGluZ01vcmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCB7IHQsIGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKCdjaGF0X2FpX3NlY3Rpb24nKVxuICBjb25zdCBsYXN0U2VsZWN0ZWRBZ2VudFJlZiA9IHVzZVJlZjxBZ2VudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzUmVmcmVzaGluZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbGFzdFJlcXVlc3RSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICBjb25zdCB1c2VyUm9sZXNEaXNhYmxlZCA9IFtDT1JVc2VyUm9sZS5DT0xMQUJPUkFUT1IsIENPUlVzZXJSb2xlLkZSRUVMQU5DRVIsIENPUlVzZXJSb2xlLkNMSUVOVF1cblxuICBjb25zdCBhZGRBZ2VudCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXdBZ2VudDogQWdlbnQsIG9wdGlvbnM/OiBBZGRBZ2VudE9wdGlvbnMpID0+IHtcbiAgICAgIHNldEFnZW50cyhwcmV2ID0+IHtcbiAgICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGFnZW50ZSB5YSBleGlzdGUgcGFyYSBldml0YXIgZHVwbGljYWRvc1xuICAgICAgICBjb25zdCBhZ2VudEV4aXN0cyA9IHByZXYuZGF0YS5zb21lKGV4aXN0aW5nQWdlbnQgPT4gZXhpc3RpbmdBZ2VudC5pZCA9PT0gbmV3QWdlbnQuaWQpXG4gICAgICAgIGlmIChhZ2VudEV4aXN0cykge1xuICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3RGF0YSA9IFsuLi5wcmV2LmRhdGEsIG5ld0FnZW50XVxuICAgICAgICBjb25zdCBzb3J0ZWREYXRhID0gc29ydEFnZW50cyhuZXdEYXRhKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgZGF0YTogc29ydGVkRGF0YSxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChvcHRpb25zPy5uYXZpZ2F0ZUhvbWUgIT09IGZhbHNlKSB7XG4gICAgICAgIGhhbmRsZUdvSG9tZSgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlR29Ib21lXVxuICApXG5cbiAgY29uc3QgcmVtb3ZlQWdlbnQgPSB1c2VDYWxsYmFjaygoYWdlbnRJZDogbnVtYmVyIHwgc3RyaW5nKSA9PiB7XG4gICAgc2V0QWdlbnRzKHByZXYgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBkYXRhOiBwcmV2LmRhdGEuZmlsdGVyKGEgPT4gYS5pZCAhPT0gYWdlbnRJZC50b1N0cmluZygpKSxcbiAgICB9KSlcbiAgfSwgW10pXG5cbiAgY29uc3QgdXBkYXRlQWdlbnQgPSB1c2VDYWxsYmFjaygodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4ge1xuICAgIHNldEFnZW50cyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gcHJldi5kYXRhLm1hcChleGlzdGluZ0FnZW50ID0+XG4gICAgICAgIGV4aXN0aW5nQWdlbnQuaWQgPT09IHVwZGF0ZWRBZ2VudC5pZCA/IHVwZGF0ZWRBZ2VudCA6IGV4aXN0aW5nQWdlbnRcbiAgICAgIClcbiAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSBzb3J0QWdlbnRzKHVwZGF0ZWREYXRhKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgZGF0YTogc29ydGVkRGF0YSxcbiAgICAgIH1cbiAgICB9KVxuICB9LCBbXSlcblxuICBjb25zdCB1cGRhdGVBZ2VudEZhdm9yaXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKHVwZGF0ZWRBZ2VudDogQWdlbnQsIHNob3VsZFNvcnQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgICAgc2V0QWdlbnRzKHByZXYgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IHByZXYuZGF0YS5tYXAoZXhpc3RpbmdBZ2VudCA9PiB7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nQWdlbnQuaWQgPT09IHVwZGF0ZWRBZ2VudC5pZCkge1xuICAgICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCAuLi5hZ2VudEZpZWxkcyB9ID0gdXBkYXRlZEFnZW50IGFzIGFueVxuICAgICAgICAgICAgY29uc3QgbWVyZ2VkQWdlbnQgPSB7IC4uLmV4aXN0aW5nQWdlbnQsIC4uLmFnZW50RmllbGRzIH1cbiAgICAgICAgICAgIHJldHVybiBtZXJnZWRBZ2VudFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdBZ2VudFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNvbG8gb3JkZW5hciBzaSBzaG91bGRTb3J0IGVzIHRydWVcbiAgICAgICAgY29uc3QgZmluYWxEYXRhID0gc2hvdWxkU29ydCA/IHNvcnRBZ2VudHModXBkYXRlZERhdGEpIDogdXBkYXRlZERhdGFcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgZGF0YTogZmluYWxEYXRhLFxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBBY3R1YWxpemFyIGVsIGFnZW50ZSBzZWxlY2Npb25hZG8gc2kgZXMgZWwgcXVlIHNlIGVzdMOhIGFjdHVhbGl6YW5kb1xuICAgICAgaWYgKGFnZW50Py5pZCA9PT0gdXBkYXRlZEFnZW50LmlkKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKGEgPT4gYS5pZCA9PT0gdXBkYXRlZEFnZW50LmlkKVxuICAgICAgICBpZiAoZXhpc3RpbmdBZ2VudCkge1xuICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZSwgLi4uYWdlbnRGaWVsZHMgfSA9IHVwZGF0ZWRBZ2VudCBhcyBhbnlcbiAgICAgICAgICBjb25zdCBtZXJnZWRBZ2VudCA9IHsgLi4uZXhpc3RpbmdBZ2VudCwgLi4uYWdlbnRGaWVsZHMgfVxuICAgICAgICAgIHNlbGVjdEFnZW50KG1lcmdlZEFnZW50KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZSwgLi4uYWdlbnRGaWVsZHMgfSA9IHVwZGF0ZWRBZ2VudCBhcyBhbnlcbiAgICAgICAgICBzZWxlY3RBZ2VudChhZ2VudEZpZWxkcyBhcyBBZ2VudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50LCBzZWxlY3RBZ2VudCwgYWdlbnRzLmRhdGFdXG4gIClcblxuICBjb25zdCBzb3J0QWdlbnRzTGlzdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRBZ2VudHMocHJldiA9PiB7XG4gICAgICBjb25zdCBzb3J0ZWREYXRhID0gc29ydEFnZW50cyhwcmV2LmRhdGEpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBkYXRhOiBzb3J0ZWREYXRhLFxuICAgICAgfVxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHNlbGVjdEZpcnN0QWdlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoYWdlbnRJZD86IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGFnZW50cy5kYXRhLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaXJzdEFnZW50ID0gYWdlbnRzLmRhdGEuZmluZEluZGV4KGFnZW50RGF0YSA9PiBhZ2VudERhdGEuaWQgPT09IGFnZW50SWQpXG4gICAgICAgIGxhc3RTZWxlY3RlZEFnZW50UmVmLmN1cnJlbnQgPSBhZ2VudHMuZGF0YVtmaXJzdEFnZW50ID09PSAwID8gMSA6IDBdXG4gICAgICAgIHNlbGVjdEFnZW50KGFnZW50cy5kYXRhW2ZpcnN0QWdlbnQgPT09IDAgPyAxIDogMF0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWdlbnRzLmRhdGEsIHNlbGVjdEFnZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlR2V0QWdlbnRzID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGFnZW50VG9TZWxlY3Q/OiBBZ2VudCkgPT4ge1xuICAgICAgaWYgKGlzUmVmcmVzaGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1ZXN0S2V5ID0gYWdlbnRUb1NlbGVjdD8uaWQ/LnRvU3RyaW5nKCkgfHwgJ2RlZmF1bHQnXG4gICAgICBpZiAobGFzdFJlcXVlc3RSZWYuY3VycmVudCA9PT0gcmVxdWVzdEtleSAmJiAhbG9hZGluZykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaXNSZWZyZXNoaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBsYXN0UmVxdWVzdFJlZi5jdXJyZW50ID0gcmVxdWVzdEtleVxuICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgc2V0RXJyb3IobnVsbClcblxuICAgICAgY29uc3QgaXNNdWx0aUFnZW50cyA9ICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyAmJiAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBhZ2VudFBhcnNlZDogQWdlbnRbXSA9IFtdXG4gICAgICAgIGxldCBoYXNNb3JlID0gZmFsc2VcbiAgICAgICAgbGV0IG5leHRPZmZzZXQ6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgICAgICAgLy8gU2kgdGllbmUgZmVhdHVyZSBhY2Nlc3MgbXVsdGkgYWdlbnRzLCBoYWNlciBkb3MgcXVlcmllcyAoTWFpYSArIGN1c3RvbSkgZW4gY3VhbHF1aWVyIHNlY2Npw7NuXG4gICAgICAgIGlmIChpc011bHRpQWdlbnRzKSB7XG4gICAgICAgICAgLy8gUXVlcnkgY2xvbmUgKE1haWEpIHkgY3VzdG9tIHNvbiBpbmRlcGVuZGllbnRlcyDihpIgc2UgZGlzcGFyYW4gZW4gcGFyYWxlbG8uXG4gICAgICAgICAgbGV0IGN1c3RvbUFnZW50czogQWdlbnRbXSA9IFtdXG4gICAgICAgICAgbGV0IGN1c3RvbUhhc01vcmUgPSBmYWxzZVxuICAgICAgICAgIGxldCBjdXN0b21OZXh0T2Zmc2V0OiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gICAgICAgICAgY29uc3QgaXM0MDMgPSAoZXJyOiBhbnkpOiBib29sZWFuID0+XG4gICAgICAgICAgICBlcnI/LnJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMyB8fFxuICAgICAgICAgICAgZXJyPy5zdGF0dXMgPT09IDQwMyB8fFxuICAgICAgICAgICAgZXJyPy5tZXNzYWdlPy5pbmNsdWRlcyhcIllvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gdmlldyBhZ2VudHNcIikgfHxcbiAgICAgICAgICAgIGVycj8ubWVzc2FnZT8uaW5jbHVkZXMoJ0ZhaWxlZCBmZXRjaGluZyBkYXRhJykgLy8gZmV0Y2hDT1IgbGFuemEgZXN0byBwYXJhIDQwMyBzaW4gJ0FjY2VzcyBkZW5pZWQnXG5cbiAgICAgICAgICBjb25zdCBjYW5GZXRjaENsb25lQWdlbnRzID0gIXVzZXJSb2xlc0Rpc2FibGVkLmluY2x1ZGVzKHVzZXI/LnJvbGVfaWQgYXMgQ09SVXNlclJvbGUpXG4gICAgICAgICAgbGV0IG1haWFBZ2VudHM6IEFnZW50W10gPSBbXVxuXG4gICAgICAgICAgY29uc3QgbG9hZENsb25lQWdlbnRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjYW5GZXRjaENsb25lQWdlbnRzKSByZXR1cm5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1haWFSZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPW9yY2hlc3RyYXRvciZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIGNvbnN0IG1haWFEYXRhID0gYXdhaXQgbWFpYVJlc3BvbnNlLmpzb24oKVxuICAgICAgICAgICAgICBtYWlhQWdlbnRzID0gbWFpYURhdGEuZGF0YT8uZmlsdGVyKGlzTWFpYUFnZW50KSB8fCBbXVxuICAgICAgICAgICAgfSBjYXRjaCAobWFpYUVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgLy8gU2kgZXMgNDAzLCBjb250aW51YXIgc2luIGxvcyBjbG9uZUFnZW50czsgc2kgZXMgb3RybyBlcnJvciwgcHJvcGFnYXJsb1xuICAgICAgICAgICAgICBpZiAoIWlzNDAzKG1haWFFcnJvcikpIHRocm93IG1haWFFcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGxvYWRDdXN0b21BZ2VudHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBjdXN0b21SZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgICAgICAgcGF0aDogJ2FnZW50cz9hZ2VudF90eXBlPWN1c3RvbSZsaW1pdD03Jm9mZnNldD0wJyxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBjb25zdCBjdXN0b21EYXRhID0gYXdhaXQgY3VzdG9tUmVzcG9uc2UuanNvbigpXG4gICAgICAgICAgICAgIGN1c3RvbUFnZW50cyA9IGN1c3RvbURhdGEuZGF0YSB8fCBbXVxuICAgICAgICAgICAgICBjdXN0b21IYXNNb3JlID0gY3VzdG9tRGF0YS5oYXNfbW9yZSB8fCBmYWxzZVxuICAgICAgICAgICAgICBjdXN0b21OZXh0T2Zmc2V0ID0gY3VzdG9tRGF0YS5uZXh0X29mZnNldCB8fCBudWxsXG4gICAgICAgICAgICB9IGNhdGNoIChjdXN0b21FcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgIC8vIFNpIGVzIDQwMywgY29udGludWFyIHNpbiBsb3MgY3VzdG9tQWdlbnRzIChxdWVkYSBjb21vIGFycmF5IHZhY8Otbyk7IHNpIG5vLCBwcm9wYWdhcmxvXG4gICAgICAgICAgICAgIGlmICghaXM0MDMoY3VzdG9tRXJyb3IpKSB0aHJvdyBjdXN0b21FcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtsb2FkQ2xvbmVBZ2VudHMoKSwgbG9hZEN1c3RvbUFnZW50cygpXSlcblxuICAgICAgICAgIC8vIENvbWJpbmFyOiBhZ2VudGVzIGNsb25lIHByaW1lcm8sIGx1ZWdvIGxvcyBjdXN0b20gKHNpIGV4aXN0ZW4pXG4gICAgICAgICAgLy8gU2kgZWwgdXN1YXJpbyB0aWVuZSB1biByb2wgZGVzaGFiaWxpdGFkbywgbm8gaW5jbHVpciBjbG9uZUFnZW50c1xuICAgICAgICAgIGlmICghY2FuRmV0Y2hDbG9uZUFnZW50cykge1xuICAgICAgICAgICAgLy8gUm9sIHNpbiBhY2Nlc28gYSBjbG9uZXMgKHAuIGVqLiBjb2xhYm9yYWRvciBmdWVyYSBkZWwgcGlsb3RvKTogc29sbyBjdXN0b21BZ2VudHNcbiAgICAgICAgICAgIC8vIFNpIGN1c3RvbUFnZW50cyBlc3TDoSB2YWPDrW8gKHBvciA0MDMpLCBhZ2VudFBhcnNlZCBzZXLDoSBbXVxuICAgICAgICAgICAgYWdlbnRQYXJzZWQgPSBjdXN0b21BZ2VudHNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWdlbnRQYXJzZWQgPSBtYWlhQWdlbnRzLmxlbmd0aCA/IFsuLi5tYWlhQWdlbnRzLCAuLi5jdXN0b21BZ2VudHNdIDogY3VzdG9tQWdlbnRzXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIE9yZGVuYXI6IE1haWEgcHJpbWVybywgbHVlZ28gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGUsIGx1ZWdvIG5vIGZhdm9yaXRvcyBhbGZhYsOpdGljYW1lbnRlXG4gICAgICAgICAgYWdlbnRQYXJzZWQgPSBzb3J0QWdlbnRzKGFnZW50UGFyc2VkKVxuICAgICAgICAgIGhhc01vcmUgPSBjdXN0b21IYXNNb3JlXG4gICAgICAgICAgbmV4dE9mZnNldCA9IGN1c3RvbU5leHRPZmZzZXRcblxuICAgICAgICAgIHNldEFnZW50cyh7XG4gICAgICAgICAgICBkYXRhOiBhZ2VudFBhcnNlZCxcbiAgICAgICAgICAgIGhhc19tb3JlOiBoYXNNb3JlLFxuICAgICAgICAgICAgbmV4dF9vZmZzZXQ6IG5leHRPZmZzZXQsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIC8vIFNpIG5vIGhheSBhZ2VudGVzIGRlc3B1w6lzIGRlIHByb2Nlc2FyIGxhcyBxdWVyaWVzLCBsaW1waWFyIGVsIGVycm9yXG4gICAgICAgICAgaWYgKGFnZW50UGFyc2VkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2V0RXJyb3IobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTMOzZ2ljYSBwYXJhIHByb2plY3QsIGNsaWVudCBvIGhlYWRlciBzaW4gbXVsdGlBZ2VudHMgKG1pc21vIGNyaXRlcmlvIGRlIG9yZGVuIHByb2plY3QvY2xpZW50OyBoZWFkZXIgYcOxYWRlIHBhZ2luYWNpw7NuKVxuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gICAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdwcm9qZWN0JyB8fCBzZWN0aW9uID09PSAnY2xpZW50JyB8fCBzZWN0aW9uID09PSAnaGVhZGVyJyB8fCBzZWN0aW9uID09PSAndGFzaycpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnYWdlbnRfdHlwZScsICdvcmNoZXN0cmF0b3InKVxuICAgICAgICAgICAgcXVlcnlQYXJhbXMuYXBwZW5kKCdsYW5nJywgbWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKSlcbiAgICAgICAgICAgIGlmIChzZWN0aW9uID09PSAnaGVhZGVyJykge1xuICAgICAgICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ2xpbWl0JywgJzcnKVxuICAgICAgICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ29mZnNldCcsICcwJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKClcbiAgICAgICAgICBjb25zdCBwYXRoID0gYGFnZW50cyR7cXVlcnlTdHJpbmcgPyBgPyR7cXVlcnlTdHJpbmd9YCA6ICcnfWBcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgICAgICAvLyBkYXRhLmRhdGEgeWEgY29udGllbmUgZWwvbG9zIGFnZW50ZXMgb3JxdWVzdGFkb3JlcyBkZSBsYSBxdWVyeSBhZ2VudF90eXBlPW9yY2hlc3RyYXRvclxuICAgICAgICAgICAgYWdlbnRQYXJzZWQgPSBkYXRhLmRhdGEgfHwgW11cbiAgICAgICAgICAgIC8vIE9yZGVuYXI6IE1haWEgcHJpbWVybywgbHVlZ28gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGUsIGx1ZWdvIG5vIGZhdm9yaXRvcyBhbGZhYsOpdGljYW1lbnRlXG4gICAgICAgICAgICBhZ2VudFBhcnNlZCA9IHNvcnRBZ2VudHMoYWdlbnRQYXJzZWQpXG4gICAgICAgICAgICBoYXNNb3JlID0gZGF0YS5oYXNfbW9yZVxuICAgICAgICAgICAgbmV4dE9mZnNldCA9IGRhdGEubmV4dF9vZmZzZXRcblxuICAgICAgICAgICAgc2V0QWdlbnRzKHtcbiAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgZGF0YTogYWdlbnRQYXJzZWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gY2F0Y2ggKHJlc3BvbnNlRXJyb3I6IGFueSkge1xuICAgICAgICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGVycm9yIGVzIDQwM1xuICAgICAgICAgICAgLy8gZmV0Y2hDT1IgcHVlZGUgbGFuemFyIGRpZmVyZW50ZXMgdGlwb3MgZGUgZXJyb3JlczpcbiAgICAgICAgICAgIC8vIDEuIEVycm9yIGNvbiBlcnJvckRhdGEuZGV0YWlsIHNpIGluY2x1eWUgJ0FjY2VzcyBkZW5pZWQnXG4gICAgICAgICAgICAvLyAyLiBFcnJvciBnZW7DqXJpY28gJ0ZhaWxlZCBmZXRjaGluZyBkYXRhJyBzaSBlcyA0MDMgcGVybyBubyBpbmNsdXllICdBY2Nlc3MgZGVuaWVkJ1xuICAgICAgICAgICAgLy8gMy4gTmVjZXNpdGFtb3MgdmVyaWZpY2FyIGVsIHN0YXR1cyBjb2RlIHNpIGVzdMOhIGRpc3BvbmlibGVcbiAgICAgICAgICAgIGNvbnN0IGlzNDAzRXJyb3IgPVxuICAgICAgICAgICAgICByZXNwb25zZUVycm9yPy5yZXNwb25zZT8uc3RhdHVzID09PSA0MDMgfHxcbiAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvcj8uc3RhdHVzID09PSA0MDMgfHxcbiAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvcj8ubWVzc2FnZT8uaW5jbHVkZXMoXCJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHZpZXcgYWdlbnRzXCIpIHx8XG4gICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3I/Lm1lc3NhZ2U/LmluY2x1ZGVzKCdGYWlsZWQgZmV0Y2hpbmcgZGF0YScpIC8vIGZldGNoQ09SIGxhbnphIGVzdG8gcGFyYSA0MDMgc2luICdBY2Nlc3MgZGVuaWVkJ1xuXG4gICAgICAgICAgICBpZiAoaXM0MDNFcnJvcikge1xuICAgICAgICAgICAgICAvLyBTaSBlcyA0MDMsIGVzdGFibGVjZXIgYWdlbnRlcyB2YWPDrW9zIHkgY29udGludWFyXG4gICAgICAgICAgICAgIHNldEFnZW50cyh7XG4gICAgICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICAgICAgaGFzX21vcmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG5leHRfb2Zmc2V0OiBudWxsLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gU2kgZXMgb3RybyBlcnJvciwgbGFuemFybG9cbiAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2VFcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEzDs2dpY2EgZGUgc2VsZWN0IGFnZW50IC0gU29sbyBzZWxlY2Npb25hciBzaSBoYXkgYWdlbnRlcyBkaXNwb25pYmxlc1xuICAgICAgICBpZiAoYWdlbnRQYXJzZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChhZ2VudFRvU2VsZWN0ICYmIGFnZW50UGFyc2VkLmZpbmQoKGFnZW50VG9SZXF1ZXN0OiBBZ2VudCkgPT4gYWdlbnRUb1JlcXVlc3QuaWQgPT09IGFnZW50VG9TZWxlY3QuaWQpKSB7XG4gICAgICAgICAgICBpZiAobGFzdFNlbGVjdGVkQWdlbnRSZWYuY3VycmVudD8uaWQgIT09IGFnZW50VG9TZWxlY3QuaWQpIHtcbiAgICAgICAgICAgICAgbGFzdFNlbGVjdGVkQWdlbnRSZWYuY3VycmVudCA9IGFnZW50VG9TZWxlY3RcbiAgICAgICAgICAgICAgc2VsZWN0QWdlbnQoYWdlbnRUb1NlbGVjdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGFnZW50UGFyc2VkPy5bMF0gJiYgKCFhZ2VudCB8fCAhYWdlbnRQYXJzZWQuZmluZCgoYTogQWdlbnQpID0+IGEuaWQgPT09IGFnZW50LmlkKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUFnZW50cyA9XG4gICAgICAgICAgICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgJiYgIXVzZXJSb2xlc0Rpc2FibGVkLmluY2x1ZGVzKHVzZXIucm9sZV9pZClcbiAgICAgICAgICAgICAgICA/IGFnZW50UGFyc2VkXG4gICAgICAgICAgICAgICAgOiBhZ2VudFBhcnNlZC5maWx0ZXIoKGFnZW50SXRlbTogQWdlbnQpID0+ICFpc01haWFBZ2VudChhZ2VudEl0ZW0pKVxuXG4gICAgICAgICAgICBjb25zdCBbZmlyc3RBZ2VudF0gPSBhdmFpbGFibGVBZ2VudHNcbiAgICAgICAgICAgIGlmIChmaXJzdEFnZW50ICYmIGxhc3RTZWxlY3RlZEFnZW50UmVmLmN1cnJlbnQ/LmlkICE9PSBmaXJzdEFnZW50LmlkKSB7XG4gICAgICAgICAgICAgIGxhc3RTZWxlY3RlZEFnZW50UmVmLmN1cnJlbnQgPSBmaXJzdEFnZW50XG4gICAgICAgICAgICAgIHNlbGVjdEFnZW50KGZpcnN0QWdlbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChhZ2VudFRvU2VsZWN0ICYmIGFnZW50UGFyc2VkPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUFnZW50cyA9XG4gICAgICAgICAgICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgJiYgIXVzZXJSb2xlc0Rpc2FibGVkLmluY2x1ZGVzKHVzZXIucm9sZV9pZClcbiAgICAgICAgICAgICAgICA/IGFnZW50UGFyc2VkXG4gICAgICAgICAgICAgICAgOiBhZ2VudFBhcnNlZC5maWx0ZXIoKGFnZW50SXRlbTogQWdlbnQpID0+ICFpc01haWFBZ2VudChhZ2VudEl0ZW0pKVxuXG4gICAgICAgICAgICBjb25zdCBbZmlyc3RBdmFpbGFibGVBZ2VudF0gPSBhdmFpbGFibGVBZ2VudHNcbiAgICAgICAgICAgIGlmIChmaXJzdEF2YWlsYWJsZUFnZW50ICYmIGxhc3RTZWxlY3RlZEFnZW50UmVmLmN1cnJlbnQ/LmlkICE9PSBmaXJzdEF2YWlsYWJsZUFnZW50LmlkKSB7XG4gICAgICAgICAgICAgIGxhc3RTZWxlY3RlZEFnZW50UmVmLmN1cnJlbnQgPSBmaXJzdEF2YWlsYWJsZUFnZW50XG4gICAgICAgICAgICAgIHNlbGVjdEFnZW50KGZpcnN0QXZhaWxhYmxlQWdlbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzZXRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnKVxuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNSZWZyZXNoaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoIWlzUmVmcmVzaGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBsYXN0UmVxdWVzdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlbGVjdEFnZW50LCBzZWN0aW9uLCBhZ2VudCwgbG9hZGluZ11cbiAgKVxuXG4gIGNvbnN0IGxvYWRNb3JlQWdlbnRzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlzTXVsdGlBZ2VudHMgPSAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICAgIC8vIENhcmdhciBtw6FzOiBlbiBoZWFkZXIgc2llbXByZTsgZW4gcHJvamVjdCBzb2xvIHNpIGlzTXVsdGlBZ2VudHMgKHBvcnF1ZSBzb2xvIGVudG9uY2VzIGhheSBwYWdpbmFjacOzbiBkZSBjdXN0b20pXG4gICAgY29uc3QgY2FuTG9hZE1vcmUgPSBzZWN0aW9uID09PSAnaGVhZGVyJyB8fCBpc011bHRpQWdlbnRzXG4gICAgaWYgKCFjYW5Mb2FkTW9yZSB8fCAhYWdlbnRzLmhhc19tb3JlIHx8ICFhZ2VudHMubmV4dF9vZmZzZXQgfHwgbG9hZGluZ01vcmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldExvYWRpbmdNb3JlKHRydWUpXG4gICAgc2V0RXJyb3IobnVsbClcblxuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aDogc3RyaW5nXG5cbiAgICAgIC8vIFNpIGVzIG11bHRpQWdlbnRzLCBzb2xvIGNhcmdhciBhZ2VudHMgY3VzdG9tIChNYWlhIHlhIGVzdMOhIGNhcmdhZG8pXG4gICAgICBpZiAoaXNNdWx0aUFnZW50cykge1xuICAgICAgICAvLyBNYW50ZW5lciBjYW50aWRhZCBpbXBhciBkZSBjYXJkczogcHJpbWVyYSBjYXJnYSA3LCBzaWd1aWVudGVzICs2ICg3LCAxMywgMTksIC4uLilcbiAgICAgICAgcGF0aCA9IGBhZ2VudHM/YWdlbnRfdHlwZT1jdXN0b20mbGltaXQ9NiZvZmZzZXQ9JHthZ2VudHMubmV4dF9vZmZzZXR9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2kgbm8gZXMgbXVsdGlBZ2VudHMsIGNhcmdhciBtw6FzIGFnZW50ZXMgb3JxdWVzdGFkb3JlcyAoTUFJQSlcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgICAgcXVlcnlQYXJhbXMuYXBwZW5kKCdhZ2VudF90eXBlJywgJ29yY2hlc3RyYXRvcicpXG4gICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnbGFuZycsIG1hcENPUkxhbmcoaTE4bi5sYW5ndWFnZSkpXG4gICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnbGltaXQnLCAnNycpXG4gICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnb2Zmc2V0JywgYWdlbnRzLm5leHRfb2Zmc2V0LnRvU3RyaW5nKCkpXG4gICAgICAgIHBhdGggPSBgYWdlbnRzPyR7cXVlcnlQYXJhbXMudG9TdHJpbmcoKX1gXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgcGF0aCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcblxuICAgICAgLy8gQWN1bXVsYXIgYWdlbnRlcywgZXhjbHV5ZW5kbyBkdXBsaWNhZG9zXG4gICAgICBzZXRBZ2VudHMocHJldiA9PiB7XG4gICAgICAgIGlmIChpc011bHRpQWdlbnRzKSB7XG4gICAgICAgICAgLy8gTMOzZ2ljYSBwYXJhIG11bHRpQWdlbnRzOiBzZXBhcmFyIE1BSUEgeSBjdXN0b21cbiAgICAgICAgICBjb25zdCBleGlzdGluZ01haWFBZ2VudHMgPSBwcmV2LmRhdGEuZmlsdGVyKGlzTWFpYUFnZW50KVxuXG4gICAgICAgICAgLy8gT2J0ZW5lciBJRHMgZXhpc3RlbnRlcyAoZXhjbHV5ZW5kbyBNQUlBKVxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChwcmV2LmRhdGEuZmlsdGVyKChhZzogQWdlbnQpID0+ICFpc01haWFBZ2VudChhZykpLm1hcCgoYWc6IEFnZW50KSA9PiBhZy5pZCkpXG5cbiAgICAgICAgICAvLyBGaWx0cmFyIG51ZXZvcyBhZ2VudHMgcXVlIG5vIGVzdMOpbiB5YSBlbiBsYSBsaXN0YSAoeSBxdWUgbm8gc2VhbiBNQUlBKVxuICAgICAgICAgIGNvbnN0IG5ld0FnZW50cyA9IGRhdGEuZGF0YS5maWx0ZXIoKGFnOiBBZ2VudCkgPT4gIWlzTWFpYUFnZW50KGFnKSAmJiAhZXhpc3RpbmdJZHMuaGFzKGFnLmlkKSlcblxuICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSBleGlzdGluZ01haWFBZ2VudHMubGVuZ3RoXG4gICAgICAgICAgICA/IFsuLi5leGlzdGluZ01haWFBZ2VudHMsIC4uLnByZXYuZGF0YS5maWx0ZXIoKGFnOiBBZ2VudCkgPT4gIWlzTWFpYUFnZW50KGFnKSksIC4uLm5ld0FnZW50c11cbiAgICAgICAgICAgIDogWy4uLnByZXYuZGF0YS5maWx0ZXIoKGFnOiBBZ2VudCkgPT4gIWlzTWFpYUFnZW50KGFnKSksIC4uLm5ld0FnZW50c11cblxuICAgICAgICAgIC8vIE9yZGVuYXI6IE1haWEgcHJpbWVybywgbHVlZ28gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGUsIGx1ZWdvIG5vIGZhdm9yaXRvcyBhbGZhYsOpdGljYW1lbnRlXG4gICAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHNvcnRBZ2VudHMobmV3RGF0YSlcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiBzb3J0ZWREYXRhLFxuICAgICAgICAgICAgaGFzX21vcmU6IGRhdGEuaGFzX21vcmUsXG4gICAgICAgICAgICBuZXh0X29mZnNldDogZGF0YS5uZXh0X29mZnNldCxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTMOzZ2ljYSBwYXJhICFpc011bHRpQWdlbnRzOiBhZ3JlZ2FyIGV2aXRhbmRvIGR1cGxpY2Fkb3NcbiAgICAgICAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KHByZXYuZGF0YS5tYXAoKGFnOiBBZ2VudCkgPT4gYWcuaWQpKVxuICAgICAgICBjb25zdCBuZXdBZ2VudHMgPSAoZGF0YS5kYXRhIHx8IFtdKS5maWx0ZXIoKGFnOiBBZ2VudCkgPT4gIWV4aXN0aW5nSWRzLmhhcyhhZy5pZCkpXG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBbLi4ucHJldi5kYXRhLCAuLi5uZXdBZ2VudHNdXG5cbiAgICAgICAgLy8gT3JkZW5hcjogTWFpYSBwcmltZXJvLCBsdWVnbyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZSwgbHVlZ28gbm8gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGVcbiAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHNvcnRBZ2VudHMobmV3RGF0YSlcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHNvcnRlZERhdGEsXG4gICAgICAgICAgaGFzX21vcmU6IGRhdGEuaGFzX21vcmUsXG4gICAgICAgICAgbmV4dF9vZmZzZXQ6IGRhdGEubmV4dF9vZmZzZXQsXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIHNldExvYWRpbmdNb3JlKGZhbHNlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdzbmFja2Jhci5sb2FkTW9yZUFnZW50cy5lcnJvcicpKVxuICAgICAgc2V0TG9hZGluZ01vcmUoZmFsc2UpXG4gICAgfVxuICB9LCBbc2VjdGlvbiwgYWdlbnRzLmhhc19tb3JlLCBhZ2VudHMubmV4dF9vZmZzZXQsIGxvYWRpbmdNb3JlLCBpMThuLmxhbmd1YWdlXSlcblxuICByZXR1cm4ge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7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Q2hFLElBQU0rSCxTQUFTLEdBQUcsQ0FBQ2xLLElBQUksQ0FBQ0EsSUFBSSxJQUFJLEVBQUUsRUFBRXJCLE1BQU0sQ0FBQyxVQUFDRSxFQUFTO2NBQUEsT0FBSyxDQUFDbUwsV0FBVyxDQUFDRyxHQUFHLENBQUN0TCxFQUFFLENBQUNzRCxFQUFFLENBQUM7WUFBQSxFQUFDO1lBQ2xGLElBQU1DLE9BQU8sTUFBQTdDLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBT3VDLElBQUksQ0FBQy9CLElBQUksR0FBQVIsa0JBQUEsQ0FBSzBLLFNBQVMsRUFBQzs7WUFFNUM7WUFDQSxJQUFNN0gsVUFBVSxHQUFHN0QsVUFBVSxDQUFDNEQsT0FBTyxDQUFDO1lBRXRDLE9BQU87Y0FDTHBDLElBQUksRUFBRXFDLFVBQVU7Y0FDaEJ5RyxRQUFRLEVBQUU5SSxJQUFJLENBQUM4SSxRQUFRO2NBQ3ZCQyxXQUFXLEVBQUUvSSxJQUFJLENBQUMrSTtZQUNwQixDQUFDO1VBQ0gsQ0FBQyxDQUFDO1VBRUZwSSxjQUFjLENBQUMsS0FBSyxDQUFDO1VBQUFtSixTQUFBLENBQUEvQyxJQUFBO1VBQUE7UUFBQTtVQUFBK0MsU0FBQSxDQUFBL0gsSUFBQTtVQUFBOEgsR0FBQSxHQUFBQyxTQUFBO1VBRXJCN0ksbUJBQW1CLENBQUNFLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1VBQ3ZEUixjQUFjLENBQUMsS0FBSyxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUFtSixTQUFBLENBQUF4QixJQUFBO01BQUE7SUFBQSxHQUFBcUIsUUFBQTtFQUFBLENBRXhCLElBQUUsQ0FBQy9KLE9BQU8sRUFBRW5CLE1BQU0sQ0FBQ3FLLFFBQVEsRUFBRXJLLE1BQU0sQ0FBQ3NLLFdBQVcsRUFBRXJJLFdBQVcsRUFBRVUsSUFBSSxDQUFDOEcsUUFBUSxDQUFDLENBQUM7RUFFOUUsT0FBTztJQUNMekosTUFBTSxFQUFOQSxNQUFNO0lBQ042QixPQUFPLEVBQVBBLE9BQU87SUFDUEksV0FBVyxFQUFYQSxXQUFXO0lBQ1hJLEtBQUssRUFBTEEsS0FBSztJQUNMdUQsZUFBZSxFQUFmQSxlQUFlO0lBQ2ZxRixjQUFjLEVBQWRBLGNBQWM7SUFDZDlILFFBQVEsRUFBUkEsUUFBUTtJQUNSWSxXQUFXLEVBQVhBLFdBQVc7SUFDWEcsV0FBVyxFQUFYQSxXQUFXO0lBQ1hJLG1CQUFtQixFQUFuQkEsbUJBQW1CO0lBQ25CaUIsZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7SUFDaEJELGNBQWMsRUFBZEE7RUFDRixDQUFDO0FBQ0gsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==