@projectcor/maia-components 2.11.23-6 → 2.11.23

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 (35) hide show
  1. package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +2 -2
  2. package/lib/components/atoms/MAIAInput/MAIAInput.js +5 -2
  3. package/lib/components/atoms/icons/index.js +1 -2
  4. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +3 -16
  5. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +4 -47
  6. package/lib/components/molecules/Sidebar/Sidebar.js +325 -259
  7. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +23 -18
  8. package/lib/components/molecules/Sidebar/Sidebar.styles.js +37 -54
  9. package/lib/dev/Providers.js +2 -2
  10. package/lib/hooks/useChats/useChats.js +4 -12
  11. package/lib/lang/br/index.js +2 -11
  12. package/lib/lang/en/index.js +2 -11
  13. package/lib/lang/es/index.js +2 -11
  14. package/lib/lang/fr/index.js +2 -11
  15. package/lib/mocks/mockChats.js +395 -0
  16. package/lib/mocks/mockedUser.js +169 -0
  17. package/lib/services/maia/Chats/getChatsByUserId.js +8 -14
  18. package/lib/services/maia/Chats/index.js +1 -5
  19. package/lib/services/maia/client.js +9 -44
  20. package/lib/store/chatsStore.types.js +2 -10
  21. package/lib/store/useChatsStore.js +31 -81
  22. package/lib/types/Chat.js +1 -3
  23. package/lib/types/global.d.js +1 -1
  24. package/package.json +1 -1
  25. package/lib/components/atoms/icons/ChatConversation.js +0 -40
  26. package/lib/components/molecules/Sidebar/SidebarChats.styles.js +0 -73
  27. package/lib/components/molecules/Sidebar/SidebarChatsSection.js +0 -69
  28. package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +0 -151
  29. package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +0 -238
  30. package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +0 -70
  31. package/lib/components/molecules/Sidebar/sidebarChats.types.js +0 -14
  32. package/lib/dev/fixtures/devUser.js +0 -173
  33. package/lib/dev/fixtures/mockedUser.js +0 -169
  34. package/lib/services/maia/Chats/getChatMessagesV2.js +0 -114
  35. package/lib/services/maia/Chats/getSessionsGroupedV2.js +0 -70
@@ -1,25 +1,32 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
4
5
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
6
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
- import _regeneratorRuntime from "@babel/runtime/regenerator";
7
7
  /* eslint-disable no-param-reassign */
8
8
  /* eslint-disable @typescript-eslint/no-shadow */
9
9
  /* eslint-disable @typescript-eslint/no-explicit-any */
10
10
  /* eslint-disable no-nested-ternary */
11
11
  /* eslint-disable jsx-a11y/click-events-have-key-events */
12
12
  /* eslint-disable jsx-a11y/no-static-element-interactions */
13
- import { useEffect, useMemo, useRef, useState } from 'react';
14
- import { AnimatePresence } from 'framer-motion';
13
+ import { useEffect, useRef, useState } from 'react';
15
14
  import { ChevronDoubleLeft } from '@projectcor/icons/lib/components/ChevronDoubleLeft';
15
+ import { CUButton } from '@projectcor/button/lib/components/CUButton';
16
+ import { MenuDots } from '@projectcor/icons/lib/components/MenuDots';
17
+ import { Pencil } from '@projectcor/icons/lib/components/Pencil';
18
+ import { Trash } from '@projectcor/icons/lib/components/Trash';
16
19
  import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
17
20
  import { EmptyHistoryIcon } from '../../atoms/icons/EmptyHistory';
21
+ import { useResizeListener } from '../../../hooks/useResize';
18
22
  import { useChats } from '../../../hooks/useChats';
19
23
  import { Loader } from '../../atoms/Loader';
20
- import { ErrorState, MaiaStoreIcon, MyAgentsNavIcon, NewChat } from '../../atoms/icons';
24
+ import { ErrorState, MAIAIcon, MaiaStoreIcon, MyAgentsNavIcon, NewChat } from '../../atoms/icons';
21
25
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
22
26
  import { useT } from '../../../hooks/useT';
27
+ import { OptionItem } from '../../atoms/CardMenu/CardMenu';
28
+ import { EditQuestionModal } from '../../organisms/EditQuestionModal';
29
+ import { DeleteQuestionModal } from '../../organisms/DeleteQuestionModal';
23
30
  import { ErrorIcon } from '../../atoms/icons/ErrorIcon';
24
31
  import { useUser } from '../../../context/cor-user';
25
32
  import { OnboardingModalButton } from '../../atoms/OnboardingModalButton';
@@ -27,61 +34,190 @@ import { FeedbackButton } from '../../atoms/FeedbackButton';
27
34
  import { useGlobalContext } from '../../../context/global-context';
28
35
  import { fetchMaia } from '../../../services/maia/client';
29
36
  import { mapCORLang } from '../../../lang/utils';
30
- import { SCSWrapperCollapsedButton, SCSWrapperNewChatIcon } from './Sidebar.styles';
31
- import { SCSSidebarRoot, SCSSidebarToolbar, SCSSidebarBody, SCSSidebarOpenPanel, SCSSidebarAgentsBlock, SCSSidebarAgentsActions, SCSSidebarMaiakerNavButton, SCSSidebarMaiakerNavLabel, SCSSidebarChatsScroll, SCSSidebarErrorStateColumn, SCSSidebarErrorStateTop, SCSSidebarErrorBanner, SCSSidebarErrorBannerIconWrap, SCSSidebarErrorBannerMessage, SCSSidebarLoadingArea, SCSSidebarLoadMoreRow, SCSSidebarEmptyChats, SCSSidebarEmptyChatsText, SCSSidebarChatsFooter, SCSSidebarFooterActions } from './Sidebar.layout.styles';
32
- import { SCSSidebarSectionModalBackdropMotion } from './SidebarChats.styles';
33
- import { SidebarChatsSection } from './SidebarChatsSection';
34
- import { SidebarChatsSectionModal } from './SidebarChatsSectionModal';
35
- import { buildSidebarSections, groupChatsBySidebarSection } from './sidebarChats.helpers';
36
- import { SIDEBAR_SECTION_TRANSLATION_KEYS } from './sidebarChats.types';
37
- import { getChatsStoreState } from '../../../store/useChatsStore';
38
- import { SECTION_MODAL_SESSIONS_PAGE_LIMIT, SIDEBAR_SESSIONS_PAGE_LIMIT } from '../../../store/chatsStore.types';
37
+ import { SCLHCWrapper, SCLHCWrapperAgent, SCLHCWrapperAgentText, SCLHCWrapperButtonActions, SCLHCWrapperContent, SCLHCWrapperTitle, SCSWrapperCollapsedButton, SCSWrapperNewChatIcon } from './Sidebar.styles';
38
+ import { SCSSidebarRoot, SCSSidebarToolbar, SCSSidebarBody, SCSSidebarOpenPanel, SCSSidebarAgentsBlock, SCSSidebarAgentsHeading, SCSSidebarAgentsHeadingText, SCSSidebarAgentsActions, SCSSidebarMaiakerNavButton, SCSSidebarMaiakerNavLabel, SCSSidebarConversationsHeading, SCSSidebarChatsScroll, SCSSidebarErrorStateColumn, SCSSidebarErrorStateTop, SCSSidebarErrorBanner, SCSSidebarErrorBannerIconWrap, SCSSidebarErrorBannerMessage, SCSSidebarLoadingArea, SCSSidebarLoadMoreRow, SCSSidebarEmptyChats, SCSSidebarEmptyChatsText, SCSSidebarChatsFooter, SCSSidebarFooterActions } from './Sidebar.layout.styles';
39
39
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
40
- export var Sidebar = function Sidebar(_ref) {
41
- var _user$permissions;
42
- var onGoToChat = _ref.onGoToChat,
43
- _ref$onError = _ref.onError,
44
- onError = _ref$onError === void 0 ? function () {
45
- return null;
46
- } : _ref$onError,
47
- handleGoToHome = _ref.handleGoToHome,
48
- handleOpenMarketplace = _ref.handleOpenMarketplace,
49
- showNewChat = _ref.showNewChat,
50
- refetchChats = _ref.refetchChats,
51
- handleSetRefetchChats = _ref.handleSetRefetchChats,
52
- hasError = _ref.hasError,
53
- resetSelectedChatRef = _ref.resetSelectedChatRef,
54
- _ref$agentsNavActive = _ref.agentsNavActive,
55
- agentsNavActive = _ref$agentsNavActive === void 0 ? null : _ref$agentsNavActive;
40
+ var actions = {
41
+ edit: function edit(props) {
42
+ return /*#__PURE__*/_jsx(EditQuestionModal, _objectSpread({}, props));
43
+ },
44
+ "delete": function _delete(props) {
45
+ return /*#__PURE__*/_jsx(DeleteQuestionModal, _objectSpread({}, props));
46
+ }
47
+ };
48
+
49
+ /** Abrevia "especialista"/"especialist" → "Esp." (ES/PT) y "specialist" → "Spec." (EN) en el nombre del agente. */
50
+ function abbreviateSpecialistInAgentName(agentName) {
51
+ if (!agentName || typeof agentName !== 'string') return agentName;
52
+ return agentName.replace(/\b(especialista|especialist)\b/gi, 'Esp.').replace(/\bspecialist\b/gi, 'Spec.');
53
+ }
54
+ var ListHistoryChat = function ListHistoryChat(_ref) {
55
+ var chat = _ref.chat,
56
+ _onClick = _ref.onClick,
57
+ isModalOpen = _ref.isModalOpen,
58
+ onOpenModal = _ref.onOpenModal,
59
+ onCloseModal = _ref.onCloseModal,
60
+ handlers = _ref.handlers,
61
+ isSelected = _ref.isSelected;
62
+ var textRef = useRef(null);
63
+ var agentRef = useRef(null);
64
+ var _useResizeListener = useResizeListener(textRef, [chat.title]),
65
+ showTooltip = _useResizeListener.showTooltip;
66
+ var _useResizeListener2 = useResizeListener(agentRef, [chat.agent]),
67
+ showTooltipAgent = _useResizeListener2.showTooltip;
56
68
  var _useT = useT(),
57
- t = _useT.t,
58
- i18n = _useT.i18n;
59
- var _useState = useState(true),
69
+ t = _useT.t;
70
+ var _useState = useState(null),
60
71
  _useState2 = _slicedToArray(_useState, 2),
61
- isOpen = _useState2[0],
62
- setIsOpen = _useState2[1];
63
- var _useState3 = useState(null),
72
+ action = _useState2[0],
73
+ setAction = _useState2[1];
74
+ var menuItems = [{
75
+ label: t('history.menu.rename'),
76
+ onClickItem: function onClickItem(chatId) {
77
+ setAction('edit');
78
+ onOpenModal(chatId);
79
+ },
80
+ Icon: Pencil,
81
+ eventKey: EVENTS.pmAiMenuEdit
82
+ }, {
83
+ label: t('history.menu.delete'),
84
+ onClickItem: function onClickItem(chatId) {
85
+ setAction('delete');
86
+ onOpenModal(chatId);
87
+ },
88
+ Icon: Trash,
89
+ eventKey: EVENTS.pmAiMenuDelete
90
+ }];
91
+ var handleConfirmAction = function handleConfirmAction(chatData) {
92
+ if (action === 'edit') {
93
+ handlers.handleUpdateChat(chatData);
94
+ } else {
95
+ handlers.handleDeleteChat(chatData);
96
+ }
97
+ setAction(null);
98
+ onCloseModal();
99
+ };
100
+ return /*#__PURE__*/_jsxs(_Fragment, {
101
+ children: [/*#__PURE__*/_jsxs(SCLHCWrapperContent, {
102
+ onClick: function onClick(e) {
103
+ e.stopPropagation();
104
+ _onClick(chat);
105
+ },
106
+ isModalOpen: isModalOpen,
107
+ isSelected: isSelected,
108
+ children: [/*#__PURE__*/_jsxs(SCLHCWrapper, {
109
+ children: [/*#__PURE__*/_jsx(Tooltip, {
110
+ title: showTooltip ? chat.title : '',
111
+ children: /*#__PURE__*/_jsx(SCLHCWrapperTitle, {
112
+ ref: textRef,
113
+ children: chat.title || t('conversations.emptyLabel')
114
+ })
115
+ }), /*#__PURE__*/_jsx(Tooltip, {
116
+ title: showTooltipAgent ? chat.agent + (chat.projectName ? " - ".concat(chat.projectName) : '') : '',
117
+ children: /*#__PURE__*/_jsxs(SCLHCWrapperAgent, {
118
+ children: [chat.agentType === 'clone' ? /*#__PURE__*/_jsx(MAIAIcon, {
119
+ width: 14,
120
+ height: 14
121
+ }) : /*#__PURE__*/_jsx("span", {
122
+ style: {
123
+ fontSize: '14px'
124
+ },
125
+ children: chat.emoji
126
+ }), /*#__PURE__*/_jsxs(SCLHCWrapperAgentText, {
127
+ ref: agentRef,
128
+ children: [chat.agentType === 'clone' ? abbreviateSpecialistInAgentName(chat.agent) : chat.agent, chat.projectName && " - ".concat(chat.projectName)]
129
+ })]
130
+ })
131
+ })]
132
+ }), /*#__PURE__*/_jsxs(SCLHCWrapperButtonActions, {
133
+ children: [/*#__PURE__*/_jsx(CUButton, {
134
+ iconOnly: true,
135
+ size: "small",
136
+ variant: "text",
137
+ onClick: function onClick(event) {
138
+ event.stopPropagation();
139
+ onOpenModal(chat.id);
140
+ },
141
+ children: /*#__PURE__*/_jsx(MenuDots, {
142
+ width: 20,
143
+ height: 20
144
+ })
145
+ }), isModalOpen && !action && /*#__PURE__*/_jsx("div", {
146
+ "data-modal-container": true,
147
+ style: {
148
+ position: 'absolute',
149
+ top: '32px',
150
+ right: '16px',
151
+ backgroundColor: 'white',
152
+ zIndex: 1000,
153
+ display: 'flex',
154
+ flexDirection: 'column',
155
+ borderRadius: '4px',
156
+ border: '1px solid rgba(224, 224, 224, 1)',
157
+ minWidth: '124px'
158
+ },
159
+ children: menuItems.map(function (_ref2) {
160
+ var label = _ref2.label,
161
+ onClickItem = _ref2.onClickItem,
162
+ Icon = _ref2.Icon,
163
+ eventKey = _ref2.eventKey;
164
+ return /*#__PURE__*/_jsx(OptionItem, {
165
+ label: label,
166
+ onClick: function onClick() {
167
+ return onClickItem(chat.id);
168
+ },
169
+ Icon: Icon,
170
+ eventKey: eventKey
171
+ }, label);
172
+ })
173
+ })]
174
+ })]
175
+ }, "conversation-".concat(chat.sessionExternalId)), !!action && actions[action]({
176
+ onClose: function onClose() {
177
+ onCloseModal();
178
+ setAction(null);
179
+ },
180
+ chat: chat,
181
+ handlers: {
182
+ handleConfirmAction: handleConfirmAction,
183
+ handleSetIsOpenModal: onCloseModal
184
+ }
185
+ })]
186
+ });
187
+ };
188
+ export var Sidebar = function Sidebar(_ref3) {
189
+ var _user$permissions;
190
+ var onGoToChat = _ref3.onGoToChat,
191
+ _ref3$onError = _ref3.onError,
192
+ onError = _ref3$onError === void 0 ? function () {
193
+ return null;
194
+ } : _ref3$onError,
195
+ handleGoToHome = _ref3.handleGoToHome,
196
+ handleOpenMarketplace = _ref3.handleOpenMarketplace,
197
+ showNewChat = _ref3.showNewChat,
198
+ refetchChats = _ref3.refetchChats,
199
+ handleSetRefetchChats = _ref3.handleSetRefetchChats,
200
+ hasError = _ref3.hasError,
201
+ resetSelectedChatRef = _ref3.resetSelectedChatRef,
202
+ _ref3$agentsNavActive = _ref3.agentsNavActive,
203
+ agentsNavActive = _ref3$agentsNavActive === void 0 ? null : _ref3$agentsNavActive;
204
+ var _useT2 = useT(),
205
+ t = _useT2.t,
206
+ i18n = _useT2.i18n;
207
+ var _useState3 = useState(true),
64
208
  _useState4 = _slicedToArray(_useState3, 2),
65
- chatMenuState = _useState4[0],
66
- setChatMenuState = _useState4[1];
209
+ isOpen = _useState4[0],
210
+ setIsOpen = _useState4[1];
67
211
  var _useState5 = useState(null),
68
212
  _useState6 = _slicedToArray(_useState5, 2),
69
- expandedSectionModalKey = _useState6[0],
70
- setExpandedSectionModalKey = _useState6[1];
71
- var _useState7 = useState({
72
- clients: false,
73
- projects: false,
74
- agentsByCompany: false
75
- }),
213
+ isOpenModal = _useState6[0],
214
+ setIsOpenModal = _useState6[1];
215
+ var _useState7 = useState(null),
76
216
  _useState8 = _slicedToArray(_useState7, 2),
77
- collapsedSections = _useState8[0],
78
- setCollapsedSections = _useState8[1];
79
- var _useState9 = useState(null),
80
- _useState0 = _slicedToArray(_useState9, 2),
81
- selectedChat = _useState0[0],
82
- setSelectedChat = _useState0[1];
217
+ selectedChat = _useState8[0],
218
+ setSelectedChat = _useState8[1];
83
219
  var chatsFetchedRef = useRef(false);
84
- var sidebarScrollRef = useRef(null);
220
+ var chatsContainerRef = useRef(null);
85
221
  var user = useUser();
86
222
  var eventAmplitude = useEvent();
87
223
  var _useGlobalContext = useGlobalContext(),
@@ -97,31 +233,17 @@ export var Sidebar = function Sidebar(_ref) {
97
233
  deleteChat = _useChats.deleteChat,
98
234
  updateChat = _useChats.updateChat,
99
235
  fetchChats = _useChats.fetchChats,
236
+ limit = _useChats.limit,
237
+ offset = _useChats.offset,
100
238
  hasMoreChats = _useChats.hasMoreChats,
101
239
  loadMoreChats = _useChats.loadMoreChats,
102
- isLoadingMoreChats = _useChats.isLoadingMoreChats,
103
- sessionsGroupHasMore = _useChats.sessionsGroupHasMore;
104
- var showFullSidebarErrorColumn = hasError && !chats.length;
105
- var showSidebarErrorFooterBanner = hasError && chats.length > 0;
240
+ isLoadingMoreChats = _useChats.isLoadingMoreChats;
106
241
  var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
107
242
  var canCreateAgents = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create);
108
243
  var canViewAgents = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.view);
109
- var agentNavButtonCount = canCreateAgents ? 2 : canViewAgents ? 1 : 0;
110
- var showAgentsNavBlock = canCreateAgents || canViewAgents;
111
- var groupedChats = useMemo(function () {
112
- return groupChatsBySidebarSection(chats);
113
- }, [chats]);
114
- var sidebarSections = useMemo(function () {
115
- return buildSidebarSections(groupedChats, function (key) {
116
- var _user$company;
117
- return key === 'agentsByCompany' ? t(SIDEBAR_SECTION_TRANSLATION_KEYS[key], {
118
- companyName: ((_user$company = user.company) === null || _user$company === void 0 ? void 0 : _user$company.trim()) || '—'
119
- }) : t(SIDEBAR_SECTION_TRANSLATION_KEYS[key]);
120
- }, sessionsGroupHasMore);
121
- }, [groupedChats, t, user.company, sessionsGroupHasMore]);
122
- var expandedSection = expandedSectionModalKey ? sidebarSections.find(function (section) {
123
- return section.key === expandedSectionModalKey;
124
- }) || null : null;
244
+ var showMarketplaceSidebarButton = !!canCreateAgents && !!window.MAIA_MARKETPLACE_MAIAKER;
245
+ var agentNavButtonCount = (showMarketplaceSidebarButton ? 1 : 0) + (canViewAgents ? 1 : 0);
246
+ var showAgentsNavBlock = showMarketplaceSidebarButton || canViewAgents;
125
247
  useEffect(function () {
126
248
  if (resetSelectedChatRef) {
127
249
  resetSelectedChatRef.current = function () {
@@ -135,12 +257,12 @@ export var Sidebar = function Sidebar(_ref) {
135
257
  };
136
258
  }, [resetSelectedChatRef]);
137
259
  var handleDeleteChat = /*#__PURE__*/function () {
138
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
260
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
139
261
  return _regeneratorRuntime.wrap(function (_context) {
140
262
  while (1) switch (_context.prev = _context.next) {
141
263
  case 0:
142
264
  deleteChat(chat.sessionExternalId);
143
- setChatMenuState(null);
265
+ setIsOpenModal(null);
144
266
  handleGoToHome();
145
267
  case 1:
146
268
  case "end":
@@ -149,121 +271,69 @@ export var Sidebar = function Sidebar(_ref) {
149
271
  }, _callee);
150
272
  }));
151
273
  return function handleDeleteChat(_x) {
152
- return _ref2.apply(this, arguments);
274
+ return _ref4.apply(this, arguments);
153
275
  };
154
276
  }();
155
277
  var handleUpdateChat = function handleUpdateChat(chat) {
156
278
  updateChat(chat);
157
- setChatMenuState(null);
279
+ setIsOpenModal(null);
158
280
  };
159
- var handleOpenChatMenu = function handleOpenChatMenu(chatId, surface) {
160
- setChatMenuState(function (prev) {
161
- return (prev === null || prev === void 0 ? void 0 : prev.chatId) === chatId && (prev === null || prev === void 0 ? void 0 : prev.surface) === surface ? null : {
162
- chatId: chatId,
163
- surface: surface
164
- };
165
- });
166
- };
167
- var handleCloseChatMenu = function handleCloseChatMenu() {
168
- setChatMenuState(null);
169
- };
170
- var handleOpenSectionModal = /*#__PURE__*/function () {
171
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(sectionKey) {
172
- var _getChatsStoreState, storeLimit;
173
- return _regeneratorRuntime.wrap(function (_context2) {
174
- while (1) switch (_context2.prev = _context2.next) {
175
- case 0:
176
- setChatMenuState(null);
177
- _getChatsStoreState = getChatsStoreState(), storeLimit = _getChatsStoreState.limit;
178
- if (!(storeLimit === SIDEBAR_SESSIONS_PAGE_LIMIT)) {
179
- _context2.next = 1;
180
- break;
181
- }
182
- _context2.next = 1;
183
- return fetchChats({
184
- limit: SECTION_MODAL_SESSIONS_PAGE_LIMIT,
185
- offset: 0,
186
- showGlobalLoader: false
187
- });
188
- case 1:
189
- setExpandedSectionModalKey(sectionKey);
190
- case 2:
191
- case "end":
192
- return _context2.stop();
193
- }
194
- }, _callee2);
195
- }));
196
- return function handleOpenSectionModal(_x2) {
197
- return _ref3.apply(this, arguments);
198
- };
199
- }();
200
- var handleCloseSectionModal = function handleCloseSectionModal() {
201
- setExpandedSectionModalKey(null);
202
- setChatMenuState(null);
203
- };
204
- var handleToggleSectionCollapse = function handleToggleSectionCollapse(sectionKey) {
205
- setCollapsedSections(function (prev) {
206
- return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, sectionKey, !prev[sectionKey]));
207
- });
281
+ var handleOpenModal = function handleOpenModal(chatId) {
282
+ if (isOpenModal && isOpenModal !== chatId) {
283
+ setIsOpenModal(null);
284
+ } else {
285
+ setIsOpenModal(chatId);
286
+ }
208
287
  };
209
- var handleSelectConversation = function handleSelectConversation(chatData) {
210
- setSelectedChat(chatData.sessionExternalId);
211
- onGoToChat(chatData);
288
+ var handleCloseModal = function handleCloseModal() {
289
+ setIsOpenModal(null);
212
290
  };
213
291
  useEffect(function () {
214
292
  var handleClickOutside = function handleClickOutside(event) {
215
- var target = event.target;
216
- if (chatMenuState && !target.closest('[data-modal-container]')) {
217
- setChatMenuState(null);
218
- }
219
- if (expandedSectionModalKey && !target.closest('[data-section-modal-container]')) {
220
- setExpandedSectionModalKey(null);
221
- setChatMenuState(null);
293
+ if (isOpenModal && !event.target.closest('[data-modal-container]')) {
294
+ setIsOpenModal(null);
222
295
  }
223
296
  };
224
- if (chatMenuState || expandedSectionModalKey) {
297
+ if (isOpenModal) {
225
298
  document.addEventListener('mousedown', handleClickOutside);
226
299
  }
227
300
  return function () {
228
301
  document.removeEventListener('mousedown', handleClickOutside);
229
302
  };
230
- }, [chatMenuState, expandedSectionModalKey]);
303
+ }, [isOpenModal]);
231
304
  var handleToggleSidebar = function handleToggleSidebar() {
232
- if (chatMenuState) {
233
- setChatMenuState(null);
234
- }
235
- if (expandedSectionModalKey) {
236
- setExpandedSectionModalKey(null);
305
+ if (isOpenModal) {
306
+ setIsOpenModal(null);
237
307
  }
238
308
  setIsOpen(function (prev) {
239
309
  return !prev;
240
310
  });
241
311
  };
242
312
  var handleOpenCreateAgent = /*#__PURE__*/function () {
243
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
313
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
244
314
  var response, data, maiakerAgent;
245
- return _regeneratorRuntime.wrap(function (_context3) {
246
- while (1) switch (_context3.prev = _context3.next) {
315
+ return _regeneratorRuntime.wrap(function (_context2) {
316
+ while (1) switch (_context2.prev = _context2.next) {
247
317
  case 0:
248
- _context3.next = 1;
318
+ _context2.next = 1;
249
319
  return fetchMaia({
250
320
  path: "agents?agent_type=clone&lang=".concat(mapCORLang(i18n.language)),
251
321
  method: 'GET'
252
322
  });
253
323
  case 1:
254
- response = _context3.sent;
255
- _context3.next = 2;
324
+ response = _context2.sent;
325
+ _context2.next = 2;
256
326
  return response.json();
257
327
  case 2:
258
- data = _context3.sent;
328
+ data = _context2.sent;
259
329
  maiakerAgent = (data.data || []).find(function (agent) {
260
330
  return agent.type === 'clone' && agent.entity === 'global';
261
331
  });
262
332
  if (maiakerAgent) {
263
- _context3.next = 3;
333
+ _context2.next = 3;
264
334
  break;
265
335
  }
266
- return _context3.abrupt("return");
336
+ return _context2.abrupt("return");
267
337
  case 3:
268
338
  setProject(null);
269
339
  setClient === null || setClient === void 0 || setClient(null);
@@ -271,64 +341,85 @@ export var Sidebar = function Sidebar(_ref) {
271
341
  handleGoToHome();
272
342
  case 4:
273
343
  case "end":
274
- return _context3.stop();
344
+ return _context2.stop();
275
345
  }
276
- }, _callee3);
346
+ }, _callee2);
277
347
  }));
278
348
  return function handleOpenCreateAgent() {
279
- return _ref4.apply(this, arguments);
349
+ return _ref5.apply(this, arguments);
280
350
  };
281
351
  }();
282
352
  useEffect(function () {
283
353
  if (isOpen && !chatsFetchedRef.current) {
284
354
  chatsFetchedRef.current = true;
285
355
  fetchChats({
286
- limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
287
- offset: 0
356
+ limit: limit,
357
+ offset: offset
288
358
  });
289
359
  return;
290
360
  }
291
361
  if (refetchChats) {
292
362
  fetchChats({
293
- limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
294
- offset: 0
363
+ limit: limit,
364
+ offset: offset
295
365
  });
296
366
  handleSetRefetchChats(false);
297
367
  }
298
- }, [isOpen, refetchChats, handleSetRefetchChats, fetchChats]);
299
-
300
- /** El scroll infinito de sesiones vive solo en el modal de sección (`SidebarChatsSectionModal`). */
301
-
368
+ }, [isOpen, refetchChats, handleSetRefetchChats]);
369
+ useEffect(function () {
370
+ var handleScroll = function handleScroll() {
371
+ if (!chatsContainerRef.current || !hasMoreChats || isLoadingMoreChats || hasError) {
372
+ return;
373
+ }
374
+ var _chatsContainerRef$cu = chatsContainerRef.current,
375
+ scrollTop = _chatsContainerRef$cu.scrollTop,
376
+ scrollHeight = _chatsContainerRef$cu.scrollHeight,
377
+ clientHeight = _chatsContainerRef$cu.clientHeight;
378
+ var isAtBottom = scrollTop + clientHeight >= scrollHeight - 10;
379
+ if (isAtBottom) {
380
+ loadMoreChats();
381
+ }
382
+ };
383
+ var container = chatsContainerRef.current;
384
+ if (container) {
385
+ container.addEventListener('scroll', handleScroll);
386
+ }
387
+ return function () {
388
+ if (container) {
389
+ container.removeEventListener('scroll', handleScroll);
390
+ }
391
+ };
392
+ }, [hasMoreChats, isLoadingMoreChats, loadMoreChats, hasError]);
302
393
  var handleNewChat = /*#__PURE__*/function () {
303
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
304
- return _regeneratorRuntime.wrap(function (_context4) {
305
- while (1) switch (_context4.prev = _context4.next) {
394
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
395
+ return _regeneratorRuntime.wrap(function (_context3) {
396
+ while (1) switch (_context3.prev = _context3.next) {
306
397
  case 0:
307
- if (chatMenuState) {
308
- setChatMenuState(null);
398
+ if (isOpenModal) {
399
+ setIsOpenModal(null);
309
400
  }
310
401
  setSelectedChat(null);
311
- _context4.next = 1;
402
+ _context3.next = 1;
312
403
  return fetchChats({
313
- limit: expandedSectionModalKey ? SECTION_MODAL_SESSIONS_PAGE_LIMIT : SIDEBAR_SESSIONS_PAGE_LIMIT,
404
+ limit: limit,
314
405
  offset: 0
315
406
  });
316
407
  case 1:
317
408
  handleGoToHome();
318
409
  case 2:
319
410
  case "end":
320
- return _context4.stop();
411
+ return _context3.stop();
321
412
  }
322
- }, _callee4);
413
+ }, _callee3);
323
414
  }));
324
415
  return function handleNewChat() {
325
- return _ref5.apply(this, arguments);
416
+ return _ref6.apply(this, arguments);
326
417
  };
327
418
  }();
328
419
  useEffect(function () {
329
420
  var handleRefetchSession = function handleRefetchSession() {
330
421
  fetchChats({
331
- limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
422
+ limit: 20,
332
423
  offset: 0
333
424
  });
334
425
  };
@@ -336,7 +427,7 @@ export var Sidebar = function Sidebar(_ref) {
336
427
  return function () {
337
428
  document.removeEventListener('refetch-session', handleRefetchSession);
338
429
  };
339
- }, [fetchChats]);
430
+ }, []);
340
431
  var showNewChatButton = !showNewChat && !hasError && !loadingChats && ((userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.view) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access) || !(userPermissions !== null && userPermissions !== void 0 && userPermissions.view) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access));
341
432
  return /*#__PURE__*/_jsxs(SCSSidebarRoot, {
342
433
  $isOpen: isOpen,
@@ -348,9 +439,9 @@ export var Sidebar = function Sidebar(_ref) {
348
439
  onClick: handleToggleSidebar,
349
440
  isOpen: isOpen,
350
441
  children: /*#__PURE__*/_jsx(ChevronDoubleLeft, {
351
- color: "#4D4D4D",
352
- width: 14,
353
- height: 14
442
+ color: "rgba(102, 102, 102, 1)",
443
+ width: 20,
444
+ height: 20
354
445
  })
355
446
  })
356
447
  }), showNewChatButton ? /*#__PURE__*/_jsx(Tooltip, {
@@ -358,47 +449,53 @@ export var Sidebar = function Sidebar(_ref) {
358
449
  children: /*#__PURE__*/_jsx(SCSWrapperNewChatIcon, {
359
450
  onClick: handleNewChat,
360
451
  children: /*#__PURE__*/_jsx(NewChat, {
361
- width: 14,
362
- height: 14,
363
- color: "#4D4D4D"
452
+ width: 20,
453
+ height: 20
364
454
  })
365
455
  })
366
456
  }) : null]
367
457
  }), /*#__PURE__*/_jsxs(SCSSidebarBody, {
368
458
  $isOpen: isOpen,
369
459
  children: [isOpen ? /*#__PURE__*/_jsxs(SCSSidebarOpenPanel, {
370
- ref: sidebarScrollRef,
371
- children: [/*#__PURE__*/_jsx(SCSSidebarAgentsBlock, {
372
- children: showAgentsNavBlock ? /*#__PURE__*/_jsxs(SCSSidebarAgentsActions, {
373
- children: [canCreateAgents ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
374
- type: "button",
375
- onClick: function onClick() {
376
- eventAmplitude(EVENTS.aiChatMpOpen);
377
- handleOpenCreateAgent();
378
- },
379
- $active: agentsNavActive === 'maiaker',
380
- children: [/*#__PURE__*/_jsx(MaiaStoreIcon, {
381
- size: 16
382
- }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
383
- children: t('conversations.maiakerNav')
384
- })]
385
- }) : null, canViewAgents ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
386
- type: "button",
387
- onClick: handleOpenMarketplace,
388
- $active: agentsNavActive === 'myAgents',
389
- children: [/*#__PURE__*/_jsx(MyAgentsNavIcon, {
390
- size: 16
391
- }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
392
- children: t('conversations.myAgentsNav')
393
- })]
394
- }) : null]
395
- }) : null
460
+ children: [/*#__PURE__*/_jsxs(SCSSidebarAgentsBlock, {
461
+ children: [showAgentsNavBlock ? /*#__PURE__*/_jsxs(_Fragment, {
462
+ children: [/*#__PURE__*/_jsx(SCSSidebarAgentsHeading, {
463
+ children: /*#__PURE__*/_jsx(SCSSidebarAgentsHeadingText, {
464
+ children: t('conversations.agentsSectionTitle')
465
+ })
466
+ }), /*#__PURE__*/_jsxs(SCSSidebarAgentsActions, {
467
+ children: [showMarketplaceSidebarButton ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
468
+ type: "button",
469
+ onClick: function onClick() {
470
+ eventAmplitude(EVENTS.aiChatMpOpen);
471
+ handleOpenCreateAgent();
472
+ },
473
+ $active: agentsNavActive === 'maiaker',
474
+ children: [/*#__PURE__*/_jsx(MaiaStoreIcon, {
475
+ size: 16
476
+ }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
477
+ children: t('conversations.maiakerNav')
478
+ })]
479
+ }) : null, canViewAgents ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
480
+ type: "button",
481
+ onClick: handleOpenMarketplace,
482
+ $active: agentsNavActive === 'myAgents',
483
+ children: [/*#__PURE__*/_jsx(MyAgentsNavIcon, {
484
+ size: 16
485
+ }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
486
+ children: t('conversations.myAgentsNav')
487
+ })]
488
+ }) : null]
489
+ })]
490
+ }) : null, /*#__PURE__*/_jsx(SCSSidebarConversationsHeading, {
491
+ children: t('conversations.title')
492
+ })]
396
493
  }), /*#__PURE__*/_jsx(SCSSidebarChatsScroll, {
397
- $hasChats: chats.length > 0 && !showFullSidebarErrorColumn,
494
+ ref: chatsContainerRef,
495
+ $hasChats: chats.length > 0,
398
496
  $offsetVariant: hasError ? 'error' : 'default',
399
497
  $agentNavButtonCount: agentNavButtonCount,
400
- $fillHeight: showFullSidebarErrorColumn,
401
- children: showFullSidebarErrorColumn ? /*#__PURE__*/_jsxs(SCSSidebarErrorStateColumn, {
498
+ children: hasError && !chats.length ? /*#__PURE__*/_jsxs(SCSSidebarErrorStateColumn, {
402
499
  children: [/*#__PURE__*/_jsx(SCSSidebarErrorStateTop, {
403
500
  children: /*#__PURE__*/_jsx(ErrorState, {})
404
501
  }), /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
@@ -411,24 +508,25 @@ export var Sidebar = function Sidebar(_ref) {
411
508
  }) : loadingChats ? /*#__PURE__*/_jsx(SCSSidebarLoadingArea, {
412
509
  children: /*#__PURE__*/_jsx(Loader, {})
413
510
  }) : chats.length ? /*#__PURE__*/_jsxs(_Fragment, {
414
- children: [sidebarSections.map(function (section) {
415
- return /*#__PURE__*/_jsx(SidebarChatsSection, {
416
- section: section,
417
- collapsed: collapsedSections[section.key],
418
- onToggleCollapse: function onToggleCollapse() {
419
- return handleToggleSectionCollapse(section.key);
511
+ children: [chats.map(function (chat) {
512
+ return /*#__PURE__*/_jsx(ListHistoryChat, {
513
+ chat: chat,
514
+ onClick: function onClick(chatData) {
515
+ if (isOpenModal) {
516
+ setIsOpenModal(null);
517
+ }
518
+ setSelectedChat(chatData.sessionExternalId);
519
+ onGoToChat(chatData);
420
520
  },
421
- onOpenMore: function onOpenMore() {
422
- return handleOpenSectionModal(section.key);
521
+ isModalOpen: isOpenModal === chat.id,
522
+ onOpenModal: handleOpenModal,
523
+ onCloseModal: handleCloseModal,
524
+ handlers: {
525
+ handleDeleteChat: handleDeleteChat,
526
+ handleUpdateChat: handleUpdateChat
423
527
  },
424
- chatMenuState: chatMenuState,
425
- onOpenChatMenu: handleOpenChatMenu,
426
- onCloseChatMenu: handleCloseChatMenu,
427
- handleDeleteChat: handleDeleteChat,
428
- handleUpdateChat: handleUpdateChat,
429
- selectedChatSessionExternalId: selectedChat,
430
- onGoToChat: handleSelectConversation
431
- }, "chat-section-".concat(section.key));
528
+ isSelected: selectedChat === chat.sessionExternalId
529
+ }, chat.id);
432
530
  }), isLoadingMoreChats && /*#__PURE__*/_jsx(SCSSidebarLoadMoreRow, {
433
531
  children: /*#__PURE__*/_jsx(Loader, {})
434
532
  })]
@@ -438,7 +536,7 @@ export var Sidebar = function Sidebar(_ref) {
438
536
  })]
439
537
  })
440
538
  }), /*#__PURE__*/_jsx(SCSSidebarChatsFooter, {
441
- children: showSidebarErrorFooterBanner ? /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
539
+ children: hasError && chats.length ? /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
442
540
  children: [/*#__PURE__*/_jsx(SCSSidebarErrorBannerIconWrap, {
443
541
  children: /*#__PURE__*/_jsx(ErrorIcon, {})
444
542
  }), /*#__PURE__*/_jsx(SCSSidebarErrorBannerMessage, {
@@ -454,39 +552,7 @@ export var Sidebar = function Sidebar(_ref) {
454
552
  isOpen: isOpen
455
553
  }) : null, /*#__PURE__*/_jsx(OnboardingModalButton, {})]
456
554
  })]
457
- }), /*#__PURE__*/_jsx(AnimatePresence, {
458
- children: expandedSectionModalKey && expandedSection ? /*#__PURE__*/_jsxs(_Fragment, {
459
- children: [/*#__PURE__*/_jsx(SCSSidebarSectionModalBackdropMotion, {
460
- "aria-hidden": true,
461
- initial: {
462
- opacity: 0
463
- },
464
- animate: {
465
- opacity: 1
466
- },
467
- exit: {
468
- opacity: 0
469
- },
470
- transition: {
471
- duration: 0.2,
472
- ease: 'easeOut'
473
- }
474
- }, "sidebar-section-chat-backdrop"), /*#__PURE__*/_jsx(SidebarChatsSectionModal, {
475
- section: expandedSection,
476
- onClose: handleCloseSectionModal,
477
- chatMenuState: chatMenuState,
478
- onOpenChatMenu: handleOpenChatMenu,
479
- onCloseChatMenu: handleCloseChatMenu,
480
- handleDeleteChat: handleDeleteChat,
481
- handleUpdateChat: handleUpdateChat,
482
- selectedChatSessionExternalId: selectedChat,
483
- onGoToChat: handleSelectConversation,
484
- hasMoreChats: hasMoreChats,
485
- loadMoreChats: loadMoreChats,
486
- isLoadingMoreChats: isLoadingMoreChats
487
- }, expandedSectionModalKey)]
488
- }) : null
489
555
  })]
490
556
  });
491
557
  };
492
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJBbmltYXRlUHJlc2VuY2UiLCJDaGV2cm9uRG91YmxlTGVmdCIsIlRvb2x0aXAiLCJFbXB0eUhpc3RvcnlJY29uIiwidXNlQ2hhdHMiLCJMb2FkZXIiLCJFcnJvclN0YXRlIiwiTWFpYVN0b3JlSWNvbiIsIk15QWdlbnRzTmF2SWNvbiIsIk5ld0NoYXQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVQiLCJFcnJvckljb24iLCJ1c2VVc2VyIiwiT25ib2FyZGluZ01vZGFsQnV0dG9uIiwiRmVlZGJhY2tCdXR0b24iLCJ1c2VHbG9iYWxDb250ZXh0IiwiZmV0Y2hNYWlhIiwibWFwQ09STGFuZyIsIlNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24iLCJTQ1NXcmFwcGVyTmV3Q2hhdEljb24iLCJTQ1NTaWRlYmFyUm9vdCIsIlNDU1NpZGViYXJUb29sYmFyIiwiU0NTU2lkZWJhckJvZHkiLCJTQ1NTaWRlYmFyT3BlblBhbmVsIiwiU0NTU2lkZWJhckFnZW50c0Jsb2NrIiwiU0NTU2lkZWJhckFnZW50c0FjdGlvbnMiLCJTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbiIsIlNDU1NpZGViYXJNYWlha2VyTmF2TGFiZWwiLCJTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwiLCJTQ1NTaWRlYmFyRXJyb3JTdGF0ZUNvbHVtbiIsIlNDU1NpZGViYXJFcnJvclN0YXRlVG9wIiwiU0NTU2lkZWJhckVycm9yQmFubmVyIiwiU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXAiLCJTQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlIiwiU0NTU2lkZWJhckxvYWRpbmdBcmVhIiwiU0NTU2lkZWJhckxvYWRNb3JlUm93IiwiU0NTU2lkZWJhckVtcHR5Q2hhdHMiLCJTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQiLCJTQ1NTaWRlYmFyQ2hhdHNGb290ZXIiLCJTQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucyIsIlNDU1NpZGViYXJTZWN0aW9uTW9kYWxCYWNrZHJvcE1vdGlvbiIsIlNpZGViYXJDaGF0c1NlY3Rpb24iLCJTaWRlYmFyQ2hhdHNTZWN0aW9uTW9kYWwiLCJidWlsZFNpZGViYXJTZWN0aW9ucyIsImdyb3VwQ2hhdHNCeVNpZGViYXJTZWN0aW9uIiwiU0lERUJBUl9TRUNUSU9OX1RSQU5TTEFUSU9OX0tFWVMiLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJTRUNUSU9OX01PREFMX1NFU1NJT05TX1BBR0VfTElNSVQiLCJTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJTaWRlYmFyIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwib25Hb1RvQ2hhdCIsIl9yZWYkb25FcnJvciIsIm9uRXJyb3IiLCJoYW5kbGVHb1RvSG9tZSIsImhhbmRsZU9wZW5NYXJrZXRwbGFjZSIsInNob3dOZXdDaGF0IiwicmVmZXRjaENoYXRzIiwiaGFuZGxlU2V0UmVmZXRjaENoYXRzIiwiaGFzRXJyb3IiLCJyZXNldFNlbGVjdGVkQ2hhdFJlZiIsIl9yZWYkYWdlbnRzTmF2QWN0aXZlIiwiYWdlbnRzTmF2QWN0aXZlIiwiX3VzZVQiLCJ0IiwiaTE4biIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzT3BlbiIsInNldElzT3BlbiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiY2hhdE1lbnVTdGF0ZSIsInNldENoYXRNZW51U3RhdGUiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5Iiwic2V0RXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkiLCJfdXNlU3RhdGU3IiwiY2xpZW50cyIsInByb2plY3RzIiwiYWdlbnRzQnlDb21wYW55IiwiX3VzZVN0YXRlOCIsImNvbGxhcHNlZFNlY3Rpb25zIiwic2V0Q29sbGFwc2VkU2VjdGlvbnMiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNlbGVjdGVkQ2hhdCIsInNldFNlbGVjdGVkQ2hhdCIsImNoYXRzRmV0Y2hlZFJlZiIsInNpZGViYXJTY3JvbGxSZWYiLCJ1c2VyIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdGVkQWdlbnQiLCJhZ2VudCIsInNlbGVjdEFnZW50Iiwic2V0UHJvamVjdCIsInNldENsaWVudCIsIl91c2VDaGF0cyIsImxvYWRpbmdDaGF0cyIsImNoYXRzIiwiZGVsZXRlQ2hhdCIsInVwZGF0ZUNoYXQiLCJmZXRjaENoYXRzIiwiaGFzTW9yZUNoYXRzIiwibG9hZE1vcmVDaGF0cyIsImlzTG9hZGluZ01vcmVDaGF0cyIsInNlc3Npb25zR3JvdXBIYXNNb3JlIiwic2hvd0Z1bGxTaWRlYmFyRXJyb3JDb2x1bW4iLCJsZW5ndGgiLCJzaG93U2lkZWJhckVycm9yRm9vdGVyQmFubmVyIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjYW5DcmVhdGVBZ2VudHMiLCJjcmVhdGUiLCJjYW5WaWV3QWdlbnRzIiwidmlldyIsImFnZW50TmF2QnV0dG9uQ291bnQiLCJzaG93QWdlbnRzTmF2QmxvY2siLCJncm91cGVkQ2hhdHMiLCJzaWRlYmFyU2VjdGlvbnMiLCJrZXkiLCJfdXNlciRjb21wYW55IiwiY29tcGFueU5hbWUiLCJjb21wYW55IiwidHJpbSIsImV4cGFuZGVkU2VjdGlvbiIsImZpbmQiLCJzZWN0aW9uIiwiY3VycmVudCIsImhhbmRsZURlbGV0ZUNoYXQiLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiY2hhdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0Iiwic2Vzc2lvbkV4dGVybmFsSWQiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZVVwZGF0ZUNoYXQiLCJoYW5kbGVPcGVuQ2hhdE1lbnUiLCJjaGF0SWQiLCJzdXJmYWNlIiwiaGFuZGxlQ2xvc2VDaGF0TWVudSIsImhhbmRsZU9wZW5TZWN0aW9uTW9kYWwiLCJfcmVmMyIsIl9jYWxsZWUyIiwic2VjdGlvbktleSIsIl9nZXRDaGF0c1N0b3JlU3RhdGUiLCJzdG9yZUxpbWl0IiwiX2NvbnRleHQyIiwibGltaXQiLCJvZmZzZXQiLCJzaG93R2xvYmFsTG9hZGVyIiwiX3gyIiwiaGFuZGxlQ2xvc2VTZWN0aW9uTW9kYWwiLCJoYW5kbGVUb2dnbGVTZWN0aW9uQ29sbGFwc2UiLCJfb2JqZWN0U3ByZWFkIiwiX2RlZmluZVByb3BlcnR5IiwiaGFuZGxlU2VsZWN0Q29udmVyc2F0aW9uIiwiY2hhdERhdGEiLCJoYW5kbGVDbGlja091dHNpZGUiLCJldmVudCIsInRhcmdldCIsImNsb3Nlc3QiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlVG9nZ2xlU2lkZWJhciIsImhhbmRsZU9wZW5DcmVhdGVBZ2VudCIsIl9yZWY0IiwiX2NhbGxlZTMiLCJyZXNwb25zZSIsImRhdGEiLCJtYWlha2VyQWdlbnQiLCJfY29udGV4dDMiLCJwYXRoIiwiY29uY2F0IiwibGFuZ3VhZ2UiLCJtZXRob2QiLCJzZW50IiwianNvbiIsInR5cGUiLCJlbnRpdHkiLCJhYnJ1cHQiLCJoYW5kbGVOZXdDaGF0IiwiX3JlZjUiLCJfY2FsbGVlNCIsIl9jb250ZXh0NCIsImhhbmRsZVJlZmV0Y2hTZXNzaW9uIiwic2hvd05ld0NoYXRCdXR0b24iLCJpc19kZWxldGVkIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsImhhc19ub3RfYWNjZXNzIiwiJGlzT3BlbiIsImNoaWxkcmVuIiwidGl0bGUiLCJvbkNsaWNrIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsInJlZiIsImFpQ2hhdE1wT3BlbiIsIiRhY3RpdmUiLCJzaXplIiwiJGhhc0NoYXRzIiwiJG9mZnNldFZhcmlhbnQiLCIkYWdlbnROYXZCdXR0b25Db3VudCIsIiRmaWxsSGVpZ2h0IiwibWFwIiwiY29sbGFwc2VkIiwib25Ub2dnbGVDb2xsYXBzZSIsIm9uT3Blbk1vcmUiLCJvbk9wZW5DaGF0TWVudSIsIm9uQ2xvc2VDaGF0TWVudSIsInNlbGVjdGVkQ2hhdFNlc3Npb25FeHRlcm5hbElkIiwiJGp1c3RpZnlCZXR3ZWVuIiwiaW5pdGlhbCIsIm9wYWNpdHkiLCJhbmltYXRlIiwiZXhpdCIsInRyYW5zaXRpb24iLCJkdXJhdGlvbiIsImVhc2UiLCJvbkNsb3NlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL1NpZGViYXIvU2lkZWJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCB7IE11dGFibGVSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlIH0gZnJvbSAnZnJhbWVyLW1vdGlvbidcbmltcG9ydCB7IENoZXZyb25Eb3VibGVMZWZ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hldnJvbkRvdWJsZUxlZnQnXG5cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcblxuaW1wb3J0IHsgRW1wdHlIaXN0b3J5SWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL0VtcHR5SGlzdG9yeSdcbmltcG9ydCB7IHVzZUNoYXRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2hhdHMnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBFcnJvclN0YXRlLCBNYWlhU3RvcmVJY29uLCBNeUFnZW50c05hdkljb24sIE5ld0NoYXQgfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgRXJyb3JJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvRXJyb3JJY29uJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBPbmJvYXJkaW5nTW9kYWxCdXR0b24gfSBmcm9tICcuLi8uLi9hdG9tcy9PbmJvYXJkaW5nTW9kYWxCdXR0b24nXG5pbXBvcnQgeyBGZWVkYmFja0J1dHRvbiB9IGZyb20gJy4uLy4uL2F0b21zL0ZlZWRiYWNrQnV0dG9uJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL2NsaWVudCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgU0NTV3JhcHBlckNvbGxhcHNlZEJ1dHRvbiwgU0NTV3JhcHBlck5ld0NoYXRJY29uIH0gZnJvbSAnLi9TaWRlYmFyLnN0eWxlcydcbmltcG9ydCB7XG4gIFNDU1NpZGViYXJSb290LFxuICBTQ1NTaWRlYmFyVG9vbGJhcixcbiAgU0NTU2lkZWJhckJvZHksXG4gIFNDU1NpZGViYXJPcGVuUGFuZWwsXG4gIFNDU1NpZGViYXJBZ2VudHNCbG9jayxcbiAgU0NTU2lkZWJhckFnZW50c0FjdGlvbnMsXG4gIFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uLFxuICBTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsLFxuICBTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwsXG4gIFNDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uLFxuICBTQ1NTaWRlYmFyRXJyb3JTdGF0ZVRvcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyLFxuICBTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZSxcbiAgU0NTU2lkZWJhckxvYWRpbmdBcmVhLFxuICBTQ1NTaWRlYmFyTG9hZE1vcmVSb3csXG4gIFNDU1NpZGViYXJFbXB0eUNoYXRzLFxuICBTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQsXG4gIFNDU1NpZGViYXJDaGF0c0Zvb3RlcixcbiAgU0NTU2lkZWJhckZvb3RlckFjdGlvbnMsXG59IGZyb20gJy4vU2lkZWJhci5sYXlvdXQuc3R5bGVzJ1xuaW1wb3J0IHsgU0NTU2lkZWJhclNlY3Rpb25Nb2RhbEJhY2tkcm9wTW90aW9uIH0gZnJvbSAnLi9TaWRlYmFyQ2hhdHMuc3R5bGVzJ1xuaW1wb3J0IHsgU2lkZWJhckNoYXRzU2VjdGlvbiB9IGZyb20gJy4vU2lkZWJhckNoYXRzU2VjdGlvbidcbmltcG9ydCB7IFNpZGViYXJDaGF0c1NlY3Rpb25Nb2RhbCB9IGZyb20gJy4vU2lkZWJhckNoYXRzU2VjdGlvbk1vZGFsJ1xuaW1wb3J0IHsgYnVpbGRTaWRlYmFyU2VjdGlvbnMsIGdyb3VwQ2hhdHNCeVNpZGViYXJTZWN0aW9uIH0gZnJvbSAnLi9zaWRlYmFyQ2hhdHMuaGVscGVycydcbmltcG9ydCB0eXBlIHsgU2lkZWJhckNoYXRNZW51U3VyZmFjZSwgU2lkZWJhckNoYXRNZW51U3RhdGUsIFNpZGViYXJTZWN0aW9uS2V5IH0gZnJvbSAnLi9zaWRlYmFyQ2hhdHMudHlwZXMnXG5pbXBvcnQgeyBTSURFQkFSX1NFQ1RJT05fVFJBTlNMQVRJT05fS0VZUyB9IGZyb20gJy4vc2lkZWJhckNoYXRzLnR5cGVzJ1xuaW1wb3J0IHsgZ2V0Q2hhdHNTdG9yZVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlQ2hhdHNTdG9yZSdcbmltcG9ydCB7IFNFQ1RJT05fTU9EQUxfU0VTU0lPTlNfUEFHRV9MSU1JVCwgU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlUIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvY2hhdHNTdG9yZS50eXBlcydcblxuZXhwb3J0IGNvbnN0IFNpZGViYXIgPSAoe1xuICBvbkdvVG9DaGF0LFxuICBvbkVycm9yID0gKCkgPT4gbnVsbCxcbiAgaGFuZGxlR29Ub0hvbWUsXG4gIGhhbmRsZU9wZW5NYXJrZXRwbGFjZSxcbiAgc2hvd05ld0NoYXQsXG4gIHJlZmV0Y2hDaGF0cyxcbiAgaGFuZGxlU2V0UmVmZXRjaENoYXRzLFxuICBoYXNFcnJvcixcbiAgcmVzZXRTZWxlY3RlZENoYXRSZWYsXG4gIGFnZW50c05hdkFjdGl2ZSA9IG51bGwsXG59OiB7XG4gIG9uR29Ub0NoYXQ6IChjaGF0SWQ6IHN0cmluZykgPT4gdm9pZFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIGhhbmRsZUdvVG9Ib21lOiAoKSA9PiB2b2lkXG4gIGhhbmRsZU9wZW5NYXJrZXRwbGFjZTogKCkgPT4gdm9pZFxuICBzaG93TmV3Q2hhdDogYm9vbGVhblxuICByZWZldGNoQ2hhdHM6IGJvb2xlYW5cbiAgaGFuZGxlU2V0UmVmZXRjaENoYXRzOiAocmVmZXRjaDogYm9vbGVhbikgPT4gdm9pZFxuICBoYXNFcnJvcjogYm9vbGVhblxuICByZXNldFNlbGVjdGVkQ2hhdFJlZj86IE11dGFibGVSZWZPYmplY3Q8KCgpID0+IHZvaWQpIHwgbnVsbD5cbiAgLyoqIFJlc2FsdGEgTWFpYWtlciBvIE1pcyBhZ2VudGVzICovXG4gIGFnZW50c05hdkFjdGl2ZT86ICdtYWlha2VyJyB8ICdteUFnZW50cycgfCBudWxsXG59KSA9PiB7XG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVCgpXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbY2hhdE1lbnVTdGF0ZSwgc2V0Q2hhdE1lbnVTdGF0ZV0gPSB1c2VTdGF0ZTxTaWRlYmFyQ2hhdE1lbnVTdGF0ZT4obnVsbClcbiAgY29uc3QgW2V4cGFuZGVkU2VjdGlvbk1vZGFsS2V5LCBzZXRFeHBhbmRlZFNlY3Rpb25Nb2RhbEtleV0gPSB1c2VTdGF0ZTxTaWRlYmFyU2VjdGlvbktleSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtjb2xsYXBzZWRTZWN0aW9ucywgc2V0Q29sbGFwc2VkU2VjdGlvbnNdID0gdXNlU3RhdGU8UmVjb3JkPFNpZGViYXJTZWN0aW9uS2V5LCBib29sZWFuPj4oe1xuICAgIGNsaWVudHM6IGZhbHNlLFxuICAgIHByb2plY3RzOiBmYWxzZSxcbiAgICBhZ2VudHNCeUNvbXBhbnk6IGZhbHNlLFxuICB9KVxuICBjb25zdCBbc2VsZWN0ZWRDaGF0LCBzZXRTZWxlY3RlZENoYXRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY2hhdHNGZXRjaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaWRlYmFyU2Nyb2xsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGFnZW50OiBzZWxlY3RlZEFnZW50LCBzZWxlY3RBZ2VudCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3Qge1xuICAgIGxvYWRpbmdDaGF0cyxcbiAgICBjaGF0cyxcbiAgICBkZWxldGVDaGF0LFxuICAgIHVwZGF0ZUNoYXQsXG4gICAgZmV0Y2hDaGF0cyxcbiAgICBoYXNNb3JlQ2hhdHMsXG4gICAgbG9hZE1vcmVDaGF0cyxcbiAgICBpc0xvYWRpbmdNb3JlQ2hhdHMsXG4gICAgc2Vzc2lvbnNHcm91cEhhc01vcmUsXG4gIH0gPSB1c2VDaGF0cyh7XG4gICAgb25FcnJvcixcbiAgfSlcblxuICBjb25zdCBzaG93RnVsbFNpZGViYXJFcnJvckNvbHVtbiA9IGhhc0Vycm9yICYmICFjaGF0cy5sZW5ndGhcbiAgY29uc3Qgc2hvd1NpZGViYXJFcnJvckZvb3RlckJhbm5lciA9IGhhc0Vycm9yICYmIGNoYXRzLmxlbmd0aCA+IDBcblxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG4gIGNvbnN0IGNhbkNyZWF0ZUFnZW50cyA9ICEhdXNlclBlcm1pc3Npb25zPy5jcmVhdGVcbiAgY29uc3QgY2FuVmlld0FnZW50cyA9ICEhdXNlclBlcm1pc3Npb25zPy52aWV3XG4gIGNvbnN0IGFnZW50TmF2QnV0dG9uQ291bnQgPSAoY2FuQ3JlYXRlQWdlbnRzID8gMiA6IGNhblZpZXdBZ2VudHMgPyAxIDogMCkgYXMgMCB8IDEgfCAyXG4gIGNvbnN0IHNob3dBZ2VudHNOYXZCbG9jayA9IGNhbkNyZWF0ZUFnZW50cyB8fCBjYW5WaWV3QWdlbnRzXG5cbiAgY29uc3QgZ3JvdXBlZENoYXRzID0gdXNlTWVtbygoKSA9PiBncm91cENoYXRzQnlTaWRlYmFyU2VjdGlvbihjaGF0cyksIFtjaGF0c10pXG5cbiAgY29uc3Qgc2lkZWJhclNlY3Rpb25zID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYnVpbGRTaWRlYmFyU2VjdGlvbnMoXG4gICAgICAgIGdyb3VwZWRDaGF0cyxcbiAgICAgICAga2V5ID0+XG4gICAgICAgICAga2V5ID09PSAnYWdlbnRzQnlDb21wYW55J1xuICAgICAgICAgICAgPyB0KFNJREVCQVJfU0VDVElPTl9UUkFOU0xBVElPTl9LRVlTW2tleV0sIHsgY29tcGFueU5hbWU6IHVzZXIuY29tcGFueT8udHJpbSgpIHx8ICfigJQnIH0pXG4gICAgICAgICAgICA6IHQoU0lERUJBUl9TRUNUSU9OX1RSQU5TTEFUSU9OX0tFWVNba2V5XSksXG4gICAgICAgIHNlc3Npb25zR3JvdXBIYXNNb3JlXG4gICAgICApLFxuICAgIFtncm91cGVkQ2hhdHMsIHQsIHVzZXIuY29tcGFueSwgc2Vzc2lvbnNHcm91cEhhc01vcmVdXG4gIClcblxuICBjb25zdCBleHBhbmRlZFNlY3Rpb24gPSBleHBhbmRlZFNlY3Rpb25Nb2RhbEtleVxuICAgID8gc2lkZWJhclNlY3Rpb25zLmZpbmQoc2VjdGlvbiA9PiBzZWN0aW9uLmtleSA9PT0gZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkpIHx8IG51bGxcbiAgICA6IG51bGxcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZikge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCA9ICgpID0+IHNldFNlbGVjdGVkQ2hhdChudWxsKVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmKSB7XG4gICAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LCBbcmVzZXRTZWxlY3RlZENoYXRSZWZdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUNoYXQgPSBhc3luYyAoY2hhdDogYW55KSA9PiB7XG4gICAgZGVsZXRlQ2hhdChjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgICBoYW5kbGVHb1RvSG9tZSgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVVcGRhdGVDaGF0ID0gKGNoYXQ6IGFueSkgPT4ge1xuICAgIHVwZGF0ZUNoYXQoY2hhdClcbiAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPcGVuQ2hhdE1lbnUgPSAoY2hhdElkOiBzdHJpbmcsIHN1cmZhY2U6IFNpZGViYXJDaGF0TWVudVN1cmZhY2UpID0+IHtcbiAgICBzZXRDaGF0TWVudVN0YXRlKHByZXYgPT4gKHByZXY/LmNoYXRJZCA9PT0gY2hhdElkICYmIHByZXY/LnN1cmZhY2UgPT09IHN1cmZhY2UgPyBudWxsIDogeyBjaGF0SWQsIHN1cmZhY2UgfSkpXG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZUNoYXRNZW51ID0gKCkgPT4ge1xuICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5TZWN0aW9uTW9kYWwgPSBhc3luYyAoc2VjdGlvbktleTogU2lkZWJhclNlY3Rpb25LZXkpID0+IHtcbiAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gICAgY29uc3QgeyBsaW1pdDogc3RvcmVMaW1pdCB9ID0gZ2V0Q2hhdHNTdG9yZVN0YXRlKClcbiAgICBpZiAoc3RvcmVMaW1pdCA9PT0gU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlUKSB7XG4gICAgICBhd2FpdCBmZXRjaENoYXRzKHtcbiAgICAgICAgbGltaXQ6IFNFQ1RJT05fTU9EQUxfU0VTU0lPTlNfUEFHRV9MSU1JVCxcbiAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICBzaG93R2xvYmFsTG9hZGVyOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICAgIHNldEV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KHNlY3Rpb25LZXkpXG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZVNlY3Rpb25Nb2RhbCA9ICgpID0+IHtcbiAgICBzZXRFeHBhbmRlZFNlY3Rpb25Nb2RhbEtleShudWxsKVxuICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZVNlY3Rpb25Db2xsYXBzZSA9IChzZWN0aW9uS2V5OiBTaWRlYmFyU2VjdGlvbktleSkgPT4ge1xuICAgIHNldENvbGxhcHNlZFNlY3Rpb25zKHByZXYgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBbc2VjdGlvbktleV06ICFwcmV2W3NlY3Rpb25LZXldLFxuICAgIH0pKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0Q29udmVyc2F0aW9uID0gKGNoYXREYXRhOiBhbnkpID0+IHtcbiAgICBzZXRTZWxlY3RlZENoYXQoY2hhdERhdGEuc2Vzc2lvbkV4dGVybmFsSWQpXG4gICAgb25Hb1RvQ2hhdChjaGF0RGF0YSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgRWxlbWVudFxuICAgICAgaWYgKGNoYXRNZW51U3RhdGUgJiYgIXRhcmdldC5jbG9zZXN0KCdbZGF0YS1tb2RhbC1jb250YWluZXJdJykpIHtcbiAgICAgICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICAgICAgfVxuICAgICAgaWYgKGV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5ICYmICF0YXJnZXQuY2xvc2VzdCgnW2RhdGEtc2VjdGlvbi1tb2RhbC1jb250YWluZXJdJykpIHtcbiAgICAgICAgc2V0RXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkobnVsbClcbiAgICAgICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGF0TWVudVN0YXRlIHx8IGV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG4gIH0sIFtjaGF0TWVudVN0YXRlLCBleHBhbmRlZFNlY3Rpb25Nb2RhbEtleV0pXG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlU2lkZWJhciA9ICgpID0+IHtcbiAgICBpZiAoY2hhdE1lbnVTdGF0ZSkge1xuICAgICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICAgIH1cbiAgICBpZiAoZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkpIHtcbiAgICAgIHNldEV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KG51bGwpXG4gICAgfVxuICAgIHNldElzT3BlbihwcmV2ID0+ICFwcmV2KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlT3BlbkNyZWF0ZUFnZW50ID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgIHBhdGg6IGBhZ2VudHM/YWdlbnRfdHlwZT1jbG9uZSZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICB9KVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICBjb25zdCBtYWlha2VyQWdlbnQgPSAoZGF0YS5kYXRhIHx8IFtdKS5maW5kKChhZ2VudDogYW55KSA9PiBhZ2VudC50eXBlID09PSAnY2xvbmUnICYmIGFnZW50LmVudGl0eSA9PT0gJ2dsb2JhbCcpXG5cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0UHJvamVjdChudWxsKVxuICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgc2VsZWN0QWdlbnQobWFpYWtlckFnZW50KVxuICAgIGhhbmRsZUdvVG9Ib21lKClcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiAmJiAhY2hhdHNGZXRjaGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRzRmV0Y2hlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0OiBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQsIG9mZnNldDogMCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChyZWZldGNoQ2hhdHMpIHtcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdDogU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlULCBvZmZzZXQ6IDAgfSlcbiAgICAgIGhhbmRsZVNldFJlZmV0Y2hDaGF0cyhmYWxzZSlcbiAgICB9XG4gIH0sIFtpc09wZW4sIHJlZmV0Y2hDaGF0cywgaGFuZGxlU2V0UmVmZXRjaENoYXRzLCBmZXRjaENoYXRzXSlcblxuICAvKiogRWwgc2Nyb2xsIGluZmluaXRvIGRlIHNlc2lvbmVzIHZpdmUgc29sbyBlbiBlbCBtb2RhbCBkZSBzZWNjacOzbiAoYFNpZGViYXJDaGF0c1NlY3Rpb25Nb2RhbGApLiAqL1xuXG4gIGNvbnN0IGhhbmRsZU5ld0NoYXQgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGNoYXRNZW51U3RhdGUpIHtcbiAgICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgICB9XG4gICAgc2V0U2VsZWN0ZWRDaGF0KG51bGwpXG4gICAgYXdhaXQgZmV0Y2hDaGF0cyh7XG4gICAgICBsaW1pdDogZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkgPyBTRUNUSU9OX01PREFMX1NFU1NJT05TX1BBR0VfTElNSVQgOiBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQsXG4gICAgICBvZmZzZXQ6IDAsXG4gICAgfSlcbiAgICBoYW5kbGVHb1RvSG9tZSgpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlZmV0Y2hTZXNzaW9uID0gKCkgPT4ge1xuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0OiBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQsIG9mZnNldDogMCB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdyZWZldGNoLXNlc3Npb24nLCBoYW5kbGVSZWZldGNoU2Vzc2lvbilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVmZXRjaC1zZXNzaW9uJywgaGFuZGxlUmVmZXRjaFNlc3Npb24pXG4gICAgfVxuICB9LCBbZmV0Y2hDaGF0c10pXG5cbiAgY29uc3Qgc2hvd05ld0NoYXRCdXR0b24gPVxuICAgICFzaG93TmV3Q2hhdCAmJlxuICAgICFoYXNFcnJvciAmJlxuICAgICFsb2FkaW5nQ2hhdHMgJiZcbiAgICAoKHVzZXJQZXJtaXNzaW9ucz8udmlldyAmJlxuICAgICAgIXNlbGVjdGVkQWdlbnQ/LmlzX2RlbGV0ZWQgJiZcbiAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zICYmXG4gICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9hY2Nlc3MpIHx8XG4gICAgICAoIXVzZXJQZXJtaXNzaW9ucz8udmlldyAmJlxuICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaXNfZGVsZXRlZCAmJlxuICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyAmJlxuICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9hY2Nlc3MpKVxuXG4gIHJldHVybiAoXG4gICAgPFNDU1NpZGViYXJSb290ICRpc09wZW49e2lzT3Blbn0+XG4gICAgICA8U0NTU2lkZWJhclRvb2xiYXIgJGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2lzT3BlbiA/IHQoJ2NvbnZlcnNhdGlvbnMuY29sbGFwc2UnKSA6IHQoJ2NvbnZlcnNhdGlvbnMuZXhwYW5kJyl9PlxuICAgICAgICAgIDxTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZVNpZGViYXJ9IGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAgICAgIDxDaGV2cm9uRG91YmxlTGVmdCBjb2xvcj1cIiM0RDRENERcIiB3aWR0aD17MTR9IGhlaWdodD17MTR9IC8+XG4gICAgICAgICAgPC9TQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uPlxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIHtzaG93TmV3Q2hhdEJ1dHRvbiA/IChcbiAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY29udmVyc2F0aW9ucy5uZXdDaGF0Jyl9PlxuICAgICAgICAgICAgPFNDU1dyYXBwZXJOZXdDaGF0SWNvbiBvbkNsaWNrPXtoYW5kbGVOZXdDaGF0fT5cbiAgICAgICAgICAgICAgPE5ld0NoYXQgd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSBjb2xvcj1cIiM0RDRENERcIiAvPlxuICAgICAgICAgICAgPC9TQ1NXcmFwcGVyTmV3Q2hhdEljb24+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvU0NTU2lkZWJhclRvb2xiYXI+XG4gICAgICA8U0NTU2lkZWJhckJvZHkgJGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAge2lzT3BlbiA/IChcbiAgICAgICAgICA8U0NTU2lkZWJhck9wZW5QYW5lbCByZWY9e3NpZGViYXJTY3JvbGxSZWZ9PlxuICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNCbG9jaz5cbiAgICAgICAgICAgICAge3Nob3dBZ2VudHNOYXZCbG9jayA/IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckFnZW50c0FjdGlvbnM+XG4gICAgICAgICAgICAgICAgICB7Y2FuQ3JlYXRlQWdlbnRzID8gKFxuICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhck1haWFrZXJOYXZCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0TXBPcGVuKVxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3BlbkNyZWF0ZUFnZW50KClcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICRhY3RpdmU9e2FnZW50c05hdkFjdGl2ZSA9PT0gJ21haWFrZXInfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPE1haWFTdG9yZUljb24gc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+e3QoJ2NvbnZlcnNhdGlvbnMubWFpYWtlck5hdicpfTwvU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAge2NhblZpZXdBZ2VudHMgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU9wZW5NYXJrZXRwbGFjZX1cbiAgICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXthZ2VudHNOYXZBY3RpdmUgPT09ICdteUFnZW50cyd9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8TXlBZ2VudHNOYXZJY29uIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPnt0KCdjb252ZXJzYXRpb25zLm15QWdlbnRzTmF2Jyl9PC9TQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQWdlbnRzQWN0aW9ucz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L1NDU1NpZGViYXJBZ2VudHNCbG9jaz5cbiAgICAgICAgICAgIDxTQ1NTaWRlYmFyQ2hhdHNTY3JvbGxcbiAgICAgICAgICAgICAgJGhhc0NoYXRzPXtjaGF0cy5sZW5ndGggPiAwICYmICFzaG93RnVsbFNpZGViYXJFcnJvckNvbHVtbn1cbiAgICAgICAgICAgICAgJG9mZnNldFZhcmlhbnQ9e2hhc0Vycm9yID8gJ2Vycm9yJyA6ICdkZWZhdWx0J31cbiAgICAgICAgICAgICAgJGFnZW50TmF2QnV0dG9uQ291bnQ9e2FnZW50TmF2QnV0dG9uQ291bnR9XG4gICAgICAgICAgICAgICRmaWxsSGVpZ2h0PXtzaG93RnVsbFNpZGViYXJFcnJvckNvbHVtbn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3Nob3dGdWxsU2lkZWJhckVycm9yQ29sdW1uID8gKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JTdGF0ZUNvbHVtbj5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JTdGF0ZVRvcD5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9yU3RhdGUgLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yU3RhdGVUb3A+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVyPlxuICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXA+XG4gICAgICAgICAgICAgICAgICAgICAgPEVycm9ySWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lckljb25XcmFwPlxuICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZT57dCgnY29udmVyc2F0aW9ucy5lcnJvcicpfTwvU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yQmFubmVyPlxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yU3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgICkgOiBsb2FkaW5nQ2hhdHMgPyAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJMb2FkaW5nQXJlYT5cbiAgICAgICAgICAgICAgICAgIDxMb2FkZXIgLz5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJMb2FkaW5nQXJlYT5cbiAgICAgICAgICAgICAgKSA6IGNoYXRzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAge3NpZGViYXJTZWN0aW9ucy5tYXAoc2VjdGlvbiA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxTaWRlYmFyQ2hhdHNTZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtgY2hhdC1zZWN0aW9uLSR7c2VjdGlvbi5rZXl9YH1cbiAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uPXtzZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZD17Y29sbGFwc2VkU2VjdGlvbnNbc2VjdGlvbi5rZXldfVxuICAgICAgICAgICAgICAgICAgICAgIG9uVG9nZ2xlQ29sbGFwc2U9eygpID0+IGhhbmRsZVRvZ2dsZVNlY3Rpb25Db2xsYXBzZShzZWN0aW9uLmtleSl9XG4gICAgICAgICAgICAgICAgICAgICAgb25PcGVuTW9yZT17KCkgPT4gaGFuZGxlT3BlblNlY3Rpb25Nb2RhbChzZWN0aW9uLmtleSl9XG4gICAgICAgICAgICAgICAgICAgICAgY2hhdE1lbnVTdGF0ZT17Y2hhdE1lbnVTdGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBvbk9wZW5DaGF0TWVudT17aGFuZGxlT3BlbkNoYXRNZW51fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2VDaGF0TWVudT17aGFuZGxlQ2xvc2VDaGF0TWVudX1cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVEZWxldGVDaGF0PXtoYW5kbGVEZWxldGVDaGF0fVxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVVwZGF0ZUNoYXQ9e2hhbmRsZVVwZGF0ZUNoYXR9XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGF0U2Vzc2lvbkV4dGVybmFsSWQ9e3NlbGVjdGVkQ2hhdH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkdvVG9DaGF0PXtoYW5kbGVTZWxlY3RDb252ZXJzYXRpb259XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIHtpc0xvYWRpbmdNb3JlQ2hhdHMgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckxvYWRNb3JlUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxMb2FkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTG9hZE1vcmVSb3c+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRW1wdHlDaGF0cz5cbiAgICAgICAgICAgICAgICAgIDxFbXB0eUhpc3RvcnlJY29uIC8+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVtcHR5Q2hhdHNUZXh0Pnt0KCdjb252ZXJzYXRpb25zLmVtcHR5Jyl9PC9TQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQ+XG4gICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRW1wdHlDaGF0cz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU0NTU2lkZWJhckNoYXRzU2Nyb2xsPlxuICAgICAgICAgICAgPFNDU1NpZGViYXJDaGF0c0Zvb3Rlcj5cbiAgICAgICAgICAgICAge3Nob3dTaWRlYmFyRXJyb3JGb290ZXJCYW5uZXIgPyAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9ySWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlPnt0KCdjb252ZXJzYXRpb25zLmVycm9yJyl9PC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlPlxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yQmFubmVyPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NTU2lkZWJhckNoYXRzRm9vdGVyPlxuICAgICAgICAgIDwvU0NTU2lkZWJhck9wZW5QYW5lbD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxTQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucyAkaXNPcGVuPXtpc09wZW59ICRqdXN0aWZ5QmV0d2Vlbj17ISFzZWxlY3RlZEFnZW50fT5cbiAgICAgICAgICB7c2VsZWN0ZWRBZ2VudCA/IDxGZWVkYmFja0J1dHRvbiBzZWxlY3RlZEFnZW50PXtzZWxlY3RlZEFnZW50fSBpc09wZW49e2lzT3Blbn0gLz4gOiBudWxsfVxuICAgICAgICAgIDxPbmJvYXJkaW5nTW9kYWxCdXR0b24gLz5cbiAgICAgICAgPC9TQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucz5cbiAgICAgIDwvU0NTU2lkZWJhckJvZHk+XG4gICAgICA8QW5pbWF0ZVByZXNlbmNlPlxuICAgICAgICB7ZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkgJiYgZXhwYW5kZWRTZWN0aW9uID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8U0NTU2lkZWJhclNlY3Rpb25Nb2RhbEJhY2tkcm9wTW90aW9uXG4gICAgICAgICAgICAgIGtleT1cInNpZGViYXItc2VjdGlvbi1jaGF0LWJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgYXJpYS1oaWRkZW5cbiAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwIH19XG4gICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSB9fVxuICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yLCBlYXNlOiAnZWFzZU91dCcgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8U2lkZWJhckNoYXRzU2VjdGlvbk1vZGFsXG4gICAgICAgICAgICAgIGtleT17ZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXl9XG4gICAgICAgICAgICAgIHNlY3Rpb249e2V4cGFuZGVkU2VjdGlvbn1cbiAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VTZWN0aW9uTW9kYWx9XG4gICAgICAgICAgICAgIGNoYXRNZW51U3RhdGU9e2NoYXRNZW51U3RhdGV9XG4gICAgICAgICAgICAgIG9uT3BlbkNoYXRNZW51PXtoYW5kbGVPcGVuQ2hhdE1lbnV9XG4gICAgICAgICAgICAgIG9uQ2xvc2VDaGF0TWVudT17aGFuZGxlQ2xvc2VDaGF0TWVudX1cbiAgICAgICAgICAgICAgaGFuZGxlRGVsZXRlQ2hhdD17aGFuZGxlRGVsZXRlQ2hhdH1cbiAgICAgICAgICAgICAgaGFuZGxlVXBkYXRlQ2hhdD17aGFuZGxlVXBkYXRlQ2hhdH1cbiAgICAgICAgICAgICAgc2VsZWN0ZWRDaGF0U2Vzc2lvbkV4dGVybmFsSWQ9e3NlbGVjdGVkQ2hhdH1cbiAgICAgICAgICAgICAgb25Hb1RvQ2hhdD17aGFuZGxlU2VsZWN0Q29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICBoYXNNb3JlQ2hhdHM9e2hhc01vcmVDaGF0c31cbiAgICAgICAgICAgICAgbG9hZE1vcmVDaGF0cz17bG9hZE1vcmVDaGF0c31cbiAgICAgICAgICAgICAgaXNMb2FkaW5nTW9yZUNoYXRzPXtpc0xvYWRpbmdNb3JlQ2hhdHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgIDwvU0NTU2lkZWJhclJvb3Q+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBMkJBLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQzlFLFNBQVNDLGVBQWUsUUFBUSxlQUFlO0FBQy9DLFNBQVNDLGlCQUFpQixRQUFRLG9EQUFvRDtBQUV0RixTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBRXRFLFNBQVNDLGdCQUFnQixRQUFRLGdDQUFnQztBQUNqRSxTQUFTQyxRQUFRLFFBQVEseUJBQXlCO0FBQ2xELFNBQVNDLE1BQU0sUUFBUSxvQkFBb0I7QUFDM0MsU0FBU0MsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLGVBQWUsRUFBRUMsT0FBTyxRQUFRLG1CQUFtQjtBQUN2RixTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSx5QkFBeUI7QUFDMUQsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUMxQyxTQUFTQyxTQUFTLFFBQVEsNkJBQTZCO0FBQ3ZELFNBQVNDLE9BQU8sUUFBUSwyQkFBMkI7QUFDbkQsU0FBU0MscUJBQXFCLFFBQVEsbUNBQW1DO0FBQ3pFLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFDM0QsU0FBU0MsZ0JBQWdCLFFBQVEsaUNBQWlDO0FBQ2xFLFNBQVNDLFNBQVMsUUFBUSwrQkFBK0I7QUFDekQsU0FBU0MsVUFBVSxRQUFRLHFCQUFxQjtBQUNoRCxTQUFTQyx5QkFBeUIsRUFBRUMscUJBQXFCLFFBQVEsa0JBQWtCO0FBQ25GLFNBQ0VDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCQyxjQUFjLEVBQ2RDLG1CQUFtQixFQUNuQkMscUJBQXFCLEVBQ3JCQyx1QkFBdUIsRUFDdkJDLDBCQUEwQixFQUMxQkMseUJBQXlCLEVBQ3pCQyxxQkFBcUIsRUFDckJDLDBCQUEwQixFQUMxQkMs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
558
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNoZXZyb25Eb3VibGVMZWZ0IiwiQ1VCdXR0b24iLCJNZW51RG90cyIsIlBlbmNpbCIsIlRyYXNoIiwiVG9vbHRpcCIsIkVtcHR5SGlzdG9yeUljb24iLCJ1c2VSZXNpemVMaXN0ZW5lciIsInVzZUNoYXRzIiwiTG9hZGVyIiwiRXJyb3JTdGF0ZSIsIk1BSUFJY29uIiwiTWFpYVN0b3JlSWNvbiIsIk15QWdlbnRzTmF2SWNvbiIsIk5ld0NoYXQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVQiLCJPcHRpb25JdGVtIiwiRWRpdFF1ZXN0aW9uTW9kYWwiLCJEZWxldGVRdWVzdGlvbk1vZGFsIiwiRXJyb3JJY29uIiwidXNlVXNlciIsIk9uYm9hcmRpbmdNb2RhbEJ1dHRvbiIsIkZlZWRiYWNrQnV0dG9uIiwidXNlR2xvYmFsQ29udGV4dCIsImZldGNoTWFpYSIsIm1hcENPUkxhbmciLCJTQ0xIQ1dyYXBwZXIiLCJTQ0xIQ1dyYXBwZXJBZ2VudCIsIlNDTEhDV3JhcHBlckFnZW50VGV4dCIsIlNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnMiLCJTQ0xIQ1dyYXBwZXJDb250ZW50IiwiU0NMSENXcmFwcGVyVGl0bGUiLCJTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uIiwiU0NTV3JhcHBlck5ld0NoYXRJY29uIiwiU0NTU2lkZWJhclJvb3QiLCJTQ1NTaWRlYmFyVG9vbGJhciIsIlNDU1NpZGViYXJCb2R5IiwiU0NTU2lkZWJhck9wZW5QYW5lbCIsIlNDU1NpZGViYXJBZ2VudHNCbG9jayIsIlNDU1NpZGViYXJBZ2VudHNIZWFkaW5nIiwiU0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0IiwiU0NTU2lkZWJhckFnZW50c0FjdGlvbnMiLCJTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbiIsIlNDU1NpZGViYXJNYWlha2VyTmF2TGFiZWwiLCJTQ1NTaWRlYmFyQ29udmVyc2F0aW9uc0hlYWRpbmciLCJTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwiLCJTQ1NTaWRlYmFyRXJyb3JTdGF0ZUNvbHVtbiIsIlNDU1NpZGViYXJFcnJvclN0YXRlVG9wIiwiU0NTU2lkZWJhckVycm9yQmFubmVyIiwiU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXAiLCJTQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlIiwiU0NTU2lkZWJhckxvYWRpbmdBcmVhIiwiU0NTU2lkZWJhckxvYWRNb3JlUm93IiwiU0NTU2lkZWJhckVtcHR5Q2hhdHMiLCJTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQiLCJTQ1NTaWRlYmFyQ2hhdHNGb290ZXIiLCJTQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImFjdGlvbnMiLCJlZGl0IiwicHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwiZGVsZXRlIiwiYWJicmV2aWF0ZVNwZWNpYWxpc3RJbkFnZW50TmFtZSIsImFnZW50TmFtZSIsInJlcGxhY2UiLCJMaXN0SGlzdG9yeUNoYXQiLCJfcmVmIiwiY2hhdCIsIm9uQ2xpY2siLCJpc01vZGFsT3BlbiIsIm9uT3Blbk1vZGFsIiwib25DbG9zZU1vZGFsIiwiaGFuZGxlcnMiLCJpc1NlbGVjdGVkIiwidGV4dFJlZiIsImFnZW50UmVmIiwiX3VzZVJlc2l6ZUxpc3RlbmVyIiwidGl0bGUiLCJzaG93VG9vbHRpcCIsIl91c2VSZXNpemVMaXN0ZW5lcjIiLCJhZ2VudCIsInNob3dUb29sdGlwQWdlbnQiLCJfdXNlVCIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3Rpb24iLCJzZXRBY3Rpb24iLCJtZW51SXRlbXMiLCJsYWJlbCIsIm9uQ2xpY2tJdGVtIiwiY2hhdElkIiwiSWNvbiIsImV2ZW50S2V5IiwicG1BaU1lbnVFZGl0IiwicG1BaU1lbnVEZWxldGUiLCJoYW5kbGVDb25maXJtQWN0aW9uIiwiY2hhdERhdGEiLCJoYW5kbGVVcGRhdGVDaGF0IiwiaGFuZGxlRGVsZXRlQ2hhdCIsImNoaWxkcmVuIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsInJlZiIsInByb2plY3ROYW1lIiwiY29uY2F0IiwiYWdlbnRUeXBlIiwid2lkdGgiLCJoZWlnaHQiLCJzdHlsZSIsImZvbnRTaXplIiwiZW1vamkiLCJpY29uT25seSIsInNpemUiLCJ2YXJpYW50IiwiZXZlbnQiLCJpZCIsInBvc2l0aW9uIiwidG9wIiwicmlnaHQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ6SW5kZXgiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImJvcmRlclJhZGl1cyIsImJvcmRlciIsIm1pbldpZHRoIiwibWFwIiwiX3JlZjIiLCJzZXNzaW9uRXh0ZXJuYWxJZCIsIm9uQ2xvc2UiLCJoYW5kbGVTZXRJc09wZW5Nb2RhbCIsIlNpZGViYXIiLCJfcmVmMyIsIl91c2VyJHBlcm1pc3Npb25zIiwib25Hb1RvQ2hhdCIsIl9yZWYzJG9uRXJyb3IiLCJvbkVycm9yIiwiaGFuZGxlR29Ub0hvbWUiLCJoYW5kbGVPcGVuTWFya2V0cGxhY2UiLCJzaG93TmV3Q2hhdCIsInJlZmV0Y2hDaGF0cyIsImhhbmRsZVNldFJlZmV0Y2hDaGF0cyIsImhhc0Vycm9yIiwicmVzZXRTZWxlY3RlZENoYXRSZWYiLCJfcmVmMyRhZ2VudHNOYXZBY3RpdmUiLCJhZ2VudHNOYXZBY3RpdmUiLCJfdXNlVDIiLCJpMThuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzT3Blbk1vZGFsIiwic2V0SXNPcGVuTW9kYWwiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNlbGVjdGVkQ2hhdCIsInNldFNlbGVjdGVkQ2hhdCIsImNoYXRzRmV0Y2hlZFJlZiIsImNoYXRzQ29udGFpbmVyUmVmIiwidXNlciIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RlZEFnZW50Iiwic2VsZWN0QWdlbnQiLCJzZXRQcm9qZWN0Iiwic2V0Q2xpZW50IiwiX3VzZUNoYXRzIiwibG9hZGluZ0NoYXRzIiwiY2hhdHMiLCJkZWxldGVDaGF0IiwidXBkYXRlQ2hhdCIsImZldGNoQ2hhdHMiLCJsaW1pdCIsIm9mZnNldCIsImhhc01vcmVDaGF0cyIsImxvYWRNb3JlQ2hhdHMiLCJpc0xvYWRpbmdNb3JlQ2hhdHMiLCJ1c2VyUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNhbkNyZWF0ZUFnZW50cyIsImNyZWF0ZSIsImNhblZpZXdBZ2VudHMiLCJ2aWV3Iiwic2hvd01hcmtldHBsYWNlU2lkZWJhckJ1dHRvbiIsIndpbmRvdyIsIk1BSUFfTUFSS0VUUExBQ0VfTUFJQUtFUiIsImFnZW50TmF2QnV0dG9uQ291bnQiLCJzaG93QWdlbnRzTmF2QmxvY2siLCJjdXJyZW50IiwiX3JlZjQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVPcGVuTW9kYWwiLCJoYW5kbGVDbG9zZU1vZGFsIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwidGFyZ2V0IiwiY2xvc2VzdCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVUb2dnbGVTaWRlYmFyIiwiaGFuZGxlT3BlbkNyZWF0ZUFnZW50IiwiX3JlZjUiLCJfY2FsbGVlMiIsInJlc3BvbnNlIiwiZGF0YSIsIm1haWFrZXJBZ2VudCIsIl9jb250ZXh0MiIsInBhdGgiLCJsYW5ndWFnZSIsIm1ldGhvZCIsInNlbnQiLCJqc29uIiwiZmluZCIsInR5cGUiLCJlbnRpdHkiLCJhYnJ1cHQiLCJoYW5kbGVTY3JvbGwiLCJfY2hhdHNDb250YWluZXJSZWYkY3UiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJpc0F0Qm90dG9tIiwiY29udGFpbmVyIiwiaGFuZGxlTmV3Q2hhdCIsIl9yZWY2IiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJoYW5kbGVSZWZldGNoU2Vzc2lvbiIsInNob3dOZXdDaGF0QnV0dG9uIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsIiRpc09wZW4iLCJjb2xvciIsImFpQ2hhdE1wT3BlbiIsIiRhY3RpdmUiLCIkaGFzQ2hhdHMiLCJsZW5ndGgiLCIkb2Zmc2V0VmFyaWFudCIsIiRhZ2VudE5hdkJ1dHRvbkNvdW50IiwiJGp1c3RpZnlCZXR3ZWVuIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL1NpZGViYXIvU2lkZWJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCB7IE11dGFibGVSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2hldnJvbkRvdWJsZUxlZnQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGV2cm9uRG91YmxlTGVmdCdcbmltcG9ydCB7IENVQnV0dG9uIH0gZnJvbSAnQHByb2plY3Rjb3IvYnV0dG9uL2xpYi9jb21wb25lbnRzL0NVQnV0dG9uJ1xuaW1wb3J0IHsgTWVudURvdHMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9NZW51RG90cydcbmltcG9ydCB7IFBlbmNpbCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BlbmNpbCdcbmltcG9ydCB7IFRyYXNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvVHJhc2gnXG5cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcblxuaW1wb3J0IHsgRW1wdHlIaXN0b3J5SWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL0VtcHR5SGlzdG9yeSdcbmltcG9ydCB7IHVzZVJlc2l6ZUxpc3RlbmVyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVzaXplJ1xuaW1wb3J0IHsgdXNlQ2hhdHMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0cydcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IEVycm9yU3RhdGUsIE1BSUFJY29uLCBNYWlhU3RvcmVJY29uLCBNeUFnZW50c05hdkljb24sIE5ld0NoYXQgfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgT3B0aW9uSXRlbSB9IGZyb20gJy4uLy4uL2F0b21zL0NhcmRNZW51L0NhcmRNZW51J1xuaW1wb3J0IHsgRWRpdFF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvRWRpdFF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBEZWxldGVRdWVzdGlvbk1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBFcnJvckljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9FcnJvckljb24nXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IE9uYm9hcmRpbmdNb2RhbEJ1dHRvbiB9IGZyb20gJy4uLy4uL2F0b21zL09uYm9hcmRpbmdNb2RhbEJ1dHRvbidcbmltcG9ydCB7IEZlZWRiYWNrQnV0dG9uIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmVlZGJhY2tCdXR0b24nXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IGZldGNoTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvY2xpZW50J1xuaW1wb3J0IHsgbWFwQ09STGFuZyB9IGZyb20gJy4uLy4uLy4uL2xhbmcvdXRpbHMnXG5pbXBvcnQge1xuICBTQ0xIQ1dyYXBwZXIsXG4gIFNDTEhDV3JhcHBlckFnZW50LFxuICBTQ0xIQ1dyYXBwZXJBZ2VudFRleHQsXG4gIFNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnMsXG4gIFNDTEhDV3JhcHBlckNvbnRlbnQsXG4gIFNDTEhDV3JhcHBlclRpdGxlLFxuICBTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uLFxuICBTQ1NXcmFwcGVyTmV3Q2hhdEljb24sXG59IGZyb20gJy4vU2lkZWJhci5zdHlsZXMnXG5pbXBvcnQge1xuICBTQ1NTaWRlYmFyUm9vdCxcbiAgU0NTU2lkZWJhclRvb2xiYXIsXG4gIFNDU1NpZGViYXJCb2R5LFxuICBTQ1NTaWRlYmFyT3BlblBhbmVsLFxuICBTQ1NTaWRlYmFyQWdlbnRzQmxvY2ssXG4gIFNDU1NpZGViYXJBZ2VudHNIZWFkaW5nLFxuICBTQ1NTaWRlYmFyQWdlbnRzSGVhZGluZ1RleHQsXG4gIFNDU1NpZGViYXJBZ2VudHNBY3Rpb25zLFxuICBTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbixcbiAgU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbCxcbiAgU0NTU2lkZWJhckNvbnZlcnNhdGlvbnNIZWFkaW5nLFxuICBTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwsXG4gIFNDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uLFxuICBTQ1NTaWRlYmFyRXJyb3JTdGF0ZVRvcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyLFxuICBTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZSxcbiAgU0NTU2lkZWJhckxvYWRpbmdBcmVhLFxuICBTQ1NTaWRlYmFyTG9hZE1vcmVSb3csXG4gIFNDU1NpZGViYXJFbXB0eUNoYXRzLFxuICBTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQsXG4gIFNDU1NpZGViYXJDaGF0c0Zvb3RlcixcbiAgU0NTU2lkZWJhckZvb3RlckFjdGlvbnMsXG59IGZyb20gJy4vU2lkZWJhci5sYXlvdXQuc3R5bGVzJ1xuXG5jb25zdCBhY3Rpb25zID0ge1xuICBlZGl0OiAocHJvcHM6IGFueSkgPT4gPEVkaXRRdWVzdGlvbk1vZGFsIHsuLi5wcm9wc30gLz4sXG4gIGRlbGV0ZTogKHByb3BzOiBhbnkpID0+IDxEZWxldGVRdWVzdGlvbk1vZGFsIHsuLi5wcm9wc30gLz4sXG59XG5cbi8qKiBBYnJldmlhIFwiZXNwZWNpYWxpc3RhXCIvXCJlc3BlY2lhbGlzdFwiIOKGkiBcIkVzcC5cIiAoRVMvUFQpIHkgXCJzcGVjaWFsaXN0XCIg4oaSIFwiU3BlYy5cIiAoRU4pIGVuIGVsIG5vbWJyZSBkZWwgYWdlbnRlLiAqL1xuZnVuY3Rpb24gYWJicmV2aWF0ZVNwZWNpYWxpc3RJbkFnZW50TmFtZShhZ2VudE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghYWdlbnROYW1lIHx8IHR5cGVvZiBhZ2VudE5hbWUgIT09ICdzdHJpbmcnKSByZXR1cm4gYWdlbnROYW1lXG4gIHJldHVybiBhZ2VudE5hbWUucmVwbGFjZSgvXFxiKGVzcGVjaWFsaXN0YXxlc3BlY2lhbGlzdClcXGIvZ2ksICdFc3AuJykucmVwbGFjZSgvXFxic3BlY2lhbGlzdFxcYi9naSwgJ1NwZWMuJylcbn1cblxuY29uc3QgTGlzdEhpc3RvcnlDaGF0ID0gKHtcbiAgY2hhdCxcbiAgb25DbGljayxcbiAgaXNNb2RhbE9wZW4sXG4gIG9uT3Blbk1vZGFsLFxuICBvbkNsb3NlTW9kYWwsXG4gIGhhbmRsZXJzLFxuICBpc1NlbGVjdGVkLFxufToge1xuICBjaGF0OiBhbnlcbiAgb25DbGljazogKGNoYXQ6IGFueSkgPT4gdm9pZFxuICBpc01vZGFsT3BlbjogYm9vbGVhblxuICBvbk9wZW5Nb2RhbDogKGNoYXRJZDogc3RyaW5nKSA9PiB2b2lkXG4gIG9uQ2xvc2VNb2RhbDogKCkgPT4gdm9pZFxuICBoYW5kbGVyczoge1xuICAgIGhhbmRsZURlbGV0ZUNoYXQ6IChjaGF0OiBhbnkpID0+IHZvaWRcbiAgICBoYW5kbGVVcGRhdGVDaGF0OiAoY2hhdDogYW55KSA9PiB2b2lkXG4gIH1cbiAgaXNTZWxlY3RlZDogYm9vbGVhblxufSkgPT4ge1xuICBjb25zdCB0ZXh0UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBhZ2VudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgeyBzaG93VG9vbHRpcCB9ID0gdXNlUmVzaXplTGlzdGVuZXIodGV4dFJlZiwgW2NoYXQudGl0bGVdKVxuICBjb25zdCB7IHNob3dUb29sdGlwOiBzaG93VG9vbHRpcEFnZW50IH0gPSB1c2VSZXNpemVMaXN0ZW5lcihhZ2VudFJlZiwgW2NoYXQuYWdlbnRdKVxuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBbYWN0aW9uLCBzZXRBY3Rpb25dID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICBjb25zdCBtZW51SXRlbXMgPSBbXG4gICAge1xuICAgICAgbGFiZWw6IHQoJ2hpc3RvcnkubWVudS5yZW5hbWUnKSxcbiAgICAgIG9uQ2xpY2tJdGVtOiAoY2hhdElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgc2V0QWN0aW9uKCdlZGl0JylcbiAgICAgICAgb25PcGVuTW9kYWwoY2hhdElkKVxuICAgICAgfSxcbiAgICAgIEljb246IFBlbmNpbCxcbiAgICAgIGV2ZW50S2V5OiBFVkVOVFMucG1BaU1lbnVFZGl0LFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IHQoJ2hpc3RvcnkubWVudS5kZWxldGUnKSxcbiAgICAgIG9uQ2xpY2tJdGVtOiAoY2hhdElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgc2V0QWN0aW9uKCdkZWxldGUnKVxuICAgICAgICBvbk9wZW5Nb2RhbChjaGF0SWQpXG4gICAgICB9LFxuICAgICAgSWNvbjogVHJhc2gsXG4gICAgICBldmVudEtleTogRVZFTlRTLnBtQWlNZW51RGVsZXRlLFxuICAgIH0sXG4gIF1cblxuICBjb25zdCBoYW5kbGVDb25maXJtQWN0aW9uID0gKGNoYXREYXRhOiBhbnkpID0+IHtcbiAgICBpZiAoYWN0aW9uID09PSAnZWRpdCcpIHtcbiAgICAgIGhhbmRsZXJzLmhhbmRsZVVwZGF0ZUNoYXQoY2hhdERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzLmhhbmRsZURlbGV0ZUNoYXQoY2hhdERhdGEpXG4gICAgfVxuICAgIHNldEFjdGlvbihudWxsKVxuICAgIG9uQ2xvc2VNb2RhbCgpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U0NMSENXcmFwcGVyQ29udGVudFxuICAgICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgb25DbGljayhjaGF0KVxuICAgICAgICB9fVxuICAgICAgICBrZXk9e2Bjb252ZXJzYXRpb24tJHtjaGF0LnNlc3Npb25FeHRlcm5hbElkfWB9XG4gICAgICAgIGlzTW9kYWxPcGVuPXtpc01vZGFsT3Blbn1cbiAgICAgICAgaXNTZWxlY3RlZD17aXNTZWxlY3RlZH1cbiAgICAgID5cbiAgICAgICAgPFNDTEhDV3JhcHBlcj5cbiAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17c2hvd1Rvb2x0aXAgPyBjaGF0LnRpdGxlIDogJyd9PlxuICAgICAgICAgICAgPFNDTEhDV3JhcHBlclRpdGxlIHJlZj17dGV4dFJlZn0+e2NoYXQudGl0bGUgfHwgdCgnY29udmVyc2F0aW9ucy5lbXB0eUxhYmVsJyl9PC9TQ0xIQ1dyYXBwZXJUaXRsZT5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3Nob3dUb29sdGlwQWdlbnQgPyBjaGF0LmFnZW50ICsgKGNoYXQucHJvamVjdE5hbWUgPyBgIC0gJHtjaGF0LnByb2plY3ROYW1lfWAgOiAnJykgOiAnJ30+XG4gICAgICAgICAgICA8U0NMSENXcmFwcGVyQWdlbnQ+XG4gICAgICAgICAgICAgIHtjaGF0LmFnZW50VHlwZSA9PT0gJ2Nsb25lJyA/IChcbiAgICAgICAgICAgICAgICA8TUFJQUljb24gd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAnMTRweCcgfX0+e2NoYXQuZW1vaml9PC9zcGFuPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDxTQ0xIQ1dyYXBwZXJBZ2VudFRleHQgcmVmPXthZ2VudFJlZn0+XG4gICAgICAgICAgICAgICAge2NoYXQuYWdlbnRUeXBlID09PSAnY2xvbmUnID8gYWJicmV2aWF0ZVNwZWNpYWxpc3RJbkFnZW50TmFtZShjaGF0LmFnZW50KSA6IGNoYXQuYWdlbnR9XG4gICAgICAgICAgICAgICAge2NoYXQucHJvamVjdE5hbWUgJiYgYCAtICR7Y2hhdC5wcm9qZWN0TmFtZX1gfVxuICAgICAgICAgICAgICA8L1NDTEhDV3JhcHBlckFnZW50VGV4dD5cbiAgICAgICAgICAgIDwvU0NMSENXcmFwcGVyQWdlbnQ+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICA8L1NDTEhDV3JhcHBlcj5cbiAgICAgICAgPFNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnM+XG4gICAgICAgICAgPENVQnV0dG9uXG4gICAgICAgICAgICBpY29uT25seVxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgb25PcGVuTW9kYWwoY2hhdC5pZClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE1lbnVEb3RzIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgIHtpc01vZGFsT3BlbiAmJiAhYWN0aW9uICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS1tb2RhbC1jb250YWluZXJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICB0b3A6ICczMnB4JyxcbiAgICAgICAgICAgICAgICByaWdodDogJzE2cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDAsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMjI0LCAyMjQsIDIyNCwgMSknLFxuICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMTI0cHgnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bWVudUl0ZW1zLm1hcCgoeyBsYWJlbCwgb25DbGlja0l0ZW0sIEljb24sIGV2ZW50S2V5IH0pID0+IChcbiAgICAgICAgICAgICAgICA8T3B0aW9uSXRlbVxuICAgICAgICAgICAgICAgICAga2V5PXtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2xpY2tJdGVtKGNoYXQuaWQpfVxuICAgICAgICAgICAgICAgICAgSWNvbj17SWNvbn1cbiAgICAgICAgICAgICAgICAgIGV2ZW50S2V5PXtldmVudEtleX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NMSENXcmFwcGVyQnV0dG9uQWN0aW9ucz5cbiAgICAgIDwvU0NMSENXcmFwcGVyQ29udGVudD5cbiAgICAgIHshIWFjdGlvbiAmJlxuICAgICAgICBhY3Rpb25zW2FjdGlvbl0oe1xuICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgIG9uQ2xvc2VNb2RhbCgpXG4gICAgICAgICAgICBzZXRBY3Rpb24obnVsbClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoYXQsXG4gICAgICAgICAgaGFuZGxlcnM6IHtcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb24sXG4gICAgICAgICAgICBoYW5kbGVTZXRJc09wZW5Nb2RhbDogb25DbG9zZU1vZGFsLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pfVxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBTaWRlYmFyID0gKHtcbiAgb25Hb1RvQ2hhdCxcbiAgb25FcnJvciA9ICgpID0+IG51bGwsXG4gIGhhbmRsZUdvVG9Ib21lLFxuICBoYW5kbGVPcGVuTWFya2V0cGxhY2UsXG4gIHNob3dOZXdDaGF0LFxuICByZWZldGNoQ2hhdHMsXG4gIGhhbmRsZVNldFJlZmV0Y2hDaGF0cyxcbiAgaGFzRXJyb3IsXG4gIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLFxuICBhZ2VudHNOYXZBY3RpdmUgPSBudWxsLFxufToge1xuICBvbkdvVG9DaGF0OiAoY2hhdElkOiBzdHJpbmcpID0+IHZvaWRcbiAgb25FcnJvcjogKCkgPT4gdm9pZFxuICBoYW5kbGVHb1RvSG9tZTogKCkgPT4gdm9pZFxuICBoYW5kbGVPcGVuTWFya2V0cGxhY2U6ICgpID0+IHZvaWRcbiAgc2hvd05ld0NoYXQ6IGJvb2xlYW5cbiAgcmVmZXRjaENoYXRzOiBib29sZWFuXG4gIGhhbmRsZVNldFJlZmV0Y2hDaGF0czogKHJlZmV0Y2g6IGJvb2xlYW4pID0+IHZvaWRcbiAgaGFzRXJyb3I6IGJvb2xlYW5cbiAgcmVzZXRTZWxlY3RlZENoYXRSZWY/OiBNdXRhYmxlUmVmT2JqZWN0PCgoKSA9PiB2b2lkKSB8IG51bGw+XG4gIC8qKiBSZXNhbHRhIE1haWFrZXIgbyBNaXMgYWdlbnRlcyAqL1xuICBhZ2VudHNOYXZBY3RpdmU/OiAnbWFpYWtlcicgfCAnbXlBZ2VudHMnIHwgbnVsbFxufSkgPT4ge1xuICBjb25zdCB7IHQsIGkxOG4gfSA9IHVzZVQoKVxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2lzT3Blbk1vZGFsLCBzZXRJc09wZW5Nb2RhbF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2VsZWN0ZWRDaGF0LCBzZXRTZWxlY3RlZENoYXRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY2hhdHNGZXRjaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBjaGF0c0NvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBhZ2VudDogc2VsZWN0ZWRBZ2VudCwgc2VsZWN0QWdlbnQsIHNldFByb2plY3QsIHNldENsaWVudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHtcbiAgICBsb2FkaW5nQ2hhdHMsXG4gICAgY2hhdHMsXG4gICAgZGVsZXRlQ2hhdCxcbiAgICB1cGRhdGVDaGF0LFxuICAgIGZldGNoQ2hhdHMsXG4gICAgbGltaXQsXG4gICAgb2Zmc2V0LFxuICAgIGhhc01vcmVDaGF0cyxcbiAgICBsb2FkTW9yZUNoYXRzLFxuICAgIGlzTG9hZGluZ01vcmVDaGF0cyxcbiAgfSA9IHVzZUNoYXRzKHtcbiAgICBvbkVycm9yLFxuICB9KVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcbiAgY29uc3QgY2FuQ3JlYXRlQWdlbnRzID0gISF1c2VyUGVybWlzc2lvbnM/LmNyZWF0ZVxuICBjb25zdCBjYW5WaWV3QWdlbnRzID0gISF1c2VyUGVybWlzc2lvbnM/LnZpZXdcbiAgY29uc3Qgc2hvd01hcmtldHBsYWNlU2lkZWJhckJ1dHRvbiA9ICEhY2FuQ3JlYXRlQWdlbnRzICYmICEhd2luZG93Lk1BSUFfTUFSS0VUUExBQ0VfTUFJQUtFUlxuICBjb25zdCBhZ2VudE5hdkJ1dHRvbkNvdW50ID0gKChzaG93TWFya2V0cGxhY2VTaWRlYmFyQnV0dG9uID8gMSA6IDApICsgKGNhblZpZXdBZ2VudHMgPyAxIDogMCkpIGFzIDAgfCAxIHwgMlxuICBjb25zdCBzaG93QWdlbnRzTmF2QmxvY2sgPSBzaG93TWFya2V0cGxhY2VTaWRlYmFyQnV0dG9uIHx8IGNhblZpZXdBZ2VudHNcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZikge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCA9ICgpID0+IHNldFNlbGVjdGVkQ2hhdChudWxsKVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmKSB7XG4gICAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LCBbcmVzZXRTZWxlY3RlZENoYXRSZWZdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUNoYXQgPSBhc3luYyAoY2hhdDogYW55KSA9PiB7XG4gICAgZGVsZXRlQ2hhdChjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICAgIHNldElzT3Blbk1vZGFsKG51bGwpXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVXBkYXRlQ2hhdCA9IChjaGF0OiBhbnkpID0+IHtcbiAgICB1cGRhdGVDaGF0KGNoYXQpXG4gICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Nb2RhbCA9IChjaGF0SWQ6IHN0cmluZykgPT4ge1xuICAgIGlmIChpc09wZW5Nb2RhbCAmJiBpc09wZW5Nb2RhbCAhPT0gY2hhdElkKSB7XG4gICAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJc09wZW5Nb2RhbChjaGF0SWQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmIChpc09wZW5Nb2RhbCAmJiAhKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbG9zZXN0KCdbZGF0YS1tb2RhbC1jb250YWluZXJdJykpIHtcbiAgICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPcGVuTW9kYWwpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW2lzT3Blbk1vZGFsXSlcblxuICBjb25zdCBoYW5kbGVUb2dnbGVTaWRlYmFyID0gKCkgPT4ge1xuICAgIGlmIChpc09wZW5Nb2RhbCkge1xuICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICB9XG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPcGVuQ3JlYXRlQWdlbnQgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPWNsb25lJmxhbmc9JHttYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpfWAsXG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgIH0pXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgIGNvbnN0IG1haWFrZXJBZ2VudCA9IChkYXRhLmRhdGEgfHwgW10pLmZpbmQoKGFnZW50OiBhbnkpID0+IGFnZW50LnR5cGUgPT09ICdjbG9uZScgJiYgYWdlbnQuZW50aXR5ID09PSAnZ2xvYmFsJylcblxuICAgIGlmICghbWFpYWtlckFnZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICBzZWxlY3RBZ2VudChtYWlha2VyQWdlbnQpXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuICYmICFjaGF0c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBmZXRjaENoYXRzKHsgbGltaXQsIG9mZnNldCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChyZWZldGNoQ2hhdHMpIHtcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdCwgb2Zmc2V0IH0pXG4gICAgICBoYW5kbGVTZXRSZWZldGNoQ2hhdHMoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNPcGVuLCByZWZldGNoQ2hhdHMsIGhhbmRsZVNldFJlZmV0Y2hDaGF0c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgICBpZiAoIWNoYXRzQ29udGFpbmVyUmVmLmN1cnJlbnQgfHwgIWhhc01vcmVDaGF0cyB8fCBpc0xvYWRpbmdNb3JlQ2hhdHMgfHwgaGFzRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY2hhdHNDb250YWluZXJSZWYuY3VycmVudFxuICAgICAgY29uc3QgaXNBdEJvdHRvbSA9IHNjcm9sbFRvcCArIGNsaWVudEhlaWdodCA+PSBzY3JvbGxIZWlnaHQgLSAxMFxuXG4gICAgICBpZiAoaXNBdEJvdHRvbSkge1xuICAgICAgICBsb2FkTW9yZUNoYXRzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBjaGF0c0NvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2hhc01vcmVDaGF0cywgaXNMb2FkaW5nTW9yZUNoYXRzLCBsb2FkTW9yZUNoYXRzLCBoYXNFcnJvcl0pXG5cbiAgY29uc3QgaGFuZGxlTmV3Q2hhdCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNPcGVuTW9kYWwpIHtcbiAgICAgIHNldElzT3Blbk1vZGFsKG51bGwpXG4gICAgfVxuICAgIHNldFNlbGVjdGVkQ2hhdChudWxsKVxuICAgIGF3YWl0IGZldGNoQ2hhdHMoeyBsaW1pdCwgb2Zmc2V0OiAwIH0pXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVSZWZldGNoU2Vzc2lvbiA9ICgpID0+IHtcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdDogMjAsIG9mZnNldDogMCB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdyZWZldGNoLXNlc3Npb24nLCBoYW5kbGVSZWZldGNoU2Vzc2lvbilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVmZXRjaC1zZXNzaW9uJywgaGFuZGxlUmVmZXRjaFNlc3Npb24pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBzaG93TmV3Q2hhdEJ1dHRvbiA9XG4gICAgIXNob3dOZXdDaGF0ICYmXG4gICAgIWhhc0Vycm9yICYmXG4gICAgIWxvYWRpbmdDaGF0cyAmJlxuICAgICgodXNlclBlcm1pc3Npb25zPy52aWV3ICYmXG4gICAgICAhc2VsZWN0ZWRBZ2VudD8uaXNfZGVsZXRlZCAmJlxuICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgJiZcbiAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X2FjY2VzcykgfHxcbiAgICAgICghdXNlclBlcm1pc3Npb25zPy52aWV3ICYmXG4gICAgICAgICFzZWxlY3RlZEFnZW50Py5pc19kZWxldGVkICYmXG4gICAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zICYmXG4gICAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X2FjY2VzcykpXG5cbiAgcmV0dXJuIChcbiAgICA8U0NTU2lkZWJhclJvb3QgJGlzT3Blbj17aXNPcGVufT5cbiAgICAgIDxTQ1NTaWRlYmFyVG9vbGJhciAkaXNPcGVuPXtpc09wZW59PlxuICAgICAgICA8VG9vbHRpcCB0aXRsZT17aXNPcGVuID8gdCgnY29udmVyc2F0aW9ucy5jb2xsYXBzZScpIDogdCgnY29udmVyc2F0aW9ucy5leHBhbmQnKX0+XG4gICAgICAgICAgPFNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24gb25DbGljaz17aGFuZGxlVG9nZ2xlU2lkZWJhcn0gaXNPcGVuPXtpc09wZW59PlxuICAgICAgICAgICAgPENoZXZyb25Eb3VibGVMZWZ0IGNvbG9yPVwicmdiYSgxMDIsIDEwMiwgMTAyLCAxKVwiIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICA8L1NDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24+XG4gICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAge3Nob3dOZXdDaGF0QnV0dG9uID8gKFxuICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjb252ZXJzYXRpb25zLm5ld0NoYXQnKX0+XG4gICAgICAgICAgICA8U0NTV3JhcHBlck5ld0NoYXRJY29uIG9uQ2xpY2s9e2hhbmRsZU5ld0NoYXR9PlxuICAgICAgICAgICAgICA8TmV3Q2hhdCB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICA8L1NDU1dyYXBwZXJOZXdDaGF0SWNvbj5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9TQ1NTaWRlYmFyVG9vbGJhcj5cbiAgICAgIDxTQ1NTaWRlYmFyQm9keSAkaXNPcGVuPXtpc09wZW59PlxuICAgICAgICB7aXNPcGVuID8gKFxuICAgICAgICAgIDxTQ1NTaWRlYmFyT3BlblBhbmVsPlxuICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNCbG9jaz5cbiAgICAgICAgICAgICAge3Nob3dBZ2VudHNOYXZCbG9jayA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0Pnt0KCdjb252ZXJzYXRpb25zLmFnZW50c1NlY3Rpb25UaXRsZScpfTwvU0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0PlxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQWdlbnRzSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyQWdlbnRzQWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAge3Nob3dNYXJrZXRwbGFjZVNpZGViYXJCdXR0b24gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdE1wT3BlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3BlbkNyZWF0ZUFnZW50KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXthZ2VudHNOYXZBY3RpdmUgPT09ICdtYWlha2VyJ31cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFpYVN0b3JlSWNvbiBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPnt0KCdjb252ZXJzYXRpb25zLm1haWFrZXJOYXYnKX08L1NDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIHtjYW5WaWV3QWdlbnRzID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPcGVuTWFya2V0cGxhY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXthZ2VudHNOYXZBY3RpdmUgPT09ICdteUFnZW50cyd9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE15QWdlbnRzTmF2SWNvbiBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPnt0KCdjb252ZXJzYXRpb25zLm15QWdlbnRzTmF2Jyl9PC9TQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhck1haWFrZXJOYXZCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQWdlbnRzQWN0aW9ucz5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxTQ1NTaWRlYmFyQ29udmVyc2F0aW9uc0hlYWRpbmc+e3QoJ2NvbnZlcnNhdGlvbnMudGl0bGUnKX08L1NDU1NpZGViYXJDb252ZXJzYXRpb25zSGVhZGluZz5cbiAgICAgICAgICAgIDwvU0NTU2lkZWJhckFnZW50c0Jsb2NrPlxuICAgICAgICAgICAgPFNDU1NpZGViYXJDaGF0c1Njcm9sbFxuICAgICAgICAgICAgICByZWY9e2NoYXRzQ29udGFpbmVyUmVmfVxuICAgICAgICAgICAgICAkaGFzQ2hhdHM9e2NoYXRzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICRvZmZzZXRWYXJpYW50PXtoYXNFcnJvciA/ICdlcnJvcicgOiAnZGVmYXVsdCd9XG4gICAgICAgICAgICAgICRhZ2VudE5hdkJ1dHRvbkNvdW50PXthZ2VudE5hdkJ1dHRvbkNvdW50fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aGFzRXJyb3IgJiYgIWNoYXRzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yU3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yU3RhdGVUb3A+XG4gICAgICAgICAgICAgICAgICAgIDxFcnJvclN0YXRlIC8+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvclN0YXRlVG9wPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lckljb25XcmFwPlxuICAgICAgICAgICAgICAgICAgICAgIDxFcnJvckljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+e3QoJ2NvbnZlcnNhdGlvbnMuZXJyb3InKX08L1NDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uPlxuICAgICAgICAgICAgICApIDogbG9hZGluZ0NoYXRzID8gKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTG9hZGluZ0FyZWE+XG4gICAgICAgICAgICAgICAgICA8TG9hZGVyIC8+XG4gICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTG9hZGluZ0FyZWE+XG4gICAgICAgICAgICAgICkgOiBjaGF0cy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHtjaGF0cy5tYXAoY2hhdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPExpc3RIaXN0b3J5Q2hhdFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjaGF0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhdD17Y2hhdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2NoYXREYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT3Blbk1vZGFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZENoYXQoY2hhdERhdGEuc2Vzc2lvbkV4dGVybmFsSWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uR29Ub0NoYXQoY2hhdERhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNNb2RhbE9wZW49e2lzT3Blbk1vZGFsID09PSBjaGF0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25PcGVuTW9kYWw9e2hhbmRsZU9wZW5Nb2RhbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2VNb2RhbD17aGFuZGxlQ2xvc2VNb2RhbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURlbGV0ZUNoYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVVwZGF0ZUNoYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c2VsZWN0ZWRDaGF0ID09PSBjaGF0LnNlc3Npb25FeHRlcm5hbElkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAge2lzTG9hZGluZ01vcmVDaGF0cyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTG9hZE1vcmVSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJMb2FkTW9yZVJvdz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFbXB0eUNoYXRzPlxuICAgICAgICAgICAgICAgICAgPEVtcHR5SGlzdG9yeUljb24gLz5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQ+e3QoJ2NvbnZlcnNhdGlvbnMuZW1wdHknKX08L1NDU1NpZGViYXJFbXB0eUNoYXRzVGV4dD5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFbXB0eUNoYXRzPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQ2hhdHNTY3JvbGw+XG4gICAgICAgICAgICA8U0NTU2lkZWJhckNoYXRzRm9vdGVyPlxuICAgICAgICAgICAgICB7aGFzRXJyb3IgJiYgY2hhdHMubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXI+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXA+XG4gICAgICAgICAgICAgICAgICAgIDxFcnJvckljb24gLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXA+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZT57dCgnY29udmVyc2F0aW9ucy5lcnJvcicpfTwvU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZT5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L1NDU1NpZGViYXJDaGF0c0Zvb3Rlcj5cbiAgICAgICAgICA8L1NDU1NpZGViYXJPcGVuUGFuZWw+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8U0NTU2lkZWJhckZvb3RlckFjdGlvbnMgJGlzT3Blbj17aXNPcGVufSAkanVzdGlmeUJldHdlZW49eyEhc2VsZWN0ZWRBZ2VudH0+XG4gICAgICAgICAge3NlbGVjdGVkQWdlbnQgPyA8RmVlZGJhY2tCdXR0b24gc2VsZWN0ZWRBZ2VudD17c2VsZWN0ZWRBZ2VudH0gaXNPcGVuPXtpc09wZW59IC8+IDogbnVsbH1cbiAgICAgICAgICA8T25ib2FyZGluZ01vZGFsQnV0dG9uIC8+XG4gICAgICAgIDwvU0NTU2lkZWJhckZvb3RlckFjdGlvbnM+XG4gICAgICA8L1NDU1NpZGViYXJCb2R5PlxuICAgIDwvU0NTU2lkZWJhclJvb3Q+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBMkJBLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNyRSxTQUFTQyxpQkFBaUIsUUFBUSxvREFBb0Q7QUFDdEYsU0FBU0MsUUFBUSxRQUFRLDRDQUE0QztBQUNyRSxTQUFT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