@projectcor/maia-components 2.11.53-6 → 2.11.53-7

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 (42) hide show
  1. package/lib/App.js +1 -1
  2. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +4 -9
  3. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.styles.js +4 -4
  4. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +2 -2
  5. package/lib/components/atoms/MAIAInput/MAIAInput.js +6 -2
  6. package/lib/components/atoms/MAIAInput/styles.js +3 -2
  7. package/lib/components/atoms/icons/FaqChevronIcon.js +39 -0
  8. package/lib/components/atoms/icons/index.js +2 -1
  9. package/lib/components/atoms/index.js +1 -3
  10. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +2 -24
  11. package/lib/components/molecules/ChatAIHome/styles.js +2 -3
  12. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +9 -18
  13. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +30 -6
  14. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +6 -4
  15. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +22 -4
  16. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +21 -17
  17. package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -3
  18. package/lib/components/molecules/Sidebar/Sidebar.js +4 -6
  19. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -2
  20. package/lib/components/molecules/Sidebar/Sidebar.styles.js +3 -4
  21. package/lib/hooks/useChatManager/useChatManager.js +44 -141
  22. package/lib/hooks/useEvent.js +3 -2
  23. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  24. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +82 -195
  25. package/lib/lang/br/index.js +5 -57
  26. package/lib/lang/en/index.js +5 -57
  27. package/lib/lang/es/index.js +5 -57
  28. package/lib/lang/fr/index.js +4 -56
  29. package/lib/store/useChatsStore.js +4 -2
  30. package/package.json +1 -1
  31. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +0 -83
  32. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +0 -21
  33. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.js +0 -7
  34. package/lib/components/atoms/AgentActivityIndicator/index.js +0 -2
  35. package/lib/components/atoms/Skeleton/Skeleton.js +0 -36
  36. package/lib/components/atoms/Skeleton/index.js +0 -2
  37. package/lib/components/molecules/ChatAIContent/ChatAIContent.skeleton.js +0 -49
  38. package/lib/components/molecules/Sidebar/Sidebar.skeleton.js +0 -48
  39. package/lib/types/streamActivity.js +0 -2
  40. package/lib/utils/debugMaiaSseLog.js +0 -27
  41. package/lib/utils/sseStreamContent.js +0 -17
  42. package/lib/utils/streamActivityMessages.js +0 -361
@@ -1,49 +0,0 @@
1
- import styled from 'styled-components';
2
- import { Skeleton } from '../../atoms/Skeleton';
3
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
- var SCHomeSkeleton = styled.div.withConfig({
5
- displayName: "ChatAIContentskeleton__SCHomeSkeleton",
6
- componentId: "sc-ahyusu-0"
7
- })(["flex:1;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:0 16px;box-sizing:border-box;"]);
8
- var SCHomeSkeletonHeader = styled.div.withConfig({
9
- displayName: "ChatAIContentskeleton__SCHomeSkeletonHeader",
10
- componentId: "sc-ahyusu-1"
11
- })(["display:flex;flex-direction:column;align-items:center;gap:12px;"]);
12
- var SCHomeSkeletonCards = styled.div.withConfig({
13
- displayName: "ChatAIContentskeleton__SCHomeSkeletonCards",
14
- componentId: "sc-ahyusu-2"
15
- })(["display:flex;flex-direction:column;gap:12px;width:100%;max-width:432px;"]);
16
- export var ChatAIHomeSkeleton = function ChatAIHomeSkeleton() {
17
- return /*#__PURE__*/_jsxs(SCHomeSkeleton, {
18
- children: [/*#__PURE__*/_jsxs(SCHomeSkeletonHeader, {
19
- children: [/*#__PURE__*/_jsx(Skeleton, {
20
- variant: "circular",
21
- width: 56,
22
- height: 56
23
- }), /*#__PURE__*/_jsx(Skeleton, {
24
- variant: "text",
25
- width: 220,
26
- height: 20,
27
- borderRadius: 6
28
- })]
29
- }), /*#__PURE__*/_jsxs(SCHomeSkeletonCards, {
30
- children: [/*#__PURE__*/_jsx(Skeleton, {
31
- variant: "rectangular",
32
- width: "100%",
33
- height: 56,
34
- borderRadius: 8
35
- }), /*#__PURE__*/_jsx(Skeleton, {
36
- variant: "rectangular",
37
- width: "100%",
38
- height: 56,
39
- borderRadius: 8
40
- }), /*#__PURE__*/_jsx(Skeleton, {
41
- variant: "rectangular",
42
- width: "100%",
43
- height: 56,
44
- borderRadius: 8
45
- })]
46
- })]
47
- });
48
- };
49
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJTa2VsZXRvbiIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJTQ0hvbWVTa2VsZXRvbiIsImRpdiIsIndpdGhDb25maWciLCJkaXNwbGF5TmFtZSIsImNvbXBvbmVudElkIiwiU0NIb21lU2tlbGV0b25IZWFkZXIiLCJTQ0hvbWVTa2VsZXRvbkNhcmRzIiwiQ2hhdEFJSG9tZVNrZWxldG9uIiwiY2hpbGRyZW4iLCJ2YXJpYW50Iiwid2lkdGgiLCJoZWlnaHQiLCJib3JkZXJSYWRpdXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJQ29udGVudC9DaGF0QUlDb250ZW50LnNrZWxldG9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJ1xuaW1wb3J0IHsgU2tlbGV0b24gfSBmcm9tICcuLi8uLi9hdG9tcy9Ta2VsZXRvbidcblxuY29uc3QgU0NIb21lU2tlbGV0b24gPSBzdHlsZWQuZGl2YFxuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiAxOHB4O1xuICBwYWRkaW5nOiAwIDE2cHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5gXG5cbmNvbnN0IFNDSG9tZVNrZWxldG9uSGVhZGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAxMnB4O1xuYFxuXG5jb25zdCBTQ0hvbWVTa2VsZXRvbkNhcmRzID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMnB4O1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiA0MzJweDtcbmBcblxuZXhwb3J0IGNvbnN0IENoYXRBSUhvbWVTa2VsZXRvbiA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8U0NIb21lU2tlbGV0b24+XG4gICAgICA8U0NIb21lU2tlbGV0b25IZWFkZXI+XG4gICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwiY2lyY3VsYXJcIiB3aWR0aD17NTZ9IGhlaWdodD17NTZ9IC8+XG4gICAgICAgIDxTa2VsZXRvbiB2YXJpYW50PVwidGV4dFwiIHdpZHRoPXsyMjB9IGhlaWdodD17MjB9IGJvcmRlclJhZGl1cz17Nn0gLz5cbiAgICAgIDwvU0NIb21lU2tlbGV0b25IZWFkZXI+XG4gICAgICA8U0NIb21lU2tlbGV0b25DYXJkcz5cbiAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJyZWN0YW5ndWxhclwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD17NTZ9IGJvcmRlclJhZGl1cz17OH0gLz5cbiAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJyZWN0YW5ndWxhclwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD17NTZ9IGJvcmRlclJhZGl1cz17OH0gLz5cbiAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJyZWN0YW5ndWxhclwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD17NTZ9IGJvcmRlclJhZGl1cz17OH0gLz5cbiAgICAgIDwvU0NIb21lU2tlbGV0b25DYXJkcz5cbiAgICA8L1NDSG9tZVNrZWxldG9uPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQU0sTUFBTSxtQkFBbUI7QUFDdEMsU0FBU0MsUUFBUSxRQUFRLHNCQUFzQjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUE7QUFFL0MsSUFBTUMsY0FBYyxHQUFHTixNQUFNLENBQUNPLEdBQUcsQ0FBQUMsVUFBQTtFQUFBQyxXQUFBO0VBQUFDLFdBQUE7QUFBQSxpS0FXaEM7QUFFRCxJQUFNQyxvQkFBb0IsR0FBR1gsTUFBTSxDQUFDTyxHQUFHLENBQUFDLFVBQUE7RUFBQUMsV0FBQTtFQUFBQyxXQUFBO0FBQUEsdUVBS3RDO0FBRUQsSUFBTUUsbUJBQW1CLEdBQUdaLE1BQU0sQ0FBQ08sR0FBRyxDQUFBQyxVQUFBO0VBQUFDLFdBQUE7RUFBQUMsV0FBQTtBQUFBLCtFQU1yQztBQUVELE9BQU8sSUFBTUcsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBQSxFQUFTO0VBQ3RDLG9CQUNFUixLQUFBLENBQUNDLGNBQWM7SUFBQVEsUUFBQSxnQkFDYlQsS0FBQSxDQUFDTSxvQkFBb0I7TUFBQUcsUUFBQSxnQkFDbkJYLElBQUEsQ0FBQ0YsUUFBUTtRQUFDYyxPQUFPLEVBQUMsVUFBVTtRQUFDQyxLQUFLLEVBQUUsRUFBRztRQUFDQyxNQUFNLEVBQUU7TUFBRyxDQUFFLENBQUMsZUFDdERkLElBQUEsQ0FBQ0YsUUFBUTtRQUFDYyxPQUFPLEVBQUMsTUFBTTtRQUFDQyxLQUFLLEVBQUUsR0FBSTtRQUFDQyxNQUFNLEVBQUUsRUFBRztRQUFDQyxZQUFZLEVBQUU7TUFBRSxDQUFFLENBQUM7SUFBQSxDQUNoRCxDQUFDLGVBQ3ZCYixLQUFBLENBQUNPLG1CQUFtQjtNQUFBRSxRQUFBLGdCQUNsQlgsSUFBQSxDQUFDRixRQUFRO1FBQUNjLE9BQU8sRUFBQyxhQUFhO1FBQUNDLEtBQUssRUFBQyxNQUFNO1FBQUNDLE1BQU0sRUFBRSxFQUFHO1FBQUNDLFlBQVksRUFBRTtNQUFFLENBQUUsQ0FBQyxlQUM1RWYsSUFBQSxDQUFDRixRQUFRO1FBQUNjLE9BQU8sRUFBQyxhQUFhO1FBQUNDLEtBQUssRUFBQyxNQUFNO1FBQUNDLE1BQU0sRUFBRSxFQUFHO1FBQUNDLFlBQVksRUFBRTtNQUFFLENBQUUsQ0FBQyxlQUM1RWYsSUFBQSxDQUFDRixRQUFRO1FBQUNjLE9BQU8sRUFBQyxhQUFhO1FBQUNDLEtBQUssRUFBQyxNQUFNO1FBQUNDLE1BQU0sRUFBRSxFQUFHO1FBQUNDLFlBQVksRUFBRTtNQUFFLENBQUUsQ0FBQztJQUFBLENBQ3pELENBQUM7RUFBQSxDQUNSLENBQUM7QUFFckIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,48 +0,0 @@
1
- import styled from 'styled-components';
2
- import { Skeleton } from '../../atoms/Skeleton';
3
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
- var SCSkeletonList = styled.div.withConfig({
5
- displayName: "Sidebarskeleton__SCSkeletonList",
6
- componentId: "sc-11zeu9-0"
7
- })(["display:flex;flex-direction:column;gap:4px;width:100%;"]);
8
- var SCSkeletonRow = styled.div.withConfig({
9
- displayName: "Sidebarskeleton__SCSkeletonRow",
10
- componentId: "sc-11zeu9-1"
11
- })(["display:flex;flex-direction:column;gap:6px;padding:12px 8px 12px 12px;width:100%;"]);
12
- var SCSkeletonAgentLine = styled.div.withConfig({
13
- displayName: "Sidebarskeleton__SCSkeletonAgentLine",
14
- componentId: "sc-11zeu9-2"
15
- })(["display:flex;align-items:center;gap:4px;"]);
16
- var TITLE_WIDTHS = ['82%', '68%', '90%', '74%', '60%', '86%'];
17
- export var SidebarChatsSkeleton = function SidebarChatsSkeleton(_ref) {
18
- var _ref$count = _ref.count,
19
- count = _ref$count === void 0 ? 6 : _ref$count;
20
- return /*#__PURE__*/_jsx(SCSkeletonList, {
21
- children: Array.from({
22
- length: count
23
- }).map(function (_, index) {
24
- return (
25
- /*#__PURE__*/
26
- // eslint-disable-next-line react/no-array-index-key
27
- _jsxs(SCSkeletonRow, {
28
- children: [/*#__PURE__*/_jsx(Skeleton, {
29
- variant: "text",
30
- width: TITLE_WIDTHS[index % TITLE_WIDTHS.length],
31
- height: 14
32
- }), /*#__PURE__*/_jsxs(SCSkeletonAgentLine, {
33
- children: [/*#__PURE__*/_jsx(Skeleton, {
34
- variant: "circular",
35
- width: 14,
36
- height: 14
37
- }), /*#__PURE__*/_jsx(Skeleton, {
38
- variant: "text",
39
- width: "45%",
40
- height: 12
41
- })]
42
- })]
43
- }, "sidebar-chat-skeleton-".concat(index))
44
- );
45
- })
46
- });
47
- };
48
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJTa2VsZXRvbiIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJTQ1NrZWxldG9uTGlzdCIsImRpdiIsIndpdGhDb25maWciLCJkaXNwbGF5TmFtZSIsImNvbXBvbmVudElkIiwiU0NTa2VsZXRvblJvdyIsIlNDU2tlbGV0b25BZ2VudExpbmUiLCJUSVRMRV9XSURUSFMiLCJTaWRlYmFyQ2hhdHNTa2VsZXRvbiIsIl9yZWYiLCJfcmVmJGNvdW50IiwiY291bnQiLCJjaGlsZHJlbiIsIkFycmF5IiwiZnJvbSIsImxlbmd0aCIsIm1hcCIsIl8iLCJpbmRleCIsInZhcmlhbnQiLCJ3aWR0aCIsImhlaWdodCIsImNvbmNhdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9TaWRlYmFyL1NpZGViYXIuc2tlbGV0b24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnXG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJy4uLy4uL2F0b21zL1NrZWxldG9uJ1xuXG5jb25zdCBTQ1NrZWxldG9uTGlzdCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogNHB4O1xuICB3aWR0aDogMTAwJTtcbmBcblxuY29uc3QgU0NTa2VsZXRvblJvdyA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogNnB4O1xuICBwYWRkaW5nOiAxMnB4IDhweCAxMnB4IDEycHg7XG4gIHdpZHRoOiAxMDAlO1xuYFxuXG5jb25zdCBTQ1NrZWxldG9uQWdlbnRMaW5lID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA0cHg7XG5gXG5cbmNvbnN0IFRJVExFX1dJRFRIUyA9IFsnODIlJywgJzY4JScsICc5MCUnLCAnNzQlJywgJzYwJScsICc4NiUnXVxuXG5leHBvcnQgY29uc3QgU2lkZWJhckNoYXRzU2tlbGV0b24gPSAoeyBjb3VudCA9IDYgfTogeyBjb3VudD86IG51bWJlciB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFNDU2tlbGV0b25MaXN0PlxuICAgICAge0FycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0pLm1hcCgoXywgaW5kZXgpID0+IChcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuICAgICAgICA8U0NTa2VsZXRvblJvdyBrZXk9e2BzaWRlYmFyLWNoYXQtc2tlbGV0b24tJHtpbmRleH1gfT5cbiAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cInRleHRcIiB3aWR0aD17VElUTEVfV0lEVEhTW2luZGV4ICUgVElUTEVfV0lEVEhTLmxlbmd0aF19IGhlaWdodD17MTR9IC8+XG4gICAgICAgICAgPFNDU2tlbGV0b25BZ2VudExpbmU+XG4gICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cImNpcmN1bGFyXCIgd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSAvPlxuICAgICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJ0ZXh0XCIgd2lkdGg9XCI0NSVcIiBoZWlnaHQ9ezEyfSAvPlxuICAgICAgICAgIDwvU0NTa2VsZXRvbkFnZW50TGluZT5cbiAgICAgICAgPC9TQ1NrZWxldG9uUm93PlxuICAgICAgKSl9XG4gICAgPC9TQ1NrZWxldG9uTGlzdD5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFNLE1BQU0sbUJBQW1CO0FBQ3RDLFNBQVNDLFFBQVEsUUFBUSxzQkFBc0I7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsSUFBQSxJQUFBQyxLQUFBO0FBRS9DLElBQU1DLGNBQWMsR0FBR04sTUFBTSxDQUFDTyxHQUFHLENBQUFDLFVBQUE7RUFBQUMsV0FBQTtFQUFBQyxXQUFBO0FBQUEsOERBS2hDO0FBRUQsSUFBTUMsYUFBYSxHQUFHWCxNQUFNLENBQUNPLEdBQUcsQ0FBQUMsVUFBQTtFQUFBQyxXQUFBO0VBQUFDLFdBQUE7QUFBQSx5RkFNL0I7QUFFRCxJQUFNRSxtQkFBbUIsR0FBR1osTUFBTSxDQUFDTyxHQUFHLENBQUFDLFVBQUE7RUFBQUMsV0FBQTtFQUFBQyxXQUFBO0FBQUEsZ0RBSXJDO0FBRUQsSUFBTUcsWUFBWSxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7QUFFL0QsT0FBTyxJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFBQyxJQUFBLEVBQTBDO0VBQUEsSUFBQUMsVUFBQSxHQUFBRCxJQUFBLENBQXBDRSxLQUFLO0lBQUxBLEtBQUssR0FBQUQsVUFBQSxjQUFHLENBQUMsR0FBQUEsVUFBQTtFQUM5QyxvQkFDRWIsSUFBQSxDQUFDRyxjQUFjO0lBQUFZLFFBQUEsRUFDWkMsS0FBSyxDQUFDQyxJQUFJLENBQUM7TUFBRUMsTUFBTSxFQUFFSjtJQUFNLENBQUMsQ0FBQyxDQUFDSyxHQUFHLENBQUMsVUFBQ0MsQ0FBQyxFQUFFQyxLQUFLO01BQUE7UUFBQTtRQUMxQztRQUNBbkIsS0FBQSxDQUFDTSxhQUFhO1VBQUFPLFFBQUEsZ0JBQ1pmLElBQUEsQ0FBQ0YsUUFBUTtZQUFDd0IsT0FBTyxFQUFDLE1BQU07WUFBQ0MsS0FBSyxFQUFFYixZQUFZLENBQUNXLEtBQUssR0FBR1gsWUFBWSxDQUFDUSxNQUFNLENBQUU7WUFBQ00sTUFBTSxFQUFFO1VBQUcsQ0FBRSxDQUFDLGVBQ3pGdEIsS0FBQSxDQUFDTyxtQkFBbUI7WUFBQU0sUUFBQSxnQkFDbEJmLElBQUEsQ0FBQ0YsUUFBUTtjQUFDd0IsT0FBTyxFQUFDLFVBQVU7Y0FBQ0MsS0FBSyxFQUFFLEVBQUc7Y0FBQ0MsTUFBTSxFQUFFO1lBQUcsQ0FBRSxDQUFDLGVBQ3REeEIsSUFBQSxDQUFDRixRQUFRO2NBQUN3QixPQUFPLEVBQUMsTUFBTTtjQUFDQyxLQUFLLEVBQUMsS0FBSztjQUFDQyxNQUFNLEVBQUU7WUFBRyxDQUFFLENBQUM7VUFBQSxDQUNoQyxDQUFDO1FBQUEsNEJBQUFDLE1BQUEsQ0FMcUJKLEtBQUssQ0FNbkM7TUFBQztJQUFBLENBQ2pCO0VBQUMsQ0FDWSxDQUFDO0FBRXJCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL3N0cmVhbUFjdGl2aXR5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFN0cmVhbUFjdGl2aXR5UGhhc2UgPVxuICB8ICdnZW5lcmF0aW5nJ1xuICB8ICd0aGlua2luZydcbiAgfCAnYWN0aW9uJ1xuICB8ICd3cml0aW5nJ1xuICB8ICdzZWFyY2gnXG4gIHwgJ2RlZXBfc2VhcmNoJ1xuICB8ICdhdHRhY2htZW50J1xuICB8ICdwcm9jZXNzaW5nJ1xuXG5leHBvcnQgdHlwZSBTdHJlYW1BY3Rpdml0eSA9IHtcbiAgcGhhc2U6IFN0cmVhbUFjdGl2aXR5UGhhc2VcbiAgbWVzc2FnZTogc3RyaW5nXG59XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,27 +0,0 @@
1
- export var logHitlApprovalContext = function logHitlApprovalContext(source, context) {
2
- var _context$pendingActio, _context$detectedTool;
3
- console.info("[Maia HITL:".concat(source, "]"), context);
4
- if ((_context$pendingActio = context.pendingActions) !== null && _context$pendingActio !== void 0 && _context$pendingActio.length) {
5
- console.info("[Maia HITL:".concat(source, "] pending_actions"), context.pendingActions);
6
- }
7
- if ((_context$detectedTool = context.detectedTools) !== null && _context$detectedTool !== void 0 && _context$detectedTool.length) {
8
- console.info("[Maia HITL:".concat(source, "] detected_tools"), context.detectedTools);
9
- }
10
- if (context.resolvedActivity) {
11
- console.info("[Maia HITL:".concat(source, "] resolved_activity"), context.resolvedActivity);
12
- }
13
- };
14
- export var logMaiaSseEvent = function logMaiaSseEvent(source, eventType, data) {
15
- console.info("[Maia SSE:".concat(source, "]"), eventType, data);
16
- if (eventType === 'node') {
17
- var _payload$message, _payload$node;
18
- var payload = data !== null && data !== void 0 ? data : {};
19
- console.info("[Maia SSE:".concat(source, "] node.message"), (_payload$message = payload.message) !== null && _payload$message !== void 0 ? _payload$message : '(sin message)');
20
- console.info("[Maia SSE:".concat(source, "] node.node"), (_payload$node = payload.node) !== null && _payload$node !== void 0 ? _payload$node : '(sin node)');
21
- console.info("[Maia SSE:".concat(source, "] node.payload"), payload);
22
- }
23
- };
24
- export var logMaiaSseStreamStart = function logMaiaSseStreamStart(source) {
25
- console.info("[Maia SSE:".concat(source, "] stream started"));
26
- };
27
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2dIaXRsQXBwcm92YWxDb250ZXh0Iiwic291cmNlIiwiY29udGV4dCIsIl9jb250ZXh0JHBlbmRpbmdBY3RpbyIsIl9jb250ZXh0JGRldGVjdGVkVG9vbCIsImNvbnNvbGUiLCJpbmZvIiwiY29uY2F0IiwicGVuZGluZ0FjdGlvbnMiLCJsZW5ndGgiLCJkZXRlY3RlZFRvb2xzIiwicmVzb2x2ZWRBY3Rpdml0eSIsImxvZ01haWFTc2VFdmVudCIsImV2ZW50VHlwZSIsImRhdGEiLCJfcGF5bG9hZCRtZXNzYWdlIiwiX3BheWxvYWQkbm9kZSIsInBheWxvYWQiLCJtZXNzYWdlIiwibm9kZSIsImxvZ01haWFTc2VTdHJlYW1TdGFydCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kZWJ1Z01haWFTc2VMb2cudHMiXSwic291cmNlc0NvbnRlbnQiOlsidHlwZSBNYWlhU3NlTG9nU291cmNlID0gJ29yY2hlc3RyYXRvcicgfCAnY29udGludWVUaHJlYWQnXG5cbnR5cGUgSGl0bEFwcHJvdmFsTG9nQ29udGV4dCA9IHtcbiAgbWVzc2FnZUlkPzogc3RyaW5nXG4gIG1lc3NhZ2VUZXh0Pzogc3RyaW5nXG4gIGFwcHJvdmFsU3RhdHVzPzogc3RyaW5nXG4gIHRocmVhZElkcz86IHN0cmluZ1tdXG4gIHRocmVhZElkPzogc3RyaW5nXG4gIGRlY2lzaW9uPzogJ2FwcHJvdmUnIHwgJ3JlamVjdCdcbiAgbm9kZU1lc3NhZ2U/OiBzdHJpbmdcbiAgbm9kZVBheWxvYWQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBwZW5kaW5nQWN0aW9ucz86IHVua25vd25bXVxuICBkZXRlY3RlZFRvb2xzPzogc3RyaW5nW11cbiAgcmVzb2x2ZWRBY3Rpdml0eT86IHsgcGhhc2U/OiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmcgfVxufVxuXG5leHBvcnQgY29uc3QgbG9nSGl0bEFwcHJvdmFsQ29udGV4dCA9IChzb3VyY2U6IHN0cmluZywgY29udGV4dDogSGl0bEFwcHJvdmFsTG9nQ29udGV4dCk6IHZvaWQgPT4ge1xuICBjb25zb2xlLmluZm8oYFtNYWlhIEhJVEw6JHtzb3VyY2V9XWAsIGNvbnRleHQpXG5cbiAgaWYgKGNvbnRleHQucGVuZGluZ0FjdGlvbnM/Lmxlbmd0aCkge1xuICAgIGNvbnNvbGUuaW5mbyhgW01haWEgSElUTDoke3NvdXJjZX1dIHBlbmRpbmdfYWN0aW9uc2AsIGNvbnRleHQucGVuZGluZ0FjdGlvbnMpXG4gIH1cblxuICBpZiAoY29udGV4dC5kZXRlY3RlZFRvb2xzPy5sZW5ndGgpIHtcbiAgICBjb25zb2xlLmluZm8oYFtNYWlhIEhJVEw6JHtzb3VyY2V9XSBkZXRlY3RlZF90b29sc2AsIGNvbnRleHQuZGV0ZWN0ZWRUb29scylcbiAgfVxuXG4gIGlmIChjb250ZXh0LnJlc29sdmVkQWN0aXZpdHkpIHtcbiAgICBjb25zb2xlLmluZm8oYFtNYWlhIEhJVEw6JHtzb3VyY2V9XSByZXNvbHZlZF9hY3Rpdml0eWAsIGNvbnRleHQucmVzb2x2ZWRBY3Rpdml0eSlcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbG9nTWFpYVNzZUV2ZW50ID0gKHNvdXJjZTogTWFpYVNzZUxvZ1NvdXJjZSwgZXZlbnRUeXBlOiBzdHJpbmcsIGRhdGE6IHVua25vd24pOiB2b2lkID0+IHtcbiAgY29uc29sZS5pbmZvKGBbTWFpYSBTU0U6JHtzb3VyY2V9XWAsIGV2ZW50VHlwZSwgZGF0YSlcblxuICBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICBjb25zdCBwYXlsb2FkID0gKGRhdGEgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgY29uc29sZS5pbmZvKGBbTWFpYSBTU0U6JHtzb3VyY2V9XSBub2RlLm1lc3NhZ2VgLCBwYXlsb2FkLm1lc3NhZ2UgPz8gJyhzaW4gbWVzc2FnZSknKVxuICAgIGNvbnNvbGUuaW5mbyhgW01haWEgU1NFOiR7c291cmNlfV0gbm9kZS5ub2RlYCwgcGF5bG9hZC5ub2RlID8/ICcoc2luIG5vZGUpJylcbiAgICBjb25zb2xlLmluZm8oYFtNYWlhIFNTRToke3NvdXJjZX1dIG5vZGUucGF5bG9hZGAsIHBheWxvYWQpXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGxvZ01haWFTc2VTdHJlYW1TdGFydCA9IChzb3VyY2U6IE1haWFTc2VMb2dTb3VyY2UpOiB2b2lkID0+IHtcbiAgY29uc29sZS5pbmZvKGBbTWFpYSBTU0U6JHtzb3VyY2V9XSBzdHJlYW0gc3RhcnRlZGApXG59XG4iXSwibWFwcGluZ3MiOiJBQWdCQSxPQUFPLElBQU1BLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUlDLE1BQWMsRUFBRUMsT0FBK0IsRUFBVztFQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBO0VBQy9GQyxPQUFPLENBQUNDLElBQUksZUFBQUMsTUFBQSxDQUFlTixNQUFNLFFBQUtDLE9BQU8sQ0FBQztFQUU5QyxLQUFBQyxxQkFBQSxHQUFJRCxPQUFPLENBQUNNLGNBQWMsY0FBQUwscUJBQUEsZUFBdEJBLHFCQUFBLENBQXdCTSxNQUFNLEVBQUU7SUFDbENKLE9BQU8sQ0FBQ0MsSUFBSSxlQUFBQyxNQUFBLENBQWVOLE1BQU0sd0JBQXFCQyxPQUFPLENBQUNNLGNBQWMsQ0FBQztFQUMvRTtFQUVBLEtBQUFKLHFCQUFBLEdBQUlGLE9BQU8sQ0FBQ1EsYUFBYSxjQUFBTixxQkFBQSxlQUFyQkEscUJBQUEsQ0FBdUJLLE1BQU0sRUFBRTtJQUNqQ0osT0FBTyxDQUFDQyxJQUFJLGVBQUFDLE1BQUEsQ0FBZU4sTUFBTSx1QkFBb0JDLE9BQU8sQ0FBQ1EsYUFBYSxDQUFDO0VBQzdFO0VBRUEsSUFBSVIsT0FBTyxDQUFDUyxnQkFBZ0IsRUFBRTtJQUM1Qk4sT0FBTyxDQUFDQyxJQUFJLGVBQUFDLE1BQUEsQ0FBZU4sTUFBTSwwQkFBdUJDLE9BQU8sQ0FBQ1MsZ0JBQWdCLENBQUM7RUFDbkY7QUFDRixDQUFDO0FBRUQsT0FBTyxJQUFNQyxlQUFlLEdBQUcsU0FBbEJBLGVBQWVBLENBQUlYLE1BQXdCLEVBQUVZLFNBQWlCLEVBQUVDLElBQWEsRUFBVztFQUNuR1QsT0FBTyxDQUFDQyxJQUFJLGNBQUFDLE1BQUEsQ0FBY04sTUFBTSxRQUFLWSxTQUFTLEVBQUVDLElBQUksQ0FBQztFQUVyRCxJQUFJRCxTQUFTLEtBQUssTUFBTSxFQUFFO0lBQUEsSUFBQUUsZ0JBQUEsRUFBQUMsYUFBQTtJQUN4QixJQUFNQyxPQUFPLEdBQUlILElBQUksYUFBSkEsSUFBSSxjQUFKQSxJQUFJLEdBQUksQ0FBQyxDQUE2QjtJQUN2RFQsT0FBTyxDQUFDQyxJQUFJLGNBQUFDLE1BQUEsQ0FBY04sTUFBTSxzQkFBQWMsZ0JBQUEsR0FBa0JFLE9BQU8sQ0FBQ0MsT0FBTyxjQUFBSCxnQkFBQSxjQUFBQSxnQkFBQSxHQUFJLGVBQWUsQ0FBQztJQUNyRlYsT0FBTyxDQUFDQyxJQUFJLGNBQUFDLE1BQUEsQ0FBY04sTUFBTSxtQkFBQWUsYUFBQSxHQUFlQyxPQUFPLENBQUNFLElBQUksY0FBQUgsYUFBQSxjQUFBQSxhQUFBLEdBQUksWUFBWSxDQUFDO0lBQzVFWCxPQUFPLENBQUNDLElBQUksY0FBQUMsTUFBQSxDQUFjTixNQUFNLHFCQUFrQmdCLE9BQU8sQ0FBQztFQUM1RDtBQUNGLENBQUM7QUFFRCxPQUFPLElBQU1HLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUluQixNQUF3QixFQUFXO0VBQ3ZFSSxPQUFPLENBQUNDLElBQUksY0FBQUMsTUFBQSxDQUFjTixNQUFNLHFCQUFrQixDQUFDO0FBQ3JELENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,17 +0,0 @@
1
- /**
2
- * Fusiona un chunk SSE con el texto acumulado.
3
- * Si el backend reenvía el mensaje completo (evento `content` o token snapshot),
4
- * reemplaza en lugar de concatenar para evitar duplicar texto.
5
- */
6
- export var mergeStreamChunk = function mergeStreamChunk(accumulated, chunk) {
7
- if (!chunk) return accumulated;
8
- if (!accumulated) return chunk;
9
- if (chunk === accumulated) return accumulated;
10
- if (chunk.startsWith(accumulated)) return chunk;
11
- if (accumulated.startsWith(chunk)) return accumulated;
12
- return accumulated + chunk;
13
- };
14
- export var isCompleteLikeSsePayload = function isCompleteLikeSsePayload(data) {
15
- return data.memory_session_id != null && String(data.memory_session_id).trim() !== '';
16
- };
17
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtZXJnZVN0cmVhbUNodW5rIiwiYWNjdW11bGF0ZWQiLCJjaHVuayIsInN0YXJ0c1dpdGgiLCJpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQiLCJkYXRhIiwibWVtb3J5X3Nlc3Npb25faWQiLCJTdHJpbmciLCJ0cmltIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGdXNpb25hIHVuIGNodW5rIFNTRSBjb24gZWwgdGV4dG8gYWN1bXVsYWRvLlxuICogU2kgZWwgYmFja2VuZCByZWVudsOtYSBlbCBtZW5zYWplIGNvbXBsZXRvIChldmVudG8gYGNvbnRlbnRgIG8gdG9rZW4gc25hcHNob3QpLFxuICogcmVlbXBsYXphIGVuIGx1Z2FyIGRlIGNvbmNhdGVuYXIgcGFyYSBldml0YXIgZHVwbGljYXIgdGV4dG8uXG4gKi9cbmV4cG9ydCBjb25zdCBtZXJnZVN0cmVhbUNodW5rID0gKGFjY3VtdWxhdGVkOiBzdHJpbmcsIGNodW5rOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIWNodW5rKSByZXR1cm4gYWNjdW11bGF0ZWRcbiAgaWYgKCFhY2N1bXVsYXRlZCkgcmV0dXJuIGNodW5rXG4gIGlmIChjaHVuayA9PT0gYWNjdW11bGF0ZWQpIHJldHVybiBhY2N1bXVsYXRlZFxuICBpZiAoY2h1bmsuc3RhcnRzV2l0aChhY2N1bXVsYXRlZCkpIHJldHVybiBjaHVua1xuICBpZiAoYWNjdW11bGF0ZWQuc3RhcnRzV2l0aChjaHVuaykpIHJldHVybiBhY2N1bXVsYXRlZFxuICByZXR1cm4gYWNjdW11bGF0ZWQgKyBjaHVua1xufVxuXG5leHBvcnQgY29uc3QgaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkID0gKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiA9PlxuICBkYXRhLm1lbW9yeV9zZXNzaW9uX2lkICE9IG51bGwgJiYgU3RyaW5nKGRhdGEubWVtb3J5X3Nlc3Npb25faWQpLnRyaW0oKSAhPT0gJydcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTUEsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBSUMsV0FBbUIsRUFBRUMsS0FBYSxFQUFhO0VBQzlFLElBQUksQ0FBQ0EsS0FBSyxFQUFFLE9BQU9ELFdBQVc7RUFDOUIsSUFBSSxDQUFDQSxXQUFXLEVBQUUsT0FBT0MsS0FBSztFQUM5QixJQUFJQSxLQUFLLEtBQUtELFdBQVcsRUFBRSxPQUFPQSxXQUFXO0VBQzdDLElBQUlDLEtBQUssQ0FBQ0MsVUFBVSxDQUFDRixXQUFXLENBQUMsRUFBRSxPQUFPQyxLQUFLO0VBQy9DLElBQUlELFdBQVcsQ0FBQ0UsVUFBVSxDQUFDRCxLQUFLLENBQUMsRUFBRSxPQUFPRCxXQUFXO0VBQ3JELE9BQU9BLFdBQVcsR0FBR0MsS0FBSztBQUM1QixDQUFDO0FBRUQsT0FBTyxJQUFNRSx3QkFBd0IsR0FBRyxTQUEzQkEsd0JBQXdCQSxDQUFJQyxJQUE2QjtFQUFBLE9BQ3BFQSxJQUFJLENBQUNDLGlCQUFpQixJQUFJLElBQUksSUFBSUMsTUFBTSxDQUFDRixJQUFJLENBQUNDLGlCQUFpQixDQUFDLENBQUNFLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtBQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -1,361 +0,0 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
- import { normalizeHitlToolName } from './hitlAnalytics';
3
- import { logHitlApprovalContext } from './debugMaiaSseLog';
4
- var THINKING_MESSAGE_KEYS = ['chat.activity.thinking.analyzing', 'chat.activity.thinking.reviewing', 'chat.activity.thinking.planning'];
5
- var GENERATING_MESSAGE_KEYS = ['chat.activity.generating.considering', 'chat.activity.generating.almostReady', 'chat.activity.generating.preparing'];
6
- var SEARCH_MESSAGE_KEYS = ['chat.activity.search.scanning', 'chat.activity.search.summarizing'];
7
- var DEEP_SEARCH_MESSAGE_KEYS = ['chat.activity.deepSearch.exploring', 'chat.activity.deepSearch.crossChecking'];
8
- var ATTACHMENT_MESSAGE_KEYS = ['chat.activity.attachment.reading', 'chat.activity.attachment.extracting'];
9
- export var WRITING_ACTIVITY_MESSAGE_KEY = 'chat.activity.writing.composing';
10
-
11
- /** Tools HITL / node SSE → key i18n del indicador de actividad (tiempo presente continuo). */
12
- var HITL_TOOL_ACTIVITY_KEYS = {
13
- create_task: 'chat.activity.creatingTask',
14
- clone_task: 'chat.activity.creatingTask',
15
- create_tasks_batch: 'chat.activity.creatingTasksBatch',
16
- create_agent: 'chat.activity.creatingAgent',
17
- edit_agent: 'chat.activity.editingAgent',
18
- edit_task: 'chat.activity.editingTask',
19
- edit_tasks_batch: 'chat.activity.editingTasksBatch',
20
- delete_task: 'chat.activity.deletingTask',
21
- delete_tasks_batch: 'chat.activity.deletingTasksBatch',
22
- task_assign: 'chat.activity.assigningUser',
23
- task_unassign: 'chat.activity.unassigningUser',
24
- assign_task_label: 'chat.activity.assigningLabel',
25
- update_task_type: 'chat.activity.updatingTaskType',
26
- update_estimated_hours: 'chat.activity.updatingEstimatedHours',
27
- update_deliverable: 'chat.activity.updatingDeliverable',
28
- create_hour: 'chat.activity.loggingHours',
29
- create_checklist: 'chat.activity.creatingChecklist',
30
- get_task_date_hours: 'chat.activity.queryingHours',
31
- configure_agent_access: 'chat.activity.configuringAgentAccess',
32
- send_task_message: 'chat.activity.sendingTaskMessage',
33
- delete_checklist_item: 'chat.activity.deletingChecklistItem',
34
- remove_task_type: 'chat.activity.removingTaskType',
35
- remove_task_label: 'chat.activity.removingLabel',
36
- count_deliverable: 'chat.activity.updatingDeliverableCount',
37
- create_rework: 'chat.activity.creatingRework',
38
- update_rework: 'chat.activity.updatingRework'
39
- };
40
- var HITL_TOOL_NAMES_BY_SPECIFICITY = Object.keys(HITL_TOOL_ACTIVITY_KEYS).sort(function (a, b) {
41
- return b.length - a.length;
42
- });
43
-
44
- /** Mensajes genéricos del backend cuando no hay detalle de tool (continue-thread). */
45
- var isGenericResumeNodeMessage = function isGenericResumeNodeMessage(message) {
46
- var normalized = message.trim().toLowerCase();
47
- return normalized.startsWith('ejecutando acción aprobada') || normalized.startsWith('executing approved action') || normalized.startsWith('executando ação aprovada');
48
- };
49
- export var mapHitlToolNameToStreamActivity = function mapHitlToolNameToStreamActivity(toolName, t, options) {
50
- var normalized = normalizeHitlToolName(toolName);
51
- var key = HITL_TOOL_ACTIVITY_KEYS[normalized];
52
- if (key) {
53
- return {
54
- phase: 'action',
55
- message: t(key)
56
- };
57
- }
58
- if (options !== null && options !== void 0 && options.useResumingFallback) {
59
- return {
60
- phase: 'action',
61
- message: t('chat.activity.resumingAction')
62
- };
63
- }
64
- return {
65
- phase: 'action',
66
- message: t('chat.executingAction')
67
- };
68
- };
69
- var resolveHitlToolFromNodeMessage = function resolveHitlToolFromNodeMessage(nodeMessage) {
70
- var normalized = nodeMessage.toLowerCase().trim();
71
- if (!normalized) return null;
72
- if (HITL_TOOL_ACTIVITY_KEYS[normalized]) {
73
- return normalized;
74
- }
75
- var asToolName = normalizeHitlToolName(normalized.replace(/\s+/g, '_'));
76
- if (HITL_TOOL_ACTIVITY_KEYS[asToolName]) {
77
- return asToolName;
78
- }
79
- var matchedTool = HITL_TOOL_NAMES_BY_SPECIFICITY.find(function (toolName) {
80
- return normalized.includes(toolName);
81
- });
82
- return matchedTool !== null && matchedTool !== void 0 ? matchedTool : null;
83
- };
84
- export var mapNodeMessageToStreamActivity = function mapNodeMessageToStreamActivity(nodeMessage, t, options) {
85
- var normalized = nodeMessage.toLowerCase();
86
- var hitlTool = resolveHitlToolFromNodeMessage(nodeMessage);
87
- if (hitlTool) {
88
- return mapHitlToolNameToStreamActivity(hitlTool, t, options);
89
- }
90
- if (normalized.includes('response_file_generation') || normalized.includes('generando archivo') || normalized.includes('generating file')) {
91
- return {
92
- phase: 'action',
93
- message: t('chat.activity.generatingFile')
94
- };
95
- }
96
- if (normalized.includes('tavily') || normalized.includes('search_web') || normalized.includes('buscando en la web') || normalized.includes('searching the web')) {
97
- return {
98
- phase: 'search',
99
- message: t(SEARCH_MESSAGE_KEYS[0])
100
- };
101
- }
102
- var trimmedMessage = nodeMessage.trim();
103
- if (trimmedMessage && !isGenericResumeNodeMessage(trimmedMessage)) {
104
- return {
105
- phase: 'action',
106
- message: trimmedMessage
107
- };
108
- }
109
- if (isGenericResumeNodeMessage(trimmedMessage) || options !== null && options !== void 0 && options.useResumingFallback) {
110
- return {
111
- phase: 'action',
112
- message: t('chat.activity.resumingAction')
113
- };
114
- }
115
- return {
116
- phase: 'action',
117
- message: t('chat.executingAction')
118
- };
119
- };
120
- var resolvePendingActionsForThread = function resolvePendingActionsForThread(context, threadId) {
121
- var _ref, _context$pendingActio, _context$approval, _context$threadIds;
122
- var pending = (_ref = (_context$pendingActio = context === null || context === void 0 ? void 0 : context.pendingActions) !== null && _context$pendingActio !== void 0 ? _context$pendingActio : context === null || context === void 0 || (_context$approval = context.approval) === null || _context$approval === void 0 ? void 0 : _context$approval.pending_actions) !== null && _ref !== void 0 ? _ref : [];
123
- if (!pending.length) return [];
124
- if (threadId) {
125
- var forThread = pending.filter(function (action) {
126
- return action.thread_id === threadId;
127
- });
128
- if (forThread.length) return forThread;
129
- }
130
- if (context !== null && context !== void 0 && (_context$threadIds = context.threadIds) !== null && _context$threadIds !== void 0 && _context$threadIds.length) {
131
- return pending.filter(function (action) {
132
- var _context$threadIds2;
133
- return (_context$threadIds2 = context.threadIds) === null || _context$threadIds2 === void 0 ? void 0 : _context$threadIds2.includes(action.thread_id);
134
- });
135
- }
136
- return pending;
137
- };
138
- var detectToolsFromPendingActions = function detectToolsFromPendingActions(actions) {
139
- return _toConsumableArray(new Set(actions.map(function (action) {
140
- return normalizeHitlToolName(action.tool_name);
141
- }).filter(Boolean)));
142
- };
143
-
144
- /** Resuelve indicador HITL priorizando pending_actions del mensaje de aprobación anterior. */
145
- export var resolveHitlNodeStreamActivity = function resolveHitlNodeStreamActivity(nodeMessage, t, context, threadId, options) {
146
- var pendingForThread = resolvePendingActionsForThread(context, threadId);
147
- var detectedTools = detectToolsFromPendingActions(pendingForThread);
148
- if (options !== null && options !== void 0 && options.logSource) {
149
- logHitlApprovalContext(options.logSource, {
150
- messageId: context === null || context === void 0 ? void 0 : context.messageId,
151
- messageText: context === null || context === void 0 ? void 0 : context.messageText,
152
- threadId: threadId,
153
- threadIds: context === null || context === void 0 ? void 0 : context.threadIds,
154
- nodeMessage: nodeMessage,
155
- pendingActions: pendingForThread,
156
- detectedTools: detectedTools
157
- });
158
- }
159
- var trimmedNodeMessage = nodeMessage.trim();
160
- var activityFromNodeMessage = trimmedNodeMessage && !isGenericResumeNodeMessage(trimmedNodeMessage) ? {
161
- phase: 'action',
162
- message: trimmedNodeMessage
163
- } : null;
164
- var resolveAndLog = function resolveAndLog(activity) {
165
- if (options !== null && options !== void 0 && options.logSource) {
166
- logHitlApprovalContext("".concat(options.logSource, ":resolved"), {
167
- detectedTools: detectedTools,
168
- resolvedActivity: activity
169
- });
170
- }
171
- return activity;
172
- };
173
- if (detectedTools.length >= 1) {
174
- if (activityFromNodeMessage) {
175
- return resolveAndLog(activityFromNodeMessage);
176
- }
177
- return resolveAndLog(mapHitlToolNameToStreamActivity(detectedTools[0], t, options));
178
- }
179
- return resolveAndLog(mapNodeMessageToStreamActivity(nodeMessage, t, options));
180
- };
181
- export var resolveInitialHitlStreamActivity = function resolveInitialHitlStreamActivity(t, context, options) {
182
- var pendingActions = resolvePendingActionsForThread(context);
183
- var detectedTools = detectToolsFromPendingActions(pendingActions);
184
- if (options !== null && options !== void 0 && options.logSource) {
185
- logHitlApprovalContext(options.logSource, {
186
- messageId: context === null || context === void 0 ? void 0 : context.messageId,
187
- messageText: context === null || context === void 0 ? void 0 : context.messageText,
188
- threadIds: context === null || context === void 0 ? void 0 : context.threadIds,
189
- pendingActions: pendingActions,
190
- detectedTools: detectedTools
191
- });
192
- }
193
- if (detectedTools.length >= 1) {
194
- var activity = mapHitlToolNameToStreamActivity(detectedTools[0], t, {
195
- useResumingFallback: true
196
- });
197
- if (options !== null && options !== void 0 && options.logSource) {
198
- logHitlApprovalContext("".concat(options.logSource, ":resolved"), {
199
- detectedTools: detectedTools,
200
- resolvedActivity: activity
201
- });
202
- }
203
- return activity;
204
- }
205
- return {
206
- phase: 'processing',
207
- message: t('chat.processing')
208
- };
209
- };
210
- export var ACTIVITY_MESSAGE_ROTATE_MS = 3200;
211
- var ROTATABLE_PHASES = ['generating', 'thinking', 'search', 'deep_search', 'attachment'];
212
- var getMessageKeysForPhase = function getMessageKeysForPhase(phase) {
213
- switch (phase) {
214
- case 'generating':
215
- return GENERATING_MESSAGE_KEYS;
216
- case 'thinking':
217
- return THINKING_MESSAGE_KEYS;
218
- case 'search':
219
- return SEARCH_MESSAGE_KEYS;
220
- case 'deep_search':
221
- return DEEP_SEARCH_MESSAGE_KEYS;
222
- case 'attachment':
223
- return ATTACHMENT_MESSAGE_KEYS;
224
- default:
225
- return null;
226
- }
227
- };
228
- export var getStreamActivityMessageAtIndex = function getStreamActivityMessageAtIndex(phase, index, t) {
229
- if (phase === 'writing') {
230
- return t(WRITING_ACTIVITY_MESSAGE_KEY);
231
- }
232
- var keys = getMessageKeysForPhase(phase);
233
- if (!(keys !== null && keys !== void 0 && keys.length)) {
234
- return '';
235
- }
236
- var clampedIndex = Math.min(Math.max(0, index), keys.length - 1);
237
- return t(keys[clampedIndex]);
238
- };
239
- export var getThinkingLoadingMessage = function getThinkingLoadingMessage(index, t) {
240
- return getStreamActivityMessageAtIndex('thinking', index, t);
241
- };
242
- export var getGeneratingLoadingMessage = function getGeneratingLoadingMessage(index, t) {
243
- return getStreamActivityMessageAtIndex('generating', index, t);
244
- };
245
- export var canAdvanceStreamActivityMessage = function canAdvanceStreamActivityMessage(phase, currentIndex) {
246
- var keys = getMessageKeysForPhase(phase);
247
- if (!keys) {
248
- return false;
249
- }
250
- return currentIndex < keys.length - 1;
251
- };
252
- export var advanceStreamActivityMessage = function advanceStreamActivityMessage(activity, currentIndex, t) {
253
- if (!canAdvanceStreamActivityMessage(activity.phase, currentIndex)) {
254
- return null;
255
- }
256
- var nextIndex = currentIndex + 1;
257
- return {
258
- activity: {
259
- phase: activity.phase,
260
- message: getStreamActivityMessageAtIndex(activity.phase, nextIndex, t)
261
- },
262
- nextIndex: nextIndex
263
- };
264
- };
265
- export var canRotateStreamActivityPhase = function canRotateStreamActivityPhase(phase) {
266
- return ROTATABLE_PHASES.includes(phase);
267
- };
268
- export var getWritingStreamActivity = function getWritingStreamActivity(t) {
269
- return {
270
- phase: 'writing',
271
- message: t(WRITING_ACTIVITY_MESSAGE_KEY)
272
- };
273
- };
274
- export var getInitialStreamActivity = function getInitialStreamActivity(t, options) {
275
- if (options.isWebSearchActive) {
276
- return {
277
- phase: 'search',
278
- message: t(SEARCH_MESSAGE_KEYS[0])
279
- };
280
- }
281
- if (options.isDeepSearchActive) {
282
- return {
283
- phase: 'deep_search',
284
- message: t(DEEP_SEARCH_MESSAGE_KEYS[0])
285
- };
286
- }
287
- if (options.hasAttachments) {
288
- return {
289
- phase: 'attachment',
290
- message: t(ATTACHMENT_MESSAGE_KEYS[0])
291
- };
292
- }
293
- return {
294
- phase: 'generating',
295
- message: t(GENERATING_MESSAGE_KEYS[0])
296
- };
297
- };
298
- export var resolveStreamLoadingDisplay = function resolveStreamLoadingDisplay(params) {
299
- if (params.streamActivity) {
300
- return params.streamActivity;
301
- }
302
- var activeKeys = Object.keys(params.activeLoadings);
303
- if (activeKeys.length > 0) {
304
- var firstKey = activeKeys[0];
305
- var raw = params.activeLoadings[firstKey];
306
- if (raw && raw !== params.t('chat.processing')) {
307
- var hitlTool = resolveHitlToolFromNodeMessage(raw);
308
- if (hitlTool) {
309
- return mapHitlToolNameToStreamActivity(hitlTool, params.t);
310
- }
311
- var trimmed = raw.trim();
312
- if (trimmed && !isGenericResumeNodeMessage(trimmed)) {
313
- return {
314
- phase: 'action',
315
- message: trimmed
316
- };
317
- }
318
- return mapNodeMessageToStreamActivity(raw, params.t, {
319
- useResumingFallback: true
320
- });
321
- }
322
- return {
323
- phase: 'processing',
324
- message: params.t('chat.processing')
325
- };
326
- }
327
- if (params.loadingMessage) {
328
- if (params.loadingMessage === params.t('chat.writing') || params.loadingMessage === params.t(WRITING_ACTIVITY_MESSAGE_KEY)) {
329
- return getWritingStreamActivity(params.t);
330
- }
331
- if (params.loadingMessage === params.t('chat.generating')) {
332
- return {
333
- phase: 'generating',
334
- message: params.loadingMessage
335
- };
336
- }
337
- if (params.loadingMessage === params.t('chat.generatingWebSearch') || params.loadingMessage === params.t('chat.generatingDeepSearch') || params.loadingMessage === params.t('chat.generatingAttachment')) {
338
- return getInitialStreamActivity(params.t, {
339
- isWebSearchActive: params.loadingMessage === params.t('chat.generatingWebSearch'),
340
- isDeepSearchActive: params.loadingMessage === params.t('chat.generatingDeepSearch'),
341
- hasAttachments: params.loadingMessage === params.t('chat.generatingAttachment')
342
- });
343
- }
344
- return {
345
- phase: 'action',
346
- message: params.loadingMessage
347
- };
348
- }
349
- if (params.waitingResponse) {
350
- return getInitialStreamActivity(params.t, {
351
- isWebSearchActive: params.isWebSearchActive,
352
- isDeepSearchActive: params.isDeepSearchActive,
353
- hasAttachments: params.hasAttachments
354
- });
355
- }
356
- return null;
357
- };
358
- export var isStreamingPlaceholderMessageId = function isStreamingPlaceholderMessageId(messageId) {
359
- return typeof messageId === 'string' && messageId.includes('-streaming');
360
- };
361
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVIaXRsVG9vbE5hbWUiLCJsb2dIaXRsQXBwcm92YWxDb250ZXh0IiwiVEhJTktJTkdfTUVTU0FHRV9LRVlTIiwiR0VORVJBVElOR19NRVNTQUdFX0tFWVMiLCJTRUFSQ0hfTUVTU0FHRV9LRVlTIiwiREVFUF9TRUFSQ0hfTUVTU0FHRV9LRVlTIiwiQVRUQUNITUVOVF9NRVNTQUdFX0tFWVMiLCJXUklUSU5HX0FDVElWSVRZX01FU1NBR0VfS0VZIiwiSElUTF9UT09MX0FDVElWSVRZX0tFWVMiLCJjcmVhdGVfdGFzayIsImNsb25lX3Rhc2siLCJjcmVhdGVfdGFza3NfYmF0Y2giLCJjcmVhdGVfYWdlbnQiLCJlZGl0X2FnZW50IiwiZWRpdF90YXNrIiwiZWRpdF90YXNrc19iYXRjaCIsImRlbGV0ZV90YXNrIiwiZGVsZXRlX3Rhc2tzX2JhdGNoIiwidGFza19hc3NpZ24iLCJ0YXNrX3VuYXNzaWduIiwiYXNzaWduX3Rhc2tfbGFiZWwiLCJ1cGRhdGVfdGFza190eXBlIiwidXBkYXRlX2VzdGltYXRlZF9ob3VycyIsInVwZGF0ZV9kZWxpdmVyYWJsZSIsImNyZWF0ZV9ob3VyIiwiY3JlYXRlX2NoZWNrbGlzdCIsImdldF90YXNrX2RhdGVfaG91cnMiLCJjb25maWd1cmVfYWdlbnRfYWNjZXNzIiwic2VuZF90YXNrX21lc3NhZ2UiLCJkZWxldGVfY2hlY2tsaXN0X2l0ZW0iLCJyZW1vdmVfdGFza190eXBlIiwicmVtb3ZlX3Rhc2tfbGFiZWwiLCJjb3VudF9kZWxpdmVyYWJsZSIsImNyZWF0ZV9yZXdvcmsiLCJ1cGRhdGVfcmV3b3JrIiwiSElUTF9UT09MX05BTUVTX0JZX1NQRUNJRklDSVRZIiwiT2JqZWN0Iiwia2V5cyIsInNvcnQiLCJhIiwiYiIsImxlbmd0aCIsImlzR2VuZXJpY1Jlc3VtZU5vZGVNZXNzYWdlIiwibWVzc2FnZSIsIm5vcm1hbGl6ZWQiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJzdGFydHNXaXRoIiwibWFwSGl0bFRvb2xOYW1lVG9TdHJlYW1BY3Rpdml0eSIsInRvb2xOYW1lIiwidCIsIm9wdGlvbnMiLCJrZXkiLCJwaGFzZSIsInVzZVJlc3VtaW5nRmFsbGJhY2siLCJyZXNvbHZlSGl0bFRvb2xGcm9tTm9kZU1lc3NhZ2UiLCJub2RlTWVzc2FnZSIsImFzVG9vbE5hbWUiLCJyZXBsYWNlIiwibWF0Y2hlZFRvb2wiLCJmaW5kIiwiaW5jbHVkZXMiLCJtYXBOb2RlTWVzc2FnZVRvU3RyZWFtQWN0aXZpdHkiLCJoaXRsVG9vbCIsInRyaW1tZWRNZXNzYWdlIiwicmVzb2x2ZVBlbmRpbmdBY3Rpb25zRm9yVGhyZWFkIiwiY29udGV4dCIsInRocmVhZElkIiwiX3JlZiIsIl9jb250ZXh0JHBlbmRpbmdBY3RpbyIsIl9jb250ZXh0JGFwcHJvdmFsIiwiX2NvbnRleHQkdGhyZWFkSWRzIiwicGVuZGluZyIsInBlbmRpbmdBY3Rpb25zIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJmb3JUaHJlYWQiLCJmaWx0ZXIiLCJhY3Rpb24iLCJ0aHJlYWRfaWQiLCJ0aHJlYWRJZHMiLCJfY29udGV4dCR0aHJlYWRJZHMyIiwiZGV0ZWN0VG9vbHNGcm9tUGVuZGluZ0FjdGlvbnMiLCJhY3Rpb25zIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiU2V0IiwibWFwIiwidG9vbF9uYW1lIiwiQm9vbGVhbiIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicGVuZGluZ0ZvclRocmVhZCIsImRldGVjdGVkVG9vbHMiLCJsb2dTb3VyY2UiLCJtZXNzYWdlSWQiLCJtZXNzYWdlVGV4dCIsInRyaW1tZWROb2RlTWVzc2FnZSIsImFjdGl2aXR5RnJvbU5vZGVNZXNzYWdlIiwicmVzb2x2ZUFuZExvZyIsImFjdGl2aXR5IiwiY29uY2F0IiwicmVzb2x2ZWRBY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiQUNUSVZJVFlfTUVTU0FHRV9ST1RBVEVfTVMiLCJST1RBVEFCTEVfUEhBU0VTIiwiZ2V0TWVzc2FnZUtleXNGb3JQaGFzZSIsImdldFN0cmVhbUFjdGl2aXR5TWVzc2FnZUF0SW5kZXgiLCJpbmRleCIsImNsYW1wZWRJbmRleCIsIk1hdGgiLCJtaW4iLCJtYXgiLCJnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlIiwiZ2V0R2VuZXJhdGluZ0xvYWRpbmdNZXNzYWdlIiwiY2FuQWR2YW5jZVN0cmVhbUFjdGl2aXR5TWVzc2FnZSIsImN1cnJlbnRJbmRleCIsImFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UiLCJuZXh0SW5kZXgiLCJjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlIiwiZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5IiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJoYXNBdHRhY2htZW50cyIsInJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSIsInBhcmFtcyIsInN0cmVhbUFjdGl2aXR5IiwiYWN0aXZlS2V5cyIsImFjdGl2ZUxvYWRpbmdzIiwiZmlyc3RLZXkiLCJyYXciLCJ0cmltbWVkIiwibG9hZGluZ01lc3NhZ2UiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSwgU3RyZWFtQWN0aXZpdHlQaGFzZSB9IGZyb20gJy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHR5cGUgeyBBcHByb3ZhbFJlcXVlc3QsIFBlbmRpbmdBY3Rpb24gfSBmcm9tICcuLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgbm9ybWFsaXplSGl0bFRvb2xOYW1lIH0gZnJvbSAnLi9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHsgbG9nSGl0bEFwcHJvdmFsQ29udGV4dCB9IGZyb20gJy4vZGVidWdNYWlhU3NlTG9nJ1xuXG50eXBlIFRyYW5zbGF0ZUZuID0gKGtleTogc3RyaW5nKSA9PiBzdHJpbmdcblxuY29uc3QgVEhJTktJTkdfTUVTU0FHRV9LRVlTID0gW1xuICAnY2hhdC5hY3Rpdml0eS50aGlua2luZy5hbmFseXppbmcnLFxuICAnY2hhdC5hY3Rpdml0eS50aGlua2luZy5yZXZpZXdpbmcnLFxuICAnY2hhdC5hY3Rpdml0eS50aGlua2luZy5wbGFubmluZycsXG5dIGFzIGNvbnN0XG5cbmNvbnN0IEdFTkVSQVRJTkdfTUVTU0FHRV9LRVlTID0gW1xuICAnY2hhdC5hY3Rpdml0eS5nZW5lcmF0aW5nLmNvbnNpZGVyaW5nJyxcbiAgJ2NoYXQuYWN0aXZpdHkuZ2VuZXJhdGluZy5hbG1vc3RSZWFkeScsXG4gICdjaGF0LmFjdGl2aXR5LmdlbmVyYXRpbmcucHJlcGFyaW5nJyxcbl0gYXMgY29uc3RcblxuY29uc3QgU0VBUkNIX01FU1NBR0VfS0VZUyA9IFsnY2hhdC5hY3Rpdml0eS5zZWFyY2guc2Nhbm5pbmcnLCAnY2hhdC5hY3Rpdml0eS5zZWFyY2guc3VtbWFyaXppbmcnXSBhcyBjb25zdFxuXG5jb25zdCBERUVQX1NFQVJDSF9NRVNTQUdFX0tFWVMgPSBbXG4gICdjaGF0LmFjdGl2aXR5LmRlZXBTZWFyY2guZXhwbG9yaW5nJyxcbiAgJ2NoYXQuYWN0aXZpdHkuZGVlcFNlYXJjaC5jcm9zc0NoZWNraW5nJyxcbl0gYXMgY29uc3RcblxuY29uc3QgQVRUQUNITUVOVF9NRVNTQUdFX0tFWVMgPSBbJ2NoYXQuYWN0aXZpdHkuYXR0YWNobWVudC5yZWFkaW5nJywgJ2NoYXQuYWN0aXZpdHkuYXR0YWNobWVudC5leHRyYWN0aW5nJ10gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IFdSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkgPSAnY2hhdC5hY3Rpdml0eS53cml0aW5nLmNvbXBvc2luZycgYXMgY29uc3RcblxuLyoqIFRvb2xzIEhJVEwgLyBub2RlIFNTRSDihpIga2V5IGkxOG4gZGVsIGluZGljYWRvciBkZSBhY3RpdmlkYWQgKHRpZW1wbyBwcmVzZW50ZSBjb250aW51bykuICovXG5jb25zdCBISVRMX1RPT0xfQUNUSVZJVFlfS0VZUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgY3JlYXRlX3Rhc2s6ICdjaGF0LmFjdGl2aXR5LmNyZWF0aW5nVGFzaycsXG4gIGNsb25lX3Rhc2s6ICdjaGF0LmFjdGl2aXR5LmNyZWF0aW5nVGFzaycsXG4gIGNyZWF0ZV90YXNrc19iYXRjaDogJ2NoYXQuYWN0aXZpdHkuY3JlYXRpbmdUYXNrc0JhdGNoJyxcbiAgY3JlYXRlX2FnZW50OiAnY2hhdC5hY3Rpdml0eS5jcmVhdGluZ0FnZW50JyxcbiAgZWRpdF9hZ2VudDogJ2NoYXQuYWN0aXZpdHkuZWRpdGluZ0FnZW50JyxcbiAgZWRpdF90YXNrOiAnY2hhdC5hY3Rpdml0eS5lZGl0aW5nVGFzaycsXG4gIGVkaXRfdGFza3NfYmF0Y2g6ICdjaGF0LmFjdGl2aXR5LmVkaXRpbmdUYXNrc0JhdGNoJyxcbiAgZGVsZXRlX3Rhc2s6ICdjaGF0LmFjdGl2aXR5LmRlbGV0aW5nVGFzaycsXG4gIGRlbGV0ZV90YXNrc19iYXRjaDogJ2NoYXQuYWN0aXZpdHkuZGVsZXRpbmdUYXNrc0JhdGNoJyxcbiAgdGFza19hc3NpZ246ICdjaGF0LmFjdGl2aXR5LmFzc2lnbmluZ1VzZXInLFxuICB0YXNrX3VuYXNzaWduOiAnY2hhdC5hY3Rpdml0eS51bmFzc2lnbmluZ1VzZXInLFxuICBhc3NpZ25fdGFza19sYWJlbDogJ2NoYXQuYWN0aXZpdHkuYXNzaWduaW5nTGFiZWwnLFxuICB1cGRhdGVfdGFza190eXBlOiAnY2hhdC5hY3Rpdml0eS51cGRhdGluZ1Rhc2tUeXBlJyxcbiAgdXBkYXRlX2VzdGltYXRlZF9ob3VyczogJ2NoYXQuYWN0aXZpdHkudXBkYXRpbmdFc3RpbWF0ZWRIb3VycycsXG4gIHVwZGF0ZV9kZWxpdmVyYWJsZTogJ2NoYXQuYWN0aXZpdHkudXBkYXRpbmdEZWxpdmVyYWJsZScsXG4gIGNyZWF0ZV9ob3VyOiAnY2hhdC5hY3Rpdml0eS5sb2dnaW5nSG91cnMnLFxuICBjcmVhdGVfY2hlY2tsaXN0OiAnY2hhdC5hY3Rpdml0eS5jcmVhdGluZ0NoZWNrbGlzdCcsXG4gIGdldF90YXNrX2RhdGVfaG91cnM6ICdjaGF0LmFjdGl2aXR5LnF1ZXJ5aW5nSG91cnMnLFxuICBjb25maWd1cmVfYWdlbnRfYWNjZXNzOiAnY2hhdC5hY3Rpdml0eS5jb25maWd1cmluZ0FnZW50QWNjZXNzJyxcbiAgc2VuZF90YXNrX21lc3NhZ2U6ICdjaGF0LmFjdGl2aXR5LnNlbmRpbmdUYXNrTWVzc2FnZScsXG4gIGRlbGV0ZV9jaGVja2xpc3RfaXRlbTogJ2NoYXQuYWN0aXZpdHkuZGVsZXRpbmdDaGVja2xpc3RJdGVtJyxcbiAgcmVtb3ZlX3Rhc2tfdHlwZTogJ2NoYXQuYWN0aXZpdHkucmVtb3ZpbmdUYXNrVHlwZScsXG4gIHJlbW92ZV90YXNrX2xhYmVsOiAnY2hhdC5hY3Rpdml0eS5yZW1vdmluZ0xhYmVsJyxcbiAgY291bnRfZGVsaXZlcmFibGU6ICdjaGF0LmFjdGl2aXR5LnVwZGF0aW5nRGVsaXZlcmFibGVDb3VudCcsXG4gIGNyZWF0ZV9yZXdvcms6ICdjaGF0LmFjdGl2aXR5LmNyZWF0aW5nUmV3b3JrJyxcbiAgdXBkYXRlX3Jld29yazogJ2NoYXQuYWN0aXZpdHkudXBkYXRpbmdSZXdvcmsnLFxufVxuXG5jb25zdCBISVRMX1RPT0xfTkFNRVNfQllfU1BFQ0lGSUNJVFkgPSBPYmplY3Qua2V5cyhISVRMX1RPT0xfQUNUSVZJVFlfS0VZUykuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcblxuLyoqIE1lbnNhamVzIGdlbsOpcmljb3MgZGVsIGJhY2tlbmQgY3VhbmRvIG5vIGhheSBkZXRhbGxlIGRlIHRvb2wgKGNvbnRpbnVlLXRocmVhZCkuICovXG5jb25zdCBpc0dlbmVyaWNSZXN1bWVOb2RlTWVzc2FnZSA9IChtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG1lc3NhZ2UudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgcmV0dXJuIChcbiAgICBub3JtYWxpemVkLnN0YXJ0c1dpdGgoJ2VqZWN1dGFuZG8gYWNjacOzbiBhcHJvYmFkYScpIHx8XG4gICAgbm9ybWFsaXplZC5zdGFydHNXaXRoKCdleGVjdXRpbmcgYXBwcm92ZWQgYWN0aW9uJykgfHxcbiAgICBub3JtYWxpemVkLnN0YXJ0c1dpdGgoJ2V4ZWN1dGFuZG8gYcOnw6NvIGFwcm92YWRhJylcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgbWFwSGl0bFRvb2xOYW1lVG9TdHJlYW1BY3Rpdml0eSA9IChcbiAgdG9vbE5hbWU6IHN0cmluZyxcbiAgdDogVHJhbnNsYXRlRm4sXG4gIG9wdGlvbnM/OiB7IHVzZVJlc3VtaW5nRmFsbGJhY2s/OiBib29sZWFuIH1cbik6IFN0cmVhbUFjdGl2aXR5ID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUhpdGxUb29sTmFtZSh0b29sTmFtZSlcbiAgY29uc3Qga2V5ID0gSElUTF9UT09MX0FDVElWSVRZX0tFWVNbbm9ybWFsaXplZF1cbiAgaWYgKGtleSkge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdChrZXkpIH1cbiAgfVxuICBpZiAob3B0aW9ucz8udXNlUmVzdW1pbmdGYWxsYmFjaykge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdCgnY2hhdC5hY3Rpdml0eS5yZXN1bWluZ0FjdGlvbicpIH1cbiAgfVxuICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHQoJ2NoYXQuZXhlY3V0aW5nQWN0aW9uJykgfVxufVxuXG5jb25zdCByZXNvbHZlSGl0bFRvb2xGcm9tTm9kZU1lc3NhZ2UgPSAobm9kZU1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9kZU1lc3NhZ2UudG9Mb3dlckNhc2UoKS50cmltKClcbiAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4gbnVsbFxuXG4gIGlmIChISVRMX1RPT0xfQUNUSVZJVFlfS0VZU1tub3JtYWxpemVkXSkge1xuICAgIHJldHVybiBub3JtYWxpemVkXG4gIH1cblxuICBjb25zdCBhc1Rvb2xOYW1lID0gbm9ybWFsaXplSGl0bFRvb2xOYW1lKG5vcm1hbGl6ZWQucmVwbGFjZSgvXFxzKy9nLCAnXycpKVxuICBpZiAoSElUTF9UT09MX0FDVElWSVRZX0tFWVNbYXNUb29sTmFtZV0pIHtcbiAgICByZXR1cm4gYXNUb29sTmFtZVxuICB9XG5cbiAgY29uc3QgbWF0Y2hlZFRvb2wgPSBISVRMX1RPT0xfTkFNRVNfQllfU1BFQ0lGSUNJVFkuZmluZCh0b29sTmFtZSA9PiBub3JtYWxpemVkLmluY2x1ZGVzKHRvb2xOYW1lKSlcbiAgcmV0dXJuIG1hdGNoZWRUb29sID8/IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IG1hcE5vZGVNZXNzYWdlVG9TdHJlYW1BY3Rpdml0eSA9IChcbiAgbm9kZU1lc3NhZ2U6IHN0cmluZyxcbiAgdDogVHJhbnNsYXRlRm4sXG4gIG9wdGlvbnM/OiB7IHVzZVJlc3VtaW5nRmFsbGJhY2s/OiBib29sZWFuIH1cbik6IFN0cmVhbUFjdGl2aXR5ID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vZGVNZXNzYWdlLnRvTG93ZXJDYXNlKClcblxuICBjb25zdCBoaXRsVG9vbCA9IHJlc29sdmVIaXRsVG9vbEZyb21Ob2RlTWVzc2FnZShub2RlTWVzc2FnZSlcbiAgaWYgKGhpdGxUb29sKSB7XG4gICAgcmV0dXJuIG1hcEhpdGxUb29sTmFtZVRvU3RyZWFtQWN0aXZpdHkoaGl0bFRvb2wsIHQsIG9wdGlvbnMpXG4gIH1cblxuICBpZiAoXG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygncmVzcG9uc2VfZmlsZV9nZW5lcmF0aW9uJykgfHxcbiAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdnZW5lcmFuZG8gYXJjaGl2bycpIHx8XG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygnZ2VuZXJhdGluZyBmaWxlJylcbiAgKSB7XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdhY3Rpb24nLCBtZXNzYWdlOiB0KCdjaGF0LmFjdGl2aXR5LmdlbmVyYXRpbmdGaWxlJykgfVxuICB9XG4gIGlmIChcbiAgICBub3JtYWxpemVkLmluY2x1ZGVzKCd0YXZpbHknKSB8fFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3NlYXJjaF93ZWInKSB8fFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2J1c2NhbmRvIGVuIGxhIHdlYicpIHx8XG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygnc2VhcmNoaW5nIHRoZSB3ZWInKVxuICApIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ3NlYXJjaCcsIG1lc3NhZ2U6IHQoU0VBUkNIX01FU1NBR0VfS0VZU1swXSkgfVxuICB9XG5cbiAgY29uc3QgdHJpbW1lZE1lc3NhZ2UgPSBub2RlTWVzc2FnZS50cmltKClcbiAgaWYgKHRyaW1tZWRNZXNzYWdlICYmICFpc0dlbmVyaWNSZXN1bWVOb2RlTWVzc2FnZSh0cmltbWVkTWVzc2FnZSkpIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHRyaW1tZWRNZXNzYWdlIH1cbiAgfVxuXG4gIGlmIChpc0dlbmVyaWNSZXN1bWVOb2RlTWVzc2FnZSh0cmltbWVkTWVzc2FnZSkgfHwgb3B0aW9ucz8udXNlUmVzdW1pbmdGYWxsYmFjaykge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdCgnY2hhdC5hY3Rpdml0eS5yZXN1bWluZ0FjdGlvbicpIH1cbiAgfVxuICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHQoJ2NoYXQuZXhlY3V0aW5nQWN0aW9uJykgfVxufVxuXG5leHBvcnQgdHlwZSBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgbWVzc2FnZUlkPzogc3RyaW5nXG4gIG1lc3NhZ2VUZXh0Pzogc3RyaW5nXG4gIGFwcHJvdmFsPzogQXBwcm92YWxSZXF1ZXN0XG4gIHBlbmRpbmdBY3Rpb25zPzogUGVuZGluZ0FjdGlvbltdXG4gIHRocmVhZElkcz86IHN0cmluZ1tdXG59XG5cbmNvbnN0IHJlc29sdmVQZW5kaW5nQWN0aW9uc0ZvclRocmVhZCA9IChcbiAgY29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuICB0aHJlYWRJZD86IHN0cmluZ1xuKTogUGVuZGluZ0FjdGlvbltdID0+IHtcbiAgY29uc3QgcGVuZGluZyA9IGNvbnRleHQ/LnBlbmRpbmdBY3Rpb25zID8/IGNvbnRleHQ/LmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnMgPz8gW11cbiAgaWYgKCFwZW5kaW5nLmxlbmd0aCkgcmV0dXJuIFtdXG5cbiAgaWYgKHRocmVhZElkKSB7XG4gICAgY29uc3QgZm9yVGhyZWFkID0gcGVuZGluZy5maWx0ZXIoYWN0aW9uID0+IGFjdGlvbi50aHJlYWRfaWQgPT09IHRocmVhZElkKVxuICAgIGlmIChmb3JUaHJlYWQubGVuZ3RoKSByZXR1cm4gZm9yVGhyZWFkXG4gIH1cblxuICBpZiAoY29udGV4dD8udGhyZWFkSWRzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gcGVuZGluZy5maWx0ZXIoYWN0aW9uID0+IGNvbnRleHQudGhyZWFkSWRzPy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgfVxuXG4gIHJldHVybiBwZW5kaW5nXG59XG5cbmNvbnN0IGRldGVjdFRvb2xzRnJvbVBlbmRpbmdBY3Rpb25zID0gKGFjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IHN0cmluZ1tdID0+IFtcbiAgLi4ubmV3IFNldChhY3Rpb25zLm1hcChhY3Rpb24gPT4gbm9ybWFsaXplSGl0bFRvb2xOYW1lKGFjdGlvbi50b29sX25hbWUpKS5maWx0ZXIoQm9vbGVhbikpLFxuXVxuXG4vKiogUmVzdWVsdmUgaW5kaWNhZG9yIEhJVEwgcHJpb3JpemFuZG8gcGVuZGluZ19hY3Rpb25zIGRlbCBtZW5zYWplIGRlIGFwcm9iYWNpw7NuIGFudGVyaW9yLiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5ID0gKFxuICBub2RlTWVzc2FnZTogc3RyaW5nLFxuICB0OiBUcmFuc2xhdGVGbixcbiAgY29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbCxcbiAgdGhyZWFkSWQ/OiBzdHJpbmcsXG4gIG9wdGlvbnM/OiB7IHVzZVJlc3VtaW5nRmFsbGJhY2s/OiBib29sZWFuOyBsb2dTb3VyY2U/OiBzdHJpbmcgfVxuKTogU3RyZWFtQWN0aXZpdHkgPT4ge1xuICBjb25zdCBwZW5kaW5nRm9yVGhyZWFkID0gcmVzb2x2ZVBlbmRpbmdBY3Rpb25zRm9yVGhyZWFkKGNvbnRleHQsIHRocmVhZElkKVxuICBjb25zdCBkZXRlY3RlZFRvb2xzID0gZGV0ZWN0VG9vbHNGcm9tUGVuZGluZ0FjdGlvbnMocGVuZGluZ0ZvclRocmVhZClcblxuICBpZiAob3B0aW9ucz8ubG9nU291cmNlKSB7XG4gICAgbG9nSGl0bEFwcHJvdmFsQ29udGV4dChvcHRpb25zLmxvZ1NvdXJjZSwge1xuICAgICAgbWVzc2FnZUlkOiBjb250ZXh0Py5tZXNzYWdlSWQsXG4gICAgICBtZXNzYWdlVGV4dDogY29udGV4dD8ubWVzc2FnZVRleHQsXG4gICAgICB0aHJlYWRJZCxcbiAgICAgIHRocmVhZElkczogY29udGV4dD8udGhyZWFkSWRzLFxuICAgICAgbm9kZU1lc3NhZ2UsXG4gICAgICBwZW5kaW5nQWN0aW9uczogcGVuZGluZ0ZvclRocmVhZCxcbiAgICAgIGRldGVjdGVkVG9vbHMsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHRyaW1tZWROb2RlTWVzc2FnZSA9IG5vZGVNZXNzYWdlLnRyaW0oKVxuICBjb25zdCBhY3Rpdml0eUZyb21Ob2RlTWVzc2FnZSA9XG4gICAgdHJpbW1lZE5vZGVNZXNzYWdlICYmICFpc0dlbmVyaWNSZXN1bWVOb2RlTWVzc2FnZSh0cmltbWVkTm9kZU1lc3NhZ2UpXG4gICAgICA/IHsgcGhhc2U6ICdhY3Rpb24nIGFzIGNvbnN0LCBtZXNzYWdlOiB0cmltbWVkTm9kZU1lc3NhZ2UgfVxuICAgICAgOiBudWxsXG5cbiAgY29uc3QgcmVzb2x2ZUFuZExvZyA9IChhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkpID0+IHtcbiAgICBpZiAob3B0aW9ucz8ubG9nU291cmNlKSB7XG4gICAgICBsb2dIaXRsQXBwcm92YWxDb250ZXh0KGAke29wdGlvbnMubG9nU291cmNlfTpyZXNvbHZlZGAsIHtcbiAgICAgICAgZGV0ZWN0ZWRUb29scyxcbiAgICAgICAgcmVzb2x2ZWRBY3Rpdml0eTogYWN0aXZpdHksXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gYWN0aXZpdHlcbiAgfVxuXG4gIGlmIChkZXRlY3RlZFRvb2xzLmxlbmd0aCA+PSAxKSB7XG4gICAgaWYgKGFjdGl2aXR5RnJvbU5vZGVNZXNzYWdlKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZUFuZExvZyhhY3Rpdml0eUZyb21Ob2RlTWVzc2FnZSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmVBbmRMb2cobWFwSGl0bFRvb2xOYW1lVG9TdHJlYW1BY3Rpdml0eShkZXRlY3RlZFRvb2xzWzBdLCB0LCBvcHRpb25zKSlcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlQW5kTG9nKG1hcE5vZGVNZXNzYWdlVG9TdHJlYW1BY3Rpdml0eShub2RlTWVzc2FnZSwgdCwgb3B0aW9ucykpXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSA9IChcbiAgdDogVHJhbnNsYXRlRm4sXG4gIGNvbnRleHQ/OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGwsXG4gIG9wdGlvbnM/OiB7IGxvZ1NvdXJjZT86IHN0cmluZyB9XG4pOiBTdHJlYW1BY3Rpdml0eSA9PiB7XG4gIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcmVzb2x2ZVBlbmRpbmdBY3Rpb25zRm9yVGhyZWFkKGNvbnRleHQpXG4gIGNvbnN0IGRldGVjdGVkVG9vbHMgPSBkZXRlY3RUb29sc0Zyb21QZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9ucylcblxuICBpZiAob3B0aW9ucz8ubG9nU291cmNlKSB7XG4gICAgbG9nSGl0bEFwcHJvdmFsQ29udGV4dChvcHRpb25zLmxvZ1NvdXJjZSwge1xuICAgICAgbWVzc2FnZUlkOiBjb250ZXh0Py5tZXNzYWdlSWQsXG4gICAgICBtZXNzYWdlVGV4dDogY29udGV4dD8ubWVzc2FnZVRleHQsXG4gICAgICB0aHJlYWRJZHM6IGNvbnRleHQ/LnRocmVhZElkcyxcbiAgICAgIHBlbmRpbmdBY3Rpb25zLFxuICAgICAgZGV0ZWN0ZWRUb29scyxcbiAgICB9KVxuICB9XG5cbiAgaWYgKGRldGVjdGVkVG9vbHMubGVuZ3RoID49IDEpIHtcbiAgICBjb25zdCBhY3Rpdml0eSA9IG1hcEhpdGxUb29sTmFtZVRvU3RyZWFtQWN0aXZpdHkoZGV0ZWN0ZWRUb29sc1swXSwgdCwgeyB1c2VSZXN1bWluZ0ZhbGxiYWNrOiB0cnVlIH0pXG4gICAgaWYgKG9wdGlvbnM/LmxvZ1NvdXJjZSkge1xuICAgICAgbG9nSGl0bEFwcHJvdmFsQ29udGV4dChgJHtvcHRpb25zLmxvZ1NvdXJjZX06cmVzb2x2ZWRgLCB7XG4gICAgICAgIGRldGVjdGVkVG9vbHMsXG4gICAgICAgIHJlc29sdmVkQWN0aXZpdHk6IGFjdGl2aXR5LFxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGFjdGl2aXR5XG4gIH1cblxuICByZXR1cm4geyBwaGFzZTogJ3Byb2Nlc3NpbmcnLCBtZXNzYWdlOiB0KCdjaGF0LnByb2Nlc3NpbmcnKSB9XG59XG5cbmV4cG9ydCBjb25zdCBBQ1RJVklUWV9NRVNTQUdFX1JPVEFURV9NUyA9IDMyMDBcblxuY29uc3QgUk9UQVRBQkxFX1BIQVNFUzogU3RyZWFtQWN0aXZpdHlQaGFzZVtdID0gWydnZW5lcmF0aW5nJywgJ3RoaW5raW5nJywgJ3NlYXJjaCcsICdkZWVwX3NlYXJjaCcsICdhdHRhY2htZW50J11cblxuY29uc3QgZ2V0TWVzc2FnZUtleXNGb3JQaGFzZSA9IChwaGFzZTogU3RyZWFtQWN0aXZpdHlQaGFzZSk6IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbCA9PiB7XG4gIHN3aXRjaCAocGhhc2UpIHtcbiAgICBjYXNlICdnZW5lcmF0aW5nJzpcbiAgICAgIHJldHVybiBHRU5FUkFUSU5HX01FU1NBR0VfS0VZU1xuICAgIGNhc2UgJ3RoaW5raW5nJzpcbiAgICAgIHJldHVybiBUSElOS0lOR19NRVNTQUdFX0tFWVNcbiAgICBjYXNlICdzZWFyY2gnOlxuICAgICAgcmV0dXJuIFNFQVJDSF9NRVNTQUdFX0tFWVNcbiAgICBjYXNlICdkZWVwX3NlYXJjaCc6XG4gICAgICByZXR1cm4gREVFUF9TRUFSQ0hfTUVTU0FHRV9LRVlTXG4gICAgY2FzZSAnYXR0YWNobWVudCc6XG4gICAgICByZXR1cm4gQVRUQUNITUVOVF9NRVNTQUdFX0tFWVNcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0U3RyZWFtQWN0aXZpdHlNZXNzYWdlQXRJbmRleCA9IChwaGFzZTogU3RyZWFtQWN0aXZpdHlQaGFzZSwgaW5kZXg6IG51bWJlciwgdDogVHJhbnNsYXRlRm4pOiBzdHJpbmcgPT4ge1xuICBpZiAocGhhc2UgPT09ICd3cml0aW5nJykge1xuICAgIHJldHVybiB0KFdSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkpXG4gIH1cblxuICBjb25zdCBrZXlzID0gZ2V0TWVzc2FnZUtleXNGb3JQaGFzZShwaGFzZSlcbiAgaWYgKCFrZXlzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGNvbnN0IGNsYW1wZWRJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KDAsIGluZGV4KSwga2V5cy5sZW5ndGggLSAxKVxuICByZXR1cm4gdChrZXlzW2NsYW1wZWRJbmRleF0pXG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlID0gKGluZGV4OiBudW1iZXIsIHQ6IFRyYW5zbGF0ZUZuKTogc3RyaW5nID0+XG4gIGdldFN0cmVhbUFjdGl2aXR5TWVzc2FnZUF0SW5kZXgoJ3RoaW5raW5nJywgaW5kZXgsIHQpXG5cbmV4cG9ydCBjb25zdCBnZXRHZW5lcmF0aW5nTG9hZGluZ01lc3NhZ2UgPSAoaW5kZXg6IG51bWJlciwgdDogVHJhbnNsYXRlRm4pOiBzdHJpbmcgPT5cbiAgZ2V0U3RyZWFtQWN0aXZpdHlNZXNzYWdlQXRJbmRleCgnZ2VuZXJhdGluZycsIGluZGV4LCB0KVxuXG5leHBvcnQgY29uc3QgY2FuQWR2YW5jZVN0cmVhbUFjdGl2aXR5TWVzc2FnZSA9IChwaGFzZTogU3RyZWFtQWN0aXZpdHlQaGFzZSwgY3VycmVudEluZGV4OiBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgY29uc3Qga2V5cyA9IGdldE1lc3NhZ2VLZXlzRm9yUGhhc2UocGhhc2UpXG4gIGlmICgha2V5cykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiBjdXJyZW50SW5kZXggPCBrZXlzLmxlbmd0aCAtIDFcbn1cblxuZXhwb3J0IGNvbnN0IGFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UgPSAoXG4gIGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSxcbiAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gIHQ6IFRyYW5zbGF0ZUZuXG4pOiB7IGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eTsgbmV4dEluZGV4OiBudW1iZXIgfSB8IG51bGwgPT4ge1xuICBpZiAoIWNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UoYWN0aXZpdHkucGhhc2UsIGN1cnJlbnRJbmRleCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbmV4dEluZGV4ID0gY3VycmVudEluZGV4ICsgMVxuICByZXR1cm4ge1xuICAgIGFjdGl2aXR5OiB7XG4gICAgICBwaGFzZTogYWN0aXZpdHkucGhhc2UsXG4gICAgICBtZXNzYWdlOiBnZXRTdHJlYW1BY3Rpdml0eU1lc3NhZ2VBdEluZGV4KGFjdGl2aXR5LnBoYXNlLCBuZXh0SW5kZXgsIHQpLFxuICAgIH0sXG4gICAgbmV4dEluZGV4LFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlID0gKHBoYXNlOiBTdHJlYW1BY3Rpdml0eVBoYXNlKTogYm9vbGVhbiA9PiBST1RBVEFCTEVfUEhBU0VTLmluY2x1ZGVzKHBoYXNlKVxuXG5leHBvcnQgY29uc3QgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5ID0gKHQ6IFRyYW5zbGF0ZUZuKTogU3RyZWFtQWN0aXZpdHkgPT4gKHtcbiAgcGhhc2U6ICd3cml0aW5nJyxcbiAgbWVzc2FnZTogdChXUklUSU5HX0FDVElWSVRZX01FU1NBR0VfS0VZKSxcbn0pXG5cbmV4cG9ydCBjb25zdCBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkgPSAoXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBvcHRpb25zOiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGhhc0F0dGFjaG1lbnRzPzogYm9vbGVhblxuICB9XG4pOiBTdHJlYW1BY3Rpdml0eSA9PiB7XG4gIGlmIChvcHRpb25zLmlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdzZWFyY2gnLCBtZXNzYWdlOiB0KFNFQVJDSF9NRVNTQUdFX0tFWVNbMF0pIH1cbiAgfVxuICBpZiAob3B0aW9ucy5pc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ2RlZXBfc2VhcmNoJywgbWVzc2FnZTogdChERUVQX1NFQVJDSF9NRVNTQUdFX0tFWVNbMF0pIH1cbiAgfVxuICBpZiAob3B0aW9ucy5oYXNBdHRhY2htZW50cykge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYXR0YWNobWVudCcsIG1lc3NhZ2U6IHQoQVRUQUNITUVOVF9NRVNTQUdFX0tFWVNbMF0pIH1cbiAgfVxuICByZXR1cm4geyBwaGFzZTogJ2dlbmVyYXRpbmcnLCBtZXNzYWdlOiB0KEdFTkVSQVRJTkdfTUVTU0FHRV9LRVlTWzBdKSB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkgPSAocGFyYW1zOiB7XG4gIHN0cmVhbUFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSB8IG51bGxcbiAgbG9hZGluZ01lc3NhZ2U6IHN0cmluZyB8IG51bGxcbiAgYWN0aXZlTG9hZGluZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgd2FpdGluZ1Jlc3BvbnNlOiBib29sZWFuXG4gIGlzV2ViU2VhcmNoQWN0aXZlOiBib29sZWFuXG4gIGlzRGVlcFNlYXJjaEFjdGl2ZTogYm9vbGVhblxuICBoYXNBdHRhY2htZW50czogYm9vbGVhblxuICB0OiBUcmFuc2xhdGVGblxufSk6IFN0cmVhbUFjdGl2aXR5IHwgbnVsbCA9PiB7XG4gIGlmIChwYXJhbXMuc3RyZWFtQWN0aXZpdHkpIHtcbiAgICByZXR1cm4gcGFyYW1zLnN0cmVhbUFjdGl2aXR5XG4gIH1cblxuICBjb25zdCBhY3RpdmVLZXlzID0gT2JqZWN0LmtleXMocGFyYW1zLmFjdGl2ZUxvYWRpbmdzKVxuICBpZiAoYWN0aXZlS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmlyc3RLZXkgPSBhY3RpdmVLZXlzWzBdXG4gICAgY29uc3QgcmF3ID0gcGFyYW1zLmFjdGl2ZUxvYWRpbmdzW2ZpcnN0S2V5XVxuICAgIGlmIChyYXcgJiYgcmF3ICE9PSBwYXJhbXMudCgnY2hhdC5wcm9jZXNzaW5nJykpIHtcbiAgICAgIGNvbnN0IGhpdGxUb29sID0gcmVzb2x2ZUhpdGxUb29sRnJvbU5vZGVNZXNzYWdlKHJhdylcbiAgICAgIGlmIChoaXRsVG9vbCkge1xuICAgICAgICByZXR1cm4gbWFwSGl0bFRvb2xOYW1lVG9TdHJlYW1BY3Rpdml0eShoaXRsVG9vbCwgcGFyYW1zLnQpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyaW1tZWQgPSByYXcudHJpbSgpXG4gICAgICBpZiAodHJpbW1lZCAmJiAhaXNHZW5lcmljUmVzdW1lTm9kZU1lc3NhZ2UodHJpbW1lZCkpIHtcbiAgICAgICAgcmV0dXJuIHsgcGhhc2U6ICdhY3Rpb24nLCBtZXNzYWdlOiB0cmltbWVkIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcE5vZGVNZXNzYWdlVG9TdHJlYW1BY3Rpdml0eShyYXcsIHBhcmFtcy50LCB7IHVzZVJlc3VtaW5nRmFsbGJhY2s6IHRydWUgfSlcbiAgICB9XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdwcm9jZXNzaW5nJywgbWVzc2FnZTogcGFyYW1zLnQoJ2NoYXQucHJvY2Vzc2luZycpIH1cbiAgfVxuXG4gIGlmIChwYXJhbXMubG9hZGluZ01lc3NhZ2UpIHtcbiAgICBpZiAoXG4gICAgICBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LndyaXRpbmcnKSB8fFxuICAgICAgcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudChXUklUSU5HX0FDVElWSVRZX01FU1NBR0VfS0VZKVxuICAgICkge1xuICAgICAgcmV0dXJuIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eShwYXJhbXMudClcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoJ2NoYXQuZ2VuZXJhdGluZycpKSB7XG4gICAgICByZXR1cm4geyBwaGFzZTogJ2dlbmVyYXRpbmcnLCBtZXNzYWdlOiBwYXJhbXMubG9hZGluZ01lc3NhZ2UgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LmdlbmVyYXRpbmdXZWJTZWFyY2gnKSB8fFxuICAgICAgcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nRGVlcFNlYXJjaCcpIHx8XG4gICAgICBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LmdlbmVyYXRpbmdBdHRhY2htZW50JylcbiAgICApIHtcbiAgICAgIHJldHVybiBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkocGFyYW1zLnQsIHtcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoJ2NoYXQuZ2VuZXJhdGluZ1dlYlNlYXJjaCcpLFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoJ2NoYXQuZ2VuZXJhdGluZ0RlZXBTZWFyY2gnKSxcbiAgICAgICAgaGFzQXR0YWNobWVudHM6IHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoJ2NoYXQuZ2VuZXJhdGluZ0F0dGFjaG1lbnQnKSxcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogcGFyYW1zLmxvYWRpbmdNZXNzYWdlIH1cbiAgfVxuXG4gIGlmIChwYXJhbXMud2FpdGluZ1Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eShwYXJhbXMudCwge1xuICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IHBhcmFtcy5pc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogcGFyYW1zLmlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICAgIGhhc0F0dGFjaG1lbnRzOiBwYXJhbXMuaGFzQXR0YWNobWVudHMsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkID0gKG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PlxuICB0eXBlb2YgbWVzc2FnZUlkID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlSWQuaW5jbHVkZXMoJy1zdHJlYW1pbmcnKVxuIl0sIm1hcHBpbmdzIjoiO0FBRUEsU0FBU0EscUJBQXFCLFFBQVEsaUJBQWlCO0FBQ3ZELFNBQVNDLHNCQUFzQixRQUFRLG1CQUFtQjtBQUkxRCxJQUFNQyxxQkFBcUIsR0FBRyxDQUM1QixrQ0FBa0MsRUFDbEMsa0NBQWtDLEVBQ2xDLGlDQUFpQyxDQUN6QjtBQUVWLElBQU1DLHVCQUF1QixHQUFHLENBQzlCLHNDQUFzQyxFQUN0QyxzQ0FBc0MsRUFDdEMsb0NBQW9DLENBQzVCO0FBRVYsSUFBTUMsbUJBQW1CLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxrQ0FBa0MsQ0FBVTtBQUUxRyxJQUFNQyx3QkFBd0IsR0FBRyxDQUMvQixvQ0FBb0MsRUFDcEMsd0NBQXdDLENBQ2hDO0FBRVYsSUFBTUMsdUJBQXVCLEdBQUcsQ0FBQyxrQ0FBa0MsRUFBRSxxQ0FBcUMsQ0FBVTtBQUVwSCxPQUFPLElBQU1DLDRCQUE0QixHQUFHLGlDQUEwQzs7QUFFdEY7QUFDQSxJQUFNQyx1QkFBK0MsR0FBRztFQUN0REMsV0FBVyxFQUFFLDRCQUE0QjtFQUN6Q0MsVUFBVSxFQUFFLDRCQUE0QjtFQUN4Q0Msa0JBQWtCLEVBQUUsa0NBQWtDO0VBQ3REQyxZQUFZLEVBQUUsNkJBQTZCO0VBQzNDQyxVQUFVLEVBQUUsNEJBQTRCO0VBQ3hDQyxTQUFTLEVBQUUsMkJBQTJCO0VBQ3RDQyxnQkFBZ0IsRUFBRSxpQ0FBaUM7RUFDbkRDLFdBQVcsRUFBRSw0QkFBNEI7RUFDekNDLGtCQUFrQixFQUFFLGtDQUFrQztFQUN0REMsV0FBVyxFQUFFLDZCQUE2QjtFQUMxQ0MsYUFBYSxFQUFFLCtCQUErQjtFQUM5Q0MsaUJBQWlCLEVBQUUsOEJBQThCO0VBQ2pEQyxnQkFBZ0IsRUFBRSxnQ0FBZ0M7RUFDbERDLHNCQUFzQixFQUFFLHNDQUFzQztFQUM5REMsa0JBQWtCLEVBQUUsbUNBQW1DO0VBQ3ZEQyxXQUFXLEVBQUUsNEJBQTRCO0VBQ3pDQyxnQkFBZ0IsRUFBRSxpQ0FBaUM7RUFDbkRDLG1CQUFtQixFQUFFLDZCQUE2QjtFQUNsREMsc0JBQXNCLEVBQUUsc0NBQXNDO0VBQzlEQyxpQkFBaUIsRUFBRSxrQ0FBa0M7RUFDckRDLHFCQUFxQixFQUFFLHFDQUFxQztFQUM1REMsZ0JBQWdCLEVBQUUsZ0NBQWdDO0VBQ2xEQyxpQkFBaUIsRUFBRSw2QkFBNkI7RUFDaERDLGlCQUFpQixFQUFFLHdDQUF3QztFQUMzREMsYUFBYSxFQUFFLDhCQUE4QjtFQUM3Q0MsYUFBYSxFQUFFO0FBQ2pCLENBQUM7QUFFRCxJQUFNQyw4QkFBOEIsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUM3Qix1QkFBdUIsQ0FBQyxDQUFDOEIsSUFBSSxDQUFDLFVBQUNDLENBQUMsRUFBRUMsQ0FBQztFQUFBLE9BQUtBLENBQUMsQ0FBQ0MsTUFBTSxHQUFHRixDQUFDLENBQUNFLE1BQU07QUFBQSxFQUFDOztBQUUvRztBQUNBLElBQU1DLDBCQUEwQixHQUFHLFNBQTdCQSwwQkFBMEJBLENBQUlDLE9BQWUsRUFBYztFQUMvRCxJQUFNQyxVQUFVLEdBQUdELE9BQU8sQ0FBQ0UsSUFBSSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUM7RUFDL0MsT0FDRUYsVUFBVSxDQUFDRyxVQUFVLENBQUMsNEJBQTRCLENBQUMsSUFDbkRILFVBQVUsQ0FBQ0csVUFBVSxDQUFDLDJCQUEyQixDQUFDLElBQ2xESCxVQUFVLENBQUNHLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQztBQUVyRCxDQUFDO0FBRUQsT0FBTyxJQUFNQywrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUMxQ0MsUUFBZ0IsRUFDaEJDLENBQWMsRUFDZEMsT0FBMkMsRUFDeEI7RUFDbkIsSUFBTVAsVUFBVSxHQUFHNUMscUJBQXFCLENBQUNpRCxRQUFRLENBQUM7RUFDbEQsSUFBTUcsR0FBRyxHQUFHNUMsdUJBQXVCLENBQUNvQyxVQUFVLENBQUM7RUFDL0MsSUFBSVEsR0FBRyxFQUFFO0lBQ1AsT0FBTztNQUFFQyxLQUFLLEVBQUUsUUFBUTtNQUFFVixPQUFPLEVBQUVPLENBQUMsQ0FBQ0UsR0FBRztJQUFFLENBQUM7RUFDN0M7RUFDQSxJQUFJRCxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFFRyxtQkFBbUIsRUFBRTtJQUNoQyxPQUFPO01BQUVELEtBQUssRUFBRSxRQUFRO01BQUVWLE9BQU8sRUFBRU8sQ0FBQyxDQUFDLDhCQUE4QjtJQUFFLENBQUM7RUFDeEU7RUFDQSxPQUFPO0lBQUVHLEtBQUssRUFBRSxRQUFRO0lBQUVWLE9BQU8sRUFBRU8sQ0FBQyxDQUFDLHNCQUFzQjtFQUFFLENBQUM7QUFDaEUsQ0FBQztBQUVELElBQU1LLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQUlDLFdBQW1CLEVBQW9CO0VBQzdFLElBQU1aLFVBQVUsR0FBR1ksV0FBVyxDQUFDVixXQUFXLENBQUMsQ0FBQyxDQUFDRCxJQUFJLENBQUMsQ0FBQztFQUNuRCxJQUFJLENBQUNELFVBQVUsRUFBRSxPQUFPLElBQUk7RUFFNUIsSUFBSXBDLHVCQUF1QixDQUFDb0MsVUFBVSxDQUFDLEVBQUU7SUFDdkMsT0FBT0EsVUFBVTtFQUNuQjtFQUVBLElBQU1hLFVBQVUsR0FBR3pELHFCQUFxQixDQUFDNEMsVUFBVSxDQUFDYyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3pFLElBQUlsRCx1QkFBdUIsQ0FBQ2lELFVBQVUsQ0FBQyxFQUFFO0lBQ3ZDLE9BQU9BLFVBQVU7RUFDbkI7RUFFQSxJQUFNRSxXQUFXLEdBQUd4Qiw4QkFBOEIsQ0FBQ3lCLElBQUksQ0FBQyxVQUFBWCxRQUFRO0lBQUEsT0FBSUwsVUFBVSxDQUFDaUIsUUFBUSxDQUFDWixRQUFRLENBQUM7RUFBQSxFQUFDO0VBQ2xHLE9BQU9VLFdBQVcsYUFBWEEsV0FBVyxjQUFYQSxXQUFXLEdBQUksSUFBSTtBQUM1QixDQUFDO0FBRUQsT0FBTyxJQUFNRyw4QkFBOEIsR0FBRyxTQUFqQ0EsOEJBQThCQSxDQUN6Q04sV0FBbUIsRUFDbkJOLENBQWMsRUFDZEMsT0FBMkMsRUFDeEI7RUFDbkIsSUFBTVAsVUFBVSxHQUFHWSxXQUFXLENBQUNWLFdBQVcsQ0FBQyxDQUFDO0VBRTVDLElBQU1pQixRQUFRLEdBQUdSLDhCQUE4QixDQUFDQyxXQUFXLENBQUM7RUFDNUQsSUFBSU8sUUFBUSxFQUFFO0lBQ1osT0FBT2YsK0JBQStCLENBQUNlLFFBQVEsRUFBRWIsQ0FBQyxFQUFFQyxPQUFPLENBQUM7RUFDOUQ7RUFFQSxJQUNFUCxVQUFVLENBQUNpQixRQUFRLENBQUMsMEJBQTBCLENBQUMsSUFDL0NqQixVQUFVLENBQUNpQixRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFDeENqQixVQUFVLENBQUNpQixRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFDdEM7SUFDQSxPQUFPO01BQUVSLEtBQUssRUFBRSxRQUFRO01BQUVWLE9BQU8sRUFBRU8sQ0FBQyxDQUFDLDhCQUE4QjtJQUFFLENBQUM7RUFDeEU7RUFDQSxJQUNFTixVQUFVLENBQUNpQixRQUFRLENBQUMsUUFBUSxDQUFDLElBQzdCakIsVUFBVSxDQUFDaUIsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUNqQ2pCLFVBQVUsQ0FBQ2lCLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUN6Q2pCLFVBQVUsQ0FBQ2lCLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUN4QztJQUNBLE9BQU87TUFBRVIsS0FBSyxFQUFFLFFBQVE7TUFBRVYsT0FBTyxFQUFFTyxDQUFDLENBQUM5QyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFBRSxDQUFDO0VBQ2hFO0VBRUEsSUFBTTRELGNBQWMsR0FBR1IsV0FBVyxDQUFDWCxJQUFJLENBQUMsQ0FBQztFQUN6QyxJQUFJbUIsY0FBYyxJQUFJLENBQUN0QiwwQkFBMEIsQ0FBQ3NCLGNBQWMsQ0FBQyxFQUFFO0lBQ2pFLE9BQU87TUFBRVgsS0FBSyxFQUFFLFFBQVE7TUFBRVYsT0FBTyxFQUFFcUI7SUFBZSxDQUFDO0VBQ3JEO0VBRUEsSUFBSXRCLDBCQUEwQixDQUFDc0IsY0FBYyxDQUFDLElBQUliLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUVHLG1CQUFtQixFQUFFO0lBQzlFLE9BQU87TUFBRUQsS0FBSyxFQUFFLFFBQVE7TUFBRVYsT0FBTyxFQUFFTyxDQUFDLENBQUMsOEJBQThCO0lBQUUsQ0FBQztFQUN4RTtFQUNBLE9BQU87SUFBRUcsS0FBSyxFQUFFLFFBQVE7SUFBRVYsT0FBTyxFQUFFTyxDQUFDLENBQUMsc0JBQXNCO0VBQUUsQ0FBQztBQUNoRSxDQUFDO0FBVUQsSUFBTWUsOEJBQThCLEdBQUcsU0FBakNBLDhCQUE4QkEsQ0FDbENDLE9BQWdELEVBQ2hEQyxRQUFpQixFQUNHO0VBQUEsSUFBQUMsSUFBQSxFQUFBQyxxQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxrQkFBQTtFQUNwQixJQUFNQyxPQUFPLElBQUFKLElBQUEsSUFBQUMscUJBQUEsR0FBR0gsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVPLGNBQWMsY0FBQUoscUJBQUEsY0FBQUEscUJBQUEsR0FBSUgsT0FBTyxhQUFQQSxPQUFPLGdCQUFBSSxpQkFBQSxHQUFQSixPQUFPLENBQUVRLFFBQVEsY0FBQUosaUJBQUEsdUJBQWpCQSxpQkFBQSxDQUFtQkssZUFBZSxjQUFBUCxJQUFBLGNBQUFBLElBQUEsR0FBSSxFQUFFO0VBQ25GLElBQUksQ0FBQ0ksT0FBTyxDQUFDL0IsTUFBTSxFQUFFLE9BQU8sRUFBRTtFQUU5QixJQUFJMEIsUUFBUSxFQUFFO0lBQ1osSUFBTVMsU0FBUyxHQUFHSixPQUFPLENBQUNLLE1BQU0sQ0FBQyxVQUFBQyxNQUFNO01BQUEsT0FBSUEsTUFBTSxDQUFDQyxTQUFTLEtBQUtaLFFBQVE7SUFBQSxFQUFDO0lBQ3pFLElBQUlTLFNBQVMsQ0FBQ25DLE1BQU0sRUFBRSxPQUFPbUMsU0FBUztFQUN4QztFQUVBLElBQUlWLE9BQU8sYUFBUEEsT0FBTyxnQkFBQUssa0JBQUEsR0FBUEwsT0FBTyxDQUFFYyxTQUFTLGNBQUFULGtCQUFBLGVBQWxCQSxrQkFBQSxDQUFvQjlCLE1BQU0sRUFBRTtJQUM5QixPQUFPK0IsT0FBTyxDQUFDSyxNQUFNLENBQUMsVUFBQUMsTUFBTTtNQUFBLElBQUFHLG1CQUFBO01BQUEsUUFBQUEsbUJBQUEsR0FBSWYsT0FBTyxDQUFDYyxTQUFTLGNBQUFDLG1CQUFBLHVCQUFqQkEsbUJBQUEsQ0FBbUJwQixRQUFRLENBQUNpQixNQUFNLENBQUNDLFNBQVMsQ0FBQztJQUFBLEVBQUM7RUFDaEY7RUFFQSxPQUFPUCxPQUFPO0FBQ2hCLENBQUM7QUFFRCxJQUFNVSw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQTZCQSxDQUFJQyxPQUF3QjtFQUFBLE9BQUFDLGtCQUFBLENBQzFELElBQUlDLEdBQUcsQ0FBQ0YsT0FBTyxDQUFDRyxHQUFHLENBQUMsVUFBQVIsTUFBTTtJQUFBLE9BQUk5RSxxQkFBcUIsQ0FBQzhFLE1BQU0sQ0FBQ1MsU0FBUyxDQUFDO0VBQUEsRUFBQyxDQUFDVixNQUFNLENBQUNXLE9BQU8sQ0FBQyxDQUFDO0FBQUEsQ0FDM0Y7O0FBRUQ7QUFDQSxPQUFPLElBQU1DLDZCQUE2QixHQUFHLFNBQWhDQSw2QkFBNkJBLENBQ3hDakMsV0FBbUIsRUFDbkJOLENBQWMsRUFDZGdCLE9BQXFDLEVBQ3JDQyxRQUFpQixFQUNqQmhCLE9BQStELEVBQzVDO0VBQ25CLElBQU11QyxnQkFBZ0IsR0FBR3pCLDhCQUE4QixDQUFDQyxPQUFPLEVBQUVDLFFBQVEsQ0FBQztFQUMxRSxJQUFNd0IsYUFBYSxHQUFHVCw2QkFBNkIsQ0FBQ1EsZ0JBQWdCLENBQUM7RUFFckUsSUFBSXZDLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUV5QyxTQUFTLEVBQUU7SUFDdEIzRixzQkFBc0IsQ0FBQ2tELE9BQU8sQ0FBQ3lDLFNBQVMsRUFBRTtNQUN4Q0MsU0FBUyxFQUFFM0IsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUUyQixTQUFTO01BQzdCQyxXQUFXLEVBQUU1QixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTRCLFdBQVc7TUFDakMzQixRQUFRLEVBQVJBLFFBQVE7TUFDUmEsU0FBUyxFQUFFZCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRWMsU0FBUztNQUM3QnhCLFdBQVcsRUFBWEEsV0FBVztNQUNYaUIsY0FBYyxFQUFFaUIsZ0JBQWdCO01BQ2hDQyxhQUFhLEVBQWJBO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxJQUFNSSxrQkFBa0IsR0FBR3ZDLFdBQVcsQ0FBQ1gsSUFBSSxDQUFDLENBQUM7RUFDN0MsSUFBTW1ELHVCQUF1QixHQUMzQkQsa0JBQWtCLElBQUksQ0FBQ3JELDBCQUEwQixDQUFDcUQsa0JBQWtCLENBQUMsR0FDakU7SUFBRTFDLEtBQUssRUFBRSxRQUFpQjtJQUFFVixPQUFPLEVBQUVvRDtFQUFtQixDQUFDLEdBQ3pELElBQUk7RUFFVixJQUFNRSxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUlDLFFBQXdCLEVBQUs7SUFDbEQsSUFBSS9DLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUV5QyxTQUFTLEVBQUU7TUFDdEIzRixzQkFBc0IsSUFBQWtHLE1BQUEsQ0FBSWhELE9BQU8sQ0FBQ3lDLFNBQVMsZ0JBQWE7UUFDdERELGFBQWEsRUFBYkEsYUFBYTtRQUNiUyxnQkFBZ0IsRUFBRUY7TUFDcEIsQ0FBQyxDQUFDO0lBQ0o7SUFDQSxPQUFPQSxRQUFRO0VBQ2pCLENBQUM7RUFFRCxJQUFJUCxhQUFhLENBQUNsRCxNQUFNLElBQUksQ0FBQyxFQUFFO0lBQzdCLElBQUl1RCx1QkFBdUIsRUFBRTtNQUMzQixPQUFPQyxhQUFhLENBQUNELHVCQUF1QixDQUFDO0lBQy9DO0lBQ0EsT0FBT0MsYUFBYSxDQUFDakQsK0JBQStCLENBQUMyQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUV6QyxDQUFDLEVBQUVDLE9BQU8sQ0FBQyxDQUFDO0VBQ3JGO0VBRUEsT0FBTzhDLGFBQWEsQ0FBQ25DLDhCQUE4QixDQUFDTixXQUFXLEVBQUVOLENBQUMsRUFBRUMsT0FBTyxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELE9BQU8sSUFBTWtELGdDQUFnQyxHQUFHLFNBQW5DQSxnQ0FBZ0NBLENBQzNDbkQsQ0FBYyxFQUNkZ0IsT0FBcUMsRUFDckNmLE9BQWdDLEVBQ2I7RUFDbkIsSUFBTXNCLGNBQWMsR0FBR1IsOEJBQThCLENBQUNDLE9BQU8sQ0FBQztFQUM5RCxJQUFNeUIsYUFBYSxHQUFHVCw2QkFBNkIsQ0FBQ1QsY0FBYyxDQUFDO0VBRW5FLElBQUl0QixPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFFeUMsU0FBUyxFQUFFO0lBQ3RCM0Ysc0JBQXNCLENBQUNrRCxPQUFPLENBQUN5QyxTQUFTLEVBQUU7TUFDeENDLFNBQVMsRUFBRTNCLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFMkIsU0FBUztNQUM3QkMsV0FBVyxFQUFFNUIsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUU0QixXQUFXO01BQ2pDZCxTQUFTLEVBQUVkLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFYyxTQUFTO01BQzdCUCxjQUFjLEVBQWRBLGNBQWM7TUFDZGtCLGFBQWEsRUFBYkE7SUFDRixDQUFDLENBQUM7RUFDSjtFQUVBLElBQUlBLGFBQWEsQ0FBQ2xELE1BQU0sSUFBSSxDQUFDLEVBQUU7SUFDN0IsSUFBTXlELFFBQVEsR0FBR2xELCtCQUErQixDQUFDMkMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFekMsQ0FBQyxFQUFFO01BQUVJLG1CQUFtQixFQUFFO0lBQUssQ0FBQyxDQUFDO0lBQ3BHLElBQUlILE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUV5QyxTQUFTLEVBQUU7TUFDdEIzRixzQkFBc0IsSUFBQWtHLE1BQUEsQ0FBSWhELE9BQU8sQ0FBQ3lDLFNBQVMsZ0JBQWE7UUFDdERELGFBQWEsRUFBYkEsYUFBYTtRQUNiUyxnQkFBZ0IsRUFBRUY7TUFDcEIsQ0FBQyxDQUFDO0lBQ0o7SUFDQSxPQUFPQSxRQUFRO0VBQ2pCO0VBRUEsT0FBTztJQUFFN0MsS0FBSyxFQUFFLFlBQVk7SUFBRVYsT0FBTyxFQUFFTyxDQUFDLENBQUMsaUJBQWlCO0VBQUUsQ0FBQztBQUMvRCxDQUFDO0FBRUQsT0FBTyxJQUFNb0QsMEJBQTBCLEdBQUcsSUFBSTtBQUU5QyxJQUFNQyxnQkFBdUMsR0FBRyxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUM7QUFFakgsSUFBTUMsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBSW5ELEtBQTBCLEVBQStCO0VBQ3ZGLFFBQVFBLEtBQUs7SUFDWCxLQUFLLFlBQVk7TUFDZixPQUFPbEQsdUJBQXVCO0lBQ2hDLEtBQUssVUFBVTtNQUNiLE9BQU9ELHFCQUFxQjtJQUM5QixLQUFLLFFBQVE7TUFDWCxPQUFPRSxtQkFBbUI7SUFDNUIsS0FBSyxhQUFhO01BQ2hCLE9BQU9DLHdCQUF3QjtJQUNqQyxLQUFLLFlBQVk7TUFDZixPQUFPQyx1QkFBdUI7SUFDaEM7TUFDRSxPQUFPLElBQUk7RUFDZjtBQUNGLENBQUM7QUFFRCxPQUFPLElBQU1tRywrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUFJcEQsS0FBMEIsRUFBRXFELEtBQWEsRUFBRXhELENBQWMsRUFBYTtFQUNwSCxJQUFJRyxLQUFLLEtBQUssU0FBUyxFQUFFO0lBQ3ZCLE9BQU9ILENBQUMsQ0FBQzNDLDRCQUE0QixDQUFDO0VBQ3hDO0VBRUEsSUFBTThCLElBQUksR0FBR21FLHNCQUFzQixDQUFDbkQsS0FBSyxDQUFDO0VBQzFDLElBQUksRUFBQ2hCLElBQUksYUFBSkEsSUFBSSxlQUFKQSxJQUFJLENBQUVJLE1BQU0sR0FBRTtJQUNqQixPQUFPLEVBQUU7RUFDWDtFQUVBLElBQU1rRSxZQUFZLEdBQUdDLElBQUksQ0FBQ0MsR0FBRyxDQUFDRCxJQUFJLENBQUNFLEdBQUcsQ0FBQyxDQUFDLEVBQUVKLEtBQUssQ0FBQyxFQUFFckUsSUFBSSxDQUFDSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ2xFLE9BQU9TLENBQUMsQ0FBQ2IsSUFBSSxDQUFDc0UsWUFBWSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELE9BQU8sSUFBTUkseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FBSUwsS0FBYSxFQUFFeEQsQ0FBYztFQUFBLE9BQ3JFdUQsK0JBQStCLENBQUMsVUFBVSxFQUFFQyxLQUFLLEVBQUV4RCxDQUFDLENBQUM7QUFBQTtBQUV2RCxPQUFPLElBQU04RCwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUFJTixLQUFhLEVBQUV4RCxDQUFjO0VBQUEsT0FDdkV1RCwrQkFBK0IsQ0FBQyxZQUFZLEVBQUVDLEtBQUssRUFBRXhELENBQUMsQ0FBQztBQUFBO0FBRXpELE9BQU8sSUFBTStELCtCQUErQixHQUFHLFNBQWxDQSwrQkFBK0JBLENBQUk1RCxLQUEwQixFQUFFNkQsWUFBb0IsRUFBYztFQUM1RyxJQUFNN0UsSUFBSSxHQUFHbUUsc0JBQXNCLENBQUNuRCxLQUFLLENBQUM7RUFDMUMsSUFBSSxDQUFDaEIsSUFBSSxFQUFFO0lBQ1QsT0FBTyxLQUFLO0VBQ2Q7RUFDQSxPQUFPNkUsWUFBWSxHQUFHN0UsSUFBSSxDQUFDSSxNQUFNLEdBQUcsQ0FBQztBQUN2QyxDQUFDO0FBRUQsT0FBTyxJQUFNMEUsNEJBQTRCLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkNqQixRQUF3QixFQUN4QmdCLFlBQW9CLEVBQ3BCaEUsQ0FBYyxFQUM2QztFQUMzRCxJQUFJLENBQUMrRCwrQkFBK0IsQ0FBQ2YsUUFBUSxDQUFDN0MsS0FBSyxFQUFFNkQsWUFBWSxDQUFDLEVBQUU7SUFDbEUsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFNRSxTQUFTLEdBQUdGLFlBQVksR0FBRyxDQUFDO0VBQ2xDLE9BQU87SUFDTGhCLFFBQVEsRUFBRTtNQUNSN0MsS0FBSyxFQUFFNkMsUUFBUSxDQUFDN0MsS0FBSztNQUNyQlYsT0FBTyxFQUFFOEQsK0JBQStCLENBQUNQLFFBQVEsQ0FBQzdDLEtBQUssRUFBRStELFNBQVMsRUFBRWxFLENBQUM7SUFDdkUsQ0FBQztJQUNEa0UsU0FBUyxFQUFUQTtFQUNGLENBQUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxJQUFNQyw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUFJaEUsS0FBMEI7RUFBQSxPQUFja0QsZ0JBQWdCLENBQUMxQyxRQUFRLENBQUNSLEtBQUssQ0FBQztBQUFBO0FBRXJILE9BQU8sSUFBTWlFLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUlwRSxDQUFjO0VBQUEsT0FBc0I7SUFDM0VHLEtBQUssRUFBRSxTQUFTO0lBQ2hCVixPQUFPLEVBQUVPLENBQUMsQ0FBQzNDLDRCQUE0QjtFQUN6QyxDQUFDO0FBQUEsQ0FBQztBQUVGLE9BQU8sSUFBTWdILHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQ25DckUsQ0FBYyxFQUNkQyxPQUlDLEVBQ2tCO0VBQ25CLElBQUlBLE9BQU8sQ0FBQ3FFLGlCQUFpQixFQUFFO0lBQzdCLE9BQU87TUFBRW5FLEtBQUssRUFBRSxRQUFRO01BQUVWLE9BQU8sRUFBRU8sQ0FBQyxDQUFDOUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQUUsQ0FBQztFQUNoRTtFQUNBLElBQUkrQyxPQUFPLENBQUNzRSxrQkFBa0IsRUFBRTtJQUM5QixPQUFPO01BQUVwRSxLQUFLLEVBQUUsYUFBYTtNQUFFVixPQUFPLEVBQUVPLENBQUMsQ0FBQzdDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUFFLENBQUM7RUFDMUU7RUFDQSxJQUFJOEMsT0FBTyxDQUFDdUUsY0FBYyxFQUFFO0lBQzFCLE9BQU87TUFBRXJFLEtBQUssRUFBRSxZQUFZO01BQUVWLE9BQU8sRUFBRU8sQ0FBQyxDQUFDNUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQUUsQ0FBQztFQUN4RTtFQUNBLE9BQU87SUFBRStDLEtBQUssRUFBRSxZQUFZO0lBQUVWLE9BQU8sRUFBRU8sQ0FBQyxDQUFDL0MsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0VBQUUsQ0FBQztBQUN4RSxDQUFDO0FBRUQsT0FBTyxJQUFNd0gsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FBSUMsTUFTM0MsRUFBNEI7RUFDM0IsSUFBSUEsTUFBTSxDQUFDQyxjQUFjLEVBQUU7SUFDekIsT0FBT0QsTUFBTSxDQUFDQyxjQUFjO0VBQzlCO0VBRUEsSUFBTUMsVUFBVSxHQUFHMUYsTUFBTSxDQUFDQyxJQUFJLENBQUN1RixNQUFNLENBQUNHLGNBQWMsQ0FBQztFQUNyRCxJQUFJRCxVQUFVLENBQUNyRixNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQ3pCLElBQU11RixRQUFRLEdBQUdGLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDOUIsSUFBTUcsR0FBRyxHQUFHTCxNQUFNLENBQUNHLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDO0lBQzNDLElBQUlDLEdBQUcsSUFBSUEsR0FBRyxLQUFLTCxNQUFNLENBQUMxRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRTtNQUM5QyxJQUFNYSxRQUFRLEdBQUdSLDhCQUE4QixDQUFDMEUsR0FBRyxDQUFDO01BQ3BELElBQUlsRSxRQUFRLEVBQUU7UUFDWixPQUFPZiwrQkFBK0IsQ0FBQ2UsUUFBUSxFQUFFNkQsTUFBTSxDQUFDMUUsQ0FBQyxDQUFDO01BQzVEO01BRUEsSUFBTWdGLE9BQU8sR0FBR0QsR0FBRyxDQUFDcEYsSUFBSSxDQUFDLENBQUM7TUFDMUIsSUFBSXFGLE9BQU8sSUFBSSxDQUFDeEYsMEJBQTBCLENBQUN3RixPQUFPLENBQUMsRUFBRTtRQUNuRCxPQUFPO1VBQUU3RSxLQUFLLEVBQUUsUUFBUTtVQUFFVixPQUFPLEVBQUV1RjtRQUFRLENBQUM7TUFDOUM7TUFFQSxPQUFPcEUsOEJBQThCLENBQUNtRSxHQUFHLEVBQUVMLE1BQU0sQ0FBQzFFLENBQUMsRUFBRTtRQUFFSSxtQkFBbUIsRUFBRTtNQUFLLENBQUMsQ0FBQztJQUNyRjtJQUNBLE9BQU87TUFBRUQsS0FBSyxFQUFFLFlBQVk7TUFBRVYsT0FBTyxFQUFFaUYsTUFBTSxDQUFDMUUsQ0FBQyxDQUFDLGlCQUFpQjtJQUFFLENBQUM7RUFDdEU7RUFFQSxJQUFJMEUsTUFBTSxDQUFDTyxjQUFjLEVBQUU7SUFDekIsSUFDRVAsTUFBTSxDQUFDTyxjQUFjLEtBQUtQLE1BQU0sQ0FBQzFFLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFDbEQwRSxNQUFNLENBQUNPLGNBQWMsS0FBS1AsTUFBTSxDQUFDMUUsQ0FBQyxDQUFDM0MsNEJBQTRCLENBQUMsRUFDaEU7TUFDQSxPQUFPK0csd0JBQXdCLENBQUNNLE1BQU0sQ0FBQzFFLENBQUMsQ0FBQztJQUMzQztJQUNBLElBQUkwRSxNQUFNLENBQUNPLGNBQWMsS0FBS1AsTUFBTSxDQUFDMUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7TUFDekQsT0FBTztRQUFFRyxLQUFLLEVBQUUsWUFBWTtRQUFFVixPQUFPLEVBQUVpRixNQUFNLENBQUNPO01BQWUsQ0FBQztJQUNoRTtJQUNBLElBQ0VQLE1BQU0sQ0FBQ08sY0FBYyxLQUFLUCxNQUFNLENBQUMxRSxDQUFDLENBQUMsMEJBQTBCLENBQUMsSUFDOUQwRSxNQUFNLENBQUNPLGNBQWMsS0FBS1AsTUFBTSxDQUFDMUUsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLElBQy9EMEUsTUFBTSxDQUFDTyxjQUFjLEtBQUtQLE1BQU0sQ0FBQzFFLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxFQUMvRDtNQUNBLE9BQU9xRSx3QkFBd0IsQ0FBQ0ssTUFBTSxDQUFDMUUsQ0FBQyxFQUFFO1FBQ3hDc0UsaUJBQWlCLEVBQUVJLE1BQU0sQ0FBQ08sY0FBYyxLQUFLUCxNQUFNLENBQUMxRSxDQUFDLENBQUMsMEJBQTBCLENBQUM7UUFDakZ1RSxrQkFBa0IsRUFBRUcsTUFBTSxDQUFDTyxjQUFjLEtBQUtQLE1BQU0sQ0FBQzFFLENBQUMsQ0FBQywyQkFBMkIsQ0FBQztRQUNuRndFLGNBQWMsRUFBRUUsTUFBTSxDQUFDTyxjQUFjLEtBQUtQLE1BQU0sQ0FBQzFFLENBQUMsQ0FBQywyQkFBMkI7TUFDaEYsQ0FBQyxDQUFDO0lBQ0o7SUFDQSxPQUFPO01BQUVHLEtBQUssRUFBRSxRQUFRO01BQUVWLE9BQU8sRUFBRWlGLE1BQU0sQ0FBQ087SUFBZSxDQUFDO0VBQzVEO0VBRUEsSUFBSVAsTUFBTSxDQUFDUSxlQUFlLEVBQUU7SUFDMUIsT0FBT2Isd0JBQXdCLENBQUNLLE1BQU0sQ0FBQzFFLENBQUMsRUFBRTtNQUN4Q3NFLGlCQUFpQixFQUFFSSxNQUFNLENBQUNKLGlCQUFpQjtNQUMzQ0Msa0JBQWtCLEVBQUVHLE1BQU0sQ0FBQ0gsa0JBQWtCO01BQzdDQyxjQUFjLEVBQUVFLE1BQU0sQ0FBQ0Y7SUFDekIsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxPQUFPLElBQUk7QUFDYixDQUFDO0FBRUQsT0FBTyxJQUFNVywrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUFJeEMsU0FBNkI7RUFBQSxPQUMzRSxPQUFPQSxTQUFTLEtBQUssUUFBUSxJQUFJQSxTQUFTLENBQUNoQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=