matrix-react-sdk
Version:
SDK for matrix.org using React
103 lines (99 loc) • 17.2 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.AVATAR_SIZE = void 0;
var _classnames = _interopRequireDefault(require("classnames"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _react = _interopRequireWildcard(require("react"));
var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext"));
var _RoomContext = _interopRequireDefault(require("../../../contexts/RoomContext"));
var _useTimeout = require("../../../hooks/useTimeout");
var _BrowserWorkarounds = require("../../../utils/BrowserWorkarounds");
var _AccessibleButton = _interopRequireDefault(require("./AccessibleButton"));
var _Spinner = _interopRequireDefault(require("./Spinner"));
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
/*
Copyright 2024 New Vector Ltd.
Copyright 2020 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
const AVATAR_SIZE = exports.AVATAR_SIZE = "52px";
const MiniAvatarUploader = ({
hasAvatar,
hasAvatarLabel,
noAvatarLabel,
setAvatarUrl,
isUserAvatar,
children,
onClick
}) => {
const cli = (0, _react.useContext)(_MatrixClientContext.default);
const [busy, setBusy] = (0, _react.useState)(false);
const [hover, setHover] = (0, _react.useState)(false);
const [show, setShow] = (0, _react.useState)(false);
(0, _useTimeout.useTimeout)(() => {
setShow(true);
}, 3000); // show after 3 seconds
(0, _useTimeout.useTimeout)(() => {
setShow(false);
}, 13000); // hide after being shown for 10 seconds
const uploadRef = (0, _react.useRef)(null);
const label = hasAvatar || busy ? hasAvatarLabel : noAvatarLabel;
const {
room
} = (0, _react.useContext)(_RoomContext.default);
const canSetAvatar = isUserAvatar || room?.currentState?.maySendStateEvent(_matrix.EventType.RoomAvatar, cli.getSafeUserId());
if (!canSetAvatar) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
const visible = !!label && (hover || show);
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("input", {
type: "file",
ref: uploadRef,
className: "mx_MiniAvatarUploader_input",
onClick: ev => {
(0, _BrowserWorkarounds.chromeFileInputFix)(ev);
onClick?.(ev);
},
onChange: async ev => {
if (!ev.target.files?.length) return;
setBusy(true);
const file = ev.target.files[0];
const {
content_uri: uri
} = await cli.uploadContent(file);
await setAvatarUrl(uri);
setBusy(false);
},
accept: "image/*"
}), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: (0, _classnames.default)("mx_MiniAvatarUploader", {
mx_MiniAvatarUploader_busy: busy,
mx_MiniAvatarUploader_hasAvatar: hasAvatar
}),
disabled: busy,
onClick: () => {
uploadRef.current?.click();
},
onMouseOver: () => setHover(true),
onMouseLeave: () => setHover(false)
}, children, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MiniAvatarUploader_indicator"
}, busy ? /*#__PURE__*/_react.default.createElement(_Spinner.default, {
w: 20,
h: 20
}) : /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MiniAvatarUploader_cameraIcon"
})), /*#__PURE__*/_react.default.createElement("div", {
className: (0, _classnames.default)("mx_Tooltip", {
mx_Tooltip_visible: visible,
mx_Tooltip_invisible: !visible
})
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_Tooltip_chevron"
}), label)));
};
var _default = exports.default = MiniAvatarUploader;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX21hdHJpeCIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX01hdHJpeENsaWVudENvbnRleHQiLCJfUm9vbUNvbnRleHQiLCJfdXNlVGltZW91dCIsIl9Ccm93c2VyV29ya2Fyb3VuZHMiLCJfQWNjZXNzaWJsZUJ1dHRvbiIsIl9TcGlubmVyIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiQVZBVEFSX1NJWkUiLCJleHBvcnRzIiwiTWluaUF2YXRhclVwbG9hZGVyIiwiaGFzQXZhdGFyIiwiaGFzQXZhdGFyTGFiZWwiLCJub0F2YXRhckxhYmVsIiwic2V0QXZhdGFyVXJsIiwiaXNVc2VyQXZhdGFyIiwiY2hpbGRyZW4iLCJvbkNsaWNrIiwiY2xpIiwidXNlQ29udGV4dCIsIk1hdHJpeENsaWVudENvbnRleHQiLCJidXN5Iiwic2V0QnVzeSIsInVzZVN0YXRlIiwiaG92ZXIiLCJzZXRIb3ZlciIsInNob3ciLCJzZXRTaG93IiwidXNlVGltZW91dCIsInVwbG9hZFJlZiIsInVzZVJlZiIsImxhYmVsIiwicm9vbSIsIlJvb21Db250ZXh0IiwiY2FuU2V0QXZhdGFyIiwiY3VycmVudFN0YXRlIiwibWF5U2VuZFN0YXRlRXZlbnQiLCJFdmVudFR5cGUiLCJSb29tQXZhdGFyIiwiZ2V0U2FmZVVzZXJJZCIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsInZpc2libGUiLCJ0eXBlIiwicmVmIiwiY2xhc3NOYW1lIiwiZXYiLCJjaHJvbWVGaWxlSW5wdXRGaXgiLCJvbkNoYW5nZSIsInRhcmdldCIsImZpbGVzIiwibGVuZ3RoIiwiZmlsZSIsImNvbnRlbnRfdXJpIiwidXJpIiwidXBsb2FkQ29udGVudCIsImFjY2VwdCIsImNsYXNzTmFtZXMiLCJteF9NaW5pQXZhdGFyVXBsb2FkZXJfYnVzeSIsIm14X01pbmlBdmF0YXJVcGxvYWRlcl9oYXNBdmF0YXIiLCJkaXNhYmxlZCIsImN1cnJlbnQiLCJjbGljayIsIm9uTW91c2VPdmVyIiwib25Nb3VzZUxlYXZlIiwidyIsImgiLCJteF9Ub29sdGlwX3Zpc2libGUiLCJteF9Ub29sdGlwX2ludmlzaWJsZSIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvZWxlbWVudHMvTWluaUF2YXRhclVwbG9hZGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IHsgRXZlbnRUeXBlIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZVJlZiwgdXNlU3RhdGUsIE1vdXNlRXZlbnQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgTWF0cml4Q2xpZW50Q29udGV4dCBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IFJvb21Db250ZXh0IGZyb20gXCIuLi8uLi8uLi9jb250ZXh0cy9Sb29tQ29udGV4dFwiO1xuaW1wb3J0IHsgdXNlVGltZW91dCB9IGZyb20gXCIuLi8uLi8uLi9ob29rcy91c2VUaW1lb3V0XCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVkU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgY2hyb21lRmlsZUlucHV0Rml4IH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL0Jyb3dzZXJXb3JrYXJvdW5kc1wiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24gZnJvbSBcIi4vQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSBcIi4vU3Bpbm5lclwiO1xuXG5leHBvcnQgY29uc3QgQVZBVEFSX1NJWkUgPSBcIjUycHhcIjtcblxuaW50ZXJmYWNlIElQcm9wcyB7XG4gICAgaGFzQXZhdGFyOiBib29sZWFuO1xuICAgIG5vQXZhdGFyTGFiZWw/OiBUcmFuc2xhdGVkU3RyaW5nO1xuICAgIGhhc0F2YXRhckxhYmVsPzogVHJhbnNsYXRlZFN0cmluZztcbiAgICBzZXRBdmF0YXJVcmwodXJsOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+O1xuICAgIGlzVXNlckF2YXRhcj86IGJvb2xlYW47XG4gICAgb25DbGljaz8oZXY6IE1vdXNlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pOiB2b2lkO1xuICAgIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xufVxuXG5jb25zdCBNaW5pQXZhdGFyVXBsb2FkZXI6IFJlYWN0LkZDPElQcm9wcz4gPSAoe1xuICAgIGhhc0F2YXRhcixcbiAgICBoYXNBdmF0YXJMYWJlbCxcbiAgICBub0F2YXRhckxhYmVsLFxuICAgIHNldEF2YXRhclVybCxcbiAgICBpc1VzZXJBdmF0YXIsXG4gICAgY2hpbGRyZW4sXG4gICAgb25DbGljayxcbn0pID0+IHtcbiAgICBjb25zdCBjbGkgPSB1c2VDb250ZXh0KE1hdHJpeENsaWVudENvbnRleHQpO1xuICAgIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaG92ZXIsIHNldEhvdmVyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbc2hvdywgc2V0U2hvd10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICB1c2VUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2V0U2hvdyh0cnVlKTtcbiAgICB9LCAzMDAwKTsgLy8gc2hvdyBhZnRlciAzIHNlY29uZHNcbiAgICB1c2VUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2V0U2hvdyhmYWxzZSk7XG4gICAgfSwgMTMwMDApOyAvLyBoaWRlIGFmdGVyIGJlaW5nIHNob3duIGZvciAxMCBzZWNvbmRzXG5cbiAgICBjb25zdCB1cGxvYWRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgICBjb25zdCBsYWJlbCA9IGhhc0F2YXRhciB8fCBidXN5ID8gaGFzQXZhdGFyTGFiZWwgOiBub0F2YXRhckxhYmVsO1xuXG4gICAgY29uc3QgeyByb29tIH0gPSB1c2VDb250ZXh0KFJvb21Db250ZXh0KTtcbiAgICBjb25zdCBjYW5TZXRBdmF0YXIgPVxuICAgICAgICBpc1VzZXJBdmF0YXIgfHwgcm9vbT8uY3VycmVudFN0YXRlPy5tYXlTZW5kU3RhdGVFdmVudChFdmVudFR5cGUuUm9vbUF2YXRhciwgY2xpLmdldFNhZmVVc2VySWQoKSk7XG4gICAgaWYgKCFjYW5TZXRBdmF0YXIpIHJldHVybiA8UmVhY3QuRnJhZ21lbnQ+e2NoaWxkcmVufTwvUmVhY3QuRnJhZ21lbnQ+O1xuXG4gICAgY29uc3QgdmlzaWJsZSA9ICEhbGFiZWwgJiYgKGhvdmVyIHx8IHNob3cpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICByZWY9e3VwbG9hZFJlZn1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9NaW5pQXZhdGFyVXBsb2FkZXJfaW5wdXRcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhldikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaHJvbWVGaWxlSW5wdXRGaXgoZXYpO1xuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPy4oZXYpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2FzeW5jIChldik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWV2LnRhcmdldC5maWxlcz8ubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBldi50YXJnZXQuZmlsZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY29udGVudF91cmk6IHVyaSB9ID0gYXdhaXQgY2xpLnVwbG9hZENvbnRlbnQoZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNldEF2YXRhclVybCh1cmkpO1xuICAgICAgICAgICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJteF9NaW5pQXZhdGFyVXBsb2FkZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICBteF9NaW5pQXZhdGFyVXBsb2FkZXJfYnVzeTogYnVzeSxcbiAgICAgICAgICAgICAgICAgICAgbXhfTWluaUF2YXRhclVwbG9hZGVyX2hhc0F2YXRhcjogaGFzQXZhdGFyLFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtidXN5fVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkUmVmLmN1cnJlbnQ/LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlT3Zlcj17KCkgPT4gc2V0SG92ZXIodHJ1ZSl9XG4gICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRIb3ZlcihmYWxzZSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9NaW5pQXZhdGFyVXBsb2FkZXJfaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgIHtidXN5ID8gPFNwaW5uZXIgdz17MjB9IGg9ezIwfSAvPiA6IDxkaXYgY2xhc3NOYW1lPVwibXhfTWluaUF2YXRhclVwbG9hZGVyX2NhbWVyYUljb25cIiAvPn1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFwibXhfVG9vbHRpcFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBteF9Ub29sdGlwX3Zpc2libGU6IHZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBteF9Ub29sdGlwX2ludmlzaWJsZTogIXZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9Ub29sdGlwX2NoZXZyb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1pbmlBdmF0YXJVcGxvYWRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLElBQUFBLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUgsT0FBQTtBQUVBLElBQUFJLG9CQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxXQUFBLEdBQUFOLE9BQUE7QUFFQSxJQUFBTyxtQkFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsaUJBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLFFBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUFnQyxTQUFBVSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBUix3QkFBQVEsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFdBQUFLLE9BQUEsRUFBQUwsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLENBQUFILE9BQUEsR0FBQUwsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUFsQmhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQWNPLE1BQU1XLFdBQVcsR0FBQUMsT0FBQSxDQUFBRCxXQUFBLEdBQUcsTUFBTTtBQVlqQyxNQUFNRSxrQkFBb0MsR0FBR0EsQ0FBQztFQUMxQ0MsU0FBUztFQUNUQyxjQUFjO0VBQ2RDLGFBQWE7RUFDYkMsWUFBWTtFQUNaQyxZQUFZO0VBQ1pDLFFBQVE7RUFDUkM7QUFDSixDQUFDLEtBQUs7RUFDRixNQUFNQyxHQUFHLEdBQUcsSUFBQUMsaUJBQVUsRUFBQ0MsNEJBQW1CLENBQUM7RUFDM0MsTUFBTSxDQUFDQyxJQUFJLEVBQUVDLE9BQU8sQ0FBQyxHQUFHLElBQUFDLGVBQVEsRUFBQyxLQUFLLENBQUM7RUFDdkMsTUFBTSxDQUFDQyxLQUFLLEVBQUVDLFFBQVEsQ0FBQyxHQUFHLElBQUFGLGVBQVEsRUFBQyxLQUFLLENBQUM7RUFDekMsTUFBTSxDQUFDRyxJQUFJLEVBQUVDLE9BQU8sQ0FBQyxHQUFHLElBQUFKLGVBQVEsRUFBQyxLQUFLLENBQUM7RUFFdkMsSUFBQUssc0JBQVUsRUFBQyxNQUFNO0lBQ2JELE9BQU8sQ0FBQyxJQUFJLENBQUM7RUFDakIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDVixJQUFBQyxzQkFBVSxFQUFDLE1BQU07SUFDYkQsT0FBTyxDQUFDLEtBQUssQ0FBQztFQUNsQixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQzs7RUFFWCxNQUFNRSxTQUFTLEdBQUcsSUFBQUMsYUFBTSxFQUFtQixJQUFJLENBQUM7RUFFaEQsTUFBTUMsS0FBSyxHQUFHcEIsU0FBUyxJQUFJVSxJQUFJLEdBQUdULGNBQWMsR0FBR0MsYUFBYTtFQUVoRSxNQUFNO0lBQUVtQjtFQUFLLENBQUMsR0FBRyxJQUFBYixpQkFBVSxFQUFDYyxvQkFBVyxDQUFDO0VBQ3hDLE1BQU1DLFlBQVksR0FDZG5CLFlBQVksSUFBSWlCLElBQUksRUFBRUcsWUFBWSxFQUFFQyxpQkFBaUIsQ0FBQ0MsaUJBQVMsQ0FBQ0MsVUFBVSxFQUFFcEIsR0FBRyxDQUFDcUIsYUFBYSxDQUFDLENBQUMsQ0FBQztFQUNwRyxJQUFJLENBQUNMLFlBQVksRUFBRSxvQkFBT3RELE1BQUEsQ0FBQWMsT0FBQSxDQUFBOEMsYUFBQSxDQUFDNUQsTUFBQSxDQUFBYyxPQUFLLENBQUMrQyxRQUFRLFFBQUV6QixRQUF5QixDQUFDO0VBRXJFLE1BQU0wQixPQUFPLEdBQUcsQ0FBQyxDQUFDWCxLQUFLLEtBQUtQLEtBQUssSUFBSUUsSUFBSSxDQUFDO0VBQzFDLG9CQUNJOUMsTUFBQSxDQUFBYyxPQUFBLENBQUE4QyxhQUFBLENBQUM1RCxNQUFBLENBQUFjLE9BQUssQ0FBQytDLFFBQVEscUJBQ1g3RCxNQUFBLENBQUFjLE9BQUEsQ0FBQThDLGFBQUE7SUFDSUcsSUFBSSxFQUFDLE1BQU07SUFDWEMsR0FBRyxFQUFFZixTQUFVO0lBQ2ZnQixTQUFTLEVBQUMsNkJBQTZCO0lBQ3ZDNUIsT0FBTyxFQUFHNkIsRUFBRSxJQUFLO01BQ2IsSUFBQUMsc0NBQWtCLEVBQUNELEVBQUUsQ0FBQztNQUN0QjdCLE9BQU8sR0FBRzZCLEVBQUUsQ0FBQztJQUNqQixDQUFFO0lBQ0ZFLFFBQVEsRUFBRSxNQUFPRixFQUFFLElBQW9CO01BQ25DLElBQUksQ0FBQ0EsRUFBRSxDQUFDRyxNQUFNLENBQUNDLEtBQUssRUFBRUMsTUFBTSxFQUFFO01BQzlCN0IsT0FBTyxDQUFDLElBQUksQ0FBQztNQUNiLE1BQU04QixJQUFJLEdBQUdOLEVBQUUsQ0FBQ0csTUFBTSxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQy9CLE1BQU07UUFBRUcsV0FBVyxFQUFFQztNQUFJLENBQUMsR0FBRyxNQUFNcEMsR0FBRyxDQUFDcUMsYUFBYSxDQUFDSCxJQUFJLENBQUM7TUFDMUQsTUFBTXRDLFlBQVksQ0FBQ3dDLEdBQUcsQ0FBQztNQUN2QmhDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDbEIsQ0FBRTtJQUNGa0MsTUFBTSxFQUFDO0VBQVMsQ0FDbkIsQ0FBQyxlQUVGNUUsTUFBQSxDQUFBYyxPQUFBLENBQUE4QyxhQUFBLENBQUN0RCxpQkFBQSxDQUFBUSxPQUFnQjtJQUNibUQsU0FBUyxFQUFFLElBQUFZLG1CQUFVLEVBQUMsdUJBQXVCLEVBQUU7TUFDM0NDLDBCQUEwQixFQUFFckMsSUFBSTtNQUNoQ3NDLCtCQUErQixFQUFFaEQ7SUFDckMsQ0FBQyxDQUFFO0lBQ0hpRCxRQUFRLEVBQUV2QyxJQUFLO0lBQ2ZKLE9BQU8sRUFBRUEsQ0FBQSxLQUFNO01BQ1hZLFNBQVMsQ0FBQ2dDLE9BQU8sRUFBRUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBRTtJQUNGQyxXQUFXLEVBQUVBLENBQUEsS0FBTXRDLFFBQVEsQ0FBQyxJQUFJLENBQUU7SUFDbEN1QyxZQUFZLEVBQUVBLENBQUEsS0FBTXZDLFFBQVEsQ0FBQyxLQUFLO0VBQUUsR0FFbkNULFFBQVEsZUFFVHBDLE1BQUEsQ0FBQWMsT0FBQSxDQUFBOEMsYUFBQTtJQUFLSyxTQUFTLEVBQUM7RUFBaUMsR0FDM0N4QixJQUFJLGdCQUFHekMsTUFBQSxDQUFBYyxPQUFBLENBQUE4QyxhQUFBLENBQUNyRCxRQUFBLENBQUFPLE9BQU87SUFBQ3VFLENBQUMsRUFBRSxFQUFHO0lBQUNDLENBQUMsRUFBRTtFQUFHLENBQUUsQ0FBQyxnQkFBR3RGLE1BQUEsQ0FBQWMsT0FBQSxDQUFBOEMsYUFBQTtJQUFLSyxTQUFTLEVBQUM7RUFBa0MsQ0FBRSxDQUN0RixDQUFDLGVBRU5qRSxNQUFBLENBQUFjLE9BQUEsQ0FBQThDLGFBQUE7SUFDSUssU0FBUyxFQUFFLElBQUFZLG1CQUFVLEVBQUMsWUFBWSxFQUFFO01BQ2hDVSxrQkFBa0IsRUFBRXpCLE9BQU87TUFDM0IwQixvQkFBb0IsRUFBRSxDQUFDMUI7SUFDM0IsQ0FBQztFQUFFLGdCQUVIOUQsTUFBQSxDQUFBYyxPQUFBLENBQUE4QyxhQUFBO0lBQUtLLFNBQVMsRUFBQztFQUFvQixDQUFFLENBQUMsRUFDckNkLEtBQ0EsQ0FDUyxDQUNOLENBQUM7QUFFekIsQ0FBQztBQUFDLElBQUFzQyxRQUFBLEdBQUE1RCxPQUFBLENBQUFmLE9BQUEsR0FFYWdCLGtCQUFrQiIsImlnbm9yZUxpc3QiOltdfQ==