adui
Version:
<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>
419 lines (418 loc) • 67 kB
JavaScript
"use strict";
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _dayPickerReact = _interopRequireWildcard(require("day-picker-react"));
var _RangePicker = _interopRequireDefault(require("./RangePicker"));
require("./style");
var _classNames = _interopRequireDefault(require("./classNames"));
var _configProvider = require("../config-provider");
var _icon = _interopRequireDefault(require("../icon"));
var _input = _interopRequireDefault(require("../input"));
var _popover = _interopRequireDefault(require("../popover"));
var _Caption = _interopRequireDefault(require("./Caption"));
var _Navbar = _interopRequireDefault(require("./Navbar"));
var _Shortcuts = _interopRequireDefault(require("./Shortcuts"));
var _core = require("./core");
var _excluded = ["allowClear", "className", "closeOnSelect", "defaultValue", "defaultVisible", "disabled", "disabledDays", "dropdownRender", "hour", "intent", "maxDate", "minDate", "onChange", "onClick", "onVisibleChange", "placeholder", "placement", "popoverProps", "renderDay", "shortcuts", "size", "theme", "triggerElement", "value", "visible"];
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
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; }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
var DayPicker = _dayPickerReact["default"].__esModule ? _dayPickerReact["default"]["default"] : _dayPickerReact["default"];
var prefix = "adui-date";
var noop = function noop() {};
var DatePicker = (0, _react.forwardRef)(function (_ref, ref) {
var allowClear = _ref.allowClear,
className = _ref.className,
closeOnSelect = _ref.closeOnSelect,
defaultValue = _ref.defaultValue,
defaultVisible = _ref.defaultVisible,
disabled = _ref.disabled,
disabledDays = _ref.disabledDays,
dropdownRender = _ref.dropdownRender,
_ref$hour = _ref.hour,
hour = _ref$hour === void 0 ? 12 : _ref$hour,
intent = _ref.intent,
maxDate = _ref.maxDate,
minDate = _ref.minDate,
onChange = _ref.onChange,
_onClick = _ref.onClick,
onVisibleChange = _ref.onVisibleChange,
placeholder = _ref.placeholder,
placement = _ref.placement,
popoverProps = _ref.popoverProps,
_renderDay = _ref.renderDay,
shortcuts = _ref.shortcuts,
sizeProp = _ref.size,
theme = _ref.theme,
triggerElement = _ref.triggerElement,
valueProp = _ref.value,
visibleProp = _ref.visible,
otherProps = _objectWithoutProperties(_ref, _excluded);
var _useState = (0, _react.useState)(function () {
if (valueProp !== null) {
return valueProp;
}
if (defaultValue !== null) {
return defaultValue;
}
return undefined;
}),
_useState2 = _slicedToArray(_useState, 2),
month = _useState2[0],
setMonth = _useState2[1];
var _useState3 = (0, _react.useState)(function () {
if (valueProp !== null) {
return valueProp;
}
if (defaultValue !== null) {
return defaultValue;
}
return undefined;
}),
_useState4 = _slicedToArray(_useState3, 2),
selectedDay = _useState4[0],
setSelectedDay = _useState4[1];
var _useState5 = (0, _react.useState)(function () {
if (valueProp !== null) {
return (0, _core.convertDateToString)(valueProp);
}
if (defaultValue !== null) {
return (0, _core.convertDateToString)(defaultValue);
}
return "";
}),
_useState6 = _slicedToArray(_useState5, 2),
value = _useState6[0],
setValue = _useState6[1];
var _useState7 = (0, _react.useState)(function () {
if (visibleProp !== null && visibleProp !== undefined) {
return visibleProp;
}
if (defaultVisible !== null && defaultVisible !== undefined) {
return defaultVisible;
}
return false;
}),
_useState8 = _slicedToArray(_useState7, 2),
visible = _useState8[0],
setVisible = _useState8[1];
var _useState9 = (0, _react.useState)("out"),
_useState10 = _slicedToArray(_useState9, 2),
clearIconState = _useState10[0],
setClearIconState = _useState10[1];
var nextClickInsideRef = (0, _react.useRef)(false);
if (valueProp !== null && selectedDay !== valueProp) {
setMonth(valueProp);
setSelectedDay(valueProp);
setValue((0, _core.convertDateToString)(valueProp));
}
if (visibleProp !== null && visible !== !!visibleProp) {
setVisible(!!visibleProp);
}
var inputRef = (0, _react.useRef)(null);
var _useContext = (0, _react.useContext)(_configProvider.ConfigContext),
sizeContext = _useContext.size;
var size = (0, _configProvider.getComputedSize)(sizeProp, sizeContext);
var classSet = (0, _classnames["default"])(className, "".concat(prefix, "-dateBase"), "".concat(prefix, "-").concat(size));
var shortcutsEnabled = shortcuts && shortcuts.length > 0;
var isDayDisabled = function isDayDisabled(day) {
return disabledDays && disabledDays(day) || _dayPickerReact.DateUtils.isDayBefore(day, minDate) || _dayPickerReact.DateUtils.isDayAfter(day, maxDate);
};
var handleVisibleChange = function handleVisibleChange(bool) {
if (disabled) {
return;
}
setTimeout(function () {
if (nextClickInsideRef.current === true) {
nextClickInsideRef.current = false;
if (!bool) {
return;
}
}
var newVal = (0, _core.convertDateToString)(selectedDay);
if (!bool && value !== newVal) {
setValue(newVal);
}
if (onVisibleChange) {
onVisibleChange(bool);
}
if (visibleProp === null) {
setVisible(bool);
}
}, 0);
};
var handleDayClick = function handleDayClick(selectedDayNew, _ref2) {
var bool = _ref2.disabled;
if (isDayDisabled(selectedDayNew)) {
return;
}
selectedDayNew.setHours(hour, 0, 0, 0);
if (!bool) {
if (closeOnSelect) {
setTimeout(function () {
if (onVisibleChange) {
onVisibleChange(false);
}
if (visibleProp === null) {
setVisible(false);
}
}, 100);
}
if (!_dayPickerReact.DateUtils.isSameDay(selectedDayNew, selectedDay)) {
if (valueProp === null) {
setSelectedDay(selectedDayNew);
setValue((0, _core.convertDateToString)(selectedDayNew));
}
if (onChange) {
onChange(selectedDayNew);
}
}
}
};
var handleInputChange = function handleInputChange(_ref3) {
var val = _ref3.target.value;
setValue(val);
if (val.trim() === "") {
if (valueProp === null) {
setSelectedDay(null);
}
if (onChange) {
onChange("");
}
} else if ((0, _core.isLegalDateString)(val)) {
var newDate = new Date(val);
newDate.setHours(hour, 0, 0, 0);
if (!isDayDisabled(newDate) && !_dayPickerReact.DateUtils.isSameDay(newDate, selectedDay)) {
if (valueProp === null) {
setSelectedDay(newDate);
setValue((0, _core.convertDateToString)(newDate));
if (!_dayPickerReact.DateUtils.isSameMonth(newDate, selectedDay)) {
setMonth(newDate);
}
}
if (onChange) {
onChange(newDate);
}
}
}
};
var handleInputFocus = function handleInputFocus() {
if (!visible) {
if (onVisibleChange) {
onVisibleChange(true);
}
if (visibleProp === null) {
setVisible(true);
}
}
};
var handleInputKeyDown = function handleInputKeyDown(_ref4) {
var key = _ref4.key;
var keys = ["Tab", "Escape", "Enter"];
if (keys.includes(key)) {
var _inputRef$current;
handleVisibleChange(false);
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.input.blur();
}
};
var handleMonthChange = function handleMonthChange(date) {
var newDate = date;
if (minDate && _dayPickerReact.DateUtils.isDayBefore(date, minDate)) {
newDate.setMonth(minDate.getMonth());
} else if (maxDate && _dayPickerReact.DateUtils.isDayAfter(date, maxDate)) {
newDate.setMonth(maxDate.getMonth());
}
setMonth(newDate);
};
(0, _react.useImperativeHandle)(ref, function () {
return {
input: inputRef.current,
handleDayClick: handleDayClick,
handleVisibleChange: handleVisibleChange
};
});
var popupElement = _react["default"].createElement("div", {
className: "".concat(prefix, "-popup")
}, shortcutsEnabled && _react["default"].createElement(_Shortcuts["default"], {
onShortcutClick: function onShortcutClick(valueShortcut) {
handleDayClick(valueShortcut, {});
setMonth(valueShortcut);
},
selectedDay: selectedDay,
shortcuts: shortcuts
}), _react["default"].createElement(DayPicker, {
disabledDays: isDayDisabled,
fromMonth: minDate,
toMonth: maxDate,
canChangeMonth: true,
classNames: _classNames["default"],
month: month || undefined,
months: _core.MONTHS,
weekdaysLong: _core.WEEKDAYS_LONG,
weekdaysShort: _core.WEEKDAYS_SHORT,
selectedDays: selectedDay || undefined,
navbarElement: _react["default"].createElement(_Navbar["default"], _extends({
maxDate: maxDate,
minDate: minDate
}, _dayPickerReact.NavbarElementProps)),
captionElement: _react["default"].createElement(_Caption["default"], _extends({
maxDate: maxDate,
minDate: minDate,
onDateChange: handleMonthChange
}, _dayPickerReact.CaptionElementProps)),
onDayClick: handleDayClick,
onMonthChange: handleMonthChange,
renderDay: function renderDay(day) {
return _react["default"].createElement("div", {
className: "".concat(prefix, "-cell")
}, _renderDay && _renderDay(day) ? _renderDay(day) : day.getDate());
}
}));
var inputElement = _react["default"].createElement(_input["default"], _extends({
className: classSet,
cleaveOptions: {
blocks: [4, 2, 2],
delimiter: "-"
},
disabled: disabled,
intent: intent,
onChange: handleInputChange,
onFocus: handleInputFocus,
onKeyDown: handleInputKeyDown,
onClick: function onClick() {
if (_onClick) {
_onClick();
}
nextClickInsideRef.current = true;
},
placeholder: placeholder,
ref: inputRef,
rightElement: allowClear ? _react["default"].createElement(_icon["default"], {
icon: clearIconState === "in" ? "cancel-circle" : "calendar-outlined",
onMouseEnter: function onMouseEnter() {
if (value) {
setClearIconState("in");
}
},
onMouseLeave: function onMouseLeave() {
setClearIconState("out");
},
onClick: function onClick(e) {
if (value) {
e.stopPropagation();
if (valueProp === null) {
setSelectedDay("");
setValue("");
}
if (onChange) {
onChange("");
}
if (visible) {
if (onVisibleChange) {
onVisibleChange(false);
}
if (visibleProp === null) {
setVisible(false);
}
}
setTimeout(function () {
nextClickInsideRef.current = false;
});
}
}
}) : _react["default"].createElement(_icon["default"], {
icon: "calendar-outlined",
onClick: function onClick() {
setTimeout(function () {
nextClickInsideRef.current = false;
});
}
}),
size: size,
theme: theme,
value: value
}, otherProps));
return _react["default"].createElement(_popover["default"], _extends({
arrowed: false,
onVisibleChange: handleVisibleChange,
placement: placement,
popup: _react["default"].createElement(_react["default"].Fragment, null, dropdownRender && dropdownRender(popupElement) ? dropdownRender(popupElement) : popupElement),
popupStyle: {
maxWidth: shortcutsEnabled ? "342px" : "242px",
width: shortcutsEnabled ? "342px" : "242px"
},
trigger: "click",
visible: visible
}, popoverProps), triggerElement || inputElement);
});
DatePicker.displayName = "DatePicker";
DatePicker.RangePicker = _RangePicker["default"];
DatePicker.propTypes = {
allowClear: _propTypes["default"].bool,
className: _propTypes["default"].string,
closeOnSelect: _propTypes["default"].bool,
defaultValue: _propTypes["default"].any,
defaultVisible: _propTypes["default"].bool,
disabled: _propTypes["default"].bool,
disabledDays: _propTypes["default"].func,
dropdownRender: _propTypes["default"].any,
hour: _propTypes["default"].number,
intent: _propTypes["default"].oneOf(["normal", "primary", "success", "warning", "danger"]),
maxDate: _propTypes["default"].instanceOf(Date),
minDate: _propTypes["default"].instanceOf(Date),
onChange: _propTypes["default"].func,
onVisibleChange: _propTypes["default"].func,
placeholder: _propTypes["default"].string,
placement: _propTypes["default"].oneOf(["top", "left", "right", "bottom", "topLeft", "topRight", "bottomLeft", "bottomRight", "leftTop", "leftBottom", "rightTop", "rightBottom"]),
popoverProps: _propTypes["default"].object,
renderDay: _propTypes["default"].any,
shortcuts: _propTypes["default"].any,
size: _propTypes["default"].oneOf(["mini", "small", "medium", "large"]),
theme: _propTypes["default"].oneOf([null, "light"]),
triggerElement: _propTypes["default"].any,
value: _propTypes["default"].any,
visible: _propTypes["default"].bool
};
DatePicker.defaultProps = {
allowClear: false,
className: "",
closeOnSelect: false,
defaultValue: null,
defaultVisible: null,
disabled: false,
disabledDays: noop,
dropdownRender: undefined,
hour: 12,
intent: "normal",
maxDate: (0, _core.getDefaultMaxDate)(),
minDate: (0, _core.getDefaultMinDate)(),
onChange: noop,
onVisibleChange: noop,
placeholder: "选择日期",
placement: "bottomLeft",
popoverProps: {},
renderDay: undefined,
shortcuts: undefined,
size: "small",
theme: null,
triggerElement: undefined,
value: null,
visible: null
};
var _default = exports["default"] = DatePicker;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jbGFzc25hbWVzIiwiX2RheVBpY2tlclJlYWN0IiwiX1JhbmdlUGlja2VyIiwiX2NsYXNzTmFtZXMiLCJfY29uZmlnUHJvdmlkZXIiLCJfaWNvbiIsIl9pbnB1dCIsIl9wb3BvdmVyIiwiX0NhcHRpb24iLCJfTmF2YmFyIiwiX1Nob3J0Y3V0cyIsIl9jb3JlIiwiX2V4Y2x1ZGVkIiwiZSIsIl9fZXNNb2R1bGUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJXZWFrTWFwIiwiciIsInQiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJiaW5kIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXBwbHkiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZiIsIm8iLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImlzQXJyYXkiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImdldE93blByb3BlcnR5U3ltYm9scyIsInMiLCJpbmNsdWRlcyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiRGF5UGlja2VyIiwiRFBSIiwicHJlZml4Iiwibm9vcCIsIkRhdGVQaWNrZXIiLCJmb3J3YXJkUmVmIiwiX3JlZiIsInJlZiIsImFsbG93Q2xlYXIiLCJjbGFzc05hbWUiLCJjbG9zZU9uU2VsZWN0IiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdFZpc2libGUiLCJkaXNhYmxlZCIsImRpc2FibGVkRGF5cyIsImRyb3Bkb3duUmVuZGVyIiwiX3JlZiRob3VyIiwiaG91ciIsImludGVudCIsIm1heERhdGUiLCJtaW5EYXRlIiwib25DaGFuZ2UiLCJvbkNsaWNrIiwib25WaXNpYmxlQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJwbGFjZW1lbnQiLCJwb3BvdmVyUHJvcHMiLCJyZW5kZXJEYXkiLCJzaG9ydGN1dHMiLCJzaXplUHJvcCIsInNpemUiLCJ0aGVtZSIsInRyaWdnZXJFbGVtZW50IiwidmFsdWVQcm9wIiwidmlzaWJsZVByb3AiLCJ2aXNpYmxlIiwib3RoZXJQcm9wcyIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwidW5kZWZpbmVkIiwiX3VzZVN0YXRlMiIsIm1vbnRoIiwic2V0TW9udGgiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNlbGVjdGVkRGF5Iiwic2V0U2VsZWN0ZWREYXkiLCJfdXNlU3RhdGU1IiwiY29udmVydERhdGVUb1N0cmluZyIsIl91c2VTdGF0ZTYiLCJzZXRWYWx1ZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2V0VmlzaWJsZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUxMCIsImNsZWFySWNvblN0YXRlIiwic2V0Q2xlYXJJY29uU3RhdGUiLCJuZXh0Q2xpY2tJbnNpZGVSZWYiLCJ1c2VSZWYiLCJpbnB1dFJlZiIsIl91c2VDb250ZXh0IiwidXNlQ29udGV4dCIsIkNvbmZpZ0NvbnRleHQiLCJzaXplQ29udGV4dCIsImdldENvbXB1dGVkU2l6ZSIsImNsYXNzU2V0IiwiY2xhc3NOYW1lcyIsImNvbmNhdCIsInNob3J0Y3V0c0VuYWJsZWQiLCJpc0RheURpc2FibGVkIiwiZGF5IiwiRGF0ZVV0aWxzIiwiaXNEYXlCZWZvcmUiLCJpc0RheUFmdGVyIiwiaGFuZGxlVmlzaWJsZUNoYW5nZSIsImJvb2wiLCJzZXRUaW1lb3V0IiwiY3VycmVudCIsIm5ld1ZhbCIsImhhbmRsZURheUNsaWNrIiwic2VsZWN0ZWREYXlOZXciLCJfcmVmMiIsInNldEhvdXJzIiwiaXNTYW1lRGF5IiwiaGFuZGxlSW5wdXRDaGFuZ2UiLCJfcmVmMyIsInZhbCIsInRhcmdldCIsInRyaW0iLCJpc0xlZ2FsRGF0ZVN0cmluZyIsIm5ld0RhdGUiLCJEYXRlIiwiaXNTYW1lTW9udGgiLCJoYW5kbGVJbnB1dEZvY3VzIiwiaGFuZGxlSW5wdXRLZXlEb3duIiwiX3JlZjQiLCJrZXkiLCJrZXlzIiwiX2lucHV0UmVmJGN1cnJlbnQiLCJpbnB1dCIsImJsdXIiLCJoYW5kbGVNb250aENoYW5nZSIsImRhdGUiLCJnZXRNb250aCIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJwb3B1cEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwib25TaG9ydGN1dENsaWNrIiwidmFsdWVTaG9ydGN1dCIsImZyb21Nb250aCIsInRvTW9udGgiLCJjYW5DaGFuZ2VNb250aCIsInN0eWxlcyIsIm1vbnRocyIsIk1PTlRIUyIsIndlZWtkYXlzTG9uZyIsIldFRUtEQVlTX0xPTkciLCJ3ZWVrZGF5c1Nob3J0IiwiV0VFS0RBWVNfU0hPUlQiLCJzZWxlY3RlZERheXMiLCJuYXZiYXJFbGVtZW50IiwiTmF2YmFyRWxlbWVudFByb3BzIiwiY2FwdGlvbkVsZW1lbnQiLCJvbkRhdGVDaGFuZ2UiLCJDYXB0aW9uRWxlbWVudFByb3BzIiwib25EYXlDbGljayIsIm9uTW9udGhDaGFuZ2UiLCJnZXREYXRlIiwiaW5wdXRFbGVtZW50IiwiY2xlYXZlT3B0aW9ucyIsImJsb2NrcyIsImRlbGltaXRlciIsIm9uRm9jdXMiLCJvbktleURvd24iLCJyaWdodEVsZW1lbnQiLCJpY29uIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwic3RvcFByb3BhZ2F0aW9uIiwiYXJyb3dlZCIsInBvcHVwIiwiRnJhZ21lbnQiLCJwb3B1cFN0eWxlIiwibWF4V2lkdGgiLCJ3aWR0aCIsInRyaWdnZXIiLCJkaXNwbGF5TmFtZSIsIlJhbmdlUGlja2VyIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiYW55IiwiZnVuYyIsIm51bWJlciIsIm9uZU9mIiwiaW5zdGFuY2VPZiIsIm9iamVjdCIsImRlZmF1bHRQcm9wcyIsImdldERlZmF1bHRNYXhEYXRlIiwiZ2V0RGVmYXVsdE1pbkRhdGUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL2RhdGUtcGlja2VyL0RhdGVQaWNrZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1kdXBsaWNhdGVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IFJlYWN0LCB7XG4gIGZvcndhcmRSZWYsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUsXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCBEUFIgZnJvbSBcImRheS1waWNrZXItcmVhY3RcIlxuaW1wb3J0IHtcbiAgQ2FwdGlvbkVsZW1lbnRQcm9wcyxcbiAgRGF0ZVV0aWxzLFxuICBOYXZiYXJFbGVtZW50UHJvcHMsXG59IGZyb20gXCJkYXktcGlja2VyLXJlYWN0XCJcbmltcG9ydCBSYW5nZVBpY2tlciBmcm9tIFwiLi9SYW5nZVBpY2tlclwiXG5pbXBvcnQgXCIuL3N0eWxlXCJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vY2xhc3NOYW1lc1wiXG5pbXBvcnQgeyBDb25maWdDb250ZXh0LCBnZXRDb21wdXRlZFNpemUgfSBmcm9tIFwiLi4vY29uZmlnLXByb3ZpZGVyXCJcbmltcG9ydCBJY29uIGZyb20gXCIuLi9pY29uXCJcbmltcG9ydCBJbnB1dCBmcm9tIFwiLi4vaW5wdXRcIlxuaW1wb3J0IHsgUGxhY2VtZW50IH0gZnJvbSBcIi4uL3BvcC10cmlnZ2VyXCJcbmltcG9ydCBQb3BvdmVyLCB7IElQb3BvdmVyUHJvcHMgfSBmcm9tIFwiLi4vcG9wb3ZlclwiXG5pbXBvcnQgQ2FwdGlvbiBmcm9tIFwiLi9DYXB0aW9uXCJcbmltcG9ydCBOYXZiYXIgZnJvbSBcIi4vTmF2YmFyXCJcbmltcG9ydCBTaG9ydGN1dHMgZnJvbSBcIi4vU2hvcnRjdXRzXCJcbmltcG9ydCB7XG4gIE1PTlRIUyxcbiAgV0VFS0RBWVNfTE9ORyxcbiAgV0VFS0RBWVNfU0hPUlQsXG4gIGdldERlZmF1bHRNYXhEYXRlLFxuICBnZXREZWZhdWx0TWluRGF0ZSxcbiAgaXNMZWdhbERhdGVTdHJpbmcsXG4gIGNvbnZlcnREYXRlVG9TdHJpbmcsXG59IGZyb20gXCIuL2NvcmVcIlxuXG5jb25zdCBEYXlQaWNrZXIgPSBEUFIuX19lc01vZHVsZSA/IERQUi5kZWZhdWx0IDogRFBSXG5jb25zdCBwcmVmaXggPSBcImFkdWktZGF0ZVwiXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuZXhwb3J0IGludGVyZmFjZSBJRGF0ZVBpY2tlclByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIC8qKlxuICAgKiDmmK/lkKbmlK/mjIHmuIXpmaRcbiAgICovXG4gIGFsbG93Q2xlYXI/OiBib29sZWFuXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm5Zyo6YCJ5oup5ZCO77yM5raI5aSxIFBvcG92ZXJcbiAgICovXG4gIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG4gIC8qKlxuICAgKiDlhoXpg6jpqbHliqjvvJrpu5jorqTml6XmnJ9cbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IERhdGUgfCBcIlwiIHwgbnVsbFxuICAvKipcbiAgICog5YaF6YOo6amx5Yqo77ya6buY6K6k5piv5ZCm5pi+56S65LiL5ouJXG4gICAqL1xuICBkZWZhdWx0VmlzaWJsZT86IGJvb2xlYW4gfCBudWxsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICAvKipcbiAgICog56aB5q2i6YCJ5oup55qE5aSp77yMZGF5ID0+IGJvb2zvvIzmr4/kuIDlpKnmmK/nmoTml7bpl7TkuLogMTI6MDA6MDDvvIzov5nkuIDkuKrmmK/nlLEgZGF5LXBpY2tlci1yZWFjdCDlhrPlrprnmoTvvJtcbiAgICog5q+U6L6D5pel5pyf55qE5pe25YCZ5bCP5b+D6L+Z5LiA54K544CCXG4gICAqL1xuICBkaXNhYmxlZERheXM/OiAoZGF0ZTogRGF0ZSkgPT4gYm9vbGVhbiB8IHZvaWRcbiAgLyoqXG4gICAqIOiHquWumuS5ieS4i+aLieahhuWGheWuuVxuICAgKi9cbiAgZHJvcGRvd25SZW5kZXI/OiAoZWxlbWVudDogSlNYLkVsZW1lbnQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICogMjAyMjA0MDc6IOm7mOiupOeahOaXpeacn+aXtumXtOS4uiAxMiDngrnvvIzlj6/ku6Xkvb/nlKjmraQgUHJvcCDkv67mlLnlsI/ml7ZcbiAgICovXG4gIGhvdXI/OiBudW1iZXJcbiAgLyoqXG4gICAqIOiuvue9rui+k+WFpeahhuexu+Wei1xuICAgKi9cbiAgaW50ZW50PzogXCJub3JtYWxcIiB8IFwicHJpbWFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCJcbiAgLyoqXG4gICAqIOacgOWkp+mZkOWItuaXpeacn1xuICAgKi9cbiAgbWF4RGF0ZT86IERhdGUgfCBudWxsXG4gIC8qKlxuICAgKiDmnIDlsI/pmZDliLbml6XmnJ9cbiAgICovXG4gIG1pbkRhdGU/OiBEYXRlIHwgbnVsbFxuICAvKipcbiAgICog5pel5pyf5pS55Y+Y5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlPzogKGRhdGU/OiBEYXRlIHwgXCJcIiB8IG51bGwpID0+IHZvaWRcbiAgLyoqXG4gICAqIOaYvuekuueKtuaAgeWPkeeUn+WPmOWMluaXtueahGhhbmRsZXJcbiAgICovXG4gIG9uVmlzaWJsZUNoYW5nZT86ICh2aXNpYmxlOiBib29sZWFuKSA9PiB2b2lkXG4gIC8qKlxuICAgKiDljaDkvY3lrZfnrKZcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIC8qKlxuICAgKiDlvLnlh7rlsYLkvY3nva5cbiAgICovXG4gIHBsYWNlbWVudD86IFBsYWNlbWVudFxuICAvKipcbiAgICog5Lyg5YWlIFBvcG92ZXIg55qEIHByb3BzXG4gICAqL1xuICBwb3BvdmVyUHJvcHM/OiBJUG9wb3ZlclByb3BzXG4gIC8qKlxuICAgKiDoh6rlrprkuYnlpoLkvZXmuLLmn5Pmr4/kuKrml6XmnJ9cbiAgICovXG4gIHJlbmRlckRheT86IChkYXk6IERhdGUpID0+IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICog5b+r5o236YCJ5oup6aG577yM5qC85byP77yaW3sgbGFiZWw6IFwi56WW5Zu955Sf5pelXCIsIHZhbHVlOiBuZXcgRGF0ZShcIjIwMjItMTAtMDFcIikgfV1cbiAgICovXG4gIHNob3J0Y3V0cz86IHtcbiAgICAvKipcbiAgICAgKiDor6XpobnnmoTmloflrZdcbiAgICAgKi9cbiAgICBsYWJlbDogUmVhY3QuUmVhY3ROb2RlXG4gICAgLyoqXG4gICAgICog6K+l6aG555qE5pel5pyfXG4gICAgICovXG4gICAgdmFsdWU6IERhdGVcbiAgfVtdXG4gIC8qKlxuICAgKiDorr7nva7lsLrlr7hcbiAgICovXG4gIHNpemU/OiBcIm1pbmlcIiB8IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCJcbiAgLyoqXG4gICAqIOiuvue9ruS4u+mimFxuICAgKi9cbiAgdGhlbWU/OiBudWxsIHwgXCJsaWdodFwiXG4gIC8qKlxuICAgKiDoh6rlrprkuYnop6blj5HkuIvmi4nnmoTlhYPntKBcbiAgICovXG4gIHRyaWdnZXJFbGVtZW50PzogSlNYLkVsZW1lbnRcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItu+8muW9k+WJjeaXpeacn1xuICAgKi9cbiAgdmFsdWU/OiBEYXRlIHwgXCJcIiB8IG51bGxcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItu+8muaYr+WQpuaYvuekuuS4i+aLiemAieaLqVxuICAgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVQaWNrZXJcbiAgZXh0ZW5kcyBSZWFjdC5Gb3J3YXJkUmVmRXhvdGljQ29tcG9uZW50PFxuICAgIElEYXRlUGlja2VyUHJvcHMgJiBSZWFjdC5SZWZBdHRyaWJ1dGVzPGFueT5cbiAgPiB7XG4gIFJhbmdlUGlja2VyOiB0eXBlb2YgUmFuZ2VQaWNrZXJcbn1cblxuLyoqXG4gKiDml6XmnJ/pgInmi6nlmajnlKjkuo7kuobop6PlvZPliY3lt7LpgInml6XmnJ/vvIzpgInmi6nmiJbovpPlhaXpnIDopoHnmoTml6XmnJ/jgIHml6XmnJ/ojIPlm7TnrYnjgIJcbiAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgRGF0ZVBpY2tlcjogSURhdGVQaWNrZXIgPSBmb3J3YXJkUmVmKFxuICAoXG4gICAge1xuICAgICAgYWxsb3dDbGVhcixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNsb3NlT25TZWxlY3QsXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkZWZhdWx0VmlzaWJsZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZGlzYWJsZWREYXlzLFxuICAgICAgZHJvcGRvd25SZW5kZXIsXG4gICAgICBob3VyID0gMTIsXG4gICAgICBpbnRlbnQsXG4gICAgICBtYXhEYXRlLFxuICAgICAgbWluRGF0ZSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uVmlzaWJsZUNoYW5nZSxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcGxhY2VtZW50LFxuICAgICAgcG9wb3ZlclByb3BzLFxuICAgICAgcmVuZGVyRGF5LFxuICAgICAgc2hvcnRjdXRzLFxuICAgICAgc2l6ZTogc2l6ZVByb3AsXG4gICAgICB0aGVtZSxcbiAgICAgIHRyaWdnZXJFbGVtZW50LFxuICAgICAgdmFsdWU6IHZhbHVlUHJvcCxcbiAgICAgIHZpc2libGU6IHZpc2libGVQcm9wLFxuICAgICAgLi4ub3RoZXJQcm9wc1xuICAgIH06IElEYXRlUGlja2VyUHJvcHMsXG4gICAgcmVmXG4gICkgPT4ge1xuICAgIGNvbnN0IFttb250aCwgc2V0TW9udGhdID0gdXNlU3RhdGU8RGF0ZSB8IFwiXCIgfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICAgIGlmICh2YWx1ZVByb3AgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlUHJvcFxuICAgICAgfVxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfSlcbiAgICBjb25zdCBbc2VsZWN0ZWREYXksIHNldFNlbGVjdGVkRGF5XSA9IHVzZVN0YXRlPFxuICAgICAgRGF0ZSB8IFwiXCIgfCBudWxsIHwgdW5kZWZpbmVkXG4gICAgPigoKSA9PiB7XG4gICAgICBpZiAodmFsdWVQcm9wICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVByb3BcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH0pXG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KCgpID0+IHtcbiAgICAgIGlmICh2YWx1ZVByb3AgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnREYXRlVG9TdHJpbmcodmFsdWVQcm9wKVxuICAgICAgfVxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gY29udmVydERhdGVUb1N0cmluZyhkZWZhdWx0VmFsdWUpXG4gICAgICB9XG4gICAgICByZXR1cm4gXCJcIlxuICAgIH0pXG4gICAgY29uc3QgW3Zpc2libGUsIHNldFZpc2libGVdID0gdXNlU3RhdGU8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgaWYgKHZpc2libGVQcm9wICE9PSBudWxsICYmIHZpc2libGVQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHZpc2libGVQcm9wXG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFZpc2libGUgIT09IG51bGwgJiYgZGVmYXVsdFZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0pXG4gICAgY29uc3QgW2NsZWFySWNvblN0YXRlLCBzZXRDbGVhckljb25TdGF0ZV0gPSB1c2VTdGF0ZTxcImluXCIgfCBcIm91dFwiPihcIm91dFwiKVxuICAgIGNvbnN0IG5leHRDbGlja0luc2lkZVJlZiA9IHVzZVJlZihmYWxzZSlcblxuICAgIC8vIOebuOW9k+S6jueUn+WRveWRqOacnyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcbiAgICBpZiAodmFsdWVQcm9wICE9PSBudWxsICYmIHNlbGVjdGVkRGF5ICE9PSB2YWx1ZVByb3ApIHtcbiAgICAgIHNldE1vbnRoKHZhbHVlUHJvcClcbiAgICAgIHNldFNlbGVjdGVkRGF5KHZhbHVlUHJvcClcbiAgICAgIHNldFZhbHVlKGNvbnZlcnREYXRlVG9TdHJpbmcodmFsdWVQcm9wKSlcbiAgICB9XG4gICAgaWYgKHZpc2libGVQcm9wICE9PSBudWxsICYmIHZpc2libGUgIT09ICEhdmlzaWJsZVByb3ApIHtcbiAgICAgIHNldFZpc2libGUoISF2aXNpYmxlUHJvcClcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxhbnk+KG51bGwpXG5cbiAgICBjb25zdCB7IHNpemU6IHNpemVDb250ZXh0IH0gPSB1c2VDb250ZXh0KENvbmZpZ0NvbnRleHQpXG4gICAgY29uc3Qgc2l6ZSA9IGdldENvbXB1dGVkU2l6ZShzaXplUHJvcCwgc2l6ZUNvbnRleHQpXG5cbiAgICBjb25zdCBjbGFzc1NldCA9IGNsYXNzTmFtZXMoXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBgJHtwcmVmaXh9LWRhdGVCYXNlYCxcbiAgICAgIGAke3ByZWZpeH0tJHtzaXplfWBcbiAgICApXG5cbiAgICBjb25zdCBzaG9ydGN1dHNFbmFibGVkID0gc2hvcnRjdXRzICYmIHNob3J0Y3V0cy5sZW5ndGggPiAwXG5cbiAgICBjb25zdCBpc0RheURpc2FibGVkID0gKGRheTogRGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGRpc2FibGVkRGF5cyAmJiBkaXNhYmxlZERheXMoZGF5KSkgfHxcbiAgICAgICAgRGF0ZVV0aWxzLmlzRGF5QmVmb3JlKGRheSwgbWluRGF0ZSkgfHxcbiAgICAgICAgRGF0ZVV0aWxzLmlzRGF5QWZ0ZXIoZGF5LCBtYXhEYXRlKVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVZpc2libGVDaGFuZ2UgPSAoYm9vbDogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChuZXh0Q2xpY2tJbnNpZGVSZWYuY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG5leHRDbGlja0luc2lkZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAvLyDlsZXlvIDml7bvvIzlpoLmnpzlnKjlhoXpg6jlhYPntKDngrnlh7vvvIzliJnkuI3lgZrpu5jorqTnmoTmlLbotbfmk43kvZxcbiAgICAgICAgICBpZiAoIWJvb2wpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdWYWwgPSBjb252ZXJ0RGF0ZVRvU3RyaW5nKHNlbGVjdGVkRGF5KVxuICAgICAgICBpZiAoIWJvb2wgJiYgdmFsdWUgIT09IG5ld1ZhbCkge1xuICAgICAgICAgIHNldFZhbHVlKG5ld1ZhbClcbiAgICAgICAgfVxuICAgICAgICBpZiAob25WaXNpYmxlQ2hhbmdlKSB7XG4gICAgICAgICAgb25WaXNpYmxlQ2hhbmdlKGJvb2wpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpc2libGVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgc2V0VmlzaWJsZShib29sKVxuICAgICAgICB9XG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZURheUNsaWNrID0gKFxuICAgICAgc2VsZWN0ZWREYXlOZXc6IERhdGUsXG4gICAgICB7IGRpc2FibGVkOiBib29sIH06IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgICApID0+IHtcbiAgICAgIGlmIChpc0RheURpc2FibGVkKHNlbGVjdGVkRGF5TmV3KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHNlbGVjdGVkRGF5TmV3LnNldEhvdXJzKGhvdXIsIDAsIDAsIDApXG4gICAgICBpZiAoIWJvb2wpIHtcbiAgICAgICAgaWYgKGNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgICAvLyDlu7bov5/mmK/kuLrkuoborqnnirbmgIHnmoTlj5jljJblnKjop4bop4nkuIrlhYjooqvmjqXlj5dcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChvblZpc2libGVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgb25WaXNpYmxlQ2hhbmdlKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZpc2libGVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHNldFZpc2libGUoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgMTAwKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFEYXRlVXRpbHMuaXNTYW1lRGF5KHNlbGVjdGVkRGF5TmV3LCBzZWxlY3RlZERheSkpIHtcbiAgICAgICAgICBpZiAodmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZERheShzZWxlY3RlZERheU5ldylcbiAgICAgICAgICAgIHNldFZhbHVlKGNvbnZlcnREYXRlVG9TdHJpbmcoc2VsZWN0ZWREYXlOZXcpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlKHNlbGVjdGVkRGF5TmV3KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKHtcbiAgICAgIHRhcmdldDogeyB2YWx1ZTogdmFsIH0sXG4gICAgfTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIHNldFZhbHVlKHZhbClcbiAgICAgIGlmICh2YWwudHJpbSgpID09PSBcIlwiKSB7XG4gICAgICAgIGlmICh2YWx1ZVByb3AgPT09IG51bGwpIHtcbiAgICAgICAgICBzZXRTZWxlY3RlZERheShudWxsKVxuICAgICAgICB9XG4gICAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICAgIG9uQ2hhbmdlKFwiXCIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNMZWdhbERhdGVTdHJpbmcodmFsKSkge1xuICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodmFsKVxuICAgICAgICBuZXdEYXRlLnNldEhvdXJzKGhvdXIsIDAsIDAsIDApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaXNEYXlEaXNhYmxlZChuZXdEYXRlKSAmJlxuICAgICAgICAgICFEYXRlVXRpbHMuaXNTYW1lRGF5KG5ld0RhdGUsIHNlbGVjdGVkRGF5KVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAodmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZERheShuZXdEYXRlKVxuICAgICAgICAgICAgc2V0VmFsdWUoY29udmVydERhdGVUb1N0cmluZyhuZXdEYXRlKSlcbiAgICAgICAgICAgIGlmICghRGF0ZVV0aWxzLmlzU2FtZU1vbnRoKG5ld0RhdGUsIHNlbGVjdGVkRGF5KSkge1xuICAgICAgICAgICAgICBzZXRNb250aChuZXdEYXRlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlKG5ld0RhdGUpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRGb2N1cyA9ICgpID0+IHtcbiAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICBpZiAob25WaXNpYmxlQ2hhbmdlKSB7XG4gICAgICAgICAgb25WaXNpYmxlQ2hhbmdlKHRydWUpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpc2libGVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgc2V0VmlzaWJsZSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRLZXlEb3duID0gKHtcbiAgICAgIGtleSxcbiAgICB9OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBrZXlzID0gW1wiVGFiXCIsIFwiRXNjYXBlXCIsIFwiRW50ZXJcIl1cbiAgICAgIGlmIChrZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgaGFuZGxlVmlzaWJsZUNoYW5nZShmYWxzZSlcbiAgICAgICAgaW5wdXRSZWYuY3VycmVudD8uaW5wdXQuYmx1cigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlTW9udGhDaGFuZ2UgPSAoZGF0ZTogRGF0ZSkgPT4ge1xuICAgICAgY29uc3QgbmV3RGF0ZSA9IGRhdGVcbiAgICAgIGlmIChtaW5EYXRlICYmIERhdGVVdGlscy5pc0RheUJlZm9yZShkYXRlLCBtaW5EYXRlKSkge1xuICAgICAgICBuZXdEYXRlLnNldE1vbnRoKG1pbkRhdGUuZ2V0TW9udGgoKSlcbiAgICAgIH0gZWxzZSBpZiAobWF4RGF0ZSAmJiBEYXRlVXRpbHMuaXNEYXlBZnRlcihkYXRlLCBtYXhEYXRlKSkge1xuICAgICAgICBuZXdEYXRlLnNldE1vbnRoKG1heERhdGUuZ2V0TW9udGgoKSlcbiAgICAgIH1cbiAgICAgIHNldE1vbnRoKG5ld0RhdGUpXG4gICAgfVxuXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICBpbnB1dDogaW5wdXRSZWYuY3VycmVudCxcbiAgICAgIGhhbmRsZURheUNsaWNrLFxuICAgICAgaGFuZGxlVmlzaWJsZUNoYW5nZSxcbiAgICB9KSlcblxuICAgIGNvbnN0IHBvcHVwRWxlbWVudCA9IChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LXBvcHVwYH0+XG4gICAgICAgIHtzaG9ydGN1dHNFbmFibGVkICYmIChcbiAgICAgICAgICA8U2hvcnRjdXRzXG4gICAgICAgICAgICBvblNob3J0Y3V0Q2xpY2s9eyh2YWx1ZVNob3J0Y3V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgIGhhbmRsZURheUNsaWNrKHZhbHVlU2hvcnRjdXQsIHt9KVxuICAgICAgICAgICAgICBzZXRNb250aCh2YWx1ZVNob3J0Y3V0KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHNlbGVjdGVkRGF5PXtzZWxlY3RlZERheX1cbiAgICAgICAgICAgIHNob3J0Y3V0cz17c2hvcnRjdXRzfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxEYXlQaWNrZXJcbiAgICAgICAgICBkaXNhYmxlZERheXM9e2lzRGF5RGlzYWJsZWR9XG4gICAgICAgICAgZnJvbU1vbnRoPXttaW5EYXRlfVxuICAgICAgICAgIHRvTW9udGg9e21heERhdGV9XG4gICAgICAgICAgY2FuQ2hhbmdlTW9udGhcbiAgICAgICAgICBjbGFzc05hbWVzPXtzdHlsZXN9XG4gICAgICAgICAgbW9udGg9e21vbnRoIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICBtb250aHM9e01PTlRIU31cbiAgICAgICAgICB3ZWVrZGF5c0xvbmc9e1dFRUtEQVlTX0xPTkd9XG4gICAgICAgICAgd2Vla2RheXNTaG9ydD17V0VFS0RBWVNfU0hPUlR9XG4gICAgICAgICAgc2VsZWN0ZWREYXlzPXtzZWxlY3RlZERheSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgbmF2YmFyRWxlbWVudD17XG4gICAgICAgICAgICA8TmF2YmFyXG4gICAgICAgICAgICAgIG1heERhdGU9e21heERhdGV9XG4gICAgICAgICAgICAgIG1pbkRhdGU9e21pbkRhdGV9XG4gICAgICAgICAgICAgIHsuLi5OYXZiYXJFbGVtZW50UHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0aW9uRWxlbWVudD17XG4gICAgICAgICAgICA8Q2FwdGlvblxuICAgICAgICAgICAgICBtYXhEYXRlPXttYXhEYXRlfVxuICAgICAgICAgICAgICBtaW5EYXRlPXttaW5EYXRlfVxuICAgICAgICAgICAgICBvbkRhdGVDaGFuZ2U9e2hhbmRsZU1vbnRoQ2hhbmdlfVxuICAgICAgICAgICAgICB7Li4uQ2FwdGlvbkVsZW1lbnRQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIG9uRGF5Q2xpY2s9e2hhbmRsZURheUNsaWNrfVxuICAgICAgICAgIG9uTW9udGhDaGFuZ2U9e2hhbmRsZU1vbnRoQ2hhbmdlfVxuICAgICAgICAgIHJlbmRlckRheT17KGRheTogRGF0ZSkgPT4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tY2VsbGB9PlxuICAgICAgICAgICAgICB7cmVuZGVyRGF5ICYmIHJlbmRlckRheShkYXkpID8gcmVuZGVyRGF5KGRheSkgOiBkYXkuZ2V0RGF0ZSgpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIClcblxuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICAgIDxJbnB1dFxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzU2V0fVxuICAgICAgICBjbGVhdmVPcHRpb25zPXt7XG4gICAgICAgICAgYmxvY2tzOiBbNCwgMiwgMl0sXG4gICAgICAgICAgZGVsaW1pdGVyOiBcIi1cIixcbiAgICAgICAgfX1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBpbnRlbnQ9e2ludGVudH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXtoYW5kbGVJbnB1dEZvY3VzfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUlucHV0S2V5RG93bn1cbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgICAgICBvbkNsaWNrKClcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dENsaWNrSW5zaWRlUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIH19XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgcmlnaHRFbGVtZW50PXtcbiAgICAgICAgICBhbGxvd0NsZWFyID8gKFxuICAgICAgICAgICAgPEljb25cbiAgICAgICAgICAgICAgaWNvbj17XG4gICAgICAgICAgICAgICAgY2xlYXJJY29uU3RhdGUgPT09IFwiaW5cIiA/IFwiY2FuY2VsLWNpcmNsZVwiIDogXCJjYWxlbmRhci1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBzZXRDbGVhckljb25TdGF0ZShcImluXCIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRDbGVhckljb25TdGF0ZShcIm91dFwiKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlUHJvcCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZERheShcIlwiKVxuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShcIlwiKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKFwiXCIpXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvblZpc2libGVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICBvblZpc2libGVDaGFuZ2UoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2libGVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0VmlzaWJsZShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dENsaWNrSW5zaWRlUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICBpY29uPVwiY2FsZW5kYXItb3V0bGluZWRcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCDnlKjkuo7opobnm5YgSW5wdXQg5pys6Lqr6K6+572u55qEIG5leHRDbGlja0luc2lkZVJlZlxuICAgICAgICAgICAgICAgIC8vIOazqOaEjyDkuIvkuIDmrKEgaGFuZGxlVmlzaWJsZUNoYW5nZSDosIPnlKjkuK3nmoQgc2V0VGltZW91dFxuICAgICAgICAgICAgICAgIC8vIOeUseS6juaYr+WcqOWFqOWxgCBjbGljayDkuovku7bkuK3op6blj5HvvIzlm6DmraTlj6/ku6Xkv53or4Hpobrluo/lnKjmraTkuYvlkI5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIG5leHRDbGlja0luc2lkZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgICAgLz5cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFBvcG92ZXJcbiAgICAgICAgYXJyb3dlZD17ZmFsc2V9XG4gICAgICAgIG9uVmlzaWJsZUNoYW5nZT17aGFuZGxlVmlzaWJsZUNoYW5nZX1cbiAgICAgICAgcGxhY2VtZW50PXtwbGFjZW1lbnR9XG4gICAgICAgIHBvcHVwPXtcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2Ryb3Bkb3duUmVuZGVyICYmIGRyb3Bkb3duUmVuZGVyKHBvcHVwRWxlbWVudClcbiAgICAgICAgICAgICAgPyBkcm9wZG93blJlbmRlcihwb3B1cEVsZW1lbnQpXG4gICAgICAgICAgICAgIDogcG9wdXBFbGVtZW50fVxuICAgICAgICAgIDwvPlxuICAgICAgICB9XG4gICAgICAgIHBvcHVwU3R5bGU9e3tcbiAgICAgICAgICBtYXhXaWR0aDogc2hvcnRjdXRzRW5hYmxlZCA/IFwiMzQycHhcIiA6IFwiMjQycHhcIixcbiAgICAgICAgICB3aWR0aDogc2hvcnRjdXRzRW5hYmxlZCA/IFwiMzQycHhcIiA6IFwiMjQycHhcIixcbiAgICAgICAgfX1cbiAgICAgICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICAgICAgdmlzaWJsZT17dmlzaWJsZX1cbiAgICAgICAgey4uLnBvcG92ZXJQcm9wc31cbiAgICAgID5cbiAgICAgICAge3RyaWdnZXJFbGVtZW50IHx8IGlucHV0RWxlbWVudH1cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICApXG4gIH1cbilcblxuRGF0ZVBpY2tlci5kaXNwbGF5TmFtZSA9IFwiRGF0ZVBpY2tlclwiXG5cbkRhdGVQaWNrZXIuUmFuZ2VQaWNrZXIgPSBSYW5nZVBpY2tlclxuXG5EYXRlUGlja2VyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgea4hemZpFxuICAgKi9cbiAgYWxsb3dDbGVhcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOaYr+WQpuWcqOmAieaLqeWQju+8jOa2iOWksSBQb3BvdmVyXG4gICAqL1xuICBjbG9zZU9uU2VsZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOWGhemDqOmpseWKqO+8mum7mOiupOaXpeacn1xuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5YaF6YOo6amx5Yqo77ya6buY6K6k5piv5ZCm5pi+56S65LiL5ouJXG4gICAqL1xuICBkZWZhdWx0VmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOWkqe+8jGRheSA9PiBib29s77yM5q+P5LiA5aSp5piv55qE5pe26Ze05Li6IDEyOjAwOjAw77yM6L+Z5LiA5Liq5piv55SxIGRheS1waWNrZXItcmVhY3Qg5Yaz5a6a55qE77ybXG4gICAqIOavlOi+g+aXpeacn+eahOaXtuWAmeWwj+W/g+i/meS4gOeCueOAglxuICAgKi9cbiAgZGlzYWJsZWREYXlzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOiHquWumuS5ieS4i+aLieahhuWGheWuuVxuICAgKi9cbiAgZHJvcGRvd25SZW5kZXI6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiAyMDIyMDQwNzog6buY6K6k55qE5pel5pyf5pe26Ze05Li6IDEyIOeCue+8jOWPr+S7peS9v+eUqOatpCBQcm9wIOS/ruaUueWwj+aXtlxuICAgKi9cbiAgaG91cjogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIOiuvue9rui+k+WFpeahhuexu+Wei1xuICAgKi9cbiAgaW50ZW50OiBQcm9wVHlwZXMub25lT2YoW1xuICAgIFwibm9ybWFsXCIsXG4gICAgXCJwcmltYXJ5XCIsXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJ3YXJuaW5nXCIsXG4gICAgXCJkYW5nZXJcIixcbiAgXSksXG4gIC8qKlxuICAgKiDmnIDlpKfpmZDliLbml6XmnJ9cbiAgICovXG4gIG1heERhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxuICAvKipcbiAgICog5pyA5bCP6ZmQ5Yi25pel5pyfXG4gICAqL1xuICBtaW5EYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKSxcbiAgLyoqXG4gICAqIOaXpeacn+aUueWPmOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDmmL7npLrnirbmgIHlj5HnlJ/lj5jljJbml7bnmoRoYW5kbGVyXG4gICAqL1xuICBvblZpc2libGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5Y2g5L2N5a2X56ymXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOW8ueWHuuWxguS9jee9rlxuICAgKi9cbiAgcGxhY2VtZW50OiBQcm9wVHlwZXMub25lT2YoW1xuICAgIFwidG9wXCIsXG4gICAgXCJsZWZ0XCIsXG4gICAgXCJyaWdodFwiLFxuICAgIFwiYm90dG9tXCIsXG4gICAgXCJ0b3BMZWZ0XCIsXG4gICAgXCJ0b3BSaWdodFwiLFxuICAgIFwiYm90dG9tTGVmdFwiLFxuICAgIFwiYm90dG9tUmlnaHRcIixcbiAgICBcImxlZnRUb3BcIixcbiAgICBcImxlZnRCb3R0b21cIixcbiAgICBcInJpZ2h0VG9wXCIsXG4gICAgXCJyaWdodEJvdHRvbVwiLFxuICBdKSxcbiAgLyoqXG4gICAqIOS8oOWFpSBQb3BvdmVyIOeahCBwcm9wc1xuICAgKi9cbiAgcG9wb3ZlclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICog6Ieq5a6a5LmJ5aaC5L2V5riy5p+T5q+P5Liq5pel5pyfXG4gICAqL1xuICByZW5kZXJEYXk6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDlv6vmjbfpgInmi6npobnvvIzmoLzlvI/vvJpbeyBsYWJlbDogXCLnpZblm73nlJ/ml6VcIiwgdmFsdWU6IG5ldyBEYXRlKFwiMjAyMi0xMC0wMVwiKSB9XVxuICAgKi9cbiAgc2hvcnRjdXRzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog6K6+572u5bC65a+4XG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibWluaVwiLCBcInNtYWxsXCIsIFwibWVkaXVtXCIsIFwibGFyZ2VcIl0pLFxuICAvKipcbiAgICog6K6+572u5Li76aKYXG4gICAqL1xuICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mKFtudWxsLCBcImxpZ2h0XCJdKSxcbiAgLyoqXG4gICAqIOiHquWumuS5ieinpuWPkeS4i+aLieeahOWFg+e0oFxuICAgKi9cbiAgdHJpZ2dlckVsZW1lbnQ6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDlpJbpg6jmjqfliLbvvJrlvZPliY3ml6XmnJ9cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5aSW6YOo5o6n5Yi277ya5piv5ZCm5pi+56S65LiL5ouJ6YCJ5oupXG4gICAqL1xuICB2aXNpYmxlOiBQcm9wVHlwZXMuYm9vbCxcbn1cblxuRGF0ZVBpY2tlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGFsbG93Q2xlYXI6IGZhbHNlLFxuICBjbGFzc05hbWU6IFwiXCIsXG4gIGNsb3NlT25TZWxlY3Q6IGZhbHNlLFxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRlZmF1bHRWaXNpYmxlOiBudWxsLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGRpc2FibGVkRGF5czogbm9vcCxcbiAgZHJvcGRvd25SZW5kZXI6IHVuZGVmaW5lZCxcbiAgaG91cjogMTIsXG4gIGludGVudDogXCJub3JtYWxcIixcbiAgbWF4RGF0ZTogZ2V0RGVmYXVsdE1heERhdGUoKSxcbiAgbWluRGF0ZTogZ2V0RGVmYXVsdE1pbkRhdGUoKSxcbiAgb25DaGFuZ2U6IG5vb3AsXG4gIG9uVmlzaWJsZUNoYW5nZTogbm9vcCxcbiAgcGxhY2Vob2xkZXI6IFwi6YCJ5oup5pel5pyfXCIsXG4gIHBsYWNlbWVudDogXCJib3R0b21MZWZ0XCIsXG4gIHBvcG92ZXJQcm9wczoge30sXG4gIHJlbmRlckRheTogdW5kZWZpbmVkLFxuICBzaG9ydGN1dHM6IHVuZGVmaW5lZCxcbiAgc2l6ZTogXCJzbWFsbFwiLFxuICB0aGVtZTogbnVsbCxcbiAgdHJpZ2dlckVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgdmFsdWU6IG51bGwsXG4gIHZpc2libGU6IG51bGwsXG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVQaWNrZXJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQU9BLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFdBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLGVBQUEsR0FBQUwsdUJBQUEsQ0FBQUMsT0FBQTtBQU1BLElBQUFLLFlBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQU0sV0FBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sZUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsS0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsTUFBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQVUsUUFBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVcsUUFBQSxHQUFBVCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVksT0FBQSxHQUFBVixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWEsVUFBQSxHQUFBWCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWMsS0FBQSxHQUFBZCxPQUFBO0FBUWUsSUFBQWUsU0FBQTtBQUFBLFNBQUFiLHVCQUFBYyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSx5QkFBQUYsQ0FBQSw2QkFBQUcsT0FBQSxtQkFBQUMsQ0FBQSxP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