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>
200 lines (177 loc) • 22.6 kB
JavaScript
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
import * as React from "react";
import TestRenderer from "react-test-renderer";
import { act } from "react-dom/test-utils";
import { mount } from "enzyme";
import TimePicker from "..";
var TimePickerTest = function (_React$Component) {
_inherits(TimePickerTest, _React$Component);
var _super = _createSuper(TimePickerTest);
function TimePickerTest() {
var _this;
_classCallCheck(this, TimePickerTest);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
_this.state = {
value: "09:00"
};
return _this;
}
_createClass(TimePickerTest, [{
key: "render",
value: function render() {
var _this2 = this;
var value = this.state.value;
return React.createElement("div", null, React.createElement(TimePicker, {
closeOnSelect: true,
value: value,
onChange: function onChange(val) {
return _this2.setState({
value: val
});
},
minTime: "08:40",
maxTime: "09:20",
ref: function ref(node) {
if (node) {
_this2.picker = node;
}
return null;
}
}));
}
}]);
return TimePickerTest;
}(React.Component);
function timeout(ms) {
return function (done) {
setTimeout(done, ms);
};
}
describe("TimePicker", function () {
beforeAll(function () {
jest.useFakeTimers();
});
afterAll(function () {
jest.useRealTimers();
});
it("是否正确渲染", function () {
var wrapper = TestRenderer.create(React.createElement(TimePicker, null));
expect(wrapper).toMatchSnapshot();
});
it("各种情况快照核对", function () {
var wrapper0 = TestRenderer.create(React.createElement(TimePicker, {
size: "mini",
theme: "light",
onlyHour: true,
disabled: true
}));
expect(wrapper0).toMatchSnapshot();
});
it("输入事件", function () {
var wrapper = mount(React.createElement(TimePicker, null));
var input = wrapper.find("input");
input.simulate("focus");
expect(wrapper.find("Popover").props().visible).toEqual(true);
input.simulate("change", {
target: {
value: " "
}
});
input.simulate("change", {
target: {
value: "16:07"
}
});
expect(wrapper.find("Input").props().value).toEqual("16:07");
input.simulate("keydown", {
keyCode: 13
});
expect(wrapper.find("Popover").props().visible).toEqual(false);
});
it("点击事件", function () {
var wrapper = mount(React.createElement(TimePickerTest, null));
expect(wrapper.find("Popover").props().visible).toEqual(false);
wrapper.find("input").simulate("focus");
expect(wrapper.find("Popover").props().visible).toEqual(true);
act(function () {
wrapper.find(".adui-time-item").at(0).simulate("click");
jest.advanceTimersByTime(50);
wrapper.update();
expect(wrapper.find("Input").props().value).toEqual("08:40");
wrapper.find(".adui-time-item").at(42).simulate("click");
wrapper.update();
jest.advanceTimersByTime(50);
expect(wrapper.find("Input").props().value).toEqual("08:40");
wrapper.find("input").simulate("change", {
target: {
value: "07:40"
}
});
wrapper.find("input").simulate("change", {
target: {
value: "08:4"
}
});
wrapper.update();
expect(wrapper.find("Input").props().value).toEqual("08:40");
});
});
it("内部驱动", function () {
var wrapper = mount(React.createElement(TimePicker, {
defaultValue: "09:20"
}));
var input = wrapper.find("input");
input.simulate("focus");
expect(wrapper.find("Popover").props().visible).toEqual(true);
wrapper.find(".adui-time-item").at(0).simulate("click");
expect(wrapper.find("Input").props().value).toEqual("00:20");
});
it("外部控制", function () {
var wrapper = mount(React.createElement(TimePicker, {
value: "09:00",
onlyHour: true
}));
var input = wrapper.find("input");
input.simulate("focus");
expect(wrapper.find("Popover").props().visible).toEqual(true);
wrapper.find(".adui-time-item").at(0).simulate("click");
expect(wrapper.find("Input").props().value).toEqual("09:00");
});
it("测试禁用", function () {
var wrapper = mount(React.createElement(TimePicker, {
disabled: true
}));
var input = wrapper.find("input");
input.simulate("click");
expect(wrapper.find("Popover").props().visible).toEqual(false);
});
it("测试最大时间和最小时间", function () {
var wrapper = mount(React.createElement(TimePicker, {
minTime: "09:00",
maxTime: "09:20",
defaultValue: "09:10"
}));
var input = wrapper.find("input");
input.simulate("change", {
target: {
value: "09:30"
}
});
input.simulate("focus");
expect(wrapper.find("Popover").props().visible).toEqual(true);
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlRlc3RSZW5kZXJlciIsImFjdCIsIm1vdW50IiwiVGltZVBpY2tlciIsIlRpbWVQaWNrZXJUZXN0Iiwic3RhdGUiLCJ2YWx1ZSIsInZhbCIsInNldFN0YXRlIiwibm9kZSIsInBpY2tlciIsIkNvbXBvbmVudCIsInRpbWVvdXQiLCJtcyIsImRvbmUiLCJzZXRUaW1lb3V0IiwiZGVzY3JpYmUiLCJiZWZvcmVBbGwiLCJqZXN0IiwidXNlRmFrZVRpbWVycyIsImFmdGVyQWxsIiwidXNlUmVhbFRpbWVycyIsIml0Iiwid3JhcHBlciIsImNyZWF0ZSIsImV4cGVjdCIsInRvTWF0Y2hTbmFwc2hvdCIsIndyYXBwZXIwIiwiaW5wdXQiLCJmaW5kIiwic2ltdWxhdGUiLCJwcm9wcyIsInZpc2libGUiLCJ0b0VxdWFsIiwidGFyZ2V0Iiwia2V5Q29kZSIsImF0IiwiYWR2YW5jZVRpbWVyc0J5VGltZSIsInVwZGF0ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvdGltZS1waWNrZXIvX190ZXN0c19fL2luZGV4LnRlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFRlc3RSZW5kZXJlciBmcm9tIFwicmVhY3QtdGVzdC1yZW5kZXJlclwiXG5pbXBvcnQgeyBhY3QgfSBmcm9tIFwicmVhY3QtZG9tL3Rlc3QtdXRpbHNcIlxuaW1wb3J0IHsgbW91bnQgfSBmcm9tIFwiZW56eW1lXCJcbmltcG9ydCBhc3luYyBmcm9tIFwiYXN5bmNcIlxuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSBcIi4uXCJcblxuY2xhc3MgVGltZVBpY2tlclRlc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0ZSA9IHtcbiAgICB2YWx1ZTogXCIwOTowMFwiLFxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMuc3RhdGVcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdj5cbiAgICAgICAgPFRpbWVQaWNrZXJcbiAgICAgICAgICBjbG9zZU9uU2VsZWN0XG4gICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgIG9uQ2hhbmdlPXsodmFsKSA9PiB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHZhbCB9KX1cbiAgICAgICAgICBtaW5UaW1lPVwiMDg6NDBcIlxuICAgICAgICAgIG1heFRpbWU9XCIwOToyMFwiXG4gICAgICAgICAgcmVmPXsobm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5waWNrZXIgPSBub2RlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbn1cblxuZnVuY3Rpb24gdGltZW91dChtczogbnVtYmVyKSB7XG4gIHJldHVybiAoZG9uZTogKCkgPT4gdm9pZCkgPT4ge1xuICAgIHNldFRpbWVvdXQoZG9uZSwgbXMpXG4gIH1cbn1cblxuZGVzY3JpYmUoXCJUaW1lUGlja2VyXCIsICgpID0+IHtcbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBqZXN0LnVzZUZha2VUaW1lcnMoKVxuICB9KVxuXG4gIGFmdGVyQWxsKCgpID0+IHtcbiAgICBqZXN0LnVzZVJlYWxUaW1lcnMoKVxuICB9KVxuXG4gIGl0KFwi5piv5ZCm5q2j56Gu5riy5p+TXCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gVGVzdFJlbmRlcmVyLmNyZWF0ZSg8VGltZVBpY2tlciAvPilcbiAgICBleHBlY3Qod3JhcHBlcikudG9NYXRjaFNuYXBzaG90KClcbiAgfSlcblxuICBpdChcIuWQhOenjeaDheWGteW/q+eFp+aguOWvuVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlcjAgPSBUZXN0UmVuZGVyZXIuY3JlYXRlKFxuICAgICAgPFRpbWVQaWNrZXIgc2l6ZT1cIm1pbmlcIiB0aGVtZT1cImxpZ2h0XCIgb25seUhvdXIgZGlzYWJsZWQgLz5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIwKS50b01hdGNoU25hcHNob3QoKVxuICB9KVxuXG4gIGl0KFwi6L6T5YWl5LqL5Lu2XCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gbW91bnQoPFRpbWVQaWNrZXIgLz4pXG4gICAgY29uc3QgaW5wdXQgPSB3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKVxuICAgIGlucHV0LnNpbXVsYXRlKFwiZm9jdXNcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiUG9wb3ZlclwiKS5wcm9wcygpLnZpc2libGUpLnRvRXF1YWwodHJ1ZSlcbiAgICBpbnB1dC5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIgXCIgfSB9KVxuICAgIGlucHV0LnNpbXVsYXRlKFwiY2hhbmdlXCIsIHsgdGFyZ2V0OiB7IHZhbHVlOiBcIjE2OjA3XCIgfSB9KVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJJbnB1dFwiKS5wcm9wcygpLnZhbHVlKS50b0VxdWFsKFwiMTY6MDdcIilcbiAgICBpbnB1dC5zaW11bGF0ZShcImtleWRvd25cIiwgeyBrZXlDb2RlOiAxMyB9KVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJQb3BvdmVyXCIpLnByb3BzKCkudmlzaWJsZSkudG9FcXVhbChmYWxzZSlcbiAgfSlcblxuICBpdChcIueCueWHu+S6i+S7tlwiLCAoKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KDxUaW1lUGlja2VyVGVzdCAvPilcblxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJQb3BvdmVyXCIpLnByb3BzKCkudmlzaWJsZSkudG9FcXVhbChmYWxzZSlcblxuICAgIHdyYXBwZXIuZmluZChcImlucHV0XCIpLnNpbXVsYXRlKFwiZm9jdXNcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiUG9wb3ZlclwiKS5wcm9wcygpLnZpc2libGUpLnRvRXF1YWwodHJ1ZSlcblxuICAgIGFjdCgoKSA9PiB7XG4gICAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS10aW1lLWl0ZW1cIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgICAgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lKDUwKVxuICAgICAgd3JhcHBlci51cGRhdGUoKVxuICAgICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIklucHV0XCIpLnByb3BzKCkudmFsdWUpLnRvRXF1YWwoXCIwODo0MFwiKVxuXG4gICAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS10aW1lLWl0ZW1cIikuYXQoNDIpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIHdyYXBwZXIudXBkYXRlKClcbiAgICAgIGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZSg1MClcbiAgICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJJbnB1dFwiKS5wcm9wcygpLnZhbHVlKS50b0VxdWFsKFwiMDg6NDBcIilcblxuICAgICAgd3JhcHBlci5maW5kKFwiaW5wdXRcIikuc2ltdWxhdGUoXCJjaGFuZ2VcIiwgeyB0YXJnZXQ6IHsgdmFsdWU6IFwiMDc6NDBcIiB9IH0pXG4gICAgICB3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKS5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIwODo0XCIgfSB9KVxuICAgICAgd3JhcHBlci51cGRhdGUoKVxuICAgICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIklucHV0XCIpLnByb3BzKCkudmFsdWUpLnRvRXF1YWwoXCIwODo0MFwiKVxuICAgIH0pXG5cbiAgICAvLyBhY3QoKCkgPT4ge1xuICAgIC8vICAgd3JhcHBlclxuICAgIC8vICAgICAuZmluZChcIi5hZHVpLXRpbWUtaXRlbVwiKVxuICAgIC8vICAgICAuYXQoMSlcbiAgICAvLyAgICAgLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAvLyAgIHdyYXBwZXIudXBkYXRlKClcbiAgICAvLyAgIGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZSgzNTApXG4gICAgLy8gICBleHBlY3Qod3JhcHBlci5maW5kKFwiSW5wdXRcIikucHJvcHMoKS52YWx1ZSkudG9FcXVhbChcIjA5OjIwXCIpXG4gICAgLy8gICBkb25lKClcbiAgICAvLyB9KVxuXG4gICAgLy8gYWN0KCgpID0+IHtcbiAgICAvLyAgIHdyYXBwZXJcbiAgICAvLyAgICAgLmZpbmQoXCIuYWR1aS10aW1lLWl0ZW1cIilcbiAgICAvLyAgICAgLmF0KDEpXG4gICAgLy8gICAgIC5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgLy8gICB3cmFwcGVyLnVwZGF0ZSgpXG4gICAgLy8gICBleHBlY3Qod3JhcHBlci5maW5kKFwiSW5wdXRcIikucHJvcHMoKS52YWx1ZSkudG9FcXVhbChcIjA5OjIwXCIpXG4gICAgLy8gfSlcblxuICAgIC8vIGFjdCgoKSA9PiB7XG4gICAgLy8gICB3cmFwcGVyXG4gICAgLy8gICAgIC5maW5kKFwiLmFkdWktdGltZS1pdGVtXCIpXG4gICAgLy8gICAgIC5hdCgwKVxuICAgIC8vICAgICAuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIC8vICAgd3JhcHBlci51cGRhdGUoKVxuICAgIC8vICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIklucHV0XCIpLnByb3BzKCkudmFsdWUpLnRvRXF1YWwoXCIwODo0MFwiKVxuICAgIC8vIH0pXG4gIH0pXG5cbiAgaXQoXCLlhoXpg6jpqbHliqhcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudCg8VGltZVBpY2tlciBkZWZhdWx0VmFsdWU9XCIwOToyMFwiIC8+KVxuICAgIGNvbnN0IGlucHV0ID0gd3JhcHBlci5maW5kKFwiaW5wdXRcIilcbiAgICBpbnB1dC5zaW11bGF0ZShcImZvY3VzXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlBvcG92ZXJcIikucHJvcHMoKS52aXNpYmxlKS50b0VxdWFsKHRydWUpXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktdGltZS1pdGVtXCIpLmF0KDApLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiSW5wdXRcIikucHJvcHMoKS52YWx1ZSkudG9FcXVhbChcIjAwOjIwXCIpXG4gIH0pXG5cbiAgaXQoXCLlpJbpg6jmjqfliLZcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudCg8VGltZVBpY2tlciB2YWx1ZT1cIjA5OjAwXCIgb25seUhvdXIgLz4pXG4gICAgY29uc3QgaW5wdXQgPSB3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKVxuICAgIGlucHV0LnNpbXVsYXRlKFwiZm9jdXNcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiUG9wb3ZlclwiKS5wcm9wcygpLnZpc2libGUpLnRvRXF1YWwodHJ1ZSlcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS10aW1lLWl0ZW1cIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJJbnB1dFwiKS5wcm9wcygpLnZhbHVlKS50b0VxdWFsKFwiMDk6MDBcIilcbiAgfSlcblxuICBpdChcIua1i+ivleemgeeUqFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KDxUaW1lUGlja2VyIGRpc2FibGVkIC8+KVxuICAgIGNvbnN0IGlucHV0ID0gd3JhcHBlci5maW5kKFwiaW5wdXRcIilcbiAgICBpbnB1dC5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlBvcG92ZXJcIikucHJvcHMoKS52aXNpYmxlKS50b0VxdWFsKGZhbHNlKVxuICB9KVxuXG4gIGl0KFwi5rWL6K+V5pyA5aSn5pe26Ze05ZKM5pyA5bCP5pe26Ze0XCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gbW91bnQoXG4gICAgICA8VGltZVBpY2tlciBtaW5UaW1lPVwiMDk6MDBcIiBtYXhUaW1lPVwiMDk6MjBcIiBkZWZhdWx0VmFsdWU9XCIwOToxMFwiIC8+XG4gICAgKVxuICAgIGNvbnN0IGlucHV0ID0gd3JhcHBlci5maW5kKFwiaW5wdXRcIilcbiAgICBpbnB1dC5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIwOTozMFwiIH0gfSlcbiAgICBpbnB1dC5zaW11bGF0ZShcImZvY3VzXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlBvcG92ZXJcIikucHJvcHMoKS52aXNpYmxlKS50b0VxdWFsKHRydWUpXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsT0FBT0MsWUFBUCxNQUF5QixxQkFBekI7QUFDQSxTQUFTQyxHQUFULFFBQW9CLHNCQUFwQjtBQUNBLFNBQVNDLEtBQVQsUUFBc0IsUUFBdEI7QUFFQSxPQUFPQyxVQUFQLE1BQXVCLElBQXZCOztJQUVNQyxjOzs7Ozs7Ozs7Ozs7Ozs7VUFDSkMsSyxHQUFRO01BQ05DLEtBQUssRUFBRTtJQURELEM7Ozs7OztXQUlSLGtCQUFTO01BQUE7O01BQ1AsSUFBUUEsS0FBUixHQUFrQixLQUFLRCxLQUF2QixDQUFRQyxLQUFSO01BQ0EsT0FDRSxpQ0FDRSxvQkFBQyxVQUFEO1FBQ0UsYUFBYSxNQURmO1FBRUUsS0FBSyxFQUFFQSxLQUZUO1FBR0UsUUFBUSxFQUFFLGtCQUFDQyxHQUFEO1VBQUEsT0FBUyxNQUFJLENBQUNDLFFBQUwsQ0FBYztZQUFFRixLQUFLLEVBQUVDO1VBQVQsQ0FBZCxDQUFUO1FBQUEsQ0FIWjtRQUlFLE9BQU8sRUFBQyxPQUpWO1FBS0UsT0FBTyxFQUFDLE9BTFY7UUFNRSxHQUFHLEVBQUUsYUFBQ0UsSUFBRCxFQUFVO1VBQ2IsSUFBSUEsSUFBSixFQUFVO1lBQ1IsTUFBSSxDQUFDQyxNQUFMLEdBQWNELElBQWQ7VUFDRDs7VUFDRCxPQUFPLElBQVA7UUFDRDtNQVhILEVBREYsQ0FERjtJQWlCRDs7OztFQXhCMEJWLEtBQUssQ0FBQ1ksUzs7QUEyQm5DLFNBQVNDLE9BQVQsQ0FBaUJDLEVB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