UNPKG

matrix-react-sdk

Version:
112 lines (109 loc) 29.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _matrix = require("matrix-js-sdk/src/matrix"); var _languageHandler = require("../../../languageHandler"); var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton")); var _AliasSettings = _interopRequireDefault(require("../room_settings/AliasSettings")); var _useStateToggle = require("../../../hooks/useStateToggle"); var _LabelledToggleSwitch = _interopRequireDefault(require("../elements/LabelledToggleSwitch")); var _useLocalEcho = require("../../../hooks/useLocalEcho"); var _JoinRuleSettings = _interopRequireDefault(require("../settings/JoinRuleSettings")); var _useRoomState = require("../../../hooks/useRoomState"); var _SettingsFieldset = _interopRequireDefault(require("../settings/SettingsFieldset")); var _useAsyncMemo = require("../../../hooks/useAsyncMemo"); var _SettingsSection = require("../settings/shared/SettingsSection"); var _SettingsTab = _interopRequireDefault(require("../settings/tabs/SettingsTab")); 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 2021-2023 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 SpaceSettingsVisibilityTab = ({ matrixClient: cli, space, closeSettingsFn }) => { const [error, setError] = (0, _react.useState)(""); const serverSupportsExploringSpaces = (0, _useAsyncMemo.useAsyncMemo)(async () => { return cli.isVersionSupported("v1.4").then(supported => { return supported || cli.doesServerSupportUnstableFeature("org.matrix.msc3827.stable"); }); }, [cli], false); const userId = cli.getUserId(); const joinRule = (0, _useRoomState.useRoomState)(space, state => state.getJoinRule()); const [guestAccessEnabled, setGuestAccessEnabled] = (0, _useLocalEcho.useLocalEcho)(() => space.currentState.getStateEvents(_matrix.EventType.RoomGuestAccess, "")?.getContent()?.guest_access === _matrix.GuestAccess.CanJoin, guestAccessEnabled => cli.sendStateEvent(space.roomId, _matrix.EventType.RoomGuestAccess, { guest_access: guestAccessEnabled ? _matrix.GuestAccess.CanJoin : _matrix.GuestAccess.Forbidden }, ""), () => setError((0, _languageHandler._t)("room_settings|visibility|error_update_guest_access"))); const [historyVisibility, setHistoryVisibility] = (0, _useLocalEcho.useLocalEcho)(() => space.currentState.getStateEvents(_matrix.EventType.RoomHistoryVisibility, "")?.getContent()?.history_visibility || _matrix.HistoryVisibility.Shared, historyVisibility => cli.sendStateEvent(space.roomId, _matrix.EventType.RoomHistoryVisibility, { history_visibility: historyVisibility }, ""), () => setError((0, _languageHandler._t)("room_settings|visibility|error_update_history_visibility"))); const [showAdvancedSection, toggleAdvancedSection] = (0, _useStateToggle.useStateToggle)(); const canSetGuestAccess = space.currentState.maySendStateEvent(_matrix.EventType.RoomGuestAccess, userId); const canSetHistoryVisibility = space.currentState.maySendStateEvent(_matrix.EventType.RoomHistoryVisibility, userId); const canSetCanonical = space.currentState.mayClientSendStateEvent(_matrix.EventType.RoomCanonicalAlias, cli); const canonicalAliasEv = space.currentState.getStateEvents(_matrix.EventType.RoomCanonicalAlias, ""); let advancedSection; if (joinRule === _matrix.JoinRule.Public) { advancedSection = /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { "data-testid": "toggle-guest-access-btn", onClick: toggleAdvancedSection, kind: "link", className: "mx_SettingsTab_showAdvanced", "aria-expanded": showAdvancedSection }, showAdvancedSection ? (0, _languageHandler._t)("action|hide_advanced") : (0, _languageHandler._t)("action|show_advanced")), showAdvancedSection && /*#__PURE__*/_react.default.createElement("div", { className: "mx_SettingsTab_toggleWithDescription" }, /*#__PURE__*/_react.default.createElement(_LabelledToggleSwitch.default, { value: guestAccessEnabled, onChange: setGuestAccessEnabled, disabled: !canSetGuestAccess, label: (0, _languageHandler._t)("room_settings|visibility|guest_access_label") }), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("room_settings|visibility|guest_access_explainer"), /*#__PURE__*/_react.default.createElement("br", null), (0, _languageHandler._t)("room_settings|visibility|guest_access_explainer_public_space")))); } let addressesSection; if (space.getJoinRule() === _matrix.JoinRule.Public) { addressesSection = /*#__PURE__*/_react.default.createElement(_SettingsSection.SettingsSection, { heading: (0, _languageHandler._t)("room_settings|visibility|alias_section") }, /*#__PURE__*/_react.default.createElement(_AliasSettings.default, { roomId: space.roomId, canSetCanonicalAlias: canSetCanonical, canSetAliases: true, canonicalAliasEvent: canonicalAliasEv ?? undefined, hidePublishSetting: !serverSupportsExploringSpaces })); } return /*#__PURE__*/_react.default.createElement(_SettingsTab.default, null, /*#__PURE__*/_react.default.createElement(_SettingsSection.SettingsSection, { heading: (0, _languageHandler._t)("room_settings|visibility|title") }, error && /*#__PURE__*/_react.default.createElement("div", { "data-testid": "space-settings-error", className: "mx_SpaceRoomView_errorText" }, error), /*#__PURE__*/_react.default.createElement(_SettingsFieldset.default, { "data-testid": "access-fieldset", legend: (0, _languageHandler._t)("room_settings|access|title"), description: (0, _languageHandler._t)("room_settings|access|description_space", { spaceName: space.name }) }, /*#__PURE__*/_react.default.createElement(_JoinRuleSettings.default, { room: space, onError: () => setError((0, _languageHandler._t)("room_settings|visibility|error_failed_save")), closeSettingsFn: closeSettingsFn }), advancedSection, /*#__PURE__*/_react.default.createElement("div", { className: "mx_SettingsTab_toggleWithDescription" }, /*#__PURE__*/_react.default.createElement(_LabelledToggleSwitch.default, { value: historyVisibility === _matrix.HistoryVisibility.WorldReadable, onChange: checked => { setHistoryVisibility(checked ? _matrix.HistoryVisibility.WorldReadable : _matrix.HistoryVisibility.Shared); }, disabled: !canSetHistoryVisibility, label: (0, _languageHandler._t)("room_settings|visibility|history_visibility_anyone_space") }), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("room_settings|visibility|history_visibility_anyone_space_description"), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("strong", null, (0, _languageHandler._t)("room_settings|visibility|history_visibility_anyone_space_recommendation"))))), addressesSection)); }; var _default = exports.default = SpaceSettingsVisibilityTab; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX2xhbmd1YWdlSGFuZGxlciIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9BbGlhc1NldHRpbmdzIiwiX3VzZVN0YXRlVG9nZ2xlIiwiX0xhYmVsbGVkVG9nZ2xlU3dpdGNoIiwiX3VzZUxvY2FsRWNobyIsIl9Kb2luUnVsZVNldHRpbmdzIiwiX3VzZVJvb21TdGF0ZSIsIl9TZXR0aW5nc0ZpZWxkc2V0IiwiX3VzZUFzeW5jTWVtbyIsIl9TZXR0aW5nc1NlY3Rpb24iLCJfU2V0dGluZ3NUYWIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTcGFjZVNldHRpbmdzVmlzaWJpbGl0eVRhYiIsIm1hdHJpeENsaWVudCIsImNsaSIsInNwYWNlIiwiY2xvc2VTZXR0aW5nc0ZuIiwiZXJyb3IiLCJzZXRFcnJvciIsInVzZVN0YXRlIiwic2VydmVyU3VwcG9ydHNFeHBsb3JpbmdTcGFjZXMiLCJ1c2VBc3luY01lbW8iLCJpc1ZlcnNpb25TdXBwb3J0ZWQiLCJ0aGVuIiwic3VwcG9ydGVkIiwiZG9lc1NlcnZlclN1cHBvcnRVbnN0YWJsZUZlYXR1cmUiLCJ1c2VySWQiLCJnZXRVc2VySWQiLCJqb2luUnVsZSIsInVzZVJvb21TdGF0ZSIsInN0YXRlIiwiZ2V0Sm9pblJ1bGUiLCJndWVzdEFjY2Vzc0VuYWJsZWQiLCJzZXRHdWVzdEFjY2Vzc0VuYWJsZWQiLCJ1c2VMb2NhbEVjaG8iLCJjdXJyZW50U3RhdGUiLCJnZXRTdGF0ZUV2ZW50cyIsIkV2ZW50VHlwZSIsIlJvb21HdWVzdEFjY2VzcyIsImdldENvbnRlbnQiLCJndWVzdF9hY2Nlc3MiLCJHdWVzdEFjY2VzcyIsIkNhbkpvaW4iLCJzZW5kU3RhdGVFdmVudCIsInJvb21JZCIsIkZvcmJpZGRlbiIsIl90IiwiaGlzdG9yeVZpc2liaWxpdHkiLCJzZXRIaXN0b3J5VmlzaWJpbGl0eSIsIlJvb21IaXN0b3J5VmlzaWJpbGl0eSIsImhpc3RvcnlfdmlzaWJpbGl0eSIsIkhpc3RvcnlWaXNpYmlsaXR5IiwiU2hhcmVkIiwic2hvd0FkdmFuY2VkU2VjdGlvbiIsInRvZ2dsZUFkdmFuY2VkU2VjdGlvbiIsInVzZVN0YXRlVG9nZ2xlIiwiY2FuU2V0R3Vlc3RBY2Nlc3MiLCJtYXlTZW5kU3RhdGVFdmVudCIsImNhblNldEhpc3RvcnlWaXNpYmlsaXR5IiwiY2FuU2V0Q2Fub25pY2FsIiwibWF5Q2xpZW50U2VuZFN0YXRlRXZlbnQiLCJSb29tQ2Fub25pY2FsQWxpYXMiLCJjYW5vbmljYWxBbGlhc0V2IiwiYWR2YW5jZWRTZWN0aW9uIiwiSm9pblJ1bGUiLCJQdWJsaWMiLCJjcmVhdGVFbGVtZW50Iiwib25DbGljayIsImtpbmQiLCJjbGFzc05hbWUiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwiZGlzYWJsZWQiLCJsYWJlbCIsImFkZHJlc3Nlc1NlY3Rpb24iLCJTZXR0aW5nc1NlY3Rpb24iLCJoZWFkaW5nIiwiY2FuU2V0Q2Fub25pY2FsQWxpYXMiLCJjYW5TZXRBbGlhc2VzIiwiY2Fub25pY2FsQWxpYXNFdmVudCIsInVuZGVmaW5lZCIsImhpZGVQdWJsaXNoU2V0dGluZyIsImxlZ2VuZCIsImRlc2NyaXB0aW9uIiwic3BhY2VOYW1lIiwibmFtZSIsInJvb20iLCJvbkVycm9yIiwiV29ybGRSZWFkYWJsZSIsImNoZWNrZWQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9zcGFjZXMvU3BhY2VTZXR0aW5nc1Zpc2liaWxpdHlUYWIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIxLTIwMjMgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBSb29tLCBFdmVudFR5cGUsIEd1ZXN0QWNjZXNzLCBIaXN0b3J5VmlzaWJpbGl0eSwgSm9pblJ1bGUsIE1hdHJpeENsaWVudCB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcblxuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IEFsaWFzU2V0dGluZ3MgZnJvbSBcIi4uL3Jvb21fc2V0dGluZ3MvQWxpYXNTZXR0aW5nc1wiO1xuaW1wb3J0IHsgdXNlU3RhdGVUb2dnbGUgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlU3RhdGVUb2dnbGVcIjtcbmltcG9ydCBMYWJlbGxlZFRvZ2dsZVN3aXRjaCBmcm9tIFwiLi4vZWxlbWVudHMvTGFiZWxsZWRUb2dnbGVTd2l0Y2hcIjtcbmltcG9ydCB7IHVzZUxvY2FsRWNobyB9IGZyb20gXCIuLi8uLi8uLi9ob29rcy91c2VMb2NhbEVjaG9cIjtcbmltcG9ydCBKb2luUnVsZVNldHRpbmdzIGZyb20gXCIuLi9zZXR0aW5ncy9Kb2luUnVsZVNldHRpbmdzXCI7XG5pbXBvcnQgeyB1c2VSb29tU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlUm9vbVN0YXRlXCI7XG5pbXBvcnQgU2V0dGluZ3NGaWVsZHNldCBmcm9tIFwiLi4vc2V0dGluZ3MvU2V0dGluZ3NGaWVsZHNldFwiO1xuaW1wb3J0IHsgdXNlQXN5bmNNZW1vIH0gZnJvbSBcIi4uLy4uLy4uL2hvb2tzL3VzZUFzeW5jTWVtb1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NTZWN0aW9uIH0gZnJvbSBcIi4uL3NldHRpbmdzL3NoYXJlZC9TZXR0aW5nc1NlY3Rpb25cIjtcbmltcG9ydCBTZXR0aW5nc1RhYiBmcm9tIFwiLi4vc2V0dGluZ3MvdGFicy9TZXR0aW5nc1RhYlwiO1xuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudDtcbiAgICBzcGFjZTogUm9vbTtcbiAgICBjbG9zZVNldHRpbmdzRm4oKTogdm9pZDtcbn1cblxuY29uc3QgU3BhY2VTZXR0aW5nc1Zpc2liaWxpdHlUYWI6IFJlYWN0LkZDPElQcm9wcz4gPSAoeyBtYXRyaXhDbGllbnQ6IGNsaSwgc3BhY2UsIGNsb3NlU2V0dGluZ3NGbiB9KSA9PiB7XG4gICAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgICBjb25zdCBzZXJ2ZXJTdXBwb3J0c0V4cGxvcmluZ1NwYWNlcyA9IHVzZUFzeW5jTWVtbzxib29sZWFuPihcbiAgICAgICAgYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNsaS5pc1ZlcnNpb25TdXBwb3J0ZWQoXCJ2MS40XCIpLnRoZW4oKHN1cHBvcnRlZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWQgfHwgY2xpLmRvZXNTZXJ2ZXJTdXBwb3J0VW5zdGFibGVGZWF0dXJlKFwib3JnLm1hdHJpeC5tc2MzODI3LnN0YWJsZVwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBbY2xpXSxcbiAgICAgICAgZmFsc2UsXG4gICAgKTtcblxuICAgIGNvbnN0IHVzZXJJZCA9IGNsaS5nZXRVc2VySWQoKSE7XG5cbiAgICBjb25zdCBqb2luUnVsZSA9IHVzZVJvb21TdGF0ZShzcGFjZSwgKHN0YXRlKSA9PiBzdGF0ZS5nZXRKb2luUnVsZSgpKTtcbiAgICBjb25zdCBbZ3Vlc3RBY2Nlc3NFbmFibGVkLCBzZXRHdWVzdEFjY2Vzc0VuYWJsZWRdID0gdXNlTG9jYWxFY2hvPGJvb2xlYW4+KFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgc3BhY2UuY3VycmVudFN0YXRlLmdldFN0YXRlRXZlbnRzKEV2ZW50VHlwZS5Sb29tR3Vlc3RBY2Nlc3MsIFwiXCIpPy5nZXRDb250ZW50KCk/Lmd1ZXN0X2FjY2VzcyA9PT1cbiAgICAgICAgICAgIEd1ZXN0QWNjZXNzLkNhbkpvaW4sXG4gICAgICAgIChndWVzdEFjY2Vzc0VuYWJsZWQpID0+XG4gICAgICAgICAgICBjbGkuc2VuZFN0YXRlRXZlbnQoXG4gICAgICAgICAgICAgICAgc3BhY2Uucm9vbUlkLFxuICAgICAgICAgICAgICAgIEV2ZW50VHlwZS5Sb29tR3Vlc3RBY2Nlc3MsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBndWVzdF9hY2Nlc3M6IGd1ZXN0QWNjZXNzRW5hYmxlZCA/IEd1ZXN0QWNjZXNzLkNhbkpvaW4gOiBHdWVzdEFjY2Vzcy5Gb3JiaWRkZW4sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKCkgPT4gc2V0RXJyb3IoX3QoXCJyb29tX3NldHRpbmdzfHZpc2liaWxpdHl8ZXJyb3JfdXBkYXRlX2d1ZXN0X2FjY2Vzc1wiKSksXG4gICAgKTtcbiAgICBjb25zdCBbaGlzdG9yeVZpc2liaWxpdHksIHNldEhpc3RvcnlWaXNpYmlsaXR5XSA9IHVzZUxvY2FsRWNobzxIaXN0b3J5VmlzaWJpbGl0eT4oXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICBzcGFjZS5jdXJyZW50U3RhdGUuZ2V0U3RhdGVFdmVudHMoRXZlbnRUeXBlLlJvb21IaXN0b3J5VmlzaWJpbGl0eSwgXCJcIik/LmdldENvbnRlbnQoKT8uaGlzdG9yeV92aXNpYmlsaXR5IHx8XG4gICAgICAgICAgICBIaXN0b3J5VmlzaWJpbGl0eS5TaGFyZWQsXG4gICAgICAgIChoaXN0b3J5VmlzaWJpbGl0eSkgPT5cbiAgICAgICAgICAgIGNsaS5zZW5kU3RhdGVFdmVudChcbiAgICAgICAgICAgICAgICBzcGFjZS5yb29tSWQsXG4gICAgICAgICAgICAgICAgRXZlbnRUeXBlLlJvb21IaXN0b3J5VmlzaWJpbGl0eSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGhpc3RvcnlfdmlzaWJpbGl0eTogaGlzdG9yeVZpc2liaWxpdHksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKCkgPT4gc2V0RXJyb3IoX3QoXCJyb29tX3NldHRpbmdzfHZpc2liaWxpdHl8ZXJyb3JfdXBkYXRlX2hpc3RvcnlfdmlzaWJpbGl0eVwiKSksXG4gICAgKTtcblxuICAgIGNvbnN0IFtzaG93QWR2YW5jZWRTZWN0aW9uLCB0b2dnbGVBZHZhbmNlZFNlY3Rpb25dID0gdXNlU3RhdGVUb2dnbGUoKTtcblxuICAgIGNvbnN0IGNhblNldEd1ZXN0QWNjZXNzID0gc3BhY2UuY3VycmVudFN0YXRlLm1heVNlbmRTdGF0ZUV2ZW50KEV2ZW50VHlwZS5Sb29tR3Vlc3RBY2Nlc3MsIHVzZXJJZCk7XG4gICAgY29uc3QgY2FuU2V0SGlzdG9yeVZpc2liaWxpdHkgPSBzcGFjZS5jdXJyZW50U3RhdGUubWF5U2VuZFN0YXRlRXZlbnQoRXZlbnRUeXBlLlJvb21IaXN0b3J5VmlzaWJpbGl0eSwgdXNlcklkKTtcbiAgICBjb25zdCBjYW5TZXRDYW5vbmljYWwgPSBzcGFjZS5jdXJyZW50U3RhdGUubWF5Q2xpZW50U2VuZFN0YXRlRXZlbnQoRXZlbnRUeXBlLlJvb21DYW5vbmljYWxBbGlhcywgY2xpKTtcbiAgICBjb25zdCBjYW5vbmljYWxBbGlhc0V2ID0gc3BhY2UuY3VycmVudFN0YXRlLmdldFN0YXRlRXZlbnRzKEV2ZW50VHlwZS5Sb29tQ2Fub25pY2FsQWxpYXMsIFwiXCIpO1xuXG4gICAgbGV0IGFkdmFuY2VkU2VjdGlvbjtcbiAgICBpZiAoam9pblJ1bGUgPT09IEpvaW5SdWxlLlB1YmxpYykge1xuICAgICAgICBhZHZhbmNlZFNlY3Rpb24gPSAoXG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwidG9nZ2xlLWd1ZXN0LWFjY2Vzcy1idG5cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVBZHZhbmNlZFNlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ9XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfU2V0dGluZ3NUYWJfc2hvd0FkdmFuY2VkXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17c2hvd0FkdmFuY2VkU2VjdGlvbn1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtzaG93QWR2YW5jZWRTZWN0aW9uID8gX3QoXCJhY3Rpb258aGlkZV9hZHZhbmNlZFwiKSA6IF90KFwiYWN0aW9ufHNob3dfYWR2YW5jZWRcIil9XG4gICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuXG4gICAgICAgICAgICAgICAge3Nob3dBZHZhbmNlZFNlY3Rpb24gJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NldHRpbmdzVGFiX3RvZ2dsZVdpdGhEZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsbGVkVG9nZ2xlU3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2d1ZXN0QWNjZXNzRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0R3Vlc3RBY2Nlc3NFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2FuU2V0R3Vlc3RBY2Nlc3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e190KFwicm9vbV9zZXR0aW5nc3x2aXNpYmlsaXR5fGd1ZXN0X2FjY2Vzc19sYWJlbFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJyb29tX3NldHRpbmdzfHZpc2liaWxpdHl8Z3Vlc3RfYWNjZXNzX2V4cGxhaW5lclwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJyb29tX3NldHRpbmdzfHZpc2liaWxpdHl8Z3Vlc3RfYWNjZXNzX2V4cGxhaW5lcl9wdWJsaWNfc3BhY2VcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgYWRkcmVzc2VzU2VjdGlvbjogSlNYLkVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHNwYWNlLmdldEpvaW5SdWxlKCkgPT09IEpvaW5SdWxlLlB1YmxpYykge1xuICAgICAgICBhZGRyZXNzZXNTZWN0aW9uID0gKFxuICAgICAgICAgICAgPFNldHRpbmdzU2VjdGlvbiBoZWFkaW5nPXtfdChcInJvb21fc2V0dGluZ3N8dmlzaWJpbGl0eXxhbGlhc19zZWN0aW9uXCIpfT5cbiAgICAgICAgICAgICAgICA8QWxpYXNTZXR0aW5nc1xuICAgICAgICAgICAgICAgICAgICByb29tSWQ9e3NwYWNlLnJvb21JZH1cbiAgICAgICAgICAgICAgICAgICAgY2FuU2V0Q2Fub25pY2FsQWxpYXM9e2NhblNldENhbm9uaWNhbH1cbiAgICAgICAgICAgICAgICAgICAgY2FuU2V0QWxpYXNlcz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgY2Fub25pY2FsQWxpYXNFdmVudD17Y2Fub25pY2FsQWxpYXNFdiA/PyB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgIGhpZGVQdWJsaXNoU2V0dGluZz17IXNlcnZlclN1cHBvcnRzRXhwbG9yaW5nU3BhY2VzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1NldHRpbmdzU2VjdGlvbj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8U2V0dGluZ3NUYWI+XG4gICAgICAgICAgICA8U2V0dGluZ3NTZWN0aW9uIGhlYWRpbmc9e190KFwicm9vbV9zZXR0aW5nc3x2aXNpYmlsaXR5fHRpdGxlXCIpfT5cbiAgICAgICAgICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwic3BhY2Utc2V0dGluZ3MtZXJyb3JcIiBjbGFzc05hbWU9XCJteF9TcGFjZVJvb21WaWV3X2Vycm9yVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2Vycm9yfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgPFNldHRpbmdzRmllbGRzZXRcbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJhY2Nlc3MtZmllbGRzZXRcIlxuICAgICAgICAgICAgICAgICAgICBsZWdlbmQ9e190KFwicm9vbV9zZXR0aW5nc3xhY2Nlc3N8dGl0bGVcIil9XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtfdChcInJvb21fc2V0dGluZ3N8YWNjZXNzfGRlc2NyaXB0aW9uX3NwYWNlXCIsIHsgc3BhY2VOYW1lOiBzcGFjZS5uYW1lIH0pfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEpvaW5SdWxlU2V0dGluZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb209e3NwYWNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvcj17KCk6IHZvaWQgPT4gc2V0RXJyb3IoX3QoXCJyb29tX3NldHRpbmdzfHZpc2liaWxpdHl8ZXJyb3JfZmFpbGVkX3NhdmVcIikpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VTZXR0aW5nc0ZuPXtjbG9zZVNldHRpbmdzRm59XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIHthZHZhbmNlZFNlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfU2V0dGluZ3NUYWJfdG9nZ2xlV2l0aERlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWxsZWRUb2dnbGVTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aGlzdG9yeVZpc2liaWxpdHkgPT09IEhpc3RvcnlWaXNpYmlsaXR5LldvcmxkUmVhZGFibGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhjaGVja2VkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEhpc3RvcnlWaXNpYmlsaXR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA/IEhpc3RvcnlWaXNpYmlsaXR5LldvcmxkUmVhZGFibGUgOiBIaXN0b3J5VmlzaWJpbGl0eS5TaGFyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNhblNldEhpc3RvcnlWaXNpYmlsaXR5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcInJvb21fc2V0dGluZ3N8dmlzaWJpbGl0eXxoaXN0b3J5X3Zpc2liaWxpdHlfYW55b25lX3NwYWNlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcInJvb21fc2V0dGluZ3N8dmlzaWJpbGl0eXxoaXN0b3J5X3Zpc2liaWxpdHlfYW55b25lX3NwYWNlX2Rlc2NyaXB0aW9uXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcInJvb21fc2V0dGluZ3N8dmlzaWJpbGl0eXxoaXN0b3J5X3Zpc2liaWxpdHlfYW55b25lX3NwYWNlX3JlY29tbWVuZGF0aW9uXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1NldHRpbmdzRmllbGRzZXQ+XG5cbiAgICAgICAgICAgICAgICB7YWRkcmVzc2VzU2VjdGlvbn1cbiAgICAgICAgICAgIDwvU2V0dGluZ3NTZWN0aW9uPlxuICAgICAgICA8L1NldHRpbmdzVGFiPlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTcGFjZVNldHRpbmdzVmlzaWJpbGl0eVRhYjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtB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