UNPKG

matrix-react-sdk

Version:
106 lines (103 loc) 14.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createDmLocalRoom = createDmLocalRoom; var _matrix = require("matrix-js-sdk/src/matrix"); var _types = require("matrix-js-sdk/src/types"); var _LocalRoom = require("../../../src/models/LocalRoom"); var _directMessages = require("../../../src/utils/direct-messages"); var _crypto = require("../crypto"); /* 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. */ /** * Create a DM local room. This room will not be send to the server and only exists inside the client. * It sets up the local room with some artificial state events * so that can be used in most components instead of a „real“ room. * * @async * @param {MatrixClient} client * @param {Member[]} targets DM partners * @returns {Promise<LocalRoom>} Resolves to the new local room */ async function createDmLocalRoom(client, targets) { const userId = client.getUserId(); const localRoom = new _LocalRoom.LocalRoom(_LocalRoom.LOCAL_ROOM_ID_PREFIX + client.makeTxnId(), client, userId); const events = []; events.push(new _matrix.MatrixEvent({ event_id: `~${localRoom.roomId}:${client.makeTxnId()}`, type: _matrix.EventType.RoomCreate, content: { creator: userId, room_version: _matrix.KNOWN_SAFE_ROOM_VERSION }, state_key: "", sender: userId, room_id: localRoom.roomId, origin_server_ts: Date.now() })); if (await (0, _directMessages.determineCreateRoomEncryptionOption)(client, targets)) { localRoom.encrypted = true; events.push(new _matrix.MatrixEvent({ event_id: `~${localRoom.roomId}:${client.makeTxnId()}`, type: _matrix.EventType.RoomEncryption, content: { algorithm: _crypto.MEGOLM_ENCRYPTION_ALGORITHM }, sender: userId, state_key: "", room_id: localRoom.roomId, origin_server_ts: Date.now() })); } events.push(new _matrix.MatrixEvent({ event_id: `~${localRoom.roomId}:${client.makeTxnId()}`, type: _matrix.EventType.RoomMember, content: { displayname: userId, membership: _types.KnownMembership.Join }, state_key: userId, sender: userId, room_id: localRoom.roomId })); targets.forEach(target => { events.push(new _matrix.MatrixEvent({ event_id: `~${localRoom.roomId}:${client.makeTxnId()}`, type: _matrix.EventType.RoomMember, content: { displayname: target.name, avatar_url: target.getMxcAvatarUrl() ?? undefined, membership: _types.KnownMembership.Invite, isDirect: true }, state_key: target.userId, sender: userId, room_id: localRoom.roomId })); events.push(new _matrix.MatrixEvent({ event_id: `~${localRoom.roomId}:${client.makeTxnId()}`, type: _matrix.EventType.RoomMember, content: { displayname: target.name, avatar_url: target.getMxcAvatarUrl() ?? undefined, membership: _types.KnownMembership.Join }, state_key: target.userId, sender: target.userId, room_id: localRoom.roomId })); }); localRoom.targets = targets; localRoom.updateMyMembership(_types.KnownMembership.Join); localRoom.addLiveEvents(events); localRoom.currentState.setStateEvents(events); localRoom.name = localRoom.getDefaultRoomName(client.getUserId()); client.store.storeRoom(localRoom); return localRoom; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl90eXBlcyIsIl9Mb2NhbFJvb20iLCJfZGlyZWN0TWVzc2FnZXMiLCJfY3J5cHRvIiwiY3JlYXRlRG1Mb2NhbFJvb20iLCJjbGllbnQiLCJ0YXJnZXRzIiwidXNlcklkIiwiZ2V0VXNlcklkIiwibG9jYWxSb29tIiwiTG9jYWxSb29tIiwiTE9DQUxfUk9PTV9JRF9QUkVGSVgiLCJtYWtlVHhuSWQiLCJldmVudHMiLCJwdXNoIiwiTWF0cml4RXZlbnQiLCJldmVudF9pZCIsInJvb21JZCIsInR5cGUiLCJFdmVudFR5cGUiLCJSb29tQ3JlYXRlIiwiY29udGVudCIsImNyZWF0b3IiLCJyb29tX3ZlcnNpb24iLCJLTk9XTl9TQUZFX1JPT01fVkVSU0lPTiIsInN0YXRlX2tleSIsInNlbmRlciIsInJvb21faWQiLCJvcmlnaW5fc2VydmVyX3RzIiwiRGF0ZSIsIm5vdyIsImRldGVybWluZUNyZWF0ZVJvb21FbmNyeXB0aW9uT3B0aW9uIiwiZW5jcnlwdGVkIiwiUm9vbUVuY3J5cHRpb24iLCJhbGdvcml0aG0iLCJNRUdPTE1fRU5DUllQVElPTl9BTEdPUklUSE0iLCJSb29tTWVtYmVyIiwiZGlzcGxheW5hbWUiLCJtZW1iZXJzaGlwIiwiS25vd25NZW1iZXJzaGlwIiwiSm9pbiIsImZvckVhY2giLCJ0YXJnZXQiLCJuYW1lIiwiYXZhdGFyX3VybCIsImdldE14Y0F2YXRhclVybCIsInVuZGVmaW5lZCIsIkludml0ZSIsImlzRGlyZWN0IiwidXBkYXRlTXlNZW1iZXJzaGlwIiwiYWRkTGl2ZUV2ZW50cyIsImN1cnJlbnRTdGF0ZSIsInNldFN0YXRlRXZlbnRzIiwiZ2V0RGVmYXVsdFJvb21OYW1lIiwic3RvcmUiLCJzdG9yZVJvb20iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvZG0vY3JlYXRlRG1Mb2NhbFJvb20udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgRXZlbnRUeXBlLCBLTk9XTl9TQUZFX1JPT01fVkVSU0lPTiwgTWF0cml4Q2xpZW50LCBNYXRyaXhFdmVudCB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcbmltcG9ydCB7IEtub3duTWVtYmVyc2hpcCB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy90eXBlc1wiO1xuXG5pbXBvcnQgeyBMT0NBTF9ST09NX0lEX1BSRUZJWCwgTG9jYWxSb29tIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9tb2RlbHMvTG9jYWxSb29tXCI7XG5pbXBvcnQgeyBkZXRlcm1pbmVDcmVhdGVSb29tRW5jcnlwdGlvbk9wdGlvbiwgTWVtYmVyIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy91dGlscy9kaXJlY3QtbWVzc2FnZXNcIjtcbmltcG9ydCB7IE1FR09MTV9FTkNSWVBUSU9OX0FMR09SSVRITSB9IGZyb20gXCIuLi9jcnlwdG9cIjtcblxuLyoqXG4gKiBDcmVhdGUgYSBETSBsb2NhbCByb29tLiBUaGlzIHJvb20gd2lsbCBub3QgYmUgc2VuZCB0byB0aGUgc2VydmVyIGFuZCBvbmx5IGV4aXN0cyBpbnNpZGUgdGhlIGNsaWVudC5cbiAqIEl0IHNldHMgdXAgdGhlIGxvY2FsIHJvb20gd2l0aCBzb21lIGFydGlmaWNpYWwgc3RhdGUgZXZlbnRzXG4gKiBzbyB0aGF0IGNhbiBiZSB1c2VkIGluIG1vc3QgY29tcG9uZW50cyBpbnN0ZWFkIG9mIGEg4oCecmVhbOKAnCByb29tLlxuICpcbiAqIEBhc3luY1xuICogQHBhcmFtIHtNYXRyaXhDbGllbnR9IGNsaWVudFxuICogQHBhcmFtIHtNZW1iZXJbXX0gdGFyZ2V0cyBETSBwYXJ0bmVyc1xuICogQHJldHVybnMge1Byb21pc2U8TG9jYWxSb29tPn0gUmVzb2x2ZXMgdG8gdGhlIG5ldyBsb2NhbCByb29tXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVEbUxvY2FsUm9vbShjbGllbnQ6IE1hdHJpeENsaWVudCwgdGFyZ2V0czogTWVtYmVyW10pOiBQcm9taXNlPExvY2FsUm9vbT4ge1xuICAgIGNvbnN0IHVzZXJJZCA9IGNsaWVudC5nZXRVc2VySWQoKSE7XG5cbiAgICBjb25zdCBsb2NhbFJvb20gPSBuZXcgTG9jYWxSb29tKExPQ0FMX1JPT01fSURfUFJFRklYICsgY2xpZW50Lm1ha2VUeG5JZCgpLCBjbGllbnQsIHVzZXJJZCk7XG4gICAgY29uc3QgZXZlbnRzOiBNYXRyaXhFdmVudFtdID0gW107XG5cbiAgICBldmVudHMucHVzaChcbiAgICAgICAgbmV3IE1hdHJpeEV2ZW50KHtcbiAgICAgICAgICAgIGV2ZW50X2lkOiBgfiR7bG9jYWxSb29tLnJvb21JZH06JHtjbGllbnQubWFrZVR4bklkKCl9YCxcbiAgICAgICAgICAgIHR5cGU6IEV2ZW50VHlwZS5Sb29tQ3JlYXRlLFxuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAgIGNyZWF0b3I6IHVzZXJJZCxcbiAgICAgICAgICAgICAgICByb29tX3ZlcnNpb246IEtOT1dOX1NBRkVfUk9PTV9WRVJTSU9OLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXRlX2tleTogXCJcIixcbiAgICAgICAgICAgIHNlbmRlcjogdXNlcklkLFxuICAgICAgICAgICAgcm9vbV9pZDogbG9jYWxSb29tLnJvb21JZCxcbiAgICAgICAgICAgIG9yaWdpbl9zZXJ2ZXJfdHM6IERhdGUubm93KCksXG4gICAgICAgIH0pLFxuICAgICk7XG5cbiAgICBpZiAoYXdhaXQgZGV0ZXJtaW5lQ3JlYXRlUm9vbUVuY3J5cHRpb25PcHRpb24oY2xpZW50LCB0YXJnZXRzKSkge1xuICAgICAgICBsb2NhbFJvb20uZW5jcnlwdGVkID0gdHJ1ZTtcbiAgICAgICAgZXZlbnRzLnB1c2goXG4gICAgICAgICAgICBuZXcgTWF0cml4RXZlbnQoe1xuICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBgfiR7bG9jYWxSb29tLnJvb21JZH06JHtjbGllbnQubWFrZVR4bklkKCl9YCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuUm9vbUVuY3J5cHRpb24sXG4gICAgICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAgICAgICBhbGdvcml0aG06IE1FR09MTV9FTkNSWVBUSU9OX0FMR09SSVRITSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdXNlcklkLFxuICAgICAgICAgICAgICAgIHN0YXRlX2tleTogXCJcIixcbiAgICAgICAgICAgICAgICByb29tX2lkOiBsb2NhbFJvb20ucm9vbUlkLFxuICAgICAgICAgICAgICAgIG9yaWdpbl9zZXJ2ZXJfdHM6IERhdGUubm93KCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBldmVudHMucHVzaChcbiAgICAgICAgbmV3IE1hdHJpeEV2ZW50KHtcbiAgICAgICAgICAgIGV2ZW50X2lkOiBgfiR7bG9jYWxSb29tLnJvb21JZH06JHtjbGllbnQubWFrZVR4bklkKCl9YCxcbiAgICAgICAgICAgIHR5cGU6IEV2ZW50VHlwZS5Sb29tTWVtYmVyLFxuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAgIGRpc3BsYXluYW1lOiB1c2VySWQsXG4gICAgICAgICAgICAgICAgbWVtYmVyc2hpcDogS25vd25NZW1iZXJzaGlwLkpvaW4sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdGVfa2V5OiB1c2VySWQsXG4gICAgICAgICAgICBzZW5kZXI6IHVzZXJJZCxcbiAgICAgICAgICAgIHJvb21faWQ6IGxvY2FsUm9vbS5yb29tSWQsXG4gICAgICAgIH0pLFxuICAgICk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldDogTWVtYmVyKSA9PiB7XG4gICAgICAgIGV2ZW50cy5wdXNoKFxuICAgICAgICAgICAgbmV3IE1hdHJpeEV2ZW50KHtcbiAgICAgICAgICAgICAgICBldmVudF9pZDogYH4ke2xvY2FsUm9vbS5yb29tSWR9OiR7Y2xpZW50Lm1ha2VUeG5JZCgpfWAsXG4gICAgICAgICAgICAgICAgdHlwZTogRXZlbnRUeXBlLlJvb21NZW1iZXIsXG4gICAgICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5bmFtZTogdGFyZ2V0Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGF2YXRhcl91cmw6IHRhcmdldC5nZXRNeGNBdmF0YXJVcmwoKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIG1lbWJlcnNoaXA6IEtub3duTWVtYmVyc2hpcC5JbnZpdGUsXG4gICAgICAgICAgICAgICAgICAgIGlzRGlyZWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3RhdGVfa2V5OiB0YXJnZXQudXNlcklkLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdXNlcklkLFxuICAgICAgICAgICAgICAgIHJvb21faWQ6IGxvY2FsUm9vbS5yb29tSWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgZXZlbnRzLnB1c2goXG4gICAgICAgICAgICBuZXcgTWF0cml4RXZlbnQoe1xuICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBgfiR7bG9jYWxSb29tLnJvb21JZH06JHtjbGllbnQubWFrZVR4bklkKCl9YCxcbiAgICAgICAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuUm9vbU1lbWJlcixcbiAgICAgICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXluYW1lOiB0YXJnZXQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYXZhdGFyX3VybDogdGFyZ2V0LmdldE14Y0F2YXRhclVybCgpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgbWVtYmVyc2hpcDogS25vd25NZW1iZXJzaGlwLkpvaW4sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdGF0ZV9rZXk6IHRhcmdldC51c2VySWQsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0YXJnZXQudXNlcklkLFxuICAgICAgICAgICAgICAgIHJvb21faWQ6IGxvY2FsUm9vbS5yb29tSWQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGxvY2FsUm9vbS50YXJnZXRzID0gdGFyZ2V0cztcbiAgICBsb2NhbFJvb20udXBkYXRlTXlNZW1iZXJzaGlwKEtub3duTWVtYmVyc2hpcC5Kb2luKTtcbiAgICBsb2NhbFJvb20uYWRkTGl2ZUV2ZW50cyhldmVudHMpO1xuICAgIGxvY2FsUm9vbS5jdXJyZW50U3RhdGUuc2V0U3RhdGVFdmVudHMoZXZlbnRzKTtcbiAgICBsb2NhbFJvb20ubmFtZSA9IGxvY2FsUm9vbS5nZXREZWZhdWx0Um9vbU5hbWUoY2xpZW50LmdldFVzZXJJZCgpISk7XG4gICAgY2xpZW50LnN0b3JlLnN0b3JlUm9vbShsb2NhbFJvb20pO1xuXG4gICAgcmV0dXJuIGxvY2FsUm9vbTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsVUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsZUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxlQUFlSyxpQkFBaUJBLENBQUNDLE1BQW9CLEVBQUVDLE9BQWlCLEVBQXNCO0VBQ2pHLE1BQU1DLE1BQU0sR0FBR0YsTUFBTSxDQUFDRyxTQUFTLENBQUMsQ0FBRTtFQUVsQyxNQUFNQyxTQUFTLEdBQUcsSUFBSUMsb0JBQVMsQ0FBQ0MsK0JBQW9CLEdBQUdOLE1BQU0sQ0FBQ08sU0FBUyxDQUFDLENBQUMsRUFBRVAsTUFBTSxFQUFFRSxNQUFNLENBQUM7RUFDMUYsTUFBTU0sTUFBcUIsR0FBRyxFQUFFO0VBRWhDQSxNQUFNLENBQUNDLElBQUksQ0FDUCxJQUFJQyxtQkFBVyxDQUFDO0lBQ1pDLFFBQVEsRUFBRSxJQUFJUCxTQUFTLENBQUNRLE1BQU0sSUFBSVosTUFBTSxDQUFDTyxTQUFTLENBQUMsQ0FBQyxFQUFFO0lBQ3RETSxJQUFJLEVBQUVDLGlCQUFTLENBQUNDLFVBQVU7SUFDMUJDLE9BQU8sRUFBRTtNQUNMQyxPQUFPLEVBQUVmLE1BQU07TUFDZmdCLFlBQVksRUFBRUM7SUFDbEIsQ0FBQztJQUNEQyxTQUFTLEVBQUUsRUFBRTtJQUNiQyxNQUFNLEVBQUVuQixNQUFNO0lBQ2RvQixPQUFPLEVBQUVsQixTQUFTLENBQUNRLE1BQU07SUFDekJXLGdCQUFnQixFQUFFQyxJQUFJLENBQUNDLEdBQUcsQ0FBQztFQUMvQixDQUFDLENBQ0wsQ0FBQztFQUVELElBQUksTUFBTSxJQUFBQyxtREFBbUMsRUFBQzFCLE1BQU0sRUFBRUMsT0FBTyxDQUFDLEVBQUU7SUFDNURHLFNBQVMsQ0FBQ3VCLFNBQVMsR0FBRyxJQUFJO0lBQzFCbkIsTUFBTSxDQUFDQyxJQUFJLENBQ1AsSUFBSUMsbUJBQVcsQ0FBQztNQUNaQyxRQUFRLEVBQUUsSUFBSVAsU0FBUyxDQUFDUSxNQUFNLElBQUlaLE1BQU0sQ0FBQ08sU0FBUyxDQUFDLENBQUMsRUFBRTtNQUN0RE0sSUFBSSxFQUFFQyxpQkFBUyxDQUFDYyxjQUFjO01BQzlCWixPQUFPLEVBQUU7UUFDTGEsU0FBUyxFQUFFQztNQUNmLENBQUM7TUFDRFQsTUFBTSxFQUFFbkIsTUFBTTtNQUNka0IsU0FBUyxFQUFFLEVBQUU7TUFDYkUsT0FBTyxFQUFFbEIsU0FBUyxDQUFDUSxNQUFNO01BQ3pCVyxnQkFBZ0IsRUFBRUMsSUFBSSxDQUFDQyxHQUFHLENBQUM7SUFDL0IsQ0FBQyxDQUNMLENBQUM7RUFDTDtFQUVBakIsTUFBTSxDQUFDQyxJQUFJLENBQ1AsSUFBSUMsbUJBQVcsQ0FBQztJQUNaQyxRQUFRLEVBQUUsSUFBSVAsU0FBUyxDQUFDUSxNQUFNLElBQUlaLE1BQU0sQ0FBQ08sU0FBUyxDQUFDLENBQUMsRUFBRTtJQUN0RE0sSUFBSSxFQUFFQyxpQkFBUyxDQUFDaUIsVUFBVTtJQUMxQmYsT0FBTyxFQUFFO01BQ0xnQixXQUFXLEVBQUU5QixNQUFNO01BQ25CK0IsVUFBVSxFQUFFQyxzQkFBZSxDQUFDQztJQUNoQyxDQUFDO0lBQ0RmLFNBQVMsRUFBRWxCLE1BQU07SUFDakJtQixNQUFNLEVBQUVuQixNQUFNO0lBQ2RvQixPQUFPLEVBQUVsQixTQUFTLENBQUNRO0VBQ3ZCLENBQUMsQ0FDTCxDQUFDO0VBRURYLE9BQU8sQ0FBQ21DLE9BQU8sQ0FBRUMsTUFBYyxJQUFLO0lBQ2hDN0IsTUFBTSxDQUFDQyxJQUFJLENBQ1AsSUFBSUMsbUJBQVcsQ0FBQztNQUNaQyxRQUFRLEVBQUUsSUFBSVAsU0FBUyxDQUFDUSxNQUFNLElBQUlaLE1BQU0sQ0FBQ08sU0FBUyxDQUFDLENBQUMsRUFBRTtNQUN0RE0sSUFBSSxFQUFFQyxpQkFBUyxDQUFDaUIsVUFBVTtNQUMxQmYsT0FBTyxFQUFFO1FBQ0xnQixXQUFXLEVBQUVLLE1BQU0sQ0FBQ0MsSUFBSTtRQUN4QkMsVUFBVSxFQUFFRixNQUFNLENBQUNHLGVBQWUsQ0FBQyxDQUFDLElBQUlDLFNBQVM7UUFDakRSLFVBQVUsRUFBRUMsc0JBQWUsQ0FBQ1EsTUFBTTtRQUNsQ0MsUUFBUSxFQUFFO01BQ2QsQ0FBQztNQUNEdkIsU0FBUyxFQUFFaUIsTUFBTSxDQUFDbkMsTUFBTTtNQUN4Qm1CLE1BQU0sRUFBRW5CLE1BQU07TUFDZG9CLE9BQU8sRUFBRWxCLFNBQVMsQ0FBQ1E7SUFDdkIsQ0FBQyxDQUNMLENBQUM7SUFDREosTUFBTSxDQUFDQyxJQUFJLENBQ1AsSUFBSUMsbUJBQVcsQ0FBQztNQUNaQyxRQUFRLEVBQUUsSUFBSVAsU0FBUyxDQUFDUSxNQUFNLElBQUlaLE1BQU0sQ0FBQ08sU0FBUyxDQUFDLENBQUMsRUFBRTtNQUN0RE0sSUFBSSxFQUFFQyxpQkFBUyxDQUFDaUIsVUFBVTtNQUMxQmYsT0FBTyxFQUFFO1FBQ0xnQixXQUFXLEVBQUVLLE1BQU0sQ0FBQ0MsSUFBSTtRQUN4QkMsVUFBVSxFQUFFRixNQUFNLENBQUNHLGVBQWUsQ0FBQyxDQUFDLElBQUlDLFNBQVM7UUFDakRSLFVBQVUsRUFBRUMsc0JBQWUsQ0FBQ0M7TUFDaEMsQ0FBQztNQUNEZixTQUFTLEVBQUVpQixNQUFNLENBQUNuQyxNQUFNO01BQ3hCbUIsTUFBTSxFQUFFZ0IsTUFBTSxDQUFDbkMsTUFBTTtNQUNyQm9CLE9BQU8sRUFBRWxCLFNBQVMsQ0FBQ1E7SUFDdkIsQ0FBQyxDQUNMLENBQUM7RUFDTCxDQUFDLENBQUM7RUFFRlIsU0FBUyxDQUFDSCxPQUFPLEdBQUdBLE9BQU87RUFDM0JHLFNBQVMsQ0FBQ3dDLGtCQUFrQixDQUFDVixzQkFBZSxDQUFDQyxJQUFJLENBQUM7RUFDbEQvQixTQUFTLENBQUN5QyxhQUFhLENBQUNyQyxNQUFNLENBQUM7RUFDL0JKLFNBQVMsQ0FBQzBDLFlBQVksQ0FBQ0MsY0FBYyxDQUFDdkMsTUFBTSxDQUFDO0VBQzdDSixTQUFTLENBQUNrQyxJQUFJLEdBQUdsQyxTQUFTLENBQUM0QyxrQkFBa0IsQ0FBQ2hELE1BQU0sQ0FBQ0csU0FBUyxDQUFDLENBQUUsQ0FBQztFQUNsRUgsTUFBTSxDQUFDaUQsS0FBSyxDQUFDQyxTQUFTLENBQUM5QyxTQUFTLENBQUM7RUFFakMsT0FBT0EsU0FBUztBQUNwQiIsImlnbm9yZUxpc3QiOltdfQ==