UNPKG

matrix-react-sdk

Version:
114 lines (109 loc) 20.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.hasLowerOrEqualLevelThanDefaultLevel = exports.getUserIdsFromCompletions = exports.AddPrivilegedUsers = void 0; var _react = _interopRequireWildcard(require("react")); var _matrix = require("matrix-js-sdk/src/matrix"); var _languageHandler = require("../../../languageHandler"); var _UserProvider = _interopRequireDefault(require("../../../autocomplete/UserProvider")); var _AutocompleteInput = require("../../structures/AutocompleteInput"); var _PowerSelector = _interopRequireDefault(require("../elements/PowerSelector")); var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext")); var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton")); var _Modal = _interopRequireDefault(require("../../../Modal")); var _ErrorDialog = _interopRequireDefault(require("../dialogs/ErrorDialog")); var _SettingsFieldset = _interopRequireDefault(require("./SettingsFieldset")); 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 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. */ const AddPrivilegedUsers = ({ room, defaultUserLevel }) => { const client = (0, _react.useContext)(_MatrixClientContext.default); const userProvider = (0, _react.useRef)(new _UserProvider.default(room)); const [isLoading, setIsLoading] = (0, _react.useState)(false); const [powerLevel, setPowerLevel] = (0, _react.useState)(defaultUserLevel); const [selectedUsers, setSelectedUsers] = (0, _react.useState)([]); const hasLowerOrEqualLevelThanDefaultLevelFilter = (0, _react.useCallback)(user => hasLowerOrEqualLevelThanDefaultLevel(room, user, defaultUserLevel), [room, defaultUserLevel]); const onSubmit = async event => { event.preventDefault(); setIsLoading(true); const userIds = getUserIdsFromCompletions(selectedUsers); const powerLevelEvent = room.currentState.getStateEvents(_matrix.EventType.RoomPowerLevels, ""); // `RoomPowerLevels` event should exist, but technically it is not guaranteed. if (powerLevelEvent === null) { _Modal.default.createDialog(_ErrorDialog.default, { title: (0, _languageHandler._t)("common|error"), description: (0, _languageHandler._t)("error|update_power_level") }); return; } try { await client.setPowerLevel(room.roomId, userIds, powerLevel); setSelectedUsers([]); setPowerLevel(defaultUserLevel); } catch (error) { _Modal.default.createDialog(_ErrorDialog.default, { title: (0, _languageHandler._t)("common|error"), description: (0, _languageHandler._t)("error|update_power_level") }); } finally { setIsLoading(false); } }; return /*#__PURE__*/_react.default.createElement("form", { style: { display: "flex" }, onSubmit: onSubmit }, /*#__PURE__*/_react.default.createElement(_SettingsFieldset.default, { legend: (0, _languageHandler._t)("room_settings|permissions|add_privileged_user_heading"), description: (0, _languageHandler._t)("room_settings|permissions|add_privileged_user_description"), style: { flexGrow: 1 } }, /*#__PURE__*/_react.default.createElement(_AutocompleteInput.AutocompleteInput, { provider: userProvider.current, placeholder: (0, _languageHandler._t)("room_settings|permissions|add_privileged_user_filter_placeholder"), onSelectionChange: setSelectedUsers, selection: selectedUsers, additionalFilter: hasLowerOrEqualLevelThanDefaultLevelFilter }), /*#__PURE__*/_react.default.createElement(_PowerSelector.default, { value: powerLevel, onChange: setPowerLevel }), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { type: "submit", element: "button", kind: "primary", disabled: !selectedUsers.length || isLoading, onClick: null, "data-testid": "add-privileged-users-submit-button" }, (0, _languageHandler._t)("action|apply")))); }; exports.AddPrivilegedUsers = AddPrivilegedUsers; const hasLowerOrEqualLevelThanDefaultLevel = (room, user, defaultUserLevel) => { if (user.completionId === undefined) { return false; } const member = room.getMember(user.completionId); if (member === null) { return false; } return member.powerLevel <= defaultUserLevel; }; exports.hasLowerOrEqualLevelThanDefaultLevel = hasLowerOrEqualLevelThanDefaultLevel; const getUserIdsFromCompletions = completions => { const completionsWithId = completions.filter(completion => completion.completionId !== undefined); // undefined completionId's are filtered out above but TypeScript does not seem to understand. return completionsWithId.map(completion => completion.completionId); }; exports.getUserIdsFromCompletions = getUserIdsFromCompletions; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX2xhbmd1YWdlSGFuZGxlciIsIl9Vc2VyUHJvdmlkZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0F1dG9jb21wbGV0ZUlucHV0IiwiX1Bvd2VyU2VsZWN0b3IiLCJfTWF0cml4Q2xpZW50Q29udGV4dCIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX01vZGFsIiwiX0Vycm9yRGlhbG9nIiwiX1NldHRpbmdzRmllbGRzZXQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJBZGRQcml2aWxlZ2VkVXNlcnMiLCJyb29tIiwiZGVmYXVsdFVzZXJMZXZlbCIsImNsaWVudCIsInVzZUNvbnRleHQiLCJNYXRyaXhDbGllbnRDb250ZXh0IiwidXNlclByb3ZpZGVyIiwidXNlUmVmIiwiVXNlclByb3ZpZGVyIiwiaXNMb2FkaW5nIiwic2V0SXNMb2FkaW5nIiwidXNlU3RhdGUiLCJwb3dlckxldmVsIiwic2V0UG93ZXJMZXZlbCIsInNlbGVjdGVkVXNlcnMiLCJzZXRTZWxlY3RlZFVzZXJzIiwiaGFzTG93ZXJPckVxdWFsTGV2ZWxUaGFuRGVmYXVsdExldmVsRmlsdGVyIiwidXNlQ2FsbGJhY2siLCJ1c2VyIiwiaGFzTG93ZXJPckVxdWFsTGV2ZWxUaGFuRGVmYXVsdExldmVsIiwib25TdWJtaXQiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwidXNlcklkcyIsImdldFVzZXJJZHNGcm9tQ29tcGxldGlvbnMiLCJwb3dlckxldmVsRXZlbnQiLCJjdXJyZW50U3RhdGUiLCJnZXRTdGF0ZUV2ZW50cyIsIkV2ZW50VHlwZSIsIlJvb21Qb3dlckxldmVscyIsIk1vZGFsIiwiY3JlYXRlRGlhbG9nIiwiRXJyb3JEaWFsb2ciLCJ0aXRsZSIsIl90IiwiZGVzY3JpcHRpb24iLCJyb29tSWQiLCJlcnJvciIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsImRpc3BsYXkiLCJsZWdlbmQiLCJmbGV4R3JvdyIsIkF1dG9jb21wbGV0ZUlucHV0IiwicHJvdmlkZXIiLCJjdXJyZW50IiwicGxhY2Vob2xkZXIiLCJvblNlbGVjdGlvbkNoYW5nZSIsInNlbGVjdGlvbiIsImFkZGl0aW9uYWxGaWx0ZXIiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwidHlwZSIsImVsZW1lbnQiLCJraW5kIiwiZGlzYWJsZWQiLCJsZW5ndGgiLCJvbkNsaWNrIiwiZXhwb3J0cyIsImNvbXBsZXRpb25JZCIsInVuZGVmaW5lZCIsIm1lbWJlciIsImdldE1lbWJlciIsImNvbXBsZXRpb25zIiwiY29tcGxldGlvbnNXaXRoSWQiLCJmaWx0ZXIiLCJjb21wbGV0aW9uIiwibWFwIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3Mvc2V0dGluZ3MvQWRkUHJpdmlsZWdlZFVzZXJzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMiBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHsgRm9ybUV2ZW50LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUm9vbSwgRXZlbnRUeXBlIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IElDb21wbGV0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2F1dG9jb21wbGV0ZS9BdXRvY29tcGxldGVyXCI7XG5pbXBvcnQgVXNlclByb3ZpZGVyIGZyb20gXCIuLi8uLi8uLi9hdXRvY29tcGxldGUvVXNlclByb3ZpZGVyXCI7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVJbnB1dCB9IGZyb20gXCIuLi8uLi9zdHJ1Y3R1cmVzL0F1dG9jb21wbGV0ZUlucHV0XCI7XG5pbXBvcnQgUG93ZXJTZWxlY3RvciBmcm9tIFwiLi4vZWxlbWVudHMvUG93ZXJTZWxlY3RvclwiO1xuaW1wb3J0IE1hdHJpeENsaWVudENvbnRleHQgZnJvbSBcIi4uLy4uLy4uL2NvbnRleHRzL01hdHJpeENsaWVudENvbnRleHRcIjtcbmltcG9ydCBBY2Nlc3NpYmxlQnV0dG9uIGZyb20gXCIuLi9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uXCI7XG5pbXBvcnQgTW9kYWwgZnJvbSBcIi4uLy4uLy4uL01vZGFsXCI7XG5pbXBvcnQgRXJyb3JEaWFsb2cgZnJvbSBcIi4uL2RpYWxvZ3MvRXJyb3JEaWFsb2dcIjtcbmltcG9ydCBTZXR0aW5nc0ZpZWxkc2V0IGZyb20gXCIuL1NldHRpbmdzRmllbGRzZXRcIjtcblxuaW50ZXJmYWNlIEFkZFByaXZpbGVnZWRVc2Vyc1Byb3BzIHtcbiAgICByb29tOiBSb29tO1xuICAgIGRlZmF1bHRVc2VyTGV2ZWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IEFkZFByaXZpbGVnZWRVc2VyczogUmVhY3QuRkM8QWRkUHJpdmlsZWdlZFVzZXJzUHJvcHM+ID0gKHsgcm9vbSwgZGVmYXVsdFVzZXJMZXZlbCB9KSA9PiB7XG4gICAgY29uc3QgY2xpZW50ID0gdXNlQ29udGV4dChNYXRyaXhDbGllbnRDb250ZXh0KTtcbiAgICBjb25zdCB1c2VyUHJvdmlkZXIgPSB1c2VSZWYobmV3IFVzZXJQcm92aWRlcihyb29tKSk7XG4gICAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgICBjb25zdCBbcG93ZXJMZXZlbCwgc2V0UG93ZXJMZXZlbF0gPSB1c2VTdGF0ZTxudW1iZXI+KGRlZmF1bHRVc2VyTGV2ZWwpO1xuICAgIGNvbnN0IFtzZWxlY3RlZFVzZXJzLCBzZXRTZWxlY3RlZFVzZXJzXSA9IHVzZVN0YXRlPElDb21wbGV0aW9uW10+KFtdKTtcbiAgICBjb25zdCBoYXNMb3dlck9yRXF1YWxMZXZlbFRoYW5EZWZhdWx0TGV2ZWxGaWx0ZXIgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKHVzZXI6IElDb21wbGV0aW9uKSA9PiBoYXNMb3dlck9yRXF1YWxMZXZlbFRoYW5EZWZhdWx0TGV2ZWwocm9vbSwgdXNlciwgZGVmYXVsdFVzZXJMZXZlbCksXG4gICAgICAgIFtyb29tLCBkZWZhdWx0VXNlckxldmVsXSxcbiAgICApO1xuXG4gICAgY29uc3Qgb25TdWJtaXQgPSBhc3luYyAoZXZlbnQ6IEZvcm1FdmVudCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG5cbiAgICAgICAgY29uc3QgdXNlcklkcyA9IGdldFVzZXJJZHNGcm9tQ29tcGxldGlvbnMoc2VsZWN0ZWRVc2Vycyk7XG4gICAgICAgIGNvbnN0IHBvd2VyTGV2ZWxFdmVudCA9IHJvb20uY3VycmVudFN0YXRlLmdldFN0YXRlRXZlbnRzKEV2ZW50VHlwZS5Sb29tUG93ZXJMZXZlbHMsIFwiXCIpO1xuXG4gICAgICAgIC8vIGBSb29tUG93ZXJMZXZlbHNgIGV2ZW50IHNob3VsZCBleGlzdCwgYnV0IHRlY2huaWNhbGx5IGl0IGlzIG5vdCBndWFyYW50ZWVkLlxuICAgICAgICBpZiAocG93ZXJMZXZlbEV2ZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICBNb2RhbC5jcmVhdGVEaWFsb2coRXJyb3JEaWFsb2csIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogX3QoXCJjb21tb258ZXJyb3JcIiksXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IF90KFwiZXJyb3J8dXBkYXRlX3Bvd2VyX2xldmVsXCIpLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuc2V0UG93ZXJMZXZlbChyb29tLnJvb21JZCwgdXNlcklkcywgcG93ZXJMZXZlbCk7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZFVzZXJzKFtdKTtcbiAgICAgICAgICAgIHNldFBvd2VyTGV2ZWwoZGVmYXVsdFVzZXJMZXZlbCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBNb2RhbC5jcmVhdGVEaWFsb2coRXJyb3JEaWFsb2csIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogX3QoXCJjb21tb258ZXJyb3JcIiksXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IF90KFwiZXJyb3J8dXBkYXRlX3Bvd2VyX2xldmVsXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxmb3JtIHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiIH19IG9uU3VibWl0PXtvblN1Ym1pdH0+XG4gICAgICAgICAgICA8U2V0dGluZ3NGaWVsZHNldFxuICAgICAgICAgICAgICAgIGxlZ2VuZD17X3QoXCJyb29tX3NldHRpbmdzfHBlcm1pc3Npb25zfGFkZF9wcml2aWxlZ2VkX3VzZXJfaGVhZGluZ1wiKX1cbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17X3QoXCJyb29tX3NldHRpbmdzfHBlcm1pc3Npb25zfGFkZF9wcml2aWxlZ2VkX3VzZXJfZGVzY3JpcHRpb25cIil9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgZmxleEdyb3c6IDEgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8QXV0b2NvbXBsZXRlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXI9e3VzZXJQcm92aWRlci5jdXJyZW50fVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17X3QoXCJyb29tX3NldHRpbmdzfHBlcm1pc3Npb25zfGFkZF9wcml2aWxlZ2VkX3VzZXJfZmlsdGVyX3BsYWNlaG9sZGVyXCIpfVxuICAgICAgICAgICAgICAgICAgICBvblNlbGVjdGlvbkNoYW5nZT17c2V0U2VsZWN0ZWRVc2Vyc31cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uPXtzZWxlY3RlZFVzZXJzfVxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRmlsdGVyPXtoYXNMb3dlck9yRXF1YWxMZXZlbFRoYW5EZWZhdWx0TGV2ZWxGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8UG93ZXJTZWxlY3RvciB2YWx1ZT17cG93ZXJMZXZlbH0gb25DaGFuZ2U9e3NldFBvd2VyTGV2ZWx9IC8+XG4gICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBraW5kPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshc2VsZWN0ZWRVc2Vycy5sZW5ndGggfHwgaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtudWxsfVxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImFkZC1wcml2aWxlZ2VkLXVzZXJzLXN1Ym1pdC1idXR0b25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge190KFwiYWN0aW9ufGFwcGx5XCIpfVxuICAgICAgICAgICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICAgICAgICAgIDwvU2V0dGluZ3NGaWVsZHNldD5cbiAgICAgICAgPC9mb3JtPlxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzTG93ZXJPckVxdWFsTGV2ZWxUaGFuRGVmYXVsdExldmVsID0gKFxuICAgIHJvb206IFJvb20sXG4gICAgdXNlcjogSUNvbXBsZXRpb24sXG4gICAgZGVmYXVsdFVzZXJMZXZlbDogbnVtYmVyLFxuKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKHVzZXIuY29tcGxldGlvbklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbWJlciA9IHJvb20uZ2V0TWVtYmVyKHVzZXIuY29tcGxldGlvbklkKTtcblxuICAgIGlmIChtZW1iZXIgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBtZW1iZXIucG93ZXJMZXZlbCA8PSBkZWZhdWx0VXNlckxldmVsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJJZHNGcm9tQ29tcGxldGlvbnMgPSAoY29tcGxldGlvbnM6IElDb21wbGV0aW9uW10pOiBzdHJpbmdbXSA9PiB7XG4gICAgY29uc3QgY29tcGxldGlvbnNXaXRoSWQgPSBjb21wbGV0aW9ucy5maWx0ZXIoKGNvbXBsZXRpb24pID0+IGNvbXBsZXRpb24uY29tcGxldGlvbklkICE9PSB1bmRlZmluZWQpO1xuXG4gICAgLy8gdW5kZWZpbmVkIGNvbXBsZXRpb25JZCdzIGFyZSBmaWx0ZXJlZCBvdXQgYWJvdmUgYnV0IFR5cGVTY3JpcHQgZG9lcyBub3Qgc2VlbSB0byB1bmRlcnN0YW5kLlxuICAgIHJldHVybiBjb21wbGV0aW9uc1dpdGhJZC5tYXAoKGNvbXBsZXRpb24pID0+IGNvbXBsZXRpb24uY29tcGxldGlvbklkISk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsZ0JBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLGFBQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLGtCQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxjQUFBLEdBQUFGLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBTyxvQkFBQSxHQUFBSCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQVEsaUJBQUEsR0FBQUosc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFTLE1BQUEsR0FBQUwsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFVLFlBQUEsR0FBQU4sc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFXLGlCQUFBLEdBQUFQLHNCQUFBLENBQUFKLE9BQUE7QUFBa0QsU0FBQVkseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQWQsd0JBQUFjLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxXQUFBSyxPQUFBLEVBQUFMLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQ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