genassist-chat-react 1.0.21 → 1.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AttachmentPreview.js +7 -2
- package/dist/components/ChatMessage.js +4 -15
- package/dist/components/GenAgentChat.js +84 -34
- package/dist/components/InteractiveContent.js +18 -1
- package/dist/components/common/UploadFilePreview.d.ts +8 -0
- package/dist/components/common/UploadFilePreview.js +54 -0
- package/dist/hooks/useChat.d.ts +2 -1
- package/dist/hooks/useChat.js +38 -30
- package/dist/services/chatService.d.ts +4 -5
- package/dist/services/chatService.js +49 -5
- package/dist/types/index.d.ts +24 -0
- package/dist/types/index.js +1 -1
- package/dist/utils/interactiveContent.d.ts +1 -1
- package/dist/utils/interactiveContent.js +15 -2
- package/package.json +1 -1
|
@@ -11,6 +11,7 @@ var __assign = (this && this.__assign) || function () {
|
|
|
11
11
|
};
|
|
12
12
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
13
|
import React from 'react';
|
|
14
|
+
import { getFileIcon } from './FileTypeIcon';
|
|
14
15
|
import { X } from 'lucide-react';
|
|
15
16
|
// Utility function to parse markdown bold syntax (**text**) and convert to React elements
|
|
16
17
|
export var parseBoldText = function (input) {
|
|
@@ -41,6 +42,14 @@ export var InteractiveContent = function (_a) {
|
|
|
41
42
|
return null;
|
|
42
43
|
return (_jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 12 }, children: blocks.map(function (block, index) {
|
|
43
44
|
switch (block.kind) {
|
|
45
|
+
case 'file':
|
|
46
|
+
var fileData = block.data;
|
|
47
|
+
if (fileData && fileData.type && fileData.type.startsWith('image')) {
|
|
48
|
+
return _jsx(ImageBlock, { imageData: fileData }, index);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
return _jsx(FileBlock, { fileData: fileData }, index);
|
|
52
|
+
}
|
|
44
53
|
case 'text':
|
|
45
54
|
return _jsx(TextBlock, { text: block.text }, index);
|
|
46
55
|
case 'options':
|
|
@@ -185,4 +194,12 @@ var ScheduleBlock = function (_a) {
|
|
|
185
194
|
boxShadow: '0 1px 4px rgba(0,0,0,0.12)',
|
|
186
195
|
}, children: "Confirm" }) }))] }));
|
|
187
196
|
};
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RpdmVDb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvSW50ZXJhY3RpdmVDb250ZW50LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUdqQywwRkFBMEY7QUFDMUYsTUFBTSxDQUFDLElBQU0sYUFBYSxHQUFHLFVBQUMsS0FBYTtJQUN6QyxJQUFNLEtBQUssR0FBc0IsRUFBRSxDQUFDO0lBQ3BDLElBQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDO0lBQ25DLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUVaLE9BQU8sQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2hELDRCQUE0QjtRQUM1QixJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxFQUFFLENBQUM7WUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsZ0JBQWdCO1FBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQ1IsaUJBQW9CLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFDM0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQURFLEdBQUcsRUFBRSxDQUVULENBQ1YsQ0FBQztRQUVGLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUMsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxJQUFJ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T0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQzNELGlCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLGNBQU0sT0FBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUcsZUFBZSxDQUFDLEVBQTVCLENBQTRCLEVBQzNDLEtBQUssRUFBRTt3QkFDTCxlQUFlLEVBQUUsWUFBWTt3QkFDN0IsS0FBSyxFQUFFLFNBQVM7d0JBQ2hCLE1BQU0sRUFBRSxNQUFNO3dCQUNkLFlBQVksRUFBRSxFQUFFO3dCQUNoQixPQUFPLEVBQUUsV0FBVzt3QkFDcEIsVUFBVSxFQUFFLEdBQUc7d0JBQ2YsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLFNBQVMsRUFBRSw0QkFBNEI7cUJBQ3hDLHdCQUdNLEdBQ0wsQ0FDUCxJQUNHLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBYIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IENoYXRDb250ZW50QmxvY2ssIER5bmFtaWNDaGF0SXRlbSwgU2NoZWR1bGVJdGVtIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyBVdGlsaXR5IGZ1bmN0aW9uIHRvIHBhcnNlIG1hcmtkb3duIGJvbGQgc3ludGF4ICgqKnRleHQqKikgYW5kIGNvbnZlcnQgdG8gUmVhY3QgZWxlbWVudHNcbmV4cG9ydCBjb25zdCBwYXJzZUJvbGRUZXh0ID0gKGlucHV0OiBzdHJpbmcpOiBSZWFjdC5SZWFjdE5vZGVbXSA9PiB7XG4gIGNvbnN0IHBhcnRzOiBSZWFjdC5SZWFjdE5vZGVbXSA9IFtdO1xuICBjb25zdCBib2xkUmVnZXggPSAvXFwqXFwqKC4qPylcXCpcXCovZztcbiAgbGV0IGxhc3RJbmRleCA9IDA7XG4gIGxldCBtYXRjaDtcbiAgbGV0IGtleSA9IDA7XG5cbiAgd2hpbGUgKChtYXRjaCA9IGJvbGRSZWdleC5leGVjKGlucHV0KSkgIT09IG51bGwpIHtcbiAgICAvLyBBZGQgdGV4dCBiZWZvcmUgdGhlIG1hdGNoXG4gICAgaWYgKG1hdGNoLmluZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICBwYXJ0cy5wdXNoKGlucHV0LnNsaWNlKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQWRkIGJvbGQgdGV4dFxuICAgIHBhcnRzLnB1c2goXG4gICAgICA8c3Ryb25nIGtleT17a2V5Kyt9IHN0eWxlPXt7IGZvbnRXZWlnaHQ6IDcwMCB9fT5cbiAgICAgICAge21hdGNoWzFdfVxuICAgICAgPC9zdHJvbmc+XG4gICAgKTtcbiAgICBcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuXG4gIC8vIEFkZCByZW1haW5pbmcgdGV4dCBhZnRlciB0aGUgbGFzdCBtYXRjaFxuICBpZiAobGFzdEluZGV4IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChpbnB1dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgfVxuXG4gIC8vIElmIG5vIG1hdGNoZXMgZm91bmQsIHJldHVybiB0aGUgb3JpZ2luYWwgdGV4dFxuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzIDogW2lucHV0XTtcbn07XG5cbmludGVyZmFjZSBJbnRlcmFjdGl2ZUNvbnRlbnRQcm9wcyB7XG4gIGJsb2NrczogQ2hhdENvbnRlbnRCbG9ja1tdO1xuICBwcmltYXJ5Q29sb3I6IHN0cmluZztcbiAgdGV4dENvbG9yOiBzdHJpbmc7XG4gIGlzQWN0aW9uYWJsZTogYm9vbGVhbjtcbiAgb25RdWlja0FjdGlvbj86ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uU2NoZWR1bGVDb25maXJtPzogKHNjaGVkdWxlOiBTY2hlZHVsZUl0ZW0pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBJbnRlcmFjdGl2ZUNvbnRlbnQ6IFJlYWN0LkZDPEludGVyYWN0aXZlQ29udGVudFByb3BzPiA9ICh7XG4gIGJsb2NrcyxcbiAgcHJpbWFyeUNvbG9yLFxuICB0ZXh0Q29sb3IsXG4gIGlzQWN0aW9uYWJsZSxcbiAgb25RdWlja0FjdGlvbixcbiAgb25TY2hlZHVsZUNvbmZpcm0sXG59KSA9PiB7XG4gIGlmICghYmxvY2tzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogMTIgfX0+XG4gICAgICB7YmxvY2tzLm1hcCgoYmxvY2ssIGluZGV4KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoYmxvY2sua2luZCkge1xuICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgcmV0dXJuIDxUZXh0QmxvY2sga2V5PXtpbmRleH0gdGV4dD17YmxvY2sudGV4dH0gLz47XG4gICAgICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8UXVpY2tPcHRpb25zXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBvcHRpb25zPXtibG9jay5vcHRpb25zfVxuICAgICAgICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgICAgIGlzQWN0aW9uYWJsZT17aXNBY3Rpb25hYmxlfVxuICAgICAgICAgICAgICAgIG9uUXVpY2tBY3Rpb249e29uUXVpY2tBY3Rpb259XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgJ2l0ZW1zJzpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxEeW5hbWljSXRlbXNMaXN0XG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBpdGVtcz17YmxvY2suaXRlbXN9XG4gICAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgdGV4dENvbG9yPXt0ZXh0Q29sb3J9XG4gICAgICAgICAgICAgICAgaXNBY3Rpb25hYmxlPXtpc0FjdGlvbmFibGV9XG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e29uUXVpY2tBY3Rpb259XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgJ3NjaGVkdWxlJzpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTY2hlZHVsZUJsb2NrXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBzY2hlZHVsZT17YmxvY2suc2NoZWR1bGV9XG4gICAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgdGV4dENvbG9yPXt0ZXh0Q29sb3J9XG4gICAgICAgICAgICAgICAgaXNBY3Rpb25hYmxlPXtpc0FjdGlvbmFibGV9XG4gICAgICAgICAgICAgICAgb25RdWlja0FjdGlvbj17b25RdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICBvbkNvbmZpcm09e29uU2NoZWR1bGVDb25maXJtfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgVGV4dEJsb2NrOiBSZWFjdC5GQzx7IHRleHQ6IHN0cmluZyB9PiA9ICh7IHRleHQgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgd2hpdGVTcGFjZTogJ3ByZS13cmFwJywgbGluZUhlaWdodDogMS41IH19PlxuICAgICAge3BhcnNlQm9sZFRleHQodGV4dCl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgUXVpY2tPcHRpb25zUHJvcHMge1xuICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgcHJpbWFyeUNvbG9yOiBzdHJpbmc7XG4gIGlzQWN0aW9uYWJsZTogYm9vbGVhbjtcbiAgb25RdWlja0FjdGlvbj86ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmNvbnN0IFF1aWNrT3B0aW9uczogUmVhY3QuRkM8UXVpY2tPcHRpb25zUHJvcHM+ID0gKHtcbiAgb3B0aW9ucyxcbiAgcHJpbWFyeUNvbG9yLFxuICBpc0FjdGlvbmFibGUsXG4gIG9uUXVpY2tBY3Rpb24sXG59KSA9PiB7XG4gIGNvbnN0IFt2aXNpYmxlT3B0aW9ucywgc2V0VmlzaWJsZU9wdGlvbnNdID0gUmVhY3QudXNlU3RhdGUob3B0aW9ucyk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRWaXNpYmxlT3B0aW9ucyhvcHRpb25zKTtcbiAgfSwgW29wdGlvbnNdKTtcblxuICBpZiAoIXZpc2libGVPcHRpb25zLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBzdHlsZT17e1xuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGdhcDogOCxcbiAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAge3Zpc2libGVPcHRpb25zLm1hcCgob3B0aW9uLCBpZHgpID0+IChcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGtleT17YCR7b3B0aW9ufS0ke2lkeH1gfVxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGRpc2FibGVkPXshaXNBY3Rpb25hYmxlfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlKSByZXR1cm47XG4gICAgICAgICAgICBzZXRWaXNpYmxlT3B0aW9ucyhbXSk7XG4gICAgICAgICAgICBvblF1aWNrQWN0aW9uPy4ob3B0aW9uKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6IDk5LFxuICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICAgICAgICAgIHBhZGRpbmc6ICcxMnB4IDEycHgnLFxuICAgICAgICAgICAgY3Vyc29yOiBpc0FjdGlvbmFibGUgPyAncG9pbnRlcicgOiAnbm90LWFsbG93ZWQnLFxuICAgICAgICAgICAgZm9udFdlaWdodDogNTAwLFxuICAgICAgICAgICAgZm9udFNpemU6IDE0LFxuICAgICAgICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ3RyYW5zZm9ybSAwLjEycyBlYXNlLCBvcGFjaXR5IDAuMTJzIGVhc2UnLFxuICAgICAgICAgICAgb3BhY2l0eTogaXNBY3Rpb25hYmxlID8gMSA6IDAuNixcbiAgICAgICAgICAgIGJveFNoYWRvdzogJzAgMnB4IDZweCByZ2JhKDAsMCwwLDAuMTIpJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbn1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBEeW5hbWljSXRlbXNMaXN0UHJvcHMge1xuICBpdGVtczogRHluYW1pY0NoYXRJdGVtW107XG4gIHByaW1hcnlDb2xvcjogc3RyaW5nO1xuICB0ZXh0Q29sb3I6IHN0cmluZztcbiAgaXNBY3Rpb25hYmxlOiBib29sZWFuO1xuICBvblNlbGVjdD86ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmNvbnN0IER5bmFtaWNJdGVtc0xpc3Q6IFJlYWN0LkZDPER5bmFtaWNJdGVtc0xpc3RQcm9wcz4gPSAoe1xuICBpdGVtcyxcbiAgcHJpbWFyeUNvbG9yLFxuICB0ZXh0Q29sb3IsXG4gIGlzQWN0aW9uYWJsZSxcbiAgb25TZWxlY3QsXG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDEwIH19PlxuICAgICAge2l0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICA8RHluYW1pY0l0ZW1DYXJkXG4gICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgdGV4dENvbG9yPXt0ZXh0Q29sb3J9XG4gICAgICAgICAgaXNBY3Rpb25hYmxlPXtpc0FjdGlvbmFibGV9XG4gICAgICAgICAgb25TZWxlY3Q9eygpID0+IGlzQWN0aW9uYWJsZSAmJiBvblNlbGVjdD8uKGl0ZW0ubmFtZSl9XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBEeW5hbWljSXRlbUNhcmRQcm9wcyB7XG4gIGl0ZW06IER5bmFtaWNDaGF0SXRlbTtcbiAgcHJpbWFyeUNvbG9yOiBzdHJpbmc7XG4gIHRleHRDb2xvcjogc3RyaW5nO1xuICBpc0FjdGlvbmFibGU6IGJvb2xlYW47XG4gIG9uU2VsZWN0PzogKCkgPT4gdm9pZDtcbiAgb25TbG90U2VsZWN0PzogKHNsb3Q6IHN0cmluZykgPT4gdm9pZDtcbiAgb25SZW1vdmU/OiAoKSA9PiB2b2lkO1xufVxuXG5jb25zdCBEeW5hbWljSXRlbUNhcmQ6IFJlYWN0LkZDPER5bmFtaWNJdGVtQ2FyZFByb3BzPiA9ICh7XG4gIGl0ZW0sXG4gIHByaW1hcnlDb2xvcixcbiAgdGV4dENvbG9yLFxuICBpc0FjdGlvbmFibGUsXG4gIG9uU2VsZWN0LFxuICBvblNsb3RTZWxlY3QsXG4gIG9uUmVtb3ZlLFxufSkgPT4ge1xuICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaGFzU2xvdHMgPSBBcnJheS5pc0FycmF5KGl0ZW0uc2xvdHMpICYmIGl0ZW0uc2xvdHMubGVuZ3RoID4gMDtcblxuICBjb25zdCBoYW5kbGVDYXJkQ2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0RXhwYW5kZWQoKHByZXYpID0+ICFwcmV2KTtcbiAgICBvblNlbGVjdD8uKCk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDYXJkQ2xpY2t9XG4gICAgICBzdHlsZT17e1xuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGdhcDogMTIsXG4gICAgICAgIHBhZGRpbmc6IDEyLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2U1ZTdlYicsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmOGZhZmMnLFxuICAgICAgICBjdXJzb3I6IGlzQWN0aW9uYWJsZSA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JyxcbiAgICAgICAgYm94U2hhZG93OiAnMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSknLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7aXRlbS5pbWFnZSAmJiAoXG4gICAgICAgIDxpbWdcbiAgICAgICAgICBzcmM9e2l0ZW0uaW1hZ2V9XG4gICAgICAgICAgYWx0PXtpdGVtLm5hbWV9XG4gICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IDY0LCBoZWlnaHQ6IDY0LCBib3JkZXJSYWRpdXM6IDgsIG9iamVjdEZpdDogJ2NvdmVyJyB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIDxkaXYgc3R5bGU9e3sgZmxleDogMSwgbWluV2lkdGg6IDAsIGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogNCB9fT5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JywgZ2FwOiA4IH19PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFdlaWdodDogNzAwLCBjb2xvcjogdGV4dENvbG9yLCBmb250U2l6ZTogMTUsIGZsZXg6IDEgfX0+XG4gICAgICAgICAgICB7aXRlbS5uYW1lfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtvblJlbW92ZSAmJiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgb25SZW1vdmUoKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI2YxZjVmOScsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA5OTk5LFxuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTJlOGYwJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogMjgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyOCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8WCBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7aXRlbS5jYXRlZ29yeSAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBjb2xvcjogJyM2YjcyODAnLCBmb250U2l6ZTogMTMsIGZvbnRXZWlnaHQ6IDUwMCB9fT5cbiAgICAgICAgICAgIHtpdGVtLmNhdGVnb3J5fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICB7aXRlbS5kZXNjcmlwdGlvbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgY29sb3I6ICcjMzc0MTUxJyxcbiAgICAgICAgICAgICAgZm9udFNpemU6IDEzLFxuICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjUsXG4gICAgICAgICAgICAgIGRpc3BsYXk6ICctd2Via2l0LWJveCcsXG4gICAgICAgICAgICAgIFdlYmtpdExpbmVDbGFtcDogZXhwYW5kZWQgPyAndW5zZXQnIDogMyxcbiAgICAgICAgICAgICAgV2Via2l0Qm94T3JpZW50OiAndmVydGljYWwnLFxuICAgICAgICAgICAgICBvdmVyZmxvdzogZXhwYW5kZWQgPyAndmlzaWJsZScgOiAnaGlkZGVuJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2l0ZW0uZGVzY3JpcHRpb259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHtoYXNTbG90cyAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogOCwgZmxleFdyYXA6ICd3cmFwJywgbWFyZ2luVG9wOiA0IH19PlxuICAgICAgICAgICAge2l0ZW0uc2xvdHMhLm1hcCgoc2xvdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gaXRlbS5zZWxlY3RlZFNsb3QgPT09IHNsb3Q7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAga2V5PXtzbG90fVxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWlzQWN0aW9uYWJsZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIG9uU2xvdFNlbGVjdD8uKHNsb3QpO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogOTk5OSxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7aXNTZWxlY3RlZCA/IHByaW1hcnlDb2xvciA6ICcjZTVlN2ViJ31gLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzU2VsZWN0ZWQgPyBwcmltYXJ5Q29sb3IgOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBpc1NlbGVjdGVkID8gJyNmZmZmZmYnIDogJyMxMTE4MjcnLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnNnB4IDEycHgnLFxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IGlzQWN0aW9uYWJsZSA/ICdwb2ludGVyJyA6ICdub3QtYWxsb3dlZCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNjAwLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7c2xvdH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgU2NoZWR1bGVCbG9ja1Byb3BzIHtcbiAgc2NoZWR1bGU6IFNjaGVkdWxlSXRlbTtcbiAgcHJpbWFyeUNvbG9yOiBzdHJpbmc7XG4gIHRleHRDb2xvcjogc3RyaW5nO1xuICBpc0FjdGlvbmFibGU6IGJvb2xlYW47XG4gIG9uUXVpY2tBY3Rpb24/OiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNvbmZpcm0/OiAoc2NoZWR1bGU6IFNjaGVkdWxlSXRlbSkgPT4gdm9pZDtcbn1cblxuY29uc3QgU2NoZWR1bGVCbG9jazogUmVhY3QuRkM8U2NoZWR1bGVCbG9ja1Byb3BzPiA9ICh7XG4gIHNjaGVkdWxlLFxuICBwcmltYXJ5Q29sb3IsXG4gIHRleHRDb2xvcixcbiAgaXNBY3Rpb25hYmxlLFxuICBvblF1aWNrQWN0aW9uLFxuICBvbkNvbmZpcm0sXG59KSA9PiB7XG4gIGNvbnN0IFtjdXJyZW50U2NoZWR1bGUsIHNldEN1cnJlbnRTY2hlZHVsZV0gPSBSZWFjdC51c2VTdGF0ZTxTY2hlZHVsZUl0ZW0+KHNjaGVkdWxlKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEN1cnJlbnRTY2hlZHVsZShzY2hlZHVsZSk7XG4gIH0sIFtzY2hlZHVsZV0pO1xuXG4gIGNvbnN0IHVwZGF0ZVJlc3RhdXJhbnQgPSAoaWQ6IHN0cmluZywgdXBkYXRlcjogKGl0ZW06IER5bmFtaWNDaGF0SXRlbSkgPT4gRHluYW1pY0NoYXRJdGVtKSA9PiB7XG4gICAgc2V0Q3VycmVudFNjaGVkdWxlKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIHJlc3RhdXJhbnRzOiBwcmV2LnJlc3RhdXJhbnRzLm1hcCgocmVzdGF1cmFudCkgPT5cbiAgICAgICAgcmVzdGF1cmFudC5pZCA9PT0gaWQgPyB1cGRhdGVyKHJlc3RhdXJhbnQpIDogcmVzdGF1cmFudFxuICAgICAgKSxcbiAgICB9KSk7XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlUmVzdGF1cmFudCA9IChpZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0Q3VycmVudFNjaGVkdWxlKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIHJlc3RhdXJhbnRzOiBwcmV2LnJlc3RhdXJhbnRzLmZpbHRlcigocmVzdGF1cmFudCkgPT4gcmVzdGF1cmFudC5pZCAhPT0gaWQpLFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAxMCB9fT5cbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwYWRkaW5nOiAxMixcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmOGZhZmMnLFxuICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTVlN2ViJyxcbiAgICAgICAgICBmb250V2VpZ2h0OiA3MDAsXG4gICAgICAgICAgY29sb3I6IHRleHRDb2xvcixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2N1cnJlbnRTY2hlZHVsZS50aXRsZSB8fCAnU2NoZWR1bGUnfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAxMCB9fT5cbiAgICAgICAge2N1cnJlbnRTY2hlZHVsZS5yZXN0YXVyYW50cy5tYXAoKHJlc3RhdXJhbnQpID0+IChcbiAgICAgICAgICA8RHluYW1pY0l0ZW1DYXJkXG4gICAgICAgICAgICBrZXk9e3Jlc3RhdXJhbnQuaWR9XG4gICAgICAgICAgICBpdGVtPXtyZXN0YXVyYW50fVxuICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICB0ZXh0Q29sb3I9e3RleHRDb2xvcn1cbiAgICAgICAgICAgIGlzQWN0aW9uYWJsZT17aXNBY3Rpb25hYmxlfVxuICAgICAgICAgICAgb25TZWxlY3Q9eygpID0+IGlzQWN0aW9uYWJsZSAmJiBvblF1aWNrQWN0aW9uPy4ocmVzdGF1cmFudC5uYW1lKX1cbiAgICAgICAgICAgIG9uU2xvdFNlbGVjdD17KHNsb3QpID0+XG4gICAgICAgICAgICAgIHVwZGF0ZVJlc3RhdXJhbnQocmVzdGF1cmFudC5pZCwgKGl0ZW0pID0+ICh7IC4uLml0ZW0sIHNlbGVjdGVkU2xvdDogc2xvdCB9KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uUmVtb3ZlPXtpc0FjdGlvbmFibGUgPyAoKSA9PiByZW1vdmVSZXN0YXVyYW50KHJlc3RhdXJhbnQuaWQpIDogdW5kZWZpbmVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHtpc0FjdGlvbmFibGUgJiYgY3VycmVudFNjaGVkdWxlLnJlc3RhdXJhbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ29uZmlybT8uKGN1cnJlbnRTY2hlZHVsZSl9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICAgICAgICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTAsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcxMHB4IDE2cHgnLFxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiA3MDAsXG4gICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDFweCA0cHggcmdiYSgwLDAsMCwwLjEyKScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIENvbmZpcm1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcbiJdfQ==
|
|
197
|
+
var ImageBlock = function (_a) {
|
|
198
|
+
var imageData = _a.imageData;
|
|
199
|
+
return (_jsx("div", { style: { display: 'flex', alignItems: 'center', gap: 8, cursor: 'pointer' }, onClick: function () { return window.open(imageData.url, '_blank'); }, children: _jsx("img", { src: imageData.url, alt: "Image", style: { width: 80, height: 64, borderRadius: 8, objectFit: 'cover' } }) }));
|
|
200
|
+
};
|
|
201
|
+
var FileBlock = function (_a) {
|
|
202
|
+
var fileData = _a.fileData;
|
|
203
|
+
return (_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8, cursor: 'pointer' }, onClick: function () { return window.open(fileData.url, '_blank'); }, children: [getFileIcon(fileData.type), _jsx("span", { className: "text-xs text-muted-foreground", children: fileData.name })] }));
|
|
204
|
+
};
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJhY3RpdmVDb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvSW50ZXJhY3RpdmVDb250ZW50LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFakMsMEZBQTBGO0FBQzFGLE1BQU0sQ0FBQyxJQUFNLGFBQWEsR0FBRyxVQUFDLEtBQWE7SUFDekMsSUFBTSxLQUFLLEdBQXNCLEVBQUUsQ0FBQztJQUNwQyxJQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztJQUNuQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDbEIsSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFFWixPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNoRCw0QkFBNEI7UUFDNUIsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELGdCQUFnQjtRQUNoQixLQUFLLENBQUMsSUFBSSxDQUNSLGlCQUFvQixLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFlBQzNDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFERSxHQUFHLEVBQUUsQ0FFVCxDQUNWLENBQUM7UUFFRixTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQztBQVdGLE1BQU0sQ0FBQyxJQUFNLGtCQUFrQixHQUFzQyxVQUFDLEVBT3JFO1FBTkMsTUFBTSxZQUFBLEVBQ04sWUFBWSxrQkFBQSxFQUNaLFNBQVMsZUFBQSxFQUNULFlBQVksa0JBQUEsRUFDWixhQUFhLG1CQUFBLEVBQ2IsaUJBQWlCLHVCQUFBO0lBRWpCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRWhDLE9BQU8sQ0FDTCxjQUFLLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFlBQzlELE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBQyxLQUFLLEVBQUUsS0FBSztZQUV2QixRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxNQUFNO29CQUNULElBQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQzVCLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3QkFDbkUsT0FBTyxLQUFDLFVBQVUsSUFBYSxTQUFTLEVBQUUsUUFBUSxJQUExQixLQUFLLENBQXlCLENBQUM7b0JBQ3pELENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPLEtBQUMsU0FBUyxJQUFhLFFBQVEsRUFBRSxRQUFRLElBQXpCLEtBQUssQ0FBd0IsQ0FBQztvQkFDdkQsQ0FBQztnQkFDSCxLQUFLLE1BQU07b0JBQ1QsT0FBTyxLQUFDLFNBQVMsSUFBYSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBdkIsS0FBSyxDQUFzQixDQUFDO2dCQUNyRCxLQUFLLFNBQVM7b0JBQ1osT0FBTyxDQUNMLEtBQUMsWUFBWSxJQUVYLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUN0QixZQUFZLEVBQUUsWUFBWSxFQUMxQixZQUFZLEVBQUUsWUFBWSxFQUMxQixhQUFhLEVBQUUsYUFBYSxJQUp2QixLQUFLLENBS1YsQ0FDSCxDQUFDO2dCQUNKLEtBQUssT0FBTztvQkFDVixPQUFPLENBQ0wsS0FBQyxnQkFBZ0IsSUFFZixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFDbEIsWUFBWSxFQUFFLFlBQVksRUFDMUIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsWUFBWSxFQUFFLFlBQVksRUFDMUIsUUFBUSxFQUFFLGFBQWEsSUFMbEIsS0FBSyxDQU1WLENBQ0gsQ0FBQztnQkFDSixLQUFLLFVBQVU7b0JBQ2IsT0FBTyxDQUNMLEtBQUMsYUFBYSxJQUVaLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUN4QixZQUFZLEVBQUUsWUFBWSxFQUMxQixTQUFTLEVBQUUsU0FBUyxFQUNwQixZQUFZLEVBQUUsWUFBWSxFQUMxQixhQUFhLEVBQUUsYUFBYSxFQUM1QixTQUFTLEVBQUUsaUJBQWlCLElBTnZCLEtBQUssQ0FPVixDQUNILENBQUM7Z0JBQ0o7b0JBQ0UsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztRQUNILENBQUMsQ0FBQyxHQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLElBQU0sU0FBUyxHQUErQixVQUFDLEVBQVE7UUFBTixJQUFJLFVBQUE7SUFDbkQsT0FBTyxDQUNMLGNBQUssS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFlBQ3BELGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FDaEIsQ0FDUCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBU0YsSUFBTSxZQUFZLEdBQWdDLFVBQUMsRUFLbEQ7UUFKQyxPQUFPLGFBQUEsRUFDUCxZQUFZLGtCQUFBLEVBQ1osWUFBWSxrQkFBQSxFQUNaLGFBQWEsbUJBQUE7SUFFUCxJQUFBLEtBQXNDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQTVELGNBQWMsUUFBQSxFQUFFLGlCQUFpQixRQUEyQixDQUFDO0lBRXBFLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDZCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRWQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFeEMsT0FBTyxDQUNMLGNBQ0UsS0FBSyxFQUFFO1lBQ0wsT0FBTyxFQUFFLE1BQU07WUFDZixHQUFHLEVBQUUsQ0FBQztZQUNOLFFBQVEsRUFBRSxNQUFNO1NBQ2pCLFlBRUEsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFDLE1BQU0sRUFBRSxHQUFHLElBQUssT0FBQSxDQUNuQyxpQkFFRSxJQUFJLEVBQUMsUUFBUSxFQUNiLFFBQVEsRUFBRSxDQUFDLFlBQVksRUFDdkIsT0FBTyxFQUFFO2dCQUNQLElBQUksQ0FBQyxZQUFZO29CQUFFLE9BQU87Z0JBQzFCLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QixhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUcsTUFBTSxDQUFDLENBQUM7WUFDMUIsQ0FBQyxFQUNELEtBQUssRUFBRTtnQkFDTCxZQUFZLEVBQUUsRUFBRTtnQkFDaEIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsZUFBZSxFQUFFLFlBQVk7Z0JBQzdCLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWE7Z0JBQ2hELFVBQVUsRUFBRSxHQUFHO2dCQUNmLFFBQVEsRUFBRSxFQUFFO2dCQUNaLEtBQUssRUFBRSxTQUFTO2dCQUNoQixVQUFVLEVBQUUsUUFBUTtnQkFDcEIsVUFBVSxFQUFFLDBDQUEwQztnQkFDdEQsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO2dCQUMvQixTQUFTLEVBQUUsNEJBQTRCO2FBQ3hDLFlBRUEsTUFBTSxJQXZCRixVQUFHLE1BQU0sY0FBSSxHQUFHLENBQUUsQ0F3QmhCLENBQ1YsRUEzQm9DLENBMkJwQyxDQUFDLEdBQ0UsQ0FDUCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBVUYsSUFBTSxnQkFBZ0IsR0FBb0MsVUFBQyxFQU0xRDtRQUxDLEtBQUssV0FBQSxFQUNMLFlBQVksa0JBQUEsRUFDWixTQUFTLGVBQUEsRUFDVCxZQUFZLGtCQUFBLEVBQ1osUUFBUSxjQUFBO0lBRVIsT0FBTyxDQUNMLGNBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsWUFDOUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFDLElBQUksSUFBSyxPQUFBLENBQ25CLEtBQUMsZUFBZSxJQUVkLElBQUksRUFBRSxJQUFJLEVBQ1YsWUFBWSxFQUFFLFlBQVksRUFDMUIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsWUFBWSxFQUFFLFlBQVksRUFDMUIsUUFBUSxFQUFFLGNBQU0sT0FBQSxZQUFZLEtBQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQSxFQUFyQyxDQUFxQyxJQUxoRCxJQUFJLENBQUMsRUFBRSxDQU1aLENBQ0gsRUFUb0IsQ0FTcEIsQ0FBQyxHQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQztBQVlGLElBQU0sZUFBZSxHQUFtQyxVQUFDLEVBUXhEO1FBUEMsSUFBSSxVQUFBLEVBQ0osWUFBWSxrQkFBQSxFQUNaLFNBQVMsZUFBQSxFQUNULFlBQVksa0JBQUEsRUFDWixRQUFRLGNBQUEsRUFDUixZQUFZLGtCQUFBLEVBQ1osUUFBUSxjQUFBO0lBRUYsSUFBQSxLQUEwQixLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUE5QyxRQUFRLFFBQUEsRUFBRSxXQUFXLFFBQXlCLENBQUM7SUFDdEQsSUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRXBFLElBQU0sZUFBZSxHQUFHO1FBQ3RCLFdBQVcsQ0FBQyxVQUFDLElBQUksSUFBSyxPQUFBLENBQUMsSUFBSSxFQUFMLENBQUssQ0FBQyxDQUFDO1FBQzdCLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsRUFBSSxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0lBRUYsT0FBTyxDQUNMLGVBQ0UsT0FBTyxFQUFFLGVBQWUsRUFDeEIsS0FBSyxFQUFFO1lBQ0wsT0FBTyxFQUFFLE1BQU07WUFDZixHQUFHLEVBQUUsRUFBRTtZQUNQLE9BQU8sRUFBRSxFQUFFO1lBQ1gsWUFBWSxFQUFFLEVBQUU7WUFDaEIsTUFBTSxFQUFFLG1CQUFtQjtZQUMzQixlQUFlLEVBQUUsU0FBUztZQUMxQixNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDNUMsU0FBUyxFQUFFLDRCQUE0QjtTQUN4QyxhQUVBLElBQUksQ0FBQyxLQUFLLElBQUksQ0FDYixjQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUNmLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUNkLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FDckUsQ0FDSCxFQUNELGVBQUssS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLGFBQ3BGLGVBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsYUFDL0QsY0FBSyxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFlBQ3JFLElBQUksQ0FBQyxJQUFJLEdBQ04sRUFDTCxRQUFRLElBQUksQ0FDWCxpQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLE9BQU8sRUFBRSxVQUFDLENBQUM7b0NBQ1QsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO29DQUNwQixRQUFRLEVBQUUsQ0FBQztnQ0FDYixDQUFDLEVBQ0QsS0FBSyxFQUFFO29DQUNMLFVBQVUsRUFBRSxTQUFTO29DQUNyQixZQUFZLEVBQUUsSUFBSTtvQ0FDbEIsTUFBTSxFQUFFLG1CQUFtQjtvQ0FDM0IsS0FBSyxFQUFFLEVBQUU7b0NBQ1QsTUFBTSxFQUFFLEVBQUU7b0NBQ1YsT0FBTyxFQUFFLE1BQU07b0NBQ2YsVUFBVSxFQUFFLFFBQVE7b0NBQ3BCLGNBQWMsRUFBRSxRQUFRO29DQUN4QixNQUFNLEVBQUUsU0FBUztpQ0FDbEIsWUFFRCxLQUFDLENBQUMsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQ1IsQ0FDVixJQUNHLEVBQ0wsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUNoQixjQUFLLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFlBQzVELElBQUksQ0FBQyxRQUFRLEdBQ1YsQ0FDUCxFQUNBLElBQUksQ0FBQyxXQUFXLElBQUksQ0FDbkIsY0FDRSxLQUFLLEVBQUU7NEJBQ0wsS0FBSyxFQUFFLFNBQVM7NEJBQ2hCLFFBQVEsRUFBRSxFQUFFOzRCQUNaLFVBQVUsRUFBRSxHQUFHOzRCQUNmLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3ZDLGVBQWUsRUFBRSxVQUFVOzRCQUMzQixRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVE7eUJBQzFDLFlBRUEsSUFBSSxDQUFDLFdBQVcsR0FDYixDQUNQLEVBQ0EsUUFBUSxJQUFJLENBQ1gsY0FBSyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFlBQ3BFLElBQUksQ0FBQyxLQUFNLENBQUMsR0FBRyxDQUFDLFVBQUMsSUFBSTs0QkFDcEIsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUM7NEJBQzlDLE9BQU8sQ0FDTCxpQkFFRSxJQUFJLEVBQUMsUUFBUSxFQUNiLFFBQVEsRUFBRSxDQUFDLFlBQVksRUFDdkIsT0FBTyxFQUFFLFVBQUMsQ0FBQztvQ0FDVCxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7b0NBQ3BCLElBQUksQ0FBQyxZQUFZO3dDQUFFLE9BQU87b0NBQzFCLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRyxJQUFJLENBQUMsQ0FBQztnQ0FDdkIsQ0FBQyxFQUNELEtBQUssRUFBRTtvQ0FDTCxZQUFZLEVBQUUsSUFBSTtvQ0FDbEIsTUFBTSxFQUFFLG9CQUFhLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUU7b0NBQzVELGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUztvQ0FDdEQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO29DQUN6QyxPQUFPLEVBQUUsVUFBVTtvQ0FDbkIsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhO29DQUNoRCxRQUFRLEVBQUUsRUFBRTtvQ0FDWixVQUFVLEVBQUUsR0FBRztpQ0FDaEIsWUFFQSxJQUFJLElBbkJBLElBQUksQ0FvQkYsQ0FDVixDQUFDO3dCQUNKLENBQUMsQ0FBQyxHQUNFLENBQ1AsSUFDRyxJQUNGLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQztBQVdGLElBQU0sYUFBYSxHQUFpQyxVQUFDLEVBT3BEO1FBTkMsUUFBUSxjQUFBLEVBQ1IsWUFBWSxrQkFBQSxFQUNaLFNBQVMsZUFBQSxFQUNULFlBQVksa0JBQUEsRUFDWixhQUFhLG1CQUFBLEVBQ2IsU0FBUyxlQUFBO0lBRUgsSUFBQSxLQUF3QyxLQUFLLENBQUMsUUFBUSxDQUFlLFFBQVEsQ0FBQyxFQUE3RSxlQUFlLFFBQUEsRUFBRSxrQkFBa0IsUUFBMEMsQ0FBQztJQUVyRixLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2Qsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0IsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVmLElBQU0sZ0JBQWdCLEdBQUcsVUFBQyxFQUFVLEVBQUUsT0FBbUQ7UUFDdkYsa0JBQWtCLENBQUMsVUFBQyxJQUFJLElBQUssT0FBQSx1QkFDeEIsSUFBSSxLQUNQLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFDLFVBQVU7Z0JBQzNDLE9BQUEsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVTtZQUF2RCxDQUF1RCxDQUN4RCxJQUNELEVBTDJCLENBSzNCLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGLElBQU0sZ0JBQWdCLEdBQUcsVUFBQyxFQUFVO1FBQ2xDLGtCQUFrQixDQUFDLFVBQUMsSUFBSSxJQUFLLE9BQUEsdUJBQ3hCLElBQUksS0FDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBQyxVQUFVLElBQUssT0FBQSxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBcEIsQ0FBb0IsQ0FBQyxJQUMxRSxFQUgyQixDQUczQixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7SUFFRixPQUFPLENBQ0wsZUFBSyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxhQUMvRCxjQUNFLEtBQUssRUFBRTtvQkFDTCxPQUFPLEVBQUUsRUFBRTtvQkFDWCxZQUFZLEVBQUUsRUFBRTtvQkFDaEIsZUFBZSxFQUFFLFNBQVM7b0JBQzFCLE1BQU0sRUFBRSxtQkFBbUI7b0JBQzNCLFVBQVUsRUFBRSxHQUFHO29CQUNmLEtBQUssRUFBRSxTQUFTO2lCQUNqQixZQUVBLGVBQWUsQ0FBQyxLQUFLLElBQUksVUFBVSxHQUNoQyxFQUVOLGNBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsWUFDOUQsZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBQyxVQUFVLElBQUssT0FBQSxDQUMvQyxLQUFDLGVBQWUsSUFFZCxJQUFJLEVBQUUsVUFBVSxFQUNoQixZQUFZLEVBQUUsWUFBWSxFQUMxQixTQUFTLEVBQUUsU0FBUyxFQUNwQixZQUFZLEVBQUUsWUFBWSxFQUMxQixRQUFRLEVBQUUsY0FBTSxPQUFBLFlBQVksS0FBSSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBLEVBQWhELENBQWdELEVBQ2hFLFlBQVksRUFBRSxVQUFDLElBQUk7d0JBQ2pCLE9BQUEsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxVQUFDLElBQUksSUFBSyxPQUFBLHVCQUFNLElBQUksS0FBRSxZQUFZLEVBQUUsSUFBSSxJQUFHLEVBQWpDLENBQWlDLENBQUM7b0JBQTVFLENBQTRFLEVBRTlFLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQU0sT0FBQSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQS9CLENBQStCLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFUckUsVUFBVSxDQUFDLEVBQUUsQ0FVbEIsQ0FDSCxFQWJnRCxDQWFoRCxDQUFDLEdBQ0UsRUFFTCxZQUFZLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQ3pELGNBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQzNELGlCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLGNBQU0sT0FBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUcsZUFBZSxDQUFDLEVBQTVCLENBQTRCLEVBQzNDLEtBQUssRUFBRTt3QkFDTCxlQUFlLEVBQUUsWUFBWTt3QkFDN0IsS0FBSyxFQUFFLFNBQVM7d0JBQ2hCLE1BQU0sRUFBRSxNQUFNO3dCQUNkLFlBQVksRUFBRSxFQUFFO3dCQUNoQixPQUFPLEVBQUUsV0FBVzt3QkFDcEIsVUFBVSxFQUFFLEdBQUc7d0JBQ2YsTUFBTSxFQUFFLFNBQVM7d0JBQ2pCLFNBQVMsRUFBRSw0QkFBNEI7cUJBQ3hDLHdCQUdNLEdBQ0wsQ0FDUCxJQUNHLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLElBQU0sVUFBVSxHQUFzQyxVQUFDLEVBQWE7UUFBWCxTQUFTLGVBQUE7SUFDaEUsT0FBTyxDQUNMLGNBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFNLE9BQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFwQyxDQUFvQyxZQUNuSSxjQUFLLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQyxPQUFPLEVBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFJLEdBQzFHLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLElBQU0sU0FBUyxHQUFxQyxVQUFDLEVBQVk7UUFBVixRQUFRLGNBQUE7SUFDN0QsT0FBTyxDQUNMLGVBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFNLE9BQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFuQyxDQUFtQyxhQUNqSSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUMzQixlQUFNLFNBQVMsRUFBQywrQkFBK0IsWUFBRSxRQUFRLENBQUMsSUFBSSxHQUFRLElBQ2xFLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGF0Q29udGVudEJsb2NrLCBEeW5hbWljQ2hhdEl0ZW0sIEZpbGVJdGVtLCBTY2hlZHVsZUl0ZW0gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRGaWxlSWNvbiB9IGZyb20gJy4vRmlsZVR5cGVJY29uJztcbmltcG9ydCB7IFggfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuXG4vLyBVdGlsaXR5IGZ1bmN0aW9uIHRvIHBhcnNlIG1hcmtkb3duIGJvbGQgc3ludGF4ICgqKnRleHQqKikgYW5kIGNvbnZlcnQgdG8gUmVhY3QgZWxlbWVudHNcbmV4cG9ydCBjb25zdCBwYXJzZUJvbGRUZXh0ID0gKGlucHV0OiBzdHJpbmcpOiBSZWFjdC5SZWFjdE5vZGVbXSA9PiB7XG4gIGNvbnN0IHBhcnRzOiBSZWFjdC5SZWFjdE5vZGVbXSA9IFtdO1xuICBjb25zdCBib2xkUmVnZXggPSAvXFwqXFwqKC4qPylcXCpcXCovZztcbiAgbGV0IGxhc3RJbmRleCA9IDA7XG4gIGxldCBtYXRjaDtcbiAgbGV0IGtleSA9IDA7XG5cbiAgd2hpbGUgKChtYXRjaCA9IGJvbGRSZWdleC5leGVjKGlucHV0KSkgIT09IG51bGwpIHtcbiAgICAvLyBBZGQgdGV4dCBiZWZvcmUgdGhlIG1hdGNoXG4gICAgaWYgKG1hdGNoLmluZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICBwYXJ0cy5wdXNoKGlucHV0LnNsaWNlKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQWRkIGJvbGQgdGV4dFxuICAgIHBhcnRzLnB1c2goXG4gICAgICA8c3Ryb25nIGtleT17a2V5Kyt9IHN0eWxlPXt7IGZvbnRXZWlnaHQ6IDcwMCB9fT5cbiAgICAgICAge21hdGNoWzFdfVxuICAgICAgPC9zdHJvbmc+XG4gICAgKTtcbiAgICBcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuXG4gIC8vIEFkZCByZW1haW5pbmcgdGV4dCBhZnRlciB0aGUgbGFzdCBtYXRjaFxuICBpZiAobGFzdEluZGV4IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChpbnB1dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgfVxuXG4gIC8vIElmIG5vIG1hdGNoZXMgZm91bmQsIHJldHVybiB0aGUgb3JpZ2luYWwgdGV4dFxuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzIDogW2lucHV0XTtcbn07XG5cbmludGVyZmFjZSBJbnRlcmFjdGl2ZUNvbnRlbnRQcm9wcyB7XG4gIGJsb2NrczogQ2hhdENvbnRlbnRCbG9ja1tdO1xuICBwcmltYXJ5Q29sb3I6IHN0cmluZztcbiAgdGV4dENvbG9yOiBzdHJpbmc7XG4gIGlzQWN0aW9uYWJsZTogYm9vbGVhbjtcbiAgb25RdWlja0FjdGlvbj86ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uU2NoZWR1bGVDb25maXJtPzogKHNjaGVkdWxlOiBTY2hlZHVsZUl0ZW0pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBJbnRlcmFjdGl2ZUNvbnRlbnQ6IFJlYWN0LkZDPEludGVyYWN0aXZlQ29udGVudFByb3BzPiA9ICh7XG4gIGJsb2NrcyxcbiAgcHJpbWFyeUNvbG9yLFxuICB0ZXh0Q29sb3IsXG4gIGlzQWN0aW9uYWJsZSxcbiAgb25RdWlja0FjdGlvbixcbiAgb25TY2hlZHVsZUNvbmZpcm0sXG59KSA9PiB7XG4gIGlmICghYmxvY2tzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogMTIgfX0+XG4gICAgICB7YmxvY2tzLm1hcCgoYmxvY2ssIGluZGV4KSA9PiB7XG4gICAgICAgIFxuICAgICAgICBzd2l0Y2ggKGJsb2NrLmtpbmQpIHtcbiAgICAgICAgICBjYXNlICdmaWxlJzpcbiAgICAgICAgICAgIGNvbnN0IGZpbGVEYXRhID0gYmxvY2suZGF0YTtcbiAgICAgICAgICAgIGlmIChmaWxlRGF0YSAmJiBmaWxlRGF0YS50eXBlICYmIGZpbGVEYXRhLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UnKSkge1xuICAgICAgICAgICAgICByZXR1cm4gPEltYWdlQmxvY2sga2V5PXtpbmRleH0gaW1hZ2VEYXRhPXtmaWxlRGF0YX0gLz47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gPEZpbGVCbG9jayBrZXk9e2luZGV4fSBmaWxlRGF0YT17ZmlsZURhdGF9IC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgcmV0dXJuIDxUZXh0QmxvY2sga2V5PXtpbmRleH0gdGV4dD17YmxvY2sudGV4dH0gLz47XG4gICAgICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8UXVpY2tPcHRpb25zXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBvcHRpb25zPXtibG9jay5vcHRpb25zfVxuICAgICAgICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgICAgIGlzQWN0aW9uYWJsZT17aXNBY3Rpb25hYmxlfVxuICAgICAgICAgICAgICAgIG9uUXVpY2tBY3Rpb249e29uUXVpY2tBY3Rpb259XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgJ2l0ZW1zJzpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxEeW5hbWljSXRlbXNMaXN0XG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBpdGVtcz17YmxvY2suaXRlbXN9XG4gICAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgdGV4dENvbG9yPXt0ZXh0Q29sb3J9XG4gICAgICAgICAgICAgICAgaXNBY3Rpb25hYmxlPXtpc0FjdGlvbmFibGV9XG4gICAgICAgICAgICAgICAgb25TZWxlY3Q9e29uUXVpY2tBY3Rpb259XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgJ3NjaGVkdWxlJzpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxTY2hlZHVsZUJsb2NrXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBzY2hlZHVsZT17YmxvY2suc2NoZWR1bGV9XG4gICAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgdGV4dENvbG9yPXt0ZXh0Q29sb3J9XG4gICAgICAgICAgICAgICAgaXNBY3Rpb25hYmxlPXtpc0FjdGlvbmFibGV9XG4gICAgICAgICAgICAgICAgb25RdWlja0FjdGlvbj17b25RdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICBvbkNvbmZpcm09e29uU2NoZWR1bGVDb25maXJtfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgVGV4dEJsb2NrOiBSZWFjdC5GQzx7IHRleHQ6IHN0cmluZyB9PiA9ICh7IHRleHQgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgd2hpdGVTcGFjZTogJ3ByZS13cmFwJywgbGluZUhlaWdodDogMS41IH19PlxuICAgICAge3BhcnNlQm9sZFRleHQodGV4dCl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgUXVpY2tPcHRpb25zUHJvcHMge1xuICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgcHJpbWFyeUNvbG9yOiBzdHJpbmc7XG4gIGlzQWN0aW9uYWJsZTogYm9vbGVhbjtcbiAgb25RdWlja0FjdGlvbj86ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmNvbnN0IFF1aWNrT3B0aW9uczogUmVhY3QuRkM8UXVpY2tPcHRpb25zUHJvcHM+ID0gKHtcbiAgb3B0aW9ucyxcbiAgcHJpbWFyeUNvbG9yLFxuICBpc0FjdGlvbmFibGUsXG4gIG9uUXVpY2tBY3Rpb24sXG59KSA9PiB7XG4gIGNvbnN0IFt2aXNpYmxlT3B0aW9ucywgc2V0VmlzaWJsZU9wdGlvbnNdID0gUmVhY3QudXNlU3RhdGUob3B0aW9ucyk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRWaXNpYmxlT3B0aW9ucyhvcHRpb25zKTtcbiAgfSwgW29wdGlvbnNdKTtcblxuICBpZiAoIXZpc2libGVPcHRpb25zLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBzdHlsZT17e1xuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGdhcDogOCxcbiAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAge3Zpc2libGVPcHRpb25zLm1hcCgob3B0aW9uLCBpZHgpID0+IChcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGtleT17YCR7b3B0aW9ufS0ke2lkeH1gfVxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGRpc2FibGVkPXshaXNBY3Rpb25hYmxlfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlKSByZXR1cm47XG4gICAgICAgICAgICBzZXRWaXNpYmxlT3B0aW9ucyhbXSk7XG4gICAgICAgICAgICBvblF1aWNrQWN0aW9uPy4ob3B0aW9uKTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6IDk5LFxuICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICAgICAgICAgIHBhZGRpbmc6ICcxMnB4IDEycHgnLFxuICAgICAgICAgICAgY3Vyc29yOiBpc0FjdGlvbmFibGUgPyAncG9pbnRlcicgOiAnbm90LWFsbG93ZWQnLFxuICAgICAgICAgICAgZm9udFdlaWdodDogNTAwLFxuICAgICAgICAgICAgZm9udFNpemU6IDE0LFxuICAgICAgICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ3RyYW5zZm9ybSAwLjEycyBlYXNlLCBvcGFjaXR5IDAuMTJzIGVhc2UnLFxuICAgICAgICAgICAgb3BhY2l0eTogaXNBY3Rpb25hYmxlID8gMSA6IDAuNixcbiAgICAgICAgICAgIGJveFNoYWRvdzogJzAgMnB4IDZweCByZ2JhKDAsMCwwLDAuMTIpJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbn1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBEeW5hbWljSXRlbXNMaXN0UHJvcHMge1xuICBpdGVtczogRHluYW1pY0NoYXRJdGVtW107XG4gIHByaW1hcnlDb2xvcjogc3RyaW5nO1xuICB0ZXh0Q29sb3I6IHN0cmluZztcbiAgaXNBY3Rpb25hYmxlOiBib29sZWFuO1xuICBvblNlbGVjdD86ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmNvbnN0IER5bmFtaWNJdGVtc0xpc3Q6IFJlYWN0LkZDPER5bmFtaWNJdGVtc0xpc3RQcm9wcz4gPSAoe1xuICBpdGVtcyxcbiAgcHJpbWFyeUNvbG9yLFxuICB0ZXh0Q29sb3IsXG4gIGlzQWN0aW9uYWJsZSxcbiAgb25TZWxlY3QsXG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDEwIH19PlxuICAgICAge2l0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICA8RHluYW1pY0l0ZW1DYXJkXG4gICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgdGV4dENvbG9yPXt0ZXh0Q29sb3J9XG4gICAgICAgICAgaXNBY3Rpb25hYmxlPXtpc0FjdGlvbmFibGV9XG4gICAgICAgICAgb25TZWxlY3Q9eygpID0+IGlzQWN0aW9uYWJsZSAmJiBvblNlbGVjdD8uKGl0ZW0ubmFtZSl9XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBEeW5hbWljSXRlbUNhcmRQcm9wcyB7XG4gIGl0ZW06IER5bmFtaWNDaGF0SXRlbTtcbiAgcHJpbWFyeUNvbG9yOiBzdHJpbmc7XG4gIHRleHRDb2xvcjogc3RyaW5nO1xuICBpc0FjdGlvbmFibGU6IGJvb2xlYW47XG4gIG9uU2VsZWN0PzogKCkgPT4gdm9pZDtcbiAgb25TbG90U2VsZWN0PzogKHNsb3Q6IHN0cmluZykgPT4gdm9pZDtcbiAgb25SZW1vdmU/OiAoKSA9PiB2b2lkO1xufVxuXG5jb25zdCBEeW5hbWljSXRlbUNhcmQ6IFJlYWN0LkZDPER5bmFtaWNJdGVtQ2FyZFByb3BzPiA9ICh7XG4gIGl0ZW0sXG4gIHByaW1hcnlDb2xvcixcbiAgdGV4dENvbG9yLFxuICBpc0FjdGlvbmFibGUsXG4gIG9uU2VsZWN0LFxuICBvblNsb3RTZWxlY3QsXG4gIG9uUmVtb3ZlLFxufSkgPT4ge1xuICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaGFzU2xvdHMgPSBBcnJheS5pc0FycmF5KGl0ZW0uc2xvdHMpICYmIGl0ZW0uc2xvdHMubGVuZ3RoID4gMDtcblxuICBjb25zdCBoYW5kbGVDYXJkQ2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0RXhwYW5kZWQoKHByZXYpID0+ICFwcmV2KTtcbiAgICBvblNlbGVjdD8uKCk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDYXJkQ2xpY2t9XG4gICAgICBzdHlsZT17e1xuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGdhcDogMTIsXG4gICAgICAgIHBhZGRpbmc6IDEyLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2U1ZTdlYicsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmOGZhZmMnLFxuICAgICAgICBjdXJzb3I6IGlzQWN0aW9uYWJsZSA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JyxcbiAgICAgICAgYm94U2hhZG93OiAnMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSknLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7aXRlbS5pbWFnZSAmJiAoXG4gICAgICAgIDxpbWdcbiAgICAgICAgICBzcmM9e2l0ZW0uaW1hZ2V9XG4gICAgICAgICAgYWx0PXtpdGVtLm5hbWV9XG4gICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IDY0LCBoZWlnaHQ6IDY0LCBib3JkZXJSYWRpdXM6IDgsIG9iamVjdEZpdDogJ2NvdmVyJyB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIDxkaXYgc3R5bGU9e3sgZmxleDogMSwgbWluV2lkdGg6IDAsIGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogNCB9fT5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JywgZ2FwOiA4IH19PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFdlaWdodDogNzAwLCBjb2xvcjogdGV4dENvbG9yLCBmb250U2l6ZTogMTUsIGZsZXg6IDEgfX0+XG4gICAgICAgICAgICB7aXRlbS5uYW1lfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtvblJlbW92ZSAmJiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgb25SZW1vdmUoKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI2YxZjVmOScsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA5OTk5LFxuICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTJlOGYwJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogMjgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyOCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8WCBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7aXRlbS5jYXRlZ29yeSAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBjb2xvcjogJyM2YjcyODAnLCBmb250U2l6ZTogMTMsIGZvbnRXZWlnaHQ6IDUwMCB9fT5cbiAgICAgICAgICAgIHtpdGVtLmNhdGVnb3J5fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICB7aXRlbS5kZXNjcmlwdGlvbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgY29sb3I6ICcjMzc0MTUxJyxcbiAgICAgICAgICAgICAgZm9udFNpemU6IDEzLFxuICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjUsXG4gICAgICAgICAgICAgIGRpc3BsYXk6ICctd2Via2l0LWJveCcsXG4gICAgICAgICAgICAgIFdlYmtpdExpbmVDbGFtcDogZXhwYW5kZWQgPyAndW5zZXQnIDogMyxcbiAgICAgICAgICAgICAgV2Via2l0Qm94T3JpZW50OiAndmVydGljYWwnLFxuICAgICAgICAgICAgICBvdmVyZmxvdzogZXhwYW5kZWQgPyAndmlzaWJsZScgOiAnaGlkZGVuJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2l0ZW0uZGVzY3JpcHRpb259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHtoYXNTbG90cyAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogOCwgZmxleFdyYXA6ICd3cmFwJywgbWFyZ2luVG9wOiA0IH19PlxuICAgICAgICAgICAge2l0ZW0uc2xvdHMhLm1hcCgoc2xvdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gaXRlbS5zZWxlY3RlZFNsb3QgPT09IHNsb3Q7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAga2V5PXtzbG90fVxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWlzQWN0aW9uYWJsZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIG9uU2xvdFNlbGVjdD8uKHNsb3QpO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogOTk5OSxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7aXNTZWxlY3RlZCA/IHByaW1hcnlDb2xvciA6ICcjZTVlN2ViJ31gLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzU2VsZWN0ZWQgPyBwcmltYXJ5Q29sb3IgOiAnI2ZmZmZmZicsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBpc1NlbGVjdGVkID8gJyNmZmZmZmYnIDogJyMxMTE4MjcnLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnNnB4IDEycHgnLFxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IGlzQWN0aW9uYWJsZSA/ICdwb2ludGVyJyA6ICdub3QtYWxsb3dlZCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogNjAwLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7c2xvdH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgU2NoZWR1bGVCbG9ja1Byb3BzIHtcbiAgc2NoZWR1bGU6IFNjaGVkdWxlSXRlbTtcbiAgcHJpbWFyeUNvbG9yOiBzdHJpbmc7XG4gIHRleHRDb2xvcjogc3RyaW5nO1xuICBpc0FjdGlvbmFibGU6IGJvb2xlYW47XG4gIG9uUXVpY2tBY3Rpb24/OiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkNvbmZpcm0/OiAoc2NoZWR1bGU6IFNjaGVkdWxlSXRlbSkgPT4gdm9pZDtcbn1cblxuY29uc3QgU2NoZWR1bGVCbG9jazogUmVhY3QuRkM8U2NoZWR1bGVCbG9ja1Byb3BzPiA9ICh7XG4gIHNjaGVkdWxlLFxuICBwcmltYXJ5Q29sb3IsXG4gIHRleHRDb2xvcixcbiAgaXNBY3Rpb25hYmxlLFxuICBvblF1aWNrQWN0aW9uLFxuICBvbkNvbmZpcm0sXG59KSA9PiB7XG4gIGNvbnN0IFtjdXJyZW50U2NoZWR1bGUsIHNldEN1cnJlbnRTY2hlZHVsZV0gPSBSZWFjdC51c2VTdGF0ZTxTY2hlZHVsZUl0ZW0+KHNjaGVkdWxlKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEN1cnJlbnRTY2hlZHVsZShzY2hlZHVsZSk7XG4gIH0sIFtzY2hlZHVsZV0pO1xuXG4gIGNvbnN0IHVwZGF0ZVJlc3RhdXJhbnQgPSAoaWQ6IHN0cmluZywgdXBkYXRlcjogKGl0ZW06IER5bmFtaWNDaGF0SXRlbSkgPT4gRHluYW1pY0NoYXRJdGVtKSA9PiB7XG4gICAgc2V0Q3VycmVudFNjaGVkdWxlKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIHJlc3RhdXJhbnRzOiBwcmV2LnJlc3RhdXJhbnRzLm1hcCgocmVzdGF1cmFudCkgPT5cbiAgICAgICAgcmVzdGF1cmFudC5pZCA9PT0gaWQgPyB1cGRhdGVyKHJlc3RhdXJhbnQpIDogcmVzdGF1cmFudFxuICAgICAgKSxcbiAgICB9KSk7XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlUmVzdGF1cmFudCA9IChpZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0Q3VycmVudFNjaGVkdWxlKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIHJlc3RhdXJhbnRzOiBwcmV2LnJlc3RhdXJhbnRzLmZpbHRlcigocmVzdGF1cmFudCkgPT4gcmVzdGF1cmFudC5pZCAhPT0gaWQpLFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAxMCB9fT5cbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwYWRkaW5nOiAxMixcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmOGZhZmMnLFxuICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTVlN2ViJyxcbiAgICAgICAgICBmb250V2VpZ2h0OiA3MDAsXG4gICAgICAgICAgY29sb3I6IHRleHRDb2xvcixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2N1cnJlbnRTY2hlZHVsZS50aXRsZSB8fCAnU2NoZWR1bGUnfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAxMCB9fT5cbiAgICAgICAge2N1cnJlbnRTY2hlZHVsZS5yZXN0YXVyYW50cy5tYXAoKHJlc3RhdXJhbnQpID0+IChcbiAgICAgICAgICA8RHluYW1pY0l0ZW1DYXJkXG4gICAgICAgICAgICBrZXk9e3Jlc3RhdXJhbnQuaWR9XG4gICAgICAgICAgICBpdGVtPXtyZXN0YXVyYW50fVxuICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICB0ZXh0Q29sb3I9e3RleHRDb2xvcn1cbiAgICAgICAgICAgIGlzQWN0aW9uYWJsZT17aXNBY3Rpb25hYmxlfVxuICAgICAgICAgICAgb25TZWxlY3Q9eygpID0+IGlzQWN0aW9uYWJsZSAmJiBvblF1aWNrQWN0aW9uPy4ocmVzdGF1cmFudC5uYW1lKX1cbiAgICAgICAgICAgIG9uU2xvdFNlbGVjdD17KHNsb3QpID0+XG4gICAgICAgICAgICAgIHVwZGF0ZVJlc3RhdXJhbnQocmVzdGF1cmFudC5pZCwgKGl0ZW0pID0+ICh7IC4uLml0ZW0sIHNlbGVjdGVkU2xvdDogc2xvdCB9KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uUmVtb3ZlPXtpc0FjdGlvbmFibGUgPyAoKSA9PiByZW1vdmVSZXN0YXVyYW50KHJlc3RhdXJhbnQuaWQpIDogdW5kZWZpbmVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHtpc0FjdGlvbmFibGUgJiYgY3VycmVudFNjaGVkdWxlLnJlc3RhdXJhbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ29uZmlybT8uKGN1cnJlbnRTY2hlZHVsZSl9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICAgICAgICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTAsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcxMHB4IDE2cHgnLFxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiA3MDAsXG4gICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDFweCA0cHggcmdiYSgwLDAsMCwwLjEyKScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIENvbmZpcm1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgSW1hZ2VCbG9jazogUmVhY3QuRkM8eyBpbWFnZURhdGE6IEZpbGVJdGVtIH0+ID0gKHsgaW1hZ2VEYXRhIH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogOCwgY3Vyc29yOiAncG9pbnRlcicgfX0gb25DbGljaz17KCkgPT4gd2luZG93Lm9wZW4oaW1hZ2VEYXRhLnVybCwgJ19ibGFuaycpfT5cbiAgICAgIDxpbWcgc3JjPXtpbWFnZURhdGEudXJsfSBhbHQ9XCJJbWFnZVwiIHN0eWxlPXt7IHdpZHRoOiA4MCwgaGVpZ2h0OiA2NCwgYm9yZGVyUmFkaXVzOiA4LCBvYmplY3RGaXQ6ICdjb3ZlcicgfX0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmNvbnN0IEZpbGVCbG9jazogUmVhY3QuRkM8eyBmaWxlRGF0YTogRmlsZUl0ZW0gfT4gPSAoeyBmaWxlRGF0YSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6IDgsIGN1cnNvcjogJ3BvaW50ZXInIH19IG9uQ2xpY2s9eygpID0+IHdpbmRvdy5vcGVuKGZpbGVEYXRhLnVybCwgJ19ibGFuaycpfT5cbiAgICAgIHtnZXRGaWxlSWNvbihmaWxlRGF0YS50eXBlKX1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+e2ZpbGVEYXRhLm5hbWV9PC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufTsiXX0=
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { getFileIcon } from '../FileTypeIcon';
|
|
3
|
+
export var UploadFilePreview = function (_a) {
|
|
4
|
+
var file = _a.file, index = _a.index;
|
|
5
|
+
var fileType = file === null || file === void 0 ? void 0 : file.type;
|
|
6
|
+
// const baseUrl = process.env.REACT_APP_BASE_URL;
|
|
7
|
+
var containerStyle = {
|
|
8
|
+
cursor: 'pointer',
|
|
9
|
+
};
|
|
10
|
+
var contentStyle = {
|
|
11
|
+
display: 'flex',
|
|
12
|
+
alignItems: 'center',
|
|
13
|
+
padding: '8px',
|
|
14
|
+
backgroundColor: '#f0f0f0',
|
|
15
|
+
borderRadius: '8px',
|
|
16
|
+
position: 'relative',
|
|
17
|
+
maxWidth: '250px',
|
|
18
|
+
};
|
|
19
|
+
var imageStyle = {
|
|
20
|
+
width: '40px',
|
|
21
|
+
height: '40px',
|
|
22
|
+
borderRadius: '4px',
|
|
23
|
+
objectFit: 'cover',
|
|
24
|
+
marginRight: '10px',
|
|
25
|
+
};
|
|
26
|
+
var fileNameStyle = {
|
|
27
|
+
width: '90%',
|
|
28
|
+
maxWidth: '150px',
|
|
29
|
+
fontWeight: 'bold',
|
|
30
|
+
fontSize: '14px',
|
|
31
|
+
overflow: 'hidden',
|
|
32
|
+
textOverflow: 'ellipsis',
|
|
33
|
+
whiteSpace: 'nowrap',
|
|
34
|
+
};
|
|
35
|
+
var fileSizeStyle = {
|
|
36
|
+
fontSize: '12px',
|
|
37
|
+
color: '#666',
|
|
38
|
+
};
|
|
39
|
+
var fileIconStyle = {
|
|
40
|
+
width: 40,
|
|
41
|
+
height: 40,
|
|
42
|
+
display: 'flex',
|
|
43
|
+
alignItems: 'center',
|
|
44
|
+
justifyContent: 'center',
|
|
45
|
+
};
|
|
46
|
+
var openFile = function () {
|
|
47
|
+
window.open(file === null || file === void 0 ? void 0 : file.url, '_blank');
|
|
48
|
+
};
|
|
49
|
+
var renderContent = function () {
|
|
50
|
+
return (_jsxs("div", { style: contentStyle, children: [(fileType === null || fileType === void 0 ? void 0 : fileType.startsWith('image/')) ? (_jsx("img", { src: file === null || file === void 0 ? void 0 : file.url, alt: file === null || file === void 0 ? void 0 : file.name, style: imageStyle })) : (_jsx("div", { style: fileIconStyle, children: getFileIcon(fileType || '') })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("div", { style: fileNameStyle, title: file === null || file === void 0 ? void 0 : file.name, children: file === null || file === void 0 ? void 0 : file.name }), _jsxs("div", { style: fileSizeStyle, children: [(fileType === null || fileType === void 0 ? void 0 : fileType.includes('/')) ? fileType === null || fileType === void 0 ? void 0 : fileType.split('/')[1].toUpperCase() : fileType, (file === null || file === void 0 ? void 0 : file.size) ? " \u00B7 ".concat(((file === null || file === void 0 ? void 0 : file.size) / 1024).toFixed(1), " KB") : ''] })] })] }, index || Math.random()));
|
|
51
|
+
};
|
|
52
|
+
return (_jsx("div", { style: containerStyle, onClick: openFile, children: renderContent() }));
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXBsb2FkRmlsZVByZXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9jb21tb24vVXBsb2FkRmlsZVByZXZpZXcudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFROUMsTUFBTSxDQUFDLElBQU0saUJBQWlCLEdBQXFDLFVBQUMsRUFBZTtRQUFiLElBQUksVUFBQSxFQUFFLEtBQUssV0FBQTtJQUMvRSxJQUFNLFFBQVEsR0FBRyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsSUFBSSxDQUFDO0lBQzVCLGtEQUFrRDtJQUdsRCxJQUFNLGNBQWMsR0FBd0I7UUFDMUMsTUFBTSxFQUFFLFNBQVM7S0FDbEIsQ0FBQztJQUVGLElBQU0sWUFBWSxHQUF3QjtRQUN4QyxPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsZUFBZSxFQUFFLFNBQVM7UUFDMUIsWUFBWSxFQUFFLEtBQUs7UUFDbkIsUUFBUSxFQUFFLFVBQVU7UUFDcEIsUUFBUSxFQUFFLE9BQU87S0FDbEIsQ0FBQztJQUVGLElBQU0sVUFBVSxHQUF3QjtRQUN0QyxLQUFLLEVBQUUsTUFBTTtRQUNiLE1BQU0sRUFBRSxNQUFNO1FBQ2QsWUFBWSxFQUFFLEtBQUs7UUFDbkIsU0FBUyxFQUFFLE9BQU87UUFDbEIsV0FBVyxFQUFFLE1BQU07S0FDcEIsQ0FBQztJQUVGLElBQU0sYUFBYSxHQUF3QjtRQUN6QyxLQUFLLEVBQUUsS0FBSztRQUNaLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFlBQVksRUFBRSxVQUFVO1FBQ3hCLFVBQVUsRUFBRSxRQUFRO0tBQ3JCLENBQUM7SUFFRixJQUFNLGFBQWEsR0FBd0I7UUFDekMsUUFBUSxFQUFFLE1BQU07UUFDaEIsS0FBSyxFQUFFLE1BQU07S0FDZCxDQUFDO0lBRUYsSUFBTSxhQUFhLEdBQXdCO1FBQ3pDLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTSxFQUFFLEVBQUU7UUFDVixPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLGNBQWMsRUFBRSxRQUFRO0tBQ3pCLENBQUM7SUFFRixJQUFNLFFBQVEsR0FBRztRQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUM7SUFFRixJQUFNLGFBQWEsR0FBRztRQUNwQixPQUFPLENBQ1AsZUFFSSxLQUFLLEVBQUUsWUFBWSxhQUVsQixDQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQ2xDLGNBQ0ksR0FBRyxFQUFFLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxHQUFHLEVBQ2QsR0FBRyxFQUFFLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxJQUFJLEVBQ2YsS0FBSyxFQUFFLFVBQVUsR0FDbkIsQ0FDRCxDQUFDLENBQUMsQ0FBQyxDQUNGLGNBQUssS0FBSyxFQUFFLGFBQWEsWUFDcEIsV0FBVyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsR0FDMUIsQ0FDUCxFQUNELGVBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGFBQ3hELGNBQUssS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksWUFBRyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsSUFBSSxHQUFPLEVBQ2hFLGVBQUssS0FBSyxFQUFFLGFBQWEsYUFDcEIsQ0FBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQyxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFDMUUsQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxrQkFBTSxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksSUFBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUMxRCxJQUNBLEtBcEJELEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBcUJ6QixDQUNMLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixPQUFPLENBQ0wsY0FBSyxLQUFLLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxRQUFRLFlBQzFDLGFBQWEsRUFBRSxHQUNaLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnLi4vU3Bpbm5lcic7XG5pbXBvcnQgeyBnZXRGaWxlSWNvbiB9IGZyb20gJy4uL0ZpbGVUeXBlSWNvbic7XG5pbXBvcnQgeyBBdHRhY2htZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgVXBsb2FkRmlsZVByZXZpZXdQcm9wcyB7XG4gIGZpbGU/OiBBdHRhY2htZW50O1xuICBpbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IFVwbG9hZEZpbGVQcmV2aWV3OiBSZWFjdC5GQzxVcGxvYWRGaWxlUHJldmlld1Byb3BzPiA9ICh7IGZpbGUsIGluZGV4IH0pID0+IHtcbiAgY29uc3QgZmlsZVR5cGUgPSBmaWxlPy50eXBlO1xuICAvLyBjb25zdCBiYXNlVXJsID0gcHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX0JBU0VfVVJMO1xuXG5cbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gIH07XG5cbiAgY29uc3QgY29udGVudFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiAnOHB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjBmMGYwJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIG1heFdpZHRoOiAnMjUwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGltYWdlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6ICc0MHB4JyxcbiAgICBoZWlnaHQ6ICc0MHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICBtYXJnaW5SaWdodDogJzEwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGZpbGVOYW1lU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6ICc5MCUnLFxuICAgIG1heFdpZHRoOiAnMTUwcHgnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIH07XG5cbiAgY29uc3QgZmlsZVNpemVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzEycHgnLFxuICAgIGNvbG9yOiAnIzY2NicsXG4gIH07XG5cbiAgY29uc3QgZmlsZUljb25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogNDAsXG4gICAgaGVpZ2h0OiA0MCxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IG9wZW5GaWxlID0gKCkgPT4ge1xuICAgIHdpbmRvdy5vcGVuKGZpbGU/LnVybCwgJ19ibGFuaycpO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICAgIGtleT17aW5kZXggfHwgTWF0aC5yYW5kb20oKX1cbiAgICAgICAgc3R5bGU9e2NvbnRlbnRTdHlsZX1cbiAgICA+XG4gICAgICAgIHtmaWxlVHlwZT8uc3RhcnRzV2l0aCgnaW1hZ2UvJykgPyAoXG4gICAgICAgIDxpbWdcbiAgICAgICAgICAgIHNyYz17ZmlsZT8udXJsfVxuICAgICAgICAgICAgYWx0PXtmaWxlPy5uYW1lfVxuICAgICAgICAgICAgc3R5bGU9e2ltYWdlU3R5bGV9XG4gICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17ZmlsZUljb25TdHlsZX0+XG4gICAgICAgICAgICAgIHtnZXRGaWxlSWNvbihmaWxlVHlwZSB8fCAnJyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgPGRpdiBzdHlsZT17ZmlsZU5hbWVTdHlsZX0gdGl0bGU9e2ZpbGU/Lm5hbWV9PntmaWxlPy5uYW1lfTwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPXtmaWxlU2l6ZVN0eWxlfT5cbiAgICAgICAgICAgIHtmaWxlVHlwZT8uaW5jbHVkZXMoJy8nKSA/IGZpbGVUeXBlPy5zcGxpdCgnLycpWzFdLnRvVXBwZXJDYXNlKCkgOiBmaWxlVHlwZX1cbiAgICAgICAgICAgIHtmaWxlPy5zaXplID8gYCDCtyAkeyhmaWxlPy5zaXplIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgIDogJyd9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17Y29udGFpbmVyU3R5bGV9IG9uQ2xpY2s9e29wZW5GaWxlfT5cbiAgICAgIHtyZW5kZXJDb250ZW50KCl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG4iXX0=
|
package/dist/hooks/useChat.d.ts
CHANGED
|
@@ -4,12 +4,13 @@ export interface UseChatProps {
|
|
|
4
4
|
apiKey: string;
|
|
5
5
|
tenant?: string | undefined;
|
|
6
6
|
metadata?: Record<string, any>;
|
|
7
|
+
useWs?: boolean;
|
|
7
8
|
language?: string;
|
|
8
9
|
onError?: (error: Error) => void;
|
|
9
10
|
onTakeover?: () => void;
|
|
10
11
|
onFinalize?: () => void;
|
|
11
12
|
}
|
|
12
|
-
export declare const useChat: ({ baseUrl, apiKey, tenant, metadata, language, onError, onTakeover, onFinalize }: UseChatProps) => {
|
|
13
|
+
export declare const useChat: ({ baseUrl, apiKey, tenant, metadata, useWs, language, onError, onTakeover, onFinalize }: UseChatProps) => {
|
|
13
14
|
messages: ChatMessage[];
|
|
14
15
|
isLoading: boolean;
|
|
15
16
|
sendMessage: (text: string, files?: File[], extraMetadata?: Record<string, any>, reCaptchaToken?: string) => Promise<void>;
|
package/dist/hooks/useChat.js
CHANGED
|
@@ -57,22 +57,22 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
57
57
|
import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
|
|
58
58
|
import { ChatService } from '../services/chatService';
|
|
59
59
|
export var useChat = function (_a) {
|
|
60
|
-
var baseUrl = _a.baseUrl, apiKey = _a.apiKey, tenant = _a.tenant, metadata = _a.metadata, language = _a.language, onError = _a.onError, onTakeover = _a.onTakeover, onFinalize = _a.onFinalize;
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
var
|
|
64
|
-
var
|
|
65
|
-
var
|
|
60
|
+
var baseUrl = _a.baseUrl, apiKey = _a.apiKey, tenant = _a.tenant, metadata = _a.metadata, _b = _a.useWs, useWs = _b === void 0 ? true : _b, language = _a.language, onError = _a.onError, onTakeover = _a.onTakeover, onFinalize = _a.onFinalize;
|
|
61
|
+
var _c = useState([]), messages = _c[0], setMessages = _c[1];
|
|
62
|
+
var _d = useState(false), isLoading = _d[0], setIsLoading = _d[1];
|
|
63
|
+
var _e = useState([]), preloadedAttachments = _e[0], setPreloadedAttachments = _e[1];
|
|
64
|
+
var _f = useState('disconnected'), connectionState = _f[0], setConnectionState = _f[1];
|
|
65
|
+
var _g = useState(false), isAgentTyping = _g[0], setIsAgentTyping = _g[1];
|
|
66
66
|
var chatServiceRef = useRef(null);
|
|
67
|
-
var
|
|
68
|
-
var
|
|
69
|
-
var
|
|
70
|
-
var
|
|
71
|
-
var
|
|
72
|
-
var
|
|
73
|
-
var
|
|
74
|
-
var
|
|
75
|
-
var
|
|
67
|
+
var _h = useState(null), conversationId = _h[0], setConversationId = _h[1];
|
|
68
|
+
var _j = useState([]), possibleQueries = _j[0], setPossibleQueries = _j[1];
|
|
69
|
+
var _k = useState(null), welcomeTitle = _k[0], setWelcomeTitle = _k[1];
|
|
70
|
+
var _l = useState(null), welcomeImageUrl = _l[0], setWelcomeImageUrl = _l[1];
|
|
71
|
+
var _m = useState(null), welcomeMessage = _m[0], setWelcomeMessage = _m[1];
|
|
72
|
+
var _o = useState([]), thinkingPhrases = _o[0], setThinkingPhrases = _o[1];
|
|
73
|
+
var _p = useState(1000), thinkingDelayMs = _p[0], setThinkingDelayMs = _p[1];
|
|
74
|
+
var _q = useState(false), isTakenOver = _q[0], setIsTakenOver = _q[1];
|
|
75
|
+
var _r = useState(false), isFinalized = _r[0], setIsFinalized = _r[1];
|
|
76
76
|
// Scoped messages key for apiKey, conversatioId
|
|
77
77
|
var buildMessagesKey = useCallback(function (apiKeyVal, convId) {
|
|
78
78
|
if (!convId)
|
|
@@ -86,6 +86,7 @@ export var useChat = function (_a) {
|
|
|
86
86
|
var prevBaseUrlRef = useRef(baseUrl);
|
|
87
87
|
var prevApiKeyRef = useRef(apiKey);
|
|
88
88
|
var prevTenantRef = useRef(tenant);
|
|
89
|
+
var prevUseWsRef = useRef(useWs);
|
|
89
90
|
// Store callbacks in refs so they don't trigger re-initialization
|
|
90
91
|
var onErrorRef = useRef(onError);
|
|
91
92
|
var onTakeoverRef = useRef(onTakeover);
|
|
@@ -100,15 +101,16 @@ export var useChat = function (_a) {
|
|
|
100
101
|
useEffect(function () {
|
|
101
102
|
onFinalizeRef.current = onFinalize;
|
|
102
103
|
}, [onFinalize]);
|
|
103
|
-
// Initialize chat service - only when baseUrl, apiKey, tenant, or metadata actually change
|
|
104
|
+
// Initialize chat service - only when baseUrl, apiKey, tenant, useWs, or metadata actually change
|
|
104
105
|
useEffect(function () {
|
|
105
106
|
var _a, _b, _c, _d, _e, _f;
|
|
106
107
|
var metadataChanged = metadataRef.current !== metadataString;
|
|
107
108
|
var baseUrlChanged = prevBaseUrlRef.current !== baseUrl;
|
|
108
109
|
var apiKeyChanged = prevApiKeyRef.current !== apiKey;
|
|
109
110
|
var tenantChanged = prevTenantRef.current !== tenant;
|
|
111
|
+
var useWsChanged = prevUseWsRef.current !== useWs;
|
|
110
112
|
// Only re-initialize for connection-related changes, NOT for metadata changes
|
|
111
|
-
var needsReinit = !chatServiceRef.current || baseUrlChanged || apiKeyChanged || tenantChanged;
|
|
113
|
+
var needsReinit = !chatServiceRef.current || baseUrlChanged || apiKeyChanged || tenantChanged || useWsChanged;
|
|
112
114
|
if (needsReinit) {
|
|
113
115
|
// Update refs
|
|
114
116
|
if (baseUrlChanged)
|
|
@@ -117,6 +119,8 @@ export var useChat = function (_a) {
|
|
|
117
119
|
prevApiKeyRef.current = apiKey;
|
|
118
120
|
if (tenantChanged)
|
|
119
121
|
prevTenantRef.current = tenant;
|
|
122
|
+
if (useWsChanged)
|
|
123
|
+
prevUseWsRef.current = useWs;
|
|
120
124
|
if (metadataChanged)
|
|
121
125
|
metadataRef.current = metadataString;
|
|
122
126
|
// Clean up existing service if it exists
|
|
@@ -124,7 +128,7 @@ export var useChat = function (_a) {
|
|
|
124
128
|
chatServiceRef.current.disconnect();
|
|
125
129
|
chatServiceRef.current.setWelcomeDataHandler(null);
|
|
126
130
|
}
|
|
127
|
-
chatServiceRef.current = new ChatService(baseUrl, apiKey, metadata, tenant, language);
|
|
131
|
+
chatServiceRef.current = new ChatService(baseUrl, apiKey, metadata, tenant, language, useWs);
|
|
128
132
|
// Set up handlers
|
|
129
133
|
chatServiceRef.current.setMessageHandler(function (message) {
|
|
130
134
|
var normalizedMessage = __assign(__assign({}, message), { create_time: (!message.create_time || isNaN(message.create_time))
|
|
@@ -222,7 +226,7 @@ export var useChat = function (_a) {
|
|
|
222
226
|
return function () {
|
|
223
227
|
// Only cleanup on unmount, not on every dependency change
|
|
224
228
|
};
|
|
225
|
-
}, [baseUrl, apiKey, tenant, metadataString, language]);
|
|
229
|
+
}, [baseUrl, apiKey, tenant, metadataString, language, useWs]);
|
|
226
230
|
// Update language when it changes (without re-initializing the service)
|
|
227
231
|
useEffect(function () {
|
|
228
232
|
if (chatServiceRef.current) {
|
|
@@ -330,29 +334,33 @@ export var useChat = function (_a) {
|
|
|
330
334
|
});
|
|
331
335
|
}); }, []);
|
|
332
336
|
var uploadFile = useCallback(function (file) { return __awaiter(void 0, void 0, void 0, function () {
|
|
333
|
-
var
|
|
334
|
-
|
|
335
|
-
|
|
337
|
+
var conversationId, uploadResult, file_url, attachment_1, error_2;
|
|
338
|
+
var _a, _b;
|
|
339
|
+
return __generator(this, function (_c) {
|
|
340
|
+
switch (_c.label) {
|
|
336
341
|
case 0:
|
|
337
|
-
|
|
342
|
+
conversationId = (_a = chatServiceRef.current) === null || _a === void 0 ? void 0 : _a.getConversationId();
|
|
343
|
+
if (!conversationId) {
|
|
338
344
|
return [2 /*return*/, null];
|
|
339
345
|
}
|
|
340
|
-
|
|
346
|
+
_c.label = 1;
|
|
341
347
|
case 1:
|
|
342
|
-
|
|
343
|
-
return [4 /*yield*/, chatServiceRef.current.uploadFile(
|
|
348
|
+
_c.trys.push([1, 3, , 4]);
|
|
349
|
+
return [4 /*yield*/, ((_b = chatServiceRef.current) === null || _b === void 0 ? void 0 : _b.uploadFile(conversationId, file))];
|
|
344
350
|
case 2:
|
|
345
|
-
|
|
351
|
+
uploadResult = _c.sent();
|
|
352
|
+
file_url = new URL(uploadResult.file_url, baseUrl).href;
|
|
346
353
|
attachment_1 = {
|
|
347
354
|
name: file.name,
|
|
348
355
|
type: file.type,
|
|
349
356
|
size: file.size,
|
|
350
|
-
url:
|
|
357
|
+
url: file_url,
|
|
358
|
+
file_id: uploadResult === null || uploadResult === void 0 ? void 0 : uploadResult.file_id,
|
|
351
359
|
};
|
|
352
360
|
setPreloadedAttachments(function (prev) { return __spreadArray(__spreadArray([], prev, true), [attachment_1], false); });
|
|
353
361
|
return [2 /*return*/, attachment_1];
|
|
354
362
|
case 3:
|
|
355
|
-
error_2 =
|
|
363
|
+
error_2 = _c.sent();
|
|
356
364
|
if (onErrorRef.current) {
|
|
357
365
|
onErrorRef.current(error_2);
|
|
358
366
|
}
|
|
@@ -542,4 +550,4 @@ export var useChat = function (_a) {
|
|
|
542
550
|
thinkingDelayMs: thinkingDelayMs,
|
|
543
551
|
};
|
|
544
552
|
};
|
|
545
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlQ2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBY3RELE1BQU0sQ0FBQyxJQUFNLE9BQU8sR0FBRyxVQUFDLEVBQThGO1FBQTVGLE9BQU8sYUFBQSxFQUFFLE1BQU0sWUFBQSxFQUFFLE1BQU0sWUFBQSxFQUFFLFFBQVEsY0FBQSxFQUFFLFFBQVEsY0FBQSxFQUFFLE9BQU8sYUFBQSxFQUFFLFVBQVUsZ0JBQUEsRUFBRSxVQUFVLGdCQUFBO0lBQzlGLElBQUEsS0FBMEIsUUFBUSxDQUFnQixFQUFFLENBQUMsRUFBcEQsUUFBUSxRQUFBLEVBQUUsV0FBVyxRQUErQixDQUFDO0lBQ3RELElBQUEsS0FBNEIsUUFBUSxDQUFVLEtBQUssQ0FBQyxFQUFuRCxTQUFTLFFBQUEsRUFBRSxZQUFZLFFBQTRCLENBQUM7SUFDckQsSUFBQSxLQUFrRCxRQUFRLENBQWUsRUFBRSxDQUFDLEVBQTNFLG9CQUFvQixRQUFBLEVBQUUsdUJBQXVCLFFBQThCLENBQUM7SUFDN0UsSUFBQSxLQUF3QyxRQUFRLENBQThDLGNBQWMsQ0FBQyxFQUE1RyxlQUFlLFFBQUEsRUFBRSxrQkFBa0IsUUFBeUUsQ0FBQztJQUM5RyxJQUFBLEtBQW9DLFFBQVEsQ0FBVSxLQUFLLENBQUMsRUFBM0QsYUFBYSxRQUFBLEVBQUUsZ0JBQWdCLFFBQTRCLENBQUM7SUFDbkUsSUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFxQixJQUFJLENBQUMsQ0FBQztJQUNsRCxJQUFBLEtBQXND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QUcsQ0FBQyxVQUFBLENBQUM7NEJBQ1Isa0NBQWtDOzRCQUNsQyxJQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFLLENBQVMsQ0FBQyxFQUFFLENBQUM7NEJBQzVDLE9BQU8sS0FBSyxLQUFLLFNBQVM7Z0NBQ3hCLENBQUMsdUJBQU0sQ0FBQyxLQUFFLFFBQVEsa0NBQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxVQUFFLGFBQVcsYUFDdkQsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDUixDQUFDLENBQUM7b0JBTkYsQ0FNRSxDQUNILENBQUM7Ozs7b0JBRUYsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ3ZCLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBYyxDQUFDLENBQUM7b0JBQ3JDLENBQUM7Ozs7O1NBRUosRUFDRCxFQUFFLENBQ0gsQ0FBQztJQUVGLE9BQU87UUFDTCxRQUFRLFVBQUE7UUFDUixTQUFTLFdBQUE7UUFDVCxXQUFXLGFBQUE7UUFDWCxVQUFVLFlBQUE7UUFDVixpQkFBaUIsbUJBQUE7UUFDakIsaUJBQWlCLG1CQUFBO1FBQ2pCLGVBQWUsaUJBQUE7UUFDZixjQUFjLGdCQUFBO1FBQ2QsZUFBZSxpQkFBQTtRQUNmLFdBQVcsYUFBQTtRQUNYLFdBQVcsYUFBQTtRQUNYLGFBQWEsZUFBQTtRQUNiLFdBQVcsYUFBQTtRQUNYLFlBQVksY0FBQTtRQUNaLGVBQWUsaUJBQUE7UUFDZixjQUFjLGdCQUFBO1FBQ2QsZUFBZSxpQkFBQTtRQUNmLGVBQWUsaUJBQUE7S0FDaEIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGF0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NoYXRTZXJ2aWNlJztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBBdHRhY2htZW50LCBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlQ2hhdFByb3BzIHtcbiAgYmFzZVVybDogc3RyaW5nO1xuICBhcGlLZXk6IHN0cmluZztcbiAgdGVuYW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGxhbmd1YWdlPzogc3RyaW5nO1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgb25UYWtlb3Zlcj86ICgpID0+IHZvaWQ7XG4gIG9uRmluYWxpemU/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdCA9ICh7IGJhc2VVcmwsIGFwaUtleSwgdGVuYW50LCBtZXRhZGF0YSwgbGFuZ3VhZ2UsIG9uRXJyb3IsIG9uVGFrZW92ZXIsIG9uRmluYWxpemUgfTogVXNlQ2hhdFByb3BzKSA9PiB7XG4gIGNvbnN0IFttZXNzYWdlcywgc2V0TWVzc2FnZXNdID0gdXNlU3RhdGU8Q2hhdE1lc3NhZ2VbXT4oW10pO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbcHJlbG9hZGVkQXR0YWNobWVudHMsIHNldFByZWxvYWRlZEF0dGFjaG1lbnRzXSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRbXT4oW10pO1xuICBjb25zdCBbY29ubmVjdGlvblN0YXRlLCBzZXRDb25uZWN0aW9uU3RhdGVdID0gdXNlU3RhdGU8J2Nvbm5lY3RpbmcnIHwgJ2Nvbm5lY3RlZCcgfCAnZGlzY29ubmVjdGVkJz4oJ2Rpc2Nvbm5lY3RlZCcpO1xuICBjb25zdCBbaXNBZ2VudFR5cGluZywgc2V0SXNBZ2VudFR5cGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IGNoYXRTZXJ2aWNlUmVmID0gdXNlUmVmPENoYXRTZXJ2aWNlIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtjb252ZXJzYXRpb25JZCwgc2V0Q29udmVyc2F0aW9uSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtwb3NzaWJsZVF1ZXJpZXMsIHNldFBvc3NpYmxlUXVlcmllc10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4oW10pO1xuICBjb25zdCBbd2VsY29tZVRpdGxlLCBzZXRXZWxjb21lVGl0bGVdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFt3ZWxjb21lSW1hZ2VVcmwsIHNldFdlbGNvbWVJbWFnZVVybF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3dlbGNvbWVNZXNzYWdlLCBzZXRXZWxjb21lTWVzc2FnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3RoaW5raW5nUGhyYXNlcywgc2V0VGhpbmtpbmdQaHJhc2VzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XG4gIGNvbnN0IFt0aGlua2luZ0RlbGF5TXMsIHNldFRoaW5raW5nRGVsYXlNc10gPSB1c2VTdGF0ZTxudW1iZXI+KDEwMDApO1xuICBjb25zdCBbaXNUYWtlbk92ZXIsIHNldElzVGFrZW5PdmVyXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2lzRmluYWxpemVkLCBzZXRJc0ZpbmFsaXplZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gU2NvcGVkIG1lc3NhZ2VzIGtleSBmb3IgYXBpS2V5LCBjb252ZXJzYXRpb0lkXG4gIGNvbnN0IGJ1aWxkTWVzc2FnZXNLZXkgPSB1c2VDYWxsYmFjaygoYXBpS2V5VmFsOiBzdHJpbmcsIGNvbnZJZDogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgIGlmICghY29udklkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYGdlbmFzc2lzdF9jb252ZXJzYXRpb25fbWVzc2FnZXM6JHthcGlLZXlWYWx9OiR7Y29udklkfWA7XG4gIH0sIFtdKTtcblxuICAvLyBEZWVwIGNvbXBhcmUgbWV0YWRhdGEgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1pbml0aWFsaXphdGlvbnNcbiAgLy8gT25seSByZS1pbml0aWFsaXplIGlmIG1ldGFkYXRhIGFjdHVhbGx5IGNoYW5nZXMgKGJ5IHZhbHVlLCBub3QgcmVmZXJlbmNlKVxuICBjb25zdCBtZXRhZGF0YVN0cmluZyA9IHVzZU1lbW8oKCkgPT4gSlNPTi5zdHJpbmdpZnkobWV0YWRhdGEgfHwge30pLCBbbWV0YWRhdGFdKTtcbiAgY29uc3QgbWV0YWRhdGFSZWYgPSB1c2VSZWY8c3RyaW5nPihtZXRhZGF0YVN0cmluZyk7XG4gIGNvbnN0IHByZXZCYXNlVXJsUmVmID0gdXNlUmVmPHN0cmluZz4oYmFzZVVybCk7XG4gIGNvbnN0IHByZXZBcGlLZXlSZWYgPSB1c2VSZWY8c3RyaW5nPihhcGlLZXkpO1xuICBjb25zdCBwcmV2VGVuYW50UmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odGVuYW50KTtcblxuICAvLyBTdG9yZSBjYWxsYmFja3MgaW4gcmVmcyBzbyB0aGV5IGRvbid0IHRyaWdnZXIgcmUtaW5pdGlhbGl6YXRpb25cbiAgY29uc3Qgb25FcnJvclJlZiA9IHVzZVJlZihvbkVycm9yKTtcbiAgY29uc3Qgb25UYWtlb3ZlclJlZiA9IHVzZVJlZihvblRha2VvdmVyKTtcbiAgY29uc3Qgb25GaW5hbGl6ZVJlZiA9IHVzZVJlZihvbkZpbmFsaXplKTtcblxuICAvLyBVcGRhdGUgY2FsbGJhY2sgcmVmcyB3aGVuIHRoZXkgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb25FcnJvclJlZi5jdXJyZW50ID0gb25FcnJvcjtcbiAgfSwgW29uRXJyb3JdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIG9uVGFrZW92ZXJSZWYuY3VycmVudCA9IG9uVGFrZW92ZXI7XG4gIH0sIFtvblRha2VvdmVyXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBvbkZpbmFsaXplUmVmLmN1cnJlbnQgPSBvbkZpbmFsaXplO1xuICB9LCBbb25GaW5hbGl6ZV0pO1xuXG4gIC8vIEluaXRpYWxpemUgY2hhdCBzZXJ2aWNlIC0gb25seSB3aGVuIGJhc2VVcmwsIGFwaUtleSwgdGVuYW50LCBvciBtZXRhZGF0YSBhY3R1YWxseSBjaGFuZ2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZXRhZGF0YUNoYW5nZWQgPSBtZXRhZGF0YVJlZi5jdXJyZW50ICE9PSBtZXRhZGF0YVN0cmluZztcbiAgICBjb25zdCBiYXNlVXJsQ2hhbmdlZCA9IHByZXZCYXNlVXJsUmVmLmN1cnJlbnQgIT09IGJhc2VVcmw7XG4gICAgY29uc3QgYXBpS2V5Q2hhbmdlZCA9IHByZXZBcGlLZXlSZWYuY3VycmVudCAhPT0gYXBpS2V5O1xuICAgIGNvbnN0IHRlbmFudENoYW5nZWQgPSBwcmV2VGVuYW50UmVmLmN1cnJlbnQgIT09IHRlbmFudDtcbiAgICBcbiAgICAvLyBPbmx5IHJlLWluaXRpYWxpemUgZm9yIGNvbm5lY3Rpb24tcmVsYXRlZCBjaGFuZ2VzLCBOT1QgZm9yIG1ldGFkYXRhIGNoYW5nZXNcbiAgICBjb25zdCBuZWVkc1JlaW5pdCA9ICFjaGF0U2VydmljZVJlZi5jdXJyZW50IHx8IGJhc2VVcmxDaGFuZ2VkIHx8IGFwaUtleUNoYW5nZWQgfHwgdGVuYW50Q2hhbmdlZDtcblxuICAgIGlmIChuZWVkc1JlaW5pdCkge1xuICAgICAgLy8gVXBkYXRlIHJlZnNcbiAgICAgIGlmIChiYXNlVXJsQ2hhbmdlZCkgcHJldkJhc2VVcmxSZWYuY3VycmVudCA9IGJhc2VVcmw7XG4gICAgICBpZiAoYXBpS2V5Q2hhbmdlZCkgcHJldkFwaUtleVJlZi5jdXJyZW50ID0gYXBpS2V5O1xuICAgICAgaWYgKHRlbmFudENoYW5nZWQpIHByZXZUZW5hbnRSZWYuY3VycmVudCA9IHRlbmFudDtcbiAgICAgIGlmIChtZXRhZGF0YUNoYW5nZWQpIG1ldGFkYXRhUmVmLmN1cnJlbnQgPSBtZXRhZGF0YVN0cmluZztcblxuICAgICAgLy8gQ2xlYW4gdXAgZXhpc3Rpbmcgc2VydmljZSBpZiBpdCBleGlzdHNcbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZGlzY29ubmVjdCgpO1xuICAgICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldFdlbGNvbWVEYXRhSGFuZGxlcihudWxsKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudCA9IG5ldyBDaGF0U2VydmljZShiYXNlVXJsLCBhcGlLZXksIG1ldGFkYXRhLCB0ZW5hbnQsIGxhbmd1YWdlKTtcbiAgICAgIFxuICAgICAgLy8gU2V0IHVwIGhhbmRsZXJzXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldE1lc3NhZ2VIYW5kbGVyKChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgLi4ubWVzc2FnZSxcbiAgICAgICAgICBjcmVhdGVfdGltZTogKCFtZXNzYWdlLmNyZWF0ZV90aW1lIHx8IGlzTmFOKG1lc3NhZ2UuY3JlYXRlX3RpbWUpKVxuICAgICAgICAgICAgPyBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKVxuICAgICAgICAgICAgOiBtZXNzYWdlLmNyZWF0ZV90aW1lLFxuICAgICAgICB9O1xuXG4gICAgICAgIHNldE1lc3NhZ2VzKHByZXZNZXNzYWdlcyA9PiBbLi4ucHJldk1lc3NhZ2VzLCBub3JtYWxpemVkTWVzc2FnZV0pO1xuICAgICAgICAvLyBTdG9wIHR5cGluZyBhbmltYXRpb24gd2hlbiBhZ2VudCBvciBzeXN0ZW0gbWVzc2FnZSBhcnJpdmVzXG4gICAgICAgIGlmIChub3JtYWxpemVkTWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnIHx8IG5vcm1hbGl6ZWRNZXNzYWdlLnNwZWFrZXIgPT09ICdzcGVjaWFsJykge1xuICAgICAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRUYWtlb3ZlckhhbmRsZXIoKCkgPT4ge1xuICAgICAgICBzZXRJc1Rha2VuT3Zlcih0cnVlKTtcbiAgICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICAgIGlmIChvblRha2VvdmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvblRha2VvdmVyUmVmLmN1cnJlbnQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0RmluYWxpemVkSGFuZGxlcigoKSA9PiB7XG4gICAgICAgIHNldElzRmluYWxpemVkKHRydWUpO1xuICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgICAgaWYgKG9uRmluYWxpemVSZWYuY3VycmVudCkge1xuICAgICAgICAgIG9uRmluYWxpemVSZWYuY3VycmVudCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRDb25uZWN0aW9uU3RhdGVIYW5kbGVyKChzdGF0ZSkgPT4ge1xuICAgICAgICBzZXRDb25uZWN0aW9uU3RhdGUoc3RhdGUpO1xuICAgICAgICBpZiAoc3RhdGUgIT09ICdjb25uZWN0ZWQnKSB7XG4gICAgICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldFdlbGNvbWVEYXRhSGFuZGxlcigoZGF0YSkgPT4ge1xuICAgICAgICBzZXRXZWxjb21lVGl0bGUoZGF0YS50aXRsZSA/PyBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZUltYWdlVXJsKGRhdGEuaW1hZ2VVcmwgPz8gbnVsbCk7XG4gICAgICAgIHNldFdlbGNvbWVNZXNzYWdlKGRhdGEubWVzc2FnZSA/PyBudWxsKTtcbiAgICAgICAgaWYgKGRhdGEucG9zc2libGVRdWVyaWVzICYmIGRhdGEucG9zc2libGVRdWVyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoZGF0YS5wb3NzaWJsZVF1ZXJpZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gQ2hlY2sgZm9yIGEgc2F2ZWQgY29udmVyc2F0aW9uIGFuZCBjb25uZWN0IHRvIGl0XG4gICAgICBjb25zdCBjb252SWQgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldENvbnZlcnNhdGlvbklkKCk7XG4gICAgICBpZiAoY29udklkKSB7XG4gICAgICAgIHNldENvbnZlcnNhdGlvbklkKGNvbnZJZCk7XG4gICAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50LmlzQ29udmVyc2F0aW9uRmluYWxpemVkKCkpIHtcbiAgICAgICAgICBzZXRJc0ZpbmFsaXplZCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LmNvbm5lY3RXZWJTb2NrZXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gUHVsbCBpbml0aWFsIHN0YXRpYyBkYXRhXG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBxdWVyaWVzID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRQb3NzaWJsZVF1ZXJpZXM/LigpIHx8IFtdO1xuICAgICAgICBpZiAocXVlcmllcy5sZW5ndGgpIHNldFBvc3NpYmxlUXVlcmllcyhxdWVyaWVzKTtcbiAgICAgICAgY29uc3Qgd2VsY29tZSA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGE/LigpO1xuICAgICAgICBpZiAod2VsY29tZSkge1xuICAgICAgICAgIHNldFdlbGNvbWVUaXRsZSh3ZWxjb21lLnRpdGxlIHx8IG51bGwpO1xuICAgICAgICAgIHNldFdlbGNvbWVJbWFnZVVybCh3ZWxjb21lLmltYWdlVXJsIHx8IG51bGwpO1xuICAgICAgICAgIHNldFdlbGNvbWVNZXNzYWdlKHdlbGNvbWUubWVzc2FnZSB8fCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aGlua2luZyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0VGhpbmtpbmdDb25maWc/LigpO1xuICAgICAgICBpZiAodGhpbmtpbmcpIHtcbiAgICAgICAgICBzZXRUaGlua2luZ1BocmFzZXModGhpbmtpbmcucGhyYXNlcyB8fCBbXSk7XG4gICAgICAgICAgc2V0VGhpbmtpbmdEZWxheU1zKHRoaW5raW5nLmRlbGF5TXMgfHwgMTAwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIC8vIEp1c3QgdXBkYXRlIG1ldGFkYXRhIHdpdGhvdXQgcmUtaW5pdGlhbGl6aW5nXG4gICAgICBpZiAobWV0YWRhdGFDaGFuZ2VkKSB7XG4gICAgICAgIG1ldGFkYXRhUmVmLmN1cnJlbnQgPSBtZXRhZGF0YVN0cmluZztcbiAgICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWx3YXlzIHVwZGF0ZSBoYW5kbGVycyB3aGVuIGNhbGxiYWNrcyBjaGFuZ2UgKHdpdGhvdXQgcmUtaW5pdGlhbGl6aW5nKVxuICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldFRha2VvdmVySGFuZGxlcigoKSA9PiB7XG4gICAgICAgIHNldElzVGFrZW5PdmVyKHRydWUpO1xuICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgICAgaWYgKG9uVGFrZW92ZXJSZWYuY3VycmVudCkge1xuICAgICAgICAgIG9uVGFrZW92ZXJSZWYuY3VycmVudCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRGaW5hbGl6ZWRIYW5kbGVyKCgpID0+IHtcbiAgICAgICAgc2V0SXNGaW5hbGl6ZWQodHJ1ZSk7XG4gICAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgICBpZiAob25GaW5hbGl6ZVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgb25GaW5hbGl6ZVJlZi5jdXJyZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENsZWFudXAgb25seSBvbiB1bm1vdW50XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8vIE9ubHkgY2xlYW51cCBvbiB1bm1vdW50LCBub3Qgb24gZXZlcnkgZGVwZW5kZW5jeSBjaGFuZ2VcbiAgICB9O1xuICB9LCBbYmFzZVVybCwgYXBpS2V5LCB0ZW5hbnQsIG1ldGFkYXRhU3RyaW5nLCBsYW5ndWFnZV0pO1xuXG4gIC8vIFVwZGF0ZSBsYW5ndWFnZSB3aGVuIGl0IGNoYW5nZXMgKHdpdGhvdXQgcmUtaW5pdGlhbGl6aW5nIHRoZSBzZXJ2aWNlKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldExhbmd1YWdlKGxhbmd1YWdlKTtcbiAgICB9XG4gIH0sIFtsYW5ndWFnZV0pO1xuXG4gIC8vIExvYWQgbWVzc2FnZXMgZm9yIGN1cnJlbnQgcGFpciB3aGVuIGF2YWlsYWJsZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGJ1aWxkTWVzc2FnZXNLZXkoYXBpS2V5LCBjb252ZXJzYXRpb25JZCk7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICBzZXRNZXNzYWdlcyhzdG9yZWQgPyBKU09OLnBhcnNlKHN0b3JlZCkgOiBbXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICB9XG4gIH0sIFthcGlLZXksIGNvbnZlcnNhdGlvbklkLCBidWlsZE1lc3NhZ2VzS2V5XSk7XG5cbiAgLy8gUGVyc2lzdCBtZXNzYWdlcyBmb3IgY3VycmVudCBwYWlyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYnVpbGRNZXNzYWdlc0tleShhcGlLZXksIGNvbnZlcnNhdGlvbklkKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfSwgW21lc3NhZ2VzLCBhcGlLZXksIGNvbnZlcnNhdGlvbklkLCBidWlsZE1lc3NhZ2VzS2V5XSk7XG5cbiAgLy8gUmVzZXQgY29udmVyc2F0aW9uXG4gIGNvbnN0IHJlc2V0Q29udmVyc2F0aW9uID0gdXNlQ2FsbGJhY2soYXN5bmMgKHJlQ2FwdGNoYVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAoIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0aW5nJyk7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoW10pO1xuICAgIHNldFdlbGNvbWVUaXRsZShudWxsKTtcbiAgICBzZXRXZWxjb21lSW1hZ2VVcmwobnVsbCk7XG4gICAgc2V0V2VsY29tZU1lc3NhZ2UobnVsbCk7XG4gICAgc2V0VGhpbmtpbmdQaHJhc2VzKFtdKTtcbiAgICBzZXRUaGlua2luZ0RlbGF5TXMoMTAwMCk7XG4gICAgY29uc3Qga2V5ID0gYnVpbGRNZXNzYWdlc0tleShhcGlLZXksIGNvbnZlcnNhdGlvbklkKTtcbiAgICBpZiAoa2V5KSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgIH1cbiAgICBzZXRJc0ZpbmFsaXplZChmYWxzZSk7XG4gICAgc2V0SXNUYWtlbk92ZXIoZmFsc2UpO1xuICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCB0aGUgY29udmVyc2F0aW9uIGluIHRoZSBjaGF0IHNlcnZpY2VcbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQucmVzZXRDb252ZXJzYXRpb24oKTtcbiAgICAgIFxuICAgICAgLy8gU3RhcnQgYSBuZXcgY29udmVyc2F0aW9uXG4gICAgICBjb25zdCBjb252SWQgPSBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LnN0YXJ0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuKTtcbiAgICAgIHNldENvbnZlcnNhdGlvbklkKGNvbnZJZCk7XG4gICAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Nvbm5lY3RlZCcpO1xuXG4gICAgICAvLyBHZXQgcG9zc2libGUgcXVlcmllcyBmcm9tIEFQSSByZXNwb25zZVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFBvc3NpYmxlUXVlcmllcygpO1xuICAgICAgICBpZiAocXVlcmllcyAmJiBxdWVyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMocXVlcmllcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHdlbGNvbWUgYW5kIHRoaW5raW5nIGRhdGFcbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhKSB7XG4gICAgICAgIGNvbnN0IHdlbGNvbWUgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhKCk7XG4gICAgICAgIHNldFdlbGNvbWVUaXRsZSh3ZWxjb21lLnRpdGxlIHx8IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lSW1hZ2VVcmwod2VsY29tZS5pbWFnZVVybCB8fCBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZU1lc3NhZ2Uod2VsY29tZS5tZXNzYWdlIHx8IG51bGwpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0VGhpbmtpbmdDb25maWcpIHtcbiAgICAgICAgY29uc3QgdGhpbmtpbmcgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnKCk7XG4gICAgICAgIHNldFRoaW5raW5nUGhyYXNlcyh0aGlua2luZy5waHJhc2VzIHx8IFtdKTtcbiAgICAgICAgc2V0VGhpbmtpbmdEZWxheU1zKHRoaW5raW5nLmRlbGF5TXMgfHwgMTAwMCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChvbkVycm9yUmVmLmN1cnJlbnQgJiYgZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQoZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgY29uc3QgdXBsb2FkRmlsZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChmaWxlOiBGaWxlKTogUHJvbWlzZTxBdHRhY2htZW50IHwgbnVsbD4gPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCB8fCAhY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRDb252ZXJzYXRpb25JZCgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBmaWxlVXJsIH0gPSBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LnVwbG9hZEZpbGUoXG4gICAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0Q29udmVyc2F0aW9uSWQoKSBhcyBzdHJpbmcsXG4gICAgICAgIGZpbGVcbiAgICAgICk7XG4gICAgICBcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgPSB7XG4gICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgdHlwZTogZmlsZS50eXBlLFxuICAgICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICAgIHVybDogZmlsZVVybCxcbiAgICAgIH07XG5cbiAgICAgIHNldFByZWxvYWRlZEF0dGFjaG1lbnRzKHByZXYgPT4gWy4uLnByZXYsIGF0dGFjaG1lbnRdKTtcbiAgICAgIHJldHVybiBhdHRhY2htZW50O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAob25FcnJvclJlZi5jdXJyZW50KSB7XG4gICAgICAgIG9uRXJyb3JSZWYuY3VycmVudChlcnJvciBhcyBFcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcblxuICAvLyBTZW5kIG1lc3NhZ2VcbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhhc3luYyAodGV4dDogc3RyaW5nLCBmaWxlczogRmlsZVtdID0gW10sIGV4dHJhTWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCByZUNhcHRjaGFUb2tlbj86IHN0cmluZykgPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGF0IHNlcnZpY2Ugbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldElzTG9hZGluZyh0cnVlKTtcblxuICAgICAgY29uc3QgbmV3QXR0YWNobWVudHM6IEF0dGFjaG1lbnRbXSA9IFtdO1xuICAgICAgXG4gICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzID0gZmlsZXMubWFwKGYgPT4gcHJlbG9hZGVkQXR0YWNobWVudHMuZmluZChwYSA9PiBwYS5uYW1lID09PSBmLm5hbWUgJiYgcGEuc2l6ZSA9PT0gZi5zaXplKSkuZmlsdGVyKEJvb2xlYW4pIGFzIEF0dGFjaG1lbnRbXTtcbiAgICAgICAgbmV3QXR0YWNobWVudHMucHVzaCguLi51cGxvYWRlZEZpbGVzKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RhcnQgdHlwaW5nIGltbWVkaWF0ZWx5IHdoZW4gdXNlciBzZW5kcywgdW5sZXNzIGNvbnZlcnNhdGlvbiBpcyB0YWtlbiBvdmVyIGJ5IGEgaHVtYW5cbiAgICAgIGlmICghaXNUYWtlbk92ZXIpIHtcbiAgICAgICAgc2V0SXNBZ2VudFR5cGluZyh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2VuZE1lc3NhZ2UodGV4dCwgbmV3QXR0YWNobWVudHMsIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuKTtcblxuICAgICAgc2V0UHJlbG9hZGVkQXR0YWNobWVudHMoW10pO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgaWYgKG9uRXJyb3JSZWYuY3VycmVudCAmJiBlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG9uRXJyb3JSZWYuY3VycmVudChlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtwcmVsb2FkZWRBdHRhY2htZW50cywgaXNUYWtlbk92ZXJdKTtcblxuICBjb25zdCBzdGFydENvbnZlcnNhdGlvbiA9IHVzZUNhbGxiYWNrKGFzeW5jIChyZUNhcHRjaGFUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKCFjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Nvbm5lY3RpbmcnKTtcbiAgICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICAgIFxuICAgICAgLy8gUmVzZXQgc3RhdGUgZm9yIG5ldyBjb252ZXJzYXRpb25cbiAgICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICAgIHNldFBvc3NpYmxlUXVlcmllcyhbXSk7XG4gICAgICBjb25zdCBrZXkgPSBidWlsZE1lc3NhZ2VzS2V5KGFwaUtleSwgY29udmVyc2F0aW9uSWQpO1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgfVxuICAgICAgc2V0SXNGaW5hbGl6ZWQoZmFsc2UpO1xuICAgICAgc2V0SXNUYWtlbk92ZXIoZmFsc2UpO1xuICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnJlc2V0Q29udmVyc2F0aW9uKCk7XG5cbiAgICAgIGNvbnN0IGNvbnZJZCA9IGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc3RhcnRDb252ZXJzYXRpb24ocmVDYXB0Y2hhVG9rZW4pO1xuICAgICAgc2V0Q29udmVyc2F0aW9uSWQoY29udklkKTtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnY29ubmVjdGVkJyk7XG5cbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFBvc3NpYmxlUXVlcmllcykge1xuICAgICAgICBjb25zdCBxdWVyaWVzID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRQb3NzaWJsZVF1ZXJpZXMoKTtcbiAgICAgICAgaWYgKHF1ZXJpZXMgJiYgcXVlcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2V0UG9zc2libGVRdWVyaWVzKHF1ZXJpZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRXZWxjb21lRGF0YSkge1xuICAgICAgICBjb25zdCB3ZWxjb21lID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRXZWxjb21lRGF0YSgpO1xuICAgICAgICBzZXRXZWxjb21lVGl0bGUod2VsY29tZS50aXRsZSB8fCBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZUltYWdlVXJsKHdlbGNvbWUuaW1hZ2VVcmwgfHwgbnVsbCk7XG4gICAgICAgIHNldFdlbGNvbWVNZXNzYWdlKHdlbGNvbWUubWVzc2FnZSB8fCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IHRoaW5raW5nID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRUaGlua2luZ0NvbmZpZygpO1xuICAgICAgICBzZXRUaGlua2luZ1BocmFzZXModGhpbmtpbmcucGhyYXNlcyB8fCBbXSk7XG4gICAgICAgIHNldFRoaW5raW5nRGVsYXlNcyh0aGlua2luZy5kZWxheU1zIHx8IDEwMDApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Rpc2Nvbm5lY3RlZCcpO1xuICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICBpZiAob25FcnJvclJlZi5jdXJyZW50ICYmIGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgb25FcnJvclJlZi5jdXJyZW50KGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIC8vIEFkZCBmZWVkYmFjayB0byBhbiBhZ2VudCBtZXNzYWdlXG4gIGNvbnN0IGFkZEZlZWRiYWNrID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKG1lc3NhZ2VJZDogc3RyaW5nLCB2YWx1ZTogJ2dvb2QnIHwgJ2JhZCcsIGZlZWRiYWNrTWVzc2FnZT86IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBzZW5kIGZlZWRiYWNrOiBDaGF0U2VydmljZSBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFtZXNzYWdlSWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHNlbmQgZmVlZGJhY2s6IG1lc3NhZ2VJZCBpcyByZXF1aXJlZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuYWRkRmVlZGJhY2sobWVzc2FnZUlkLCB2YWx1ZSwgZmVlZGJhY2tNZXNzYWdlKTtcblxuICAgICAgICBjb25zdCBuZXdGZWVkYmFjazogTWVzc2FnZUZlZWRiYWNrID0ge1xuICAgICAgICAgIGZlZWRiYWNrOiB2YWx1ZSxcbiAgICAgICAgICBmZWVkYmFja19tZXNzYWdlOiBmZWVkYmFja01lc3NhZ2UsXG4gICAgICAgICAgZmVlZGJhY2tfdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgc2V0TWVzc2FnZXMocHJldiA9PlxuICAgICAgICAgIHByZXYubWFwKG0gPT4ge1xuICAgICAgICAgICAgLy8gTWF0Y2ggYnkgbWVzc2FnZV9pZCBvciBpZCBmaWVsZFxuICAgICAgICAgICAgY29uc3QgbXNnSWQgPSBtLm1lc3NhZ2VfaWQgfHwgKG0gYXMgYW55KS5pZDtcbiAgICAgICAgICAgIHJldHVybiBtc2dJZCA9PT0gbWVzc2FnZUlkXG4gICAgICAgICAgICAgID8geyAuLi5tLCBmZWVkYmFjazogWy4uLihtLmZlZWRiYWNrIHx8IFtdKSwgbmV3RmVlZGJhY2tdIH1cbiAgICAgICAgICAgICAgOiBtO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAob25FcnJvclJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgb25FcnJvclJlZi5jdXJyZW50KGVycm9yIGFzIEVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICB1cGxvYWRGaWxlLFxuICAgIHJlc2V0Q29udmVyc2F0aW9uLFxuICAgIHN0YXJ0Q29udmVyc2F0aW9uLFxuICAgIGNvbm5lY3Rpb25TdGF0ZSxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgaXNUYWtlbk92ZXIsXG4gICAgaXNGaW5hbGl6ZWQsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICBhZGRGZWVkYmFjayxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHdlbGNvbWVNZXNzYWdlLFxuICAgIHRoaW5raW5nUGhyYXNlcyxcbiAgICB0aGlua2luZ0RlbGF5TXMsXG4gIH07XG59O1xuIl19
|
|
553
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlQ2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBZ0J0RCxNQUFNLENBQUMsSUFBTSxPQUFPLEdBQUcsVUFBQyxFQUE0RztRQUExRyxPQUFPLGFBQUEsRUFBRSxNQUFNLFlBQUEsRUFBRSxNQUFNLFlBQUEsRUFBRSxRQUFRLGNBQUEsRUFBRSxhQUFZLEVBQVosS0FBSyxtQkFBRyxJQUFJLEtBQUEsRUFBRSxRQUFRLGNBQUEsRUFBRSxPQUFPLGFBQUEsRUFBRSxVQUFVLGdCQUFBLEVBQUUsVUFBVSxnQkFBQTtJQUM1RyxJQUFBLEtBQTBCLFFBQVEsQ0FBZ0IsRUFBRSxDQUFDLEVBQXBELFFBQVEsUUFBQSxFQUFFLFdBQVcsUUFBK0IsQ0FBQztJQUN0RCxJQUFBLEtBQTRCLFFBQVEsQ0FBVSxLQUFLLENBQUMsRUFBbkQsU0FBUyxRQUFBLEVBQUUsWUFBWSxRQUE0QixDQUFDO0lBQ3JELElBQUEsS0FBa0QsUUFBUSxDQUFlLEVBQUUsQ0FBQyxFQUEzRSxvQkFBb0IsUUFBQSxFQUFFLHVCQUF1QixRQUE4QixDQUFDO0lBQzdFLElBQUEsS0FBd0MsUUFBUSxDQUE4QyxjQUFjLENBQUMsRUFBNUcsZUFBZSxRQUFBLEVBQUUsa0JBQWtCLFFBQXlFLENBQUM7SUFDOUcsSUFBQSxLQUFvQyxRQUFRLENBQVUsS0FBSyxDQUFDLEVBQTNELGFBQWEsUUFBQSxFQUFFLGdCQUFnQixRQUE0QixDQUFDO0lBQ25FLElBQU0sY0FBYyxHQUFHLE1BQU0s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QUFBO1FBQ1gsYUFBYSxlQUFBO1FBQ2IsV0FBVyxhQUFBO1FBQ1gsWUFBWSxjQUFBO1FBQ1osZUFBZSxpQkFBQTtRQUNmLGNBQWMsZ0JBQUE7UUFDZCxlQUFlLGlCQUFBO1FBQ2YsZUFBZSxpQkFBQTtLQUNoQixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY2hhdFNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIEF0dGFjaG1lbnQsIE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VDaGF0UHJvcHMge1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGFwaUtleTogc3RyaW5nO1xuICB0ZW5hbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgLy8gIElmIGZhbHNlLCB0aGUgY2hhdCB3aWxsIHJ1biBpbiBIVFRQLW9ubHkgbW9kZSAobm8gV2ViU29ja2V0IGNvbm5lY3Rpb24pLlxuICB1c2VXcz86IGJvb2xlYW47XG4gIGxhbmd1YWdlPzogc3RyaW5nO1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgb25UYWtlb3Zlcj86ICgpID0+IHZvaWQ7XG4gIG9uRmluYWxpemU/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdCA9ICh7IGJhc2VVcmwsIGFwaUtleSwgdGVuYW50LCBtZXRhZGF0YSwgdXNlV3MgPSB0cnVlLCBsYW5ndWFnZSwgb25FcnJvciwgb25UYWtlb3Zlciwgb25GaW5hbGl6ZSB9OiBVc2VDaGF0UHJvcHMpID0+IHtcbiAgY29uc3QgW21lc3NhZ2VzLCBzZXRNZXNzYWdlc10gPSB1c2VTdGF0ZTxDaGF0TWVzc2FnZVtdPihbXSk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtwcmVsb2FkZWRBdHRhY2htZW50cywgc2V0UHJlbG9hZGVkQXR0YWNobWVudHNdID0gdXNlU3RhdGU8QXR0YWNobWVudFtdPihbXSk7XG4gIGNvbnN0IFtjb25uZWN0aW9uU3RhdGUsIHNldENvbm5lY3Rpb25TdGF0ZV0gPSB1c2VTdGF0ZTwnY29ubmVjdGluZycgfCAnY29ubmVjdGVkJyB8ICdkaXNjb25uZWN0ZWQnPignZGlzY29ubmVjdGVkJyk7XG4gIGNvbnN0IFtpc0FnZW50VHlwaW5nLCBzZXRJc0FnZW50VHlwaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgY2hhdFNlcnZpY2VSZWYgPSB1c2VSZWY8Q2hhdFNlcnZpY2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2NvbnZlcnNhdGlvbklkLCBzZXRDb252ZXJzYXRpb25JZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3Bvc3NpYmxlUXVlcmllcywgc2V0UG9zc2libGVRdWVyaWVzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XG4gIGNvbnN0IFt3ZWxjb21lVGl0bGUsIHNldFdlbGNvbWVUaXRsZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3dlbGNvbWVJbWFnZVVybCwgc2V0V2VsY29tZUltYWdlVXJsXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbd2VsY29tZU1lc3NhZ2UsIHNldFdlbGNvbWVNZXNzYWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbdGhpbmtpbmdQaHJhc2VzLCBzZXRUaGlua2luZ1BocmFzZXNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW3RoaW5raW5nRGVsYXlNcywgc2V0VGhpbmtpbmdEZWxheU1zXSA9IHVzZVN0YXRlPG51bWJlcj4oMTAwMCk7XG4gIGNvbnN0IFtpc1Rha2VuT3Zlciwgc2V0SXNUYWtlbk92ZXJdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBbaXNGaW5hbGl6ZWQsIHNldElzRmluYWxpemVkXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBTY29wZWQgbWVzc2FnZXMga2V5IGZvciBhcGlLZXksIGNvbnZlcnNhdGlvSWRcbiAgY29uc3QgYnVpbGRNZXNzYWdlc0tleSA9IHVzZUNhbGxiYWNrKChhcGlLZXlWYWw6IHN0cmluZywgY29udklkOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgaWYgKCFjb252SWQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBgZ2VuYXNzaXN0X2NvbnZlcnNhdGlvbl9tZXNzYWdlczoke2FwaUtleVZhbH06JHtjb252SWR9YDtcbiAgfSwgW10pO1xuXG4gIC8vIERlZXAgY29tcGFyZSBtZXRhZGF0YSB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLWluaXRpYWxpemF0aW9uc1xuICAvLyBPbmx5IHJlLWluaXRpYWxpemUgaWYgbWV0YWRhdGEgYWN0dWFsbHkgY2hhbmdlcyAoYnkgdmFsdWUsIG5vdCByZWZlcmVuY2UpXG4gIGNvbnN0IG1ldGFkYXRhU3RyaW5nID0gdXNlTWVtbygoKSA9PiBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSB8fCB7fSksIFttZXRhZGF0YV0pO1xuICBjb25zdCBtZXRhZGF0YVJlZiA9IHVzZVJlZjxzdHJpbmc+KG1ldGFkYXRhU3RyaW5nKTtcbiAgY29uc3QgcHJldkJhc2VVcmxSZWYgPSB1c2VSZWY8c3RyaW5nPihiYXNlVXJsKTtcbiAgY29uc3QgcHJldkFwaUtleVJlZiA9IHVzZVJlZjxzdHJpbmc+KGFwaUtleSk7XG4gIGNvbnN0IHByZXZUZW5hbnRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih0ZW5hbnQpO1xuICBjb25zdCBwcmV2VXNlV3NSZWYgPSB1c2VSZWY8Ym9vbGVhbj4odXNlV3MpO1xuXG4gIC8vIFN0b3JlIGNhbGxiYWNrcyBpbiByZWZzIHNvIHRoZXkgZG9uJ3QgdHJpZ2dlciByZS1pbml0aWFsaXphdGlvblxuICBjb25zdCBvbkVycm9yUmVmID0gdXNlUmVmKG9uRXJyb3IpO1xuICBjb25zdCBvblRha2VvdmVyUmVmID0gdXNlUmVmKG9uVGFrZW92ZXIpO1xuICBjb25zdCBvbkZpbmFsaXplUmVmID0gdXNlUmVmKG9uRmluYWxpemUpO1xuXG4gIC8vIFVwZGF0ZSBjYWxsYmFjayByZWZzIHdoZW4gdGhleSBjaGFuZ2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBvbkVycm9yUmVmLmN1cnJlbnQgPSBvbkVycm9yO1xuICB9LCBbb25FcnJvcl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb25UYWtlb3ZlclJlZi5jdXJyZW50ID0gb25UYWtlb3ZlcjtcbiAgfSwgW29uVGFrZW92ZXJdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIG9uRmluYWxpemVSZWYuY3VycmVudCA9IG9uRmluYWxpemU7XG4gIH0sIFtvbkZpbmFsaXplXSk7XG5cbiAgLy8gSW5pdGlhbGl6ZSBjaGF0IHNlcnZpY2UgLSBvbmx5IHdoZW4gYmFzZVVybCwgYXBpS2V5LCB0ZW5hbnQsIHVzZVdzLCBvciBtZXRhZGF0YSBhY3R1YWxseSBjaGFuZ2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZXRhZGF0YUNoYW5nZWQgPSBtZXRhZGF0YVJlZi5jdXJyZW50ICE9PSBtZXRhZGF0YVN0cmluZztcbiAgICBjb25zdCBiYXNlVXJsQ2hhbmdlZCA9IHByZXZCYXNlVXJsUmVmLmN1cnJlbnQgIT09IGJhc2VVcmw7XG4gICAgY29uc3QgYXBpS2V5Q2hhbmdlZCA9IHByZXZBcGlLZXlSZWYuY3VycmVudCAhPT0gYXBpS2V5O1xuICAgIGNvbnN0IHRlbmFudENoYW5nZWQgPSBwcmV2VGVuYW50UmVmLmN1cnJlbnQgIT09IHRlbmFudDtcbiAgICBjb25zdCB1c2VXc0NoYW5nZWQgPSBwcmV2VXNlV3NSZWYuY3VycmVudCAhPT0gdXNlV3M7XG4gICAgXG4gICAgLy8gT25seSByZS1pbml0aWFsaXplIGZvciBjb25uZWN0aW9uLXJlbGF0ZWQgY2hhbmdlcywgTk9UIGZvciBtZXRhZGF0YSBjaGFuZ2VzXG4gICAgY29uc3QgbmVlZHNSZWluaXQgPSAhY2hhdFNlcnZpY2VSZWYuY3VycmVudCB8fCBiYXNlVXJsQ2hhbmdlZCB8fCBhcGlLZXlDaGFuZ2VkIHx8IHRlbmFudENoYW5nZWQgfHwgdXNlV3NDaGFuZ2VkO1xuXG4gICAgaWYgKG5lZWRzUmVpbml0KSB7XG4gICAgICAvLyBVcGRhdGUgcmVmc1xuICAgICAgaWYgKGJhc2VVcmxDaGFuZ2VkKSBwcmV2QmFzZVVybFJlZi5jdXJyZW50ID0gYmFzZVVybDtcbiAgICAgIGlmIChhcGlLZXlDaGFuZ2VkKSBwcmV2QXBpS2V5UmVmLmN1cnJlbnQgPSBhcGlLZXk7XG4gICAgICBpZiAodGVuYW50Q2hhbmdlZCkgcHJldlRlbmFudFJlZi5jdXJyZW50ID0gdGVuYW50O1xuICAgICAgaWYgKHVzZVdzQ2hhbmdlZCkgcHJldlVzZVdzUmVmLmN1cnJlbnQgPSB1c2VXcztcbiAgICAgIGlmIChtZXRhZGF0YUNoYW5nZWQpIG1ldGFkYXRhUmVmLmN1cnJlbnQgPSBtZXRhZGF0YVN0cmluZztcblxuICAgICAgLy8gQ2xlYW4gdXAgZXhpc3Rpbmcgc2VydmljZSBpZiBpdCBleGlzdHNcbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZGlzY29ubmVjdCgpO1xuICAgICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldFdlbGNvbWVEYXRhSGFuZGxlcihudWxsKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudCA9IG5ldyBDaGF0U2VydmljZShiYXNlVXJsLCBhcGlLZXksIG1ldGFkYXRhLCB0ZW5hbnQsIGxhbmd1YWdlLCB1c2VXcyk7XG4gICAgICBcbiAgICAgIC8vIFNldCB1cCBoYW5kbGVyc1xuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRNZXNzYWdlSGFuZGxlcigobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZE1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICAgICAgY3JlYXRlX3RpbWU6ICghbWVzc2FnZS5jcmVhdGVfdGltZSB8fCBpc05hTihtZXNzYWdlLmNyZWF0ZV90aW1lKSlcbiAgICAgICAgICAgID8gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMClcbiAgICAgICAgICAgIDogbWVzc2FnZS5jcmVhdGVfdGltZSxcbiAgICAgICAgfTtcblxuICAgICAgICBzZXRNZXNzYWdlcyhwcmV2TWVzc2FnZXMgPT4gWy4uLnByZXZNZXNzYWdlcywgbm9ybWFsaXplZE1lc3NhZ2VdKTtcbiAgICAgICAgLy8gU3RvcCB0eXBpbmcgYW5pbWF0aW9uIHdoZW4gYWdlbnQgb3Igc3lzdGVtIG1lc3NhZ2UgYXJyaXZlc1xuICAgICAgICBpZiAobm9ybWFsaXplZE1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyB8fCBub3JtYWxpemVkTWVzc2FnZS5zcGVha2VyID09PSAnc3BlY2lhbCcpIHtcbiAgICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0VGFrZW92ZXJIYW5kbGVyKCgpID0+IHtcbiAgICAgICAgc2V0SXNUYWtlbk92ZXIodHJ1ZSk7XG4gICAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgICBpZiAob25UYWtlb3ZlclJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgb25UYWtlb3ZlclJlZi5jdXJyZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldEZpbmFsaXplZEhhbmRsZXIoKCkgPT4ge1xuICAgICAgICBzZXRJc0ZpbmFsaXplZCh0cnVlKTtcbiAgICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICAgIGlmIChvbkZpbmFsaXplUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkZpbmFsaXplUmVmLmN1cnJlbnQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0Q29ubmVjdGlvblN0YXRlSGFuZGxlcigoc3RhdGUpID0+IHtcbiAgICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKHN0YXRlKTtcbiAgICAgICAgaWYgKHN0YXRlICE9PSAnY29ubmVjdGVkJykge1xuICAgICAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRXZWxjb21lRGF0YUhhbmRsZXIoKGRhdGEpID0+IHtcbiAgICAgICAgc2V0V2VsY29tZVRpdGxlKGRhdGEudGl0bGUgPz8gbnVsbCk7XG4gICAgICAgIHNldFdlbGNvbWVJbWFnZVVybChkYXRhLmltYWdlVXJsID8/IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lTWVzc2FnZShkYXRhLm1lc3NhZ2UgPz8gbnVsbCk7XG4gICAgICAgIGlmIChkYXRhLnBvc3NpYmxlUXVlcmllcyAmJiBkYXRhLnBvc3NpYmxlUXVlcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2V0UG9zc2libGVRdWVyaWVzKGRhdGEucG9zc2libGVRdWVyaWVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIENoZWNrIGZvciBhIHNhdmVkIGNvbnZlcnNhdGlvbiBhbmQgY29ubmVjdCB0byBpdFxuICAgICAgY29uc3QgY29udklkID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRDb252ZXJzYXRpb25JZCgpO1xuICAgICAgaWYgKGNvbnZJZCkge1xuICAgICAgICBzZXRDb252ZXJzYXRpb25JZChjb252SWQpO1xuICAgICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5pc0NvbnZlcnNhdGlvbkZpbmFsaXplZCgpKSB7XG4gICAgICAgICAgc2V0SXNGaW5hbGl6ZWQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5jb25uZWN0V2ViU29ja2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFB1bGwgaW5pdGlhbCBzdGF0aWMgZGF0YVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzPy4oKSB8fCBbXTtcbiAgICAgICAgaWYgKHF1ZXJpZXMubGVuZ3RoKSBzZXRQb3NzaWJsZVF1ZXJpZXMocXVlcmllcyk7XG4gICAgICAgIGNvbnN0IHdlbGNvbWUgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhPy4oKTtcbiAgICAgICAgaWYgKHdlbGNvbWUpIHtcbiAgICAgICAgICBzZXRXZWxjb21lVGl0bGUod2VsY29tZS50aXRsZSB8fCBudWxsKTtcbiAgICAgICAgICBzZXRXZWxjb21lSW1hZ2VVcmwod2VsY29tZS5pbWFnZVVybCB8fCBudWxsKTtcbiAgICAgICAgICBzZXRXZWxjb21lTWVzc2FnZSh3ZWxjb21lLm1lc3NhZ2UgfHwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGhpbmtpbmcgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnPy4oKTtcbiAgICAgICAgaWYgKHRoaW5raW5nKSB7XG4gICAgICAgICAgc2V0VGhpbmtpbmdQaHJhc2VzKHRoaW5raW5nLnBocmFzZXMgfHwgW10pO1xuICAgICAgICAgIHNldFRoaW5raW5nRGVsYXlNcyh0aGlua2luZy5kZWxheU1zIHx8IDEwMDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBKdXN0IHVwZGF0ZSBtZXRhZGF0YSB3aXRob3V0IHJlLWluaXRpYWxpemluZ1xuICAgICAgaWYgKG1ldGFkYXRhQ2hhbmdlZCkge1xuICAgICAgICBtZXRhZGF0YVJlZi5jdXJyZW50ID0gbWV0YWRhdGFTdHJpbmc7XG4gICAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsd2F5cyB1cGRhdGUgaGFuZGxlcnMgd2hlbiBjYWxsYmFja3MgY2hhbmdlICh3aXRob3V0IHJlLWluaXRpYWxpemluZylcbiAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRUYWtlb3ZlckhhbmRsZXIoKCkgPT4ge1xuICAgICAgICBzZXRJc1Rha2VuT3Zlcih0cnVlKTtcbiAgICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICAgIGlmIChvblRha2VvdmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvblRha2VvdmVyUmVmLmN1cnJlbnQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0RmluYWxpemVkSGFuZGxlcigoKSA9PiB7XG4gICAgICAgIHNldElzRmluYWxpemVkKHRydWUpO1xuICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgICAgaWYgKG9uRmluYWxpemVSZWYuY3VycmVudCkge1xuICAgICAgICAgIG9uRmluYWxpemVSZWYuY3VycmVudCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDbGVhbnVwIG9ubHkgb24gdW5tb3VudFxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvLyBPbmx5IGNsZWFudXAgb24gdW5tb3VudCwgbm90IG9uIGV2ZXJ5IGRlcGVuZGVuY3kgY2hhbmdlXG4gICAgfTtcbiAgfSwgW2Jhc2VVcmwsIGFwaUtleSwgdGVuYW50LCBtZXRhZGF0YVN0cmluZywgbGFuZ3VhZ2UsIHVzZVdzXSk7XG5cbiAgLy8gVXBkYXRlIGxhbmd1YWdlIHdoZW4gaXQgY2hhbmdlcyAod2l0aG91dCByZS1pbml0aWFsaXppbmcgdGhlIHNlcnZpY2UpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpO1xuICAgIH1cbiAgfSwgW2xhbmd1YWdlXSk7XG5cbiAgLy8gTG9hZCBtZXNzYWdlcyBmb3IgY3VycmVudCBwYWlyIHdoZW4gYXZhaWxhYmxlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYnVpbGRNZXNzYWdlc0tleShhcGlLZXksIGNvbnZlcnNhdGlvbklkKTtcbiAgICBpZiAoIWtleSkge1xuICAgICAgc2V0TWVzc2FnZXMoW10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgIHNldE1lc3NhZ2VzKHN0b3JlZCA/IEpTT04ucGFyc2Uoc3RvcmVkKSA6IFtdKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0TWVzc2FnZXMoW10pO1xuICAgIH1cbiAgfSwgW2FwaUtleSwgY29udmVyc2F0aW9uSWQsIGJ1aWxkTWVzc2FnZXNLZXldKTtcblxuICAvLyBQZXJzaXN0IG1lc3NhZ2VzIGZvciBjdXJyZW50IHBhaXJcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBrZXkgPSBidWlsZE1lc3NhZ2VzS2V5KGFwaUtleSwgY29udmVyc2F0aW9uSWQpO1xuICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9LCBbbWVzc2FnZXMsIGFwaUtleSwgY29udmVyc2F0aW9uSWQsIGJ1aWxkTWVzc2FnZXNLZXldKTtcblxuICAvLyBSZXNldCBjb252ZXJzYXRpb25cbiAgY29uc3QgcmVzZXRDb252ZXJzYXRpb24gPSB1c2VDYWxsYmFjayhhc3luYyAocmVDYXB0Y2hhVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Nvbm5lY3RpbmcnKTtcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgc2V0TWVzc2FnZXMoW10pO1xuICAgIHNldFBvc3NpYmxlUXVlcmllcyhbXSk7XG4gICAgc2V0V2VsY29tZVRpdGxlKG51bGwpO1xuICAgIHNldFdlbGNvbWVJbWFnZVVybChudWxsKTtcbiAgICBzZXRXZWxjb21lTWVzc2FnZShudWxsKTtcbiAgICBzZXRUaGlua2luZ1BocmFzZXMoW10pO1xuICAgIHNldFRoaW5raW5nRGVsYXlNcygxMDAwKTtcbiAgICBjb25zdCBrZXkgPSBidWlsZE1lc3NhZ2VzS2V5KGFwaUtleSwgY29udmVyc2F0aW9uSWQpO1xuICAgIGlmIChrZXkpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgfVxuICAgIHNldElzRmluYWxpemVkKGZhbHNlKTtcbiAgICBzZXRJc1Rha2VuT3ZlcihmYWxzZSk7XG4gICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc2V0IHRoZSBjb252ZXJzYXRpb24gaW4gdGhlIGNoYXQgc2VydmljZVxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5yZXNldENvbnZlcnNhdGlvbigpO1xuICAgICAgXG4gICAgICAvLyBTdGFydCBhIG5ldyBjb252ZXJzYXRpb25cbiAgICAgIGNvbnN0IGNvbnZJZCA9IGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc3RhcnRDb252ZXJzYXRpb24ocmVDYXB0Y2hhVG9rZW4pO1xuICAgICAgc2V0Q29udmVyc2F0aW9uSWQoY29udklkKTtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnY29ubmVjdGVkJyk7XG5cbiAgICAgIC8vIEdldCBwb3NzaWJsZSBxdWVyaWVzIGZyb20gQVBJIHJlc3BvbnNlXG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRQb3NzaWJsZVF1ZXJpZXMpIHtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKCk7XG4gICAgICAgIGlmIChxdWVyaWVzICYmIHF1ZXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNldFBvc3NpYmxlUXVlcmllcyhxdWVyaWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gd2VsY29tZSBhbmQgdGhpbmtpbmcgZGF0YVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGEpIHtcbiAgICAgICAgY29uc3Qgd2VsY29tZSA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGEoKTtcbiAgICAgICAgc2V0V2VsY29tZVRpdGxlKHdlbGNvbWUudGl0bGUgfHwgbnVsbCk7XG4gICAgICAgIHNldFdlbGNvbWVJbWFnZVVybCh3ZWxjb21lLmltYWdlVXJsIHx8IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lTWVzc2FnZSh3ZWxjb21lLm1lc3NhZ2UgfHwgbnVsbCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRUaGlua2luZ0NvbmZpZykge1xuICAgICAgICBjb25zdCB0aGlua2luZyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0VGhpbmtpbmdDb25maWcoKTtcbiAgICAgICAgc2V0VGhpbmtpbmdQaHJhc2VzKHRoaW5raW5nLnBocmFzZXMgfHwgW10pO1xuICAgICAgICBzZXRUaGlua2luZ0RlbGF5TXModGhpbmtpbmcuZGVsYXlNcyB8fCAxMDAwKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgaWYgKG9uRXJyb3JSZWYuY3VycmVudCAmJiBlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG9uRXJyb3JSZWYuY3VycmVudChlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICBjb25zdCB1cGxvYWRGaWxlID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZpbGU6IEZpbGUpOiBQcm9taXNlPEF0dGFjaG1lbnQgfCBudWxsPiA9PiB7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50Py5nZXRDb252ZXJzYXRpb25JZCgpOyBcbiAgICBpZiAoIWNvbnZlcnNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdXBsb2FkUmVzdWx0ID0gYXdhaXQgY2hhdFNlcnZpY2VSZWYuY3VycmVudD8udXBsb2FkRmlsZShjb252ZXJzYXRpb25JZCwgZmlsZSk7XG5cbiAgICAgIC8vIGNvbnN0cnVjdCB0aGUgZmlsZSB1cmwgd2l0aCB0aGUgYmFzZSB1cmxcbiAgICAgIGNvbnN0IGZpbGVfdXJsID0gbmV3IFVSTCh1cGxvYWRSZXN1bHQhLmZpbGVfdXJsISwgYmFzZVVybCkuaHJlZjtcbiAgICAgIFxuICAgICAgY29uc3QgYXR0YWNobWVudDogQXR0YWNobWVudCA9IHtcbiAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICAgIHNpemU6IGZpbGUuc2l6ZSxcbiAgICAgICAgdXJsOiBmaWxlX3VybCxcbiAgICAgICAgZmlsZV9pZDogdXBsb2FkUmVzdWx0Py5maWxlX2lkLFxuICAgICAgfTtcblxuICAgICAgc2V0UHJlbG9hZGVkQXR0YWNobWVudHMocHJldiA9PiBbLi4ucHJldiwgYXR0YWNobWVudF0pO1xuICAgICAgcmV0dXJuIGF0dGFjaG1lbnQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChvbkVycm9yUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgb25FcnJvclJlZi5jdXJyZW50KGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIC8vIFNlbmQgbWVzc2FnZVxuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKGFzeW5jICh0ZXh0OiBzdHJpbmcsIGZpbGVzOiBGaWxlW10gPSBbXSwgZXh0cmFNZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sIHJlQ2FwdGNoYVRva2VuPzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYXQgc2VydmljZSBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuXG4gICAgICBjb25zdCBuZXdBdHRhY2htZW50czogQXR0YWNobWVudFtdID0gW107XG4gICAgICBcbiAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHVwbG9hZGVkRmlsZXMgPSBmaWxlcy5tYXAoZiA9PiBwcmVsb2FkZWRBdHRhY2htZW50cy5maW5kKHBhID0+IHBhLm5hbWUgPT09IGYubmFtZSAmJiBwYS5zaXplID09PSBmLnNpemUpKS5maWx0ZXIoQm9vbGVhbikgYXMgQXR0YWNobWVudFtdO1xuICAgICAgICBuZXdBdHRhY2htZW50cy5wdXNoKC4uLnVwbG9hZGVkRmlsZXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGFydCB0eXBpbmcgaW1tZWRpYXRlbHkgd2hlbiB1c2VyIHNlbmRzLCB1bmxlc3MgY29udmVyc2F0aW9uIGlzIHRha2VuIG92ZXIgYnkgYSBodW1hblxuICAgICAgaWYgKCFpc1Rha2VuT3Zlcikge1xuICAgICAgICBzZXRJc0FnZW50VHlwaW5nKHRydWUpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNlbmRNZXNzYWdlKHRleHQsIG5ld0F0dGFjaG1lbnRzLCBleHRyYU1ldGFkYXRhLCByZUNhcHRjaGFUb2tlbik7XG5cbiAgICAgIHNldFByZWxvYWRlZEF0dGFjaG1lbnRzKFtdKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChvbkVycm9yUmVmLmN1cnJlbnQgJiYgZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQoZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbcHJlbG9hZGVkQXR0YWNobWVudHMsIGlzVGFrZW5PdmVyXSk7XG5cbiAgY29uc3Qgc3RhcnRDb252ZXJzYXRpb24gPSB1c2VDYWxsYmFjayhhc3luYyAocmVDYXB0Y2hhVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0aW5nJyk7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IHN0YXRlIGZvciBuZXcgY29udmVyc2F0aW9uXG4gICAgICBzZXRNZXNzYWdlcyhbXSk7XG4gICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoW10pO1xuICAgICAgY29uc3Qga2V5ID0gYnVpbGRNZXNzYWdlc0tleShhcGlLZXksIGNvbnZlcnNhdGlvbklkKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgIH1cbiAgICAgIHNldElzRmluYWxpemVkKGZhbHNlKTtcbiAgICAgIHNldElzVGFrZW5PdmVyKGZhbHNlKTtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5yZXNldENvbnZlcnNhdGlvbigpO1xuXG4gICAgICBjb25zdCBjb252SWQgPSBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LnN0YXJ0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuKTtcbiAgICAgIHNldENvbnZlcnNhdGlvbklkKGNvbnZJZCk7XG4gICAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Nvbm5lY3RlZCcpO1xuXG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRQb3NzaWJsZVF1ZXJpZXMpIHtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKCk7XG4gICAgICAgIGlmIChxdWVyaWVzICYmIHF1ZXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNldFBvc3NpYmxlUXVlcmllcyhxdWVyaWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGEpIHtcbiAgICAgICAgY29uc3Qgd2VsY29tZSA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGEoKTtcbiAgICAgICAgc2V0V2VsY29tZVRpdGxlKHdlbGNvbWUudGl0bGUgfHwgbnVsbCk7XG4gICAgICAgIHNldFdlbGNvbWVJbWFnZVVybCh3ZWxjb21lLmltYWdlVXJsIHx8IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lTWVzc2FnZSh3ZWxjb21lLm1lc3NhZ2UgfHwgbnVsbCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRUaGlua2luZ0NvbmZpZykge1xuICAgICAgICBjb25zdCB0aGlua2luZyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0VGhpbmtpbmdDb25maWcoKTtcbiAgICAgICAgc2V0VGhpbmtpbmdQaHJhc2VzKHRoaW5raW5nLnBocmFzZXMgfHwgW10pO1xuICAgICAgICBzZXRUaGlua2luZ0RlbGF5TXModGhpbmtpbmcuZGVsYXlNcyB8fCAxMDAwKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgaWYgKG9uRXJyb3JSZWYuY3VycmVudCAmJiBlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG9uRXJyb3JSZWYuY3VycmVudChlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICAvLyBBZGQgZmVlZGJhY2sgdG8gYW4gYWdlbnQgbWVzc2FnZVxuICBjb25zdCBhZGRGZWVkYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChtZXNzYWdlSWQ6IHN0cmluZywgdmFsdWU6ICdnb29kJyB8ICdiYWQnLCBmZWVkYmFja01lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3Qgc2VuZCBmZWVkYmFjazogQ2hhdFNlcnZpY2Ugbm90IGluaXRpYWxpemVkJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghbWVzc2FnZUlkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBzZW5kIGZlZWRiYWNrOiBtZXNzYWdlSWQgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LmFkZEZlZWRiYWNrKG1lc3NhZ2VJZCwgdmFsdWUsIGZlZWRiYWNrTWVzc2FnZSk7XG5cbiAgICAgICAgY29uc3QgbmV3RmVlZGJhY2s6IE1lc3NhZ2VGZWVkYmFjayA9IHtcbiAgICAgICAgICBmZWVkYmFjazogdmFsdWUsXG4gICAgICAgICAgZmVlZGJhY2tfbWVzc2FnZTogZmVlZGJhY2tNZXNzYWdlLFxuICAgICAgICAgIGZlZWRiYWNrX3RpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHNldE1lc3NhZ2VzKHByZXYgPT5cbiAgICAgICAgICBwcmV2Lm1hcChtID0+IHtcbiAgICAgICAgICAgIC8vIE1hdGNoIGJ5IG1lc3NhZ2VfaWQgb3IgaWQgZmllbGRcbiAgICAgICAgICAgIGNvbnN0IG1zZ0lkID0gbS5tZXNzYWdlX2lkIHx8IChtIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICByZXR1cm4gbXNnSWQgPT09IG1lc3NhZ2VJZFxuICAgICAgICAgICAgICA/IHsgLi4ubSwgZmVlZGJhY2s6IFsuLi4obS5mZWVkYmFjayB8fCBbXSksIG5ld0ZlZWRiYWNrXSB9XG4gICAgICAgICAgICAgIDogbTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKG9uRXJyb3JSZWYuY3VycmVudCkge1xuICAgICAgICAgIG9uRXJyb3JSZWYuY3VycmVudChlcnJvciBhcyBFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlcyxcbiAgICBpc0xvYWRpbmcsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgdXBsb2FkRmlsZSxcbiAgICByZXNldENvbnZlcnNhdGlvbixcbiAgICBzdGFydENvbnZlcnNhdGlvbixcbiAgICBjb25uZWN0aW9uU3RhdGUsXG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgcG9zc2libGVRdWVyaWVzLFxuICAgIGlzVGFrZW5PdmVyLFxuICAgIGlzRmluYWxpemVkLFxuICAgIGlzQWdlbnRUeXBpbmcsXG4gICAgYWRkRmVlZGJhY2ssXG4gICAgd2VsY29tZVRpdGxlLFxuICAgIHdlbGNvbWVJbWFnZVVybCxcbiAgICB3ZWxjb21lTWVzc2FnZSxcbiAgICB0aGlua2luZ1BocmFzZXMsXG4gICAgdGhpbmtpbmdEZWxheU1zLFxuICB9O1xufTtcbiJdfQ==
|