matrix-react-sdk
Version:
SDK for matrix.org using React
124 lines (120 loc) • 20.8 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _reactFocusLock = _interopRequireDefault(require("react-focus-lock"));
var _classnames = _interopRequireDefault(require("classnames"));
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _MatrixClientPeg = require("../../../MatrixClientPeg");
var _languageHandler = require("../../../languageHandler");
var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext"));
var _Heading = _interopRequireDefault(require("../typography/Heading"));
var _PosthogTrackers = require("../../../PosthogTrackers");
var _KeyBindingsManager = require("../../../KeyBindingsManager");
var _KeyboardShortcuts = require("../../../accessibility/KeyboardShortcuts");
/*
Copyright 2024 New Vector Ltd.
Copyright 2019 The Matrix.org Foundation C.I.C.
Copyright 2018, 2019 New Vector Ltd
Copyright 2017 Vector Creations Ltd
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
/*
* Basic container for modal dialogs.
*
* Includes a div for the title, and a keypress handler which cancels the
* dialog on escape.
*/
class BaseDialog extends _react.default.Component {
constructor(props) {
super(props);
// XXX: The contract on MatrixClientContext says it is only available within a LoggedInView subtree,
// given that modals function outside the MatrixChat React tree this simulates that. We don't want to
// use safeGet as it throwing would mean we cannot use modals whilst the user isn't logged in.
// The longer term solution is to move our ModalManager into the React tree to inherit contexts properly.
(0, _defineProperty2.default)(this, "matrixClient", void 0);
(0, _defineProperty2.default)(this, "onKeyDown", e => {
this.props.onKeyDown?.(e);
const action = (0, _KeyBindingsManager.getKeyBindingsManager)().getAccessibilityAction(e);
switch (action) {
case _KeyboardShortcuts.KeyBindingAction.Escape:
if (!this.props.hasCancel) break;
e.stopPropagation();
e.preventDefault();
this.props.onFinished();
break;
}
});
(0, _defineProperty2.default)(this, "onCancelClick", () => {
this.props.onFinished();
});
this.matrixClient = _MatrixClientPeg.MatrixClientPeg.get();
}
render() {
let cancelButton;
if (this.props.hasCancel) {
cancelButton = /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
onClick: this.onCancelClick,
className: "mx_Dialog_cancelButton",
"aria-label": (0, _languageHandler._t)("dialog_close_label"),
title: (0, _languageHandler._t)("action|close"),
placement: "bottom"
});
}
let headerImage;
if (this.props.headerImage) {
headerImage = /*#__PURE__*/_react.default.createElement("img", {
className: "mx_Dialog_titleImage",
src: this.props.headerImage,
alt: ""
});
}
const lockProps = {
"onKeyDown": this.onKeyDown,
"role": "dialog",
// This should point to a node describing the dialog.
// If we were about to completely follow this recommendation we'd need to
// make all the components relying on BaseDialog to be aware of it.
// So instead we will use the whole content as the description.
// Description comes first and if the content contains more text,
// AT users can skip its presentation.
"aria-describedby": this.props.contentId
};
if (this.props["aria-label"]) {
lockProps["aria-label"] = this.props["aria-label"];
} else {
lockProps["aria-labelledby"] = "mx_BaseDialog_title";
}
return /*#__PURE__*/_react.default.createElement(_MatrixClientContext.default.Provider, {
value: this.matrixClient
}, this.props.screenName && /*#__PURE__*/_react.default.createElement(_PosthogTrackers.PosthogScreenTracker, {
screenName: this.props.screenName
}), /*#__PURE__*/_react.default.createElement(_reactFocusLock.default, {
returnFocus: true,
lockProps: lockProps,
className: (0, _classnames.default)(this.props.className, {
mx_Dialog_fixedWidth: this.props.fixedWidth
})
}, this.props.top, /*#__PURE__*/_react.default.createElement("div", {
className: (0, _classnames.default)("mx_Dialog_header", {
mx_Dialog_headerWithButton: !!this.props.headerButton
})
}, !!(this.props.title || headerImage) && /*#__PURE__*/_react.default.createElement(_Heading.default, {
size: "3",
as: "h1",
className: (0, _classnames.default)("mx_Dialog_title", this.props.titleClass),
id: "mx_BaseDialog_title"
}, headerImage, this.props.title), this.props.headerButton), this.props.children, cancelButton));
}
}
exports.default = BaseDialog;
(0, _defineProperty2.default)(BaseDialog, "defaultProps", {
hasCancel: true,
fixedWidth: true
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdEZvY3VzTG9jayIsIl9jbGFzc25hbWVzIiwiX0FjY2Vzc2libGVCdXR0b24iLCJfTWF0cml4Q2xpZW50UGVnIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9NYXRyaXhDbGllbnRDb250ZXh0IiwiX0hlYWRpbmciLCJfUG9zdGhvZ1RyYWNrZXJzIiwiX0tleUJpbmRpbmdzTWFuYWdlciIsIl9LZXlib2FyZFNob3J0Y3V0cyIsIkJhc2VEaWFsb2ciLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsImUiLCJvbktleURvd24iLCJhY3Rpb24iLCJnZXRLZXlCaW5kaW5nc01hbmFnZXIiLCJnZXRBY2Nlc3NpYmlsaXR5QWN0aW9uIiwiS2V5QmluZGluZ0FjdGlvbiIsIkVzY2FwZSIsImhhc0NhbmNlbCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0Iiwib25GaW5pc2hlZCIsIm1hdHJpeENsaWVudCIsIk1hdHJpeENsaWVudFBlZyIsImdldCIsInJlbmRlciIsImNhbmNlbEJ1dHRvbiIsImNyZWF0ZUVsZW1lbnQiLCJvbkNsaWNrIiwib25DYW5jZWxDbGljayIsImNsYXNzTmFtZSIsIl90IiwidGl0bGUiLCJwbGFjZW1lbnQiLCJoZWFkZXJJbWFnZSIsInNyYyIsImFsdCIsImxvY2tQcm9wcyIsImNvbnRlbnRJZCIsIlByb3ZpZGVyIiwidmFsdWUiLCJzY3JlZW5OYW1lIiwiUG9zdGhvZ1NjcmVlblRyYWNrZXIiLCJyZXR1cm5Gb2N1cyIsImNsYXNzTmFtZXMiLCJteF9EaWFsb2dfZml4ZWRXaWR0aCIsImZpeGVkV2lkdGgiLCJ0b3AiLCJteF9EaWFsb2dfaGVhZGVyV2l0aEJ1dHRvbiIsImhlYWRlckJ1dHRvbiIsInNpemUiLCJhcyIsInRpdGxlQ2xhc3MiLCJpZCIsImNoaWxkcmVuIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvQmFzZURpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMTkgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cbkNvcHlyaWdodCAyMDE4LCAyMDE5IE5ldyBWZWN0b3IgTHRkXG5Db3B5cmlnaHQgMjAxNyBWZWN0b3IgQ3JlYXRpb25zIEx0ZFxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgRm9jdXNMb2NrIGZyb20gXCJyZWFjdC1mb2N1cy1sb2NrXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IHsgTWF0cml4Q2xpZW50IH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IHsgTWF0cml4Q2xpZW50UGVnIH0gZnJvbSBcIi4uLy4uLy4uL01hdHJpeENsaWVudFBlZ1wiO1xuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgTWF0cml4Q2xpZW50Q29udGV4dCBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IEhlYWRpbmcgZnJvbSBcIi4uL3R5cG9ncmFwaHkvSGVhZGluZ1wiO1xuaW1wb3J0IHsgUG9zdGhvZ1NjcmVlblRyYWNrZXIsIFNjcmVlbk5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vUG9zdGhvZ1RyYWNrZXJzXCI7XG5pbXBvcnQgeyBnZXRLZXlCaW5kaW5nc01hbmFnZXIgfSBmcm9tIFwiLi4vLi4vLi4vS2V5QmluZGluZ3NNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlCaW5kaW5nQWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2FjY2Vzc2liaWxpdHkvS2V5Ym9hcmRTaG9ydGN1dHNcIjtcblxuaW50ZXJmYWNlIElQcm9wcyB7XG4gICAgLy8gV2hldGhlciB0aGUgZGlhbG9nIHNob3VsZCBoYXZlIGEgJ2Nsb3NlJyBidXR0b24gdGhhdCB3aWxsXG4gICAgLy8gY2F1c2UgdGhlIGRpYWxvZyB0byBiZSBjYW5jZWxsZWQuIFRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0XG4gICAgLy8gdG8gZmFsc2UgaWYgdGhlcmUgaXMgbm90aGluZyB0aGUgYXBwIGNhbiBzZW5zaWJseSBkbyBpZiB0aGVcbiAgICAvLyBkaWFsb2cgaXMgY2FuY2VsbGVkLCBlZy4gXCJXZSBjYW4ndCByZXN0b3JlIHlvdXIgc2Vzc2lvbiBhbmRcbiAgICAvLyB0aGUgYXBwIGNhbm5vdCB3b3JrXCIuIERlZmF1bHQ6IHRydWUuXG4gICAgXCJoYXNDYW5jZWxcIj86IGJvb2xlYW47XG5cbiAgICAvLyBjYWxsZWQgd2hlbiBhIGtleSBpcyBwcmVzc2VkXG4gICAgXCJvbktleURvd25cIj86IChlOiBLZXlib2FyZEV2ZW50IHwgUmVhY3QuS2V5Ym9hcmRFdmVudCkgPT4gdm9pZDtcblxuICAgIC8vIENTUyBjbGFzcyB0byBhcHBseSB0byBkaWFsb2cgZGl2XG4gICAgXCJjbGFzc05hbWVcIj86IHN0cmluZztcblxuICAgIC8vIGlmIHRydWUsIGRpYWxvZyBjb250YWluZXIgaXMgNjAlIG9mIHRoZSB2aWV3cG9ydCB3aWR0aC4gT3RoZXJ3aXNlLFxuICAgIC8vIHRoZSBjb250YWluZXIgd2lsbCBoYXZlIG5vIGZpeGVkIHNpemUsIGFsbG93aW5nIGl0cyBjb250ZW50cyB0b1xuICAgIC8vIGRldGVybWluZSBpdHMgc2l6ZS4gRGVmYXVsdDogdHJ1ZS5cbiAgICBcImZpeGVkV2lkdGhcIj86IGJvb2xlYW47XG5cbiAgICAvLyBUbyBiZSBkaXNwbGF5ZWQgYXQgdGhlIHRvcCBvZiB0aGUgZGlhbG9nLiBFdmVuIGFib3ZlIHRoZSB0aXRsZS5cbiAgICBcInRvcFwiPzogUmVhY3QuUmVhY3ROb2RlO1xuXG4gICAgLy8gVGl0bGUgZm9yIHRoZSBkaWFsb2cuXG4gICAgXCJ0aXRsZVwiPzogUmVhY3QuUmVhY3ROb2RlO1xuICAgIC8vIFNwZWNpZmljIGFyaWEgbGFiZWwgdG8gdXNlLCBpZiBub3QgcHJvdmlkZWQgd2lsbCBzZXQgYXJpYS1sYWJlbGxlZEJ5IHRvIG14X0RpYWxvZ190aXRsZVxuICAgIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuXG4gICAgLy8gUGF0aCB0byBhbiBpY29uIHRvIHB1dCBpbiB0aGUgaGVhZGVyXG4gICAgXCJoZWFkZXJJbWFnZVwiPzogc3RyaW5nO1xuXG4gICAgLy8gY2hpbGRyZW4gc2hvdWxkIGJlIHRoZSBjb250ZW50IG9mIHRoZSBkaWFsb2dcbiAgICBcImNoaWxkcmVuXCI/OiBSZWFjdC5SZWFjdE5vZGU7XG5cbiAgICAvLyBJZCBvZiBjb250ZW50IGVsZW1lbnRcbiAgICAvLyBJZiBwcm92aWRlZCwgdGhpcyBpcyB1c2VkIHRvIGFkZCBhIGFyaWEtZGVzY3JpYmVkYnkgYXR0cmlidXRlXG4gICAgXCJjb250ZW50SWRcIj86IHN0cmluZztcblxuICAgIC8vIG9wdGlvbmFsIGFkZGl0aW9uYWwgY2xhc3MgZm9yIHRoZSB0aXRsZSBlbGVtZW50IChiYXNpY2FsbHkgYW55dGhpbmcgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGNsYXNzbmFtZXMpXG4gICAgXCJ0aXRsZUNsYXNzXCI/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAgIFwiaGVhZGVyQnV0dG9uXCI/OiBKU1guRWxlbWVudDtcblxuICAgIC8vIG9wdGlvbmFsIFBvc3Rob2cgU2NyZWVuTmFtZSB0byBzdXBwbHkgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGlzIGRpYWxvZ1xuICAgIFwic2NyZWVuTmFtZVwiPzogU2NyZWVuTmFtZTtcbiAgICBvbkZpbmlzaGVkKCk6IHZvaWQ7XG59XG5cbi8qXG4gKiBCYXNpYyBjb250YWluZXIgZm9yIG1vZGFsIGRpYWxvZ3MuXG4gKlxuICogSW5jbHVkZXMgYSBkaXYgZm9yIHRoZSB0aXRsZSwgYW5kIGEga2V5cHJlc3MgaGFuZGxlciB3aGljaCBjYW5jZWxzIHRoZVxuICogZGlhbG9nIG9uIGVzY2FwZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZURpYWxvZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJUHJvcHM+IHtcbiAgICBwcml2YXRlIG1hdHJpeENsaWVudDogTWF0cml4Q2xpZW50O1xuXG4gICAgcHVibGljIHN0YXRpYyBkZWZhdWx0UHJvcHM6IFBhcnRpYWw8SVByb3BzPiA9IHtcbiAgICAgICAgaGFzQ2FuY2VsOiB0cnVlLFxuICAgICAgICBmaXhlZFdpZHRoOiB0cnVlLFxuICAgIH07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IElQcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgLy8gWFhYOiBUaGUgY29udHJhY3Qgb24gTWF0cml4Q2xpZW50Q29udGV4dCBzYXlzIGl0IGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpbiBhIExvZ2dlZEluVmlldyBzdWJ0cmVlLFxuICAgICAgICAvLyBnaXZlbiB0aGF0IG1vZGFscyBmdW5jdGlvbiBvdXRzaWRlIHRoZSBNYXRyaXhDaGF0IFJlYWN0IHRyZWUgdGhpcyBzaW11bGF0ZXMgdGhhdC4gV2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyB1c2Ugc2FmZUdldCBhcyBpdCB0aHJvd2luZyB3b3VsZCBtZWFuIHdlIGNhbm5vdCB1c2UgbW9kYWxzIHdoaWxzdCB0aGUgdXNlciBpc24ndCBsb2dnZWQgaW4uXG4gICAgICAgIC8vIFRoZSBsb25nZXIgdGVybSBzb2x1dGlvbiBpcyB0byBtb3ZlIG91ciBNb2RhbE1hbmFnZXIgaW50byB0aGUgUmVhY3QgdHJlZSB0byBpbmhlcml0IGNvbnRleHRzIHByb3Blcmx5LlxuICAgICAgICB0aGlzLm1hdHJpeENsaWVudCA9IE1hdHJpeENsaWVudFBlZy5nZXQoKSE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbktleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCB8IFJlYWN0LktleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbktleURvd24/LihlKTtcblxuICAgICAgICBjb25zdCBhY3Rpb24gPSBnZXRLZXlCaW5kaW5nc01hbmFnZXIoKS5nZXRBY2Nlc3NpYmlsaXR5QWN0aW9uKGUpO1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgICAgY2FzZSBLZXlCaW5kaW5nQWN0aW9uLkVzY2FwZTpcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucHJvcHMuaGFzQ2FuY2VsKSBicmVhaztcblxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25GaW5pc2hlZCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25DYW5jZWxDbGljayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkZpbmlzaGVkKCk7XG4gICAgfTtcblxuICAgIHB1YmxpYyByZW5kZXIoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgICAgICAgbGV0IGNhbmNlbEJ1dHRvbjtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFzQ2FuY2VsKSB7XG4gICAgICAgICAgICBjYW5jZWxCdXR0b24gPSAoXG4gICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5vbkNhbmNlbENsaWNrfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9EaWFsb2dfY2FuY2VsQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17X3QoXCJkaWFsb2dfY2xvc2VfbGFiZWxcIil9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtfdChcImFjdGlvbnxjbG9zZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoZWFkZXJJbWFnZTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuaGVhZGVySW1hZ2UpIHtcbiAgICAgICAgICAgIGhlYWRlckltYWdlID0gPGltZyBjbGFzc05hbWU9XCJteF9EaWFsb2dfdGl0bGVJbWFnZVwiIHNyYz17dGhpcy5wcm9wcy5oZWFkZXJJbWFnZX0gYWx0PVwiXCIgLz47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NrUHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICAgICAgICBcIm9uS2V5RG93blwiOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgICAgIFwicm9sZVwiOiBcImRpYWxvZ1wiLFxuICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgcG9pbnQgdG8gYSBub2RlIGRlc2NyaWJpbmcgdGhlIGRpYWxvZy5cbiAgICAgICAgICAgIC8vIElmIHdlIHdlcmUgYWJvdXQgdG8gY29tcGxldGVseSBmb2xsb3cgdGhpcyByZWNvbW1lbmRhdGlvbiB3ZSdkIG5lZWQgdG9cbiAgICAgICAgICAgIC8vIG1ha2UgYWxsIHRoZSBjb21wb25lbnRzIHJlbHlpbmcgb24gQmFzZURpYWxvZyB0byBiZSBhd2FyZSBvZiBpdC5cbiAgICAgICAgICAgIC8vIFNvIGluc3RlYWQgd2Ugd2lsbCB1c2UgdGhlIHdob2xlIGNvbnRlbnQgYXMgdGhlIGRlc2NyaXB0aW9uLlxuICAgICAgICAgICAgLy8gRGVzY3JpcHRpb24gY29tZXMgZmlyc3QgYW5kIGlmIHRoZSBjb250ZW50IGNvbnRhaW5zIG1vcmUgdGV4dCxcbiAgICAgICAgICAgIC8vIEFUIHVzZXJzIGNhbiBza2lwIGl0cyBwcmVzZW50YXRpb24uXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogdGhpcy5wcm9wcy5jb250ZW50SWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMucHJvcHNbXCJhcmlhLWxhYmVsXCJdKSB7XG4gICAgICAgICAgICBsb2NrUHJvcHNbXCJhcmlhLWxhYmVsXCJdID0gdGhpcy5wcm9wc1tcImFyaWEtbGFiZWxcIl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2NrUHJvcHNbXCJhcmlhLWxhYmVsbGVkYnlcIl0gPSBcIm14X0Jhc2VEaWFsb2dfdGl0bGVcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWF0cml4Q2xpZW50Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17dGhpcy5tYXRyaXhDbGllbnR9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnNjcmVlbk5hbWUgJiYgPFBvc3Rob2dTY3JlZW5UcmFja2VyIHNjcmVlbk5hbWU9e3RoaXMucHJvcHMuc2NyZWVuTmFtZX0gLz59XG4gICAgICAgICAgICAgICAgPEZvY3VzTG9ja1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5Gb2N1cz17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgbG9ja1Byb3BzPXtsb2NrUHJvcHN9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyh0aGlzLnByb3BzLmNsYXNzTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgbXhfRGlhbG9nX2ZpeGVkV2lkdGg6IHRoaXMucHJvcHMuZml4ZWRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy50b3B9XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcIm14X0RpYWxvZ19oZWFkZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG14X0RpYWxvZ19oZWFkZXJXaXRoQnV0dG9uOiAhIXRoaXMucHJvcHMuaGVhZGVyQnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHshISh0aGlzLnByb3BzLnRpdGxlIHx8IGhlYWRlckltYWdlKSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcz1cImgxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFwibXhfRGlhbG9nX3RpdGxlXCIsIHRoaXMucHJvcHMudGl0bGVDbGFzcyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibXhfQmFzZURpYWxvZ190aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aGVhZGVySW1hZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5oZWFkZXJCdXR0b259XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgICAgICAgICAge2NhbmNlbEJ1dHRvbn1cbiAgICAgICAgICAgICAgICA8L0ZvY3VzTG9jaz5cbiAgICAgICAgICAgIDwvTWF0cml4Q2xpZW50Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBVUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBR0EsSUFBQUcsaUJBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLGdCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxnQkFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sb0JBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLGdCQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxtQkFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsa0JBQUEsR0FBQVYsT0FBQTtBQXRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBK0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLE1BQU1XLFVBQVUsU0FBU0MsY0FBSyxDQUFDQyxTQUFTLENBQVM7RUFRckRDLFdBQVdBLENBQUNDLEtBQWEsRUFBRTtJQUM5QixLQUFLLENBQUNBLEtBQUssQ0FBQzs7SUFFWjtJQUNBO0lBQ0E7SUFDQTtJQUFBLElBQUFDLGdCQUFBLENBQUFDLE9BQUE7SUFBQSxJQUFBRCxnQkFBQSxDQUFBQyxPQUFBLHFCQUlpQkMsQ0FBc0MsSUFBVztNQUNsRSxJQUFJLENBQUNILEtBQUssQ0FBQ0ksU0FB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