@projectcor/people-microfront 1.0.2-2 → 1.0.2-21

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 (99) hide show
  1. package/lib/App.js +1 -43
  2. package/lib/App.stories.js +25 -2
  3. package/lib/components/DeleteTeamModal/DeleteTeamModal.js +36 -24
  4. package/lib/components/DeleteTeamModal/DeleteTeamModal.styles.js +18 -6
  5. package/lib/components/DeleteTeamModal/DeleteTeamModal.types.js +1 -1
  6. package/lib/components/DeletedUserIcon/DeletedUserIcon.styles.js +2 -2
  7. package/lib/components/DisabledUserIcon/DisabledUserIcon.styles.js +2 -2
  8. package/lib/components/EmptyStateTeams/EmptyStateTeams.js +2 -2
  9. package/lib/components/EmptyUser/EmptyUser.js +7 -48
  10. package/lib/components/EmptyUser/EmptyUser.styles.js +18 -0
  11. package/lib/components/Filters/FilterChip/FilterChip.js +12 -9
  12. package/lib/components/Filters/FilterChip/FilterChip.styles.js +6 -0
  13. package/lib/components/HeaderTeams/HeaderTeams.js +2 -2
  14. package/lib/components/Illustration/EmptyFilter.js +67 -0
  15. package/lib/components/Layout/Layout.js +23 -2
  16. package/lib/components/Layout/Layout.styles.js +16 -1
  17. package/lib/components/Layout/index.js +2 -3
  18. package/lib/components/MenuOptions/MenuOptions.js +4 -18
  19. package/lib/components/ModalBloquedUser/ModalBloquedUser.js +5 -28
  20. package/lib/components/ModalBloquedUser/ModalBloquedUser.styles.js +14 -0
  21. package/lib/components/ModalEditUserPosition/ModalEditUserPosition.js +17 -52
  22. package/lib/components/ModalEditUserPosition/ModalEditUserPosition.styles.js +36 -0
  23. package/lib/components/ModalEditUserPosition/UserEditPositionRow.js +28 -105
  24. package/lib/components/ModalEditUserPosition/UserEditPositionRow.styles.js +55 -1
  25. package/lib/components/ModalOptionsWithSearch/ModalOptionsWithSearch.js +11 -4
  26. package/lib/components/ModalOptionsWithSearch/ModalOptionsWithSearch.styles.js +5 -1
  27. package/lib/components/Pagination/Pagination.styles.js +5 -1
  28. package/lib/components/Pagination/PaginationView.js +80 -0
  29. package/lib/components/Search/Search.js +4 -4
  30. package/lib/components/Table/Header/HeaderTable.js +5 -21
  31. package/lib/components/Table/Header/HeaderTable.styles.js +14 -0
  32. package/lib/components/Table/Row/Row.js +61 -21
  33. package/lib/components/Table/Row/Row.styles.js +33 -9
  34. package/lib/components/Table/TeamRow/AddMemberModal/AddMemberModal.js +65 -0
  35. package/lib/components/Table/TeamRow/AddMemberModal/AddMemberModal.styles.js +38 -0
  36. package/lib/components/Table/TeamRow/AddMemberModal/index.js +2 -0
  37. package/lib/components/Table/TeamRow/AddUsers/AddUsers.js +185 -0
  38. package/lib/components/Table/TeamRow/AddUsers/AddUsers.styles.js +25 -0
  39. package/lib/components/Table/TeamRow/AddUsers/index.js +2 -0
  40. package/lib/components/Table/TeamRow/RemoveMemberModal/RemoveMemberModal.js +65 -0
  41. package/lib/components/Table/TeamRow/RemoveMemberModal/RemoveMemberModal.styles.js +38 -0
  42. package/lib/components/Table/TeamRow/RemoveMemberModal/index.js +2 -0
  43. package/lib/components/Table/TeamRow/TeamRow.js +76 -63
  44. package/lib/components/Table/TeamRow/TeamRow.styles.js +6 -0
  45. package/lib/components/Table/TeamRow/UsersRow/UsersRow.js +191 -0
  46. package/lib/components/Table/TeamRow/UsersRow/UsersRow.styles.js +40 -0
  47. package/lib/components/Table/TeamRow/UsersRow/index.js +2 -0
  48. package/lib/components/TeamDetailsModal/MembersSelect.js +104 -31
  49. package/lib/components/TeamDetailsModal/TeamDetailsModal.js +73 -77
  50. package/lib/components/TeamDetailsModal/TeamDetailsModal.styles.js +19 -11
  51. package/lib/components/TeamDetailsModal/TeamDetailsModal.types.js +1 -1
  52. package/lib/components/TeamDetailsModal/index.js +1 -1
  53. package/lib/components/UserRow/UserRow.js +17 -66
  54. package/lib/components/UserRow/UserRow.styles.js +30 -2
  55. package/lib/container/Body/BodyContainer.js +3 -8
  56. package/lib/container/Body/BodyContainerViewTeams.js +72 -98
  57. package/lib/container/Filters/FiltersContainer.js +44 -16
  58. package/lib/container/MainView/MainTeamsView.js +36 -0
  59. package/lib/container/MainView/MainUsersView.js +51 -81
  60. package/lib/container/MainView/MainUsersView.styles.js +32 -0
  61. package/lib/container/MainView/MainView.js +21 -41
  62. package/lib/container/Pagination/PaginationContainer.js +10 -123
  63. package/lib/container/Pagination/PaginationTeamsContainer.js +32 -0
  64. package/lib/container/RouterComponent/RouterComponent.js +20 -31
  65. package/lib/container/RouterComponent/RouterComponent.stories.js +1 -3
  66. package/lib/container/RouterComponent/RouterComponent.styles.js +26 -0
  67. package/lib/container/TableContainer/TableContainer.js +17 -9
  68. package/lib/context/TeamsContext.js +5 -2
  69. package/lib/context/UsersContext.js +77 -22
  70. package/lib/hooks/useAbortController.js +15 -11
  71. package/lib/hooks/useAssignUserToTeam.js +78 -0
  72. package/lib/hooks/useCreateTeams.js +67 -0
  73. package/lib/hooks/useDeleteTeam.js +67 -0
  74. package/lib/hooks/useGetTeams.js +8 -4
  75. package/lib/hooks/useGetTotalPositions.js +24 -0
  76. package/lib/hooks/useGetTotalTeams.js +24 -0
  77. package/lib/hooks/useGetUsers.js +25 -8
  78. package/lib/hooks/useGetUsersForFilter.js +1 -2
  79. package/lib/hooks/useGraphAdapter.js +19 -8
  80. package/lib/hooks/useResize.js +9 -4
  81. package/lib/hooks/useUnassignUserFromTeam.js +67 -0
  82. package/lib/hooks/useUpdateTeam.js +65 -0
  83. package/lib/lang/i18nextForWeb.js +2 -2
  84. package/lib/lang/translation/br.json +21 -4
  85. package/lib/lang/translation/en.json +58 -41
  86. package/lib/lang/translation/es.json +21 -4
  87. package/lib/lang/translation/fr.json +86 -69
  88. package/lib/mocks/mockedUser.js +7 -1
  89. package/lib/query/assignUserToTeam.js +5 -0
  90. package/lib/query/createTeam.js +5 -0
  91. package/lib/query/deleteTeam.js +5 -0
  92. package/lib/query/getTeams.js +2 -2
  93. package/lib/query/getTotalPositions.js +5 -0
  94. package/lib/query/getTotalTeams.js +5 -0
  95. package/lib/query/getUsers.js +2 -2
  96. package/lib/query/unassignUserFromTeam.js +5 -0
  97. package/lib/query/updateTeam.js +5 -0
  98. package/lib/types/global.d.js +1 -1
  99. package/package.json +2 -2
@@ -1,49 +1,121 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- import { useState, useMemo } from 'react';
3
+ import { useState, useEffect, useRef, useCallback } from 'react';
4
4
  import { ChevronDown } from '@projectcor/icons/lib/components/ChevronDown';
5
5
  import { CUSelect } from '@projectcor/selector/lib/components/CUSelect';
6
6
  import { SearchComponent } from '../Filters/SearchComponent/SearchComponent';
7
+ import { useGetUsers } from '../../hooks/useGetUsers';
8
+ import { useDebounce } from '../../hooks/useDebounce';
7
9
  import { SCBackdropInputSelect, SCCUItemsList, SCCUSelectItem, SCWrapperSelectIcon, SCMemberItemContent, SCMemberCheckbox, SCMemberSearchWrapper } from './TeamDetailsModal.styles';
8
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
11
  export var MembersSelect = function MembersSelect(_ref) {
10
12
  var value = _ref.value,
11
- membersList = _ref.membersList,
12
13
  onChange = _ref.onChange;
13
14
  var _useState = useState(false),
14
15
  _useState2 = _slicedToArray(_useState, 2),
15
16
  showSelectMembers = _useState2[0],
16
17
  setShowSelectMembers = _useState2[1];
18
+ var _useGetUsers = useGetUsers(),
19
+ handleGetUsers = _useGetUsers.handleGetUsers,
20
+ users = _useGetUsers.users,
21
+ currentPage = _useGetUsers.currentPage,
22
+ totalPages = _useGetUsers.totalPages,
23
+ loading = _useGetUsers.loading;
17
24
  var _useState3 = useState(''),
18
25
  _useState4 = _slicedToArray(_useState3, 2),
19
26
  searchValue = _useState4[0],
20
27
  setSearchValue = _useState4[1];
28
+ var debouncedSearchValue = useDebounce(searchValue, 300);
29
+ var _useState5 = useState([]),
30
+ _useState6 = _slicedToArray(_useState5, 2),
31
+ accumulatedUsers = _useState6[0],
32
+ setAccumulatedUsers = _useState6[1];
33
+ var scrollContainerRef = useRef(null);
34
+ var isLoadingMoreRef = useRef(false);
21
35
  var handleSelectMember = function handleSelectMember(member) {
22
- var memberName = "".concat(member.firstName, " ").concat(member.lastName);
23
- var currentMembers = value ? value.split(' - ') : [];
24
- if (currentMembers.includes(memberName)) {
25
- // Si ya está seleccionado, removerlo
26
- var updatedMembers = currentMembers.filter(function (m) {
27
- return m !== memberName;
28
- });
29
- onChange(updatedMembers.join(' - '));
36
+ var alredySelected = value.some(function (m) {
37
+ return m.id === member.id;
38
+ });
39
+ if (alredySelected) {
40
+ onChange('members', value.filter(function (m) {
41
+ return m.id !== member.id;
42
+ }));
30
43
  } else {
31
- // Si no está seleccionado, agregarlo
32
- var _updatedMembers = [].concat(_toConsumableArray(currentMembers), [memberName]);
33
- onChange(_updatedMembers.join(' - '));
44
+ onChange('members', [].concat(_toConsumableArray(value), [{
45
+ id: member.id,
46
+ name: "".concat(member.firstName, " ").concat(member.lastName)
47
+ }]));
34
48
  }
35
- // No cerrar el selector para permitir selección múltiple
36
49
  };
37
50
  var handleSearch = function handleSearch(e) {
38
51
  setSearchValue(e.target.value);
39
52
  };
40
- var filteredMembers = useMemo(function () {
41
- if (!searchValue) return membersList;
42
- var searchLower = searchValue.toLowerCase();
43
- return membersList.filter(function (member) {
44
- return member.firstName.toLowerCase().includes(searchLower) || member.lastName.toLowerCase().includes(searchLower) || "".concat(member.firstName, " ").concat(member.lastName).toLowerCase().includes(searchLower);
45
- });
46
- }, [membersList, searchValue]);
53
+
54
+ // Resetear usuarios acumulados cuando cambia el search o se abre el selector
55
+ useEffect(function () {
56
+ if (showSelectMembers) {
57
+ setAccumulatedUsers([]);
58
+ isLoadingMoreRef.current = false;
59
+ handleGetUsers({
60
+ page: 1,
61
+ searchInput: debouncedSearchValue
62
+ });
63
+ }
64
+ }, [debouncedSearchValue, showSelectMembers, handleGetUsers]);
65
+
66
+ // Acumular usuarios cuando se reciben nuevos datos
67
+ useEffect(function () {
68
+ if (users.length > 0 && showSelectMembers) {
69
+ if (currentPage === 1) {
70
+ // Si es la primera página, reemplazar
71
+ setAccumulatedUsers(users);
72
+ } else {
73
+ // Si es una página posterior, agregar a los existentes
74
+ setAccumulatedUsers(function (prev) {
75
+ // Evitar duplicados
76
+ var existingIds = new Set(prev.map(function (u) {
77
+ return u.id;
78
+ }));
79
+ var newUsers = users.filter(function (u) {
80
+ return !existingIds.has(u.id);
81
+ });
82
+ return [].concat(_toConsumableArray(prev), _toConsumableArray(newUsers));
83
+ });
84
+ }
85
+ isLoadingMoreRef.current = false;
86
+ }
87
+ }, [users, currentPage, showSelectMembers]);
88
+ var handleScroll = useCallback(function () {
89
+ var container = scrollContainerRef.current;
90
+ if (!container || loading || isLoadingMoreRef.current) return;
91
+ var scrollTop = container.scrollTop,
92
+ scrollHeight = container.scrollHeight,
93
+ clientHeight = container.clientHeight;
94
+ var isNearBottom = scrollTop + clientHeight >= scrollHeight - 10; // 10px de margen
95
+
96
+ if (isNearBottom && currentPage < totalPages) {
97
+ isLoadingMoreRef.current = true;
98
+ handleGetUsers({
99
+ page: currentPage + 1,
100
+ searchInput: debouncedSearchValue
101
+ });
102
+ }
103
+ }, [currentPage, totalPages, loading, handleGetUsers, debouncedSearchValue]);
104
+ useEffect(function () {
105
+ var container = scrollContainerRef.current;
106
+ if (!container || !showSelectMembers) return undefined;
107
+ container.addEventListener('scroll', handleScroll);
108
+ return function () {
109
+ container.removeEventListener('scroll', handleScroll);
110
+ };
111
+ }, [handleScroll, showSelectMembers]);
112
+ var handleClickActionSelect = function handleClickActionSelect() {
113
+ setShowSelectMembers(!showSelectMembers);
114
+ if (!showSelectMembers) {
115
+ setSearchValue('');
116
+ setAccumulatedUsers([]);
117
+ }
118
+ };
47
119
  return /*#__PURE__*/_jsxs(CUSelect, {
48
120
  title: "Agregar miembros *",
49
121
  placeholder: "Seleccionar miembros",
@@ -55,33 +127,34 @@ export var MembersSelect = function MembersSelect(_ref) {
55
127
  color: "#20201F"
56
128
  })
57
129
  }),
58
- value: value,
130
+ value: value.map(function (member) {
131
+ return member.name;
132
+ }).join(' - '),
59
133
  open: showSelectMembers,
60
- handleClickAction: function handleClickAction() {
61
- return setShowSelectMembers(!showSelectMembers);
62
- },
134
+ handleClickAction: handleClickActionSelect,
63
135
  children: [/*#__PURE__*/_jsx(SCBackdropInputSelect, {
64
136
  onClick: function onClick() {
65
137
  return setShowSelectMembers(false);
66
138
  }
67
139
  }), /*#__PURE__*/_jsxs(SCCUItemsList, {
140
+ ref: scrollContainerRef,
68
141
  children: [/*#__PURE__*/_jsx(SCMemberSearchWrapper, {
69
142
  children: /*#__PURE__*/_jsx(SearchComponent, {
70
143
  placeholder: "Buscar miembro",
71
144
  onChange: handleSearch,
72
145
  value: searchValue
73
146
  })
74
- }), filteredMembers.map(function (member) {
147
+ }), accumulatedUsers.map(function (member) {
75
148
  var memberName = "".concat(member.firstName, " ").concat(member.lastName);
76
- var isSelected = (value === null || value === void 0 ? void 0 : value.includes(memberName)) || false;
149
+ var isSelected = (value === null || value === void 0 ? void 0 : value.some(function (m) {
150
+ return m.id === member.id;
151
+ })) || false;
77
152
  return /*#__PURE__*/_jsx(SCCUSelectItem, {
78
153
  onClick: function onClick(e) {
79
154
  e.stopPropagation();
80
155
  handleSelectMember(member);
81
156
  },
82
- style: {
83
- backgroundColor: isSelected ? '#edfaff' : 'transparent'
84
- },
157
+ isSelected: isSelected,
85
158
  children: /*#__PURE__*/_jsxs(SCMemberItemContent, {
86
159
  children: [/*#__PURE__*/_jsx("span", {
87
160
  children: memberName
@@ -100,4 +173,4 @@ export var MembersSelect = function MembersSelect(_ref) {
100
173
  })]
101
174
  });
102
175
  };
103
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZU1lbW8iLCJDaGV2cm9uRG93biIsIkNVU2VsZWN0IiwiU2VhcmNoQ29tcG9uZW50IiwiU0NCYWNrZHJvcElucHV0U2VsZWN0IiwiU0NDVUl0ZW1zTGlzdCIsIlNDQ1VTZWxlY3RJdGVtIiwiU0NXcmFwcGVyU2VsZWN0SWNvbiIsIlNDTWVtYmVySXRlbUNvbnRlbnQiLCJTQ01lbWJlckNoZWNrYm94IiwiU0NNZW1iZXJTZWFyY2hXcmFwcGVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIk1lbWJlcnNTZWxlY3QiLCJfcmVmIiwidmFsdWUiLCJtZW1iZXJzTGlzdCIsIm9uQ2hhbmdlIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2hvd1NlbGVjdE1lbWJlcnMiLCJzZXRTaG93U2VsZWN0TWVtYmVycyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2VhcmNoVmFsdWUiLCJzZXRTZWFyY2hWYWx1ZSIsImhhbmRsZVNlbGVjdE1lbWJlciIsIm1lbWJlciIsIm1lbWJlck5hbWUiLCJjb25jYXQiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImN1cnJlbnRNZW1iZXJzIiwic3BsaXQiLCJpbmNsdWRlcyIsInVwZGF0ZWRNZW1iZXJzIiwiZmlsdGVyIiwibSIsImpvaW4iLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJoYW5kbGVTZWFyY2giLCJlIiwidGFyZ2V0IiwiZmlsdGVyZWRNZW1iZXJzIiwic2VhcmNoTG93ZXIiLCJ0b0xvd2VyQ2FzZSIsInRpdGxlIiwicGxhY2Vob2xkZXIiLCJlbmRJY29uIiwiaXNPcGVuIiwiY2hpbGRyZW4iLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwib3BlbiIsImhhbmRsZUNsaWNrQWN0aW9uIiwib25DbGljayIsIm1hcCIsImlzU2VsZWN0ZWQiLCJzdG9wUHJvcGFnYXRpb24iLCJzdHlsZSIsImJhY2tncm91bmRDb2xvciIsInR5cGUiLCJjaGVja2VkIiwicmVhZE9ubHkiLCJpZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1RlYW1EZXRhaWxzTW9kYWwvTWVtYmVyc1NlbGVjdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZU1lbW8sIENoYW5nZUV2ZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDaGV2cm9uRG93biB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZXZyb25Eb3duJ1xuaW1wb3J0IHsgQ1VTZWxlY3QgfSBmcm9tICdAcHJvamVjdGNvci9zZWxlY3Rvci9saWIvY29tcG9uZW50cy9DVVNlbGVjdCdcbmltcG9ydCB7IFNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uL0ZpbHRlcnMvU2VhcmNoQ29tcG9uZW50L1NlYXJjaENvbXBvbmVudCdcbmltcG9ydCB7XG4gIFNDQmFja2Ryb3BJbnB1dFNlbGVjdCxcbiAgU0NDVUl0ZW1zTGlzdCxcbiAgU0NDVVNlbGVjdEl0ZW0sXG4gIFNDV3JhcHBlclNlbGVjdEljb24sXG4gIFNDTWVtYmVySXRlbUNvbnRlbnQsXG4gIFNDTWVtYmVyQ2hlY2tib3gsXG4gIFNDTWVtYmVyU2VhcmNoV3JhcHBlcixcbn0gZnJvbSAnLi9UZWFtRGV0YWlsc01vZGFsLnN0eWxlcydcbmltcG9ydCB7IFRlYW1Vc2VyIH0gZnJvbSAnLi9UZWFtRGV0YWlsc01vZGFsLnR5cGVzJ1xuXG5pbnRlcmZhY2UgTWVtYmVyc1NlbGVjdFByb3BzIHtcbiAgdmFsdWU6IHN0cmluZ1xuICBtZW1iZXJzTGlzdDogVGVhbVVzZXJbXVxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IE1lbWJlcnNTZWxlY3QgPSAoeyB2YWx1ZSwgbWVtYmVyc0xpc3QsIG9uQ2hhbmdlIH06IE1lbWJlcnNTZWxlY3RQcm9wcykgPT4ge1xuICBjb25zdCBbc2hvd1NlbGVjdE1lbWJlcnMsIHNldFNob3dTZWxlY3RNZW1iZXJzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlKCcnKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE1lbWJlciA9IChtZW1iZXI6IFRlYW1Vc2VyKSA9PiB7XG4gICAgY29uc3QgbWVtYmVyTmFtZSA9IGAke21lbWJlci5maXJzdE5hbWV9ICR7bWVtYmVyLmxhc3ROYW1lfWBcbiAgICBjb25zdCBjdXJyZW50TWVtYmVycyA9IHZhbHVlID8gdmFsdWUuc3BsaXQoJyAtICcpIDogW11cblxuICAgIGlmIChjdXJyZW50TWVtYmVycy5pbmNsdWRlcyhtZW1iZXJOYW1lKSkge1xuICAgICAgLy8gU2kgeWEgZXN0w6Egc2VsZWNjaW9uYWRvLCByZW1vdmVybG9cbiAgICAgIGNvbnN0IHVwZGF0ZWRNZW1iZXJzID0gY3VycmVudE1lbWJlcnMuZmlsdGVyKG0gPT4gbSAhPT0gbWVtYmVyTmFtZSlcbiAgICAgIG9uQ2hhbmdlKHVwZGF0ZWRNZW1iZXJzLmpvaW4oJyAtICcpKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaSBubyBlc3TDoSBzZWxlY2Npb25hZG8sIGFncmVnYXJsb1xuICAgICAgY29uc3QgdXBkYXRlZE1lbWJlcnMgPSBbLi4uY3VycmVudE1lbWJlcnMsIG1lbWJlck5hbWVdXG4gICAgICBvbkNoYW5nZSh1cGRhdGVkTWVtYmVycy5qb2luKCcgLSAnKSlcbiAgICB9XG4gICAgLy8gTm8gY2VycmFyIGVsIHNlbGVjdG9yIHBhcmEgcGVybWl0aXIgc2VsZWNjacOzbiBtw7psdGlwbGVcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaCA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIHNldFNlYXJjaFZhbHVlKGUudGFyZ2V0LnZhbHVlKVxuICB9XG5cbiAgY29uc3QgZmlsdGVyZWRNZW1iZXJzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzZWFyY2hWYWx1ZSkgcmV0dXJuIG1lbWJlcnNMaXN0XG4gICAgY29uc3Qgc2VhcmNoTG93ZXIgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgcmV0dXJuIG1lbWJlcnNMaXN0LmZpbHRlcihcbiAgICAgIG1lbWJlciA9PlxuICAgICAgICBtZW1iZXIuZmlyc3ROYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoTG93ZXIpIHx8XG4gICAgICAgIG1lbWJlci5sYXN0TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaExvd2VyKSB8fFxuICAgICAgICBgJHttZW1iZXIuZmlyc3ROYW1lfSAke21lbWJlci5sYXN0TmFtZX1gLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoTG93ZXIpXG4gICAgKVxuICB9LCBbbWVtYmVyc0xpc3QsIHNlYXJjaFZhbHVlXSlcblxuICByZXR1cm4gKFxuICAgIDxDVVNlbGVjdFxuICAgICAgdGl0bGU9XCJBZ3JlZ2FyIG1pZW1icm9zICpcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY2Npb25hciBtaWVtYnJvc1wiXG4gICAgICBlbmRJY29uPXtcbiAgICAgICAgPFNDV3JhcHBlclNlbGVjdEljb24gaXNPcGVuPXtzaG93U2VsZWN0TWVtYmVyc30+XG4gICAgICAgICAgPENoZXZyb25Eb3duIHdpZHRoPVwiMTZweFwiIGhlaWdodD1cIjE2cHhcIiBjb2xvcj1cIiMyMDIwMUZcIiAvPlxuICAgICAgICA8L1NDV3JhcHBlclNlbGVjdEljb24+XG4gICAgICB9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBvcGVuPXtzaG93U2VsZWN0TWVtYmVyc31cbiAgICAgIGhhbmRsZUNsaWNrQWN0aW9uPXsoKSA9PiBzZXRTaG93U2VsZWN0TWVtYmVycyghc2hvd1NlbGVjdE1lbWJlcnMpfVxuICAgID5cbiAgICAgIDxTQ0JhY2tkcm9wSW5wdXRTZWxlY3Qgb25DbGljaz17KCkgPT4gc2V0U2hvd1NlbGVjdE1lbWJlcnMoZmFsc2UpfSAvPlxuICAgICAgPFNDQ1VJdGVtc0xpc3Q+XG4gICAgICAgIDxTQ01lbWJlclNlYXJjaFdyYXBwZXI+XG4gICAgICAgICAgPFNlYXJjaENvbXBvbmVudCBwbGFjZWhvbGRlcj1cIkJ1c2NhciBtaWVtYnJvXCIgb25DaGFuZ2U9e2hhbmRsZVNlYXJjaH0gdmFsdWU9e3NlYXJjaFZhbHVlfSAvPlxuICAgICAgICA8L1NDTWVtYmVyU2VhcmNoV3JhcHBlcj5cbiAgICAgICAge2ZpbHRlcmVkTWVtYmVycy5tYXAobWVtYmVyID0+IHtcbiAgICAgICAgICBjb25zdCBtZW1iZXJOYW1lID0gYCR7bWVtYmVyLmZpcnN0TmFtZX0gJHttZW1iZXIubGFzdE5hbWV9YFxuICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB2YWx1ZT8uaW5jbHVkZXMobWVtYmVyTmFtZSkgfHwgZmFsc2VcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFNDQ1VTZWxlY3RJdGVtXG4gICAgICAgICAgICAgIGtleT17bWVtYmVyLmlkfVxuICAgICAgICAgICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0TWVtYmVyKG1lbWJlcilcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBpc1NlbGVjdGVkID8gJyNlZGZhZmYnIDogJ3RyYW5zcGFyZW50JyB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U0NNZW1iZXJJdGVtQ29udGVudD5cbiAgICAgICAgICAgICAgICA8c3Bhbj57bWVtYmVyTmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPFNDTWVtYmVyQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc1NlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgcmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE1lbWJlcihtZW1iZXIpXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvU0NNZW1iZXJJdGVtQ29udGVudD5cbiAgICAgICAgICAgIDwvU0NDVVNlbGVjdEl0ZW0+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvU0NDVUl0ZW1zTGlzdD5cbiAgICA8L0NVU2VsZWN0PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsU0FBU0EsUUFBUSxFQUFFQyxPQUFPLFFBQXFCLE9BQU87QUFDdEQsU0FBU0MsV0FBVyxRQUFRLDhDQUE4QztBQUMxRSxTQUFTQyxRQUFRLFFBQVEsOENBQThDO0FBQ3ZFLFNBQVNDLGVBQWUsUUFBUSw0Q0FBNEM7QUFDNUUsU0FDRUMscUJBQXFCLEVBQ3JCQyxhQUFhLEVBQ2JDLGNBQWMsRUFDZEMsbUJBQW1CLEVBQ25CQyxtQkFBbUIsRUFDbkJDLGdCQUFnQixFQUNoQkMscUJBQXFCLFFBQ2hCLDJCQUEyQjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUE7QUFTbEMsT0FBTyxJQUFNQyxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUFDLElBQUEsRUFBNkQ7RUFBQSxJQUF2REMsS0FBSyxHQUFBRCxJQUFBLENBQUxDLEtBQUs7SUFBRUMsV0FBVyxHQUFBRixJQUFBLENBQVhFLFdBQVc7SUFBRUMsUUFBUSxHQUFBSCxJQUFBLENBQVJHLFFBQVE7RUFDMUQsSUFBQUMsU0FBQSxHQUFrRHJCLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQXNCLFVBQUEsR0FBQUMsY0FBQSxDQUFBRixTQUFBO0lBQTFERyxpQkFBaUIsR0FBQUYsVUFBQTtJQUFFRyxvQkFBb0IsR0FBQUgsVUFBQTtFQUM5QyxJQUFBSSxVQUFBLEdB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b0JBQW9CLENBQUMsS0FBSyxDQUFDO01BQUE7SUFBQyxDQUFFLENBQUMsZUFDckVWLEtBQUEsQ0FBQ1QsYUFBYTtNQUFBZ0QsUUFBQSxnQkFDWnpDLElBQUEsQ0FBQ0YscUJBQXFCO1FBQUEyQyxRQUFBLGVBQ3BCekMsSUFBQSxDQUFDVCxlQUFlO1VBQUMrQyxXQUFXLEVBQUMsZ0JBQWdCO1VBQUMvQixRQUFRLEVBQUV3QixZQUFhO1VBQUMxQixLQUFLLEVBQUVVO1FBQVksQ0FBRTtNQUFDLENBQ3ZFLENBQUMsRUFDdkJtQixlQUFlLENBQUNjLEdBQUcsQ0FBQyxVQUFBOUIsTUFBTSxFQUFJO1FBQzdCLElBQU1DLFVBQVUsTUFBQUMsTUFBQSxDQUFNRixNQUFNLENBQUNHLFNBQVMsT0FBQUQsTUFBQSxDQUFJRixNQUFNLENBQUNJLFFBQVEsQ0FBRTtRQUMzRCxJQUFNMkIsVUFBVSxHQUFHLENBQUE1QyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRW9CLFFBQVEsQ0FBQ04sVUFBVSxDQUFDLEtBQUksS0FBSztRQUN2RCxvQkFDRW5CLElBQUEsQ0FBQ04sY0FBYztVQUVicUQsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUVmLENBQUMsRUFBSTtZQUNaQSxDQUFDLENBQUNrQixlQUFlLENBQUMsQ0FBQztZQUNuQmpDLGtCQUFrQixDQUFDQyxNQUFNLENBQUM7VUFDNUIsQ0FBRTtVQUNGaUMsS0FBSyxFQUFFO1lBQUVDLGVBQWUsRUFBRUgsVUFBVSxHQUFHLFNBQVMsR0FBRztVQUFjLENBQUU7VUFBQVIsUUFBQSxlQUVuRXZDLEtBQUEsQ0FBQ04sbUJBQW1CO1lBQUE2QyxRQUFBLGdCQUNsQnpDLElBQUE7Y0FBQXlDLFFBQUEsRUFBT3RCO1lBQVUsQ0FBTyxDQUFDLGVBQ3pCbkIsSUFBQSxDQUFDSCxnQkFBZ0I7Y0FDZndELElBQUksRUFBQyxVQUFVO2NBQ2ZDLE9BQU8sRUFBRUwsVUFBVztjQUNwQk0sUUFBUTtjQUNSUixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRWYsQ0FBQyxFQUFJO2dCQUNaQSxDQUFDLENBQUNrQixlQUFlLENBQUMsQ0FBQztnQkFDbkJqQyxrQkFBa0IsQ0FBQ0MsTUFBTSxDQUFDO2NBQzVCO1lBQUUsQ0FDSCxDQUFDO1VBQUEsQ0FDaUI7UUFBQyxHQWxCakJBLE1BQU0sQ0FBQ3NDLEVBbUJFLENBQUM7TUFFckIsQ0FBQyxDQUFDO0lBQUEsQ0FDVyxDQUFDO0VBQUEsQ0FDUixDQUFDO0FBRWYsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
176
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZUNhbGxiYWNrIiwiQ2hldnJvbkRvd24iLCJDVVNlbGVjdCIsIlNlYXJjaENvbXBvbmVudCIsInVzZUdldFVzZXJzIiwidXNlRGVib3VuY2UiLCJTQ0JhY2tkcm9wSW5wdXRTZWxlY3QiLCJTQ0NVSXRlbXNMaXN0IiwiU0NDVVNlbGVjdEl0ZW0iLCJTQ1dyYXBwZXJTZWxlY3RJY29uIiwiU0NNZW1iZXJJdGVtQ29udGVudCIsIlNDTWVtYmVyQ2hlY2tib3giLCJTQ01lbWJlclNlYXJjaFdyYXBwZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiTWVtYmVyc1NlbGVjdCIsIl9yZWYiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2hvd1NlbGVjdE1lbWJlcnMiLCJzZXRTaG93U2VsZWN0TWVtYmVycyIsIl91c2VHZXRVc2VycyIsImhhbmRsZUdldFVzZXJzIiwidXNlcnMiLCJjdXJyZW50UGFnZSIsInRvdGFsUGFnZXMiLCJsb2FkaW5nIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJzZWFyY2hWYWx1ZSIsInNldFNlYXJjaFZhbHVlIiwiZGVib3VuY2VkU2VhcmNoVmFsdWUiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImFjY3VtdWxhdGVkVXNlcnMiLCJzZXRBY2N1bXVsYXRlZFVzZXJzIiwic2Nyb2xsQ29udGFpbmVyUmVmIiwiaXNMb2FkaW5nTW9yZVJlZiIsImhhbmRsZVNlbGVjdE1lbWJlciIsIm1lbWJlciIsImFscmVkeVNlbGVjdGVkIiwic29tZSIsIm0iLCJpZCIsImZpbHRlciIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsIm5hbWUiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImhhbmRsZVNlYXJjaCIsImUiLCJ0YXJnZXQiLCJjdXJyZW50IiwicGFnZSIsInNlYXJjaElucHV0IiwibGVuZ3RoIiwicHJldiIsImV4aXN0aW5nSWRzIiwiU2V0IiwibWFwIiwidSIsIm5ld1VzZXJzIiwiaGFzIiwiaGFuZGxlU2Nyb2xsIiwiY29udGFpbmVyIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiaXNOZWFyQm90dG9tIiwidW5kZWZpbmVkIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVDbGlja0FjdGlvblNlbGVjdCIsInRpdGxlIiwicGxhY2Vob2xkZXIiLCJlbmRJY29uIiwiaXNPcGVuIiwiY2hpbGRyZW4iLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwiam9pbiIsIm9wZW4iLCJoYW5kbGVDbGlja0FjdGlvbiIsIm9uQ2xpY2siLCJyZWYiLCJtZW1iZXJOYW1lIiwiaXNTZWxlY3RlZCIsInN0b3BQcm9wYWdhdGlvbiIsInR5cGUiLCJjaGVja2VkIiwicmVhZE9ubHkiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9UZWFtRGV0YWlsc01vZGFsL01lbWJlcnNTZWxlY3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlLCBDaGFuZ2VFdmVudCwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDaGV2cm9uRG93biB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZXZyb25Eb3duJ1xuaW1wb3J0IHsgQ1VTZWxlY3QgfSBmcm9tICdAcHJvamVjdGNvci9zZWxlY3Rvci9saWIvY29tcG9uZW50cy9DVVNlbGVjdCdcbmltcG9ydCB7IFNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uL0ZpbHRlcnMvU2VhcmNoQ29tcG9uZW50L1NlYXJjaENvbXBvbmVudCdcbmltcG9ydCB7IHVzZUdldFVzZXJzIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlR2V0VXNlcnMnXG5pbXBvcnQgeyB1c2VEZWJvdW5jZSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZURlYm91bmNlJ1xuaW1wb3J0IHtcbiAgU0NCYWNrZHJvcElucHV0U2VsZWN0LFxuICBTQ0NVSXRlbXNMaXN0LFxuICBTQ0NVU2VsZWN0SXRlbSxcbiAgU0NXcmFwcGVyU2VsZWN0SWNvbixcbiAgU0NNZW1iZXJJdGVtQ29udGVudCxcbiAgU0NNZW1iZXJDaGVja2JveCxcbiAgU0NNZW1iZXJTZWFyY2hXcmFwcGVyLFxufSBmcm9tICcuL1RlYW1EZXRhaWxzTW9kYWwuc3R5bGVzJ1xuaW1wb3J0IHsgVGVhbVVzZXIgfSBmcm9tICcuL1RlYW1EZXRhaWxzTW9kYWwudHlwZXMnXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vdHlwZXMvdXNlclR5cGUnXG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyU2VsZWN0aW9uIHtcbiAgaWQ6IG51bWJlclxuICBuYW1lOiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIE1lbWJlcnNTZWxlY3RQcm9wcyB7XG4gIHZhbHVlOiBNZW1iZXJTZWxlY3Rpb25bXVxuICBvbkNoYW5nZTogKGlucHV0OiBzdHJpbmcsIHZhbHVlOiBNZW1iZXJTZWxlY3Rpb25bXSkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgTWVtYmVyc1NlbGVjdCA9ICh7IHZhbHVlLCBvbkNoYW5nZSB9OiBNZW1iZXJzU2VsZWN0UHJvcHMpID0+IHtcbiAgY29uc3QgW3Nob3dTZWxlY3RNZW1iZXJzLCBzZXRTaG93U2VsZWN0TWVtYmVyc10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgeyBoYW5kbGVHZXRVc2VycywgdXNlcnMsIGN1cnJlbnRQYWdlLCB0b3RhbFBhZ2VzLCBsb2FkaW5nIH0gPSB1c2VHZXRVc2VycygpXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IGRlYm91bmNlZFNlYXJjaFZhbHVlID0gdXNlRGVib3VuY2Uoc2VhcmNoVmFsdWUsIDMwMClcbiAgY29uc3QgW2FjY3VtdWxhdGVkVXNlcnMsIHNldEFjY3VtdWxhdGVkVXNlcnNdID0gdXNlU3RhdGU8VXNlcltdPihbXSlcbiAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBpc0xvYWRpbmdNb3JlUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE1lbWJlciA9IChtZW1iZXI6IFVzZXIgfCBUZWFtVXNlcikgPT4ge1xuICAgIGNvbnN0IGFscmVkeVNlbGVjdGVkID0gdmFsdWUuc29tZShtID0+IG0uaWQgPT09IG1lbWJlci5pZClcbiAgICBpZiAoYWxyZWR5U2VsZWN0ZWQpIHtcbiAgICAgIG9uQ2hhbmdlKFxuICAgICAgICAnbWVtYmVycycsXG4gICAgICAgIHZhbHVlLmZpbHRlcihtID0+IG0uaWQgIT09IG1lbWJlci5pZClcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UoJ21lbWJlcnMnLCBbLi4udmFsdWUsIHsgaWQ6IG1lbWJlci5pZCwgbmFtZTogYCR7bWVtYmVyLmZpcnN0TmFtZX0gJHttZW1iZXIubGFzdE5hbWV9YCB9XSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVTZWFyY2ggPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBzZXRTZWFyY2hWYWx1ZShlLnRhcmdldC52YWx1ZSlcbiAgfVxuXG4gIC8vIFJlc2V0ZWFyIHVzdWFyaW9zIGFjdW11bGFkb3MgY3VhbmRvIGNhbWJpYSBlbCBzZWFyY2ggbyBzZSBhYnJlIGVsIHNlbGVjdG9yXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3dTZWxlY3RNZW1iZXJzKSB7XG4gICAgICBzZXRBY2N1bXVsYXRlZFVzZXJzKFtdKVxuICAgICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGhhbmRsZUdldFVzZXJzKHsgcGFnZTogMSwgc2VhcmNoSW5wdXQ6IGRlYm91bmNlZFNlYXJjaFZhbHVlIH0pXG4gICAgfVxuICB9LCBbZGVib3VuY2VkU2VhcmNoVmFsdWUsIHNob3dTZWxlY3RNZW1iZXJzLCBoYW5kbGVHZXRVc2Vyc10pXG5cbiAgLy8gQWN1bXVsYXIgdXN1YXJpb3MgY3VhbmRvIHNlIHJlY2liZW4gbnVldm9zIGRhdG9zXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHVzZXJzLmxlbmd0aCA+IDAgJiYgc2hvd1NlbGVjdE1lbWJlcnMpIHtcbiAgICAgIGlmIChjdXJyZW50UGFnZSA9PT0gMSkge1xuICAgICAgICAvLyBTaSBlcyBsYSBwcmltZXJhIHDDoWdpbmEsIHJlZW1wbGF6YXJcbiAgICAgICAgc2V0QWNjdW11bGF0ZWRVc2Vycyh1c2VycylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNpIGVzIHVuYSBww6FnaW5hIHBvc3RlcmlvciwgYWdyZWdhciBhIGxvcyBleGlzdGVudGVzXG4gICAgICAgIHNldEFjY3VtdWxhdGVkVXNlcnMocHJldiA9PiB7XG4gICAgICAgICAgLy8gRXZpdGFyIGR1cGxpY2Fkb3NcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQocHJldi5tYXAodSA9PiB1LmlkKSlcbiAgICAgICAgICBjb25zdCBuZXdVc2VycyA9IHVzZXJzLmZpbHRlcih1ID0+ICFleGlzdGluZ0lkcy5oYXModS5pZCkpXG4gICAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCAuLi5uZXdVc2Vyc11cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfVxuICB9LCBbdXNlcnMsIGN1cnJlbnRQYWdlLCBzaG93U2VsZWN0TWVtYmVyc10pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHNjcm9sbENvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250YWluZXIgfHwgbG9hZGluZyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHJldHVyblxuXG4gICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjb250YWluZXJcbiAgICBjb25zdCBpc05lYXJCb3R0b20gPSBzY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0IC0gMTAgLy8gMTBweCBkZSBtYXJnZW5cblxuICAgIGlmIChpc05lYXJCb3R0b20gJiYgY3VycmVudFBhZ2UgPCB0b3RhbFBhZ2VzKSB7XG4gICAgICBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBoYW5kbGVHZXRVc2Vycyh7IHBhZ2U6IGN1cnJlbnRQYWdlICsgMSwgc2VhcmNoSW5wdXQ6IGRlYm91bmNlZFNlYXJjaFZhbHVlIH0pXG4gICAgfVxuICB9LCBbY3VycmVudFBhZ2UsIHRvdGFsUGFnZXMsIGxvYWRpbmcsIGhhbmRsZUdldFVzZXJzLCBkZWJvdW5jZWRTZWFyY2hWYWx1ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBzY3JvbGxDb250YWluZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGFpbmVyIHx8ICFzaG93U2VsZWN0TWVtYmVycykgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICB9XG4gIH0sIFtoYW5kbGVTY3JvbGwsIHNob3dTZWxlY3RNZW1iZXJzXSlcblxuICBjb25zdCBoYW5kbGVDbGlja0FjdGlvblNlbGVjdCA9ICgpID0+IHtcbiAgICBzZXRTaG93U2VsZWN0TWVtYmVycyghc2hvd1NlbGVjdE1lbWJlcnMpXG4gICAgaWYgKCFzaG93U2VsZWN0TWVtYmVycykge1xuICAgICAgc2V0U2VhcmNoVmFsdWUoJycpXG4gICAgICBzZXRBY2N1bXVsYXRlZFVzZXJzKFtdKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENVU2VsZWN0XG4gICAgICB0aXRsZT1cIkFncmVnYXIgbWllbWJyb3MgKlwiXG4gICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjY2lvbmFyIG1pZW1icm9zXCJcbiAgICAgIGVuZEljb249e1xuICAgICAgICA8U0NXcmFwcGVyU2VsZWN0SWNvbiBpc09wZW49e3Nob3dTZWxlY3RNZW1iZXJzfT5cbiAgICAgICAgICA8Q2hldnJvbkRvd24gd2lkdGg9XCIxNnB4XCIgaGVpZ2h0PVwiMTZweFwiIGNvbG9yPVwiIzIwMjAxRlwiIC8+XG4gICAgICAgIDwvU0NXcmFwcGVyU2VsZWN0SWNvbj5cbiAgICAgIH1cbiAgICAgIHZhbHVlPXt2YWx1ZS5tYXAobWVtYmVyID0+IG1lbWJlci5uYW1lKS5qb2luKCcgLSAnKX1cbiAgICAgIG9wZW49e3Nob3dTZWxlY3RNZW1iZXJzfVxuICAgICAgaGFuZGxlQ2xpY2tBY3Rpb249e2hhbmRsZUNsaWNrQWN0aW9uU2VsZWN0fVxuICAgID5cbiAgICAgIDxTQ0JhY2tkcm9wSW5wdXRTZWxlY3Qgb25DbGljaz17KCkgPT4gc2V0U2hvd1NlbGVjdE1lbWJlcnMoZmFsc2UpfSAvPlxuICAgICAgPFNDQ1VJdGVtc0xpc3QgcmVmPXtzY3JvbGxDb250YWluZXJSZWZ9PlxuICAgICAgICA8U0NNZW1iZXJTZWFyY2hXcmFwcGVyPlxuICAgICAgICAgIDxTZWFyY2hDb21wb25lbnQgcGxhY2Vob2xkZXI9XCJCdXNjYXIgbWllbWJyb1wiIG9uQ2hhbmdlPXtoYW5kbGVTZWFyY2h9IHZhbHVlPXtzZWFyY2hWYWx1ZX0gLz5cbiAgICAgICAgPC9TQ01lbWJlclNlYXJjaFdyYXBwZXI+XG4gICAgICAgIHthY2N1bXVsYXRlZFVzZXJzLm1hcChtZW1iZXIgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lbWJlck5hbWUgPSBgJHttZW1iZXIuZmlyc3ROYW1lfSAke21lbWJlci5sYXN0TmFtZX1gXG4gICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHZhbHVlPy5zb21lKG0gPT4gbS5pZCA9PT0gbWVtYmVyLmlkKSB8fCBmYWxzZVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8U0NDVVNlbGVjdEl0ZW1cbiAgICAgICAgICAgICAga2V5PXttZW1iZXIuaWR9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RNZW1iZXIobWVtYmVyKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtpc1NlbGVjdGVkfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U0NNZW1iZXJJdGVtQ29udGVudD5cbiAgICAgICAgICAgICAgICA8c3Bhbj57bWVtYmVyTmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPFNDTWVtYmVyQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc1NlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgcmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE1lbWJlcihtZW1iZXIpXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvU0NNZW1iZXJJdGVtQ29udGVudD5cbiAgICAgICAgICAgIDwvU0NDVVNlbGVjdEl0ZW0+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvU0NDVUl0ZW1zTGlzdD5cbiAgICA8L0NVU2VsZWN0PlxuICApXG59XG4iXSwi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