UNPKG

tc-ui-toolkit

Version:

React components used to develop tools for the desktop app translationCore

300 lines (261 loc) 29.2 kB
"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 _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 _Edit = _interopRequireDefault(require("@material-ui/icons/Edit")); var _reactBootstrap = require("react-bootstrap"); var _utils = require("../ScripturePane/helpers/utils"); var _fontUtils = require("../common/fontUtils"); var _EditScreen = _interopRequireDefault(require("./EditScreen")); var _ReasonScreen = _interopRequireDefault(require("./ReasonScreen")); var _BaseDialog = _interopRequireDefault(require("./BaseDialog")); require("./VerseEditor.styles.css"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 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 styles = { screen: { display: 'flex', flexDirection: 'row', padding: '12px 12px 0 12px' }, editor: { width: '320px', padding: '6px' }, editHeading: { paddingLeft: '6px', fontWeight: 'bold', fontSize: '16px' }, reasonHeading: { margin: '0 0 0 10px', fontWeight: 'bold', fontSize: '16px', width: '240px' } }; /** * Renders a form for editing a single verse * @property {string} verseText - the verse text to edit * @property {function} translate - the locale function * @property {function} onSubmit - callback when the edit is submitted * @property {function} onCancel - callback when the edit is canceled */ var VerseEditor = /*#__PURE__*/function (_React$Component) { (0, _inherits2["default"])(VerseEditor, _React$Component); var _super = _createSuper(VerseEditor); function VerseEditor(props) { var _this; (0, _classCallCheck2["default"])(this, VerseEditor); _this = _super.call(this, props); _this._handleCancel = _this._handleCancel.bind((0, _assertThisInitialized2["default"])(_this)); _this._handleSubmit = _this._handleSubmit.bind((0, _assertThisInitialized2["default"])(_this)); _this._handleVerseChange = _this._handleVerseChange.bind((0, _assertThisInitialized2["default"])(_this)); _this._handleReasonChange = _this._handleReasonChange.bind((0, _assertThisInitialized2["default"])(_this)); _this._handleReset = _this._handleReset.bind((0, _assertThisInitialized2["default"])(_this)); _this._resetState = _this._resetState.bind((0, _assertThisInitialized2["default"])(_this)); _this.state = { newVerse: '', verseChanged: false, reasons: [], isOptionDialogOpen: false }; return _this; } (0, _createClass2["default"])(VerseEditor, [{ key: "_resetState", value: function _resetState() { this.setState({ newVerse: '', verseChanged: false, reasons: [], isOptionDialogOpen: false }); } }, { key: "isVerseChangedAndHaveReasons", value: function isVerseChangedAndHaveReasons() { var _this$state = this.state, reasons = _this$state.reasons, verseChanged = _this$state.verseChanged; return verseChanged && reasons && reasons.length; } }, { key: "isVerseChanged", value: function isVerseChanged() { var verseChanged = this.state.verseChanged; return verseChanged; } }, { key: "_handleCancel", value: function _handleCancel() { var onCancel = this.props.onCancel; onCancel(); this._resetState(); } }, { key: "_handleReset", value: function _handleReset() { var verseText = this.props.verseText; this.setState({ newVerse: verseText, verseChanged: false }); } }, { key: "_handleSubmit", value: function _handleSubmit() { var _this$props = this.props, verseText = _this$props.verseText, onSubmit = _this$props.onSubmit; if (this.isVerseChangedAndHaveReasons() && onSubmit) { var _this$state2 = this.state, newVerse = _this$state2.newVerse, reasons = _this$state2.reasons; onSubmit(verseText, newVerse, reasons); this._resetState(); this._handleCancel(); } } }, { key: "_handleVerseChange", value: function _handleVerseChange(newVerse) { var verseText = this.props.verseText; this.setState({ newVerse: newVerse, verseChanged: newVerse !== verseText }); } }, { key: "_handleReasonChange", value: function _handleReasonChange(newReasons) { this.setState({ reasons: newReasons }); } }, { key: "render", value: function render() { var _this$props2 = this.props, open = _this$props2.open, verseText = _this$props2.verseText, translate = _this$props2.translate, verseTitle = _this$props2.verseTitle, targetLanguage = _this$props2.targetLanguage, targetLanguageFont = _this$props2.targetLanguageFont, targetLanguageFontSize = _this$props2.targetLanguageFontSize, direction = _this$props2.direction; var _this$state3 = this.state, newVerse = _this$state3.newVerse, reasons = _this$state3.reasons, verseChanged = _this$state3.verseChanged; var text = !verseChanged ? verseText : newVerse; var isVerseChangedAndHaveReason = this.isVerseChangedAndHaveReasons(); var isVerseChanged = this.isVerseChanged(); var targetLanguageFontClassName = (0, _fontUtils.getFontClassName)(targetLanguageFont); var title = /*#__PURE__*/_react["default"].createElement("span", { className: targetLanguageFontClassName }, /*#__PURE__*/_react["default"].createElement(_Edit["default"], { className: "edit-icon", style: { fontSize: '24px' } }), translate('edit_verse_title', { passage: verseTitle })); var rows = 9 + (!targetLanguage ? 1 : 0); // make taller if no language label var headingStyle = _objectSpread({}, styles.editHeading); if (!(0, _utils.isLTR)(direction)) { // if rtl, right justify headingStyle.textAlign = 'right'; headingStyle.paddingRight = '6px'; } return /*#__PURE__*/_react["default"].createElement(_BaseDialog["default"], { key: "VerseEditor-".concat(verseTitle), modal: true, open: open, title: title, onClose: this._handleCancel, actionsEnabled: false }, /*#__PURE__*/_react["default"].createElement("div", { className: "screen", style: styles.screen }, /*#__PURE__*/_react["default"].createElement("div", null, targetLanguage ? /*#__PURE__*/_react["default"].createElement("div", { style: headingStyle }, targetLanguage) : '', /*#__PURE__*/_react["default"].createElement(_EditScreen["default"], { rows: rows, verseText: text, style: styles.editor, onChange: this._handleVerseChange, targetLanguageFontClassName: targetLanguageFontClassName, targetLanguageFontSize: targetLanguageFontSize, direction: direction })), /*#__PURE__*/_react["default"].createElement("div", { style: styles.reasonHeading }, /*#__PURE__*/_react["default"].createElement("div", null, translate('select_reasons')), /*#__PURE__*/_react["default"].createElement(_ReasonScreen["default"], { translate: translate, selectedReasons: reasons, columns: 1, onChange: this._handleReasonChange }))), /*#__PURE__*/_react["default"].createElement("div", { className: "actions" }, /*#__PURE__*/_react["default"].createElement("button", { className: "btn-second", onClick: this._handleCancel }, translate('buttons.cancel_button')), /*#__PURE__*/_react["default"].createElement("button", { className: "btn-second", disabled: !isVerseChanged, onClick: this._handleReset }, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, { glyph: "repeat", style: { marginRight: '10px', transform: 'scaleX(-1)' } }), translate('buttons.reset_button')), /*#__PURE__*/_react["default"].createElement("button", { className: "btn-prime", disabled: !isVerseChangedAndHaveReason, onClick: this._handleSubmit }, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, { glyph: "ok", style: { marginRight: '10px' } }), translate('buttons.save_button')))); } }]); return VerseEditor; }(_react["default"].Component); VerseEditor.propTypes = { open: _propTypes["default"].bool.isRequired, verseTitle: _propTypes["default"].string.isRequired, verseText: _propTypes["default"].string.isRequired, translate: _propTypes["default"].func.isRequired, onCancel: _propTypes["default"].func.isRequired, onSubmit: _propTypes["default"].func.isRequired, targetLanguage: _propTypes["default"].string.isRequired, targetLanguageFont: _propTypes["default"].string, targetLanguageFontSize: _propTypes["default"].string, direction: _propTypes["default"].string.isRequired }; VerseEditor.defaultProps = { targetLanguage: '', direction: 'ltr', targetLanguageFontSize: '100%' }; var _default = VerseEditor; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9WZXJzZUVkaXRvci9WZXJzZUVkaXRvci5qcyJdLCJuYW1lcyI6WyJzdHlsZXMiLCJzY3JlZW4iLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsInBhZGRpbmciLCJlZGl0b3IiLCJ3aWR0aCIsImVkaXRIZWFkaW5nIiwicGFkZGluZ0xlZnQiLCJmb250V2VpZ2h0IiwiZm9udFNpemUiLCJyZWFzb25IZWFkaW5nIiwibWFyZ2luIiwiVmVyc2VFZGl0b3IiLCJwcm9wcyIsIl9oYW5kbGVDYW5jZWwiLCJiaW5kIiwiX2hhbmRsZVN1Ym1pdCIsIl9oYW5kbGVWZXJzZUNoYW5nZSIsIl9oYW5kbGVSZWFzb25DaGFuZ2UiLCJfaGFuZGxlUmVzZXQiLCJfcmVzZXRTdGF0ZSIsInN0YXRlIiwibmV3VmVyc2UiLCJ2ZXJzZUNoYW5nZWQiLCJyZWFzb25zIiwiaXNPcHRpb25EaWFsb2dPcGVuIiwic2V0U3RhdGUiLCJsZW5ndGgiLCJvbkNhbmNlbCIsInZlcnNlVGV4dCIsIm9uU3VibWl0IiwiaXNWZXJzZUNoYW5nZWRBbmRIYXZlUmVhc29ucyIsIm5ld1JlYXNvbnMiLCJvcGVuIiwidHJhbnNsYXRlIiwidmVyc2VUaXRsZSIsInRhcmdldExhbmd1YWdlIiwidGFyZ2V0TGFuZ3VhZ2VGb250IiwidGFyZ2V0TGFuZ3VhZ2VGb250U2l6ZSIsImRpcmVjdGlvbiIsInRleHQiLCJpc1ZlcnNlQ2hhbmdlZEFuZEhhdmVSZWFzb24iLCJpc1ZlcnNlQ2hhbmdlZCIsInRhcmdldExhbmd1YWdlRm9udENsYXNzTmFtZSIsInRpdGxlIiwicGFzc2FnZSIsInJvd3MiLCJoZWFkaW5nU3R5bGUiLCJ0ZXh0QWxpZ24iLCJwYWRkaW5nUmlnaHQiLCJtYXJnaW5SaWdodCIsInRyYW5zZm9ybSIsIlJlYWN0IiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiYm9vbCIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJmdW5jIiwiZGVmYXVsdFByb3BzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUVBOzs7Ozs7Ozs7O0FBRUEsSUFBTUEsTUFBTSxHQUFHO0FBQ2JDLEVBQUFBLE1BQU0sRUFBRTtBQUNOQyxJQUFBQSxPQUFPLEVBQUUsTUFESDtBQUNXQyxJQUFBQSxhQUFhLEVBQUUsS0FEMUI7QUFDaUNDLElBQUFBLE9BQU8sRUFBRTtBQUQxQyxHQURLO0FBSWJDLEVBQUFBLE1BQU0sRUFBRTtBQUFFQyxJQUFBQSxLQUFLLEVBQUUsT0FBVDtBQUFrQkYsSUFBQUEsT0FBTyxFQUFFO0FBQTNCLEdBSks7QUFLYkcsRUFBQUEsV0FBVyxFQUFFO0FBQ1hDLElBQUFBLFdBQVcsRUFBRSxLQURGO0FBQ1NDLElBQUFBLFVBQVUsRUFBRSxNQURyQjtBQUM2QkMsSUFBQUEsUUFBUSxFQUFFO0FBRHZDLEdBTEE7QUFRYkMsRUFBQUEsYUFBYSxFQUFFO0FBQ2JDLElBQUFBLE1BQU0sRUFBRSxZQURLO0FBRWJILElBQUFBLFVBQVUsRUFBRSxNQUZDO0FBR2JDLElBQUFBLFFBQVEsRUFBRSxNQUhHO0FBSWJKLElBQUFBLEtBQUssRUFBRTtBQUpNO0FBUkYsQ0FBZjtBQWlCQTs7Ozs7Ozs7SUFPTU8sVzs7Ozs7QUFDSix1QkFBWUMsS0FBWixFQUFtQjtBQUFBOztBQUFBO0FBQ2pCLDhCQUFNQSxLQUFOO0FBQ0EsVUFBS0MsYUFBTCxHQUFxQixNQUFLQSxhQUFMLENBQW1CQyxJQUFuQixnREFBckI7QUFDQSxVQUFLQyxhQUFMLEdBQXFCLE1BQUtBLGFBQUwsQ0FBbUJELElBQW5CLGdEQUFyQjtBQUNBLFVBQUtFLGtCQUFMLEdBQTBCLE1BQUtBLGtCQUFMLENBQXdCRixJQUF4QixnREFBMUI7QUFDQSxVQUFLRyxtQkFBTCxHQUEyQixNQUFLQSxtQkFBTCxDQUF5QkgsSUFBekIsZ0RBQTNCO0FBQ0EsVUFBS0ksWUFBTCxHQUFvQixNQUFLQSxZQUFMLENBQWtCSixJQUFsQixnREFBcEI7QUFDQSxVQUFLSyxXQUFMLEdBQW1CLE1BQUtBLFdBQUwsQ0FBaUJMLElBQWpCLGdEQUFuQjtBQUNBLFVBQUtNLEtBQUwsR0FBYTtBQUNYQyxNQUFBQSxRQUFRLEVBQUUsRUFEQztBQUVYQyxNQUFBQSxZQUFZLEVBQUUsS0FGSDtBQUdYQyxNQUFBQSxPQUFPLEVBQUUsRUFIRTtBQUlYQyxNQUFBQSxrQkFBa0IsRUFBRTtBQUpULEtBQWI7QUFSaUI7QUFjbEI7Ozs7a0NBRWE7QUFDWixXQUFLQyxRQUFMLENBQWM7QUFDWkosUUFBQUEsUUFBUSxFQUFFLEVBREU7QUFFWkMsUUFBQUEsWUFBWSxFQUFFLEtBRkY7QUFHWkMsUUFBQUEsT0FBTyxFQUFFLEVBSEc7QUFJWkMsUUFBQUEsa0JBQWtCLEVBQUU7QUFKUixPQUFkO0FBTUQ7OzttREFFOEI7QUFBQSx3QkFDSyxLQUFLSixLQURWO0FBQUEsVUFDckJHLE9BRHFCLGVBQ3JCQSxPQURxQjtBQUFBLFVBQ1pELFlBRFksZUFDWkEsWUFEWTtBQUU3QixhQUFPQSxZQUFZLElBQUlDLE9BQWhCLElBQTJCQSxPQUFPLENBQUNHLE1BQTFDO0FBQ0Q7OztxQ0FFZ0I7QUFBQSxVQUNQSixZQURPLEdBQ1UsS0FBS0YsS0FEZixDQUNQRSxZQURPO0FBRWYsYUFBT0EsWUFBUDtBQUNEOzs7b0NBRWU7QUFBQSxVQUNOSyxRQURNLEdBQ08sS0FBS2YsS0FEWixDQUNOZSxRQURNO0FBRWRBLE1BQUFBLFFBQVE7O0FBQ1IsV0FBS1IsV0FBTDtBQUNEOzs7bUNBRWM7QUFBQSxVQUNMUyxTQURLLEdBQ1MsS0FBS2hCLEtBRGQsQ0FDTGdCLFNBREs7QUFHYixXQUFLSCxRQUFMLENBQWM7QUFDWkosUUFBQUEsUUFBUSxFQUFFTyxTQURFO0FBRVpOLFFBQUFBLFlBQVksRUFBRTtBQUZGLE9BQWQ7QUFJRDs7O29DQUVlO0FBQUEsd0JBQ2tCLEtBQUtWLEtBRHZCO0FBQUEsVUFDTmdCLFNBRE0sZUFDTkEsU0FETTtBQUFBLFVBQ0tDLFFBREwsZUFDS0EsUUFETDs7QUFHZCxVQUFJLEtBQUtDLDRCQUFMLE1BQXVDRCxRQUEzQyxFQUFxRDtBQUFBLDJCQUNyQixLQUFLVCxLQURnQjtBQUFBLFlBQzNDQyxRQUQyQyxnQkFDM0NBLFFBRDJDO0FBQUEsWUFDakNFLE9BRGlDLGdCQUNqQ0EsT0FEaUM7QUFFbkRNLFFBQUFBLFFBQVEsQ0FBQ0QsU0FBRCxFQUFZUCxRQUFaLEVBQXNCRSxPQUF0QixDQUFSOztBQUNBLGFBQUtKLFdBQUw7O0FBQ0EsYUFBS04sYUFBTDtBQUNEO0FBQ0Y7Ozt1Q0FFa0JRLFEsRUFBVTtBQUFBLFVBQ25CTyxTQURtQixHQUNMLEtBQUtoQixLQURBLENBQ25CZ0IsU0FEbUI7QUFHM0IsV0FBS0gsUUFBTCxDQUFjO0FBQ1pKLFFBQUFBLFFBQVEsRUFBUkEsUUFEWTtBQUVaQyxRQUFBQSxZQUFZLEVBQUVELFFBQVEsS0FBS087QUFGZixPQUFkO0FBSUQ7Ozt3Q0FFbUJHLFUsRUFBWTtBQUM5QixXQUFLTixRQUFMLENBQWM7QUFBRUYsUUFBQUEsT0FBTyxFQUFFUTtBQUFYLE9BQWQ7QUFDRDs7OzZCQUVRO0FBQUEseUJBVUgsS0FBS25CLEtBVkY7QUFBQSxVQUVMb0IsSUFGSyxnQkFFTEEsSUFGSztBQUFBLFVBR0xKLFNBSEssZ0JBR0xBLFNBSEs7QUFBQSxVQUlMSyxTQUpLLGdCQUlMQSxTQUpLO0FBQUEsVUFLTEMsVUFMSyxnQkFLTEEsVUFMSztBQUFBLFVBTUxDLGNBTkssZ0JBTUxBLGNBTks7QUFBQSxVQU9MQyxrQkFQSyxnQkFPTEEsa0JBUEs7QUFBQSxVQVFMQyxzQkFSSyxnQkFRTEEsc0JBUks7QUFBQSxVQVNMQyxTQVRLLGdCQVNMQSxTQVRLO0FBQUEseUJBYUgsS0FBS2xCLEtBYkY7QUFBQSxVQVlMQyxRQVpLLGdCQVlMQSxRQVpLO0FBQUEsVUFZS0UsT0FaTCxnQkFZS0EsT0FaTDtBQUFBLFVBWWNELFlBWmQsZ0JBWWNBLFlBWmQ7QUFjUCxVQUFJaUIsSUFBSSxHQUFHLENBQUNqQixZQUFELEdBQWdCTSxTQUFoQixHQUE0QlAsUUFBdkM7QUFDQSxVQUFNbUIsMkJBQTJCLEdBQUcsS0FBS1YsNEJBQUwsRUFBcEM7QUFDQSxVQUFNVyxjQUFjLEdBQUcsS0FBS0EsY0FBTCxFQUF2QjtBQUNBLFVBQU1DLDJCQUEyQixHQUFHLGlDQUFpQk4sa0JBQWpCLENBQXBDOztBQUNBLFVBQU1PLEtBQUssZ0JBQ1Q7QUFBTSxRQUFBLFNBQVMsRUFBRUQ7QUFBakIsc0JBQ0UsZ0NBQUMsZ0JBQUQ7QUFBVSxRQUFBLFNBQVMsRUFBQyxXQUFwQjtBQUFnQyxRQUFBLEtBQUssRUFBRTtBQUFFbEMsVUFBQUEsUUFBUSxFQUFFO0FBQVo7QUFBdkMsUUFERixFQUVHeUIsU0FBUyxDQUFDLGtCQUFELEVBQXFCO0FBQUVXLFFBQUFBLE9BQU8sRUFBRVY7QUFBWCxPQUFyQixDQUZaLENBREY7O0FBTUEsVUFBTVcsSUFBSSxHQUFHLEtBQUssQ0FBQ1YsY0FBRCxHQUFrQixDQUFsQixHQUFzQixDQUEzQixDQUFiLENBeEJPLENBd0JxQzs7QUFDNUMsVUFBTVcsWUFBWSxxQkFBUWhELE1BQU0sQ0FBQ08sV0FBZixDQUFsQjs7QUFFQSxVQUFJLENBQUMsa0JBQU1pQyxTQUFOLENBQUwsRUFBdUI7QUFBRTtBQUN2QlEsUUFBQUEsWUFBWSxDQUFDQyxTQUFiLEdBQXlCLE9BQXpCO0FBQ0FELFFBQUFBLFlBQVksQ0FBQ0UsWUFBYixHQUE0QixLQUE1QjtBQUNEOztBQUVELDBCQUNFLGdDQUFDLHNCQUFEO0FBQ0UsUUFBQSxHQUFHLHdCQUFpQmQsVUFBakIsQ0FETDtBQUVFLFFBQUEsS0FBSyxFQUFFLElBRlQ7QUFHRSxRQUFBLElBQUksRUFBRUYsSUFIUjtBQUlFLFFBQUEsS0FBSyxFQUFFVyxLQUpUO0FBS0UsUUFBQSxPQUFPLEVBQUUsS0FBSzlCLGFBTGhCO0FBTUUsUUFBQSxjQUFjLEVBQUU7QUFObEIsc0JBUUU7QUFBSyxRQUFBLFNBQVMsRUFBQyxRQUFmO0FBQXdCLFFBQUEsS0FBSyxFQUFFZixNQUFNLENBQUNDO0FBQXRDLHNCQUNFLDZDQUNJb0MsY0FBYyxnQkFDZDtBQUFLLFFBQUEsS0FBSyxFQUFFVztBQUFaLFNBQ0dYLGNBREgsQ0FEYyxHQUlaLEVBTE4sZUFNRSxnQ0FBQyxzQkFBRDtBQUNFLFFBQUEsSUFBSSxFQUFFVSxJQURSO0FBRUUsUUFBQSxTQUFTLEVBQUVOLElBRmI7QUFHRSxRQUFBLEtBQUssRUFBRXpDLE1BQU0sQ0FBQ0ssTUFIaEI7QUFJRSxRQUFBLFFBQVEsRUFBRSxLQUFLYSxrQkFKakI7QUFLRSxRQUFBLDJCQUEyQixFQUFFMEIsMkJBTC9CO0FBTUUsUUFBQSxzQkFBc0IsRUFBRUwsc0JBTjFCO0FBT0UsUUFBQSxTQUFTLEVBQUVDO0FBUGIsUUFORixDQURGLGVBaUJFO0FBQUssUUFBQSxLQUFLLEVBQUV4QyxNQUFNLENBQUNXO0FBQW5CLHNCQUNFLDZDQUNHd0IsU0FBUyxDQUFDLGdCQUFELENBRFosQ0FERixlQUlFLGdDQUFDLHdCQUFEO0FBQ0UsUUFBQSxTQUFTLEVBQUVBLFNBRGI7QUFFRSxRQUFBLGVBQWUsRUFBRVYsT0FGbkI7QUFHRSxRQUFBLE9BQU8sRUFBRSxDQUhYO0FBSUUsUUFBQSxRQUFRLEVBQUUsS0FBS047QUFKakIsUUFKRixDQWpCRixDQVJGLGVBcUNFO0FBQUssUUFBQSxTQUFTLEVBQUM7QUFBZixzQkFDRTtBQUFRLFFBQUEsU0FBUyxFQUFDLFlBQWxCO0FBQ0UsUUFBQSxPQUFPLEVBQUUsS0FBS0o7QUFEaEIsU0FFR29CLFNBQVMsQ0FBQyx1QkFBRCxDQUZaLENBREYsZUFLRTtBQUFRLFFBQUEsU0FBUyxFQUFDLFlBQWxCO0FBQ0UsUUFBQSxRQUFRLEVBQUUsQ0FBQ1EsY0FEYjtBQUVFLFFBQUEsT0FBTyxFQUFFLEtBQUt2QjtBQUZoQixzQkFJRSxnQ0FBQyx5QkFBRDtBQUFXLFFBQUEsS0FBSyxFQUFDLFFBQWpCO0FBQTBCLFFBQUEsS0FBSyxFQUFFO0FBQUUrQixVQUFBQSxXQUFXLEVBQUUsTUFBZjtBQUF1QkMsVUFBQUEsU0FBUyxFQUFFO0FBQWxDO0FBQWpDLFFBSkYsRUFLR2pCLFNBQVMsQ0FBQyxzQkFBRCxDQUxaLENBTEYsZUFZRTtBQUFRLFFBQUEsU0FBUyxFQUFDLFdBQWxCO0FBQ0UsUUFBQSxRQUFRLEVBQUUsQ0FBQ08sMkJBRGI7QUFFRSxRQUFBLE9BQU8sRUFBRSxLQUFLekI7QUFGaEIsc0JBR0UsZ0NBQUMseUJBQUQ7QUFBVyxRQUFBLEtBQUssRUFBQyxJQUFqQjtBQUFzQixRQUFBLEtBQUssRUFBRTtBQUFFa0MsVUFBQUEsV0FBVyxFQUFFO0FBQWY7QUFBN0IsUUFIRixFQUlHaEIsU0FBUyxDQUFDLHFCQUFELENBSlosQ0FaRixDQXJDRixDQURGO0FBMkREOzs7RUF0S3VCa0Isa0JBQU1DLFM7O0FBeUtoQ3pDLFdBQVcsQ0FBQzBDLFNBQVosR0FBd0I7QUFDdEJyQixFQUFBQSxJQUFJLEVBQUVzQixzQkFBVUMsSUFBVixDQUFlQyxVQURDO0FBRXRCdEIsRUFBQUEsVUFBVSxFQUFFb0Isc0JBQVVHLE1BQVYsQ0FBaUJELFVBRlA7QUFHdEI1QixFQUFBQSxTQUFTLEVBQUUwQixzQkFBVUcsTUFBVixDQUFpQkQsVUFITjtBQUl0QnZCLEVBQUFBLFNBQVMsRUFBRXFCLHNCQUFVSSxJQUFWLENBQWVGLFVBSko7QUFLdEI3QixFQUFBQSxRQUFRLEVBQUUyQixzQkFBVUksSUFBVixDQUFlRixVQUxIO0FBTXRCM0IsRUFBQUEsUUFBUSxFQUFFeUIsc0JBQVVJLElBQVYsQ0FBZUYsVUFOSDtBQU90QnJCLEVBQUFBLGNBQWMsRUFBRW1CLHNCQUFVRyxNQUFWLENBQWlCRCxVQVBYO0FBUXRCcEIsRUFBQUEsa0JBQWtCLEVBQUVrQixzQkFBVUcsTUFSUjtBQVN0QnBCLEVBQUFBLHNCQUFzQixFQUFFaUIsc0JBQVVHLE1BVFo7QUFVdEJuQixFQUFBQSxTQUFTLEVBQUVnQixzQkFBVUcsTUFBVixDQUFpQkQ7QUFWTixDQUF4QjtBQWFBN0MsV0FBVyxDQUFDZ0QsWUFBWixHQUEyQjtBQUN6QnhCLEVBQUFBLGNBQWMsRUFBRSxFQURTO0FBRXpCRyxFQUFBQSxTQUFTLEVBQUUsS0FGYztBQUd6QkQsRUFBQUEsc0JBQXNCLEVBQUU7QUFIQyxDQUEzQjtlQU1lMUIsVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEVkaXRJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9FZGl0JztcbmltcG9ydCB7IEdseXBoaWNvbiB9IGZyb20gJ3JlYWN0LWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBpc0xUUiB9IGZyb20gJy4uL1NjcmlwdHVyZVBhbmUvaGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBnZXRGb250Q2xhc3NOYW1lIH0gZnJvbSAnLi4vY29tbW9uL2ZvbnRVdGlscyc7XG4vLyBjb21wb25lbnRzXG5pbXBvcnQgRWRpdFNjcmVlbiBmcm9tICcuL0VkaXRTY3JlZW4nO1xuaW1wb3J0IFJlYXNvblNjcmVlbiBmcm9tICcuL1JlYXNvblNjcmVlbic7XG5pbXBvcnQgQmFzZURpYWxvZyBmcm9tICcuL0Jhc2VEaWFsb2cnO1xuXG5pbXBvcnQgJy4vVmVyc2VFZGl0b3Iuc3R5bGVzLmNzcyc7XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgc2NyZWVuOiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAncm93JywgcGFkZGluZzogJzEycHggMTJweCAwIDEycHgnLFxuICB9LFxuICBlZGl0b3I6IHsgd2lkdGg6ICczMjBweCcsIHBhZGRpbmc6ICc2cHgnIH0sXG4gIGVkaXRIZWFkaW5nOiB7XG4gICAgcGFkZGluZ0xlZnQ6ICc2cHgnLCBmb250V2VpZ2h0OiAnYm9sZCcsIGZvbnRTaXplOiAnMTZweCcsXG4gIH0sXG4gIHJlYXNvbkhlYWRpbmc6IHtcbiAgICBtYXJnaW46ICcwIDAgMCAxMHB4JyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICB3aWR0aDogJzI0MHB4JyxcbiAgfSxcblxufTtcblxuLyoqXG4gKiBSZW5kZXJzIGEgZm9ybSBmb3IgZWRpdGluZyBhIHNpbmdsZSB2ZXJzZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNlVGV4dCAtIHRoZSB2ZXJzZSB0ZXh0IHRvIGVkaXRcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IHRyYW5zbGF0ZSAtIHRoZSBsb2NhbGUgZnVuY3Rpb25cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IG9uU3VibWl0IC0gY2FsbGJhY2sgd2hlbiB0aGUgZWRpdCBpcyBzdWJtaXR0ZWRcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IG9uQ2FuY2VsIC0gY2FsbGJhY2sgd2hlbiB0aGUgZWRpdCBpcyBjYW5jZWxlZFxuICovXG5jbGFzcyBWZXJzZUVkaXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuX2hhbmRsZUNhbmNlbCA9IHRoaXMuX2hhbmRsZUNhbmNlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2hhbmRsZVN1Ym1pdCA9IHRoaXMuX2hhbmRsZVN1Ym1pdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2hhbmRsZVZlcnNlQ2hhbmdlID0gdGhpcy5faGFuZGxlVmVyc2VDaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9oYW5kbGVSZWFzb25DaGFuZ2UgPSB0aGlzLl9oYW5kbGVSZWFzb25DaGFuZ2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9oYW5kbGVSZXNldCA9IHRoaXMuX2hhbmRsZVJlc2V0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5fcmVzZXRTdGF0ZSA9IHRoaXMuX3Jlc2V0U3RhdGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbmV3VmVyc2U6ICcnLFxuICAgICAgdmVyc2VDaGFuZ2VkOiBmYWxzZSxcbiAgICAgIHJlYXNvbnM6IFtdLFxuICAgICAgaXNPcHRpb25EaWFsb2dPcGVuOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgX3Jlc2V0U3RhdGUoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBuZXdWZXJzZTogJycsXG4gICAgICB2ZXJzZUNoYW5nZWQ6IGZhbHNlLFxuICAgICAgcmVhc29uczogW10sXG4gICAgICBpc09wdGlvbkRpYWxvZ09wZW46IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgaXNWZXJzZUNoYW5nZWRBbmRIYXZlUmVhc29ucygpIHtcbiAgICBjb25zdCB7IHJlYXNvbnMsIHZlcnNlQ2hhbmdlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICByZXR1cm4gdmVyc2VDaGFuZ2VkICYmIHJlYXNvbnMgJiYgcmVhc29ucy5sZW5ndGg7XG4gIH1cblxuICBpc1ZlcnNlQ2hhbmdlZCgpIHtcbiAgICBjb25zdCB7IHZlcnNlQ2hhbmdlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICByZXR1cm4gdmVyc2VDaGFuZ2VkO1xuICB9XG5cbiAgX2hhbmRsZUNhbmNlbCgpIHtcbiAgICBjb25zdCB7IG9uQ2FuY2VsIH0gPSB0aGlzLnByb3BzO1xuICAgIG9uQ2FuY2VsKCk7XG4gICAgdGhpcy5fcmVzZXRTdGF0ZSgpO1xuICB9XG5cbiAgX2hhbmRsZVJlc2V0KCkge1xuICAgIGNvbnN0IHsgdmVyc2VUZXh0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBuZXdWZXJzZTogdmVyc2VUZXh0LFxuICAgICAgdmVyc2VDaGFuZ2VkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIF9oYW5kbGVTdWJtaXQoKSB7XG4gICAgY29uc3QgeyB2ZXJzZVRleHQsIG9uU3VibWl0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKHRoaXMuaXNWZXJzZUNoYW5nZWRBbmRIYXZlUmVhc29ucygpICYmIG9uU3VibWl0KSB7XG4gICAgICBjb25zdCB7IG5ld1ZlcnNlLCByZWFzb25zIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgb25TdWJtaXQodmVyc2VUZXh0LCBuZXdWZXJzZSwgcmVhc29ucyk7XG4gICAgICB0aGlzLl9yZXNldFN0YXRlKCk7XG4gICAgICB0aGlzLl9oYW5kbGVDYW5jZWwoKTtcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlVmVyc2VDaGFuZ2UobmV3VmVyc2UpIHtcbiAgICBjb25zdCB7IHZlcnNlVGV4dCB9ID0gdGhpcy5wcm9wcztcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbmV3VmVyc2UsXG4gICAgICB2ZXJzZUNoYW5nZWQ6IG5ld1ZlcnNlICE9PSB2ZXJzZVRleHQsXG4gICAgfSk7XG4gIH1cblxuICBfaGFuZGxlUmVhc29uQ2hhbmdlKG5ld1JlYXNvbnMpIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgcmVhc29uczogbmV3UmVhc29ucyB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBvcGVuLFxuICAgICAgdmVyc2VUZXh0LFxuICAgICAgdHJhbnNsYXRlLFxuICAgICAgdmVyc2VUaXRsZSxcbiAgICAgIHRhcmdldExhbmd1YWdlLFxuICAgICAgdGFyZ2V0TGFuZ3VhZ2VGb250LFxuICAgICAgdGFyZ2V0TGFuZ3VhZ2VGb250U2l6ZSxcbiAgICAgIGRpcmVjdGlvbixcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7XG4gICAgICBuZXdWZXJzZSwgcmVhc29ucywgdmVyc2VDaGFuZ2VkLFxuICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgIGxldCB0ZXh0ID0gIXZlcnNlQ2hhbmdlZCA/IHZlcnNlVGV4dCA6IG5ld1ZlcnNlO1xuICAgIGNvbnN0IGlzVmVyc2VDaGFuZ2VkQW5kSGF2ZVJlYXNvbiA9IHRoaXMuaXNWZXJzZUNoYW5nZWRBbmRIYXZlUmVhc29ucygpO1xuICAgIGNvbnN0IGlzVmVyc2VDaGFuZ2VkID0gdGhpcy5pc1ZlcnNlQ2hhbmdlZCgpO1xuICAgIGNvbnN0IHRhcmdldExhbmd1YWdlRm9udENsYXNzTmFtZSA9IGdldEZvbnRDbGFzc05hbWUodGFyZ2V0TGFuZ3VhZ2VGb250KTtcbiAgICBjb25zdCB0aXRsZSA9IChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17dGFyZ2V0TGFuZ3VhZ2VGb250Q2xhc3NOYW1lfT5cbiAgICAgICAgPEVkaXRJY29uIGNsYXNzTmFtZT0nZWRpdC1pY29uJyBzdHlsZT17eyBmb250U2l6ZTogJzI0cHgnIH19Lz5cbiAgICAgICAge3RyYW5zbGF0ZSgnZWRpdF92ZXJzZV90aXRsZScsIHsgcGFzc2FnZTogdmVyc2VUaXRsZSB9KX1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICAgIGNvbnN0IHJvd3MgPSA5ICsgKCF0YXJnZXRMYW5ndWFnZSA/IDEgOiAwKTsgLy8gbWFrZSB0YWxsZXIgaWYgbm8gbGFuZ3VhZ2UgbGFiZWxcbiAgICBjb25zdCBoZWFkaW5nU3R5bGUgPSB7IC4uLnN0eWxlcy5lZGl0SGVhZGluZyB9O1xuXG4gICAgaWYgKCFpc0xUUihkaXJlY3Rpb24pKSB7IC8vIGlmIHJ0bCwgcmlnaHQganVzdGlmeVxuICAgICAgaGVhZGluZ1N0eWxlLnRleHRBbGlnbiA9ICdyaWdodCc7XG4gICAgICBoZWFkaW5nU3R5bGUucGFkZGluZ1JpZ2h0ID0gJzZweCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxCYXNlRGlhbG9nXG4gICAgICAgIGtleT17YFZlcnNlRWRpdG9yLSR7dmVyc2VUaXRsZX1gfVxuICAgICAgICBtb2RhbD17dHJ1ZX1cbiAgICAgICAgb3Blbj17b3Blbn1cbiAgICAgICAgdGl0bGU9e3RpdGxlfVxuICAgICAgICBvbkNsb3NlPXt0aGlzLl9oYW5kbGVDYW5jZWx9XG4gICAgICAgIGFjdGlvbnNFbmFibGVkPXtmYWxzZX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3NjcmVlbicgc3R5bGU9e3N0eWxlcy5zY3JlZW59PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICB7IHRhcmdldExhbmd1YWdlID8gKFxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkaW5nU3R5bGV9PlxuICAgICAgICAgICAgICAgIHt0YXJnZXRMYW5ndWFnZX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogJyd9XG4gICAgICAgICAgICA8RWRpdFNjcmVlblxuICAgICAgICAgICAgICByb3dzPXtyb3dzfVxuICAgICAgICAgICAgICB2ZXJzZVRleHQ9e3RleHR9XG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZWRpdG9yfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5faGFuZGxlVmVyc2VDaGFuZ2V9XG4gICAgICAgICAgICAgIHRhcmdldExhbmd1YWdlRm9udENsYXNzTmFtZT17dGFyZ2V0TGFuZ3VhZ2VGb250Q2xhc3NOYW1lfVxuICAgICAgICAgICAgICB0YXJnZXRMYW5ndWFnZUZvbnRTaXplPXt0YXJnZXRMYW5ndWFnZUZvbnRTaXplfVxuICAgICAgICAgICAgICBkaXJlY3Rpb249e2RpcmVjdGlvbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT17c3R5bGVzLnJlYXNvbkhlYWRpbmd9PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge3RyYW5zbGF0ZSgnc2VsZWN0X3JlYXNvbnMnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPFJlYXNvblNjcmVlblxuICAgICAgICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgICAgICAgc2VsZWN0ZWRSZWFzb25zPXtyZWFzb25zfVxuICAgICAgICAgICAgICBjb2x1bW5zPXsxfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5faGFuZGxlUmVhc29uQ2hhbmdlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPSdhY3Rpb25zJz5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1zZWNvbmRcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5faGFuZGxlQ2FuY2VsfT5cbiAgICAgICAgICAgIHt0cmFuc2xhdGUoJ2J1dHRvbnMuY2FuY2VsX2J1dHRvbicpfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYnRuLXNlY29uZFwiXG4gICAgICAgICAgICBkaXNhYmxlZD17IWlzVmVyc2VDaGFuZ2VkfVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5faGFuZGxlUmVzZXR9PlxuICAgICAgICAgICAgeyAvKiBUUklDS1kgLSBkbyBtaXJyb3IgaW1hZ2Ugb2YgcmVwZWF0IHRvIG1ha2UgcmVzZXQgaWNvbiAqLyB9XG4gICAgICAgICAgICA8R2x5cGhpY29uIGdseXBoPSdyZXBlYXQnIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMTBweCcsIHRyYW5zZm9ybTogJ3NjYWxlWCgtMSknIH19IC8+XG4gICAgICAgICAgICB7dHJhbnNsYXRlKCdidXR0b25zLnJlc2V0X2J1dHRvbicpfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYnRuLXByaW1lXCJcbiAgICAgICAgICAgIGRpc2FibGVkPXshaXNWZXJzZUNoYW5nZWRBbmRIYXZlUmVhc29ufVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5faGFuZGxlU3VibWl0fT5cbiAgICAgICAgICAgIDxHbHlwaGljb24gZ2x5cGg9J29rJyBzdHlsZT17eyBtYXJnaW5SaWdodDogJzEwcHgnIH19IC8+XG4gICAgICAgICAgICB7dHJhbnNsYXRlKCdidXR0b25zLnNhdmVfYnV0dG9uJyl9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9CYXNlRGlhbG9nPlxuICAgICk7XG4gIH1cbn1cblxuVmVyc2VFZGl0b3IucHJvcFR5cGVzID0ge1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICB2ZXJzZVRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHZlcnNlVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB0cmFuc2xhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ2FuY2VsOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblN1Ym1pdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdGFyZ2V0TGFuZ3VhZ2U6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgdGFyZ2V0TGFuZ3VhZ2VGb250OiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXRMYW5ndWFnZUZvbnRTaXplOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaXJlY3Rpb246IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbn07XG5cblZlcnNlRWRpdG9yLmRlZmF1bHRQcm9wcyA9IHtcbiAgdGFyZ2V0TGFuZ3VhZ2U6ICcnLFxuICBkaXJlY3Rpb246ICdsdHInLFxuICB0YXJnZXRMYW5ndWFnZUZvbnRTaXplOiAnMTAwJScsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBWZXJzZUVkaXRvcjtcbiJdfQ==