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>
221 lines • 27.4 kB
JavaScript
import * as React from "react";
import { mount } from "enzyme";
import TestRenderer from "react-test-renderer";
import sinon from "sinon";
import Table from "..";
window.ResizeObserver = window.ResizeObserver || jest.fn().mockImplementation(function () {
return {
disconnect: jest.fn(),
observe: jest.fn(),
unobserve: jest.fn()
};
});
var dataSource = [{
one: "阿萨德",
two: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
four: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
three: "阿萨德阿萨德阿萨德阿萨德阿萨德"
}, {
one: "阿萨德",
two: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
four: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
three: "阿萨德阿萨德阿萨德阿萨德阿萨德"
}, {
one: "阿萨德",
two: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
four: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
three: "阿萨德阿萨德阿萨德阿萨德阿萨德"
}, {
one: "阿萨德",
two: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
four: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
three: "阿萨德阿萨德阿萨德阿萨德阿萨德"
}, {
one: "阿萨德",
two: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
four: "阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德阿萨德",
three: "阿萨德阿萨德阿萨德阿萨德阿萨德"
}];
describe("Table", function () {
beforeAll(function () {
Element.prototype.getBoundingClientRect = jest.fn(function () {
return {
width: 500,
height: 600,
top: 0,
left: 0,
bottom: 0,
right: 0,
x: 0,
y: 0,
toJSON: function toJSON() {}
};
});
});
it("headerAffixed 检测", function () {
var wrapper = mount(React.createElement(Table, {
dataSource: dataSource,
headerAffixed: true
}, React.createElement(Table.Column, {
dataIndex: "one",
title: "\u7B2C\u4E00\u9879",
popover: "\u8868\u5934\u63D0\u793A\u5185\u5BB9",
width: "100px",
fixed: "left"
}), React.createElement(Table.Column, {
fixed: "right",
dataIndex: "two",
title: "\u7B2Cer\u9879",
width: 300
}), React.createElement(Table.Column, {
dataIndex: "s",
title: "\u7B2Csi\u9879",
width: "10%",
align: "center",
render: function render() {
return "这些撒大声地";
}
}), React.createElement(Table.Column, {
dataIndex: "three",
title: "\u7B2Csan\u9879"
}), React.createElement(Table.Column, {
dataIndex: "four",
title: "\u7B2Csi\u9879",
width: 300,
align: "right"
})));
global.innerWidth = 500;
global.dispatchEvent(new Event("resize"));
global.dispatchEvent(new Event("scroll"));
wrapper.instance().handleMainTableScroll();
wrapper.instance().componentWillUnmount();
});
it("height 与 headerAffixed 不能同时使用 验证", function () {
var stub = sinon.stub(console, "error");
mount(React.createElement(Table, {
dataSource: dataSource,
height: 500,
headerAffixed: true
}, React.createElement(Table.Column, {
dataIndex: "one",
title: "\u534A\u89D2\u62EC\u53F7\u5916(\u534A\u89D2\u62EC\u53F7\u5185\u6D4B\u8BD5)",
popover: "\u8868\u5934\u63D0\u793A\u5185\u5BB9",
width: 100,
fixed: "left"
})));
expect(stub.calledOnce).toBe(true);
stub.restore();
});
it("height 检测", function () {
var wrapper = mount(React.createElement(Table, {
dataSource: dataSource,
height: 200
}, React.createElement(Table.Column, {
dataIndex: "one",
title: "\u7B2C\u4E00\u9879",
popover: "\u8868\u5934\u63D0\u793A\u5185\u5BB9",
width: 100,
fixed: "left"
}), React.createElement(Table.Column, {
fixed: "right",
dataIndex: "two",
title: "\u7B2Cer\u9879",
width: 300
}), React.createElement(Table.Column, {
dataIndex: "s",
title: "\u7B2Csi\u9879",
width: 300,
align: "center",
render: function render() {
return "这些撒大声地";
}
}), React.createElement(Table.Column, {
dataIndex: "three",
title: "\u7B2Csan\u9879"
}), React.createElement(Table.Column, {
dataIndex: "four",
title: "\u7B2Csi\u9879",
width: 300,
align: "right"
})));
global.innerWidth = 500;
global.innerHeight = 500;
global.dispatchEvent(new Event("resize"));
global.dispatchEvent(new Event("scroll"));
wrapper.instance().handleMainTableScroll();
});
it("Column width 在 fixed 时必须设置 验证", function () {
var stub = sinon.stub(console, "error");
mount(React.createElement(Table, {
dataSource: dataSource
}, React.createElement(Table.Column, {
dataIndex: "one",
title: "\u7B2C\u4E00\u9879",
fixed: "left"
})));
expect(stub.calledOnce).toBe(true);
stub.restore();
});
it("loading 快照", function () {
var wrapper = TestRenderer.create(React.createElement(Table, {
loading: true,
dataSource: dataSource
}, React.createElement(Table.Column, {
dataIndex: "one",
title: "\u7B2C\u4E00\u9879",
fixed: "left"
})));
expect(wrapper).toMatchSnapshot();
});
it("合并单元格快照", function () {
var wrapper = TestRenderer.create(React.createElement(Table, {
dataSource: dataSource,
getCellProps: function getCellProps(_, __, rowIndex, colIndex) {
if (rowIndex === 0 && colIndex === 0) {
return {
rowSpan: 2,
colSpan: 2
};
}
if (rowIndex === 3 && colIndex === 2) {
return {
rowSpan: 2,
colSpan: 1
};
}
if (rowIndex === 3 && colIndex === 3) {
return {
rowSpan: 2,
colSpan: 1
};
}
if (rowIndex === 2 && colIndex === 0) {
return {
rowSpan: 1,
colSpan: 1
};
}
return {};
}
}, React.createElement(Table.Column, {
dataIndex: "one",
title: "\u7B2C\u4E00\u9879",
fixed: true
}), React.createElement(Table.Column, {
dataIndex: "two",
title: "\u7B2Cer\u9879",
fixed: true
}), React.createElement(Table.Column, {
dataIndex: "three",
title: "\u7B2C3\u9879",
align: "center"
}), React.createElement(Table.Column, {
dataIndex: "four",
title: "\u7B2C\u56DB\u9879",
align: "center",
fixed: "right"
})));
expect(wrapper).toMatchSnapshot();
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1vdW50IiwiVGVzdFJlbmRlcmVyIiwic2lub24iLCJUYWJsZSIsIndpbmRvdyIsIlJlc2l6ZU9ic2VydmVyIiwiamVzdCIsImZuIiwibW9ja0ltcGxlbWVudGF0aW9uIiwiZGlzY29ubmVjdCIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJkYXRhU291cmNlIiwib25lIiwidHdvIiwiZm91ciIsInRocmVlIiwiZGVzY3JpYmUiLCJiZWZvcmVBbGwiLCJFbGVtZW50IiwicHJvdG90eXBlIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJ0b3AiLCJsZWZ0IiwiYm90dG9tIiwicmlnaHQiLCJ4IiwieSIsInRvSlNPTiIsIml0Iiwid3JhcHBlciIsImNyZWF0ZUVsZW1lbnQiLCJoZWFkZXJBZmZpeGVkIiwiQ29sdW1uIiwiZGF0YUluZGV4IiwidGl0bGUiLCJwb3BvdmVyIiwiZml4ZWQiLCJhbGlnbiIsInJlbmRlciIsImdsb2JhbCIsImlubmVyV2lkdGgiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJpbnN0YW5jZSIsImhhbmRsZU1haW5UYWJsZVNjcm9sbCIsImNvbXBvbmVudFdpbGxVbm1vdW50Iiwic3R1YiIsImNvbnNvbGUiLCJleHBlY3QiLCJjYWxsZWRPbmNlIiwidG9CZSIsInJlc3RvcmUiLCJpbm5lckhlaWdodCIsImNyZWF0ZSIsImxvYWRpbmciLCJ0b01hdGNoU25hcHNob3QiLCJnZXRDZWxsUHJvcHMiLCJfIiwiX18iLCJyb3dJbmRleCIsImNvbEluZGV4Iiwicm93U3BhbiIsImNvbFNwYW4iXSwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnRzL3RhYmxlL19fdGVzdHNfXy9wcm9wcy50ZXN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7IG1vdW50IH0gZnJvbSBcImVuenltZVwiXG5pbXBvcnQgVGVzdFJlbmRlcmVyIGZyb20gXCJyZWFjdC10ZXN0LXJlbmRlcmVyXCJcbmltcG9ydCBzaW5vbiBmcm9tIFwic2lub25cIlxuaW1wb3J0IFRhYmxlIGZyb20gXCIuLlwiXG5cbndpbmRvdy5SZXNpemVPYnNlcnZlciA9XG4gIHdpbmRvdy5SZXNpemVPYnNlcnZlciB8fFxuICBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgZGlzY29ubmVjdDogamVzdC5mbigpLFxuICAgIG9ic2VydmU6IGplc3QuZm4oKSxcbiAgICB1bm9ic2VydmU6IGplc3QuZm4oKSxcbiAgfSkpXG5cbmNvbnN0IGRhdGFTb3VyY2UgPSBbXG4gIHtcbiAgICBvbmU6IFwi6Zi/6JCo5b63XCIsXG4gICAgdHdvOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICAgIGZvdXI6IFwi6Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b63XCIsXG4gICAgdGhyZWU6IFwi6Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b63XCIsXG4gIH0sXG4gIHtcbiAgICBvbmU6IFwi6Zi/6JCo5b63XCIsXG4gICAgdHdvOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICAgIGZvdXI6IFwi6Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b63XCIsXG4gICAgdGhyZWU6IFwi6Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b63XCIsXG4gIH0sXG4gIHtcbiAgICBvbmU6IFwi6Zi/6JCo5b63XCIsXG4gICAgdHdvOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICAgIGZvdXI6IFwi6Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b63XCIsXG4gICAgdGhyZWU6IFwi6Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b63XCIsXG4gIH0sXG4gIHtcbiAgICBvbmU6IFwi6Zi/6JCo5b63XCIsXG4gICAgdHdvOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICAgIGZvdXI6IFwi6Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b63XCIsXG4gICAgdGhyZWU6IFwi6Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b63XCIsXG4gIH0sXG4gIHtcbiAgICBvbmU6IFwi6Zi/6JCo5b63XCIsXG4gICAgdHdvOiBcIumYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t+mYv+iQqOW+t1wiLFxuICAgIGZvdXI6IFwi6Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b63XCIsXG4gICAgdGhyZWU6IFwi6Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b636Zi/6JCo5b63XCIsXG4gIH0sXG5dXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VPYmplY3Qge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbn1cblxuZGVzY3JpYmUoXCJUYWJsZVwiLCAoKSA9PiB7XG4gIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgLyoqXG4gICAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQwMDA2NjYzXG4gICAgICog6YCa6L+HIG1vY2sgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGDvvIzkuYvlkI7ov5DooYznmoTmiYDmnIkgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAg6YO95Lya6L+U5Zue6L+Z5ZCM5LiA5Liq5YC844CCXG4gICAgICovXG4gICAgRWxlbWVudC5wcm90b3R5cGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gamVzdC5mbigoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogNTAwLFxuICAgICAgICBoZWlnaHQ6IDYwMCxcbiAgICAgICAgdG9wOiAwLFxuICAgICAgICBsZWZ0OiAwLFxuICAgICAgICBib3R0b206IDAsXG4gICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwLFxuICAgICAgICB0b0pTT046ICgpID0+IHt9LFxuICAgICAgfVxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJoZWFkZXJBZmZpeGVkIOajgOa1i1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPFRhYmxlIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9IGhlYWRlckFmZml4ZWQ+XG4gICAgICAgIDxUYWJsZS5Db2x1bW5cbiAgICAgICAgICBkYXRhSW5kZXg9XCJvbmVcIlxuICAgICAgICAgIHRpdGxlPVwi56ys5LiA6aG5XCJcbiAgICAgICAgICBwb3BvdmVyPVwi6KGo5aS05o+Q56S65YaF5a65XCJcbiAgICAgICAgICB3aWR0aD1cIjEwMHB4XCJcbiAgICAgICAgICBmaXhlZD1cImxlZnRcIlxuICAgICAgICAvPlxuICAgICAgICA8VGFibGUuQ29sdW1uXG4gICAgICAgICAgZml4ZWQ9XCJyaWdodFwiXG4gICAgICAgICAgZGF0YUluZGV4PVwidHdvXCJcbiAgICAgICAgICB0aXRsZT1cIuesrGVy6aG5XCJcbiAgICAgICAgICB3aWR0aD17MzAwfVxuICAgICAgICAvPlxuICAgICAgICA8VGFibGUuQ29sdW1uXG4gICAgICAgICAgZGF0YUluZGV4PVwic1wiXG4gICAgICAgICAgdGl0bGU9XCLnrKxzaemhuVwiXG4gICAgICAgICAgd2lkdGg9XCIxMCVcIlxuICAgICAgICAgIGFsaWduPVwiY2VudGVyXCJcbiAgICAgICAgICByZW5kZXI9eygpID0+IFwi6L+Z5Lqb5pKS5aSn5aOw5ZywXCJ9XG4gICAgICAgIC8+XG4gICAgICAgIDxUYWJsZS5Db2x1bW4gZGF0YUluZGV4PVwidGhyZWVcIiB0aXRsZT1cIuesrHNhbumhuVwiIC8+XG4gICAgICAgIDxUYWJsZS5Db2x1bW5cbiAgICAgICAgICBkYXRhSW5kZXg9XCJmb3VyXCJcbiAgICAgICAgICB0aXRsZT1cIuesrHNp6aG5XCJcbiAgICAgICAgICB3aWR0aD17MzAwfVxuICAgICAgICAgIGFsaWduPVwicmlnaHRcIlxuICAgICAgICAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGdsb2JhbC5pbm5lcldpZHRoID0gNTAwXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInJlc2l6ZVwiKSlcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwic2Nyb2xsXCIpKVxuICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5oYW5kbGVNYWluVGFibGVTY3JvbGwoKVxuICAgIHdyYXBwZXIuaW5zdGFuY2UoKS5jb21wb25lbnRXaWxsVW5tb3VudCgpXG4gIH0pXG5cbiAgLy8gaXQoXCJoZWlnaHQgcHJvcCDpqozor4FcIiwgKCkgPT4ge1xuICAvLyAgIGNvbnN0IHN0dWIgPSBzaW5vbi5zdHViKGNvbnNvbGUsICdlcnJvcicpXG4gIC8vICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAvLyAgICAgPFRhYmxlXG4gIC8vICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gIC8vICAgICAgIGhlaWdodD1cIjUwMHB4XCJcbiAgLy8gICAgID5cbiAgLy8gICAgICAgPFRhYmxlLkNvbHVtblxuICAvLyAgICAgICAgIGRhdGFJbmRleD1cIm9uZVwiXG4gIC8vICAgICAgICAgdGl0bGU9XCLnrKzkuIDpoblcIlxuICAvLyAgICAgICAgIHBvcG92ZXI9XCLooajlpLTmj5DnpLrlhoXlrrlcIlxuICAvLyAgICAgICAgIHdpZHRoPXsxMDB9XG4gIC8vICAgICAgICAgZml4ZWQ9XCJsZWZ0XCJcbiAgLy8gICAgICAgLz5cbiAgLy8gICAgIDwvVGFibGU+XG4gIC8vICAgKVxuICAvLyAgIGV4cGVjdChzdHViLmNhbGxlZE9uY2UpLnRvQmUodHJ1ZSlcbiAgLy8gICBzdHViLnJlc3RvcmUoKVxuICAvLyB9KVxuXG4gIGl0KFwiaGVpZ2h0IOS4jiBoZWFkZXJBZmZpeGVkIOS4jeiDveWQjOaXtuS9v+eUqCDpqozor4FcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHN0dWIgPSBzaW5vbi5zdHViKGNvbnNvbGUsIFwiZXJyb3JcIilcbiAgICBtb3VudChcbiAgICAgIDxUYWJsZSBkYXRhU291cmNlPXtkYXRhU291cmNlfSBoZWlnaHQ9ezUwMH0gaGVhZGVyQWZmaXhlZD5cbiAgICAgICAgPFRhYmxlLkNvbHVtblxuICAgICAgICAgIGRhdGFJbmRleD1cIm9uZVwiXG4gICAgICAgICAgdGl0bGU9XCLljYrop5Lmi6zlj7flpJYo5Y2K6KeS5ous5Y+35YaF5rWL6K+VKVwiXG4gICAgICAgICAgcG9wb3Zlcj1cIuihqOWktOaPkOekuuWGheWuuVwiXG4gICAgICAgICAgd2lkdGg9ezEwMH1cbiAgICAgICAgICBmaXhlZD1cImxlZnRcIlxuICAgICAgICAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgZXhwZWN0KHN0dWIuY2FsbGVkT25jZSkudG9CZSh0cnVlKVxuICAgIHN0dWIucmVzdG9yZSgpXG4gIH0pXG5cbiAgaXQoXCJoZWlnaHQg5qOA5rWLXCIsICgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVyID0gbW91bnQoXG4gICAgICA8VGFibGUgZGF0YVNvdXJjZT17ZGF0YVNvdXJjZX0gaGVpZ2h0PXsyMDB9PlxuICAgICAgICA8VGFibGUuQ29sdW1uXG4gICAgICAgICAgZGF0YUluZGV4PVwib25lXCJcbiAgICAgICAgICB0aXRsZT1cIuesrOS4gOmhuVwiXG4gICAgICAgICAgcG9wb3Zlcj1cIuihqOWktOaPkOekuuWGheWuuVwiXG4gICAgICAgICAgd2lkdGg9ezEwMH1cbiAgICAgICAgICBmaXhlZD1cImxlZnRcIlxuICAgICAgICAvPlxuICAgICAgICA8VGFibGUuQ29sdW1uXG4gICAgICAgICAgZml4ZWQ9XCJyaWdodFwiXG4gICAgICAgICAgZGF0YUluZGV4PVwidHdvXCJcbiAgICAgICAgICB0aXRsZT1cIuesrGVy6aG5XCJcbiAgICAgICAgICB3aWR0aD17MzAwfVxuICAgICAgICAvPlxuICAgICAgICA8VGFibGUuQ29sdW1uXG4gICAgICAgICAgZGF0YUluZGV4PVwic1wiXG4gICAgICAgICAgdGl0bGU9XCLnrKxzaemhuVwiXG4gICAgICAgICAgd2lkdGg9ezMwMH1cbiAgICAgICAgICBhbGlnbj1cImNlbnRlclwiXG4gICAgICAgICAgcmVuZGVyPXsoKSA9PiBcIui/meS6m+aSkuWkp+WjsOWcsFwifVxuICAgICAgICAvPlxuICAgICAgICA8VGFibGUuQ29sdW1uIGRhdGFJbmRleD1cInRocmVlXCIgdGl0bGU9XCLnrKxzYW7poblcIiAvPlxuICAgICAgICA8VGFibGUuQ29sdW1uXG4gICAgICAgICAgZGF0YUluZGV4PVwiZm91clwiXG4gICAgICAgICAgdGl0bGU9XCLnrKxzaemhuVwiXG4gICAgICAgICAgd2lkdGg9ezMwMH1cbiAgICAgICAgICBhbGlnbj1cInJpZ2h0XCJcbiAgICAgICAgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBnbG9iYWwuaW5uZXJXaWR0aCA9IDUwMFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBnbG9iYWwuaW5uZXJIZWlnaHQgPSA1MDBcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicmVzaXplXCIpKVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBnbG9iYWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJzY3JvbGxcIikpXG4gICAgd3JhcHBlci5pbnN0YW5jZSgpLmhhbmRsZU1haW5UYWJsZVNjcm9sbCgpXG4gIH0pXG5cbiAgLy8gaXQoXCJDb2x1bW4gd2lkdGggcHJvcCDpqozor4FcIiwgKCkgPT4ge1xuICAvLyAgIGNvbnN0IHN0dWIgPSBzaW5vbi5zdHViKGNvbnNvbGUsICdlcnJvcicpXG4gIC8vICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAvLyAgICAgPFRhYmxlXG4gIC8vICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gIC8vICAgICA+XG4gIC8vICAgICAgIDxUYWJsZS5Db2x1bW5cbiAgLy8gICAgICAgICBkYXRhSW5kZXg9XCJvbmVcIlxuICAvLyAgICAgICAgIHRpdGxlPVwi56ys5LiA6aG5XCJcbiAgLy8gICAgICAgICB3aWR0aD17W119XG4gIC8vICAgICAgIC8+XG4gIC8vICAgICA8L1RhYmxlPlxuICAvLyAgIClcbiAgLy8gICBleHBlY3Qoc3R1Yi5jYWxsZWRPbmNlKS50b0JlKHRydWUpXG4gIC8vICAgc3R1Yi5yZXN0b3JlKClcbiAgLy8gfSlcblxuICBpdChcIkNvbHVtbiB3aWR0aCDlnKggZml4ZWQg5pe25b+F6aG76K6+572uIOmqjOivgVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgc3R1YiA9IHNpbm9uLnN0dWIoY29uc29sZSwgXCJlcnJvclwiKVxuICAgIG1vdW50KFxuICAgICAgPFRhYmxlIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9PlxuICAgICAgICA8VGFibGUuQ29sdW1uIGRhdGFJbmRleD1cIm9uZVwiIHRpdGxlPVwi56ys5LiA6aG5XCIgZml4ZWQ9XCJsZWZ0XCIgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICAgIGV4cGVjdChzdHViLmNhbGxlZE9uY2UpLnRvQmUodHJ1ZSlcbiAgICBzdHViLnJlc3RvcmUoKVxuICB9KVxuXG4gIGl0KFwibG9hZGluZyDlv6vnhadcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBUZXN0UmVuZGVyZXIuY3JlYXRlKFxuICAgICAgPFRhYmxlIGxvYWRpbmcgZGF0YVNvdXJjZT17ZGF0YVNvdXJjZX0+XG4gICAgICAgIDxUYWJsZS5Db2x1bW4gZGF0YUluZGV4PVwib25lXCIgdGl0bGU9XCLnrKzkuIDpoblcIiBmaXhlZD1cImxlZnRcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIpLnRvTWF0Y2hTbmFwc2hvdCgpXG4gIH0pXG5cbiAgaXQoXCLlkIjlubbljZXlhYPmoLzlv6vnhadcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBUZXN0UmVuZGVyZXIuY3JlYXRlKFxuICAgICAgPFRhYmxlXG4gICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gICAgICAgIGdldENlbGxQcm9wcz17KF8sIF9fLCByb3dJbmRleCwgY29sSW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAocm93SW5kZXggPT09IDAgJiYgY29sSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHJvd1NwYW46IDIsXG4gICAgICAgICAgICAgIGNvbFNwYW46IDIsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyb3dJbmRleCA9PT0gMyAmJiBjb2xJbmRleCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcm93U3BhbjogMixcbiAgICAgICAgICAgICAgY29sU3BhbjogMSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJvd0luZGV4ID09PSAzICYmIGNvbEluZGV4ID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByb3dTcGFuOiAyLFxuICAgICAgICAgICAgICBjb2xTcGFuOiAxLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocm93SW5kZXggPT09IDIgJiYgY29sSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHJvd1NwYW46IDEsXG4gICAgICAgICAgICAgIGNvbFNwYW46IDEsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7fVxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8VGFibGUuQ29sdW1uIGRhdGFJbmRleD1cIm9uZVwiIHRpdGxlPVwi56ys5LiA6aG5XCIgZml4ZWQgLz5cbiAgICAgICAgPFRhYmxlLkNvbHVtbiBkYXRhSW5kZXg9XCJ0d29cIiB0aXRsZT1cIuesrGVy6aG5XCIgZml4ZWQgLz5cbiAgICAgICAgPFRhYmxlLkNvbHVtbiBkYXRhSW5kZXg9XCJ0aHJlZVwiIHRpdGxlPVwi56ysM+mhuVwiIGFsaWduPVwiY2VudGVyXCIgLz5cbiAgICAgICAgPFRhYmxlLkNvbHVtblxuICAgICAgICAgIGRhdGFJbmRleD1cImZvdXJcIlxuICAgICAgICAgIHRpdGxlPVwi56ys5Zub6aG5XCJcbiAgICAgICAgICBhbGlnbj1cImNlbnRlclwiXG4gICAgICAgICAgZml4ZWQ9XCJyaWdodFwiXG4gICAgICAgIC8+XG4gICAgICA8L1RhYmxlPlxuICAgIClcbiAgICBleHBlY3Qod3JhcHBlcikudG9NYXRjaFNuYXBzaG90KClcbiAgfSlcbn0pXG4iXSwibWFw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