matrix-react-sdk
Version:
SDK for matrix.org using React
131 lines (127 loc) • 19.6 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.LocationBodyFallbackContent = exports.LocationBodyContent = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _randomstring = require("matrix-js-sdk/src/randomstring");
var _compoundWeb = require("@vector-im/compound-web");
var _languageHandler = require("../../../languageHandler");
var _Modal = _interopRequireDefault(require("../../../Modal"));
var _location = require("../../../utils/location");
var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext"));
var _location2 = require("../location");
var _connection = require("../../../utils/connection");
/*
Copyright 2024 New Vector Ltd.
Copyright 2021 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.
*/
class MLocationBody extends _react.default.Component {
constructor(props, context) {
super(props, context);
// multiple instances of same map might be in document
// eg thread and main timeline, reply
(0, _defineProperty2.default)(this, "unmounted", false);
(0, _defineProperty2.default)(this, "mapId", void 0);
(0, _defineProperty2.default)(this, "reconnectedListener", void 0);
(0, _defineProperty2.default)(this, "onClick", () => {
_Modal.default.createDialog(_location2.LocationViewDialog, {
matrixClient: this.context,
mxEvent: this.props.mxEvent
}, "mx_LocationViewDialog_wrapper", false,
// isPriority
true // isStatic
);
});
(0, _defineProperty2.default)(this, "clearError", () => {
this.context.off(_matrix.ClientEvent.Sync, this.reconnectedListener);
this.setState({
error: undefined
});
});
(0, _defineProperty2.default)(this, "onError", error => {
if (this.unmounted) return;
this.setState({
error
});
// Unregister first in case we already had it registered
this.context.off(_matrix.ClientEvent.Sync, this.reconnectedListener);
this.context.on(_matrix.ClientEvent.Sync, this.reconnectedListener);
});
const idSuffix = `${props.mxEvent.getId()}_${(0, _randomstring.randomString)(8)}`;
this.mapId = `mx_MLocationBody_${idSuffix}`;
this.reconnectedListener = (0, _connection.createReconnectedListener)(this.clearError);
this.state = {};
}
componentWillUnmount() {
this.unmounted = true;
this.context.off(_matrix.ClientEvent.Sync, this.reconnectedListener);
}
render() {
return this.state.error ? /*#__PURE__*/_react.default.createElement(LocationBodyFallbackContent, {
error: this.state.error,
event: this.props.mxEvent
}) : /*#__PURE__*/_react.default.createElement(LocationBodyContent, {
mxEvent: this.props.mxEvent,
mapId: this.mapId,
onError: this.onError,
tooltip: (0, _languageHandler._t)("location_sharing|expand_map"),
onClick: this.onClick
});
}
}
exports.default = MLocationBody;
(0, _defineProperty2.default)(MLocationBody, "contextType", _MatrixClientContext.default);
const LocationBodyFallbackContent = ({
error,
event
}) => {
const errorType = error?.message;
const message = `${(0, _languageHandler._t)("location_sharing|failed_load_map")}: ${(0, _location.getLocationShareErrorMessage)(errorType)}`;
const locationFallback = (0, _location.isSelfLocation)(event.getContent()) ? (0, _languageHandler._t)("timeline|m.location|self_location") + event.getContent()?.body : (0, _languageHandler._t)("timeline|m.location|location") + event.getContent()?.body;
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_EventTile_body mx_MLocationBody"
}, /*#__PURE__*/_react.default.createElement("span", {
className: errorType !== _location.LocationShareError.MapStyleUrlNotConfigured ? "mx_EventTile_tileError" : ""
}, message), /*#__PURE__*/_react.default.createElement("br", null), locationFallback);
};
exports.LocationBodyFallbackContent = LocationBodyFallbackContent;
const LocationBodyContent = ({
mxEvent,
mapId,
tooltip,
onError,
onClick
}) => {
// only pass member to marker when should render avatar marker
const markerRoomMember = (0, _location.isSelfLocation)(mxEvent.getContent()) ? mxEvent.sender : undefined;
const geoUri = (0, _location.locationEventGeoUri)(mxEvent);
const mapElement = /*#__PURE__*/_react.default.createElement(_location2.Map, {
id: mapId,
centerGeoUri: geoUri,
onClick: onClick,
onError: onError,
className: "mx_MLocationBody_map"
}, ({
map
}) => /*#__PURE__*/_react.default.createElement(_location2.SmartMarker, {
map: map,
id: `${mapId}-marker`,
geoUri: geoUri,
roomMember: markerRoomMember ?? undefined
}));
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MLocationBody"
}, /*#__PURE__*/_react.default.createElement(_compoundWeb.Tooltip, {
label: tooltip
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MLocationBody_map"
}, mapElement)));
};
exports.LocationBodyContent = LocationBodyContent;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9tYXRyaXgiLCJfcmFuZG9tc3RyaW5nIiwiX2NvbXBvdW5kV2ViIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9Nb2RhbCIsIl9sb2NhdGlvbiIsIl9NYXRyaXhDbGllbnRDb250ZXh0IiwiX2xvY2F0aW9uMiIsIl9jb25uZWN0aW9uIiwiTUxvY2F0aW9uQm9keSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImNvbnRleHQiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsIk1vZGFsIiwiY3JlYXRlRGlhbG9nIiwiTG9jYXRpb25WaWV3RGlhbG9nIiwibWF0cml4Q2xpZW50IiwibXhFdmVudCIsIm9mZiIsIkNsaWVudEV2ZW50IiwiU3luYyIsInJlY29ubmVjdGVkTGlzdGVuZXIiLCJzZXRTdGF0ZSIsImVycm9yIiwidW5kZWZpbmVkIiwidW5tb3VudGVkIiwib24iLCJpZFN1ZmZpeCIsImdldElkIiwicmFuZG9tU3RyaW5nIiwibWFwSWQiLCJjcmVhdGVSZWNvbm5lY3RlZExpc3RlbmVyIiwiY2xlYXJFcnJvciIsInN0YXRlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiTG9jYXRpb25Cb2R5RmFsbGJhY2tDb250ZW50IiwiZXZlbnQiLCJMb2NhdGlvbkJvZHlDb250ZW50Iiwib25FcnJvciIsInRvb2x0aXAiLCJfdCIsIm9uQ2xpY2siLCJleHBvcnRzIiwiTWF0cml4Q2xpZW50Q29udGV4dCIsImVycm9yVHlwZSIsIm1lc3NhZ2UiLCJnZXRMb2NhdGlvblNoYXJlRXJyb3JNZXNzYWdlIiwibG9jYXRpb25GYWxsYmFjayIsImlzU2VsZkxvY2F0aW9uIiwiZ2V0Q29udGVudCIsImJvZHkiLCJjbGFzc05hbWUiLCJMb2NhdGlvblNoYXJlRXJyb3IiLCJNYXBTdHlsZVVybE5vdENvbmZpZ3VyZWQiLCJtYXJrZXJSb29tTWVtYmVyIiwic2VuZGVyIiwiZ2VvVXJpIiwibG9jYXRpb25FdmVudEdlb1VyaSIsIm1hcEVsZW1lbnQiLCJNYXAiLCJpZCIsImNlbnRlckdlb1VyaSIsIm1hcCIsIlNtYXJ0TWFya2VyIiwicm9vbU1lbWJlciIsIlRvb2x0aXAiLCJsYWJlbCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL21lc3NhZ2VzL01Mb2NhdGlvbkJvZHkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE1hdHJpeEV2ZW50LCBDbGllbnRFdmVudCwgQ2xpZW50RXZlbnRIYW5kbGVyTWFwIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgcmFuZG9tU3RyaW5nIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL3JhbmRvbXN0cmluZ1wiO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLXdlYlwiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBNb2RhbCBmcm9tIFwiLi4vLi4vLi4vTW9kYWxcIjtcbmltcG9ydCB7XG4gICAgbG9jYXRpb25FdmVudEdlb1VyaSxcbiAgICBnZXRMb2NhdGlvblNoYXJlRXJyb3JNZXNzYWdlLFxuICAgIExvY2F0aW9uU2hhcmVFcnJvcixcbiAgICBpc1NlbGZMb2NhdGlvbixcbn0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2xvY2F0aW9uXCI7XG5pbXBvcnQgTWF0cml4Q2xpZW50Q29udGV4dCBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IHsgU21hcnRNYXJrZXIsIE1hcCwgTG9jYXRpb25WaWV3RGlhbG9nIH0gZnJvbSBcIi4uL2xvY2F0aW9uXCI7XG5pbXBvcnQgeyBJQm9keVByb3BzIH0gZnJvbSBcIi4vSUJvZHlQcm9wc1wiO1xuaW1wb3J0IHsgY3JlYXRlUmVjb25uZWN0ZWRMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9jb25uZWN0aW9uXCI7XG5cbmludGVyZmFjZSBJU3RhdGUge1xuICAgIGVycm9yPzogRXJyb3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1Mb2NhdGlvbkJvZHkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SUJvZHlQcm9wcywgSVN0YXRlPiB7XG4gICAgcHVibGljIHN0YXRpYyBjb250ZXh0VHlwZSA9IE1hdHJpeENsaWVudENvbnRleHQ7XG4gICAgcHVibGljIGRlY2xhcmUgY29udGV4dDogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIE1hdHJpeENsaWVudENvbnRleHQ+O1xuXG4gICAgcHJpdmF0ZSB1bm1vdW50ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIG1hcElkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWNvbm5lY3RlZExpc3RlbmVyOiBDbGllbnRFdmVudEhhbmRsZXJNYXBbQ2xpZW50RXZlbnQuU3luY107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IElCb2R5UHJvcHMsIGNvbnRleHQ6IFJlYWN0LkNvbnRleHRUeXBlPHR5cGVvZiBNYXRyaXhDbGllbnRDb250ZXh0Pikge1xuICAgICAgICBzdXBlcihwcm9wcywgY29udGV4dCk7XG5cbiAgICAgICAgLy8gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHNhbWUgbWFwIG1pZ2h0IGJlIGluIGRvY3VtZW50XG4gICAgICAgIC8vIGVnIHRocmVhZCBhbmQgbWFpbiB0aW1lbGluZSwgcmVwbHlcbiAgICAgICAgY29uc3QgaWRTdWZmaXggPSBgJHtwcm9wcy5teEV2ZW50LmdldElkKCl9XyR7cmFuZG9tU3RyaW5nKDgpfWA7XG4gICAgICAgIHRoaXMubWFwSWQgPSBgbXhfTUxvY2F0aW9uQm9keV8ke2lkU3VmZml4fWA7XG5cbiAgICAgICAgdGhpcy5yZWNvbm5lY3RlZExpc3RlbmVyID0gY3JlYXRlUmVjb25uZWN0ZWRMaXN0ZW5lcih0aGlzLmNsZWFyRXJyb3IpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2xpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIE1vZGFsLmNyZWF0ZURpYWxvZyhcbiAgICAgICAgICAgIExvY2F0aW9uVmlld0RpYWxvZyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXRyaXhDbGllbnQ6IHRoaXMuY29udGV4dCxcbiAgICAgICAgICAgICAgICBteEV2ZW50OiB0aGlzLnByb3BzLm14RXZlbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJteF9Mb2NhdGlvblZpZXdEaWFsb2dfd3JhcHBlclwiLFxuICAgICAgICAgICAgZmFsc2UsIC8vIGlzUHJpb3JpdHlcbiAgICAgICAgICAgIHRydWUsIC8vIGlzU3RhdGljXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgY2xlYXJFcnJvciA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm9mZihDbGllbnRFdmVudC5TeW5jLCB0aGlzLnJlY29ubmVjdGVkTGlzdGVuZXIpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3I6IHVuZGVmaW5lZCB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkVycm9yID0gKGVycm9yOiBFcnJvcik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy51bm1vdW50ZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yIH0pO1xuICAgICAgICAvLyBVbnJlZ2lzdGVyIGZpcnN0IGluIGNhc2Ugd2UgYWxyZWFkeSBoYWQgaXQgcmVnaXN0ZXJlZFxuICAgICAgICB0aGlzLmNvbnRleHQub2ZmKENsaWVudEV2ZW50LlN5bmMsIHRoaXMucmVjb25uZWN0ZWRMaXN0ZW5lcik7XG4gICAgICAgIHRoaXMuY29udGV4dC5vbihDbGllbnRFdmVudC5TeW5jLCB0aGlzLnJlY29ubmVjdGVkTGlzdGVuZXIpO1xuICAgIH07XG5cbiAgICBwdWJsaWMgY29tcG9uZW50V2lsbFVubW91bnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm9mZihDbGllbnRFdmVudC5TeW5jLCB0aGlzLnJlY29ubmVjdGVkTGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXIoKTogUmVhY3QuUmVhY3RFbGVtZW50PEhUTUxEaXZFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmVycm9yID8gKFxuICAgICAgICAgICAgPExvY2F0aW9uQm9keUZhbGxiYWNrQ29udGVudCBlcnJvcj17dGhpcy5zdGF0ZS5lcnJvcn0gZXZlbnQ9e3RoaXMucHJvcHMubXhFdmVudH0gLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxMb2NhdGlvbkJvZHlDb250ZW50XG4gICAgICAgICAgICAgICAgbXhFdmVudD17dGhpcy5wcm9wcy5teEV2ZW50fVxuICAgICAgICAgICAgICAgIG1hcElkPXt0aGlzLm1hcElkfVxuICAgICAgICAgICAgICAgIG9uRXJyb3I9e3RoaXMub25FcnJvcn1cbiAgICAgICAgICAgICAgICB0b29sdGlwPXtfdChcImxvY2F0aW9uX3NoYXJpbmd8ZXhwYW5kX21hcFwiKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLm9uQ2xpY2t9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IExvY2F0aW9uQm9keUZhbGxiYWNrQ29udGVudDogUmVhY3QuRkM8eyBldmVudDogTWF0cml4RXZlbnQ7IGVycm9yOiBFcnJvciB9PiA9ICh7IGVycm9yLCBldmVudCB9KSA9PiB7XG4gICAgY29uc3QgZXJyb3JUeXBlID0gZXJyb3I/Lm1lc3NhZ2UgYXMgTG9jYXRpb25TaGFyZUVycm9yO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtfdChcImxvY2F0aW9uX3NoYXJpbmd8ZmFpbGVkX2xvYWRfbWFwXCIpfTogJHtnZXRMb2NhdGlvblNoYXJlRXJyb3JNZXNzYWdlKGVycm9yVHlwZSl9YDtcblxuICAgIGNvbnN0IGxvY2F0aW9uRmFsbGJhY2sgPSBpc1NlbGZMb2NhdGlvbihldmVudC5nZXRDb250ZW50KCkpXG4gICAgICAgID8gX3QoXCJ0aW1lbGluZXxtLmxvY2F0aW9ufHNlbGZfbG9jYXRpb25cIikgKyBldmVudC5nZXRDb250ZW50KCk/LmJvZHlcbiAgICAgICAgOiBfdChcInRpbWVsaW5lfG0ubG9jYXRpb258bG9jYXRpb25cIikgKyBldmVudC5nZXRDb250ZW50KCk/LmJvZHk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X0V2ZW50VGlsZV9ib2R5IG14X01Mb2NhdGlvbkJvZHlcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17ZXJyb3JUeXBlICE9PSBMb2NhdGlvblNoYXJlRXJyb3IuTWFwU3R5bGVVcmxOb3RDb25maWd1cmVkID8gXCJteF9FdmVudFRpbGVfdGlsZUVycm9yXCIgOiBcIlwifT5cbiAgICAgICAgICAgICAgICB7bWVzc2FnZX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAge2xvY2F0aW9uRmFsbGJhY2t9XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59O1xuXG5pbnRlcmZhY2UgTG9jYXRpb25Cb2R5Q29udGVudFByb3BzIHtcbiAgICBteEV2ZW50OiBNYXRyaXhFdmVudDtcbiAgICBtYXBJZDogc3RyaW5nO1xuICAgIHRvb2x0aXA6IHN0cmluZztcbiAgICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICAgIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufVxuZXhwb3J0IGNvbnN0IExvY2F0aW9uQm9keUNvbnRlbnQ6IFJlYWN0LkZDPExvY2F0aW9uQm9keUNvbnRlbnRQcm9wcz4gPSAoe1xuICAgIG14RXZlbnQsXG4gICAgbWFwSWQsXG4gICAgdG9vbHRpcCxcbiAgICBvbkVycm9yLFxuICAgIG9uQ2xpY2ssXG59KSA9PiB7XG4gICAgLy8gb25seSBwYXNzIG1lbWJlciB0byBtYXJrZXIgd2hlbiBzaG91bGQgcmVuZGVyIGF2YXRhciBtYXJrZXJcbiAgICBjb25zdCBtYXJrZXJSb29tTWVtYmVyID0gaXNTZWxmTG9jYXRpb24obXhFdmVudC5nZXRDb250ZW50KCkpID8gbXhFdmVudC5zZW5kZXIgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZ2VvVXJpID0gbG9jYXRpb25FdmVudEdlb1VyaShteEV2ZW50KTtcblxuICAgIGNvbnN0IG1hcEVsZW1lbnQgPSAoXG4gICAgICAgIDxNYXAgaWQ9e21hcElkfSBjZW50ZXJHZW9Vcmk9e2dlb1VyaX0gb25DbGljaz17b25DbGlja30gb25FcnJvcj17b25FcnJvcn0gY2xhc3NOYW1lPVwibXhfTUxvY2F0aW9uQm9keV9tYXBcIj5cbiAgICAgICAgICAgIHsoeyBtYXAgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxTbWFydE1hcmtlclxuICAgICAgICAgICAgICAgICAgICBtYXA9e21hcH1cbiAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake21hcElkfS1tYXJrZXJgfVxuICAgICAgICAgICAgICAgICAgICBnZW9Vcmk9e2dlb1VyaX1cbiAgICAgICAgICAgICAgICAgICAgcm9vbU1lbWJlcj17bWFya2VyUm9vbU1lbWJlciA/PyB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvTWFwPlxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X01Mb2NhdGlvbkJvZHlcIj5cbiAgICAgICAgICAgIDxUb29sdGlwIGxhYmVsPXt0b29sdGlwfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X01Mb2NhdGlvbkJvZHlfbWFwXCI+e21hcEVsZW1lbnR9PC9kaXY+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFlBQUEsR0FBQUgsT0FBQTtBQUVBLElBQUFJLGdCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxTQUFBLEdBQUFOLE9BQUE7QUFNQSxJQUFBTyxvQkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsVUFBQSxHQUFBUixPQUFBO0FBRUEsSUFBQVMsV0FBQSxHQUFBVCxPQUFBO0FBeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQXdCZSxNQUFNVSxhQUFhLFNBQVNDLGNBQUssQ0FBQ0MsU0FBUyxDQUFxQjtFQVFwRUMsV0FBV0EsQ0FBQ0MsS0FBaUIsRUFBRUMsT0FBc0QsRUFBRTtJQUMxRixLQUFLLENBQUNELEtBQUssRUFBRUMsT0FBTyxDQUFDOztJQUVyQjtJQUNBO0lBQUEsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQSxxQkFSZ0IsS0FBSztJQUFBLElBQUFELGdCQUFBLENBQUFDLE9BQUE7SUFBQSxJQUFBRCxnQkFBQSxDQUFBQyxPQUFBO0lBQUEsSUFBQUQsZ0JB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