matrix-react-sdk
Version:
SDK for matrix.org using React
101 lines (99 loc) • 16.4 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.shareLocation = exports.shareLiveLocation = exports.LocationShareType = void 0;
var _matrix = require("matrix-js-sdk/src/matrix");
var _logger = require("matrix-js-sdk/src/logger");
var _languageHandler = require("../../../languageHandler");
var _Modal = _interopRequireDefault(require("../../../Modal"));
var _QuestionDialog = _interopRequireDefault(require("../dialogs/QuestionDialog"));
var _SdkConfig = _interopRequireDefault(require("../../../SdkConfig"));
var _OwnBeaconStore = require("../../../stores/OwnBeaconStore");
var _localRoom = require("../../../utils/local-room");
/*
Copyright 2024 New Vector Ltd.
Copyright 2022 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.
*/
let LocationShareType = exports.LocationShareType = /*#__PURE__*/function (LocationShareType) {
LocationShareType["Own"] = "Own";
LocationShareType["Pin"] = "Pin";
LocationShareType["Live"] = "Live";
return LocationShareType;
}({});
// default duration to 5min for now
const DEFAULT_LIVE_DURATION = 300000;
const getPermissionsErrorParams = shareType => {
const errorMessage = shareType === LocationShareType.Live ? "Insufficient permissions to start sharing your live location" : "Insufficient permissions to send your location";
const modalParams = {
title: (0, _languageHandler._t)("location_sharing|error_no_perms_title"),
description: (0, _languageHandler._t)("location_sharing|error_no_perms_description"),
button: (0, _languageHandler._t)("action|ok"),
hasCancelButton: false,
onFinished: () => {} // NOOP
};
return {
modalParams,
errorMessage
};
};
const getDefaultErrorParams = (shareType, openMenu) => {
const errorMessage = shareType === LocationShareType.Live ? "We couldn't start sharing your live location" : "We couldn't send your location";
const modalParams = {
title: (0, _languageHandler._t)("location_sharing|error_send_title"),
description: (0, _languageHandler._t)("location_sharing|error_send_description", {
brand: _SdkConfig.default.get().brand
}),
button: (0, _languageHandler._t)("action|try_again"),
cancelButton: (0, _languageHandler._t)("action|cancel"),
onFinished: tryAgain => {
if (tryAgain) {
openMenu();
}
}
};
return {
modalParams,
errorMessage
};
};
const handleShareError = (error, openMenu, shareType) => {
const {
modalParams,
errorMessage
} = error.errcode === "M_FORBIDDEN" ? getPermissionsErrorParams(shareType) : getDefaultErrorParams(shareType, openMenu);
_logger.logger.error(errorMessage, error);
_Modal.default.createDialog(_QuestionDialog.default, modalParams);
};
const shareLiveLocation = (client, roomId, displayName, openMenu) => async ({
timeout
}) => {
const description = (0, _languageHandler._t)("location_sharing|live_description", {
displayName
});
try {
await _OwnBeaconStore.OwnBeaconStore.instance.createLiveBeacon(roomId, _matrix.ContentHelpers.makeBeaconInfoContent(timeout ?? DEFAULT_LIVE_DURATION, true /* isLive */, description, _matrix.LocationAssetType.Self));
} catch (error) {
handleShareError(error, openMenu, LocationShareType.Live);
}
};
exports.shareLiveLocation = shareLiveLocation;
const shareLocation = (client, roomId, shareType, relation, openMenu) => async ({
uri,
timestamp
}) => {
if (!uri) return;
try {
const threadId = relation?.rel_type === _matrix.THREAD_RELATION_TYPE.name && relation?.event_id || null;
const assetType = shareType === LocationShareType.Pin ? _matrix.LocationAssetType.Pin : _matrix.LocationAssetType.Self;
const content = _matrix.ContentHelpers.makeLocationContent(undefined, uri, timestamp, undefined, assetType);
await (0, _localRoom.doMaybeLocalRoomAction)(roomId, actualRoomId => client.sendMessage(actualRoomId, threadId, content), client);
} catch (error) {
handleShareError(error, openMenu, shareType);
}
};
exports.shareLocation = shareLocation;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl9sb2dnZXIiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX01vZGFsIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9RdWVzdGlvbkRpYWxvZyIsIl9TZGtDb25maWciLCJfT3duQmVhY29uU3RvcmUiLCJfbG9jYWxSb29tIiwiTG9jYXRpb25TaGFyZVR5cGUiLCJleHBvcnRzIiwiREVGQVVMVF9MSVZFX0RVUkFUSU9OIiwiZ2V0UGVybWlzc2lvbnNFcnJvclBhcmFtcyIsInNoYXJlVHlwZSIsImVycm9yTWVzc2FnZSIsIkxpdmUiLCJtb2RhbFBhcmFtcyIsInRpdGxlIiwiX3QiLCJkZXNjcmlwdGlvbiIsImJ1dHRvbiIsImhhc0NhbmNlbEJ1dHRvbiIsIm9uRmluaXNoZWQiLCJnZXREZWZhdWx0RXJyb3JQYXJhbXMiLCJvcGVuTWVudSIsImJyYW5kIiwiU2RrQ29uZmlnIiwiZ2V0IiwiY2FuY2VsQnV0dG9uIiwidHJ5QWdhaW4iLCJoYW5kbGVTaGFyZUVycm9yIiwiZXJyb3IiLCJlcnJjb2RlIiwibG9nZ2VyIiwiTW9kYWwiLCJjcmVhdGVEaWFsb2ciLCJRdWVzdGlvbkRpYWxvZyIsInNoYXJlTGl2ZUxvY2F0aW9uIiwiY2xpZW50Iiwicm9vbUlkIiwiZGlzcGxheU5hbWUiLCJ0aW1lb3V0IiwiT3duQmVhY29uU3RvcmUiLCJpbnN0YW5jZSIsImNyZWF0ZUxpdmVCZWFjb24iLCJDb250ZW50SGVscGVycyIsIm1ha2VCZWFjb25JbmZvQ29udGVudCIsIkxvY2F0aW9uQXNzZXRUeXBlIiwiU2VsZiIsInNoYXJlTG9jYXRpb24iLCJyZWxhdGlvbiIsInVyaSIsInRpbWVzdGFtcCIsInRocmVhZElkIiwicmVsX3R5cGUiLCJUSFJFQURfUkVMQVRJT05fVFlQRSIsIm5hbWUiLCJldmVudF9pZCIsImFzc2V0VHlwZSIsIlBpbiIsImNvbnRlbnQiLCJtYWtlTG9jYXRpb25Db250ZW50IiwidW5kZWZpbmVkIiwiZG9NYXliZUxvY2FsUm9vbUFjdGlvbiIsImFjdHVhbFJvb21JZCIsInNlbmRNZXNzYWdlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvbG9jYXRpb24vc2hhcmVMb2NhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMiBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQge1xuICAgIE1hdHJpeENsaWVudCxcbiAgICBJRXZlbnRSZWxhdGlvbixcbiAgICBNYXRyaXhFcnJvcixcbiAgICBUSFJFQURfUkVMQVRJT05fVFlQRSxcbiAgICBDb250ZW50SGVscGVycyxcbiAgICBMb2NhdGlvbkFzc2V0VHlwZSxcbn0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgUm9vbU1lc3NhZ2VFdmVudENvbnRlbnQgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvdHlwZXNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9sb2dnZXJcIjtcblxuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgTW9kYWwgZnJvbSBcIi4uLy4uLy4uL01vZGFsXCI7XG5pbXBvcnQgUXVlc3Rpb25EaWFsb2csIHsgSVF1ZXN0aW9uRGlhbG9nUHJvcHMgfSBmcm9tIFwiLi4vZGlhbG9ncy9RdWVzdGlvbkRpYWxvZ1wiO1xuaW1wb3J0IFNka0NvbmZpZyBmcm9tIFwiLi4vLi4vLi4vU2RrQ29uZmlnXCI7XG5pbXBvcnQgeyBPd25CZWFjb25TdG9yZSB9IGZyb20gXCIuLi8uLi8uLi9zdG9yZXMvT3duQmVhY29uU3RvcmVcIjtcbmltcG9ydCB7IGRvTWF5YmVMb2NhbFJvb21BY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbG9jYWwtcm9vbVwiO1xuXG5leHBvcnQgZW51bSBMb2NhdGlvblNoYXJlVHlwZSB7XG4gICAgT3duID0gXCJPd25cIixcbiAgICBQaW4gPSBcIlBpblwiLFxuICAgIExpdmUgPSBcIkxpdmVcIixcbn1cblxuZXhwb3J0IHR5cGUgTG9jYXRpb25TaGFyZVByb3BzID0ge1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgdXJpPzogc3RyaW5nO1xuICAgIHRpbWVzdGFtcD86IG51bWJlcjtcbn07XG5cbi8vIGRlZmF1bHQgZHVyYXRpb24gdG8gNW1pbiBmb3Igbm93XG5jb25zdCBERUZBVUxUX0xJVkVfRFVSQVRJT04gPSAzMDAwMDA7XG5cbmV4cG9ydCB0eXBlIFNoYXJlTG9jYXRpb25GbiA9IChwcm9wczogTG9jYXRpb25TaGFyZVByb3BzKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5jb25zdCBnZXRQZXJtaXNzaW9uc0Vycm9yUGFyYW1zID0gKFxuICAgIHNoYXJlVHlwZTogTG9jYXRpb25TaGFyZVR5cGUsXG4pOiB7XG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gICAgbW9kYWxQYXJhbXM6IElRdWVzdGlvbkRpYWxvZ1Byb3BzO1xufSA9PiB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgc2hhcmVUeXBlID09PSBMb2NhdGlvblNoYXJlVHlwZS5MaXZlXG4gICAgICAgICAgICA/IFwiSW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIHN0YXJ0IHNoYXJpbmcgeW91ciBsaXZlIGxvY2F0aW9uXCJcbiAgICAgICAgICAgIDogXCJJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gc2VuZCB5b3VyIGxvY2F0aW9uXCI7XG5cbiAgICBjb25zdCBtb2RhbFBhcmFtcyA9IHtcbiAgICAgICAgdGl0bGU6IF90KFwibG9jYXRpb25fc2hhcmluZ3xlcnJvcl9ub19wZXJtc190aXRsZVwiKSxcbiAgICAgICAgZGVzY3JpcHRpb246IF90KFwibG9jYXRpb25fc2hhcmluZ3xlcnJvcl9ub19wZXJtc19kZXNjcmlwdGlvblwiKSxcbiAgICAgICAgYnV0dG9uOiBfdChcImFjdGlvbnxva1wiKSxcbiAgICAgICAgaGFzQ2FuY2VsQnV0dG9uOiBmYWxzZSxcbiAgICAgICAgb25GaW5pc2hlZDogKCkgPT4ge30sIC8vIE5PT1BcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGFsUGFyYW1zLCBlcnJvck1lc3NhZ2UgfTtcbn07XG5cbmNvbnN0IGdldERlZmF1bHRFcnJvclBhcmFtcyA9IChcbiAgICBzaGFyZVR5cGU6IExvY2F0aW9uU2hhcmVUeXBlLFxuICAgIG9wZW5NZW51OiAoKSA9PiB2b2lkLFxuKToge1xuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICAgIG1vZGFsUGFyYW1zOiBJUXVlc3Rpb25EaWFsb2dQcm9wcztcbn0gPT4ge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgIHNoYXJlVHlwZSA9PT0gTG9jYXRpb25TaGFyZVR5cGUuTGl2ZVxuICAgICAgICAgICAgPyBcIldlIGNvdWxkbid0IHN0YXJ0IHNoYXJpbmcgeW91ciBsaXZlIGxvY2F0aW9uXCJcbiAgICAgICAgICAgIDogXCJXZSBjb3VsZG4ndCBzZW5kIHlvdXIgbG9jYXRpb25cIjtcbiAgICBjb25zdCBtb2RhbFBhcmFtcyA9IHtcbiAgICAgICAgdGl0bGU6IF90KFwibG9jYXRpb25fc2hhcmluZ3xlcnJvcl9zZW5kX3RpdGxlXCIpLFxuICAgICAgICBkZXNjcmlwdGlvbjogX3QoXCJsb2NhdGlvbl9zaGFyaW5nfGVycm9yX3NlbmRfZGVzY3JpcHRpb25cIiwge1xuICAgICAgICAgICAgYnJhbmQ6IFNka0NvbmZpZy5nZXQoKS5icmFuZCxcbiAgICAgICAgfSksXG4gICAgICAgIGJ1dHRvbjogX3QoXCJhY3Rpb258dHJ5X2FnYWluXCIpLFxuICAgICAgICBjYW5jZWxCdXR0b246IF90KFwiYWN0aW9ufGNhbmNlbFwiKSxcbiAgICAgICAgb25GaW5pc2hlZDogKHRyeUFnYWluOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBpZiAodHJ5QWdhaW4pIHtcbiAgICAgICAgICAgICAgICBvcGVuTWVudSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIHsgbW9kYWxQYXJhbXMsIGVycm9yTWVzc2FnZSB9O1xufTtcblxuY29uc3QgaGFuZGxlU2hhcmVFcnJvciA9IChlcnJvcjogdW5rbm93biwgb3Blbk1lbnU6ICgpID0+IHZvaWQsIHNoYXJlVHlwZTogTG9jYXRpb25TaGFyZVR5cGUpOiB2b2lkID0+IHtcbiAgICBjb25zdCB7IG1vZGFsUGFyYW1zLCBlcnJvck1lc3NhZ2UgfSA9XG4gICAgICAgIChlcnJvciBhcyBNYXRyaXhFcnJvcikuZXJyY29kZSA9PT0gXCJNX0ZPUkJJRERFTlwiXG4gICAgICAgICAgICA/IGdldFBlcm1pc3Npb25zRXJyb3JQYXJhbXMoc2hhcmVUeXBlKVxuICAgICAgICAgICAgOiBnZXREZWZhdWx0RXJyb3JQYXJhbXMoc2hhcmVUeXBlLCBvcGVuTWVudSk7XG5cbiAgICBsb2dnZXIuZXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvcik7XG5cbiAgICBNb2RhbC5jcmVhdGVEaWFsb2coUXVlc3Rpb25EaWFsb2csIG1vZGFsUGFyYW1zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaGFyZUxpdmVMb2NhdGlvbiA9XG4gICAgKGNsaWVudDogTWF0cml4Q2xpZW50LCByb29tSWQ6IHN0cmluZywgZGlzcGxheU5hbWU6IHN0cmluZywgb3Blbk1lbnU6ICgpID0+IHZvaWQpOiBTaGFyZUxvY2F0aW9uRm4gPT5cbiAgICBhc3luYyAoeyB0aW1lb3V0IH0pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBfdChcImxvY2F0aW9uX3NoYXJpbmd8bGl2ZV9kZXNjcmlwdGlvblwiLCB7IGRpc3BsYXlOYW1lIH0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgT3duQmVhY29uU3RvcmUuaW5zdGFuY2UuY3JlYXRlTGl2ZUJlYWNvbihcbiAgICAgICAgICAgICAgICByb29tSWQsXG4gICAgICAgICAgICAgICAgQ29udGVudEhlbHBlcnMubWFrZUJlYWNvbkluZm9Db250ZW50KFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID8/IERFRkFVTFRfTElWRV9EVVJBVElPTixcbiAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKiBpc0xpdmUgKi8sXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICBMb2NhdGlvbkFzc2V0VHlwZS5TZWxmLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaGFuZGxlU2hhcmVFcnJvcihlcnJvciwgb3Blbk1lbnUsIExvY2F0aW9uU2hhcmVUeXBlLkxpdmUpO1xuICAgICAgICB9XG4gICAgfTtcblxuZXhwb3J0IGNvbnN0IHNoYXJlTG9jYXRpb24gPVxuICAgIChcbiAgICAgICAgY2xpZW50OiBNYXRyaXhDbGllbnQsXG4gICAgICAgIHJvb21JZDogc3RyaW5nLFxuICAgICAgICBzaGFyZVR5cGU6IExvY2F0aW9uU2hhcmVUeXBlLFxuICAgICAgICByZWxhdGlvbjogSUV2ZW50UmVsYXRpb24gfCB1bmRlZmluZWQsXG4gICAgICAgIG9wZW5NZW51OiAoKSA9PiB2b2lkLFxuICAgICk6IFNoYXJlTG9jYXRpb25GbiA9PlxuICAgIGFzeW5jICh7IHVyaSwgdGltZXN0YW1wIH0pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgaWYgKCF1cmkpIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRocmVhZElkID0gKHJlbGF0aW9uPy5yZWxfdHlwZSA9PT0gVEhSRUFEX1JFTEFUSU9OX1RZUEUubmFtZSAmJiByZWxhdGlvbj8uZXZlbnRfaWQpIHx8IG51bGw7XG4gICAgICAgICAgICBjb25zdCBhc3NldFR5cGUgPSBzaGFyZVR5cGUgPT09IExvY2F0aW9uU2hhcmVUeXBlLlBpbiA/IExvY2F0aW9uQXNzZXRUeXBlLlBpbiA6IExvY2F0aW9uQXNzZXRUeXBlLlNlbGY7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gQ29udGVudEhlbHBlcnMubWFrZUxvY2F0aW9uQ29udGVudChcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdXJpLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgYXNzZXRUeXBlLFxuICAgICAgICAgICAgKSBhcyBSb29tTWVzc2FnZUV2ZW50Q29udGVudDtcbiAgICAgICAgICAgIGF3YWl0IGRvTWF5YmVMb2NhbFJvb21BY3Rpb24oXG4gICAgICAgICAgICAgICAgcm9vbUlkLFxuICAgICAgICAgICAgICAgIChhY3R1YWxSb29tSWQ6IHN0cmluZykgPT4gY2xpZW50LnNlbmRNZXNzYWdlKGFjdHVhbFJvb21JZCwgdGhyZWFkSWQsIGNvbnRlbnQpLFxuICAgICAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBoYW5kbGVTaGFyZUVycm9yKGVycm9yLCBvcGVuTWVudSwgc2hhcmVUeXBlKTtcbiAgICAgICAgfVxuICAgIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFRQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFTQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxnQkFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBRCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBRixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU8sZUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsVUFBQSxHQUFBUixPQUFBO0FBeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEsSUEwQllTLGlCQUFpQixHQUFBQyxPQUFBLENBQUFELGlCQUFBLDBCQUFqQkEsaUJBQWlCO0VBQWpCQSxpQkFBaUI7RUFBakJBLGlCQUFpQjtFQUFqQkEsaUJBQWlCO0VBQUEsT0FBakJBLGlCQUFpQjtBQUFBO0FBWTdCO0FBQ0EsTUFBTUUscUJBQXFCLEdBQUcsTUFBTTtBQUlwQyxNQUFNQyx5QkFBeUIsR0FDM0JDLFNBQTRCLElBSTNCO0VBQ0QsTUFBTUMsWUFBWSxHQUNkRCxTQUFTLEtBQUtKLGlCQUFpQixDQUFDTSxJQUFJLEdBQzlCLDhEQUE4RCxHQUM5RCxnREFBZ0Q7RUFFMUQsTUFBTUMsV0FBVyxHQUFHO0lBQ2hCQyxLQUFLLEVBQUUsSUFBQUMsbUJBQUUsRUFBQyx1Q0FBdUMsQ0FBQztJQUNsREMsV0FBVyxFQUFFLElBQUFELG1CQUFFLEVBQUMsNkNBQTZDLENBQUM7SUFDOURFLE1BQU0sRUFBRSxJQUFBRixtQkFBRSxFQUFDLFdBQVcsQ0FBQztJQUN2QkcsZUFBZSxFQUFFLEtBQUs7SUFDdEJDLFVBQVUsRUFBRUEsQ0FBQSxLQUFNLENBQUMsQ0FBQyxDQUFFO0VBQzFCLENBQUM7RUFDRCxPQUFPO0lBQUVOLFdBQVc7SUFBRUY7RUFBYSxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNUyxxQkFBcUIsR0FBR0EsQ0FDMUJWLFNBQTRCLEVBQzVCVyxRQUFvQixLQUluQjtFQUNELE1BQU1WLFlBQVksR0FDZEQsU0FBUyxLQUFLSixpQkFBaUIsQ0FBQ00sSUFBSSxHQUM5Qiw4Q0FBOEMsR0FDOUMsZ0NBQWdDO0VBQzFDLE1BQU1DLFdBQVcsR0FBRztJQUNoQkMsS0FBSyxFQUFFLElBQUFDLG1CQUFFLEVBQUMsbUNBQW1DLENBQUM7SUFDOUNDLFdBQVcsRUFBRSxJQUFBRCxtQkFBRSxFQUFDLHlDQUF5QyxFQUFFO01BQ3ZETyxLQUFLLEVBQUVDLGtCQUFTLENBQUNDLEdBQUcsQ0FBQyxDQUFDLENBQUNGO0lBQzNCLENBQUMsQ0FBQztJQUNGTCxNQUFNLEVBQUUsSUFBQUYsbUJBQUUsRUFBQyxrQkFBa0IsQ0FBQztJQUM5QlUsWUFBWSxFQUFFLElBQUFWLG1CQUFFLEVBQUMsZUFBZSxDQUFDO0lBQ2pDSSxVQUFVLEVBQUdPLFFBQWlCLElBQUs7TUFDL0IsSUFBSUEsUUFBUSxFQUFFO1FBQ1ZMLFFBQVEsQ0FBQyxDQUFDO01BQ2Q7SUFDSjtFQUNKLENBQUM7RUFDRCxPQUFPO0lBQUVSLFdBQVc7SUFBRUY7RUFBYSxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNZ0IsZ0JBQWdCLEdBQUdBLENBQUNDLEtBQWMsRUFBRVAsUUFBb0IsRUFBRVgsU0FBNEIsS0FBVztFQUNuRyxNQUFNO0lBQUVHLFdBQVc7SUFBRUY7RUFBYSxDQUFDLEdBQzlCaUIsS0FBSyxDQUFpQkMsT0FBTyxLQUFLLGFBQWEsR0FDMUNwQix5QkFBeUIsQ0FBQ0MsU0FBUyxDQUFDLEdBQ3BDVSxxQkFBcUIsQ0FBQ1YsU0FBUyxFQUFFVyxRQUFRLENBQUM7RUFFcERTLGNBQU0sQ0FBQ0YsS0FBSyxDQUFDakIsWUFBWSxFQUFFaUIsS0FBSyxDQUFDO0VBRWpDRyxjQUFLLENBQUNDLFlBQVksQ0FBQ0MsdUJBQWMsRUFBRXBCLFdBQVcsQ0FBQztBQUNuRCxDQUFDO0FBRU0sTUFBTXFCLGlCQUFpQixHQUMxQkEsQ0FBQ0MsTUFBb0IsRUFBRUMsTUFBYyxFQUFFQyxXQUFtQixFQUFFaEIsUUFBb0IsS0FDaEYsT0FBTztFQUFFaUI7QUFBUSxDQUFDLEtBQW9CO0VBQ2xDLE1BQU10QixXQUFXLEdBQUcsSUFBQUQsbUJBQUUsRUFBQyxtQ0FBbUMsRUFBRTtJQUFFc0I7RUFBWSxDQUFDLENBQUM7RUFDNUUsSUFBSTtJQUNBLE1BQU1FLDhCQUFjLENBQUNDLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQzFDTCxNQUFNLEVBQ05NLHNCQUFjLENBQUNDLHFCQUFxQixDQUNoQ0wsT0FBTyxJQUFJOUIscUJBQXFCLEVBQ2hDLElBQUksQ0FBQyxjQUNMUSxXQUFXLEVBQ1g0Qix5QkFBaUIsQ0FBQ0MsSUFDdEIsQ0FDSixDQUFDO0VBQ0wsQ0FBQyxDQUFDLE9BQU9qQixLQUFLLEVBQUU7SUFDWkQsZ0JBQWdCLENBQUNDLEtBQUssRUFBRVAsUUFBUSxFQUFFZixpQkFBaUIsQ0FBQ00sSUFBSSxDQUFDO0VBQzdEO0FBQ0osQ0FBQztBQUFDTCxPQUFBLENBQUEyQixpQkFBQSxHQUFBQSxpQkFBQTtBQUVDLE1BQU1ZLGFBQWEsR0FDdEJBLENBQ0lYLE1BQW9CLEVBQ3BCQyxNQUFjLEVBQ2QxQixTQUE0QixFQUM1QnFDLFFBQW9DLEVBQ3BDMUIsUUFBb0IsS0FFeEIsT0FBTztFQUFFMkIsR0FBRztFQUFFQztBQUFVLENBQUMsS0FBb0I7RUFDekMsSUFBSSxDQUFDRCxHQUFHLEVBQUU7RUFDVixJQUFJO0lBQ0EsTUFBTUUsUUFBUSxHQUFJSCxRQUFRLEVBQUVJLFFBQVEsS0FBS0MsNEJBQW9CLENBQUNDLElBQUksSUFBSU4sUUFBUSxFQUFFTyxRQUFRLElBQUssSUFBSTtJQUNqRyxNQUFNQyxTQUFTLEdBQUc3QyxTQUFTLEtBQUtKLGlCQUFpQixDQUFDa0QsR0FBRyxHQUFHWix5QkFBaUIsQ0FBQ1ksR0FBRyxHQUFHWix5QkFBaUIsQ0FBQ0MsSUFBSTtJQUN0RyxNQUFNWSxPQUFPLEdBQUdmLHNCQUFjLENBQUNnQixtQkFBbUIsQ0FDOUNDLFNBQVMsRUFDVFgsR0FBRyxFQUNIQyxTQUFTLEVBQ1RVLFNBQVMsRUFDVEosU0FDSixDQUE0QjtJQUM1QixNQUFNLElBQUFLLGlDQUFzQixFQUN4QnhCLE1BQU0sRUFDTHlCLFlBQW9CLElBQUsxQixNQUFNLENBQUMyQixXQUFXLENBQUNELFlBQVksRUFBRVgsUUFBUSxFQUFFTyxPQUFPLENBQUMsRUFDN0V0QixNQUNKLENBQUM7RUFDTCxDQUFDLENBQUMsT0FBT1AsS0FBSyxFQUFFO0lBQ1pELGdCQUFnQixDQUFDQyxLQUFLLEVBQUVQLFFBQVEsRUFBRVgsU0FBUyxDQUFDO0VBQ2hEO0FBQ0osQ0FBQztBQUFDSCxPQUFBLENBQUF1QyxhQUFBLEdBQUFBLGFBQUEiLCJpZ25vcmVMaXN0IjpbXX0=