styledot
Version:
23andMe Design System
183 lines (149 loc) • 20.2 kB
JavaScript
"use strict";
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reactModal = _interopRequireDefault(require("react-modal"));
var _uuid = require("uuid");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a 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); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
try {
_reactModal["default"].setAppElement('.sd-modal-app-element');
} catch (error) {
console.error('App element missing for StyleDot Modal. See documentation: https://style.23andme.com/components#modals-section');
}
var Modal = /*#__PURE__*/function (_React$Component) {
_inherits(Modal, _React$Component);
var _super = _createSuper(Modal);
function Modal(props) {
var _this;
_classCallCheck(this, Modal);
_this = _super.call(this, props);
_this.state = {
hasScrolled: false
};
_this.handleScroll = _this.handleScroll.bind(_assertThisInitialized(_this));
_this.closeModal = _this.props.closeModal.bind(_assertThisInitialized(_this));
_this.ctaPosition = props.ctaPosition ? "dismiss-cta-".concat(props.ctaPosition) : '';
_this.uid = (0, _uuid.v4)();
return _this;
}
_createClass(Modal, [{
key: "classString",
value: function classString() {
var defaultClasses = 'sd-modal sd-elevation-2';
if (this.props.alternateModal) {
defaultClasses += " sd-modal-".concat(this.props.alternateModal);
if (this.props.useWhiteDismissButton) {
defaultClasses += " mod-modal-white-dismiss";
}
}
return defaultClasses;
}
}, {
key: "modalSizeClassString",
value: function modalSizeClassString() {
var sizeClass = '';
if (this.props.modalSize) {
sizeClass = "mod-modal-".concat(this.props.modalSize);
}
return sizeClass;
}
}, {
key: "overlayClassString",
value: function overlayClassString() {
var overlayDefaultClasses = 'sd-modal-overlay';
if (this.props.alternateModal === 'interstitial' || this.props.alternateModal === 'interstitial-promo' || this.props.modalSize) {
overlayDefaultClasses += " mod-overlay-dark";
}
return overlayDefaultClasses;
}
}, {
key: "handleScroll",
value: function handleScroll() {
var wrapper = document.querySelector('.sd-modal-wrapper');
if (wrapper.scrollTop > 0 && !this.state.hasScrolled) {
this.setState({
hasScrolled: true
});
} else if (wrapper.scrollTop === 0 && this.state.hasScrolled) {
this.setState({
hasScrolled: false
});
}
}
}, {
key: "render",
value: function render() {
return /*#__PURE__*/_react["default"].createElement(_reactModal["default"], {
isOpen: this.props.isVisible,
onRequestClose: this.props.closeModal,
className: "".concat(this.classString(), " ").concat(this.modalSizeClassString()),
overlayClassName: this.overlayClassString(),
bodyOpenClassName: "sd-modal-body",
contentLabel: this.props.contentLabel,
aria: {
describedby: "modal-contents-".concat(this.uid),
modal: true
}
}, /*#__PURE__*/_react["default"].createElement("button", {
className: "sd-unbutton sd-modal-dismiss-top ".concat(this.state.hasScrolled ? 'mod-scrolled' : ''),
onClick: this.props.closeModal,
"aria-label": "Close"
}), /*#__PURE__*/_react["default"].createElement("div", {
id: "modal-contents-".concat(this.uid),
className: "sd-modal-wrapper",
onScroll: this.handleScroll
}, this.props.contents && /*#__PURE__*/_react["default"].createElement("div", {
// Careful here!
dangerouslySetInnerHTML: {
__html: this.props.contents
}
}), this.props.children && this.props.children, this.props.includeDismissCta && /*#__PURE__*/_react["default"].createElement("div", {
className: "sd-modal-dismiss-cta-container ".concat(this.ctaPosition)
}, /*#__PURE__*/_react["default"].createElement("button", {
className: "sd-button sd-modal-dismiss-cta ".concat(this.props.extraClasses),
onClick: this.props.closeModal
}, this.props.dismissText))));
}
}]);
return Modal;
}(_react["default"].Component);
Modal.defaultProps = {
contents: '',
dismissText: 'Close',
ctaPosition: '',
extraClasses: '',
includeDismissCta: true,
alternateModal: '',
useWhiteDismissButton: false,
contentLabel: 'Modal'
};
Modal.propTypes = {
isVisible: _propTypes["default"].bool.isRequired,
closeModal: _propTypes["default"].func.isRequired,
contents: _propTypes["default"].string,
dismissText: _propTypes["default"].string,
ctaPosition: _propTypes["default"].string,
extraClasses: _propTypes["default"].string,
includeDismissCta: _propTypes["default"].bool,
alternateModal: _propTypes["default"].string,
modalSize: _propTypes["default"].string,
useWhiteDismissButton: _propTypes["default"].bool,
contentLabel: _propTypes["default"].string
};
var _default = Modal;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdE1vZGFsIiwic2V0QXBwRWxlbWVudCIsImVycm9yIiwiY29uc29sZSIsIk1vZGFsIiwicHJvcHMiLCJzdGF0ZSIsImhhc1Njcm9sbGVkIiwiaGFuZGxlU2Nyb2xsIiwiYmluZCIsImNsb3NlTW9kYWwiLCJjdGFQb3NpdGlvbiIsInVpZCIsInV1aWQiLCJkZWZhdWx0Q2xhc3NlcyIsImFsdGVybmF0ZU1vZGFsIiwidXNlV2hpdGVEaXNtaXNzQnV0dG9uIiwic2l6ZUNsYXNzIiwibW9kYWxTaXplIiwib3ZlcmxheURlZmF1bHRDbGFzc2VzIiwid3JhcHBlciIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInNjcm9sbFRvcCIsInNldFN0YXRlIiwiaXNWaXNpYmxlIiwiY2xhc3NTdHJpbmciLCJtb2RhbFNpemVDbGFzc1N0cmluZyIsIm92ZXJsYXlDbGFzc1N0cmluZyIsImNvbnRlbnRMYWJlbCIsImRlc2NyaWJlZGJ5IiwibW9kYWwiLCJjb250ZW50cyIsIl9faHRtbCIsImNoaWxkcmVuIiwiaW5jbHVkZURpc21pc3NDdGEiLCJleHRyYUNsYXNzZXMiLCJkaXNtaXNzVGV4dCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiZGVmYXVsdFByb3BzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiYm9vbCIsImlzUmVxdWlyZWQiLCJmdW5jIiwic3RyaW5nIl0sInNvdXJjZXMiOlsiLi4vc3JjL2xpYi9tb2RhbC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBpcyB0aGUgbGF5ZXIgdGhhdCBleGVjdXRlcyBvbiB0aGUgb2ZmaWNpYWwgcmVhY3QtbW9kYWwgY29tcG9uZW50XG4vLyBUaGlzIGlzIGFjY2Vzc2VkIGJ5XG4vLyAtIG1vZGFsLWluc3RhbmNlLmpzeCAoZm9yIFJlYWN0IHVzYWdlKVxuLy8gLSBtb2RhbC1pbml0LmpzIChmb3IgdmFuaWxsYSB1c2FnZSlcbi8vIGh0dHBzOi8vc3R5bGUuMjNhbmRtZS5jb20vY29tcG9uZW50cy8jbW9kYWxzLXNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb25cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5cbnRyeSB7XG4gICAgUmVhY3RNb2RhbC5zZXRBcHBFbGVtZW50KCcuc2QtbW9kYWwtYXBwLWVsZW1lbnQnKTtcbn0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0FwcCBlbGVtZW50IG1pc3NpbmcgZm9yIFN0eWxlRG90IE1vZGFsLiBTZWUgZG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9zdHlsZS4yM2FuZG1lLmNvbS9jb21wb25lbnRzI21vZGFscy1zZWN0aW9uJ1xuICAgICk7XG59XG5cbmNsYXNzIE1vZGFsIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBoYXNTY3JvbGxlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaGFuZGxlU2Nyb2xsID0gdGhpcy5oYW5kbGVTY3JvbGwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5jbG9zZU1vZGFsID0gdGhpcy5wcm9wcy5jbG9zZU1vZGFsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY3RhUG9zaXRpb24gPSBwcm9wcy5jdGFQb3NpdGlvbiA/IGBkaXNtaXNzLWN0YS0ke3Byb3BzLmN0YVBvc2l0aW9ufWAgOiAnJztcbiAgICAgICAgdGhpcy51aWQgPSB1dWlkKCk7XG4gICAgfVxuXG4gICAgY2xhc3NTdHJpbmcoKSB7XG4gICAgICAgIGxldCBkZWZhdWx0Q2xhc3NlcyA9ICdzZC1tb2RhbCBzZC1lbGV2YXRpb24tMic7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmFsdGVybmF0ZU1vZGFsKSB7XG4gICAgICAgICAgICBkZWZhdWx0Q2xhc3NlcyArPSBgIHNkLW1vZGFsLSR7dGhpcy5wcm9wcy5hbHRlcm5hdGVNb2RhbH1gO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMudXNlV2hpdGVEaXNtaXNzQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdENsYXNzZXMgKz0gYCBtb2QtbW9kYWwtd2hpdGUtZGlzbWlzc2A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRDbGFzc2VzO1xuICAgIH1cbiAgICBtb2RhbFNpemVDbGFzc1N0cmluZygpIHtcbiAgICAgICAgbGV0IHNpemVDbGFzcyA9ICcnO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5tb2RhbFNpemUpIHtcbiAgICAgICAgICAgIHNpemVDbGFzcyA9IGBtb2QtbW9kYWwtJHt0aGlzLnByb3BzLm1vZGFsU2l6ZX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaXplQ2xhc3M7XG4gICAgfVxuXG4gICAgb3ZlcmxheUNsYXNzU3RyaW5nKCkge1xuICAgICAgICBsZXQgb3ZlcmxheURlZmF1bHRDbGFzc2VzID0gJ3NkLW1vZGFsLW92ZXJsYXknO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnByb3BzLmFsdGVybmF0ZU1vZGFsID09PSAnaW50ZXJzdGl0aWFsJyB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5hbHRlcm5hdGVNb2RhbCA9PT0gJ2ludGVyc3RpdGlhbC1wcm9tbycgfHxcbiAgICAgICAgICAgIHRoaXMucHJvcHMubW9kYWxTaXplXG4gICAgICAgICkge1xuICAgICAgICAgICAgb3ZlcmxheURlZmF1bHRDbGFzc2VzICs9IGAgbW9kLW92ZXJsYXktZGFya2A7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG92ZXJsYXlEZWZhdWx0Q2xhc3NlcztcbiAgICB9XG5cbiAgICBoYW5kbGVTY3JvbGwoKSB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2QtbW9kYWwtd3JhcHBlcicpO1xuICAgICAgICBpZiAod3JhcHBlci5zY3JvbGxUb3AgPiAwICYmICF0aGlzLnN0YXRlLmhhc1Njcm9sbGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgaGFzU2Nyb2xsZWQ6IHRydWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAod3JhcHBlci5zY3JvbGxUb3AgPT09IDAgJiYgdGhpcy5zdGF0ZS5oYXNTY3JvbGxlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGhhc1Njcm9sbGVkOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxSZWFjdE1vZGFsXG4gICAgICAgICAgICAgICAgaXNPcGVuPXt0aGlzLnByb3BzLmlzVmlzaWJsZX1cbiAgICAgICAgICAgICAgICBvblJlcXVlc3RDbG9zZT17dGhpcy5wcm9wcy5jbG9zZU1vZGFsfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7dGhpcy5jbGFzc1N0cmluZygpfSAke3RoaXMubW9kYWxTaXplQ2xhc3NTdHJpbmcoKX1gfVxuICAgICAgICAgICAgICAgIG92ZXJsYXlDbGFzc05hbWU9e3RoaXMub3ZlcmxheUNsYXNzU3RyaW5nKCl9XG4gICAgICAgICAgICAgICAgYm9keU9wZW5DbGFzc05hbWU9XCJzZC1tb2RhbC1ib2R5XCJcbiAgICAgICAgICAgICAgICBjb250ZW50TGFiZWw9e3RoaXMucHJvcHMuY29udGVudExhYmVsfVxuICAgICAgICAgICAgICAgIGFyaWE9e3tcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVkYnk6IGBtb2RhbC1jb250ZW50cy0ke3RoaXMudWlkfWAsXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BzZC11bmJ1dHRvbiBzZC1tb2RhbC1kaXNtaXNzLXRvcCAke3RoaXMuc3RhdGUuaGFzU2Nyb2xsZWQgPyAnbW9kLXNjcm9sbGVkJyA6ICcnfWB9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucHJvcHMuY2xvc2VNb2RhbH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9e2Btb2RhbC1jb250ZW50cy0ke3RoaXMudWlkfWB9IGNsYXNzTmFtZT1cInNkLW1vZGFsLXdyYXBwZXJcIiBvblNjcm9sbD17dGhpcy5oYW5kbGVTY3JvbGx9PlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jb250ZW50cyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FyZWZ1bCBoZXJlIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faHRtbDogdGhpcy5wcm9wcy5jb250ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW4gJiYgdGhpcy5wcm9wcy5jaGlsZHJlbn1cblxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5pbmNsdWRlRGlzbWlzc0N0YSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YHNkLW1vZGFsLWRpc21pc3MtY3RhLWNvbnRhaW5lciAke3RoaXMuY3RhUG9zaXRpb259YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BzZC1idXR0b24gc2QtbW9kYWwtZGlzbWlzcy1jdGEgJHt0aGlzLnByb3BzLmV4dHJhQ2xhc3Nlc31gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnByb3BzLmNsb3NlTW9kYWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5kaXNtaXNzVGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9SZWFjdE1vZGFsPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuTW9kYWwuZGVmYXVsdFByb3BzID0ge1xuICAgIGNvbnRlbnRzOiAnJyxcbiAgICBkaXNtaXNzVGV4dDogJ0Nsb3NlJyxcbiAgICBjdGFQb3NpdGlvbjogJycsXG4gICAgZXh0cmFDbGFzc2VzOiAnJyxcbiAgICBpbmNsdWRlRGlzbWlzc0N0YTogdHJ1ZSxcbiAgICBhbHRlcm5hdGVNb2RhbDogJycsXG4gICAgdXNlV2hpdGVEaXNtaXNzQnV0dG9uOiBmYWxzZSxcbiAgICBjb250ZW50TGFiZWw6ICdNb2RhbCcsXG59O1xuXG5Nb2RhbC5wcm9wVHlwZXMgPSB7XG4gICAgaXNWaXNpYmxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGNsb3NlTW9kYWw6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgY29udGVudHM6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGlzbWlzc1RleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY3RhUG9zaXRpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZXh0cmFDbGFzc2VzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGluY2x1ZGVEaXNtaXNzQ3RhOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBhbHRlcm5hdGVNb2RhbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtb2RhbFNpemU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdXNlV2hpdGVEaXNtaXNzQnV0dG9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb250ZW50TGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2RhbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQUk7RUFDQUEsc0JBQUEsQ0FBV0MsYUFBWCxDQUF5Qix1QkFBekI7QUFDSCxDQUZELENBRUUsT0FBT0MsS0FBUCxFQUFjO0VBQ1pDLE9BQU8sQ0FBQ0QsS0FBUixDQUNJLGdIQURKO0FBR0g7O0lBRUtFLEs7Ozs7O0VBQ0YsZUFBWUMsS0FBWixFQUFtQjtJQUFBOztJQUFBOztJQUNmLDBCQUFNQSxLQUFOO0lBQ0EsTUFBS0MsS0FBTCxHQUFhO01BQ1RDLFdBQVcsRUFBRTtJQURKLENBQWI7SUFHQSxNQUFLQyxZQUFMLEdBQW9CLE1BQUtBLFlBQUwsQ0FBa0JDLElBQWxCLCtCQUFwQjtJQUNBLE1BQUtDLFVBQUwsR0FBa0IsTUFBS0wsS0FBTCxDQUFXSyxVQUFYLENBQXNCRCxJQUF0QiwrQkFBbEI7SUFDQSxNQUFLRSxXQUFMLEdBQW1CTixLQUFLLENBQUNNLFdBQU4seUJBQW1DTixLQUFLLENBQUNNLFdBQXpDLElBQXlELEVBQTVFO0lBQ0EsTUFBS0MsR0FBTCxHQUFXLElBQUFDLFFBQUEsR0FBWDtJQVJlO0VBU2xCOzs7O1dBRUQsdUJBQWM7TUFDVixJQUFJQyxjQUFjLEdBQUcseUJBQXJCOztNQUNBLElBQUks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