UNPKG

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>

352 lines (351 loc) 60.3 kB
"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 _rcAnimate = _interopRequireDefault(require("rc-animate")); var _button = _interopRequireDefault(require("../button")); var _icon = _interopRequireDefault(require("../icon")); var _popover = _interopRequireDefault(require("../popover")); var _isEqualArrays = _interopRequireDefault(require("../_util/isEqualArrays")); require("./style"); var _excluded = ["allowClear", "changeOnSelect", "children", "className", "defaultValue", "disabled", "displayRender", "expandTrigger", "onChange", "onVisibleChange", "options", "placeholder", "popoverProps", "size", "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 _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } 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 _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 prefix = "adui-cascader"; var Cascader = function Cascader(_ref) { var allowClear = _ref.allowClear, changeOnSelect = _ref.changeOnSelect, children = _ref.children, className = _ref.className, defaultValue = _ref.defaultValue, disabled = _ref.disabled, _ref$displayRender = _ref.displayRender, displayRender = _ref$displayRender === void 0 ? function (title) { return title.join("/"); } : _ref$displayRender, expandTrigger = _ref.expandTrigger, onChange = _ref.onChange, onVisibleChange = _ref.onVisibleChange, options = _ref.options, placeholder = _ref.placeholder, popoverProps = _ref.popoverProps, size = _ref.size, valueProps = _ref.value, visibleProps = _ref.visible, otherProps = _objectWithoutProperties(_ref, _excluded); var _useState = (0, _react.useState)(valueProps !== null ? valueProps || [] : defaultValue || []), _useState2 = _slicedToArray(_useState, 2), value = _useState2[0], setValue = _useState2[1]; var _useState3 = (0, _react.useState)(valueProps !== null ? valueProps || [] : defaultValue || []), _useState4 = _slicedToArray(_useState3, 2), activeValue = _useState4[0], setActiveValue = _useState4[1]; var _useState5 = (0, _react.useState)(visibleProps !== null ? visibleProps : false), _useState6 = _slicedToArray(_useState5, 2), visible = _useState6[0], setVisible = _useState6[1]; var delayTimer = (0, _react.useRef)(0); if (valueProps !== null && !(0, _isEqualArrays["default"])(valueProps || [], value)) { setValue(valueProps || []); } if (visibleProps !== null && visible !== visibleProps) { setVisible(visibleProps); } var setPopupVisible = function setPopupVisible(popupVisible) { if (visibleProps === null) { setVisible(popupVisible); } if (popupVisible && !visible) { setActiveValue(value); } if (onVisibleChange) { onVisibleChange(popupVisible); } }; var handleClear = function handleClear(e) { e.preventDefault(); e.stopPropagation(); setPopupVisible(false); if (!valueProps) { setValue([]); } if (onChange) { onChange([], []); } }; var handleChange = function handleChange(opts, _ref2) { var popupVisible = _ref2.visible; setPopupVisible(popupVisible); if (onChange) { onChange(opts.map(function (_ref3) { var v = _ref3.value; return v || ""; }), opts); } }; var hasValue = value === null || value === void 0 ? void 0 : value.length; var arrayTreeFilter = function arrayTreeFilter() { var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var filterFn = arguments.length > 1 ? arguments[1] : undefined; var childs = data; var result = []; var level = 0; do { var foundItem = childs.filter(function (item) { return filterFn(item, level); })[0]; if (!foundItem) { break; } result.push(foundItem); childs = foundItem.children || []; level += 1; } while (childs.length > 0); return result; }; var getTitle = function getTitle() { var unwrappedValue = Array.isArray(value[0]) ? value[0] : value; var selectedOptions = arrayTreeFilter(options, function (o, level) { return o.value === unwrappedValue[level]; }); var title = selectedOptions.length ? selectedOptions.map(function (o) { return o.title; }) : value; return displayRender(title.map(function (o) { return (o || "").toString(); }), selectedOptions); }; var isActiveOption = function isActiveOption(option, menuIndex) { return activeValue[menuIndex] === option.value; }; var getActiveOptions = function getActiveOptions(activeValueParam) { return arrayTreeFilter(options, function (o, level) { return o.value === (activeValueParam || activeValue)[level]; }); }; var getShowOptions = function getShowOptions() { var result = getActiveOptions().map(function (_ref4) { var childs = _ref4.children; return childs; }).filter(function (activeOption) { return activeOption === null || activeOption === void 0 ? void 0 : activeOption.length; }); result.unshift(options); return result; }; var delaySelect = function delaySelect(func) { if (delayTimer.current) { clearTimeout(delayTimer.current); delayTimer.current = 0; } if (typeof func === "function") { delayTimer.current = window.setTimeout(function () { func(); delayTimer.current = 0; }, 150); } }; var optss = getShowOptions(); var menus = _react["default"].createElement("div", { className: "".concat(prefix, "-menus") }, _react["default"].createElement(_rcAnimate["default"], { transitionAppear: true, component: "div", style: { display: "flex" }, animation: { appear: function appear(node, done) { node.classList.add("".concat(prefix, "-enter")); setTimeout(function () { node.classList.add("".concat(prefix, "-enter-active")); }, 50); var promise = new Promise(function (resolve) { return setTimeout(resolve, 200); }); promise.then(function () { node.classList.remove("".concat(prefix, "-enter-active")); node.classList.remove("".concat(prefix, "-enter")); return done(); }); return done(); }, enter: function enter(node, done) { node.classList.add("".concat(prefix, "-enter")); setTimeout(function () { node.classList.add("".concat(prefix, "-enter-active")); }, 50); var promise = new Promise(function (resolve) { return setTimeout(resolve, 200); }); promise.then(function () { node.classList.remove("".concat(prefix, "-enter-active")); node.classList.remove("".concat(prefix, "-enter")); return done(); }); return done(); }, leave: function leave(node, done) { node.classList.add("".concat(prefix, "-leave")); setTimeout(function () { node.classList.add("".concat(prefix, "-leave-active")); }, 50); var promise = new Promise(function (resolve) { return setTimeout(resolve, 200); }); promise.then(function () { return done(); }); } } }, optss.map(function (opts, menuIndex) { return _react["default"].createElement("div", { className: (0, _classnames["default"])("".concat(prefix, "-menu"), _defineProperty({}, "".concat(prefix, "-menu-").concat(size), size)), key: menuIndex }, (opts || []).map(function (o, j) { var v = o.value, title = o.title, c = o.children, d = o.disabled; var handleSelect = function handleSelect() { if (d) { return; } var activeValueDuplicated = _toConsumableArray(activeValue); activeValueDuplicated = activeValueDuplicated.slice(0, menuIndex + 1); activeValueDuplicated[menuIndex] = v || ""; var activeOptions = getActiveOptions(activeValueDuplicated); setActiveValue(activeValueDuplicated); if (!(c !== null && c !== void 0 && c.length)) { handleChange(activeOptions, { visible: false }); if (valueProps === null) { setValue(activeValueDuplicated); } } else if (changeOnSelect) { handleChange(activeOptions, { visible: true }); if (valueProps === null) { setValue(activeValueDuplicated); } } }; return _react["default"].createElement("div", { role: "none", key: v || j, className: (0, _classnames["default"])("".concat(prefix, "-menu-item"), _defineProperty({}, "".concat(prefix, "-menu-item-active"), isActiveOption(o, menuIndex))), title: title === null || title === void 0 ? void 0 : title.toString(), onMouseDown: function onMouseDown(e) { return e.preventDefault(); }, onClick: handleSelect, onMouseEnter: function onMouseEnter() { if (expandTrigger === "hover" && c !== null && c !== void 0 && c.length) { delaySelect(handleSelect); } }, onMouseLeave: function onMouseLeave() { if (expandTrigger === "hover" && c !== null && c !== void 0 && c.length) { delaySelect(); } } }, _react["default"].createElement("div", { className: "".concat(prefix, "-menu-item-content") }, title), !!(c !== null && c !== void 0 && c.length) && _react["default"].createElement(_icon["default"], { icon: "triangle-right", className: "".concat(prefix, "-menu-item-icon") })); })); }))); return _react["default"].createElement(_popover["default"], _extends({ arrowed: false, popupClassName: "".concat(prefix, "-popup"), visible: disabled ? false : visible, onVisibleChange: setPopupVisible, trigger: "click", popup: menus }, popoverProps), _react["default"].createElement(_button["default"], _extends({ disabled: disabled, className: (0, _classnames["default"])("".concat(prefix, "-button"), className, _defineProperty(_defineProperty({}, "".concat(prefix, "-button-valued"), hasValue), "".concat(prefix, "-button-clearable"), allowClear)), size: size }, otherProps), hasValue ? _react["default"].createElement("span", { className: "".concat(prefix, "-label") }, getTitle()) : _react["default"].createElement("span", { className: "".concat(prefix, "-placeholder") }, placeholder), _react["default"].createElement("div", { className: "".concat(prefix, "-icons") }, _react["default"].createElement(_icon["default"], { icon: "triangle-down", className: "".concat(prefix, "-suffix"), color: disabled ? "var(--transparent-gray-600)" : "var(--transparent-gray-700)" }), allowClear && !disabled && _react["default"].createElement(_icon["default"], { icon: "cancel-circle", className: "".concat(prefix, "-remove"), color: "var(--transparent-gray-700)", onClick: handleClear })))); }; Cascader.displayName = "Cascader"; Cascader.propTypes = { allowClear: _propTypes["default"].bool, changeOnSelect: _propTypes["default"].bool, children: _propTypes["default"].node, className: _propTypes["default"].string, defaultValue: _propTypes["default"].any, disabled: _propTypes["default"].bool, displayRender: _propTypes["default"].any, expandTrigger: _propTypes["default"].oneOf(["click", "hover"]), options: _propTypes["default"].any, onChange: _propTypes["default"].any, onVisibleChange: _propTypes["default"].any, placeholder: _propTypes["default"].any, popoverProps: _propTypes["default"].any, size: _propTypes["default"].oneOf(["mini", "small", "medium", "large"]), value: _propTypes["default"].any, visible: _propTypes["default"].any }; Cascader.defaultProps = { allowClear: true, changeOnSelect: false, children: null, className: undefined, defaultValue: null, disabled: false, displayRender: undefined, expandTrigger: "click", onChange: undefined, onVisibleChange: undefined, options: [], placeholder: "请选择", popoverProps: {}, size: "small", value: null, visible: null }; var _default = exports["default"] = Cascader; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jbGFzc25hbWVzIiwiX3JjQW5pbWF0ZSIsIl9idXR0b24iLCJfaWNvbiIsIl9wb3BvdmVyIiwiX2lzRXF1YWxBcnJheXMiLCJfZXhjbHVkZWQiLCJlIiwiX19lc01vZHVsZSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIldlYWtNYXAiLCJyIiwidCIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcHBseSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJUeXBlRXJyb3IiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiZnJvbSIsImlzQXJyYXkiLCJfYXJyYXlMaWtlVG9BcnJheSIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX25vbkl0ZXJhYmxlUmVzdCIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJ0ZXN0IiwibCIsImYiLCJvIiwibmV4dCIsImRvbmUiLCJwdXNoIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzIiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInByZWZpeCIsIkNhc2NhZGVyIiwiX3JlZiIsImFsbG93Q2xlYXIiLCJjaGFuZ2VPblNlbGVjdCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJfcmVmJGRpc3BsYXlSZW5kZXIiLCJkaXNwbGF5UmVuZGVyIiwidGl0bGUiLCJqb2luIiwiZXhwYW5kVHJpZ2dlciIsIm9uQ2hhbmdlIiwib25WaXNpYmxlQ2hhbmdlIiwib3B0aW9ucyIsInBsYWNlaG9sZGVyIiwicG9wb3ZlclByb3BzIiwic2l6ZSIsInZhbHVlUHJvcHMiLCJ2aXNpYmxlUHJvcHMiLCJ2aXNpYmxlIiwib3RoZXJQcm9wcyIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsInNldFZhbHVlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJhY3RpdmVWYWx1ZSIsInNldEFjdGl2ZVZhbHVlIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzZXRWaXNpYmxlIiwiZGVsYXlUaW1lciIsInVzZVJlZiIsImlzRXF1YWxBcnJheXMiLCJzZXRQb3B1cFZpc2libGUiLCJwb3B1cFZpc2libGUiLCJoYW5kbGVDbGVhciIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiaGFuZGxlQ2hhbmdlIiwib3B0cyIsIl9yZWYyIiwibWFwIiwiX3JlZjMiLCJ2IiwiaGFzVmFsdWUiLCJhcnJheVRyZWVGaWx0ZXIiLCJkYXRhIiwidW5kZWZpbmVkIiwiZmlsdGVyRm4iLCJjaGlsZHMiLCJyZXN1bHQiLCJsZXZlbCIsImZvdW5kSXRlbSIsImZpbHRlciIsIml0ZW0iLCJnZXRUaXRsZSIsInVud3JhcHBlZFZhbHVlIiwic2VsZWN0ZWRPcHRpb25zIiwiaXNBY3RpdmVPcHRpb24iLCJvcHRpb24iLCJtZW51SW5kZXgiLCJnZXRBY3RpdmVPcHRpb25zIiwiYWN0aXZlVmFsdWVQYXJhbSIsImdldFNob3dPcHRpb25zIiwiX3JlZjQiLCJhY3RpdmVPcHRpb24iLCJ1bnNoaWZ0IiwiZGVsYXlTZWxlY3QiLCJmdW5jIiwiY3VycmVudCIsImNsZWFyVGltZW91dCIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJvcHRzcyIsIm1lbnVzIiwiY3JlYXRlRWxlbWVudCIsImNvbmNhdCIsInRyYW5zaXRpb25BcHBlYXIiLCJjb21wb25lbnQiLCJzdHlsZSIsImRpc3BsYXkiLCJhbmltYXRpb24iLCJhcHBlYXIiLCJub2RlIiwiY2xhc3NMaXN0IiwiYWRkIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsInJlbW92ZSIsImVudGVyIiwibGVhdmUiLCJjbGFzc05hbWVzIiwia2V5IiwiaiIsImMiLCJkIiwiaGFuZGxlU2VsZWN0IiwiYWN0aXZlVmFsdWVEdXBsaWNhdGVkIiwiYWN0aXZlT3B0aW9ucyIsInJvbGUiLCJvbk1vdXNlRG93biIsIm9uQ2xpY2siLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCJpY29uIiwiYXJyb3dlZCIsInBvcHVwQ2xhc3NOYW1lIiwidHJpZ2dlciIsInBvcHVwIiwiY29sb3IiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImJvb2wiLCJzdHJpbmciLCJhbnkiLCJvbmVPZiIsImRlZmF1bHRQcm9wcyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvY2FzY2FkZXIvQ2FzY2FkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgQW5pbWF0ZSBmcm9tIFwicmMtYW5pbWF0ZVwiXG5pbXBvcnQgQnV0dG9uIGZyb20gXCIuLi9idXR0b25cIlxuaW1wb3J0IEljb24gZnJvbSBcIi4uL2ljb25cIlxuaW1wb3J0IFBvcG92ZXIsIHsgSVBvcG92ZXJQcm9wcyB9IGZyb20gXCIuLi9wb3BvdmVyXCJcbmltcG9ydCBpc0VxdWFsQXJyYXlzIGZyb20gXCIuLi9fdXRpbC9pc0VxdWFsQXJyYXlzXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktY2FzY2FkZXJcIlxuXG5leHBvcnQgdHlwZSBDYXNjYWRlclZhbHVlVHlwZSA9IFJlYWN0LlJlYWN0VGV4dFtdXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FzY2FkZXJPcHRpb24ge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgdmFsdWU/OiBzdHJpbmcgfCBudW1iZXJcbiAgdGl0bGU6IFJlYWN0LlJlYWN0Tm9kZVxuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgY2hpbGRyZW4/OiBDYXNjYWRlck9wdGlvbltdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNhc2NhZGVyUHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgea4hemZpFxuICAgKi9cbiAgYWxsb3dDbGVhcj86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOW9k+atpOmhueS4uiB0cnVlIOaXtu+8jOeCuemAieavj+e6p+iPnOWNlemAiemhueWAvOmDveS8muWPkeeUn+WPmOWMllxuICAgKi9cbiAgY2hhbmdlT25TZWxlY3Q/OiBib29sZWFuXG4gIC8qKlxuICAgKiDlrZDoioLngrlcbiAgICovXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI3vvIzms6jmhI8gQ2FzY2FkZXIg5omA5pyJ55qE5bGe5oCn5Lya6ZmE5Yqg5Yiw5YaF6YOo55qE5YaF5a655YWD57Sg5LiK77yM6ICM5LiN5piv5YyF5ZCrIG1hc2sg55qE5pyA5aSW5bGC5YWD57SgXG4gICAqL1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgLyoqXG4gICAqIOm7mOiupOWAvO+8jOWGhemDqOmpseWKqFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogQ2FzY2FkZXJWYWx1ZVR5cGUgfCBudWxsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICAvKipcbiAgICog6YCJ5oup5ZCO5bGV56S655qE5riy5p+T5Ye95pWwXG4gICAqL1xuICBkaXNwbGF5UmVuZGVyPzogKFxuICAgIHRpdGxlOiBzdHJpbmdbXSxcbiAgICBzZWxlY3RlZE9wdGlvbnM/OiBDYXNjYWRlck9wdGlvbltdXG4gICkgPT4gUmVhY3QuUmVhY3ROb2RlXG4gIC8qKlxuICAgKiDmrKHnuqfoj5zljZXnmoTlsZXlvIDmlrnlvI/vvIzlj6/pgIkgJ2NsaWNrJyDlkowgJ2hvdmVyJ1xuICAgKi9cbiAgZXhwYW5kVHJpZ2dlcj86IFwiY2xpY2tcIiB8IFwiaG92ZXJcIlxuICAvKipcbiAgICog5YC85Y+Y5YyW5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBDYXNjYWRlclZhbHVlVHlwZSwgc2VsZWN0T3B0aW9uczogQ2FzY2FkZXJPcHRpb25bXSkgPT4gdm9pZFxuICAvKipcbiAgICog5LiL5ouJ5qGGIHZpc2libGUg54q25oCB5pS55Y+Y5pe255qE5Zue6LCDXG4gICAqL1xuICBvblZpc2libGVDaGFuZ2U/OiAodmlzaWJsZTogYm9vbGVhbikgPT4gdm9pZFxuICAvKipcbiAgICog5Y+v6YCJ6aG55pWw5o2u5rqQXG4gICAqL1xuICBvcHRpb25zPzogQ2FzY2FkZXJPcHRpb25bXVxuICAvKipcbiAgICog5Y2g5L2N5paH5pysXG4gICAqL1xuICBwbGFjZWhvbGRlcj86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICog5bGe5oCn5bCG5Lya6YCP5Lyg57uZIFBvcG92ZXIg57uE5Lu2XG4gICAqL1xuICBwb3BvdmVyUHJvcHM/OiBJUG9wb3ZlclByb3BzXG4gIC8qKlxuICAgKiDlsLrlr7hcbiAgICovXG4gIHNpemU/OiBcIm1pbmlcIiB8IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCJcbiAgLyoqXG4gICAqIOWAvO+8jOWklumDqOaOp+WItlxuICAgKi9cbiAgdmFsdWU/OiBDYXNjYWRlclZhbHVlVHlwZSB8IG51bGxcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItuS4i+aLieahhiB2aXNpYmxlIOeKtuaAgVxuICAgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCBudWxsXG59XG5cbi8qKlxuICog57qn6IGU6YCJ5oup5Zmo55u06KeC5bGV56S65bey5pyJ55qE5bGC57qn5YWz57O744CCXG4gKi9cbmNvbnN0IENhc2NhZGVyOiBSZWFjdC5GQzxJQ2FzY2FkZXJQcm9wcz4gPSAoe1xuICBhbGxvd0NsZWFyLFxuICBjaGFuZ2VPblNlbGVjdCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgZGVmYXVsdFZhbHVlLFxuICBkaXNhYmxlZCxcbiAgZGlzcGxheVJlbmRlciA9ICh0aXRsZTogc3RyaW5nW10pID0+IHRpdGxlLmpvaW4oXCIvXCIpLFxuICBleHBhbmRUcmlnZ2VyLFxuICBvbkNoYW5nZSxcbiAgb25WaXNpYmxlQ2hhbmdlLFxuICBvcHRpb25zLFxuICBwbGFjZWhvbGRlcixcbiAgcG9wb3ZlclByb3BzLFxuICBzaXplLFxuICB2YWx1ZTogdmFsdWVQcm9wcyxcbiAgdmlzaWJsZTogdmlzaWJsZVByb3BzLFxuICAuLi5vdGhlclByb3BzXG59KSA9PiB7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGU8Q2FzY2FkZXJWYWx1ZVR5cGU+KFxuICAgIHZhbHVlUHJvcHMgIT09IG51bGwgPyB2YWx1ZVByb3BzIHx8IFtdIDogZGVmYXVsdFZhbHVlIHx8IFtdXG4gIClcbiAgY29uc3QgW2FjdGl2ZVZhbHVlLCBzZXRBY3RpdmVWYWx1ZV0gPSB1c2VTdGF0ZTxDYXNjYWRlclZhbHVlVHlwZT4oXG4gICAgdmFsdWVQcm9wcyAhPT0gbnVsbCA/IHZhbHVlUHJvcHMgfHwgW10gOiBkZWZhdWx0VmFsdWUgfHwgW11cbiAgKVxuICBjb25zdCBbdmlzaWJsZSwgc2V0VmlzaWJsZV0gPSB1c2VTdGF0ZShcbiAgICB2aXNpYmxlUHJvcHMgIT09IG51bGwgPyB2aXNpYmxlUHJvcHMgOiBmYWxzZVxuICApXG4gIGNvbnN0IGRlbGF5VGltZXIgPSB1c2VSZWYoMClcblxuICAvLyDnm7jlvZPkuo7nlJ/lkb3lkajmnJ8gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXG4gIGlmICh2YWx1ZVByb3BzICE9PSBudWxsICYmICFpc0VxdWFsQXJyYXlzKHZhbHVlUHJvcHMgfHwgW10sIHZhbHVlKSkge1xuICAgIHNldFZhbHVlKHZhbHVlUHJvcHMgfHwgW10pXG4gIH1cbiAgaWYgKHZpc2libGVQcm9wcyAhPT0gbnVsbCAmJiB2aXNpYmxlICE9PSB2aXNpYmxlUHJvcHMpIHtcbiAgICBzZXRWaXNpYmxlKHZpc2libGVQcm9wcylcbiAgfVxuXG4gIGNvbnN0IHNldFBvcHVwVmlzaWJsZSA9IChwb3B1cFZpc2libGU6IGJvb2xlYW4pID0+IHtcbiAgICBpZiAodmlzaWJsZVByb3BzID09PSBudWxsKSB7XG4gICAgICBzZXRWaXNpYmxlKHBvcHVwVmlzaWJsZSlcbiAgICB9XG4gICAgaWYgKHBvcHVwVmlzaWJsZSAmJiAhdmlzaWJsZSkge1xuICAgICAgc2V0QWN0aXZlVmFsdWUodmFsdWUpXG4gICAgfVxuICAgIGlmIChvblZpc2libGVDaGFuZ2UpIHtcbiAgICAgIG9uVmlzaWJsZUNoYW5nZShwb3B1cFZpc2libGUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXIgPSAoZTogUmVhY3QuTW91c2VFdmVudDxTVkdTVkdFbGVtZW50PikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBzZXRQb3B1cFZpc2libGUoZmFsc2UpXG4gICAgaWYgKCF2YWx1ZVByb3BzKSB7XG4gICAgICBzZXRWYWx1ZShbXSlcbiAgICB9XG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShbXSwgW10pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKFxuICAgIG9wdHM6IENhc2NhZGVyT3B0aW9uW10sXG4gICAgeyB2aXNpYmxlOiBwb3B1cFZpc2libGUgfTogeyB2aXNpYmxlOiBib29sZWFuIH1cbiAgKSA9PiB7XG4gICAgc2V0UG9wdXBWaXNpYmxlKHBvcHVwVmlzaWJsZSlcbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKFxuICAgICAgICBvcHRzLm1hcCgoeyB2YWx1ZTogdiB9KSA9PiB2IHx8IFwiXCIpLFxuICAgICAgICBvcHRzXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFzVmFsdWUgPSB2YWx1ZT8ubGVuZ3RoXG5cbiAgY29uc3QgYXJyYXlUcmVlRmlsdGVyID0gPFQgZXh0ZW5kcyB1bmtub3duPihcbiAgICBkYXRhOiBUW10gPSBbXSxcbiAgICBmaWx0ZXJGbjogKGl0ZW06IFQsIGxldmVsOiBudW1iZXIpID0+IGJvb2xlYW5cbiAgKSA9PiB7XG4gICAgbGV0IGNoaWxkcyA9IGRhdGFcbiAgICBjb25zdCByZXN1bHQ6IFRbXSA9IFtdXG4gICAgbGV0IGxldmVsID0gMFxuICAgIGRvIHtcbiAgICAgIGNvbnN0IGZvdW5kSXRlbTogVCA9IGNoaWxkcy5maWx0ZXIoKGl0ZW0pID0+IGZpbHRlckZuKGl0ZW0sIGxldmVsKSlbMF1cbiAgICAgIGlmICghZm91bmRJdGVtKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChmb3VuZEl0ZW0pXG4gICAgICBjaGlsZHMgPSAoZm91bmRJdGVtIGFzIGFueSkuY2hpbGRyZW4gfHwgW11cbiAgICAgIGxldmVsICs9IDFcbiAgICB9IHdoaWxlIChjaGlsZHMubGVuZ3RoID4gMClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBjb25zdCBnZXRUaXRsZSA9ICgpID0+IHtcbiAgICBjb25zdCB1bndyYXBwZWRWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWVbMF0pID8gdmFsdWVbMF0gOiB2YWx1ZVxuICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IGFycmF5VHJlZUZpbHRlcihcbiAgICAgIG9wdGlvbnMsXG4gICAgICAobywgbGV2ZWw6IG51bWJlcikgPT4gby52YWx1ZSA9PT0gdW53cmFwcGVkVmFsdWVbbGV2ZWxdXG4gICAgKVxuICAgIGNvbnN0IHRpdGxlID0gc2VsZWN0ZWRPcHRpb25zLmxlbmd0aFxuICAgICAgPyBzZWxlY3RlZE9wdGlvbnMubWFwKChvKSA9PiBvLnRpdGxlKVxuICAgICAgOiB2YWx1ZVxuICAgIHJldHVybiBkaXNwbGF5UmVuZGVyKFxuICAgICAgdGl0bGUubWFwKChvKSA9PiAobyB8fCBcIlwiKS50b1N0cmluZygpKSxcbiAgICAgIHNlbGVjdGVkT3B0aW9uc1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGlzQWN0aXZlT3B0aW9uID0gKG9wdGlvbjogQ2FzY2FkZXJPcHRpb24sIG1lbnVJbmRleDogbnVtYmVyKSA9PlxuICAgIGFjdGl2ZVZhbHVlW21lbnVJbmRleF0gPT09IG9wdGlvbi52YWx1ZVxuXG4gIGNvbnN0IGdldEFjdGl2ZU9wdGlvbnMgPSAoXG4gICAgYWN0aXZlVmFsdWVQYXJhbT86IENhc2NhZGVyVmFsdWVUeXBlXG4gICk6IENhc2NhZGVyT3B0aW9uW10gPT5cbiAgICBhcnJheVRyZWVGaWx0ZXIoXG4gICAgICBvcHRpb25zLFxuICAgICAgKG8sIGxldmVsKSA9PiBvLnZhbHVlID09PSAoYWN0aXZlVmFsdWVQYXJhbSB8fCBhY3RpdmVWYWx1ZSlbbGV2ZWxdXG4gICAgKVxuXG4gIGNvbnN0IGdldFNob3dPcHRpb25zID0gKCk6IChDYXNjYWRlck9wdGlvbltdIHwgdW5kZWZpbmVkKVtdID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBnZXRBY3RpdmVPcHRpb25zKClcbiAgICAgIC5tYXAoKHsgY2hpbGRyZW46IGNoaWxkcyB9KSA9PiBjaGlsZHMpXG4gICAgICAuZmlsdGVyKChhY3RpdmVPcHRpb24pID0+IGFjdGl2ZU9wdGlvbj8ubGVuZ3RoKVxuICAgIHJlc3VsdC51bnNoaWZ0KG9wdGlvbnMpXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBjb25zdCBkZWxheVNlbGVjdCA9IChmdW5jPzogKCkgPT4gdm9pZCkgPT4ge1xuICAgIGlmIChkZWxheVRpbWVyLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dChkZWxheVRpbWVyLmN1cnJlbnQpXG4gICAgICBkZWxheVRpbWVyLmN1cnJlbnQgPSAwXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBkZWxheVRpbWVyLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGZ1bmMoKVxuICAgICAgICBkZWxheVRpbWVyLmN1cnJlbnQgPSAwXG4gICAgICB9LCAxNTApXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3B0c3MgPSBnZXRTaG93T3B0aW9ucygpXG5cbiAgY29uc3QgbWVudXMgPSAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tbWVudXNgfT5cbiAgICAgIDxBbmltYXRlXG4gICAgICAgIHRyYW5zaXRpb25BcHBlYXJcbiAgICAgICAgY29tcG9uZW50PVwiZGl2XCJcbiAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIgfX1cbiAgICAgICAgYW5pbWF0aW9uPXt7XG4gICAgICAgICAgYXBwZWFyKG5vZGU6IEhUTUxFbGVtZW50LCBkb25lOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoYCR7cHJlZml4fS1lbnRlcmApXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGAke3ByZWZpeH0tZW50ZXItYWN0aXZlYClcbiAgICAgICAgICAgIH0sIDUwKVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIwMCkpXG4gICAgICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoYCR7cHJlZml4fS1lbnRlci1hY3RpdmVgKVxuICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoYCR7cHJlZml4fS1lbnRlcmApXG4gICAgICAgICAgICAgIHJldHVybiBkb25lKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gZG9uZSgpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnRlcihub2RlOiBIVE1MRWxlbWVudCwgZG9uZTogKCkgPT4gdm9pZCkge1xuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGAke3ByZWZpeH0tZW50ZXJgKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChgJHtwcmVmaXh9LWVudGVyLWFjdGl2ZWApXG4gICAgICAgICAgICB9LCA1MClcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMDApKVxuICAgICAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGAke3ByZWZpeH0tZW50ZXItYWN0aXZlYClcbiAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKGAke3ByZWZpeH0tZW50ZXJgKVxuICAgICAgICAgICAgICByZXR1cm4gZG9uZSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIGRvbmUoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGVhdmUobm9kZTogSFRNTEVsZW1lbnQsIGRvbmU6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChgJHtwcmVmaXh9LWxlYXZlYClcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoYCR7cHJlZml4fS1sZWF2ZS1hY3RpdmVgKVxuICAgICAgICAgICAgfSwgNTApXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwKSlcbiAgICAgICAgICAgIHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkb25lKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge29wdHNzLm1hcCgob3B0cywgbWVudUluZGV4KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGAke3ByZWZpeH0tbWVudWAsIHtcbiAgICAgICAgICAgICAgW2Ake3ByZWZpeH0tbWVudS0ke3NpemV9YF06IHNpemUsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIGtleT17bWVudUluZGV4fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsob3B0cyB8fCBbXSkubWFwKChvLCBqKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgdmFsdWU6IHYsIHRpdGxlLCBjaGlsZHJlbjogYywgZGlzYWJsZWQ6IGQgfSA9IG9cbiAgICAgICAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGFjdGl2ZVZhbHVlRHVwbGljYXRlZCA9IFsuLi5hY3RpdmVWYWx1ZV1cbiAgICAgICAgICAgICAgICBhY3RpdmVWYWx1ZUR1cGxpY2F0ZWQgPSBhY3RpdmVWYWx1ZUR1cGxpY2F0ZWQuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgbWVudUluZGV4ICsgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBhY3RpdmVWYWx1ZUR1cGxpY2F0ZWRbbWVudUluZGV4XSA9IHYgfHwgXCJcIlxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbnMgPSBnZXRBY3RpdmVPcHRpb25zKGFjdGl2ZVZhbHVlRHVwbGljYXRlZClcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVWYWx1ZShhY3RpdmVWYWx1ZUR1cGxpY2F0ZWQpXG4gICAgICAgICAgICAgICAgaWYgKCFjPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGhhbmRsZUNoYW5nZShhY3RpdmVPcHRpb25zLCB7IHZpc2libGU6IGZhbHNlIH0pXG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWVQcm9wcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShhY3RpdmVWYWx1ZUR1cGxpY2F0ZWQpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VPblNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgaGFuZGxlQ2hhbmdlKGFjdGl2ZU9wdGlvbnMsIHsgdmlzaWJsZTogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlUHJvcHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoYWN0aXZlVmFsdWVEdXBsaWNhdGVkKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgIGtleT17diB8fCBqfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGAke3ByZWZpeH0tbWVudS1pdGVtYCwge1xuICAgICAgICAgICAgICAgICAgICBbYCR7cHJlZml4fS1tZW51LWl0ZW0tYWN0aXZlYF06IGlzQWN0aXZlT3B0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIG8sXG4gICAgICAgICAgICAgICAgICAgICAgbWVudUluZGV4XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXt0aXRsZT8udG9TdHJpbmcoKX1cbiAgICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoZSkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0fVxuICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmRUcmlnZ2VyID09PSBcImhvdmVyXCIgJiYgYz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVsYXlTZWxlY3QoaGFuZGxlU2VsZWN0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmRUcmlnZ2VyID09PSBcImhvdmVyXCIgJiYgYz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVsYXlTZWxlY3QoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LW1lbnUtaXRlbS1jb250ZW50YH0+e3RpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgeyEhYz8ubGVuZ3RoICYmIChcbiAgICAgICAgICAgICAgICAgICAgPEljb25cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwidHJpYW5nbGUtcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1tZW51LWl0ZW0taWNvbmB9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L0FuaW1hdGU+XG4gICAgPC9kaXY+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxQb3BvdmVyXG4gICAgICBhcnJvd2VkPXtmYWxzZX1cbiAgICAgIHBvcHVwQ2xhc3NOYW1lPXtgJHtwcmVmaXh9LXBvcHVwYH1cbiAgICAgIHZpc2libGU9e2Rpc2FibGVkID8gZmFsc2UgOiB2aXNpYmxlfVxuICAgICAgb25WaXNpYmxlQ2hhbmdlPXtzZXRQb3B1cFZpc2libGV9XG4gICAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgcG9wdXA9e21lbnVzfVxuICAgICAgey4uLnBvcG92ZXJQcm9wc31cbiAgICA+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGAke3ByZWZpeH0tYnV0dG9uYCwgY2xhc3NOYW1lLCB7XG4gICAgICAgICAgW2Ake3ByZWZpeH0tYnV0dG9uLXZhbHVlZGBdOiBoYXNWYWx1ZSxcbiAgICAgICAgICBbYCR7cHJlZml4fS1idXR0b24tY2xlYXJhYmxlYF06IGFsbG93Q2xlYXIsXG4gICAgICAgIH0pfVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgID5cbiAgICAgICAge2hhc1ZhbHVlID8gKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7cHJlZml4fS1sYWJlbGB9PntnZXRUaXRsZSgpfTwvc3Bhbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tcGxhY2Vob2xkZXJgfT57cGxhY2Vob2xkZXJ9PC9zcGFuPlxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1pY29uc2B9PlxuICAgICAgICAgIDxJY29uXG4gICAgICAgICAgICBpY29uPVwidHJpYW5nbGUtZG93blwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake3ByZWZpeH0tc3VmZml4YH1cbiAgICAgICAgICAgIGNvbG9yPXtcbiAgICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICA/IFwidmFyKC0tdHJhbnNwYXJlbnQtZ3JheS02MDApXCJcbiAgICAgICAgICAgICAgICA6IFwidmFyKC0tdHJhbnNwYXJlbnQtZ3JheS03MDApXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHthbGxvd0NsZWFyICYmICFkaXNhYmxlZCAmJiAoXG4gICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICBpY29uPVwiY2FuY2VsLWNpcmNsZVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1yZW1vdmVgfVxuICAgICAgICAgICAgICBjb2xvcj1cInZhcigtLXRyYW5zcGFyZW50LWdyYXktNzAwKVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsZWFyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvUG9wb3Zlcj5cbiAgKVxufVxuXG5DYXNjYWRlci5kaXNwbGF5TmFtZSA9IFwiQ2FzY2FkZXJcIlxuXG5DYXNjYWRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiDmmK/lkKbmlK/mjIHmuIXpmaRcbiAgICovXG4gIGFsbG93Q2xlYXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5b2T5q2k6aG55Li6IHRydWUg5pe277yM54K56YCJ5q+P57qn6I+c5Y2V6YCJ6aG55YC86YO95Lya5Y+R55Sf5Y+Y5YyWXG4gICAqL1xuICBjaGFuZ2VPblNlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDlrZDoioLngrlcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQje+8jOazqOaEjyBEaWFsb2cg5omA5pyJ55qE5bGe5oCn5Lya6ZmE5Yqg5Yiw5YaF6YOo55qE5YaF5a655YWD57Sg5LiK77yM6ICM5LiN5piv5YyF5ZCrIG1hc2sg55qE5pyA5aSW5bGC5YWD57SgXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDpu5jorqTlgLzvvIzlhoXpg6jpqbHliqhcbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOaYr+WQpuemgeeUqFxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog6YCJ5oup5ZCO5bGV56S655qE5riy5p+T5Ye95pWwXG4gICAqL1xuICBkaXNwbGF5UmVuZGVyOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5qyh57qn6I+c5Y2V55qE5bGV5byA5pa55byP77yM5Y+v6YCJICdjbGljaycg5ZKMICdob3ZlcidcbiAgICovXG4gIGV4cGFuZFRyaWdnZXI6IFByb3BUeXBlcy5vbmVPZihbXCJjbGlja1wiLCBcImhvdmVyXCJdKSxcbiAgLyoqXG4gICAqIOWPr+mAiemhueaVsOaNrua6kFxuICAgKi9cbiAgb3B0aW9uczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOWAvOWPmOWMluaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOS4i+aLieahhiB2aXNpYmxlIOeKtuaAgeaUueWPmOaXtueahOWbnuiwg1xuICAgKi9cbiAgb25WaXNpYmxlQ2hhbmdlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5Y2g5L2N5paH5pysXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOWxnuaAp+WwhuS8mumAj+S8oOe7mSBQb3BvdmVyIOe7hOS7tlxuICAgKi9cbiAgcG9wb3ZlclByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5bC65a+4XG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibWluaVwiLCBcInNtYWxsXCIsIFwibWVkaXVtXCIsIFwibGFyZ2VcIl0pLFxuICAvKipcbiAgICog5YC877yM5aSW6YOo5o6n5Yi2XG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItuS4i+aLieahhiB2aXNpYmxlIOeKtuaAgVxuICAgKi9cbiAgdmlzaWJsZTogUHJvcFR5cGVzLmFueSxcbn1cblxuQ2FzY2FkZXIuZGVmYXVsdFByb3BzID0ge1xuICBhbGxvd0NsZWFyOiB0cnVlLFxuICBjaGFuZ2VPblNlbGVjdDogZmFsc2UsXG4gIGNoaWxkcmVuOiBudWxsLFxuICBjbGFzc05hbWU6IHVuZGVmaW5lZCxcbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGRpc3BsYXlSZW5kZXI6IHVuZGVmaW5lZCxcbiAgZXhwYW5kVHJpZ2dlcjogXCJjbGlja1wiLFxuICBvbkNoYW5nZTogdW5kZWZpbmVkLFxuICBvblZpc2libGVDaGFuZ2U6IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogW10sXG4gIHBsYWNlaG9sZGVyOiBcIuivt+mAieaLqVwiLFxuICBwb3BvdmVyUHJvcHM6IHt9LFxuICBzaXplOiBcInNtYWxsXCIsXG4gIHZhbHVlOiBudWxsLFxuICB2aXNpYmxlOiBudWxsLFxufVxuXG5leHBvcnQgZGVmYXVsdCBDYXNjYWRlclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sS0FBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVEsY0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0FBLE9BQUE7QUFBZ0IsSUFBQVMsU0FBQTtBQUFBLFNBQUFQLHVCQUFBUSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSx5QkFBQUYsQ0FBQSw2QkFBQUcsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRCx3QkFBQSxZQUFBQSx5QkFBQUYsQ0FBQSxXQUFBQSxDQUFBLEdBQUFLLENBQUEsR0FBQUQsQ0FBQSxLQUFBSixDQUFBO0FBQUEsU0FBQVgsd0JBQUFXLENBQUEsRUFBQUksQ0FBQSxTQUFBQSxDQUFBLElBQUFKLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLFNBQUFELENBQUEsZUFBQUEsQ0FBQSxnQkFBQU0sT0FBQSxDQUFBTixDQUFBLDBCQUFB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