UNPKG

matrix-react-sdk

Version:
178 lines (148 loc) 18.7 kB
"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 = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _Keyboard = require("../../Keyboard"); var _dispatcher = _interopRequireDefault(require("../../dispatcher/dispatcher")); var _lodash = require("lodash"); var _AccessibleButton = _interopRequireDefault(require("../../components/views/elements/AccessibleButton")); var _classnames = _interopRequireDefault(require("classnames")); var _replaceableComponent = require("../../utils/replaceableComponent"); var _dec, _class, _class2, _temp; let SearchBox = (_dec = (0, _replaceableComponent.replaceableComponent)("structures.SearchBox"), _dec(_class = (_temp = _class2 = class SearchBox extends _react.default.Component { constructor(props) { super(props); (0, _defineProperty2.default)(this, "onAction", payload => { if (!this.props.enableRoomSearchFocus) return; switch (payload.action) { case 'view_room': if (this._search.current && payload.clear_search) { this._clearSearch(); } break; case 'focus_room_filter': if (this._search.current) { this._search.current.focus(); } break; } }); (0, _defineProperty2.default)(this, "onChange", () => { if (!this._search.current) return; this.setState({ searchTerm: this._search.current.value }); this.onSearch(); }); (0, _defineProperty2.default)(this, "onSearch", (0, _lodash.throttle)(() => { this.props.onSearch(this._search.current.value); }, 200, { trailing: true, leading: true })); (0, _defineProperty2.default)(this, "_onKeyDown", ev => { switch (ev.key) { case _Keyboard.Key.ESCAPE: this._clearSearch("keyboard"); break; } if (this.props.onKeyDown) this.props.onKeyDown(ev); }); (0, _defineProperty2.default)(this, "_onFocus", ev => { this.setState({ blurred: false }); ev.target.select(); if (this.props.onFocus) { this.props.onFocus(ev); } }); (0, _defineProperty2.default)(this, "_onBlur", ev => { this.setState({ blurred: true }); if (this.props.onBlur) { this.props.onBlur(ev); } }); this._search = /*#__PURE__*/(0, _react.createRef)(); this.state = { searchTerm: this.props.initialValue || "", blurred: true }; } componentDidMount() { this.dispatcherRef = _dispatcher.default.register(this.onAction); } componentWillUnmount() { _dispatcher.default.unregister(this.dispatcherRef); } _clearSearch(source) { this._search.current.value = ""; this.onChange(); if (this.props.onCleared) { this.props.onCleared(source); } } render() { // check for collapsed here and // not at parent so we keep // searchTerm in our state // when collapsing and expanding if (this.props.collapsed) { return null; } const clearButton = !this.state.blurred || this.state.searchTerm ? /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { key: "button", tabIndex: -1, className: "mx_SearchBox_closeButton", onClick: () => { this._clearSearch("button"); } }) : undefined; // show a shorter placeholder when blurred, if requested // this is used for the room filter field that has // the explore button next to it when blurred const placeholder = this.state.blurred ? this.props.blurredPlaceholder || this.props.placeholder : this.props.placeholder; const className = this.props.className || ""; return /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)("mx_SearchBox", "mx_textinput", { "mx_SearchBox_blurred": this.state.blurred }) }, /*#__PURE__*/_react.default.createElement("input", { key: "searchfield", type: "text", ref: this._search, className: "mx_textinput_icon mx_textinput_search " + className, value: this.state.searchTerm, onFocus: this._onFocus, onChange: this.onChange, onKeyDown: this._onKeyDown, onBlur: this._onBlur, placeholder: placeholder, autoComplete: "off", autoFocus: this.props.autoFocus }), clearButton); } }, (0, _defineProperty2.default)(_class2, "propTypes", { onSearch: _propTypes.default.func, onCleared: _propTypes.default.func, onKeyDown: _propTypes.default.func, className: _propTypes.default.string, placeholder: _propTypes.default.string.isRequired, autoFocus: _propTypes.default.bool, initialValue: _propTypes.default.string, // If true, the search box will focus and clear itself // on room search focus action (it would be nicer to take // this functionality out, but not obvious how that would work) enableRoomSearchFocus: _propTypes.default.bool }), (0, _defineProperty2.default)(_class2, "defaultProps", { enableRoomSearchFocus: false }), _temp)) || _class); exports.default = SearchBox; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3N0cnVjdHVyZXMvU2VhcmNoQm94LmpzIl0sIm5hbWVzIjpbIlNlYXJjaEJveCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInBheWxvYWQiLCJlbmFibGVSb29tU2VhcmNoRm9jdXMiLCJhY3Rpb24iLCJfc2VhcmNoIiwiY3VycmVudCIsImNsZWFyX3NlYXJjaCIsIl9jbGVhclNlYXJjaCIsImZvY3VzIiwic2V0U3RhdGUiLCJzZWFyY2hUZXJtIiwidmFsdWUiLCJvblNlYXJjaCIsInRyYWlsaW5nIiwibGVhZGluZyIsImV2Iiwia2V5IiwiS2V5IiwiRVNDQVBFIiwib25LZXlEb3duIiwiYmx1cnJlZCIsInRhcmdldCIsInNlbGVjdCIsIm9uRm9jdXMiLCJvbkJsdXIiLCJzdGF0ZSIsImluaXRpYWxWYWx1ZSIsImNvbXBvbmVudERpZE1vdW50IiwiZGlzcGF0Y2hlclJlZiIsImRpcyIsInJlZ2lzdGVyIiwib25BY3Rpb24iLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVucmVnaXN0ZXIiLCJzb3VyY2UiLCJvbkNoYW5nZSIsIm9uQ2xlYXJlZCIsInJlbmRlciIsImNvbGxhcHNlZCIsImNsZWFyQnV0dG9uIiwidW5kZWZpbmVkIiwicGxhY2Vob2xkZXIiLCJibHVycmVkUGxhY2Vob2xkZXIiLCJjbGFzc05hbWUiLCJfb25Gb2N1cyIsIl9vbktleURvd24iLCJfb25CbHVyIiwiYXV0b0ZvY3VzIiwiUHJvcFR5cGVzIiwiZnVuYyIsInN0cmluZyIsImlzUmVxdWlyZWQiLCJib29sIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBaUJBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0lBR3FCQSxTLFdBRHBCLGdEQUFxQixzQkFBckIsQyxtQ0FBRCxNQUNxQkEsU0FEckIsU0FDdUNDLGVBQU1DLFNBRDdDLENBQ3VEO0FBb0JuREMsRUFBQUEsV0FB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bkI7QUFPSSxNQUFBLFFBQVEsRUFBRyxLQUFLVCxRQVBwQjtBQVFJLE1BQUEsU0FBUyxFQUFHLEtBQUtVLFVBUnJCO0FBU0ksTUFBQSxNQUFNLEVBQUUsS0FBS0MsT0FUakI7QUFVSSxNQUFBLFdBQVcsRUFBR0wsV0FWbEI7QUFXSSxNQUFBLFlBQVksRUFBQyxLQVhqQjtBQVlJLE1BQUEsU0FBUyxFQUFFLEtBQUt6QyxLQUFMLENBQVcrQztBQVoxQixNQURKLEVBZU1SLFdBZk4sQ0FESjtBQW1CSDs7QUE1SWtELEMsc0RBQ2hDO0FBQ2YzQixFQUFBQSxRQUFRLEVBQUVvQyxtQkFBVUMsSUFETDtBQUVmYixFQUFBQSxTQUFTLEVBQUVZLG1CQUFVQyxJQUZOO0FBR2Y5QixFQUFBQSxTQUFTLEVBQUU2QixtQkFBVUMsSUFITjtBQUlmTixFQUFBQSxTQUFTLEVBQUVLLG1CQUFVRSxNQUpOO0FBS2ZULEVBQUFBLFdBQVcsRUFBRU8sbUJBQVVFLE1BQVYsQ0FBaUJDLFVBTGY7QUFNZkosRUFBQUEsU0FBUyxFQUFFQyxtQkFBVUksSUFOTjtBQU9mMUIsRUFBQUEsWUFBWSxFQUFFc0IsbUJBQVVFLE1BUFQ7QUFTZjtBQUNBO0FBQ0E7QUFDQWhELEVBQUFBLHFCQUFxQixFQUFFOEMsbUJBQVVJO0FBWmxCLEMsMERBZUc7QUFDbEJsRCxFQUFBQSxxQkFBcUIsRUFBRTtBQURMLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMTUsIDIwMTYgT3Blbk1hcmtldCBMdGRcbkNvcHlyaWdodCAyMDE5IE1pY2hhZWwgVGVsYXR5bnNraSA8N3QzY2hndXlAZ21haWwuY29tPlxuXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xueW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG5TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG5saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCBSZWFjdCwge2NyZWF0ZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEtleSB9IGZyb20gJy4uLy4uL0tleWJvYXJkJztcbmltcG9ydCBkaXMgZnJvbSAnLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyJztcbmltcG9ydCB7dGhyb3R0bGV9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tICcuLi8uLi9jb21wb25lbnRzL3ZpZXdzL2VsZW1lbnRzL0FjY2Vzc2libGVCdXR0b24nO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQge3JlcGxhY2VhYmxlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vdXRpbHMvcmVwbGFjZWFibGVDb21wb25lbnRcIjtcblxuQHJlcGxhY2VhYmxlQ29tcG9uZW50KFwic3RydWN0dXJlcy5TZWFyY2hCb3hcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaEJveCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgICAgb25TZWFyY2g6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBvbkNsZWFyZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgIGluaXRpYWxWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgICAgICAvLyBJZiB0cnVlLCB0aGUgc2VhcmNoIGJveCB3aWxsIGZvY3VzIGFuZCBjbGVhciBpdHNlbGZcbiAgICAgICAgLy8gb24gcm9vbSBzZWFyY2ggZm9jdXMgYWN0aW9uIChpdCB3b3VsZCBiZSBuaWNlciB0byB0YWtlXG4gICAgICAgIC8vIHRoaXMgZnVuY3Rpb25hbGl0eSBvdXQsIGJ1dCBub3Qgb2J2aW91cyBob3cgdGhhdCB3b3VsZCB3b3JrKVxuICAgICAgICBlbmFibGVSb29tU2VhcmNoRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAgIH07XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgICBlbmFibGVSb29tU2VhcmNoRm9jdXM6IGZhbHNlLFxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5fc2VhcmNoID0gY3JlYXRlUmVmKCk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHNlYXJjaFRlcm06IHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlIHx8IFwiXCIsXG4gICAgICAgICAgICBibHVycmVkOiB0cnVlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXJSZWYgPSBkaXMucmVnaXN0ZXIodGhpcy5vbkFjdGlvbik7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIGRpcy51bnJlZ2lzdGVyKHRoaXMuZGlzcGF0Y2hlclJlZik7XG4gICAgfVxuXG4gICAgb25BY3Rpb24gPSBwYXlsb2FkID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmVuYWJsZVJvb21TZWFyY2hGb2N1cykgcmV0dXJuO1xuXG4gICAgICAgIHN3aXRjaCAocGF5bG9hZC5hY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ3ZpZXdfcm9vbSc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NlYXJjaC5jdXJyZW50ICYmIHBheWxvYWQuY2xlYXJfc2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyU2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZm9jdXNfcm9vbV9maWx0ZXInOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWFyY2guY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWFyY2guY3VycmVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9zZWFyY2guY3VycmVudCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgc2VhcmNoVGVybTogdGhpcy5fc2VhcmNoLmN1cnJlbnQudmFsdWUgfSk7XG4gICAgICAgIHRoaXMub25TZWFyY2goKTtcbiAgICB9O1xuXG4gICAgb25TZWFyY2ggPSB0aHJvdHRsZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucHJvcHMub25TZWFyY2godGhpcy5fc2VhcmNoLmN1cnJlbnQudmFsdWUpO1xuICAgIH0sIDIwMCwge3RyYWlsaW5nOiB0cnVlLCBsZWFkaW5nOiB0cnVlfSk7XG5cbiAgICBfb25LZXlEb3duID0gZXYgPT4ge1xuICAgICAgICBzd2l0Y2ggKGV2LmtleSkge1xuICAgICAgICAgICAgY2FzZSBLZXkuRVNDQVBFOlxuICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyU2VhcmNoKFwia2V5Ym9hcmRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25LZXlEb3duKSB0aGlzLnByb3BzLm9uS2V5RG93bihldik7XG4gICAgfTtcblxuICAgIF9vbkZvY3VzID0gZXYgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtibHVycmVkOiBmYWxzZX0pO1xuICAgICAgICBldi50YXJnZXQuc2VsZWN0KCk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25Gb2N1cyhldik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgX29uQmx1ciA9IGV2ID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Ymx1cnJlZDogdHJ1ZX0pO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25CbHVyKGV2KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBfY2xlYXJTZWFyY2goc291cmNlKSB7XG4gICAgICAgIHRoaXMuX3NlYXJjaC5jdXJyZW50LnZhbHVlID0gXCJcIjtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsZWFyZWQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGVhcmVkKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIC8vIGNoZWNrIGZvciBjb2xsYXBzZWQgaGVyZSBhbmRcbiAgICAgICAgLy8gbm90IGF0IHBhcmVudCBzbyB3ZSBrZWVwXG4gICAgICAgIC8vIHNlYXJjaFRlcm0gaW4gb3VyIHN0YXRlXG4gICAgICAgIC8vIHdoZW4gY29sbGFwc2luZyBhbmQgZXhwYW5kaW5nXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xlYXJCdXR0b24gPSAoIXRoaXMuc3RhdGUuYmx1cnJlZCB8fCB0aGlzLnN0YXRlLnNlYXJjaFRlcm0pID9cbiAgICAgICAgICAgICg8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X1NlYXJjaEJveF9jbG9zZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17ICgpID0+IHt0aGlzLl9jbGVhclNlYXJjaChcImJ1dHRvblwiKTsgfSB9PlxuICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPikgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gc2hvdyBhIHNob3J0ZXIgcGxhY2Vob2xkZXIgd2hlbiBibHVycmVkLCBpZiByZXF1ZXN0ZWRcbiAgICAgICAgLy8gdGhpcyBpcyB1c2VkIGZvciB0aGUgcm9vbSBmaWx0ZXIgZmllbGQgdGhhdCBoYXNcbiAgICAgICAgLy8gdGhlIGV4cGxvcmUgYnV0dG9uIG5leHQgdG8gaXQgd2hlbiBibHVycmVkXG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5zdGF0ZS5ibHVycmVkID9cbiAgICAgICAgICAgICh0aGlzLnByb3BzLmJsdXJyZWRQbGFjZWhvbGRlciB8fCB0aGlzLnByb3BzLnBsYWNlaG9sZGVyKSA6XG4gICAgICAgICAgICB0aGlzLnByb3BzLnBsYWNlaG9sZGVyO1xuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwiO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJteF9TZWFyY2hCb3hcIiwgXCJteF90ZXh0aW5wdXRcIiwge1wibXhfU2VhcmNoQm94X2JsdXJyZWRcIjogdGhpcy5zdGF0ZS5ibHVycmVkfSl9PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBrZXk9XCJzZWFyY2hmaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLl9zZWFyY2h9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XCJteF90ZXh0aW5wdXRfaWNvbiBteF90ZXh0aW5wdXRfc2VhcmNoIFwiICsgY2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17IHRoaXMuc3RhdGUuc2VhcmNoVGVybSB9XG4gICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eyB0aGlzLl9vbkZvY3VzIH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyB0aGlzLm9uQ2hhbmdlIH1cbiAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXsgdGhpcy5fb25LZXlEb3duIH1cbiAgICAgICAgICAgICAgICAgICAgb25CbHVyPXt0aGlzLl9vbkJsdXJ9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXsgcGxhY2Vob2xkZXIgfVxuICAgICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBhdXRvRm9jdXM9e3RoaXMucHJvcHMuYXV0b0ZvY3VzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgeyBjbGVhckJ1dHRvbiB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=