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>
285 lines • 44.7 kB
JavaScript
var _excluded = ["className", "defaultValue", "inputVisible", "marks", "max", "min", "onAfterChange", "onBeforeChange", "onChange", "range", "step", "style", "tipFormatter", "tooltipProps", "value"],
_excluded2 = ["dragging", "index", "value"];
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
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 _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
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); }
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; }
import React, { useEffect, useRef, useState } from "react";
import PropTypes from "prop-types";
import classNames from "classnames";
import RcHandle from "rc-slider/lib/Handle";
import RcRange from "rc-slider/lib/Range";
import RcSlider from "rc-slider/lib/Slider";
import NumericInput from "../numeric-input";
import Tooltip from "../tooltip";
import "./style";
var noop = function noop() {};
var prefix = "adui-slider";
var Slider = function Slider(_ref) {
var className = _ref.className,
defaultValue = _ref.defaultValue,
inputVisible = _ref.inputVisible,
marks = _ref.marks,
max = _ref.max,
min = _ref.min,
onAfterChange = _ref.onAfterChange,
onBeforeChange = _ref.onBeforeChange,
onChange = _ref.onChange,
range = _ref.range,
step = _ref.step,
style = _ref.style,
tipFormatter = _ref.tipFormatter,
tooltipProps = _ref.tooltipProps,
valueProp = _ref.value,
otherProps = _objectWithoutProperties(_ref, _excluded);
var tooltipLeft = useRef(null);
var tooltipRight = useRef(null);
var tooltipCombined = useRef(null);
var _useState = useState("separated"),
_useState2 = _slicedToArray(_useState, 2),
rangeTooltipCombinedStatus = _useState2[0],
setRangeTooltipCombinedStatus = _useState2[1];
var _useState3 = useState(false),
_useState4 = _slicedToArray(_useState3, 2),
active = _useState4[0],
setActive = _useState4[1];
var _useState5 = useState([]),
_useState6 = _slicedToArray(_useState5, 2),
tooltipVisibleArray = _useState6[0],
setTooltipVisibleArray = _useState6[1];
var _useState7 = useState(function () {
var val;
if (valueProp !== null) {
val = typeof valueProp === "string" ? Number(valueProp) : valueProp;
} else if (defaultValue !== null) {
val = typeof defaultValue === "string" ? Number(defaultValue) : defaultValue;
}
if (val === undefined) {
return val;
}
return range ? val : Number(val);
}),
_useState8 = _slicedToArray(_useState7, 2),
value = _useState8[0],
setValue = _useState8[1];
if (valueProp !== null && valueProp !== undefined && (_typeof(valueProp) === "object" || !isNaN(valueProp)) && (typeof valueProp === "string" ? Number(valueProp) : valueProp) !== value) {
setValue(range ? valueProp : Number(valueProp));
}
useEffect(function () {
if (range && Array.isArray(value) && (tooltipVisibleArray[0] || active) && tooltipLeft.current && tooltipRight.current) {
var rectLeft = tooltipLeft.current.getBoundingClientRect();
var rectRight = tooltipRight.current.getBoundingClientRect();
if (rectLeft.left === rectRight.left) {
setRangeTooltipCombinedStatus("overlapped");
} else if (rectLeft.left + rectLeft.width > rectRight.left) {
setRangeTooltipCombinedStatus("combined");
if (tooltipCombined.current) {
tooltipCombined.current.style.left = "calc(".concat(value[0], "% - ").concat(rectLeft.width / 2, "px)");
tooltipCombined.current.style.width = "calc(".concat(value[1] - value[0], "% + ").concat(rectLeft.width, "px)");
}
} else {
setRangeTooltipCombinedStatus("separated");
}
}
}, [value, range, active, tooltipVisibleArray]);
var valuePropsObject = {};
var numericInputPropsObject = {};
if (defaultValue !== null) {
valuePropsObject.defaultValue = defaultValue;
}
if (value !== null) {
valuePropsObject.value = value;
}
if (defaultValue !== null && !Array.isArray(defaultValue)) {
numericInputPropsObject.defaultValue = defaultValue;
}
if (value !== null && !Array.isArray(value)) {
numericInputPropsObject.value = value;
}
var classSet = classNames(className, "".concat(prefix, "-wrapper"), _defineProperty(_defineProperty({}, "".concat(prefix, "-active"), active), "".concat(prefix, "-hasMarks"), marks && Object.keys(marks).length));
var stepString = step ? step.toString() : "1";
var precision = 0;
if (stepString.includes(".")) {
precision = stepString.length - stepString.indexOf(".") - 1;
}
var setTooltipVisible = function setTooltipVisible(bool) {
if (bool) {
setTooltipVisibleArray({
0: true,
1: true
});
} else if (!active) {
setTooltipVisibleArray({
0: false,
1: false
});
}
};
var handleWithTooltip = function handleWithTooltip(_ref2) {
var dragging = _ref2.dragging,
index = _ref2.index,
val = _ref2.value,
restProps = _objectWithoutProperties(_ref2, _excluded2);
if (tipFormatter) {
if (range) {
return React.createElement(RcHandle, _extends({
value: val,
onMouseEnter: function onMouseEnter() {
return setTooltipVisible(true);
},
onMouseLeave: function onMouseLeave() {
return setTooltipVisible(false);
}
}, restProps));
}
return React.createElement(Tooltip, {
key: index,
popup: tipFormatter(val),
placement: tooltipProps && tooltipProps.placement || "top",
visible: tooltipVisibleArray[index] || active
}, React.createElement(RcHandle, _extends({
value: val,
onMouseEnter: function onMouseEnter() {
return setTooltipVisible(true);
},
onMouseLeave: function onMouseLeave() {
return setTooltipVisible(false);
}
}, restProps)));
}
return React.createElement(RcHandle, _extends({
key: index,
value: val
}, restProps));
};
var handleBeforeChange = function handleBeforeChange(val) {
setActive(true);
document.documentElement.style.cursor = "pointer";
if (onBeforeChange) {
onBeforeChange(val);
}
};
var handleAfterChange = function handleAfterChange(val) {
setActive(false);
setTooltipVisibleArray({
0: false,
1: false
});
document.documentElement.style.cursor = "";
if (onAfterChange) {
onAfterChange(val);
}
};
var checkValueIsValid = function checkValueIsValid(val) {
return val !== value && val !== null && val !== undefined && min !== undefined && max !== undefined && val >= min && val <= max;
};
var handleChange = function handleChange(val) {
var newValue = range ? val : Number(val);
if (range || checkValueIsValid(newValue)) {
if (valueProp === null) {
setValue(newValue);
}
if (onChange) {
onChange(newValue);
}
}
};
var sliderProps = _objectSpread(_objectSpread({
handle: function handle(info) {
return handleWithTooltip(info);
},
marks: marks,
min: min,
max: max,
onAfterChange: handleAfterChange,
onBeforeChange: handleBeforeChange,
onChange: handleChange,
prefixCls: prefix,
step: step
}, valuePropsObject), otherProps);
var slider = range ? React.createElement(RcRange, sliderProps) : React.createElement(RcSlider, sliderProps);
return React.createElement("div", {
className: classSet,
style: style
}, tipFormatter && range && Array.isArray(value) && React.createElement("div", {
className: classNames("adui-slider-range-tooltip-wrapper", {
"adui-slider-range-tooltip-wrapper-visible": tooltipVisibleArray[0] || active,
"adui-slider-range-tooltip-wrapper-combined": rangeTooltipCombinedStatus === "combined",
"adui-slider-range-tooltip-wrapper-overlapped": rangeTooltipCombinedStatus === "overlapped"
})
}, React.createElement("div", {
className: "adui-slider-range-tooltip adui-slider-range-tooltip-left",
style: {
left: "".concat(value[0], "%")
},
ref: tooltipLeft
}, tipFormatter(value[0])), React.createElement("div", {
className: "adui-slider-range-tooltip adui-slider-range-tooltip-right",
style: {
left: "".concat(value[1], "%")
},
ref: tooltipRight
}, tipFormatter(value[1])), React.createElement("div", {
className: "adui-slider-range-tooltip-combined",
ref: tooltipCombined
}, tipFormatter(value[0]), " - ", tipFormatter(value[1]))), slider, inputVisible && !range && React.createElement(NumericInput, _extends({
placeholder: "",
precision: precision,
onChange: function onChange(val) {
handleChange(typeof val === "string" ? 0 : val);
},
step: step,
style: {
marginLeft: "12px",
width: "56px",
height: "22px"
}
}, numericInputPropsObject, otherProps)));
};
Slider.propTypes = {
className: PropTypes.string,
defaultValue: PropTypes.any,
inputVisible: PropTypes.bool,
marks: PropTypes.any,
max: PropTypes.number,
min: PropTypes.number,
onAfterChange: PropTypes.func,
onBeforeChange: PropTypes.func,
onChange: PropTypes.func,
range: PropTypes.bool,
step: PropTypes.number,
style: PropTypes.object,
tipFormatter: PropTypes.func,
tooltipProps: PropTypes.object,
value: PropTypes.any
};
Slider.defaultProps = {
className: undefined,
defaultValue: null,
inputVisible: true,
marks: {},
max: 100,
min: 0,
onAfterChange: noop,
onBeforeChange: noop,
onChange: noop,
range: false,
step: 1,
style: {},
tipFormatter: null,
tooltipProps: {},
value: null
};
export default Slider;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiUHJvcFR5cGVzIiwiY2xhc3NOYW1lcyIsIlJjSGFuZGxlIiwiUmNSYW5nZSIsIlJjU2xpZGVyIiwiTnVtZXJpY0lucHV0IiwiVG9vbHRpcCIsIm5vb3AiLCJwcmVmaXgiLCJTbGlkZXIiLCJfcmVmIiwiY2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwiaW5wdXRWaXNpYmxlIiwibWFya3MiLCJtYXgiLCJtaW4iLCJvbkFmdGVyQ2hhbmdlIiwib25CZWZvcmVDaGFuZ2UiLCJvbkNoYW5nZSIsInJhbmdlIiwic3RlcCIsInN0eWxlIiwidGlwRm9ybWF0dGVyIiwidG9vbHRpcFByb3BzIiwidmFsdWVQcm9wIiwidmFsdWUiLCJvdGhlclByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwidG9vbHRpcExlZnQiLCJ0b29sdGlwUmlnaHQiLCJ0b29sdGlwQ29tYmluZWQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJyYW5nZVRvb2x0aXBDb21iaW5lZFN0YXR1cyIsInNldFJhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJhY3RpdmUiLCJzZXRBY3RpdmUiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInRvb2x0aXBWaXNpYmxlQXJyYXkiLCJzZXRUb29sdGlwVmlzaWJsZUFycmF5IiwiX3VzZVN0YXRlNyIsInZhbCIsIk51bWJlciIsInVuZGVmaW5lZCIsIl91c2VTdGF0ZTgiLCJzZXRWYWx1ZSIsIl90eXBlb2YiLCJpc05hTiIsIkFycmF5IiwiaXNBcnJheSIsImN1cnJlbnQiLCJyZWN0TGVmdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInJlY3RSaWdodCIsImxlZnQiLCJ3aWR0aCIsImNvbmNhdCIsInZhbHVlUHJvcHNPYmplY3QiLCJudW1lcmljSW5wdXRQcm9wc09iamVjdCIsImNsYXNzU2V0IiwiX2RlZmluZVByb3BlcnR5IiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInN0ZXBTdHJpbmciLCJ0b1N0cmluZyIsInByZWNpc2lvbiIsImluY2x1ZGVzIiwiaW5kZXhPZiIsInNldFRvb2x0aXBWaXNpYmxlIiwiYm9vbCIsImhhbmRsZVdpdGhUb29sdGlwIiwiX3JlZjIiLCJkcmFnZ2luZyIsImluZGV4IiwicmVzdFByb3BzIiwiX2V4Y2x1ZGVkMiIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kcyIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsImtleSIsInBvcHVwIiwicGxhY2VtZW50IiwidmlzaWJsZSIsImhhbmRsZUJlZm9yZUNoYW5nZSIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiY3Vyc29yIiwiaGFuZGxlQWZ0ZXJDaGFuZ2UiLCJjaGVja1ZhbHVlSXNWYWxpZCIsImhhbmRsZUNoYW5nZSIsIm5ld1ZhbHVlIiwic2xpZGVyUHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwiaGFuZGxlIiwiaW5mbyIsInByZWZpeENscyIsInNsaWRlciIsInJlZiIsInBsYWNlaG9sZGVyIiwibWFyZ2luTGVmdCIsImhlaWdodCIsInByb3BUeXBlcyIsInN0cmluZyIsImFueSIsIm51bWJlciIsImZ1bmMiLCJvYmplY3QiLCJkZWZhdWx0UHJvcHMiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL3NsaWRlci9TbGlkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgUmNIYW5kbGUgZnJvbSBcInJjLXNsaWRlci9saWIvSGFuZGxlXCJcbmltcG9ydCBSY1JhbmdlIGZyb20gXCJyYy1zbGlkZXIvbGliL1JhbmdlXCJcbmltcG9ydCBSY1NsaWRlciBmcm9tIFwicmMtc2xpZGVyL2xpYi9TbGlkZXJcIlxuaW1wb3J0IE51bWVyaWNJbnB1dCBmcm9tIFwiLi4vbnVtZXJpYy1pbnB1dFwiXG5pbXBvcnQgVG9vbHRpcCwgeyBJVG9vbHRpcFByb3BzIH0gZnJvbSBcIi4uL3Rvb2x0aXBcIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktc2xpZGVyXCJcblxuaW50ZXJmYWNlIElIYW5kbGVHZW5lcmF0b3JJbmZvIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIGRyYWdnaW5nOiBib29sZWFuXG4gIGluZGV4OiBudW1iZXJcbiAgdmFsdWU6IG51bWJlclxufVxuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgZGVmYXVsdFZhbHVlPzogU2xpZGVyVmFsdWVcbiAgdmFsdWU/OiBTbGlkZXJWYWx1ZVxufVxuXG5pbnRlcmZhY2UgSU51bWVyaWNJbnB1dFZhbHVlIHtcbiAgZGVmYXVsdFZhbHVlPzogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbFxuICB2YWx1ZT86IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2xpZGVyTWFya3Mge1xuICBba2V5OiBudW1iZXJdOlxuICAgIHwgUmVhY3QuUmVhY3ROb2RlXG4gICAgfCB7XG4gICAgICAgIHN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG4gICAgICAgIGxhYmVsOiBSZWFjdC5SZWFjdE5vZGVcbiAgICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgU2xpZGVyVmFsdWUgPSBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG5leHBvcnQgdHlwZSBDaGFuZ2VIYW5kbGVyID0gKHZhbHVlOiBTbGlkZXJWYWx1ZSkgPT4gdm9pZFxuXG5leHBvcnQgaW50ZXJmYWNlIElTbGlkZXJQcm9wcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgLyoqXG4gICAqIOWIneWni+eahOm7mOiupOWAvFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogU2xpZGVyVmFsdWVcbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgei+k+WFpeahhu+8jOatpCBwcm9wIOS4juWPjOa7keWdl+aooeW8j+S6kuaWpVxuICAgKi9cbiAgaW5wdXRWaXNpYmxlPzogYm9vbGVhblxuICAvKipcbiAgICog5Yi75bqm5qCH6K6w77yM5L6L5aaC77yaezI1OiBcIjI1JVwiLCA1MDogXCI1MOKEg1wifVxuICAgKi9cbiAgbWFya3M/OiBJU2xpZGVyTWFya3NcbiAgLyoqXG4gICAqIOacgOWkp+WAvFxuICAgKi9cbiAgbWF4PzogbnVtYmVyXG4gIC8qKlxuICAgKiDmnIDlsI/lgLxcbiAgICovXG4gIG1pbj86IG51bWJlclxuICAvKipcbiAgICog5ZyoIGBvbm1vdXNldXBgIOaXtuinpuWPkeeahCBoYW5kbGVyXG4gICAqL1xuICBvbkFmdGVyQ2hhbmdlPzogQ2hhbmdlSGFuZGxlclxuICAvKipcbiAgICog5ZyoIGBvbm1vdXNlZG93bmAg5pe26Kem5Y+R55qEIGhhbmRsZXJcbiAgICovXG4gIG9uQmVmb3JlQ2hhbmdlPzogQ2hhbmdlSGFuZGxlclxuICAvKipcbiAgICog5Zyo5YC85Y+R55Sf5Y+Y5YyW5pe26Kem5Y+R55qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlPzogQ2hhbmdlSGFuZGxlclxuICAvKipcbiAgICog5Y+M5ruR5Z2X5qih5byPXG4gICAqL1xuICByYW5nZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOatpemVv++8jOW/hemhu+Wkp+S6jiAwXG4gICAqL1xuICBzdGVwPzogbnVtYmVyXG4gIC8qKlxuICAgKiDpmYTliqDmoLflvI9cbiAgICovXG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuICAvKipcbiAgICog5a+55LqOIFRvb2x0aXAg5YaF5a656L+b6KGM57yW6L6R77yM5aaC77yadGlwRm9ybWF0dGVyPXt2YWx1ZSA9PiBgJHt2YWx1ZX3lhYNgfVxuICAgKi9cbiAgdGlwRm9ybWF0dGVyPzogbnVsbCB8ICgodmFsdWU6IG51bWJlcikgPT4gUmVhY3QuUmVhY3ROb2RlKVxuICAvKipcbiAgICog5byA5ZCvIHRpcEZvcm1hdHRlciDlkI7vvIzlr7nkuo4gVG9vbHRpcCDnmoQgcHJvcHNcbiAgICovXG4gIHRvb2x0aXBQcm9wcz86IElUb29sdGlwUHJvcHNcbiAgLyoqXG4gICAqIOiuvue9ruW9k+WJjeeahOWAvFxuICAgKi9cbiAgdmFsdWU/OiBTbGlkZXJWYWx1ZVxufVxuXG4vKipcbiAqIOa7keWKqOadoeeUqOS6juS7peaLluaLveeahOaWueW8j++8jOabtOS6uuaAp+WMluWcsOWujOaIkOi+k+WFpeaVsOaNruOAgemAieaLqeaVsOaNruWMuumXtOetieebrueahOOAglxuICovXG5jb25zdCBTbGlkZXI6IFJlYWN0LkZDPElTbGlkZXJQcm9wcz4gPSAoe1xuICBjbGFzc05hbWUsXG4gIGRlZmF1bHRWYWx1ZSxcbiAgaW5wdXRWaXNpYmxlLFxuICBtYXJrcyxcbiAgbWF4LFxuICBtaW4sXG4gIG9uQWZ0ZXJDaGFuZ2UsXG4gIG9uQmVmb3JlQ2hhbmdlLFxuICBvbkNoYW5nZSxcbiAgcmFuZ2UsXG4gIHN0ZXAsXG4gIHN0eWxlLFxuICB0aXBGb3JtYXR0ZXIsXG4gIHRvb2x0aXBQcm9wcyxcbiAgdmFsdWU6IHZhbHVlUHJvcCxcbiAgLi4ub3RoZXJQcm9wc1xufTogSVNsaWRlclByb3BzKSA9PiB7XG4gIGNvbnN0IHRvb2x0aXBMZWZ0ID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB0b29sdGlwUmlnaHQgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHRvb2x0aXBDb21iaW5lZCA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgW3JhbmdlVG9vbHRpcENvbWJpbmVkU3RhdHVzLCBzZXRSYW5nZVRvb2x0aXBDb21iaW5lZFN0YXR1c10gPSB1c2VTdGF0ZTxcbiAgICBcImNvbWJpbmVkXCIgfCBcInNlcGFyYXRlZFwiIHwgXCJvdmVybGFwcGVkXCJcbiAgPihcInNlcGFyYXRlZFwiKVxuICBjb25zdCBbYWN0aXZlLCBzZXRBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt0b29sdGlwVmlzaWJsZUFycmF5LCBzZXRUb29sdGlwVmlzaWJsZUFycmF5XSA9IHVzZVN0YXRlPHtcbiAgICBbaW5kZXg6IG51bWJlcl06IGJvb2xlYW5cbiAgfT4oW10pXG4gIC8qKlxuICAgKiDliJ3lp4vljJYgU2xpZGVyIOeahOWAvFxuICAgKiAxLiDkvJjlhYjliKTmlq0gUHJvcCB2YWx1Ze+8jOWmguaenOWtmOWcqCBQcm9wIHZhbHVl77yM5YiZIFNsaWRlciDlrozlhajkuqTnlLHlpJbpg6jmjqfliLbvvIzlhoXpg6jnirbmgIHml6DmlYjvvJtcbiAgICogMi4g5YaN5Yik5patIFByb3AgZGVmYXVsdFZhbHVl77yM5aaC5p6c5a2Y5Zyo6buY6K6k5YC877yM5YiZIFNsaWRlciDlgLzkuLrmraTpu5jorqTlgLzjgIJcbiAgICovXG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoKCk6IFNsaWRlclZhbHVlID0+IHtcbiAgICBsZXQgdmFsXG4gICAgaWYgKHZhbHVlUHJvcCAhPT0gbnVsbCkge1xuICAgICAgdmFsID0gdHlwZW9mIHZhbHVlUHJvcCA9PT0gXCJzdHJpbmdcIiA/IE51bWJlcih2YWx1ZVByb3ApIDogdmFsdWVQcm9wXG4gICAgfSBlbHNlIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHZhbCA9XG4gICAgICAgIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwic3RyaW5nXCIgPyBOdW1iZXIoZGVmYXVsdFZhbHVlKSA6IGRlZmF1bHRWYWx1ZVxuICAgIH1cbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB2YWxcbiAgICB9XG4gICAgcmV0dXJuIHJhbmdlID8gdmFsIDogTnVtYmVyKHZhbClcbiAgfSlcblxuICAvLyDnm7jlvZPkuo7nlJ/lkb3lkajmnJ8gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXG4gIGlmIChcbiAgICB2YWx1ZVByb3AgIT09IG51bGwgJiZcbiAgICB2YWx1ZVByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICh0eXBlb2YgdmFsdWVQcm9wID09PSBcIm9iamVjdFwiIHx8ICFpc05hTih2YWx1ZVByb3ApKSAmJlxuICAgICh0eXBlb2YgdmFsdWVQcm9wID09PSBcInN0cmluZ1wiID8gTnVtYmVyKHZhbHVlUHJvcCkgOiB2YWx1ZVByb3ApICE9PSB2YWx1ZVxuICApIHtcbiAgICBzZXRWYWx1ZShyYW5nZSA/IHZhbHVlUHJvcCA6IE51bWJlcih2YWx1ZVByb3ApKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyDov5nph4zlgZrlj4zmu5HlnZfmqKHlvI/ml7bnmoQgdG9vbHRpcCDorr7orqFcbiAgICBpZiAoXG4gICAgICByYW5nZSAmJlxuICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICh0b29sdGlwVmlzaWJsZUFycmF5WzBdIHx8IGFjdGl2ZSkgJiZcbiAgICAgIHRvb2x0aXBMZWZ0LmN1cnJlbnQgJiZcbiAgICAgIHRvb2x0aXBSaWdodC5jdXJyZW50XG4gICAgKSB7XG4gICAgICBjb25zdCByZWN0TGVmdCA9IHRvb2x0aXBMZWZ0LmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHJlY3RSaWdodCA9IHRvb2x0aXBSaWdodC5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAvLyDliKTmlq3kuKTkuKogdG9vbHRpcCDmmK/lkKblnKjkvY3nva7kuIrlrZjlnKjph43lj6BcbiAgICAgIGlmIChyZWN0TGVmdC5sZWZ0ID09PSByZWN0UmlnaHQubGVmdCkge1xuICAgICAgICBzZXRSYW5nZVRvb2x0aXBDb21iaW5lZFN0YXR1cyhcIm92ZXJsYXBwZWRcIilcbiAgICAgIH0gZWxzZSBpZiAocmVjdExlZnQubGVmdCArIHJlY3RMZWZ0LndpZHRoID4gcmVjdFJpZ2h0LmxlZnQpIHtcbiAgICAgICAgc2V0UmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXMoXCJjb21iaW5lZFwiKVxuXG4gICAgICAgIGlmICh0b29sdGlwQ29tYmluZWQuY3VycmVudCkge1xuICAgICAgICAgIHRvb2x0aXBDb21iaW5lZC5jdXJyZW50LnN0eWxlLmxlZnQgPSBgY2FsYygke3ZhbHVlWzBdfSUgLSAke1xuICAgICAgICAgICAgcmVjdExlZnQud2lkdGggLyAyXG4gICAgICAgICAgfXB4KWBcblxuICAgICAgICAgIHRvb2x0aXBDb21iaW5lZC5jdXJyZW50LnN0eWxlLndpZHRoID0gYGNhbGMoJHtcbiAgICAgICAgICAgIHZhbHVlWzFdIC0gdmFsdWVbMF1cbiAgICAgICAgICB9JSArICR7cmVjdExlZnQud2lkdGh9cHgpYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRSYW5nZVRvb2x0aXBDb21iaW5lZFN0YXR1cyhcInNlcGFyYXRlZFwiKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3ZhbHVlLCByYW5nZSwgYWN0aXZlLCB0b29sdGlwVmlzaWJsZUFycmF5XSlcblxuICBjb25zdCB2YWx1ZVByb3BzT2JqZWN0OiBJVmFsdWUgPSB7fVxuICBjb25zdCBudW1lcmljSW5wdXRQcm9wc09iamVjdDogSU51bWVyaWNJbnB1dFZhbHVlID0ge31cblxuICBpZiAoZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgdmFsdWVQcm9wc09iamVjdC5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWVcbiAgfVxuICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICB2YWx1ZVByb3BzT2JqZWN0LnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKSkge1xuICAgIG51bWVyaWNJbnB1dFByb3BzT2JqZWN0LmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZVxuICB9XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBudW1lcmljSW5wdXRQcm9wc09iamVjdC52YWx1ZSA9IHZhbHVlXG4gIH1cblxuICBjb25zdCBjbGFzc1NldCA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCBgJHtwcmVmaXh9LXdyYXBwZXJgLCB7XG4gICAgW2Ake3ByZWZpeH0tYWN0aXZlYF06IGFjdGl2ZSxcbiAgICBbYCR7cHJlZml4fS1oYXNNYXJrc2BdOiBtYXJrcyAmJiBPYmplY3Qua2V5cyhtYXJrcykubGVuZ3RoLFxuICB9KVxuXG4gIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwID8gc3RlcC50b1N0cmluZygpIDogXCIxXCJcbiAgbGV0IHByZWNpc2lvbiA9IDBcbiAgaWYgKHN0ZXBTdHJpbmcuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgcHJlY2lzaW9uID0gc3RlcFN0cmluZy5sZW5ndGggLSBzdGVwU3RyaW5nLmluZGV4T2YoXCIuXCIpIC0gMVxuICB9XG5cbiAgY29uc3Qgc2V0VG9vbHRpcFZpc2libGUgPSAoYm9vbDogYm9vbGVhbikgPT4ge1xuICAgIGlmIChib29sKSB7XG4gICAgICBzZXRUb29sdGlwVmlzaWJsZUFycmF5KHtcbiAgICAgICAgMDogdHJ1ZSxcbiAgICAgICAgMTogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICghYWN0aXZlKSB7XG4gICAgICBzZXRUb29sdGlwVmlzaWJsZUFycmF5KHtcbiAgICAgICAgMDogZmFsc2UsXG4gICAgICAgIDE6IGZhbHNlLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVXaXRoVG9vbHRpcCA9ICh7XG4gICAgZHJhZ2dpbmcsXG4gICAgaW5kZXgsXG4gICAgdmFsdWU6IHZhbCxcbiAgICAuLi5yZXN0UHJvcHNcbiAgfTogSUhhbmRsZUdlbmVyYXRvckluZm8pID0+IHtcbiAgICBpZiAodGlwRm9ybWF0dGVyKSB7XG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8UmNIYW5kbGVcbiAgICAgICAgICAgIHZhbHVlPXt2YWx9XG4gICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldFRvb2x0aXBWaXNpYmxlKHRydWUpfVxuICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRUb29sdGlwVmlzaWJsZShmYWxzZSl9XG4gICAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUb29sdGlwXG4gICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICBwb3B1cD17dGlwRm9ybWF0dGVyKHZhbCl9XG4gICAgICAgICAgcGxhY2VtZW50PXsodG9vbHRpcFByb3BzICYmIHRvb2x0aXBQcm9wcy5wbGFjZW1lbnQpIHx8IFwidG9wXCJ9XG4gICAgICAgICAgdmlzaWJsZT17dG9vbHRpcFZpc2libGVBcnJheVtpbmRleF0gfHwgYWN0aXZlfVxuICAgICAgICA+XG4gICAgICAgICAgPFJjSGFuZGxlXG4gICAgICAgICAgICB2YWx1ZT17dmFsfVxuICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRUb29sdGlwVmlzaWJsZSh0cnVlKX1cbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0VG9vbHRpcFZpc2libGUoZmFsc2UpfVxuICAgICAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgICAgICAvPlxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIDxSY0hhbmRsZSBrZXk9e2luZGV4fSB2YWx1ZT17dmFsfSB7Li4ucmVzdFByb3BzfSAvPlxuICB9XG5cbiAgY29uc3QgaGFuZGxlQmVmb3JlQ2hhbmdlID0gKHZhbDogU2xpZGVyVmFsdWUpID0+IHtcbiAgICBzZXRBY3RpdmUodHJ1ZSlcbiAgICAvLyDmi5bmi73lvIDlp4vvvIzmraTml7bkv53or4Hov4fnqIvkuK3pvKDmoIfnp7vliqjliLDlk6rph4zmiYvlir/pg73kuI3lj5hcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yID0gXCJwb2ludGVyXCJcbiAgICBpZiAob25CZWZvcmVDaGFuZ2UpIHtcbiAgICAgIG9uQmVmb3JlQ2hhbmdlKHZhbClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVBZnRlckNoYW5nZSA9ICh2YWw6IFNsaWRlclZhbHVlKSA9PiB7XG4gICAgc2V0QWN0aXZlKGZhbHNlKVxuICAgIHNldFRvb2x0aXBWaXNpYmxlQXJyYXkoe1xuICAgICAgMDogZmFsc2UsXG4gICAgICAxOiBmYWxzZSxcbiAgICB9KVxuICAgIC8vIOaLluaLvee7k+adn++8jOagt+W8j+mHjee9rlxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3IgPSBcIlwiXG4gICAgaWYgKG9uQWZ0ZXJDaGFuZ2UpIHtcbiAgICAgIG9uQWZ0ZXJDaGFuZ2UodmFsKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoZWNrVmFsdWVJc1ZhbGlkID0gKHZhbDogU2xpZGVyVmFsdWUpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdmFsICE9PSB2YWx1ZSAmJlxuICAgICAgdmFsICE9PSBudWxsICYmXG4gICAgICB2YWwgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgbWluICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG1heCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB2YWwgPj0gbWluICYmXG4gICAgICB2YWwgPD0gbWF4XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKHZhbDogU2xpZGVyVmFsdWUpID0+IHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHJhbmdlID8gdmFsIDogTnVtYmVyKHZhbClcbiAgICBpZiAocmFuZ2UgfHwgY2hlY2tWYWx1ZUlzVmFsaWQobmV3VmFsdWUpKSB7XG4gICAgICBpZiAodmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKVxuICAgICAgfVxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKG5ld1ZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNsaWRlclByb3BzID0ge1xuICAgIGhhbmRsZTogKGluZm86IElIYW5kbGVHZW5lcmF0b3JJbmZvKSA9PiBoYW5kbGVXaXRoVG9vbHRpcChpbmZvKSxcbiAgICBtYXJrcyxcbiAgICBtaW4sXG4gICAgbWF4LFxuICAgIG9uQWZ0ZXJDaGFuZ2U6IGhhbmRsZUFmdGVyQ2hhbmdlLFxuICAgIG9uQmVmb3JlQ2hhbmdlOiBoYW5kbGVCZWZvcmVDaGFuZ2UsXG4gICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICBwcmVmaXhDbHM6IHByZWZpeCxcbiAgICBzdGVwLFxuICAgIC4uLnZhbHVlUHJvcHNPYmplY3QsXG4gICAgLi4ub3RoZXJQcm9wcyxcbiAgfVxuXG4gIGNvbnN0IHNsaWRlciA9IHJhbmdlID8gKFxuICAgIDxSY1JhbmdlIHsuLi5zbGlkZXJQcm9wc30gLz5cbiAgKSA6IChcbiAgICA8UmNTbGlkZXIgey4uLnNsaWRlclByb3BzfSAvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NTZXR9IHN0eWxlPXtzdHlsZX0+XG4gICAgICB7dGlwRm9ybWF0dGVyICYmIHJhbmdlICYmIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcImFkdWktc2xpZGVyLXJhbmdlLXRvb2x0aXAtd3JhcHBlclwiLCB7XG4gICAgICAgICAgICBcImFkdWktc2xpZGVyLXJhbmdlLXRvb2x0aXAtd3JhcHBlci12aXNpYmxlXCI6XG4gICAgICAgICAgICAgIHRvb2x0aXBWaXNpYmxlQXJyYXlbMF0gfHwgYWN0aXZlLFxuICAgICAgICAgICAgXCJhZHVpLXNsaWRlci1yYW5nZS10b29sdGlwLXdyYXBwZXItY29tYmluZWRcIjpcbiAgICAgICAgICAgICAgcmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXMgPT09IFwiY29tYmluZWRcIixcbiAgICAgICAgICAgIFwiYWR1aS1zbGlkZXItcmFuZ2UtdG9vbHRpcC13cmFwcGVyLW92ZXJsYXBwZWRcIjpcbiAgICAgICAgICAgICAgcmFuZ2VUb29sdGlwQ29tYmluZWRTdGF0dXMgPT09IFwib3ZlcmxhcHBlZFwiLFxuICAgICAgICAgIH0pfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWR1aS1zbGlkZXItcmFuZ2UtdG9vbHRpcCBhZHVpLXNsaWRlci1yYW5nZS10b29sdGlwLWxlZnRcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7dmFsdWVbMF19JWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgcmVmPXt0b29sdGlwTGVmdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGlwRm9ybWF0dGVyKHZhbHVlWzBdKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhZHVpLXNsaWRlci1yYW5nZS10b29sdGlwIGFkdWktc2xpZGVyLXJhbmdlLXRvb2x0aXAtcmlnaHRcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7dmFsdWVbMV19JWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgcmVmPXt0b29sdGlwUmlnaHR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RpcEZvcm1hdHRlcih2YWx1ZVsxXSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWR1aS1zbGlkZXItcmFuZ2UtdG9vbHRpcC1jb21iaW5lZFwiXG4gICAgICAgICAgICByZWY9e3Rvb2x0aXBDb21iaW5lZH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGlwRm9ybWF0dGVyKHZhbHVlWzBdKX0gLSB7dGlwRm9ybWF0dGVyKHZhbHVlWzFdKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAge3NsaWRlcn1cbiAgICAgIHtpbnB1dFZpc2libGUgJiYgIXJhbmdlICYmIChcbiAgICAgICAgPE51bWVyaWNJbnB1dFxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgICAgICBwcmVjaXNpb249e3ByZWNpc2lvbn1cbiAgICAgICAgICBvbkNoYW5nZT17KHZhbCkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlQ2hhbmdlKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgPyAwIDogdmFsKVxuICAgICAgICAgIH19XG4gICAgICAgICAgc3RlcD17c3RlcH1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgbWFyZ2luTGVmdDogXCIxMnB4XCIsXG4gICAgICAgICAgICB3aWR0aDogXCI1NnB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMjJweFwiLFxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLm51bWVyaWNJbnB1dFByb3BzT2JqZWN0fVxuICAgICAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5TbGlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDliJ3lp4vnmoTpu5jorqTlgLxcbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgei+k+WFpeahhu+8jOatpCBwcm9wIOS4juWPjOa7keWdl+aooeW8j+S6kuaWpVxuICAgKi9cbiAgaW5wdXRWaXNpYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOWIu+W6puagh+iusO+8jOS+i+Wmgu+8mnsyNTogXCIyNSVcIiwgNTA6IFwiNTDihINcIn1cbiAgICovXG4gIG1hcmtzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5pyA5aSn5YC8XG4gICAqL1xuICBtYXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDmnIDlsI/lgLxcbiAgICovXG4gIG1pbjogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIOWcqCBgb25tb3VzZXVwYCDml7bop6blj5HnmoQgaGFuZGxlclxuICAgKi9cbiAgb25BZnRlckNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDlnKggYG9ubW91c2Vkb3duYCDml7bop6blj5HnmoQgaGFuZGxlclxuICAgKi9cbiAgb25CZWZvcmVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5Zyo5YC85Y+R55Sf5Y+Y5YyW5pe26Kem5Y+R55qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOWPjOa7keWdl+aooeW8j1xuICAgKi9cbiAgcmFuZ2U6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5q2l6ZW/77yM5b+F6aG75aSn5LqOIDBcbiAgICovXG4gIHN0ZXA6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDpmYTliqDmoLflvI9cbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICog5a+55LqOIFRvb2x0aXAg5YaF5a656L+b6KGM57yW6L6R77yM5aaC77yadGlwRm9ybWF0dGVyPXt2YWx1ZSA9PiBgJHt2YWx1ZX3lhYNgfVxuICAgKi9cbiAgdGlwRm9ybWF0dGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOW8gOWQryB0aXBGb3JtYXR0ZXIg5ZCO77yM5a+55LqOIFRvb2x0aXAg55qEIHByb3BzXG4gICAqL1xuICB0b29sdGlwUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiDorr7nva7lvZPliY3nmoTlgLxcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxufVxuXG5TbGlkZXIuZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IHVuZGVmaW5lZCxcbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBpbnB1dFZpc2libGU6IHRydWUsXG4gIG1hcmtzOiB7fSxcbiAgbWF4OiAxMDAsXG4gIG1pbjogMCxcbiAgb25BZnRlckNoYW5nZTogbm9vcCxcbiAgb25CZWZvcmVDaGFuZ2U6IG5vb3AsXG4gIG9uQ2hhbmdlOiBub29wLFxuICByYW5nZTogZmFsc2UsXG4gIHN0ZXA6IDEsXG4gIHN0eWxlOiB7fSxcbiAgdGlwRm9ybWF0dGVyOiBudWxsLFxuICB0b29sdGlwUHJvcHM6IHt9LFxuICB2YWx1ZTogbnVsbCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2xpZGVyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBSyxJQUFJQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDMUQsT0FBT0MsU0FBUyxNQUFNLFlBQVk7QUFDbEMsT0FBT0MsVUFBVSxNQUFNLFlBQVk7QUFDbkMsT0FBT0MsUUFBUSxNQUFNLHNCQUFzQjtBQUMzQyxPQUFPQyxPQUFPLE1BQU0scUJBQXFCO0FBQ3pDLE9BQU9DLFFBQVEsTUFBTSxzQkFBc0I7QUFDM0MsT0FBT0MsWUFBWSxNQUFNLGtCQUFrQjtBQUMzQyxPQUFPQyxPQUFPLE1BQXlCLFlBQVk7QUFDbkQsT0FBTyxTQUFTO0FBRWhCLElBQU1DLElBQUksR0FBRyxTQUFQQSxJQUFJQSxDQUFBLEVBQVMsQ0FBQyxDQUFDO0FBRXJCLElBQU1DLE1BQU0sR0FBRyxhQUFhO0FBbUc1QixJQUFN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