react-planner-viewer
Version:
react-planner-viewer is a React Component for view plans builded with react-planner in 2D mode
161 lines (129 loc) • 14.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _reactNumericInput = require('react-numeric-input');
var _reactNumericInput2 = _interopRequireDefault(_reactNumericInput);
var _sharedStyle = require('../../shared-style');
var SharedStyle = _interopRequireWildcard(_sharedStyle);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var STYLE_INPUT = {
display: 'block',
width: '100%',
padding: '0 2px',
fontSize: '13px',
lineHeight: '1.25',
color: '#55595c',
backgroundColor: SharedStyle.COLORS.white,
backgroundImage: 'none',
border: '1px solid rgba(0,0,0,.15)',
outline: 'none',
height: '30px'
};
var FormNumberInput = function (_Component) {
_inherits(FormNumberInput, _Component);
function FormNumberInput(props) {
_classCallCheck(this, FormNumberInput);
var _this = _possibleConstructorReturn(this, (FormNumberInput.__proto__ || Object.getPrototypeOf(FormNumberInput)).call(this, props));
_this.state = { focus: false };
return _this;
}
_createClass(FormNumberInput, [{
key: 'onChangeCustom',
value: function onChangeCustom(valueAsNumber, valueAsString, input) {
if (this.refs.realNumber.refs.input.checkValidity()) {
this.props.onChange({ target: { value: valueAsNumber } });
this.onValidCustom(valueAsNumber, valueAsString);
} else {
this.onInvalidCustom(valueAsNumber, valueAsString);
}
}
}, {
key: 'onValidCustom',
value: function onValidCustom(valueAsNumber, valueAsString) {
if (this.refs.realNumber) this.refs.realNumber.refs.input.style.color = STYLE_INPUT.color;
}
}, {
key: 'onInvalidCustom',
value: function onInvalidCustom(error, valueAsNumber, valueAsString) {
if (this.refs.realNumber) this.refs.realNumber.refs.input.style.color = 'red';
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var _props = this.props,
value = _props.value,
configs = _props.configs,
onChange = _props.onChange,
onValid = _props.onValid,
style = _props.style,
rest = _objectWithoutProperties(_props, ['value', 'configs', 'onChange', 'onValid', 'style']);
var min = configs.min,
max = configs.max,
precision = configs.precision;
var step = 1 / Math.pow(10, precision);
return _react2.default.createElement(_reactNumericInput2.default, {
ref: 'realNumber',
onChange: this.onChangeCustom.bind(this),
onInvalid: this.onInvalidCustom.bind(this),
onInput: function onInput(evt) {
return _this2.refs.realNumber.refs.input.style.color = evt.nativeEvent.target.checkValidity() ? STYLE_INPUT.color : 'red';
},
step: step,
precision: precision,
value: value,
type: 'number',
min: min,
max: max,
pattern: '^-?([0-9]+)\.?([0-9]+)?',
style: {
wrap: { width: '100%' },
input: _extends({}, STYLE_INPUT, style, {
border: this.state.focus ? '1px solid #66afe9' : '1px solid rgba(0,0,0,.15)'
})
},
snap: true
});
}
}]);
return FormNumberInput;
}(_react.Component);
exports.default = FormNumberInput;
FormNumberInput.propTypes = {
value: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]),
style: _propTypes2.default.object,
onChange: _propTypes2.default.func,
onValid: _propTypes2.default.func,
configs: _propTypes2.default.object
};
FormNumberInput.defaultProps = {
value: 0,
style: {},
onChange: function onChange() {
return console.log('onValid instead');
},
onValid: function onValid() {
return console.log('onValid not defined');
},
onInvalid: function onInvalid() {
return console.log('onInvalid not defined');
},
configs: {
min: Number.MIN_SAFE_INTEGER,
max: Number.MAX_SAFE_INTEGER,
precision: 3
}
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3N0eWxlL2Zvcm0tbnVtYmVyLWlucHV0LmpzeCJdLCJuYW1lcyI6WyJTaGFyZWRTdHlsZSIsIlNUWUxFX0lOUFVUIiwiZGlzcGxheSIsIndpZHRoIiwicGFkZGluZyIsImZvbnRTaXplIiwibGluZUhlaWdodCIsImNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwiQ09MT1JTIiwid2hpdGUiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJib3JkZXIiLCJvdXRsaW5lIiwiaGVpZ2h0IiwiRm9ybU51bWJlcklucHV0IiwicHJvcHMiLCJzdGF0ZSIsImZvY3VzIiwidmFsdWVBc051bWJlciIsInZhbHVlQXNTdHJpbmciLCJpbnB1dCIsInJlZnMiLCJyZWFsTnVtYmVyIiwiY2hlY2tWYWxpZGl0eSIsIm9uQ2hhbmdlIiwidGFyZ2V0IiwidmFsdWUiLCJvblZhbGlkQ3VzdG9tIiwib25JbnZhbGlkQ3VzdG9tIiwic3R5bGUiLCJlcnJvciIsImNvbmZpZ3MiLCJvblZhbGlkIiwicmVzdCIsIm1pbiIsIm1heCIsInByZWNpc2lvbiIsInN0ZXAiLCJNYXRoIiwicG93Iiwib25DaGFuZ2VDdXN0b20iLCJiaW5kIiwiZXZ0IiwibmF0aXZlRXZlbnQiLCJ3cmFwIiwicHJvcFR5cGVzIiwib25lT2ZUeXBlIiwibnVtYmVyIiwic3RyaW5nIiwib2JqZWN0IiwiZnVuYyIsImRlZmF1bHRQcm9wcyIsImNvbnNvbGUiLCJsb2ciLCJvbkludmFsaWQiLCJOdW1iZXIiLCJNSU5fU0FGRV9JTlRFR0VSIiwiTUFYX1NBRkVfSU5URUdFUiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztJQUFZQSxXOzs7Ozs7Ozs7Ozs7OztBQUVaLElBQU1DLGNBQWM7QUFDbEJDLFdBQVMsT0FEUztBQUVsQkMsU0FBTyxNQUZXO0FBR2xCQyxXQUFTLE9BSFM7QUFJbEJDLFlBQVUsTUFKUTtBQUtsQkMsY0FBWSxNQUxNO0FBTWxCQyxTQUFPLFNBTlc7QUFPbEJDLG1CQUFpQlIsWUFBWVMsTUFBWixDQUFtQkMsS0FQbEI7QUFRbEJDLG1CQUFpQixNQVJDO0FBU2xCQyxVQUFRLDJCQVRVO0FBVWxCQyxXQUFTLE1BVlM7QUFXbEJDLFVBQVE7QUFYVSxDQUFwQjs7SUFjcUJDLGU7OztBQUVuQiwyQkFBWUMsS0FBWixFQUFtQjtBQUFBOztBQUFBLGtJQUNYQSxLQURXOztBQUVqQixVQUFLQyxLQUFMLEdBQWEsRUFBQ0MsT0FBTyxLQUFSLEVBQWI7QUFGaUI7QUFHbEI7Ozs7bUNBRWNDLGEsRUFBZUMsYSxFQUFlQyxLLEVBQU87QUFDbEQsVUFBSSxLQUFLQyxJQUFMLENBQVVDLFVBQVYsQ0FBcUJELElBQXJCLENBQTBCRCxLQUExQixDQUFnQ0csYUFBaEMsRUFBSixFQUNBO0FBQ0UsYUFBS1IsS0FBTCxDQUFXUyxRQUFYLENBQXFCLEVBQUVDLFFBQVEsRUFBRUMsT0FBT1IsYUFBVCxFQUFWLEVBQXJCO0FBQ0EsYUFBS1MsYUFBTCxDQUFtQlQsYUFBbkIsRUFBa0NDLGFBQWxDO0FBQ0QsT0FKRCxNQU1BO0FBQ0UsYUFBS1MsZUFBTCxDQUFxQlYsYUFBckIsRUFBb0NDLGFBQXBDO0FBQ0Q7QUFDRjs7O2tDQUVjRCxhLEVBQWVDLGEsRUFBZ0I7QUFDNUMsVUFBSSxLQUFLRSxJQUFMLENBQVVDLFVBQWQsRUFBMEIsS0FBS0QsSUFBTCxDQUFVQyxVQUFWLENBQXFCRCxJQUFyQixDQUEwQkQsS0FBMUIsQ0FBZ0NTLEtBQWhDLENBQXNDdkIsS0FBdEMsR0FBOENOLFlBQVlNLEtBQTFEO0FBRTNCOzs7b0NBRWdCd0IsSyxFQUFPWixhLEVBQWVDLGEsRUFBZ0I7QUFDckQsVUFBSSxLQUFLRSxJQUFMLENBQVVDLFVBQWQsRUFBMEIsS0FBS0QsSUFBTCxDQUFVQyxVQUFWLENBQXFCRCxJQUFyQixDQUEwQkQsS0FBMUIsQ0FBZ0NTLEtBQWhDLENBQXNDdkIsS0FBdEMsR0FBOEMsS0FBOUM7QUFDM0I7Ozs2QkFFUTtBQUFBOztBQUFBLG1CQUVtRCxLQUFLUyxLQUZ4RDtBQUFBLFVBRUZXLEtBRkUsVUFFRkEsS0FGRTtBQUFBLFVBRUtLLE9BRkwsVUFFS0EsT0FGTDtBQUFBLFVBRWNQLFFBRmQsVUFFY0EsUUFGZDtBQUFBLFVBRXdCUSxPQUZ4QixVQUV3QkEsT0FGeEI7QUFBQSxVQUVpQ0gsS0FGakMsVUFFaUNBLEtBRmpDO0FBQUEsVUFFMkNJLElBRjNDOztBQUFBLFVBR0RDLEdBSEMsR0FHdUJILE9BSHZCLENBR0RHLEdBSEM7QUFBQSxVQUdJQyxHQUhKLEdBR3VCSixPQUh2QixDQUdJSSxHQUhKO0FBQUEsVUFHU0MsU0FIVCxHQUd1QkwsT0FIdkIsQ0FHU0ssU0FIVDs7QUFJUCxVQUFJQyxPQUFPLElBQUlDLEtBQUtDLEdBQUwsQ0FBUyxFQUFULEVBQWFILFNBQWIsQ0FBZjs7QUFFQSxhQUFPO0FBQ0wsYUFBSSxZQURDO0FBRUwsa0JBQVUsS0FBS0ksY0FBTCxDQUFvQkMsSUFBcEIsQ0FBeUIsSUFBekIsQ0FGTDtBQUdMLG1CQUFXLEtBQUtiLGVBQUwsQ0FBcUJhLElBQXJCLENBQTBCLElBQTFCLENBSE47QUFJTCxpQkFBUyxpQkFBQ0MsR0FBRDtBQUFBLGlCQUFTLE9BQUtyQixJQUFMLENBQVVDLFVBQVYsQ0FBcUJELElBQXJCLENBQTBCRCxLQUExQixDQUFnQ1MsS0FBaEMsQ0FBc0N2QixLQUF0QyxHQUE4Q29DLElBQUlDLFdBQUosQ0FBZ0JsQixNQUFoQixDQUF1QkYsYUFBdkIsS0FBeUN2QixZQUFZTSxLQUFyRCxHQUE2RCxLQUFwSDtBQUFBLFNBSko7QUFLTCxjQUFNK0IsSUFMRDtBQU1MLG1CQUFXRCxTQU5OO0FBT0wsZUFBT1YsS0FQRjtBQVFMLGNBQU0sUUFSRDtBQVNMLGFBQUtRLEdBVEE7QUFVTCxhQUFLQyxHQVZBO0FBV0wsaUJBQVMseUJBWEo7QUFZTCxlQUNFO0FBQ0VTLGdCQUFNLEVBQUUxQyxPQUFPLE1BQVQsRUFEUjtBQUVFa0IsOEJBQ0twQixXQURMLEVBRUs2QixLQUZMO0FBR0VsQixvQkFBUSxLQUFLSyxLQUFMLENBQVdDLEtBQVgsR0FBbUIsbUJBQW5CLEdBQXlDO0FBSG5EO0FBRkYsU0FiRztBQXNCTDtBQXRCSyxRQUFQO0FBd0JEOzs7Ozs7a0JBMURrQkgsZTs7O0FBNkRyQkEsZ0JBQWdCK0IsU0FBaEIsR0FBNEI7QUFDMUJuQixTQUFPLG9CQUFVb0IsU0FBVixDQUFvQixDQUFDLG9CQUFVQyxNQUFYLEVBQW1CLG9CQUFVQyxNQUE3QixDQUFwQixDQURtQjtBQUUxQm5CLFNBQU8sb0JBQVVvQixNQUZTO0FBRzFCekIsWUFBVSxvQkFBVTBCLElBSE07QUFJMUJsQixXQUFTLG9CQUFVa0IsSUFKTztBQUsxQm5CLFdBQVMsb0JBQVVrQjtBQUxPLENBQTVCOztBQVFBbkMsZ0JBQWdCcUMsWUFBaEIsR0FBK0I7QUFDN0J6QixTQUFPLENBRHNCO0FBRTdCRyxTQUFPLEVBRnNCO0FBRzdCTCxZQUFVO0FBQUEsV0FBTTRCLFFBQVFDLEdBQVIsQ0FBWSxpQkFBWixDQUFOO0FBQUEsR0FIbUI7QUFJN0JyQixXQUFTO0FBQUEsV0FBTW9CLFFBQVFDLEdBQVIsQ0FBWSxxQkFBWixDQUFOO0FBQUEsR0FKb0I7QUFLN0JDLGFBQVc7QUFBQSxXQUFNRixRQUFRQyxHQUFSLENBQVksdUJBQVosQ0FBTjtBQUFBLEdBTGtCO0FBTTdCdEIsV0FBUztBQUNQRyxTQUFLcUIsT0FBT0MsZ0JBREw7QUFFUHJCLFNBQUtvQixPQUFPRSxnQkFGTDtBQUdQckIsZUFBVztBQUhKO0FBTm9CLENBQS9CIiwiZmlsZSI6ImZvcm0tbnVtYmVyLWlucHV0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IE51bWVyaWNJbnB1dCBmcm9tICdyZWFjdC1udW1lcmljLWlucHV0JztcbmltcG9ydCAqIGFzIFNoYXJlZFN0eWxlIGZyb20gJy4uLy4uL3NoYXJlZC1zdHlsZSc7XG5cbmNvbnN0IFNUWUxFX0lOUFVUID0ge1xuICBkaXNwbGF5OiAnYmxvY2snLFxuICB3aWR0aDogJzEwMCUnLFxuICBwYWRkaW5nOiAnMCAycHgnLFxuICBmb250U2l6ZTogJzEzcHgnLFxuICBsaW5lSGVpZ2h0OiAnMS4yNScsXG4gIGNvbG9yOiAnIzU1NTk1YycsXG4gIGJhY2tncm91bmRDb2xvcjogU2hhcmVkU3R5bGUuQ09MT1JTLndoaXRlLFxuICBiYWNrZ3JvdW5kSW1hZ2U6ICdub25lJyxcbiAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMCwwLDAsLjE1KScsXG4gIG91dGxpbmU6ICdub25lJyxcbiAgaGVpZ2h0OiAnMzBweCcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtTnVtYmVySW5wdXQgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7Zm9jdXM6IGZhbHNlfTtcbiAgfVxuXG4gIG9uQ2hhbmdlQ3VzdG9tKHZhbHVlQXNOdW1iZXIsIHZhbHVlQXNTdHJpbmcsIGlucHV0KSB7XG4gICAgaWYoIHRoaXMucmVmcy5yZWFsTnVtYmVyLnJlZnMuaW5wdXQuY2hlY2tWYWxpZGl0eSgpIClcbiAgICB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKCB7IHRhcmdldDogeyB2YWx1ZTogdmFsdWVBc051bWJlciB9IH0gKTtcbiAgICAgIHRoaXMub25WYWxpZEN1c3RvbSh2YWx1ZUFzTnVtYmVyLCB2YWx1ZUFzU3RyaW5nKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIHRoaXMub25JbnZhbGlkQ3VzdG9tKHZhbHVlQXNOdW1iZXIsIHZhbHVlQXNTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIG9uVmFsaWRDdXN0b20oIHZhbHVlQXNOdW1iZXIsIHZhbHVlQXNTdHJpbmcgKSB7XG4gICAgaWYoIHRoaXMucmVmcy5yZWFsTnVtYmVyKSB0aGlzLnJlZnMucmVhbE51bWJlci5yZWZzLmlucHV0LnN0eWxlLmNvbG9yID0gU1RZTEVfSU5QVVQuY29sb3I7XG5cbiAgfVxuXG4gIG9uSW52YWxpZEN1c3RvbSggZXJyb3IsIHZhbHVlQXNOdW1iZXIsIHZhbHVlQXNTdHJpbmcgKSB7XG4gICAgaWYoIHRoaXMucmVmcy5yZWFsTnVtYmVyKSB0aGlzLnJlZnMucmVhbE51bWJlci5yZWZzLmlucHV0LnN0eWxlLmNvbG9yID0gJ3JlZCc7XG4gIH1cblxuICByZW5kZXIoKSB7XG5cbiAgICBsZXQge3ZhbHVlLCBjb25maWdzLCBvbkNoYW5nZSwgb25WYWxpZCwgc3R5bGUsIC4uLnJlc3R9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgeyBtaW4sIG1heCwgcHJlY2lzaW9uIH0gPSBjb25maWdzO1xuICAgIGxldCBzdGVwID0gMSAvIE1hdGgucG93KDEwLCBwcmVjaXNpb24pO1xuXG4gICAgcmV0dXJuIDxOdW1lcmljSW5wdXRcbiAgICAgIHJlZj1cInJlYWxOdW1iZXJcIlxuICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2VDdXN0b20uYmluZCh0aGlzKX1cbiAgICAgIG9uSW52YWxpZD17dGhpcy5vbkludmFsaWRDdXN0b20uYmluZCh0aGlzKX1cbiAgICAgIG9uSW5wdXQ9eyhldnQpID0+IHRoaXMucmVmcy5yZWFsTnVtYmVyLnJlZnMuaW5wdXQuc3R5bGUuY29sb3IgPSBldnQubmF0aXZlRXZlbnQudGFyZ2V0LmNoZWNrVmFsaWRpdHkoKSA/IFNUWUxFX0lOUFVULmNvbG9yIDogJ3JlZCcgfVxuICAgICAgc3RlcD17c3RlcH1cbiAgICAgIHByZWNpc2lvbj17cHJlY2lzaW9ufVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgdHlwZT17J251bWJlcid9XG4gICAgICBtaW49e21pbn1cbiAgICAgIG1heD17bWF4fVxuICAgICAgcGF0dGVybj17J14tPyhbMC05XSspXFwuPyhbMC05XSspPyd9XG4gICAgICBzdHlsZT17XG4gICAgICAgIHtcbiAgICAgICAgICB3cmFwOiB7IHdpZHRoOiAnMTAwJSd9LFxuICAgICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgICAuLi5TVFlMRV9JTlBVVCxcbiAgICAgICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAgICAgYm9yZGVyOiB0aGlzLnN0YXRlLmZvY3VzID8gJzFweCBzb2xpZCAjNjZhZmU5JyA6ICcxcHggc29saWQgcmdiYSgwLDAsMCwuMTUpJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc25hcFxuICAgIC8+O1xuICB9XG59XG5cbkZvcm1OdW1iZXJJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIHZhbHVlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVmFsaWQ6IFByb3BUeXBlcy5mdW5jLFxuICBjb25maWdzOiBQcm9wVHlwZXMub2JqZWN0XG59O1xuXG5Gb3JtTnVtYmVySW5wdXQuZGVmYXVsdFByb3BzID0ge1xuICB2YWx1ZTogMCxcbiAgc3R5bGU6IHt9LFxuICBvbkNoYW5nZTogKCkgPT4gY29uc29sZS5sb2coJ29uVmFsaWQgaW5zdGVhZCcpLFxuICBvblZhbGlkOiAoKSA9PiBjb25zb2xlLmxvZygnb25WYWxpZCBub3QgZGVmaW5lZCcpLFxuICBvbkludmFsaWQ6ICgpID0+IGNvbnNvbGUubG9nKCdvbkludmFsaWQgbm90IGRlZmluZWQnKSxcbiAgY29uZmlnczoge1xuICAgIG1pbjogTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsXG4gICAgbWF4OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICBwcmVjaXNpb246IDNcbiAgfVxufTtcbiJdfQ==