matrix-react-sdk
Version:
SDK for matrix.org using React
172 lines (144 loc) • 19 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _IntegrationManagers = require("../../../integrations/IntegrationManagers");
var _room = require("matrix-js-sdk/src/models/room");
var sdk = _interopRequireWildcard(require("../../../index"));
var _Terms = require("../../../Terms");
var _classnames = _interopRequireDefault(require("classnames"));
var ScalarMessaging = _interopRequireWildcard(require("../../../ScalarMessaging"));
var _replaceableComponent = require("../../../utils/replaceableComponent");
var _dec, _class, _class2, _temp;
let TabbedIntegrationManagerDialog = (_dec = (0, _replaceableComponent.replaceableComponent)("views.dialogs.TabbedIntegrationManagerDialog"), _dec(_class = (_temp = _class2 = class TabbedIntegrationManagerDialog extends _react.default.Component {
constructor(props) {
super(props);
(0, _defineProperty2.default)(this, "openManager", async (i
/*: number*/
, force = false) => {
if (i === this.state.currentIndex && !force) return;
const manager = this.state.managers[i];
const client = manager.getScalarClient();
this.setState({
busy: true,
currentIndex: i,
currentLoading: true,
currentConnected: false,
currentScalarClient: client
});
ScalarMessaging.setOpenManagerUrl(manager.uiUrl);
client.setTermsInteractionCallback((policyInfo, agreedUrls) => {
// To avoid visual glitching of two modals stacking briefly, we customise the
// terms dialog sizing when it will appear for the integration manager so that
// it gets the same basic size as the IM's own modal.
return (0, _Terms.dialogTermsInteractionCallback)(policyInfo, agreedUrls, 'mx_TermsDialog_forIntegrationManager');
});
try {
await client.connect();
if (!client.hasCredentials()) {
this.setState({
busy: false,
currentLoading: false,
currentConnected: false
});
} else {
this.setState({
busy: false,
currentLoading: false,
currentConnected: true
});
}
} catch (e) {
if (e instanceof _Terms.TermsNotSignedError) {
return;
}
console.error(e);
this.setState({
busy: false,
currentLoading: false,
currentConnected: false
});
}
});
this.state = {
managers: _IntegrationManagers.IntegrationManagers.sharedInstance().getOrderedManagers(),
busy: true,
currentIndex: 0,
currentConnected: false,
currentLoading: true,
currentScalarClient: null
};
}
componentDidMount()
/*: void*/
{
this.openManager(0, true);
}
_renderTabs() {
const AccessibleButton = sdk.getComponent("views.elements.AccessibleButton");
return this.state.managers.map((m, i) => {
const classes = (0, _classnames.default)({
'mx_TabbedIntegrationManagerDialog_tab': true,
'mx_TabbedIntegrationManagerDialog_currentTab': this.state.currentIndex === i
});
return /*#__PURE__*/_react.default.createElement(AccessibleButton, {
className: classes,
onClick: () => this.openManager(i),
key: `tab_${i}`,
disabled: this.state.busy
}, m.name);
});
}
_renderTab() {
const IntegrationManager = sdk.getComponent("views.settings.IntegrationManager");
let uiUrl = null;
if (this.state.currentScalarClient) {
uiUrl = this.state.currentScalarClient.getScalarInterfaceUrlForRoom(this.props.room, this.props.screen, this.props.integrationId);
}
return /*#__PURE__*/_react.default.createElement(IntegrationManager, {
configured: true,
loading: this.state.currentLoading,
connected: this.state.currentConnected,
url: uiUrl,
onFinished: () => {
/* no-op */
}
});
}
render() {
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_TabbedIntegrationManagerDialog_container"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_TabbedIntegrationManagerDialog_tabs"
}, this._renderTabs()), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_TabbedIntegrationManagerDialog_currentManager"
}, this._renderTab()));
}
}, (0, _defineProperty2.default)(_class2, "propTypes", {
/**
* Called with:
* * success {bool} True if the user accepted any douments, false if cancelled
* * agreedUrls {string[]} List of agreed URLs
*/
onFinished: _propTypes.default.func.isRequired,
/**
* Optional room where the integration manager should be open to
*/
room: _propTypes.default.instanceOf(_room.Room),
/**
* Optional screen to open on the integration manager
*/
screen: _propTypes.default.string,
/**
* Optional integration ID to open in the integration manager
*/
integrationId: _propTypes.default.string
}), _temp)) || _class);
exports.default = TabbedIntegrationManagerDialog;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvVGFiYmVkSW50ZWdyYXRpb25NYW5hZ2VyRGlhbG9nLmpzIl0sIm5hbWVzIjpbIlRhYmJlZEludGVncmF0aW9uTWFuYWdlckRpYWxvZyIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImkiLCJmb3JjZSIsInN0YXRlIiwiY3VycmVudEluZGV4IiwibWFuYWdlciIsIm1hbmFnZXJzIiwiY2xpZW50IiwiZ2V0U2NhbGFyQ2xpZW50Iiwic2V0U3RhdGUiLCJidXN5IiwiY3VycmVudExvYWRpbmciLCJjdXJyZW50Q29ubmVjdGVkIiwiY3VycmVudFNjYWxhckNsaWVudCIsIlNjYWxhck1lc3NhZ2luZyIsInNldE9wZW5NYW5hZ2VyVXJsIiwidWlVcmwiLCJzZXRUZXJtc0ludGVyYWN0aW9uQ2FsbGJhY2siLCJwb2xpY3lJbmZvIiwiYWdyZWVkVXJscyIsImNvbm5lY3QiLCJoYXNDcmVkZW50aWFscyIsImUiLCJUZXJtc05vdFNpZ25lZEVycm9yIiwiY29uc29sZSIsImVycm9yIiwiSW50ZWdyYXRpb25NYW5hZ2VycyIsInNoYXJlZEluc3RhbmNlIiwiZ2V0T3JkZXJlZE1hbmFnZXJzIiwiY29tcG9uZW50RGlkTW91bnQiLCJvcGVuTWFuYWdlciIsIl9yZW5kZXJUYWJzIiwiQWNjZXNzaWJsZUJ1dHRvbiIsInNkayIsImdldENvbXBvbmVudCIsIm1hcCIsIm0iLCJjbGFzc2VzIiwibmFtZSIsIl9yZW5kZXJUYWIiLCJJbnRlZ3JhdGlvbk1hbmFnZXIiLCJnZXRTY2FsYXJJbnRlcmZhY2VVcmxGb3JSb29tIiwicm9vbSIsInNjcmVlbiIsImludGVncmF0aW9uSWQiLCJyZW5kZXIiLCJvbkZpbmlzaGVkIiwiUHJvcFR5cGVzIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJpbnN0YW5jZU9mIiwiUm9vbSIsInN0cmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztB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QUc7QUFDTCx3QkFDSTtBQUFLLE1BQUEsU0FBUyxFQUFDO0FBQWYsb0JBQ0k7QUFBSyxNQUFBLFNBQVMsRUFBQztBQUFmLE9BQ0ssS0FBS2QsV0FBTCxFQURMLENBREosZUFJSTtBQUFLLE1BQUEsU0FBUyxFQUFDO0FBQWYsT0FDSyxLQUFLUSxVQUFMLEVBREwsQ0FKSixDQURKO0FBVUg7O0FBakp1RSxDLHNEQUNyRDtBQUNmO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDUU8sRUFBQUEsVUFBVSxFQUFFQyxtQkFBVUMsSUFBVixDQUFlQyxVQU5aOztBQVFmO0FBQ1I7QUFDQTtBQUNRUCxFQUFBQSxJQUFJLEVBQUVLLG1CQUFVRyxVQUFWLENBQXFCQyxVQUFyQixDQVhTOztBQWFmO0FBQ1I7QUFDQTtBQUNRUixFQUFBQSxNQUFNLEVBQUVJLG1CQUFVSyxNQWhCSDs7QUFrQmY7QUFDUjtBQUNBO0FBQ1FSLEVBQUFBLGFBQWEsRUFBRUcsbUJBQVVLO0FBckJWLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMTkgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7SW50ZWdyYXRpb25NYW5hZ2Vyc30gZnJvbSBcIi4uLy4uLy4uL2ludGVncmF0aW9ucy9JbnRlZ3JhdGlvbk1hbmFnZXJzXCI7XG5pbXBvcnQge1Jvb219IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tb2RlbHMvcm9vbVwiO1xuaW1wb3J0ICogYXMgc2RrIGZyb20gJy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7ZGlhbG9nVGVybXNJbnRlcmFjdGlvbkNhbGxiYWNrLCBUZXJtc05vdFNpZ25lZEVycm9yfSBmcm9tIFwiLi4vLi4vLi4vVGVybXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0ICogYXMgU2NhbGFyTWVzc2FnaW5nIGZyb20gXCIuLi8uLi8uLi9TY2FsYXJNZXNzYWdpbmdcIjtcbmltcG9ydCB7cmVwbGFjZWFibGVDb21wb25lbnR9IGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXBsYWNlYWJsZUNvbXBvbmVudFwiO1xuXG5AcmVwbGFjZWFibGVDb21wb25lbnQoXCJ2aWV3cy5kaWFsb2dzLlRhYmJlZEludGVncmF0aW9uTWFuYWdlckRpYWxvZ1wiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFiYmVkSW50ZWdyYXRpb25NYW5hZ2VyRGlhbG9nIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgICAvKipcbiAgICAgICAgICogQ2FsbGVkIHdpdGg6XG4gICAgICAgICAqICAgICAqIHN1Y2Nlc3Mge2Jvb2x9IFRydWUgaWYgdGhlIHVzZXIgYWNjZXB0ZWQgYW55IGRvdW1lbnRzLCBmYWxzZSBpZiBjYW5jZWxsZWRcbiAgICAgICAgICogICAgICogYWdyZWVkVXJscyB7c3RyaW5nW119IExpc3Qgb2YgYWdyZWVkIFVSTHNcbiAgICAgICAgICovXG4gICAgICAgIG9uRmluaXNoZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE9wdGlvbmFsIHJvb20gd2hlcmUgdGhlIGludGVncmF0aW9uIG1hbmFnZXIgc2hvdWxkIGJlIG9wZW4gdG9cbiAgICAgICAgICovXG4gICAgICAgIHJvb206IFByb3BUeXBlcy5pbnN0YW5jZU9mKFJvb20pLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPcHRpb25hbCBzY3JlZW4gdG8gb3BlbiBvbiB0aGUgaW50ZWdyYXRpb24gbWFuYWdlclxuICAgICAgICAgKi9cbiAgICAgICAgc2NyZWVuOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPcHRpb25hbCBpbnRlZ3JhdGlvbiBJRCB0byBvcGVuIGluIHRoZSBpbnRlZ3JhdGlvbiBtYW5hZ2VyXG4gICAgICAgICAqL1xuICAgICAgICBpbnRlZ3JhdGlvbklkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIG1hbmFnZXJzOiBJbnRlZ3JhdGlvbk1hbmFnZXJzLnNoYXJlZEluc3RhbmNlKCkuZ2V0T3JkZXJlZE1hbmFnZXJzKCksXG4gICAgICAgICAgICBidXN5OiB0cnVlLFxuICAgICAgICAgICAgY3VycmVudEluZGV4OiAwLFxuICAgICAgICAgICAgY3VycmVudENvbm5lY3RlZDogZmFsc2UsXG4gICAgICAgICAgICBjdXJyZW50TG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRTY2FsYXJDbGllbnQ6IG51bGwsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3Blbk1hbmFnZXIoMCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgb3Blbk1hbmFnZXIgPSBhc3luYyAoaTogbnVtYmVyLCBmb3JjZSA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGlmIChpID09PSB0aGlzLnN0YXRlLmN1cnJlbnRJbmRleCAmJiAhZm9yY2UpIHJldHVybjtcblxuICAgICAgICBjb25zdCBtYW5hZ2VyID0gdGhpcy5zdGF0ZS5tYW5hZ2Vyc1tpXTtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gbWFuYWdlci5nZXRTY2FsYXJDbGllbnQoKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBidXN5OiB0cnVlLFxuICAgICAgICAgICAgY3VycmVudEluZGV4OiBpLFxuICAgICAgICAgICAgY3VycmVudExvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICBjdXJyZW50Q29ubmVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGN1cnJlbnRTY2FsYXJDbGllbnQ6IGNsaWVudCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgU2NhbGFyTWVzc2FnaW5nLnNldE9wZW5NYW5hZ2VyVXJsKG1hbmFnZXIudWlVcmwpO1xuXG4gICAgICAgIGNsaWVudC5zZXRUZXJtc0ludGVyYWN0aW9uQ2FsbGJhY2soKHBvbGljeUluZm8sIGFncmVlZFVybHMpID0+IHtcbiAgICAgICAgICAgIC8vIFRvIGF2b2lkIHZpc3VhbCBnbGl0Y2hpbmcgb2YgdHdvIG1vZGFscyBzdGFja2luZyBicmllZmx5LCB3ZSBjdXN0b21pc2UgdGhlXG4gICAgICAgICAgICAvLyB0ZXJtcyBkaWFsb2cgc2l6aW5nIHdoZW4gaXQgd2lsbCBhcHBlYXIgZm9yIHRoZSBpbnRlZ3JhdGlvbiBtYW5hZ2VyIHNvIHRoYXRcbiAgICAgICAgICAgIC8vIGl0IGdldHMgdGhlIHNhbWUgYmFzaWMgc2l6ZSBhcyB0aGUgSU0ncyBvd24gbW9kYWwuXG4gICAgICAgICAgICByZXR1cm4gZGlhbG9nVGVybXNJbnRlcmFjdGlvbkNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIHBvbGljeUluZm8sIGFncmVlZFVybHMsICdteF9UZXJtc0RpYWxvZ19mb3JJbnRlZ3JhdGlvbk1hbmFnZXInLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KCk7XG4gICAgICAgICAgICBpZiAoIWNsaWVudC5oYXNDcmVkZW50aWFscygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGJ1c3k6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25uZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgYnVzeTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbm5lY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUZXJtc05vdFNpZ25lZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgYnVzeTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY3VycmVudExvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRDb25uZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgX3JlbmRlclRhYnMoKSB7XG4gICAgICAgIGNvbnN0IEFjY2Vzc2libGVCdXR0b24gPSBzZGsuZ2V0Q29tcG9uZW50KFwidmlld3MuZWxlbWVudHMuQWNjZXNzaWJsZUJ1dHRvblwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUubWFuYWdlcnMubWFwKChtLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lcyh7XG4gICAgICAgICAgICAgICAgJ214X1RhYmJlZEludGVncmF0aW9uTWFuYWdlckRpYWxvZ190YWInOiB0cnVlLFxuICAgICAgICAgICAgICAgICdteF9UYWJiZWRJbnRlZ3JhdGlvbk1hbmFnZXJEaWFsb2dfY3VycmVudFRhYic6IHRoaXMuc3RhdGUuY3VycmVudEluZGV4ID09PSBpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc31cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5vcGVuTWFuYWdlcihpKX1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtgdGFiXyR7aX1gfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5idXN5fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge20ubmFtZX1cbiAgICAgICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmVuZGVyVGFiKCkge1xuICAgICAgICBjb25zdCBJbnRlZ3JhdGlvbk1hbmFnZXIgPSBzZGsuZ2V0Q29tcG9uZW50KFwidmlld3Muc2V0dGluZ3MuSW50ZWdyYXRpb25NYW5hZ2VyXCIpO1xuICAgICAgICBsZXQgdWlVcmwgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5jdXJyZW50U2NhbGFyQ2xpZW50KSB7XG4gICAgICAgICAgICB1aVVybCA9IHRoaXMuc3RhdGUuY3VycmVudFNjYWxhckNsaWVudC5nZXRTY2FsYXJJbnRlcmZhY2VVcmxGb3JSb29tKFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucm9vbSxcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnNjcmVlbixcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmludGVncmF0aW9uSWQsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiA8SW50ZWdyYXRpb25NYW5hZ2VyXG4gICAgICAgICAgICBjb25maWd1cmVkPXt0cnVlfVxuICAgICAgICAgICAgbG9hZGluZz17dGhpcy5zdGF0ZS5jdXJyZW50TG9hZGluZ31cbiAgICAgICAgICAgIGNvbm5lY3RlZD17dGhpcy5zdGF0ZS5jdXJyZW50Q29ubmVjdGVkfVxuICAgICAgICAgICAgdXJsPXt1aVVybH1cbiAgICAgICAgICAgIG9uRmluaXNoZWQ9eygpID0+IHsvKiBuby1vcCAqL319XG4gICAgICAgIC8+O1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdteF9UYWJiZWRJbnRlZ3JhdGlvbk1hbmFnZXJEaWFsb2dfY29udGFpbmVyJz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0nbXhfVGFiYmVkSW50ZWdyYXRpb25NYW5hZ2VyRGlhbG9nX3RhYnMnPlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5fcmVuZGVyVGFicygpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPSdteF9UYWJiZWRJbnRlZ3JhdGlvbk1hbmFnZXJEaWFsb2dfY3VycmVudE1hbmFnZXInPlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5fcmVuZGVyVGFiKCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=