matrix-react-sdk
Version:
SDK for matrix.org using React
123 lines (120 loc) • 23.5 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GenericDropdownMenu = GenericDropdownMenu;
exports.GenericDropdownMenuGroup = GenericDropdownMenuGroup;
exports.GenericDropdownMenuOption = GenericDropdownMenuOption;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classnames = _interopRequireDefault(require("classnames"));
var _react = _interopRequireDefault(require("react"));
var _MenuItemRadio = require("../../accessibility/context_menu/MenuItemRadio");
var _ContextMenu = _interopRequireWildcard(require("./ContextMenu"));
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.
*/
function GenericDropdownMenuOption({
label,
description,
onClick,
isSelected,
adornment
}) {
return /*#__PURE__*/_react.default.createElement(_MenuItemRadio.MenuItemRadio, {
active: isSelected,
className: "mx_GenericDropdownMenu_Option mx_GenericDropdownMenu_Option--item",
onClick: onClick
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_GenericDropdownMenu_Option--label"
}, /*#__PURE__*/_react.default.createElement("span", null, label), /*#__PURE__*/_react.default.createElement("span", null, description)), adornment);
}
function GenericDropdownMenuGroup({
label,
description,
adornment,
children
}) {
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_GenericDropdownMenu_Option mx_GenericDropdownMenu_Option--header"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_GenericDropdownMenu_Option--label"
}, /*#__PURE__*/_react.default.createElement("span", null, label), /*#__PURE__*/_react.default.createElement("span", null, description)), adornment), children);
}
function isGenericDropdownMenuGroupArray(items) {
return isGenericDropdownMenuGroup(items[0]);
}
function isGenericDropdownMenuGroup(item) {
return "options" in item;
}
function GenericDropdownMenu({
value,
onChange,
options,
selectedLabel,
onOpen,
onClose,
toKey,
className,
AdditionalOptions
}) {
const [menuDisplayed, button, openMenu, closeMenu] = (0, _ContextMenu.useContextMenu)();
const selected = options.flatMap(it => isGenericDropdownMenuGroup(it) ? [it, ...it.options] : [it]).find(option => toKey ? toKey(option.key) === toKey(value) : option.key === value);
let contextMenuOptions;
if (options && isGenericDropdownMenuGroupArray(options)) {
contextMenuOptions = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, options.map(group => /*#__PURE__*/_react.default.createElement(GenericDropdownMenuGroup, {
key: toKey?.(group.key) ?? group.key,
label: group.label,
description: group.description,
adornment: group.adornment
}, group.options.map(option => /*#__PURE__*/_react.default.createElement(GenericDropdownMenuOption, {
key: toKey?.(option.key) ?? option.key,
label: option.label,
description: option.description,
onClick: ev => {
onChange(option.key);
closeMenu();
onClose?.(ev);
},
adornment: option.adornment,
isSelected: option === selected
})))));
} else {
contextMenuOptions = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, options.map(option => /*#__PURE__*/_react.default.createElement(GenericDropdownMenuOption, {
key: toKey?.(option.key) ?? option.key,
label: option.label,
description: option.description,
onClick: ev => {
onChange(option.key);
closeMenu();
onClose?.(ev);
},
adornment: option.adornment,
isSelected: option === selected
})));
}
const contextMenu = menuDisplayed && button.current ? /*#__PURE__*/_react.default.createElement(_ContextMenu.default, (0, _extends2.default)({
onFinished: closeMenu,
chevronFace: _ContextMenu.ChevronFace.Top,
wrapperClassName: (0, _classnames.default)("mx_GenericDropdownMenu_wrapper", className)
}, (0, _ContextMenu.aboveLeftOf)(button.current.getBoundingClientRect())), contextMenuOptions, AdditionalOptions && /*#__PURE__*/_react.default.createElement(AdditionalOptions, {
menuDisplayed: menuDisplayed,
openMenu: openMenu,
closeMenu: closeMenu
})) : null;
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ContextMenu.ContextMenuButton, {
className: "mx_GenericDropdownMenu_button",
ref: button,
isExpanded: menuDisplayed,
onClick: ev => {
openMenu();
onOpen?.(ev);
}
}, selectedLabel(selected)), contextMenu);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX01lbnVJdGVtUmFkaW8iLCJfQ29udGV4dE1lbnUiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIkdlbmVyaWNEcm9wZG93bk1lbnVPcHRpb24iLCJsYWJlbCIsImRlc2NyaXB0aW9uIiwib25DbGljayIsImlzU2VsZWN0ZWQiLCJhZG9ybm1lbnQiLCJjcmVhdGVFbGVtZW50IiwiTWVudUl0ZW1SYWRpbyIsImFjdGl2ZSIsImNsYXNzTmFtZSIsIkdlbmVyaWNEcm9wZG93bk1lbnVHcm91cCIsImNoaWxkcmVuIiwiRnJhZ21lbnQiLCJpc0dlbmVyaWNEcm9wZG93bk1lbnVHcm91cEFycmF5IiwiaXRlbXMiLCJpc0dlbmVyaWNEcm9wZG93bk1lbnVHcm91cCIsIml0ZW0iLCJHZW5lcmljRHJvcGRvd25NZW51IiwidmFsdWUiLCJvbkNoYW5nZSIsIm9wdGlvbnMiLCJzZWxlY3RlZExhYmVsIiwib25PcGVuIiwib25DbG9zZSIsInRvS2V5IiwiQWRkaXRpb25hbE9wdGlvbnMiLCJtZW51RGlzcGxheWVkIiwiYnV0dG9uIiwib3Blbk1lbnUiLCJjbG9zZU1lbnUiLCJ1c2VDb250ZXh0TWVudSIsInNlbGVjdGVkIiwiZmxhdE1hcCIsIml0IiwiZmluZCIsIm9wdGlvbiIsImtleSIsImNvbnRleHRNZW51T3B0aW9ucyIsIm1hcCIsImdyb3VwIiwiZXYiLCJjb250ZXh0TWVudSIsImN1cnJlbnQiLCJfZXh0ZW5kczIiLCJvbkZpbmlzaGVkIiwiY2hldnJvbkZhY2UiLCJDaGV2cm9uRmFjZSIsIlRvcCIsIndyYXBwZXJDbGFzc05hbWUiLCJjbGFzc05hbWVzIiwiYWJvdmVMZWZ0T2YiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJDb250ZXh0TWVudUJ1dHRvbiIsInJlZiIsImlzRXhwYW5kZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zdHJ1Y3R1cmVzL0dlbmVyaWNEcm9wZG93bk1lbnUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIyIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgRnVuY3Rpb25Db21wb25lbnQsIEtleSwgUHJvcHNXaXRoQ2hpbGRyZW4sIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBNZW51SXRlbVJhZGlvIH0gZnJvbSBcIi4uLy4uL2FjY2Vzc2liaWxpdHkvY29udGV4dF9tZW51L01lbnVJdGVtUmFkaW9cIjtcbmltcG9ydCB7IEJ1dHRvbkV2ZW50IH0gZnJvbSBcIi4uL3ZpZXdzL2VsZW1lbnRzL0FjY2Vzc2libGVCdXR0b25cIjtcbmltcG9ydCBDb250ZXh0TWVudSwgeyBhYm92ZUxlZnRPZiwgQ2hldnJvbkZhY2UsIENvbnRleHRNZW51QnV0dG9uLCB1c2VDb250ZXh0TWVudSB9IGZyb20gXCIuL0NvbnRleHRNZW51XCI7XG5cbmV4cG9ydCB0eXBlIEdlbmVyaWNEcm9wZG93bk1lbnVPcHRpb248VD4gPSB7XG4gICAga2V5OiBUO1xuICAgIGxhYmVsOiBSZWFjdE5vZGU7XG4gICAgZGVzY3JpcHRpb24/OiBSZWFjdE5vZGU7XG4gICAgYWRvcm5tZW50PzogUmVhY3ROb2RlO1xufTtcblxuZXhwb3J0IHR5cGUgR2VuZXJpY0Ryb3Bkb3duTWVudUdyb3VwPFQ+ID0gR2VuZXJpY0Ryb3Bkb3duTWVudU9wdGlvbjxUPiAmIHtcbiAgICBvcHRpb25zOiBHZW5lcmljRHJvcGRvd25NZW51T3B0aW9uPFQ+W107XG59O1xuXG5leHBvcnQgdHlwZSBHZW5lcmljRHJvcGRvd25NZW51SXRlbTxUPiA9IEdlbmVyaWNEcm9wZG93bk1lbnVHcm91cDxUPiB8IEdlbmVyaWNEcm9wZG93bk1lbnVPcHRpb248VD47XG5cbmV4cG9ydCBmdW5jdGlvbiBHZW5lcmljRHJvcGRvd25NZW51T3B0aW9uPFQgZXh0ZW5kcyBLZXk+KHtcbiAgICBsYWJlbCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBvbkNsaWNrLFxuICAgIGlzU2VsZWN0ZWQsXG4gICAgYWRvcm5tZW50LFxufTogR2VuZXJpY0Ryb3Bkb3duTWVudU9wdGlvbjxUPiAmIHtcbiAgICBvbkNsaWNrOiAoZXY6IEJ1dHRvbkV2ZW50KSA9PiB2b2lkO1xuICAgIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxNZW51SXRlbVJhZGlvXG4gICAgICAgICAgICBhY3RpdmU9e2lzU2VsZWN0ZWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJteF9HZW5lcmljRHJvcGRvd25NZW51X09wdGlvbiBteF9HZW5lcmljRHJvcGRvd25NZW51X09wdGlvbi0taXRlbVwiXG4gICAgICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X0dlbmVyaWNEcm9wZG93bk1lbnVfT3B0aW9uLS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPntsYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+e2Rlc2NyaXB0aW9ufTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge2Fkb3JubWVudH1cbiAgICAgICAgPC9NZW51SXRlbVJhZGlvPlxuICAgICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBHZW5lcmljRHJvcGRvd25NZW51R3JvdXA8VCBleHRlbmRzIEtleT4oe1xuICAgIGxhYmVsLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGFkb3JubWVudCxcbiAgICBjaGlsZHJlbixcbn06IFByb3BzV2l0aENoaWxkcmVuPEdlbmVyaWNEcm9wZG93bk1lbnVPcHRpb248VD4+KTogSlNYLkVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X0dlbmVyaWNEcm9wZG93bk1lbnVfT3B0aW9uIG14X0dlbmVyaWNEcm9wZG93bk1lbnVfT3B0aW9uLS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X0dlbmVyaWNEcm9wZG93bk1lbnVfT3B0aW9uLS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57bGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57ZGVzY3JpcHRpb259PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHthZG9ybm1lbnR9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gaXNHZW5lcmljRHJvcGRvd25NZW51R3JvdXBBcnJheTxUPihcbiAgICBpdGVtczogcmVhZG9ubHkgR2VuZXJpY0Ryb3Bkb3duTWVudUl0ZW08VD5bXSxcbik6IGl0ZW1zIGlzIEdlbmVyaWNEcm9wZG93bk1lbnVHcm91cDxUPltdIHtcbiAgICByZXR1cm4gaXNHZW5lcmljRHJvcGRvd25NZW51R3JvdXAoaXRlbXNbMF0pO1xufVxuXG5mdW5jdGlvbiBpc0dlbmVyaWNEcm9wZG93bk1lbnVHcm91cDxUPihpdGVtOiBHZW5lcmljRHJvcGRvd25NZW51SXRlbTxUPik6IGl0ZW0gaXMgR2VuZXJpY0Ryb3Bkb3duTWVudUdyb3VwPFQ+IHtcbiAgICByZXR1cm4gXCJvcHRpb25zXCIgaW4gaXRlbTtcbn1cblxudHlwZSBXaXRoS2V5RnVuY3Rpb248VD4gPSBUIGV4dGVuZHMgS2V5XG4gICAgPyB7XG4gICAgICAgICAgdG9LZXk/OiAoa2V5OiBUKSA9PiBLZXk7XG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgICAgdG9LZXk6IChrZXk6IFQpID0+IEtleTtcbiAgICAgIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkaXRpb25hbE9wdGlvbnNQcm9wcyB7XG4gICAgbWVudURpc3BsYXllZDogYm9vbGVhbjtcbiAgICBjbG9zZU1lbnU6ICgpID0+IHZvaWQ7XG4gICAgb3Blbk1lbnU6ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgSVByb3BzPFQ+ID0gV2l0aEtleUZ1bmN0aW9uPFQ+ICYge1xuICAgIHZhbHVlOiBUO1xuICAgIG9wdGlvbnM6IHJlYWRvbmx5IEdlbmVyaWNEcm9wZG93bk1lbnVPcHRpb248VD5bXSB8IHJlYWRvbmx5IEdlbmVyaWNEcm9wZG93bk1lbnVHcm91cDxUPltdO1xuICAgIG9uQ2hhbmdlOiAob3B0aW9uOiBUKSA9PiB2b2lkO1xuICAgIHNlbGVjdGVkTGFiZWw6IChvcHRpb246IEdlbmVyaWNEcm9wZG93bk1lbnVJdGVtPFQ+IHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4gUmVhY3ROb2RlO1xuICAgIG9uT3Blbj86IChldjogQnV0dG9uRXZlbnQpID0+IHZvaWQ7XG4gICAgb25DbG9zZT86IChldjogQnV0dG9uRXZlbnQpID0+IHZvaWQ7XG4gICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIEFkZGl0aW9uYWxPcHRpb25zPzogRnVuY3Rpb25Db21wb25lbnQ8QWRkaXRpb25hbE9wdGlvbnNQcm9wcz47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gR2VuZXJpY0Ryb3Bkb3duTWVudTxUPih7XG4gICAgdmFsdWUsXG4gICAgb25DaGFuZ2UsXG4gICAgb3B0aW9ucyxcbiAgICBzZWxlY3RlZExhYmVsLFxuICAgIG9uT3BlbixcbiAgICBvbkNsb3NlLFxuICAgIHRvS2V5LFxuICAgIGNsYXNzTmFtZSxcbiAgICBBZGRpdGlvbmFsT3B0aW9ucyxcbn06IElQcm9wczxUPik6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBbbWVudURpc3BsYXllZCwgYnV0dG9uLCBvcGVuTWVudSwgY2xvc2VNZW51XSA9IHVzZUNvbnRleHRNZW51PEhUTUxFbGVtZW50PigpO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWQ6IEdlbmVyaWNEcm9wZG93bk1lbnVJdGVtPFQ+IHwgdW5kZWZpbmVkID0gb3B0aW9uc1xuICAgICAgICAuZmxhdE1hcCgoaXQpID0+IChpc0dlbmVyaWNEcm9wZG93bk1lbnVHcm91cChpdCkgPyBbaXQsIC4uLml0Lm9wdGlvbnNdIDogW2l0XSkpXG4gICAgICAgIC5maW5kKChvcHRpb24pID0+ICh0b0tleSA/IHRvS2V5KG9wdGlvbi5rZXkpID09PSB0b0tleSh2YWx1ZSkgOiBvcHRpb24ua2V5ID09PSB2YWx1ZSkpO1xuICAgIGxldCBjb250ZXh0TWVudU9wdGlvbnM6IEpTWC5FbGVtZW50O1xuICAgIGlmIChvcHRpb25zICYmIGlzR2VuZXJpY0Ryb3Bkb3duTWVudUdyb3VwQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgY29udGV4dE1lbnVPcHRpb25zID0gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7b3B0aW9ucy5tYXAoKGdyb3VwKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxHZW5lcmljRHJvcGRvd25NZW51R3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17dG9LZXk/Lihncm91cC5rZXkpID8/IChncm91cC5rZXkgYXMgS2V5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtncm91cC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtncm91cC5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFkb3JubWVudD17Z3JvdXAuYWRvcm5tZW50fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z3JvdXAub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHZW5lcmljRHJvcGRvd25NZW51T3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17dG9LZXk/LihvcHRpb24ua2V5KSA/PyAob3B0aW9uLmtleSBhcyBLZXkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17b3B0aW9uLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZXY6IEJ1dHRvbkV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZShvcHRpb24ua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlTWVudSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZT8uKGV2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRvcm5tZW50PXtvcHRpb24uYWRvcm5tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtvcHRpb24gPT09IHNlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPC9HZW5lcmljRHJvcGRvd25NZW51R3JvdXA+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0TWVudU9wdGlvbnMgPSAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtvcHRpb25zLm1hcCgob3B0aW9uKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxHZW5lcmljRHJvcGRvd25NZW51T3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e3RvS2V5Py4ob3B0aW9uLmtleSkgPz8gKG9wdGlvbi5rZXkgYXMgS2V5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17b3B0aW9uLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGV2OiBCdXR0b25FdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKG9wdGlvbi5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlTWVudSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U/Lihldik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgYWRvcm5tZW50PXtvcHRpb24uYWRvcm5tZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZD17b3B0aW9uID09PSBzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cbiAgICBjb25zdCBjb250ZXh0TWVudSA9XG4gICAgICAgIG1lbnVEaXNwbGF5ZWQgJiYgYnV0dG9uLmN1cnJlbnQgPyAoXG4gICAgICAgICAgICA8Q29udGV4dE1lbnVcbiAgICAgICAgICAgICAgICBvbkZpbmlzaGVkPXtjbG9zZU1lbnV9XG4gICAgICAgICAgICAgICAgY2hldnJvbkZhY2U9e0NoZXZyb25GYWNlLlRvcH1cbiAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3NOYW1lPXtjbGFzc05hbWVzKFwibXhfR2VuZXJpY0Ryb3Bkb3duTWVudV93cmFwcGVyXCIsIGNsYXNzTmFtZSl9XG4gICAgICAgICAgICAgICAgey4uLmFib3ZlTGVmdE9mKGJ1dHRvbi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7Y29udGV4dE1lbnVPcHRpb25zfVxuICAgICAgICAgICAgICAgIHtBZGRpdGlvbmFsT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxBZGRpdGlvbmFsT3B0aW9ucyBtZW51RGlzcGxheWVkPXttZW51RGlzcGxheWVkfSBvcGVuTWVudT17b3Blbk1lbnV9IGNsb3NlTWVudT17Y2xvc2VNZW51fSAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0NvbnRleHRNZW51PlxuICAgICAgICApIDogbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAgPENvbnRleHRNZW51QnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfR2VuZXJpY0Ryb3Bkb3duTWVudV9idXR0b25cIlxuICAgICAgICAgICAgICAgIHJlZj17YnV0dG9ufVxuICAgICAgICAgICAgICAgIGlzRXhwYW5kZWQ9e21lbnVEaXNwbGF5ZWR9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KGV2OiBCdXR0b25FdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvcGVuTWVudSgpO1xuICAgICAgICAgICAgICAgICAgICBvbk9wZW4/Lihldik7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7c2VsZWN0ZWRMYWJlbChzZWxlY3RlZCl9XG4gICAgICAgICAgICA8L0NvbnRleHRNZW51QnV0dG9uPlxuICAgICAgICAgICAge2NvbnRleHRNZW51fVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBUUEsSUFBQUEsV0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUUsY0FBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsWUFBQSxHQUFBQyx1QkFBQSxDQUFBSixPQUFBO0FBQXlHLFNBQUFLLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFGLHdCQUFBRSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsV0FBQUssT0FBQSxFQUFBTCxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQsQ0FBQSxvQkFBQWMsQ0FBQSxPQUFBQyxjQUFB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