tc-ui-toolkit
Version:
React components used to develop tools for the desktop app translationCore
224 lines (196 loc) • 21.7 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _CircularProgress = _interopRequireDefault(require("@material-ui/core/CircularProgress"));
var _reactBootstrap = require("react-bootstrap");
var _GroupItems = _interopRequireDefault(require("../GroupItems"));
var _helpers = require("../helpers");
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
var Group = /*#__PURE__*/function (_React$Component) {
(0, _inherits2["default"])(Group, _React$Component);
var _super = _createSuper(Group);
function Group(props) {
var _this;
(0, _classCallCheck2["default"])(this, Group);
_this = _super.call(this, props);
_this.activeGroupItemRef = /*#__PURE__*/_react["default"].createRef();
_this.groupRef = /*#__PURE__*/_react["default"].createRef();
_this.scrollToCurrentCheck = _this.scrollToCurrentCheck.bind((0, _assertThisInitialized2["default"])(_this));
_this.onExpandClick = _this.onExpandClick.bind((0, _assertThisInitialized2["default"])(_this));
return _this;
}
(0, _createClass2["default"])(Group, [{
key: "scrollToCurrentCheck",
value: function scrollToCurrentCheck() {
var _this2 = this;
// TRICKY: push scrolling onto the timing thread so the ui thread can flush out the dom
setTimeout(function () {
if ((0, _helpers.inView)(_this2.groupRef, _this2.activeGroupItemRef)) {
//If the menu and current check are able to be rendered in the
//same window scroll to the group menu item
(0, _helpers.scrollIntoView)(_this2.groupRef);
} else {
//Scroll to the current check item
(0, _helpers.scrollIntoView)(_this2.activeGroupItemRef);
}
}, 200);
}
}, {
key: "componentDidMount",
value: function componentDidMount() {
if (this.props.active) {
this.scrollToCurrentCheck();
}
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
var active = this.props.active;
if (active) {
// scroll to menu if out of view
if (!(0, _helpers.isInViewport)(this.activeGroupItemRef)) {
this.scrollToCurrentCheck(this.activeGroupItemRef);
}
}
}
}, {
key: "onExpandClick",
value: function onExpandClick() {
var _this$props = this.props,
active = _this$props.active,
openGroup = _this$props.openGroup,
groupMenuExpandSubMenu = _this$props.groupMenuExpandSubMenu;
if (active) {
groupMenuExpandSubMenu(true);
} else {
openGroup(true);
}
}
}, {
key: "render",
value: function render() {
var _this$props2 = this.props,
changeCurrentContextId = _this$props2.changeCurrentContextId,
active = _this$props2.active,
openGroup = _this$props2.openGroup,
groupMenuExpandSubMenu = _this$props2.groupMenuExpandSubMenu,
isSubMenuExpanded = _this$props2.isSubMenuExpanded,
progress = _this$props2.progress,
groupIndex = _this$props2.groupIndex,
groupData = _this$props2.groupData,
filters = _this$props2.filters,
manifest = _this$props2.manifest,
contextId = _this$props2.contextId,
getSelections = _this$props2.getSelections,
isVerseFinished = _this$props2.isVerseFinished,
isVerseValid = _this$props2.isVerseValid,
currentToolName = _this$props2.currentToolName;
var groupMenuItemHeadingClassName = active ? 'menu-item-heading-current' : 'menu-item-heading-normal';
var expandedGlyph = /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, {
glyph: "chevron-down",
style: {
"float": 'right',
marginTop: '3px'
},
onClick: function onClick() {
return groupMenuExpandSubMenu(false);
}
});
var collapsedGlyph = /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, {
glyph: "chevron-right",
style: {
"float": 'right',
marginTop: '3px'
},
onClick: this.onExpandClick
});
return /*#__PURE__*/_react["default"].createElement("div", {
className: "group"
}, /*#__PURE__*/_react["default"].createElement("div", {
ref: this.groupRef,
className: groupMenuItemHeadingClassName
}, active && isSubMenuExpanded ? expandedGlyph : collapsedGlyph, /*#__PURE__*/_react["default"].createElement("div", {
style: {
display: 'flex'
},
onClick: function onClick() {
return openGroup(true);
}
}, /*#__PURE__*/_react["default"].createElement("div", {
style: {
position: 'relative',
justifyContent: 'center',
height: 20,
width: 20,
display: 'flex',
marginRight: '10px',
"float": 'left'
}
}, /*#__PURE__*/_react["default"].createElement("div", {
style: {
height: 20,
width: 20,
border: 'white solid 3px',
borderRadius: '50%'
}
}), /*#__PURE__*/_react["default"].createElement(_CircularProgress["default"], {
variant: "static",
value: progress * 100,
thickness: 10,
size: 15,
color: 'primary',
style: {
alignSelf: 'center',
position: 'absolute',
width: 20,
height: 20,
color: '#40BDF2'
}
})), groupIndex.name)), active && isSubMenuExpanded ? /*#__PURE__*/_react["default"].createElement(_GroupItems["default"], {
currentToolName: currentToolName,
isVerseFinished: isVerseFinished,
isVerseValid: isVerseValid,
getSelections: getSelections,
changeCurrentContextId: changeCurrentContextId,
contextId: contextId,
groupData: groupData,
activeGroupItemRef: this.activeGroupItemRef,
filters: filters,
manifest: manifest
}) : null);
}
}]);
return Group;
}(_react["default"].Component);
Group.propTypes = {
manifest: _propTypes["default"].object.isRequired,
contextId: _propTypes["default"].object.isRequired,
filters: _propTypes["default"].object.isRequired,
groupData: _propTypes["default"].array.isRequired,
isSubMenuExpanded: _propTypes["default"].bool.isRequired,
groupMenuExpandSubMenu: _propTypes["default"].func.isRequired,
openGroup: _propTypes["default"].func.isRequired,
progress: _propTypes["default"].number.isRequired,
groupIndex: _propTypes["default"].object.isRequired,
active: _propTypes["default"].bool.isRequired,
changeCurrentContextId: _propTypes["default"].func.isRequired,
getSelections: _propTypes["default"].func.isRequired,
isVerseFinished: _propTypes["default"].func.isRequired,
isVerseValid: _propTypes["default"].func.isRequired,
currentToolName: _propTypes["default"].string.isRequired
};
var _default = Group;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9Hcm91cE1lbnUvR3JvdXAvaW5kZXguanMiXSwibmFtZXMiOlsiR3JvdXAiLCJwcm9wcyIsImFjdGl2ZUdyb3VwSXRlbVJlZiIsIlJlYWN0IiwiY3JlYXRlUmVmIiwiZ3JvdXBSZWYiLCJzY3JvbGxUb0N1cnJlbnRDaGVjayIsImJpbmQiLCJvbkV4cGFuZENsaWNrIiwic2V0VGltZW91dCIsImFjdGl2ZSIsIm9wZW5Hcm91cCIsImdyb3VwTWVudUV4cGFuZFN1Yk1lbnUiLCJjaGFuZ2VDdXJyZW50Q29udGV4dElkIiwiaXNTdWJNZW51RXhwYW5kZWQiLCJwcm9ncmVzcyIsImdyb3VwSW5kZXgiLCJncm91cERhdGEiLCJmaWx0ZXJzIiwibWFuaWZlc3QiLCJjb250ZXh0SWQiLCJnZXRTZWxlY3Rpb25zIiwiaXNWZXJzZUZpbmlzaGVkIiwiaXNWZXJzZVZhbGlkIiwiY3VycmVudFRvb2xOYW1lIiwiZ3JvdXBNZW51SXRlbUhlYWRpbmdDbGFzc05hbWUiLCJleHBhbmRlZEdseXBoIiwibWFyZ2luVG9wIiwiY29sbGFwc2VkR2x5cGgiLCJkaXNwbGF5IiwicG9zaXRpb24iLCJqdXN0aWZ5Q29udGVudCIsImhlaWdodCIsIndpZHRoIiwibWFyZ2luUmlnaHQiLCJib3JkZXIiLCJib3JkZXJSYWRpdXMiLCJhbGlnblNlbGYiLCJjb2xvciIsIm5hbWUiLCJDb21wb25lbnQiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJpc1JlcXVpcmVkIiwiYXJyYXkiLCJib29sIiwiZnVuYyIsIm51bWJlciIsInN0cmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBRUE7Ozs7OztJQUlNQSxLOzs7OztBQUNKLGlCQUFZQyxLQUFaLEVBQW1CO0FBQUE7O0FBQUE7QUFDakIsOEJBQU1BLEtBQU47QUFDQSxVQUFLQyxrQkFBTCxnQkFBMEJDLGtCQUFNQyxTQUFOLEVB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QixFQUFBQSxVQUFVLEVBQUUwQixzQkFBVUMsTUFBVixDQUFpQkMsVUFUYjtBQVVoQmxDLEVBQUFBLE1BQU0sRUFBRWdDLHNCQUFVSSxJQUFWLENBQWVGLFVBVlA7QUFXaEIvQixFQUFBQSxzQkFBc0IsRUFBRTZCLHNCQUFVSyxJQUFWLENBQWVILFVBWHZCO0FBWWhCdkIsRUFBQUEsYUFBYSxFQUFFcUIsc0JBQVVLLElBQVYsQ0FBZUgsVUFaZDtBQWFoQnRCLEVBQUFBLGVBQWUsRUFBRW9CLHNCQUFVSyxJQUFWLENBQWVILFVBYmhCO0FBY2hCckIsRUFBQUEsWUFBWSxFQUFFbUIsc0JBQVVLLElBQVYsQ0FBZUgsVUFkYjtBQWVoQnBCLEVBQUFBLGVBQWUsRUFBRWtCLHNCQUFVTyxNQUFWLENBQWlCTDtBQWZsQixDQUFsQjtlQWtCZTVDLEsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBDaXJjdWxhclByb2dyZXNzIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0NpcmN1bGFyUHJvZ3Jlc3MnO1xuaW1wb3J0IHsgR2x5cGhpY29uIH0gZnJvbSAncmVhY3QtYm9vdHN0cmFwJztcbi8vIGNvbXBvbmVudHNcbmltcG9ydCBHcm91cEl0ZW1zIGZyb20gJy4uL0dyb3VwSXRlbXMnO1xuLy8gaGVscGVyc1xuaW1wb3J0IHtcbiAgc2Nyb2xsSW50b1ZpZXcsIGluVmlldywgaXNJblZpZXdwb3J0LFxufSBmcm9tICcuLi9oZWxwZXJzJztcblxuY2xhc3MgR3JvdXAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLmFjdGl2ZUdyb3VwSXRlbVJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuZ3JvdXBSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLnNjcm9sbFRvQ3VycmVudENoZWNrID0gdGhpcy5zY3JvbGxUb0N1cnJlbnRDaGVjay5iaW5kKHRoaXMpO1xuICAgIHRoaXMub25FeHBhbmRDbGljayA9IHRoaXMub25FeHBhbmRDbGljay5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2Nyb2xsVG9DdXJyZW50Q2hlY2soKSB7XG4gICAgLy8gVFJJQ0tZOiBwdXNoIHNjcm9sbGluZyBvbnRvIHRoZSB0aW1pbmcgdGhyZWFkIHNvIHRoZSB1aSB0aHJlYWQgY2FuIGZsdXNoIG91dCB0aGUgZG9tXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoaW5WaWV3KHRoaXMuZ3JvdXBSZWYsIHRoaXMuYWN0aXZlR3JvdXBJdGVtUmVmKSkge1xuICAgICAgICAvL0lmIHRoZSBtZW51IGFuZCBjdXJyZW50IGNoZWNrIGFyZSBhYmxlIHRvIGJlIHJlbmRlcmVkIGluIHRoZVxuICAgICAgICAvL3NhbWUgd2luZG93IHNjcm9sbCB0byB0aGUgZ3JvdXAgbWVudSBpdGVtXG4gICAgICAgIHNjcm9sbEludG9WaWV3KHRoaXMuZ3JvdXBSZWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9TY3JvbGwgdG8gdGhlIGN1cnJlbnQgY2hlY2sgaXRlbVxuICAgICAgICBzY3JvbGxJbnRvVmlldyh0aGlzLmFjdGl2ZUdyb3VwSXRlbVJlZik7XG4gICAgICB9XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLnByb3BzLmFjdGl2ZSkge1xuICAgICAgdGhpcy5zY3JvbGxUb0N1cnJlbnRDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICBjb25zdCB7IGFjdGl2ZSB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgIC8vIHNjcm9sbCB0byBtZW51IGlmIG91dCBvZiB2aWV3XG4gICAgICBpZiAoIWlzSW5WaWV3cG9ydCh0aGlzLmFjdGl2ZUdyb3VwSXRlbVJlZikpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0N1cnJlbnRDaGVjayh0aGlzLmFjdGl2ZUdyb3VwSXRlbVJlZik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25FeHBhbmRDbGljaygpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmUsXG4gICAgICBvcGVuR3JvdXAsXG4gICAgICBncm91cE1lbnVFeHBhbmRTdWJNZW51LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgZ3JvdXBNZW51RXhwYW5kU3ViTWVudSh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3Blbkdyb3VwKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjaGFuZ2VDdXJyZW50Q29udGV4dElkLFxuICAgICAgYWN0aXZlLFxuICAgICAgb3Blbkdyb3VwLFxuICAgICAgZ3JvdXBNZW51RXhwYW5kU3ViTWVudSxcbiAgICAgIGlzU3ViTWVudUV4cGFuZGVkLFxuICAgICAgcHJvZ3Jlc3MsXG4gICAgICBncm91cEluZGV4LFxuICAgICAgZ3JvdXBEYXRhLFxuICAgICAgZmlsdGVycyxcbiAgICAgIG1hbmlmZXN0LFxuICAgICAgY29udGV4dElkLFxuICAgICAgZ2V0U2VsZWN0aW9ucyxcbiAgICAgIGlzVmVyc2VGaW5pc2hlZCxcbiAgICAgIGlzVmVyc2VWYWxpZCxcbiAgICAgIGN1cnJlbnRUb29sTmFtZSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgZ3JvdXBNZW51SXRlbUhlYWRpbmdDbGFzc05hbWUgPSBhY3RpdmUgPyAnbWVudS1pdGVtLWhlYWRpbmctY3VycmVudCcgOiAnbWVudS1pdGVtLWhlYWRpbmctbm9ybWFsJztcblxuICAgIGxldCBleHBhbmRlZEdseXBoID0gKFxuICAgICAgPEdseXBoaWNvbiBnbHlwaD1cImNoZXZyb24tZG93blwiIHN0eWxlPXt7IGZsb2F0OiAncmlnaHQnLCBtYXJnaW5Ub3A6ICczcHgnIH19IG9uQ2xpY2s9eygpID0+IGdyb3VwTWVudUV4cGFuZFN1Yk1lbnUoZmFsc2UpfSAvPlxuICAgICk7XG4gICAgbGV0IGNvbGxhcHNlZEdseXBoID0gKFxuICAgICAgPEdseXBoaWNvbiBnbHlwaD1cImNoZXZyb24tcmlnaHRcIiBzdHlsZT17eyBmbG9hdDogJ3JpZ2h0JywgbWFyZ2luVG9wOiAnM3B4JyB9fSBvbkNsaWNrPXt0aGlzLm9uRXhwYW5kQ2xpY2t9IC8+XG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJncm91cFwiPlxuICAgICAgICA8ZGl2IHJlZj17dGhpcy5ncm91cFJlZn1cbiAgICAgICAgICBjbGFzc05hbWU9e2dyb3VwTWVudUl0ZW1IZWFkaW5nQ2xhc3NOYW1lfT5cbiAgICAgICAgICB7YWN0aXZlICYmIGlzU3ViTWVudUV4cGFuZGVkID8gZXhwYW5kZWRHbHlwaCA6IGNvbGxhcHNlZEdseXBofVxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnIH19XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuR3JvdXAodHJ1ZSl9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBoZWlnaHQ6IDIwLCB3aWR0aDogMjAsIGRpc3BsYXk6ICdmbGV4JywgbWFyZ2luUmlnaHQ6ICcxMHB4JywgZmxvYXQ6ICdsZWZ0JyxcbiAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyMCwgd2lkdGg6IDIwLCBib3JkZXI6ICd3aGl0ZSBzb2xpZCAzcHgnLCBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICB9fSAvPlxuICAgICAgICAgICAgICA8Q2lyY3VsYXJQcm9ncmVzc1xuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJzdGF0aWNcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtwcm9ncmVzcyAqIDEwMH1cbiAgICAgICAgICAgICAgICB0aGlja25lc3M9ezEwfVxuICAgICAgICAgICAgICAgIHNpemU9ezE1fVxuICAgICAgICAgICAgICAgIGNvbG9yPXsncHJpbWFyeSd9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGFsaWduU2VsZjogJ2NlbnRlcicsIHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB3aWR0aDogMjAsIGhlaWdodDogMjAsIGNvbG9yOicjNDBCREYyJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7Z3JvdXBJbmRleC5uYW1lfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2FjdGl2ZSAmJiBpc1N1Yk1lbnVFeHBhbmRlZCA/XG4gICAgICAgICAgKDxHcm91cEl0ZW1zXG4gICAgICAgICAgICBjdXJyZW50VG9vbE5hbWU9e2N1cnJlbnRUb29sTmFtZX1cbiAgICAgICAgICAgIGlzVmVyc2VGaW5pc2hlZD17aXNWZXJzZUZpbmlzaGVkfVxuICAgICAgICAgICAgaXNWZXJzZVZhbGlkPXtpc1ZlcnNlVmFsaWR9XG4gICAgICAgICAgICBnZXRTZWxlY3Rpb25zPXtnZXRTZWxlY3Rpb25zfVxuICAgICAgICAgICAgY2hhbmdlQ3VycmVudENvbnRleHRJZD17Y2hhbmdlQ3VycmVudENvbnRleHRJZH1cbiAgICAgICAgICAgIGNvbnRleHRJZD17Y29udGV4dElkfVxuICAgICAgICAgICAgZ3JvdXBEYXRhPXtncm91cERhdGF9XG4gICAgICAgICAgICBhY3RpdmVHcm91cEl0ZW1SZWY9e3RoaXMuYWN0aXZlR3JvdXBJdGVtUmVmfVxuICAgICAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgICAgIG1hbmlmZXN0PXttYW5pZmVzdH0gLz4pXG4gICAgICAgICAgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5Hcm91cC5wcm9wVHlwZXMgPSB7XG4gIG1hbmlmZXN0OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGNvbnRleHRJZDogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBmaWx0ZXJzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGdyb3VwRGF0YTogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIGlzU3ViTWVudUV4cGFuZGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBncm91cE1lbnVFeHBhbmRTdWJNZW51OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvcGVuR3JvdXA6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHByb2dyZXNzOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGdyb3VwSW5kZXg6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgYWN0aXZlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBjaGFuZ2VDdXJyZW50Q29udGV4dElkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRTZWxlY3Rpb25zOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBpc1ZlcnNlRmluaXNoZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGlzVmVyc2VWYWxpZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY3VycmVudFRvb2xOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBHcm91cDtcbiJdfQ==