kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
141 lines (140 loc) • 28.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ConfigGroupCollapsibleHeader = exports.ConfigGroupCollapsibleContent = void 0;
exports.LayerConfigGroupLabelFactory = LayerConfigGroupLabelFactory;
exports["default"] = exports.StyledLayerConfigGroupAction = exports.StyledLayerConfigGroup = exports.StyledConfigGroupHeader = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _classnames = _interopRequireDefault(require("classnames"));
var _reactIntl = require("react-intl");
var _switch = _interopRequireDefault(require("../../common/switch"));
var _infoHelper = _interopRequireDefault(require("../../common/info-helper"));
var _icons = require("../../common/icons");
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7; // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
var StyledLayerConfigGroupAction = exports.StyledLayerConfigGroupAction = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n color: ", ";\n"])), function (props) {
return props.theme.textColor;
});
var ConfigGroupCollapsibleContent = exports.ConfigGroupCollapsibleContent = _styledComponents["default"].div.attrs({
className: 'layer-config-group__content__collapsible'
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n transition: max-height 0.3s ease-out;\n height: max-content;\n max-height: 1200px;\n overflow: auto;\n"])));
var ConfigGroupCollapsibleHeader = exports.ConfigGroupCollapsibleHeader = _styledComponents["default"].div.attrs({
className: 'layer-config-group__header__collapsible'
})(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n overflow: visible;\n overflow: hidden;\n max-height: 0;\n"])));
var StyledLayerConfigGroup = exports.StyledLayerConfigGroup = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n padding-left: ", "px;\n margin-bottom: ", "px;\n\n &.disabled {\n opacity: 0.3;\n pointer-events: none;\n }\n &.collapsed {\n .layer-config-group__header__collapsible {\n overflow: visible;\n max-height: 600px;\n }\n .layer-config-group__content {\n .layer-config-group__content__collapsible {\n overflow: hidden;\n max-height: 0;\n }\n }\n }\n"])), function (props) {
return props.theme.layerConfigGroupPaddingLeft;
}, function (props) {
return props.theme.layerConfigGroupMarginBottom;
});
var StyledConfigGroupHeader = exports.StyledConfigGroupHeader = _styledComponents["default"].div.attrs({
className: 'layer-config-group__header'
})(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n cursor: default;\n\n &:hover {\n ", "\n .layer-config-group__label {\n color: ", ";\n }\n\n .layer-config-group__action {\n color: ", ";\n }\n }\n"])), function (props) {
return props.collapsible && 'cursor: pointer;';
}, function (props) {
return props.theme.textColorHl;
}, function (props) {
return props.theme.textColorHl;
});
var ConfigGroupContent = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n &.disabled {\n opacity: 0.3;\n pointer-events: none;\n * {\n pointer-events: none;\n }\n }\n"])));
LayerConfigGroupLabelFactory.deps = [_infoHelper["default"]];
function LayerConfigGroupLabelFactory(InfoHelper) {
var StyledLayerConfigGroupLabel = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n border-left: ", " solid\n ", ";\n line-height: 12px;\n margin-left: ", ";\n padding-left: ", ";\n\n display: flex;\n align-items: center;\n\n span {\n color: ", ";\n font-weight: 500;\n letter-spacing: 0.2px;\n text-transform: capitalize;\n margin-left: ", ";\n font-size: ", ";\n }\n "])), function (props) {
return props.theme.layerConfigGroupLabelBorderLeft;
}, function (props) {
return props.theme.labelColor;
}, function (props) {
return props.theme.layerConfigGroupLabelMargin;
}, function (props) {
return props.theme.layerConfigGroupLabelPadding;
}, function (props) {
return props.theme.textColor;
}, function (props) {
return props.theme.layerConfigGroupLabelLabelMargin;
}, function (props) {
return props.theme.layerConfigGroupLabelLabelFontSize;
});
var LayerConfigGroupLabel = function LayerConfigGroupLabel(_ref) {
var label = _ref.label,
description = _ref.description;
return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigGroupLabel, {
className: "layer-config-group__label"
}, /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement(_reactIntl.FormattedMessage, {
id: label || 'misc.empty',
defaultMessage: label
})), description && /*#__PURE__*/_react["default"].createElement(InfoHelper, {
description: description,
id: label
}));
};
return LayerConfigGroupLabel;
}
LayerConfigGroupFactory.deps = [LayerConfigGroupLabelFactory];
function nop() {
return;
}
function LayerConfigGroupFactory(LayerConfigGroupLabel) {
var LayerConfigGroup = function LayerConfigGroup(_ref2) {
var label = _ref2.label,
children = _ref2.children,
property = _ref2.property,
layer = _ref2.layer,
_ref2$onChange = _ref2.onChange,
_onChange2 = _ref2$onChange === void 0 ? nop : _ref2$onChange,
_ref2$collapsible = _ref2.collapsible,
collapsible = _ref2$collapsible === void 0 ? false : _ref2$collapsible,
_ref2$description = _ref2.description,
description = _ref2$description === void 0 ? '' : _ref2$description,
_ref2$disabled = _ref2.disabled,
disabled = _ref2$disabled === void 0 ? false : _ref2$disabled,
_ref2$expanded = _ref2.expanded,
expanded = _ref2$expanded === void 0 ? false : _ref2$expanded,
_ref2$IconComponent = _ref2.IconComponent,
IconComponent = _ref2$IconComponent === void 0 ? _icons.VertThreeDots : _ref2$IconComponent;
var _useState = (0, _react.useState)(!expanded),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
collapsed = _useState2[0],
toggleCollapsed = _useState2[1];
var onToggleCollapsed = (0, _react.useCallback)(function () {
collapsible && toggleCollapsed(!collapsed);
}, [collapsed, toggleCollapsed, collapsible]);
return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigGroup, {
className: (0, _classnames["default"])('layer-config-group', {
collapsed: collapsed,
disabled: disabled
})
}, /*#__PURE__*/_react["default"].createElement(StyledConfigGroupHeader, {
onClick: onToggleCollapsed,
collapsible: collapsible
}, /*#__PURE__*/_react["default"].createElement(LayerConfigGroupLabel, {
label: label,
description: description,
collapsed: collapsed
}), /*#__PURE__*/_react["default"].createElement(StyledLayerConfigGroupAction, {
className: "layer-config-group__action"
}, property ? /*#__PURE__*/_react["default"].createElement(_switch["default"], {
checked: layer === null || layer === void 0 ? void 0 : layer.config.visConfig[property],
id: "".concat(layer === null || layer === void 0 ? void 0 : layer.id, "-").concat(property),
onChange: function onChange() {
return _onChange2 === null || _onChange2 === void 0 ? void 0 : _onChange2((0, _defineProperty2["default"])({}, property, !(layer !== null && layer !== void 0 && layer.config.visConfig[property])));
}
}) : null, collapsible ? /*#__PURE__*/_react["default"].createElement(IconComponent, {
height: "18px"
}) : null)), /*#__PURE__*/_react["default"].createElement(ConfigGroupContent, {
className: (0, _classnames["default"])('layer-config-group__content', {
disabled: property && !(layer !== null && layer !== void 0 && layer.config.visConfig[property])
})
}, children));
};
return LayerConfigGroup;
}
var _default = exports["default"] = LayerConfigGroupFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lcyIsIl9yZWFjdEludGwiLCJfc3dpdGNoIiwiX2luZm9IZWxwZXIiLCJfaWNvbnMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDQiLCJfdGVtcGxhdGVPYmplY3Q1IiwiX3RlbXBsYXRlT2JqZWN0NiIsIl90ZW1wbGF0ZU9iamVjdDciLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTdHlsZWRMYXllckNvbmZpZ0dyb3VwQWN0aW9uIiwiZXhwb3J0cyIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsInRleHRDb2xvciIsIkNvbmZpZ0dyb3VwQ29sbGFwc2libGVDb250ZW50IiwiYXR0cnMiLCJjbGFzc05hbWUiLCJDb25maWdHcm91cENvbGxhcHNpYmxlSGVhZGVyIiwiU3R5bGVkTGF5ZXJDb25maWdHcm91cCIsImxheWVyQ29uZmlnR3JvdXBQYWRkaW5nTGVmdCIsImxheWVyQ29uZmlnR3JvdXBNYXJnaW5Cb3R0b20iLCJTdHlsZWRDb25maWdHcm91cEhlYWRlciIsImNvbGxhcHNpYmxlIiwidGV4dENvbG9ySGwiLCJDb25maWdHcm91cENvbnRlbnQiLCJMYXllckNvbmZpZ0dyb3VwTGFiZWxGYWN0b3J5IiwiZGVwcyIsIkluZm9IZWxwZXJGYWN0b3J5IiwiSW5mb0hlbHBlciIsIlN0eWxlZExheWVyQ29uZmlnR3JvdXBMYWJlbCIsImxheWVyQ29uZmlnR3JvdXBMYWJlbEJvcmRlckxlZnQiLCJsYWJlbENvbG9yIiwibGF5ZXJDb25maWdHcm91cExhYmVsTWFyZ2luIiwibGF5ZXJDb25maWdHcm91cExhYmVsUGFkZGluZyIsImxheWVyQ29uZmlnR3JvdXBMYWJlbExhYmVsTWFyZ2luIiwibGF5ZXJDb25maWdHcm91cExhYmVsTGFiZWxGb250U2l6ZSIsIkxheWVyQ29uZmlnR3JvdXBMYWJlbCIsIl9yZWYiLCJsYWJlbCIsImRlc2NyaXB0aW9uIiwiY3JlYXRlRWxlbWVudCIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJpZCIsImRlZmF1bHRNZXNzYWdlIiwiTGF5ZXJDb25maWdHcm91cEZhY3RvcnkiLCJub3AiLCJMYXllckNvbmZpZ0dyb3VwIiwiX3JlZjIiLCJjaGlsZHJlbiIsInByb3BlcnR5IiwibGF5ZXIiLCJfcmVmMiRvbkNoYW5nZSIsIm9uQ2hhbmdlIiwiX3JlZjIkY29sbGFwc2libGUiLCJfcmVmMiRkZXNjcmlwdGlvbiIsIl9yZWYyJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfcmVmMiRleHBhbmRlZCIsImV4cGFuZGVkIiwiX3JlZjIkSWNvbkNvbXBvbmVudCIsIkljb25Db21wb25lbnQiLCJWZXJ0VGhyZWVEb3RzIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiY29sbGFwc2VkIiwidG9nZ2xlQ29sbGFwc2VkIiwib25Ub2dnbGVDb2xsYXBzZWQiLCJ1c2VDYWxsYmFjayIsImNsYXNzbmFtZXMiLCJvbkNsaWNrIiwiY2hlY2tlZCIsImNvbmZpZyIsInZpc0NvbmZpZyIsImNvbmNhdCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJoZWlnaHQiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL2xheWVyLWNvbmZpZy1ncm91cC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCBTd2l0Y2ggZnJvbSAnLi4vLi4vY29tbW9uL3N3aXRjaCc7XG5pbXBvcnQgSW5mb0hlbHBlckZhY3RvcnkgZnJvbSAnLi4vLi4vY29tbW9uL2luZm8taGVscGVyJztcbmltcG9ydCB7VmVydFRocmVlRG90c30gZnJvbSAnLi4vLi4vY29tbW9uL2ljb25zJztcbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7TGF5ZXJWaXNDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBMYXllckNvbmZpZ0dyb3VwTGFiZWxQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjb2xsYXBzZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTGF5ZXJDb25maWdHcm91cFByb3BzID0ge1xuICBsYXllcj86IExheWVyO1xuICBsYWJlbDogc3RyaW5nO1xuICBwcm9wZXJ0eT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNvbGxhcHNpYmxlPzogYm9vbGVhbjtcbiAgZXhwYW5kZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG9uQ2hhbmdlPzogKG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz4pID0+IHZvaWQ7XG4gIEljb25Db21wb25lbnQ/OiBSZWFjdC5FbGVtZW50VHlwZTtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG59O1xuXG5leHBvcnQgY29uc3QgU3R5bGVkTGF5ZXJDb25maWdHcm91cEFjdGlvbiA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG5gO1xuXG5leHBvcnQgY29uc3QgQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUNvbnRlbnQgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItY29uZmlnLWdyb3VwX19jb250ZW50X19jb2xsYXBzaWJsZSdcbn0pYFxuICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuM3MgZWFzZS1vdXQ7XG4gIGhlaWdodDogbWF4LWNvbnRlbnQ7XG4gIG1heC1oZWlnaHQ6IDEyMDBweDtcbiAgb3ZlcmZsb3c6IGF1dG87XG5gO1xuXG5leHBvcnQgY29uc3QgQ29uZmlnR3JvdXBDb2xsYXBzaWJsZUhlYWRlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdsYXllci1jb25maWctZ3JvdXBfX2hlYWRlcl9fY29sbGFwc2libGUnXG59KWBcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG1heC1oZWlnaHQ6IDA7XG5gO1xuXG5leHBvcnQgY29uc3QgU3R5bGVkTGF5ZXJDb25maWdHcm91cCA9IHN0eWxlZC5kaXZgXG4gIHBhZGRpbmctbGVmdDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYXllckNvbmZpZ0dyb3VwUGFkZGluZ0xlZnR9cHg7XG4gIG1hcmdpbi1ib3R0b206ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGF5ZXJDb25maWdHcm91cE1hcmdpbkJvdHRvbX1weDtcblxuICAmLmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjM7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cbiAgJi5jb2xsYXBzZWQge1xuICAgIC5sYXllci1jb25maWctZ3JvdXBfX2hlYWRlcl9fY29sbGFwc2libGUge1xuICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICBtYXgtaGVpZ2h0OiA2MDBweDtcbiAgICB9XG4gICAgLmxheWVyLWNvbmZpZy1ncm91cF9fY29udGVudCB7XG4gICAgICAubGF5ZXItY29uZmlnLWdyb3VwX19jb250ZW50X19jb2xsYXBzaWJsZSB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIG1heC1oZWlnaHQ6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5pbnRlcmZhY2UgU3R5bGVkQ29uZmlnR3JvdXBIZWFkZXJQcm9wcyB7XG4gIGNvbGxhcHNpYmxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IFN0eWxlZENvbmZpZ0dyb3VwSGVhZGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2xheWVyLWNvbmZpZy1ncm91cF9faGVhZGVyJ1xufSk8U3R5bGVkQ29uZmlnR3JvdXBIZWFkZXJQcm9wcz5gXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuXG4gICY6aG92ZXIge1xuICAgICR7cHJvcHMgPT4gcHJvcHMuY29sbGFwc2libGUgJiYgJ2N1cnNvcjogcG9pbnRlcjsnfVxuICAgIC5sYXllci1jb25maWctZ3JvdXBfX2xhYmVsIHtcbiAgICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckhsfTtcbiAgICB9XG5cbiAgICAubGF5ZXItY29uZmlnLWdyb3VwX19hY3Rpb24ge1xuICAgICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9ySGx9O1xuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgQ29uZmlnR3JvdXBDb250ZW50ID0gc3R5bGVkLmRpdmBcbiAgJi5kaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICoge1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuICB9XG5gO1xuXG5MYXllckNvbmZpZ0dyb3VwTGFiZWxGYWN0b3J5LmRlcHMgPSBbSW5mb0hlbHBlckZhY3RvcnldO1xuXG5leHBvcnQgZnVuY3Rpb24gTGF5ZXJDb25maWdHcm91cExhYmVsRmFjdG9yeShJbmZvSGVscGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBJbmZvSGVscGVyRmFjdG9yeT4pIHtcbiAgY29uc3QgU3R5bGVkTGF5ZXJDb25maWdHcm91cExhYmVsID0gc3R5bGVkLmRpdmBcbiAgICBib3JkZXItbGVmdDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYXllckNvbmZpZ0dyb3VwTGFiZWxCb3JkZXJMZWZ0fSBzb2xpZFxuICAgICAgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYWJlbENvbG9yfTtcbiAgICBsaW5lLWhlaWdodDogMTJweDtcbiAgICBtYXJnaW4tbGVmdDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYXllckNvbmZpZ0dyb3VwTGFiZWxNYXJnaW59O1xuICAgIHBhZGRpbmctbGVmdDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYXllckNvbmZpZ0dyb3VwTGFiZWxQYWRkaW5nfTtcblxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgIHNwYW4ge1xuICAgICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yfTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4ycHg7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlnR3JvdXBMYWJlbExhYmVsTWFyZ2lufTtcbiAgICAgIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYXllckNvbmZpZ0dyb3VwTGFiZWxMYWJlbEZvbnRTaXplfTtcbiAgICB9XG4gIGA7XG5cbiAgY29uc3QgTGF5ZXJDb25maWdHcm91cExhYmVsOiBSZWFjdC5GQzxMYXllckNvbmZpZ0dyb3VwTGFiZWxQcm9wcz4gPSAoe2xhYmVsLCBkZXNjcmlwdGlvbn0pID0+IChcbiAgICA8U3R5bGVkTGF5ZXJDb25maWdHcm91cExhYmVsIGNsYXNzTmFtZT1cImxheWVyLWNvbmZpZy1ncm91cF9fbGFiZWxcIj5cbiAgICAgIDxzcGFuPlxuICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17bGFiZWwgfHwgJ21pc2MuZW1wdHknfSBkZWZhdWx0TWVzc2FnZT17bGFiZWx9IC8+XG4gICAgICA8L3NwYW4+XG4gICAgICB7ZGVzY3JpcHRpb24gJiYgPEluZm9IZWxwZXIgZGVzY3JpcHRpb249e2Rlc2NyaXB0aW9ufSBpZD17bGFiZWx9IC8+fVxuICAgIDwvU3R5bGVkTGF5ZXJDb25maWdHcm91cExhYmVsPlxuICApO1xuXG4gIHJldHVybiBMYXllckNvbmZpZ0dyb3VwTGFiZWw7XG59XG5cbkxheWVyQ29uZmlnR3JvdXBGYWN0b3J5LmRlcHMgPSBbTGF5ZXJDb25maWdHcm91cExhYmVsRmFjdG9yeV07XG5cbmZ1bmN0aW9uIG5vcCgpIHtcbiAgcmV0dXJuO1xufVxuZnVuY3Rpb24gTGF5ZXJDb25maWdHcm91cEZhY3RvcnkoXG4gIExheWVyQ29uZmlnR3JvdXBMYWJlbDogUmV0dXJuVHlwZTx0eXBlb2YgTGF5ZXJDb25maWdHcm91cExhYmVsRmFjdG9yeT5cbikge1xuICBjb25zdCBMYXllckNvbmZpZ0dyb3VwOiBSZWFjdC5GQzxMYXllckNvbmZpZ0dyb3VwUHJvcHM+ID0gKHtcbiAgICBsYWJlbCxcbiAgICBjaGlsZHJlbixcbiAgICBwcm9wZXJ0eSxcbiAgICBsYXllcixcbiAgICBvbkNoYW5nZSA9IG5vcCxcbiAgICBjb2xsYXBzaWJsZSA9IGZhbHNlLFxuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBleHBhbmRlZCA9IGZhbHNlLFxuICAgIEljb25Db21wb25lbnQgPSBWZXJ0VGhyZWVEb3RzXG4gIH0pID0+IHtcbiAgICBjb25zdCBbY29sbGFwc2VkLCB0b2dnbGVDb2xsYXBzZWRdID0gdXNlU3RhdGUoIWV4cGFuZGVkKTtcbiAgICBjb25zdCBvblRvZ2dsZUNvbGxhcHNlZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGNvbGxhcHNpYmxlICYmIHRvZ2dsZUNvbGxhcHNlZCghY29sbGFwc2VkKTtcbiAgICB9LCBbY29sbGFwc2VkLCB0b2dnbGVDb2xsYXBzZWQsIGNvbGxhcHNpYmxlXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZExheWVyQ29uZmlnR3JvdXAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdsYXllci1jb25maWctZ3JvdXAnLCB7Y29sbGFwc2VkLCBkaXNhYmxlZH0pfT5cbiAgICAgICAgPFN0eWxlZENvbmZpZ0dyb3VwSGVhZGVyIG9uQ2xpY2s9e29uVG9nZ2xlQ29sbGFwc2VkfSBjb2xsYXBzaWJsZT17Y29sbGFwc2libGV9PlxuICAgICAgICAgIDxMYXllckNvbmZpZ0dyb3VwTGFiZWwgbGFiZWw9e2xhYmVsfSBkZXNjcmlwdGlvbj17ZGVzY3JpcHRpb259IGNvbGxhcHNlZD17Y29sbGFwc2VkfSAvPlxuICAgICAgICAgIDxTdHlsZWRMYXllckNvbmZpZ0dyb3VwQWN0aW9uIGNsYXNzTmFtZT1cImxheWVyLWNvbmZpZy1ncm91cF9fYWN0aW9uXCI+XG4gICAgICAgICAgICB7cHJvcGVydHkgPyAoXG4gICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICBjaGVja2VkPXtsYXllcj8uY29uZmlnLnZpc0NvbmZpZ1twcm9wZXJ0eV19XG4gICAgICAgICAgICAgICAgaWQ9e2Ake2xheWVyPy5pZH0tJHtwcm9wZXJ0eX1gfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBvbkNoYW5nZT8uKHtbcHJvcGVydHldOiAhbGF5ZXI/LmNvbmZpZy52aXNDb25maWdbcHJvcGVydHldfSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtjb2xsYXBzaWJsZSA/IDxJY29uQ29tcG9uZW50IGhlaWdodD1cIjE4cHhcIiAvPiA6IG51bGx9XG4gICAgICAgICAgPC9TdHlsZWRMYXllckNvbmZpZ0dyb3VwQWN0aW9uPlxuICAgICAgICA8L1N0eWxlZENvbmZpZ0dyb3VwSGVhZGVyPlxuICAgICAgICA8Q29uZmlnR3JvdXBDb250ZW50XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdsYXllci1jb25maWctZ3JvdXBfX2NvbnRlbnQnLCB7XG4gICAgICAgICAgICBkaXNhYmxlZDogcHJvcGVydHkgJiYgIWxheWVyPy5jb25maWcudmlzQ29uZmlnW3Byb3BlcnR5XVxuICAgICAgICAgIH0pfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L0NvbmZpZ0dyb3VwQ29udGVudD5cbiAgICAgIDwvU3R5bGVkTGF5ZXJDb25maWdHcm91cD5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBMYXllckNvbmZpZ0dyb3VwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTSxXQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFBaUQsSUFBQVEsZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQVRqRDtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFqQix3QkFBQWlCLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQsQ0FBQSxvQkFBQWMsQ0FBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsQ0FBQSxTQUFBRyxDQUFBLEdBQUFQLENBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFjLENBQUEsVUFBQUcsQ0FBQSxLQUFBQSxDQUFBLENBQUFWLEdBQUEsSUFBQVUsQ0FBQSxDQUFBQyxHQUFBLElBQUFQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSixDQUFBLEVBQUFNLENBQUEsRUFBQUcsQ0FBQSxJQUFBVCxDQUFBLENBQUFNLENBQUEsSUFBQWQsQ0FBQSxDQUFBYyxDQUFBLFlBQUFOLENBQUEsY0FBQVIsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUErQk8sSUFBTVcsNEJBQTRCLEdBQUFDLE9BQUEsQ0FBQUQsNEJBQUEsR0FBR0UsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBOUIsZUFBQSxLQUFBQSxlQUFBLE9BQUErQix1QkFBQSxpRkFHM0MsVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDQyxTQUFTO0FBQUEsRUFDeEM7QUFFTSxJQUFNQyw2QkFBNkIsR0FBQVAsT0FBQSxDQUFBTyw2QkFBQSxHQUFHTiw0QkFBTSxDQUFDQyxHQUFHLENBQUNNLEtBQUssQ0FBQztFQUM1REMsU0FBUyxFQUFFO0FBQ2IsQ0FBQyxDQUFDLENBQUFwQyxnQkFBQSxLQUFBQSxnQkFBQSxPQUFBOEIsdUJBQUEsaUlBS0Q7QUFFTSxJQUFNTyw0QkFBNEIsR0FBQVYsT0FBQSxDQUFBVSw0QkFBQSxHQUFHVCw0QkFBTSxDQUFDQyxHQUFHLENBQUNNLEtBQUssQ0FBQztFQUMzREMsU0FBUyxFQUFFO0FBQ2IsQ0FBQyxDQUFDLENBQUFuQyxnQkFBQSxLQUFBQSxnQkFBQSxPQUFBNkIsdUJBQUEsbUZBSUQ7QUFFTSxJQUFNUSxzQkFBc0IsR0FBQVgsT0FBQSxDQUFBVyxzQkFBQSxHQUFHViw0QkFBTSxDQUFDQyxHQUFHLENBQUEzQixnQkFBQSxLQUFBQSxnQkFBQSxPQUFBNEIsdUJBQUEsMGFBQzlCLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ08sMkJBQTJCO0FBQUEsR0FDL0MsVUFBQVIsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDUSw0QkFBNEI7QUFBQSxFQWtCbkU7QUFNTSxJQUFNQyx1QkFBdUIsR0FBQWQsT0FBQSxDQUFBYyx1QkFBQSxHQUFHYiw0QkFBTSxDQUFDQyxHQUFHLENBQUNNLEtBQUssQ0FBQztFQUN0REMsU0FBUyxFQUFFO0FBQ2IsQ0FBQyxDQUFDLENBQUFqQyxnQkFBQSxLQUFBQSxnQkFBQSxPQUFBMkIsdUJBQUEsMlNBUUksVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ1csV0FBVyxJQUFJLGtCQUFrQjtBQUFBLEdBRXZDLFVBQUFYLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ1csV0FBVztBQUFBLEdBSWhDLFVBQUFaLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ1csV0FBVztBQUFBLEVBRzlDO0FBRUQsSUFBTUMsa0JBQWtCLEdBQUdoQiw0QkFBTSxDQUFDQyxHQUFHLENBQUF6QixnQkFBQSxLQUFBQSxnQkFBQSxPQUFBMEIsdUJBQUEsc0lBUXBDO0FBRURlLDRCQUE0QixDQUFDQyxJQUFJLEdBQUcsQ0FBQ0Msc0JBQWlCLENBQUM7QUFFaEQsU0FBU0YsNEJBQTRCQSxDQUFDRyxVQUFnRCxFQUFFO0VBQzdGLElBQU1DLDJCQUEyQixHQUFHckIsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBeEIsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQXlCLHVCQUFBLGlYQUM3QixVQUFBQyxLQUFLO0lBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNrQiwrQkFBK0I7RUFBQSxHQUMvRCxVQUFBbkIsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDbUIsVUFBVTtFQUFBLEdBRXBCLFVBQUFwQixLQUFLO0lBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNvQiwyQkFBMkI7RUFBQSxHQUMvQyxVQUFBckIsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDcUIsNEJBQTRCO0VBQUEsR0FNdEQsVUFBQXRCLEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsU0FBUztFQUFBLEdBSXhCLFVBQUFGLEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ3NCLGdDQUFnQztFQUFBLEdBQ3ZELFVBQUF2QixLQUFLO0lBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUN1QixrQ0FBa0M7RUFBQSxFQUV2RTtFQUVELElBQU1DLHFCQUEyRCxHQUFHLFNBQTlEQSxxQkFBMkRBLENBQUFDLElBQUE7SUFBQSxJQUFLQyxLQUFLLEdBQUFELElBQUEsQ0FBTEMsS0FBSztNQUFFQyxXQUFXLEdBQUFGLElBQUEsQ0FBWEUsV0FBVztJQUFBLG9CQUN0RnRFLE1BQUEsWUFBQXVFLGFBQUEsQ0FBQ1gsMkJBQTJCO01BQUNiLFNBQVMsRUFBQztJQUEyQixnQkFDaEUvQyxNQUFBLFlBQUF1RSxhQUFBLDRCQUNFdkUsTUFBQSxZQUFBdUUsYUFBQSxDQUFDakUsVUFBQSxDQUFBa0UsZ0JBQWdCO01BQUNDLEVBQUUsRUFBRUosS0FBSyxJQUFJLFlBQWE7TUFBQ0ssY0FBYyxFQUFFTDtJQUFNLENBQUUsQ0FDakUsQ0FBQyxFQUNOQyxXQUFXLGlCQUFJdEUsTUFBQSxZQUFBdUUsYUFBQSxDQUFDWixVQUFVO01BQUNXLFdBQVcsRUFBRUEsV0FBWTtNQUFDRyxFQUFFLEVBQUVKO0lBQU0sQ0FBRSxDQUN2QyxDQUFDO0VBQUEsQ0FDL0I7RUFFRCxPQUFPRixxQkFBcUI7QUFDOUI7QUFFQVEsdUJBQXVCLENBQUNsQixJQUFJLEdBQUcsQ0FBQ0QsNEJBQTRCLENBQUM7QUFFN0QsU0FBU29CLEdBQUdBLENBQUEsRUFBRztFQUNiO0FBQ0Y7QUFDQSxTQUFTRCx1QkFBdUJBLENBQzlCUixxQkFBc0UsRUFDdEU7RUFDQSxJQUFNVSxnQkFBaUQsR0FBRyxTQUFwREEsZ0JBQWlEQSxDQUFBQyxLQUFBLEVBV2pEO0lBQUEsSUFWSlQsS0FBSyxHQUFBUyxLQUFBLENBQUxULEtBQUs7TUFDTFUsUUFBUSxHQUFBRCxLQUFBLENBQVJDLFFBQVE7TUFDUkMsUUFBUSxHQUFBRixLQUFBLENBQVJFLFFBQVE7TUFDUkMsS0FBSyxHQUFBSCxLQUFBLENBQUxHLEtBQUs7TUFBQUMsY0FBQSxHQUFBSixLQUFBLENBQ0xLLFFBQVE7TUFBUkEsVUFBUSxHQUFBRCxjQUFBLGNBQUdOLEdBQUcsR0FBQU0sY0FBQTtNQUFBRSxpQkFBQSxHQUFBTixLQUFBLENBQ2R6QixXQUFXO01BQVhBLFdBQVcsR0FBQStCLGlCQUFBLGNBQUcsS0FBSyxHQUFBQSxpQkFBQTtNQUFBQyxpQkFBQSxHQUFBUCxLQUFBLENBQ25CUixXQUFXO01BQVhBLFdBQVcsR0FBQWUsaUJBQUEsY0FBRyxFQUFFLEdBQUFBLGlCQUFBO01BQUFDLGNBQUEsR0FBQVIsS0FBQSxDQUNoQlMsUUFBUTtNQUFSQSxRQUFRLEdBQUFELGNBQUEsY0FBRyxLQUFLLEdBQUFBLGNBQUE7TUFBQUUsY0FBQSxHQUFBVixLQUFBLENBQ2hCVyxRQUFRO01BQVJBLFFBQVEsR0FBQUQsY0FBQSxjQUFHLEtBQUssR0FBQUEsY0FBQTtNQUFBRSxtQkFBQSxHQUFBWixLQUFBLENBQ2hCYSxhQUFhO01BQWJBLGFBQWEsR0FBQUQsbUJBQUEsY0FBR0Usb0JBQWEsR0FBQUYsbUJBQUE7SUFFN0IsSUFBQUcsU0FBQSxHQUFxQyxJQUFBQyxlQUFRLEVBQUMsQ0FBQ0wsUUFBUSxDQUFDO01BQUFNLFVBQUEsT0FBQUMsZUFBQSxhQUFBSCxTQUFBO01BQWpESSxTQUFTLEdBQUFGLFVBQUE7TUFBRUcsZUFBZSxHQUFBSCxVQUFBO0lBQ2pDLElBQU1JLGlCQUFpQixHQUFHLElBQUFDLGtCQUFXLEVBQUMsWUFBTTtNQUMxQy9DLFdBQVcsSUFBSTZDLGVBQWUsQ0FBQyxDQUFDRCxTQUFTLENBQUM7SUFDNUMsQ0FBQyxFQUFFLENBQUNBLFNBQVMsRUFBRUMsZUFBZSxFQUFFN0MsV0FBVyxDQUFDLENBQUM7SUFFN0Msb0JBQ0VyRCxNQUFBLFlBQUF1RSxhQUFBLENBQUN0QixzQkFBc0I7TUFBQ0YsU0FBUyxFQUFFLElBQUFzRCxzQkFBVSxFQUFDLG9CQUFvQixFQUFFO1FBQUNKLFNBQVMsRUFBVEEsU0FBUztRQUFFVixRQUFRLEVBQVJBO01BQVEsQ0FBQztJQUFFLGdCQUN6RnZGLE1BQUEsWUFBQXVFLGFBQUEsQ0FBQ25CLHVCQUF1QjtNQUFDa0QsT0FBTyxFQUFFSCxpQkFBa0I7TUFBQzlDLFdBQVcsRUFBRUE7SUFBWSxnQkFDNUVyRCxNQUFBLFlBQUF1RSxhQUFBLENBQUNKLHFCQUFxQjtNQUFDRSxLQUFLLEVBQUVBLEtBQU07TUFBQ0MsV0FBVyxFQUFFQSxXQUFZO01BQUMyQixTQUFTLEVBQUVBO0lBQVUsQ0FBRSxDQUFDLGVBQ3ZGakcsTUFBQSxZQUFBdUUsYUFBQSxDQUFDbEMsNEJBQTRCO01BQUNVLFNBQVMsRUFBQztJQUE0QixHQUNqRWlDLFFBQVEsZ0JBQ1BoRixNQUFBLFlBQUF1RSxhQUFBLENBQUNoRSxPQUFBLFdBQU07TUFDTGdHLE9BQU8sRUFBRXRCLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFdUIsTUFBTSxDQUFDQyxTQUFTLENBQUN6QixRQUFRLENBQUU7TUFDM0NQLEVBQUUsS0FBQWlDLE1BQUEsQ0FBS3pCLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFUixFQUFFLE9BQUFpQyxNQUFBLENBQUkxQixRQUFRLENBQUc7TUFDL0JHLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFBO1FBQUEsT0FBUUEsVUFBUSxhQUFSQSxVQUFRLHVCQUFSQSxVQUFRLEtBQUF3QixnQkFBQSxpQkFBSzNCLFFBQVEsRUFBRyxFQUFDQyxLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFdUIsTUFBTSxDQUFDQyxTQUFTLENBQUN6QixRQUFRLENBQUMsRUFBQyxDQUFDO01BQUE7SUFBQyxDQUM5RSxDQUFDLEdBQ0EsSUFBSSxFQUNQM0IsV0FBVyxnQkFBR3JELE1BQUEsWUFBQXVFLGFBQUEsQ0FBQ29CLGFBQWE7TUFBQ2lCLE1BQU0sRUFBQztJQUFNLENBQUUsQ0FBQyxHQUFHLElBQ3JCLENBQ1AsQ0FBQyxlQUMxQjVHLE1BQUEsWUFBQXVFLGFBQUEsQ0FBQ2hCLGtCQUFrQjtNQUNqQlIsU0FBUyxFQUFFLElBQUFzRCxzQkFBVSxFQUFDLDZCQUE2QixFQUFFO1FBQ25EZCxRQUFRLEVBQUVQLFFBQVEsSUFBSSxFQUFDQyxLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFdUIsTUFBTSxDQUFDQyxTQUFTLENBQUN6QixRQUFRLENBQUM7TUFDMUQsQ0FBQztJQUFFLEdBRUZELFFBQ2lCLENBQ0UsQ0FBQztFQUU3QixDQUFDO0VBRUQsT0FBT0YsZ0JBQWdCO0FBQ3pCO0FBQUMsSUFBQWdDLFFBQUEsR0FBQXZFLE9BQUEsY0FFY3FDLHVCQUF1QiIsImlnbm9yZUxpc3QiOltdfQ==