@pie-lib/plot 3.2.0-next.2 → 3.2.0-next.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,285 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
- var _react = require("@testing-library/react");
6
- var _react2 = _interopRequireDefault(require("react"));
7
- var _root = require("../root");
8
- var _d3Selection = require("d3-selection");
9
- 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; }
10
- 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) { (0, _defineProperty2["default"])(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; }
11
- jest.mock('d3-selection', function () {
12
- return {
13
- select: jest.fn(),
14
- pointer: jest.fn()
15
- };
16
- });
17
- var scaleMock = function scaleMock() {
18
- var fn = jest.fn(function (n) {
19
- return n;
20
- });
21
- fn.invert = jest.fn(function (n) {
22
- return n;
23
- });
24
- return fn;
25
- };
26
- var graphProps = function graphProps() {
27
- return {
28
- scale: {
29
- x: scaleMock(),
30
- y: scaleMock()
31
- },
32
- snap: {
33
- x: jest.fn(function (n) {
34
- return n;
35
- }),
36
- y: jest.fn(function (n) {
37
- return n;
38
- })
39
- },
40
- domain: {
41
- min: 0,
42
- max: 1,
43
- step: 1
44
- },
45
- range: {
46
- min: 0,
47
- max: 1,
48
- step: 1
49
- },
50
- size: {
51
- width: 400,
52
- height: 400
53
- }
54
- };
55
- };
56
- describe('root', function () {
57
- var mockOn;
58
- var defaultProps;
59
- beforeEach(function () {
60
- mockOn = jest.fn();
61
- _d3Selection.select.mockReturnValue({
62
- on: mockOn
63
- });
64
- _d3Selection.pointer.mockReturnValue([0, 0]);
65
- defaultProps = {
66
- classes: {},
67
- graphProps: graphProps()
68
- };
69
- });
70
- afterEach(function () {
71
- (0, _react.cleanup)();
72
- jest.clearAllMocks();
73
- });
74
- it('renders with children', function () {
75
- var _render = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, defaultProps, "hi")),
76
- container = _render.container,
77
- getByText = _render.getByText;
78
- expect(container.firstChild).toBeInTheDocument();
79
- expect(getByText('hi')).toBeInTheDocument();
80
- });
81
- describe('logic', function () {
82
- describe('mousemove', function () {
83
- describe('mount/unmount', function () {
84
- it('adds mousemove listener on componentDidMount', function () {
85
- (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, defaultProps, "hi"));
86
-
87
- // Verify that select was called with the g element
88
- expect(_d3Selection.select).toHaveBeenCalled();
89
-
90
- // Verify that on() was called with 'mousemove' and a function
91
- expect(mockOn).toHaveBeenCalledWith('mousemove', expect.any(Function));
92
- });
93
- it('removes mousemove listener on componentWillUnmount', function () {
94
- var _render2 = (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, defaultProps, "hi")),
95
- unmount = _render2.unmount;
96
-
97
- // Clear previous calls to isolate unmount behavior
98
- mockOn.mockClear();
99
- _d3Selection.select.mockClear();
100
- unmount();
101
-
102
- // Verify that select was called during unmount
103
- expect(_d3Selection.select).toHaveBeenCalled();
104
-
105
- // Verify that on() was called with 'mousemove' and null to remove the listener
106
- expect(mockOn).toHaveBeenCalledWith('mousemove', null);
107
- });
108
- });
109
- describe('mouseMove function', function () {
110
- it('calls pointer with correct arguments', function () {
111
- var onMouseMove = jest.fn();
112
- var gp = graphProps();
113
- var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
114
- onMouseMove: onMouseMove,
115
- graphProps: gp
116
- });
117
- var mockNode = document.createElement('div');
118
- var mockEvent = {
119
- clientX: 10,
120
- clientY: 20
121
- };
122
- var mockSelection = {
123
- _groups: [[mockNode]],
124
- node: function node() {
125
- return mockNode;
126
- }
127
- };
128
-
129
- // Mock select to return our mockSelection
130
- _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
131
- on: function on(event, handler) {
132
- mockOn(event, handler);
133
- // When 'mousemove' is registered, immediately test it
134
- if (event === 'mousemove' && handler) {
135
- _d3Selection.pointer.mockReturnValue([10, 20]);
136
- // Handler is bound with mockSelection as first arg, so call with event
137
- handler(mockEvent);
138
- }
139
- }
140
- }));
141
- (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
142
-
143
- // Verify pointer was called with the event and correct node
144
- expect(_d3Selection.pointer).toHaveBeenCalledWith(mockEvent, mockNode);
145
- });
146
- it('calls scale.x.invert and scale.y.invert', function () {
147
- var onMouseMove = jest.fn();
148
- var gp = graphProps();
149
- var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
150
- onMouseMove: onMouseMove,
151
- graphProps: gp
152
- });
153
- var mockNode = document.createElement('div');
154
- var mockEvent = {
155
- clientX: 15,
156
- clientY: 25
157
- };
158
- var mockSelection = {
159
- _groups: [[mockNode]],
160
- node: function node() {
161
- return mockNode;
162
- }
163
- };
164
- _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
165
- on: function on(event, handler) {
166
- mockOn(event, handler);
167
- if (event === 'mousemove' && handler) {
168
- _d3Selection.pointer.mockReturnValue([15, 25]);
169
- handler(mockEvent);
170
- }
171
- }
172
- }));
173
- (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
174
- expect(gp.scale.x.invert).toHaveBeenCalledWith(15);
175
- expect(gp.scale.y.invert).toHaveBeenCalledWith(25);
176
- });
177
- it('calls snap.x and snap.y with inverted coordinates', function () {
178
- var onMouseMove = jest.fn();
179
- var gp = graphProps();
180
- gp.scale.x.invert = jest.fn().mockReturnValue(5);
181
- gp.scale.y.invert = jest.fn().mockReturnValue(10);
182
- var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
183
- onMouseMove: onMouseMove,
184
- graphProps: gp
185
- });
186
- var mockNode = document.createElement('div');
187
- var mockEvent = {
188
- clientX: 100,
189
- clientY: 200
190
- };
191
- var mockSelection = {
192
- _groups: [[mockNode]],
193
- node: function node() {
194
- return mockNode;
195
- }
196
- };
197
- _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
198
- on: function on(event, handler) {
199
- mockOn(event, handler);
200
- if (event === 'mousemove' && handler) {
201
- _d3Selection.pointer.mockReturnValue([100, 200]);
202
- handler();
203
- }
204
- }
205
- }));
206
- (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
207
- expect(gp.snap.x).toHaveBeenCalledWith(5);
208
- expect(gp.snap.y).toHaveBeenCalledWith(10);
209
- });
210
- it('calls onMouseMove handler with snapped coordinates', function () {
211
- var onMouseMove = jest.fn();
212
- var gp = graphProps();
213
- gp.scale.x.invert = jest.fn().mockReturnValue(7);
214
- gp.scale.y.invert = jest.fn().mockReturnValue(14);
215
- gp.snap.x = jest.fn().mockReturnValue(10);
216
- gp.snap.y = jest.fn().mockReturnValue(15);
217
- var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
218
- onMouseMove: onMouseMove,
219
- graphProps: gp
220
- });
221
- var mockNode = document.createElement('div');
222
- var mockEvent = {
223
- clientX: 100,
224
- clientY: 200
225
- };
226
- var mockSelection = {
227
- _groups: [[mockNode]],
228
- node: function node() {
229
- return mockNode;
230
- }
231
- };
232
- _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
233
- on: function on(event, handler) {
234
- mockOn(event, handler);
235
- if (event === 'mousemove' && handler) {
236
- _d3Selection.pointer.mockReturnValue([100, 200]);
237
- handler(mockEvent);
238
- }
239
- }
240
- }));
241
- (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
242
- expect(onMouseMove).toHaveBeenCalledWith({
243
- x: 10,
244
- y: 15
245
- });
246
- });
247
- it('does not call onMouseMove when handler is not provided', function () {
248
- var gp = graphProps();
249
- var props = _objectSpread(_objectSpread({}, defaultProps), {}, {
250
- graphProps: gp
251
- });
252
- var mockNode = document.createElement('div');
253
- var mockEvent = {
254
- clientX: 100,
255
- clientY: 200
256
- };
257
- var mockSelection = {
258
- _groups: [[mockNode]],
259
- node: function node() {
260
- return mockNode;
261
- }
262
- };
263
- _d3Selection.select.mockReturnValue(_objectSpread(_objectSpread({}, mockSelection), {}, {
264
- on: function on(event, handler) {
265
- mockOn(event, handler);
266
- if (event === 'mousemove' && handler) {
267
- _d3Selection.pointer.mockReturnValue([100, 200]);
268
- // Should not throw error when onMouseMove is not provided
269
- expect(function () {
270
- return handler(mockEvent);
271
- }).not.toThrow();
272
- }
273
- }
274
- }));
275
- (0, _react.render)(/*#__PURE__*/_react2["default"].createElement(_root.Root, props, "hi"));
276
-
277
- // Verify scale methods were not called (early return in mouseMove)
278
- expect(gp.scale.x.invert).not.toHaveBeenCalled();
279
- expect(gp.scale.y.invert).not.toHaveBeenCalled();
280
- });
281
- });
282
- });
283
- });
284
- });
285
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcm9vdCIsIl9kM1NlbGVjdGlvbiIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiamVzdCIsIm1vY2siLCJzZWxlY3QiLCJmbiIsInBvaW50ZXIiLCJzY2FsZU1vY2siLCJuIiwiaW52ZXJ0IiwiZ3JhcGhQcm9wcyIsInNjYWxlIiwieCIsInkiLCJzbmFwIiwiZG9tYWluIiwibWluIiwibWF4Iiwic3RlcCIsInJhbmdlIiwic2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwiZGVzY3JpYmUiLCJtb2NrT24iLCJkZWZhdWx0UHJvcHMiLCJiZWZvcmVFYWNoIiwibW9ja1JldHVyblZhbHVlIiwib24iLCJjbGFzc2VzIiwiYWZ0ZXJFYWNoIiwiY2xlYW51cCIsImNsZWFyQWxsTW9ja3MiLCJpdCIsIl9yZW5kZXIiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiUm9vdCIsImNvbnRhaW5lciIsImdldEJ5VGV4dCIsImV4cGVjdCIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsInRvSGF2ZUJlZW5DYWxsZWQiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsImFueSIsIkZ1bmN0aW9uIiwiX3JlbmRlcjIiLCJ1bm1vdW50IiwibW9ja0NsZWFyIiwib25Nb3VzZU1vdmUiLCJncCIsInByb3BzIiwibW9ja05vZGUiLCJkb2N1bWVudCIsIm1vY2tFdmVudCIsImNsaWVudFgiLCJjbGllbnRZIiwibW9ja1NlbGVjdGlvbiIsIl9ncm91cHMiLCJub2RlIiwiZXZlbnQiLCJoYW5kbGVyIiwibm90IiwidG9UaHJvdyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcm9vdC50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbGVhbnVwLCByZW5kZXIgfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSb290IH0gZnJvbSAnLi4vcm9vdCc7XG5pbXBvcnQgeyBwb2ludGVyLCBzZWxlY3QgfSBmcm9tICdkMy1zZWxlY3Rpb24nO1xuXG5qZXN0Lm1vY2soJ2QzLXNlbGVjdGlvbicsICgpID0+ICh7XG4gIHNlbGVjdDogamVzdC5mbigpLFxuICBwb2ludGVyOiBqZXN0LmZuKCksXG59KSk7XG5cbmNvbnN0IHNjYWxlTW9jayA9ICgpID0+IHtcbiAgY29uc3QgZm4gPSBqZXN0LmZuKChuKSA9PiBuKTtcbiAgZm4uaW52ZXJ0ID0gamVzdC5mbigobikgPT4gbik7XG4gIHJldHVybiBmbjtcbn07XG5cbmNvbnN0IGdyYXBoUHJvcHMgPSAoKSA9PiAoe1xuICBzY2FsZToge1xuICAgIHg6IHNjYWxlTW9jaygpLFxuICAgIHk6IHNjYWxlTW9jaygpLFxuICB9LFxuICBzbmFwOiB7XG4gICAgeDogamVzdC5mbigobikgPT4gbiksXG4gICAgeTogamVzdC5mbigobikgPT4gbiksXG4gIH0sXG4gIGRvbWFpbjoge1xuICAgIG1pbjogMCxcbiAgICBtYXg6IDEsXG4gICAgc3RlcDogMSxcbiAgfSxcbiAgcmFuZ2U6IHtcbiAgICBtaW46IDAsXG4gICAgbWF4OiAxLFxuICAgIHN0ZXA6IDEsXG4gIH0sXG4gIHNpemU6IHtcbiAgICB3aWR0aDogNDAwLFxuICAgIGhlaWdodDogNDAwLFxuICB9LFxufSk7XG5cbmRlc2NyaWJlKCdyb290JywgKCkgPT4ge1xuICBsZXQgbW9ja09uO1xuICBsZXQgZGVmYXVsdFByb3BzO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG1vY2tPbiA9IGplc3QuZm4oKTtcbiAgICBzZWxlY3QubW9ja1JldHVyblZhbHVlKHtcbiAgICAgIG9uOiBtb2NrT24sXG4gICAgfSk7XG4gICAgcG9pbnRlci5tb2NrUmV0dXJuVmFsdWUoWzAsIDBdKTtcblxuICAgIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgZ3JhcGhQcm9wczogZ3JhcGhQcm9wcygpLFxuICAgIH07XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICB9KTtcblxuICBpdCgncmVuZGVycyB3aXRoIGNoaWxkcmVuJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGFpbmVyLCBnZXRCeVRleHQgfSA9IHJlbmRlcig8Um9vdCB7Li4uZGVmYXVsdFByb3BzfT5oaTwvUm9vdD4pO1xuICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3QoZ2V0QnlUZXh0KCdoaScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnbG9naWMnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ21vdXNlbW92ZScsICgpID0+IHtcbiAgICAgIGRlc2NyaWJlKCdtb3VudC91bm1vdW50JywgKCkgPT4ge1xuICAgICAgICBpdCgnYWRkcyBtb3VzZW1vdmUgbGlzdGVuZXIgb24gY29tcG9uZW50RGlkTW91bnQnLCAoKSA9PiB7XG4gICAgICAgICAgcmVuZGVyKDxSb290IHsuLi5kZWZhdWx0UHJvcHN9PmhpPC9Sb290Pik7XG5cbiAgICAgICAgICAvLyBWZXJpZnkgdGhhdCBzZWxlY3Qgd2FzIGNhbGxlZCB3aXRoIHRoZSBnIGVsZW1lbnRcbiAgICAgICAgICBleHBlY3Qoc2VsZWN0KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgICAgICAgICAvLyBWZXJpZnkgdGhhdCBvbigpIHdhcyBjYWxsZWQgd2l0aCAnbW91c2Vtb3ZlJyBhbmQgYSBmdW5jdGlvblxuICAgICAgICAgIGV4cGVjdChtb2NrT24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdtb3VzZW1vdmUnLCBleHBlY3QuYW55KEZ1bmN0aW9uKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdyZW1vdmVzIG1vdXNlbW92ZSBsaXN0ZW5lciBvbiBjb21wb25lbnRXaWxsVW5tb3VudCcsICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHVubW91bnQgfSA9IHJlbmRlcig8Um9vdCB7Li4uZGVmYXVsdFByb3BzfT5oaTwvUm9vdD4pO1xuXG4gICAgICAgICAgLy8gQ2xlYXIgcHJldmlvdXMgY2FsbHMgdG8gaXNvbGF0ZSB1bm1vdW50IGJlaGF2aW9yXG4gICAgICAgICAgbW9ja09uLm1vY2tDbGVhcigpO1xuICAgICAgICAgIHNlbGVjdC5tb2NrQ2xlYXIoKTtcblxuICAgICAgICAgIHVubW91bnQoKTtcblxuICAgICAgICAgIC8vIFZlcmlmeSB0aGF0IHNlbGVjdCB3YXMgY2FsbGVkIGR1cmluZyB1bm1vdW50XG4gICAgICAgICAgZXhwZWN0KHNlbGVjdCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgb24oKSB3YXMgY2FsbGVkIHdpdGggJ21vdXNlbW92ZScgYW5kIG51bGwgdG8gcmVtb3ZlIHRoZSBsaXN0ZW5lclxuICAgICAgICAgIGV4cGVjdChtb2NrT24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdtb3VzZW1vdmUnLCBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZGVzY3JpYmUoJ21vdXNlTW92ZSBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgICAgaXQoJ2NhbGxzIHBvaW50ZXIgd2l0aCBjb3JyZWN0IGFyZ3VtZW50cycsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IGplc3QuZm4oKTtcbiAgICAgICAgICBjb25zdCBncCA9IGdyYXBoUHJvcHMoKTtcbiAgICAgICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRQcm9wcyxcbiAgICAgICAgICAgIG9uTW91c2VNb3ZlLFxuICAgICAgICAgICAgZ3JhcGhQcm9wczogZ3AsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IG1vY2tOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgY29uc3QgbW9ja0V2ZW50ID0geyBjbGllbnRYOiAxMCwgY2xpZW50WTogMjAgfTtcbiAgICAgICAgICBjb25zdCBtb2NrU2VsZWN0aW9uID0ge1xuICAgICAgICAgICAgX2dyb3VwczogW1ttb2NrTm9kZV1dLFxuICAgICAgICAgICAgbm9kZTogKCkgPT4gbW9ja05vZGUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIE1vY2sgc2VsZWN0IHRvIHJldHVybiBvdXIgbW9ja1NlbGVjdGlvblxuICAgICAgICAgIHNlbGVjdC5tb2NrUmV0dXJuVmFsdWUoe1xuICAgICAgICAgICAgLi4ubW9ja1NlbGVjdGlvbixcbiAgICAgICAgICAgIG9uOiAoZXZlbnQsIGhhbmRsZXIpID0+IHtcbiAgICAgICAgICAgICAgbW9ja09uKGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgLy8gV2hlbiAnbW91c2Vtb3ZlJyBpcyByZWdpc3RlcmVkLCBpbW1lZGlhdGVseSB0ZXN0IGl0XG4gICAgICAgICAgICAgIGlmIChldmVudCA9PT0gJ21vdXNlbW92ZScgJiYgaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHBvaW50ZXIubW9ja1JldHVyblZhbHVlKFsxMCwgMjBdKTtcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGVyIGlzIGJvdW5kIHdpdGggbW9ja1NlbGVjdGlvbiBhcyBmaXJzdCBhcmcsIHNvIGNhbGwgd2l0aCBldmVudFxuICAgICAgICAgICAgICAgIGhhbmRsZXIobW9ja0V2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJlbmRlcig8Um9vdCB7Li4ucHJvcHN9PmhpPC9Sb290Pik7XG5cbiAgICAgICAgICAvLyBWZXJpZnkgcG9pbnRlciB3YXMgY2FsbGVkIHdpdGggdGhlIGV2ZW50IGFuZCBjb3JyZWN0IG5vZGVcbiAgICAgICAgICBleHBlY3QocG9pbnRlcikudG9IYXZlQmVlbkNhbGxlZFdpdGgobW9ja0V2ZW50LCBtb2NrTm9kZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdjYWxscyBzY2FsZS54LmludmVydCBhbmQgc2NhbGUueS5pbnZlcnQnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb25Nb3VzZU1vdmUgPSBqZXN0LmZuKCk7XG4gICAgICAgICAgY29uc3QgZ3AgPSBncmFwaFByb3BzKCk7XG4gICAgICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0UHJvcHMsXG4gICAgICAgICAgICBvbk1vdXNlTW92ZSxcbiAgICAgICAgICAgIGdyYXBoUHJvcHM6IGdwLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBtb2NrTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIGNvbnN0IG1vY2tFdmVudCA9IHsgY2xpZW50WDogMTUsIGNsaWVudFk6IDI1IH07XG4gICAgICAgICAgY29uc3QgbW9ja1NlbGVjdGlvbiA9IHtcbiAgICAgICAgICAgIF9ncm91cHM6IFtbbW9ja05vZGVdXSxcbiAgICAgICAgICAgIG5vZGU6ICgpID0+IG1vY2tOb2RlLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzZWxlY3QubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgICAgIC4uLm1vY2tTZWxlY3Rpb24sXG4gICAgICAgICAgICBvbjogKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICAgIG1vY2tPbihldmVudCwgaGFuZGxlcik7XG4gICAgICAgICAgICAgIGlmIChldmVudCA9PT0gJ21vdXNlbW92ZScgJiYgaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHBvaW50ZXIubW9ja1JldHVyblZhbHVlKFsxNSwgMjVdKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyKG1vY2tFdmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZW5kZXIoPFJvb3Qgey4uLnByb3BzfT5oaTwvUm9vdD4pO1xuXG4gICAgICAgICAgZXhwZWN0KGdwLnNjYWxlLnguaW52ZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgxNSk7XG4gICAgICAgICAgZXhwZWN0KGdwLnNjYWxlLnkuaW52ZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgyNSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdjYWxscyBzbmFwLnggYW5kIHNuYXAueSB3aXRoIGludmVydGVkIGNvb3JkaW5hdGVzJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gamVzdC5mbigpO1xuICAgICAgICAgIGNvbnN0IGdwID0gZ3JhcGhQcm9wcygpO1xuICAgICAgICAgIGdwLnNjYWxlLnguaW52ZXJ0ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSg1KTtcbiAgICAgICAgICBncC5zY2FsZS55LmludmVydCA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoMTApO1xuICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICAgICAgLi4uZGVmYXVsdFByb3BzLFxuICAgICAgICAgICAgb25Nb3VzZU1vdmUsXG4gICAgICAgICAgICBncmFwaFByb3BzOiBncCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgbW9ja05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBjb25zdCBtb2NrRXZlbnQgPSB7IGNsaWVudFg6IDEwMCwgY2xpZW50WTogMjAwIH07XG4gICAgICAgICAgY29uc3QgbW9ja1NlbGVjdGlvbiA9IHtcbiAgICAgICAgICAgIF9ncm91cHM6IFtbbW9ja05vZGVdXSxcbiAgICAgICAgICAgIG5vZGU6ICgpID0+IG1vY2tOb2RlLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzZWxlY3QubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgICAgIC4uLm1vY2tTZWxlY3Rpb24sXG4gICAgICAgICAgICBvbjogKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICAgIG1vY2tPbihldmVudCwgaGFuZGxlcik7XG4gICAgICAgICAgICAgIGlmIChldmVudCA9PT0gJ21vdXNlbW92ZScgJiYgaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHBvaW50ZXIubW9ja1JldHVyblZhbHVlKFsxMDAsIDIwMF0pO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJlbmRlcig8Um9vdCB7Li4ucHJvcHN9PmhpPC9Sb290Pik7XG5cbiAgICAgICAgICBleHBlY3QoZ3Auc25hcC54KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCg1KTtcbiAgICAgICAgICBleHBlY3QoZ3Auc25hcC55KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgxMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdjYWxscyBvbk1vdXNlTW92ZSBoYW5kbGVyIHdpdGggc25hcHBlZCBjb29yZGluYXRlcycsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IGplc3QuZm4oKTtcbiAgICAgICAgICBjb25zdCBncCA9IGdyYXBoUHJvcHMoKTtcbiAgICAgICAgICBncC5zY2FsZS54LmludmVydCA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoNyk7XG4gICAgICAgICAgZ3Auc2NhbGUueS5pbnZlcnQgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKDE0KTtcbiAgICAgICAgICBncC5zbmFwLnggPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKDEwKTtcbiAgICAgICAgICBncC5zbmFwLnkgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKDE1KTtcblxuICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICAgICAgLi4uZGVmYXVsdFByb3BzLFxuICAgICAgICAgICAgb25Nb3VzZU1vdmUsXG4gICAgICAgICAgICBncmFwaFByb3BzOiBncCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgbW9ja05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICBjb25zdCBtb2NrRXZlbnQgPSB7IGNsaWVudFg6IDEwMCwgY2xpZW50WTogMjAwIH07XG4gICAgICAgICAgY29uc3QgbW9ja1NlbGVjdGlvbiA9IHtcbiAgICAgICAgICAgIF9ncm91cHM6IFtbbW9ja05vZGVdXSxcbiAgICAgICAgICAgIG5vZGU6ICgpID0+IG1vY2tOb2RlLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzZWxlY3QubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgICAgIC4uLm1vY2tTZWxlY3Rpb24sXG4gICAgICAgICAgICBvbjogKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG4gICAgICAgICAgICAgIG1vY2tPbihldmVudCwgaGFuZGxlcik7XG4gICAgICAgICAgICAgIGlmIChldmVudCA9PT0gJ21vdXNlbW92ZScgJiYgaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHBvaW50ZXIubW9ja1JldHVyblZhbHVlKFsxMDAsIDIwMF0pO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIobW9ja0V2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJlbmRlcig8Um9vdCB7Li4ucHJvcHN9PmhpPC9Sb290Pik7XG5cbiAgICAgICAgICBleHBlY3Qob25Nb3VzZU1vdmUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHsgeDogMTAsIHk6IDE1IH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZG9lcyBub3QgY2FsbCBvbk1vdXNlTW92ZSB3aGVuIGhhbmRsZXIgaXMgbm90IHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdwID0gZ3JhcGhQcm9wcygpO1xuICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICAgICAgLi4uZGVmYXVsdFByb3BzLFxuICAgICAgICAgICAgZ3JhcGhQcm9wczogZ3AsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IG1vY2tOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgY29uc3QgbW9ja0V2ZW50ID0geyBjbGllbnRYOiAxMDAsIGNsaWVudFk6IDIwMCB9O1xuICAgICAgICAgIGNvbnN0IG1vY2tTZWxlY3Rpb24gPSB7XG4gICAgICAgICAgICBfZ3JvdXBzOiBbW21vY2tOb2RlXV0sXG4gICAgICAgICAgICBub2RlOiAoKSA9PiBtb2NrTm9kZSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc2VsZWN0Lm1vY2tSZXR1cm5WYWx1ZSh7XG4gICAgICAgICAgICAuLi5tb2NrU2VsZWN0aW9uLFxuICAgICAgICAgICAgb246IChldmVudCwgaGFuZGxlcikgPT4ge1xuICAgICAgICAgICAgICBtb2NrT24oZXZlbnQsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICBpZiAoZXZlbnQgPT09ICdtb3VzZW1vdmUnICYmIGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICBwb2ludGVyLm1vY2tSZXR1cm5WYWx1ZShbMTAwLCAyMDBdKTtcbiAgICAgICAgICAgICAgICAvLyBTaG91bGQgbm90IHRocm93IGVycm9yIHdoZW4gb25Nb3VzZU1vdmUgaXMgbm90IHByb3ZpZGVkXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IGhhbmRsZXIobW9ja0V2ZW50KSkubm90LnRvVGhyb3coKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJlbmRlcig8Um9vdCB7Li4ucHJvcHN9PmhpPC9Sb290Pik7XG5cbiAgICAgICAgICAvLyBWZXJpZnkgc2NhbGUgbWV0aG9kcyB3ZXJlIG5vdCBjYWxsZWQgKGVhcmx5IHJldHVybiBpbiBtb3VzZU1vdmUpXG4gICAgICAgICAgZXhwZWN0KGdwLnNjYWxlLnguaW52ZXJ0KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICAgIGV4cGVjdChncC5zY2FsZS55LmludmVydCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUErQyxTQUFBSyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFB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
@@ -1,168 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
5
- var _trig = require("../trig");
6
- var _utils = require("../utils");
7
- var _debug = _interopRequireDefault(require("debug"));
8
- var _templateObject, _templateObject2, _templateObject3;
9
- var log = (0, _debug["default"])('pie-lib:plot:trig:test');
10
- var vs = function vs(v) {
11
- if (!v) {
12
- return '';
13
- }
14
- if (Number.isFinite(v.x) && Number.isFinite(v.y)) {
15
- return "[".concat(v.x, ",").concat(v.y, "]");
16
- }
17
- return JSON.stringify(v);
18
- };
19
- var p = function p(strings) {
20
- for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
21
- values[_key - 1] = arguments[_key];
22
- }
23
- return strings.reduce(function (acc, s, index) {
24
- return "".concat(acc).concat(s).concat(vs(values[index]));
25
- }, '');
26
- };
27
- describe('trig', function () {
28
- describe('angle', function () {
29
- var assertAngle = function assertAngle(a, b, expected) {
30
- it(p(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["", ", ", " => ", ""])), a, b, (0, _trig.toDegrees)(expected)), function () {
31
- var result = (0, _trig.angle)(a, b);
32
- expect(result).toBeCloseTo(expected);
33
- });
34
- };
35
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _trig.toRadians)(45));
36
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(0, 1), (0, _trig.toRadians)(90));
37
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _trig.toRadians)(135));
38
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 0), (0, _trig.toRadians)(180));
39
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _trig.toRadians)(225));
40
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(0, -1), (0, _trig.toRadians)(270));
41
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, -1), (0, _trig.toRadians)(315));
42
- assertAngle((0, _utils.xy)(1, 1), (0, _utils.xy)(0, 0), (0, _trig.toRadians)(225));
43
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _trig.toRadians)(45));
44
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), (0, _trig.toRadians)(26.565));
45
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(3, 1), (0, _trig.toRadians)(18.434));
46
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(4, 1), (0, _trig.toRadians)(14.036));
47
- assertAngle((0, _utils.xy)(0, 0), (0, _utils.xy)(5, 1), (0, _trig.toRadians)(11.309));
48
- });
49
- describe('acuteXAngle', function () {
50
- var assertAcute = function assertAcute(input, expected) {
51
- it("".concat((0, _trig.toDegrees)(input), " => ").concat((0, _trig.toDegrees)(expected)), function () {
52
- var result = (0, _trig.acuteXAngle)(input);
53
- log("result: ".concat((0, _trig.toDegrees)(result)));
54
- expect(result).toBeCloseTo(expected);
55
- });
56
- };
57
- assertAcute((0, _trig.toRadians)(45), (0, _trig.toRadians)(45));
58
- assertAcute((0, _trig.toRadians)(100), (0, _trig.toRadians)(80));
59
- assertAcute((0, _trig.toRadians)(190), (0, _trig.toRadians)(10));
60
- assertAcute((0, _trig.toRadians)(350), (0, _trig.toRadians)(10));
61
- });
62
- describe('acuteYAngle', function () {
63
- var assertAcute = function assertAcute(input, expected) {
64
- it("".concat((0, _trig.toDegrees)(input), " => ").concat((0, _trig.toDegrees)(expected)), function () {
65
- var result = (0, _trig.acuteYAngle)(input);
66
- log("result: ".concat((0, _trig.toDegrees)(result)));
67
- expect(result).toBeCloseTo(expected);
68
- });
69
- };
70
- assertAcute((0, _trig.toRadians)(45), (0, _trig.toRadians)(45));
71
- assertAcute((0, _trig.toRadians)(100), (0, _trig.toRadians)(10));
72
- assertAcute((0, _trig.toRadians)(190), (0, _trig.toRadians)(80));
73
- assertAcute((0, _trig.toRadians)(350), (0, _trig.toRadians)(80));
74
- });
75
- describe('edges', function () {
76
- var assertEdges = function assertEdges(domain, range) {
77
- return function (from, to, expected) {
78
- it(p(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["", ", ", " + ", " -> ", " => ", "", ""])), domain, range, from, to, expected[0], expected[1]), function () {
79
- var result = (0, _trig.edges)(domain, range)(from, to);
80
- expect(result[0].x).toBeCloseTo(expected[0].x);
81
- expect(result[0].y).toBeCloseTo(expected[0].y);
82
- expect(result[1].x).toBeCloseTo(expected[1].x);
83
- expect(result[1].y).toBeCloseTo(expected[1].y);
84
- });
85
- };
86
- };
87
- var one = assertEdges({
88
- min: -4,
89
- max: 4
90
- }, {
91
- min: -4,
92
- max: 4
93
- });
94
- one((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), [(0, _utils.xy)(4, 4), (0, _utils.xy)(-4, -4)]);
95
- one((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), [(0, _utils.xy)(4, 2), (0, _utils.xy)(-4, -2)]);
96
- one((0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2), [(0, _utils.xy)(4, 4), (0, _utils.xy)(-4, -4)]);
97
- one((0, _utils.xy)(1, 0), (0, _utils.xy)(2, 0), [(0, _utils.xy)(4, 0), (0, _utils.xy)(-4, 0)]);
98
- one((0, _utils.xy)(1, 0), (0, _utils.xy)(-2, 0), [(0, _utils.xy)(-4, 0), (0, _utils.xy)(4, 0)]);
99
-
100
- /**
101
- * domain {min: -5, max: 5, padding: 0, step: 1, labelStep: 1}labelStep: 1max: 5min: -5padding: 0step: 1__proto__: Object range: {min: -5, max: 5, padding: 0, step: 1, labelStep: 1} a: {x: -5, y: 0} b: {x: -5, y: 2} edges: Point {x: -5, y: 5} Point {x: -5, y: 2}
102
- */
103
- var lineIssue = assertEdges({
104
- min: -5,
105
- max: 5
106
- }, {
107
- min: -5,
108
- max: 5
109
- });
110
- lineIssue((0, _utils.xy)(-5, -0), (0, _utils.xy)(-5, 2), [(0, _utils.xy)(-5, 5), (0, _utils.xy)(-5, -5)]);
111
- });
112
- describe('diffEdge', function () {
113
- var assertDiffEdge = function assertDiffEdge(bounds, from, to, expected) {
114
- it(p(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["<", "> ", " -> ", " => ", ""])), bounds, from, to, expected), function () {
115
- var result = (0, _trig.diffEdge)(bounds, from, to);
116
- expect(result.x).toBeCloseTo(expected.x);
117
- expect(result.y).toBeCloseTo(expected.y);
118
- });
119
- };
120
- var twoTwo = assertDiffEdge.bind(null, (0, _utils.xy)(2, 2));
121
- twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2));
122
- twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 2), (0, _utils.xy)(1, 2));
123
- twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 2), (0, _utils.xy)(2, 2));
124
- twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 2), (0, _utils.xy)(2, 2));
125
- twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-2, 2));
126
- twoTwo((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, -2));
127
- var fourFour = assertDiffEdge.bind(null, (0, _utils.xy)(4, 4));
128
- fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 1), (0, _utils.xy)(4, 4));
129
- fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(1, 2), (0, _utils.xy)(2, 4));
130
- fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(2, 1), (0, _utils.xy)(4, 2));
131
- fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-4, 4));
132
- fourFour((0, _utils.xy)(0, 0), (0, _utils.xy)(-1, 1), (0, _utils.xy)(-4, 4));
133
- assertDiffEdge((0, _utils.xy)(-4, -4), (0, _utils.xy)(0, 0), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-4, -4));
134
- assertDiffEdge((0, _utils.xy)(4, 4), (0, _utils.xy)(1, 1), (0, _utils.xy)(2, 2), (0, _utils.xy)(4, 4));
135
- assertDiffEdge((0, _utils.xy)(4, 4), (0, _utils.xy)(2, 2), (0, _utils.xy)(3, 3), (0, _utils.xy)(4, 4));
136
- assertDiffEdge((0, _utils.xy)(-4, -4), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, -2), (0, _utils.xy)(-4, -4));
137
- assertDiffEdge((0, _utils.xy)(-4, 4), (0, _utils.xy)(-1, -1), (0, _utils.xy)(-2, 0), (0, _utils.xy)(-4, 2));
138
- var lineIssue = assertDiffEdge.bind(null, (0, _utils.xy)(-5, -5));
139
- lineIssue((0, _utils.xy)(-5, 2), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, -5));
140
- //Top Right
141
- assertDiffEdge((0, _utils.xy)(5, 5), (0, _utils.xy)(0, 5), (0, _utils.xy)(2, 5), (0, _utils.xy)(5, 5));
142
- assertDiffEdge((0, _utils.xy)(5, 5), (0, _utils.xy)(5, 0), (0, _utils.xy)(5, 1), (0, _utils.xy)(5, 5));
143
-
144
- // //Bottom Right
145
- assertDiffEdge((0, _utils.xy)(5, -5), (0, _utils.xy)(5, 0), (0, _utils.xy)(5, -0.1), (0, _utils.xy)(5, -5));
146
- assertDiffEdge((0, _utils.xy)(5, -5), (0, _utils.xy)(0, -5), (0, _utils.xy)(1, -5), (0, _utils.xy)(5, -5));
147
-
148
- //Top Left
149
- assertDiffEdge((0, _utils.xy)(-5, 5), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, 0.1), (0, _utils.xy)(-5, 5));
150
- assertDiffEdge((0, _utils.xy)(-5, 5), (0, _utils.xy)(0, 5), (0, _utils.xy)(-1, 5), (0, _utils.xy)(-5, 5));
151
-
152
- //Bottom Left
153
- assertDiffEdge((0, _utils.xy)(-5, -5), (0, _utils.xy)(-5, 0), (0, _utils.xy)(-5, -0.1), (0, _utils.xy)(-5, -5));
154
- assertDiffEdge((0, _utils.xy)(-5, -5), (0, _utils.xy)(0, -5), (0, _utils.xy)(-1, -5), (0, _utils.xy)(-5, -5));
155
- });
156
- describe('getOpposingSide', function () {
157
- var assertOpposingSide = function assertOpposingSide(hyp, angle, expected) {
158
- it("".concat(hyp, ", ").concat(angle, " = ").concat(expected), function () {
159
- var radians = (0, _trig.toRadians)(angle);
160
- var result = (0, _trig.getOpposingSide)(hyp, radians);
161
- expect(result).toBeCloseTo(expected);
162
- });
163
- };
164
- assertOpposingSide(1, 45, 0.707);
165
- assertOpposingSide(1.25, 45, 0.88);
166
- });
167
- });
168
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHJpZyIsInJlcXVpcmUiLCJfdXRpbHMiLCJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJsb2ciLCJkZWJ1ZyIsInZzIiwidiIsIk51bWJlciIsImlzRmluaXRlIiwieCIsInkiLCJjb25jYXQiLCJKU09OIiwic3RyaW5naWZ5IiwicCIsInN0cmluZ3MiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidmFsdWVzIiwiQXJyYXkiLCJfa2V5IiwicmVkdWNlIiwiYWNjIiwicyIsImluZGV4IiwiZGVzY3JpYmUiLCJhc3NlcnRBbmdsZSIsImEiLCJiIiwiZXhwZWN0ZWQiLCJpdCIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwidG9EZWdyZWVzIiwicmVzdWx0IiwiYW5nbGUiLCJleHBlY3QiLCJ0b0JlQ2xvc2VUbyIsInh5IiwidG9SYWRpYW5zIiwiYXNzZXJ0QWN1dGUiLCJpbnB1dCIsImFjdXRlWEFuZ2xlIiwiYWN1dGVZQW5nbGUiLCJhc3NlcnRFZGdlcyIsImRvbWFpbiIsInJhbmdlIiwiZnJvbSIsInRvIiwiZWRnZXMiLCJvbmUiLCJtaW4iLCJtYXgiLCJsaW5lSXNzdWUiLCJhc3NlcnREaWZmRWRnZSIsImJvdW5kcyIsImRpZmZFZGdlIiwidHdvVHdvIiwiYmluZCIsImZvdXJGb3VyIiwiYXNzZXJ0T3Bwb3NpbmdTaWRlIiwiaHlwIiwicmFkaWFucyIsImdldE9wcG9zaW5nU2lkZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdHJpZy50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFjdXRlWEFuZ2xlLCBhY3V0ZVlBbmdsZSwgYW5nbGUsIGRpZmZFZGdlLCBlZGdlcywgZ2V0T3Bwb3NpbmdTaWRlLCB0b0RlZ3JlZXMsIHRvUmFkaWFucyB9IGZyb20gJy4uL3RyaWcnO1xuaW1wb3J0IHsgeHkgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygncGllLWxpYjpwbG90OnRyaWc6dGVzdCcpO1xuXG5jb25zdCB2cyA9ICh2KSA9PiB7XG4gIGlmICghdikge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmIChOdW1iZXIuaXNGaW5pdGUodi54KSAmJiBOdW1iZXIuaXNGaW5pdGUodi55KSkge1xuICAgIHJldHVybiBgWyR7di54fSwke3YueX1dYDtcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG59O1xuY29uc3QgcCA9IChzdHJpbmdzLCAuLi52YWx1ZXMpID0+IHtcbiAgcmV0dXJuIHN0cmluZ3MucmVkdWNlKChhY2MsIHMsIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGAke2FjY30ke3N9JHt2cyh2YWx1ZXNbaW5kZXhdKX1gO1xuICB9LCAnJyk7XG59O1xuZGVzY3JpYmUoJ3RyaWcnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdhbmdsZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRBbmdsZSA9IChhLCBiLCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQocGAke2F9LCAke2J9ID0+ICR7dG9EZWdyZWVzKGV4cGVjdGVkKX1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGFuZ2xlKGEsIGIpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0JlQ2xvc2VUbyhleHBlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDEsIDEpLCB0b1JhZGlhbnMoNDUpKTtcbiAgICBhc3NlcnRBbmdsZSh4eSgwLCAwKSwgeHkoMCwgMSksIHRvUmFkaWFucyg5MCkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgtMSwgMSksIHRvUmFkaWFucygxMzUpKTtcbiAgICBhc3NlcnRBbmdsZSh4eSgwLCAwKSwgeHkoLTEsIDApLCB0b1JhZGlhbnMoMTgwKSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KC0xLCAtMSksIHRvUmFkaWFucygyMjUpKTtcbiAgICBhc3NlcnRBbmdsZSh4eSgwLCAwKSwgeHkoMCwgLTEpLCB0b1JhZGlhbnMoMjcwKSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDEsIC0xKSwgdG9SYWRpYW5zKDMxNSkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDEsIDEpLCB4eSgwLCAwKSwgdG9SYWRpYW5zKDIyNSkpO1xuICAgIGFzc2VydEFuZ2xlKHh5KDAsIDApLCB4eSgxLCAxKSwgdG9SYWRpYW5zKDQ1KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDIsIDEpLCB0b1JhZGlhbnMoMjYuNTY1KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDMsIDEpLCB0b1JhZGlhbnMoMTguNDM0KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDQsIDEpLCB0b1JhZGlhbnMoMTQuMDM2KSk7XG4gICAgYXNzZXJ0QW5nbGUoeHkoMCwgMCksIHh5KDUsIDEpLCB0b1JhZGlhbnMoMTEuMzA5KSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhY3V0ZVhBbmdsZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRBY3V0ZSA9IChpbnB1dCwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAke3RvRGVncmVlcyhpbnB1dCl9ID0+ICR7dG9EZWdyZWVzKGV4cGVjdGVkKX1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGFjdXRlWEFuZ2xlKGlucHV0KTtcbiAgICAgICAgbG9nKGByZXN1bHQ6ICR7dG9EZWdyZWVzKHJlc3VsdCl9YCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVDbG9zZVRvKGV4cGVjdGVkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBhc3NlcnRBY3V0ZSh0b1JhZGlhbnMoNDUpLCB0b1JhZGlhbnMoNDUpKTtcbiAgICBhc3NlcnRBY3V0ZSh0b1JhZGlhbnMoMTAwKSwgdG9SYWRpYW5zKDgwKSk7XG4gICAgYXNzZXJ0QWN1dGUodG9SYWRpYW5zKDE5MCksIHRvUmFkaWFucygxMCkpO1xuICAgIGFzc2VydEFjdXRlKHRvUmFkaWFucygzNTApLCB0b1JhZGlhbnMoMTApKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2FjdXRlWUFuZ2xlJywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydEFjdXRlID0gKGlucHV0LCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQoYCR7dG9EZWdyZWVzKGlucHV0KX0gPT4gJHt0b0RlZ3JlZXMoZXhwZWN0ZWQpfWAsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYWN1dGVZQW5nbGUoaW5wdXQpO1xuICAgICAgICBsb2coYHJlc3VsdDogJHt0b0RlZ3JlZXMocmVzdWx0KX1gKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZUNsb3NlVG8oZXhwZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydEFjdXRlKHRvUmFkaWFucyg0NSksIHRvUmFkaWFucyg0NSkpO1xuICAgIGFzc2VydEFjdXRlKHRvUmFkaWFucygxMDApLCB0b1JhZGlhbnMoMTApKTtcbiAgICBhc3NlcnRBY3V0ZSh0b1JhZGlhbnMoMTkwKSwgdG9SYWRpYW5zKDgwKSk7XG4gICAgYXNzZXJ0QWN1dGUodG9SYWRpYW5zKDM1MCksIHRvUmFkaWFucyg4MCkpO1xuICB9KTtcblxuICBkZXNjcmliZSgnZWRnZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzZXJ0RWRnZXMgPSAoZG9tYWluLCByYW5nZSkgPT4gKGZyb20sIHRvLCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQocGAke2RvbWFpbn0sICR7cmFuZ2V9ICsgJHtmcm9tfSAtPiAke3RvfSA9PiAke2V4cGVjdGVkWzBdfSR7ZXhwZWN0ZWRbMV19YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBlZGdlcyhkb21haW4sIHJhbmdlKShmcm9tLCB0byk7XG4gICAgICAgIGV4cGVjdChyZXN1bHRbMF0ueCkudG9CZUNsb3NlVG8oZXhwZWN0ZWRbMF0ueCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHRbMF0ueSkudG9CZUNsb3NlVG8oZXhwZWN0ZWRbMF0ueSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHRbMV0ueCkudG9CZUNsb3NlVG8oZXhwZWN0ZWRbMV0ueCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHRbMV0ueSkudG9CZUNsb3NlVG8oZXhwZWN0ZWRbMV0ueSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25lID0gYXNzZXJ0RWRnZXMoeyBtaW46IC00LCBtYXg6IDQgfSwgeyBtaW46IC00LCBtYXg6IDQgfSk7XG4gICAgb25lKHh5KDAsIDApLCB4eSgxLCAxKSwgW3h5KDQsIDQpLCB4eSgtNCwgLTQpXSk7XG4gICAgb25lKHh5KDAsIDApLCB4eSgyLCAxKSwgW3h5KDQsIDIpLCB4eSgtNCwgLTIpXSk7XG4gICAgb25lKHh5KDEsIDEpLCB4eSgyLCAyKSwgW3h5KDQsIDQpLCB4eSgtNCwgLTQpXSk7XG4gICAgb25lKHh5KDEsIDApLCB4eSgyLCAwKSwgW3h5KDQsIDApLCB4eSgtNCwgMCldKTtcbiAgICBvbmUoeHkoMSwgMCksIHh5KC0yLCAwKSwgW3h5KC00LCAwKSwgeHkoNCwgMCldKTtcblxuICAgIC8qKlxuICAgICAqIGRvbWFpbiB7bWluOiAtNSwgbWF4OiA1LCBwYWRkaW5nOiAwLCBzdGVwOiAxLCBsYWJlbFN0ZXA6IDF9bGFiZWxTdGVwOiAxbWF4OiA1bWluOiAtNXBhZGRpbmc6IDBzdGVwOiAxX19wcm90b19fOiBPYmplY3QgcmFuZ2U6ICB7bWluOiAtNSwgbWF4OiA1LCBwYWRkaW5nOiAwLCBzdGVwOiAxLCBsYWJlbFN0ZXA6IDF9IGE6IHt4OiAtNSwgeTogMH0gYjoge3g6IC01LCB5OiAyfSBlZGdlczogUG9pbnTCoHt4OiAtNSwgeTogNX0gUG9pbnTCoHt4OiAtNSwgeTogMn1cbiAgICAgKi9cbiAgICBjb25zdCBsaW5lSXNzdWUgPSBhc3NlcnRFZGdlcyh7IG1pbjogLTUsIG1heDogNSB9LCB7IG1pbjogLTUsIG1heDogNSB9KTtcbiAgICBsaW5lSXNzdWUoeHkoLTUsIC0wKSwgeHkoLTUsIDIpLCBbeHkoLTUsIDUpLCB4eSgtNSwgLTUpXSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkaWZmRWRnZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnREaWZmRWRnZSA9IChib3VuZHMsIGZyb20sIHRvLCBleHBlY3RlZCkgPT4ge1xuICAgICAgaXQocGA8JHtib3VuZHN9PiAke2Zyb219IC0+ICR7dG99ID0+ICR7ZXhwZWN0ZWR9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBkaWZmRWRnZShib3VuZHMsIGZyb20sIHRvKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC54KS50b0JlQ2xvc2VUbyhleHBlY3RlZC54KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC55KS50b0JlQ2xvc2VUbyhleHBlY3RlZC55KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB0d29Ud28gPSBhc3NlcnREaWZmRWRnZS5iaW5kKG51bGwsIHh5KDIsIDIpKTtcbiAgICB0d29Ud28oeHkoMCwgMCksIHh5KDEsIDEpLCB4eSgyLCAyKSk7XG4gICAgdHdvVHdvKHh5KDAsIDApLCB4eSgxLCAyKSwgeHkoMSwgMikpO1xuICAgIHR3b1R3byh4eSgwLCAwKSwgeHkoMiwgMiksIHh5KDIsIDIpKTtcbiAgICB0d29Ud28oeHkoMCwgMCksIHh5KDIsIDIpLCB4eSgyLCAyKSk7XG4gICAgdHdvVHdvKHh5KDAsIDApLCB4eSgtMSwgMSksIHh5KC0yLCAyKSk7XG4gICAgdHdvVHdvKHh5KDAsIDApLCB4eSgtMSwgLTEpLCB4eSgtMiwgLTIpKTtcbiAgICBjb25zdCBmb3VyRm91ciA9IGFzc2VydERpZmZFZGdlLmJpbmQobnVsbCwgeHkoNCwgNCkpO1xuXG4gICAgZm91ckZvdXIoeHkoMCwgMCksIHh5KDEsIDEpLCB4eSg0LCA0KSk7XG4gICAgZm91ckZvdXIoeHkoMCwgMCksIHh5KDEsIDIpLCB4eSgyLCA0KSk7XG4gICAgZm91ckZvdXIoeHkoMCwgMCksIHh5KDIsIDEpLCB4eSg0LCAyKSk7XG4gICAgZm91ckZvdXIoeHkoMCwgMCksIHh5KC0xLCAxKSwgeHkoLTQsIDQpKTtcbiAgICBmb3VyRm91cih4eSgwLCAwKSwgeHkoLTEsIDEpLCB4eSgtNCwgNCkpO1xuXG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoLTQsIC00KSwgeHkoMCwgMCksIHh5KC0xLCAtMSksIHh5KC00LCAtNCkpO1xuICAgIGFzc2VydERpZmZFZGdlKHh5KDQsIDQpLCB4eSgxLCAxKSwgeHkoMiwgMiksIHh5KDQsIDQpKTtcbiAgICBhc3NlcnREaWZmRWRnZSh4eSg0LCA0KSwgeHkoMiwgMiksIHh5KDMsIDMpLCB4eSg0LCA0KSk7XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoLTQsIC00KSwgeHkoLTEsIC0xKSwgeHkoLTIsIC0yKSwgeHkoLTQsIC00KSk7XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoLTQsIDQpLCB4eSgtMSwgLTEpLCB4eSgtMiwgMCksIHh5KC00LCAyKSk7XG5cbiAgICBjb25zdCBsaW5lSXNzdWUgPSBhc3NlcnREaWZmRWRnZS5iaW5kKG51bGwsIHh5KC01LCAtNSkpO1xuXG4gICAgbGluZUlzc3VlKHh5KC01LCAyKSwgeHkoLTUsIDApLCB4eSgtNSwgLTUpKTtcbiAgICAvL1RvcCBSaWdodFxuICAgIGFzc2VydERpZmZFZGdlKHh5KDUsIDUpLCB4eSgwLCA1KSwgeHkoMiwgNSksIHh5KDUsIDUpKTtcbiAgICBhc3NlcnREaWZmRWRnZSh4eSg1LCA1KSwgeHkoNSwgMCksIHh5KDUsIDEpLCB4eSg1LCA1KSk7XG5cbiAgICAvLyAvL0JvdHRvbSBSaWdodFxuICAgIGFzc2VydERpZmZFZGdlKHh5KDUsIC01KSwgeHkoNSwgMCksIHh5KDUsIC0wLjEpLCB4eSg1LCAtNSkpO1xuICAgIGFzc2VydERpZmZFZGdlKHh5KDUsIC01KSwgeHkoMCwgLTUpLCB4eSgxLCAtNSksIHh5KDUsIC01KSk7XG5cbiAgICAvL1RvcCBMZWZ0XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoLTUsIDUpLCB4eSgtNSwgMCksIHh5KC01LCAwLjEpLCB4eSgtNSwgNSkpO1xuICAgIGFzc2VydERpZmZFZGdlKHh5KC01LCA1KSwgeHkoMCwgNSksIHh5KC0xLCA1KSwgeHkoLTUsIDUpKTtcblxuICAgIC8vQm90dG9tIExlZnRcbiAgICBhc3NlcnREaWZmRWRnZSh4eSgtNSwgLTUpLCB4eSgtNSwgMCksIHh5KC01LCAtMC4xKSwgeHkoLTUsIC01KSk7XG4gICAgYXNzZXJ0RGlmZkVkZ2UoeHkoLTUsIC01KSwgeHkoMCwgLTUpLCB4eSgtMSwgLTUpLCB4eSgtNSwgLTUpKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldE9wcG9zaW5nU2lkZScsICgpID0+IHtcbiAgICBjb25zdCBhc3NlcnRPcHBvc2luZ1NpZGUgPSAoaHlwLCBhbmdsZSwgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGl0KGAke2h5cH0sICR7YW5nbGV9ID0gJHtleHBlY3RlZH1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhZGlhbnMgPSB0b1JhZGlhbnMoYW5nbGUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZXRPcHBvc2luZ1NpZGUoaHlwLCByYWRpYW5zKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZUNsb3NlVG8oZXhwZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGFzc2VydE9wcG9zaW5nU2lkZSgxLCA0NSwgMC43MDcpO1xuICAgIGFzc2VydE9wcG9zaW5nU2lkZSgxLjI1LCA0NSwgMC44OCk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFBMEIsSUFBQUksZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQTtBQUUxQixJQUFNQyxHQUFHLEdB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QUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUFDLGVBQVMsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUNqRFosV0FBVyxDQUFDLElBQUFXLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUFDLGVBQVMsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUNoRFosV0FBVyxDQUFDLElBQUFXLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUFDLGVBQVMsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUNoRFosV0FBVyxDQUFDLElBQUFXLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQyxlQUFTLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0NaLFdBQVcsQ0FBQyxJQUFBVyxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUMsZUFBUyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDWixXQUFXLENBQUMsSUFBQVcsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFDLGVBQVMsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUNsRFosV0FBVyxDQUFDLElBQUFXLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQyxlQUFTLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDbERaLFdBQVcsQ0FBQyxJQUFBVyxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUMsZUFBUyxFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xEWixXQUFXLENBQUMsSUFBQVcsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFDLGVBQVMsRUFBQyxNQUFNLENBQUMsQ0FBQztFQUNwRCxDQUFDLENBQUM7RUFFRmIsUUFBUSxDQUFDLGFBQWEsRUFBRSxZQUFNO0lBQzVCLElBQU1jLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJQyxLQUFLLEVBQUVYLFFBQVEsRUFBSztNQUN2Q0MsRUFBRSxJQUFBcEIsTUFBQSxDQUFJLElBQUFzQixlQUFTLEVBQUNRLEtBQUssQ0FBQyxVQUFBOUIsTUFBQSxDQUFPLElBQUFzQixlQUFTLEVBQUNILFFBQVEsQ0FBQyxHQUFJLFlBQU07UUFDeEQsSUFBTUksTUFBTSxHQUFHLElBQUFRLGlCQUFXLEVBQUNELEtBQUssQ0FBQztRQUNqQ3RDLEdBQUcsWUFBQVEsTUFBQSxDQUFZLElBQUFzQixlQUFTLEVBQUNDLE1BQU0sQ0FBQyxDQUFFLENBQUM7UUFDbkNFLE1BQU0sQ0FBQ0YsTUFBTSxDQUFDLENBQUNHLFdBQVcsQ0FBQ1AsUUFBUSxDQUFDO01BQ3RDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRFUsV0FBVyxDQUFDLElBQUFELGVBQVMsRUFBQyxFQUFFLENBQUMsRUFBRSxJQUFBQSxlQUFTLEVBQUMsRUFBRSxDQUFDLENBQUM7SUFDekNDLFdBQVcsQ0FBQyxJQUFBRCxlQUFTLEVBQUMsR0FBRyxDQUFDLEVBQUUsSUFBQUEsZUFBUyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFDQyxXQUFXLENBQUMsSUFBQUQsZUFBUyxFQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUFBLGVBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQztJQUMxQ0MsV0FBVyxDQUFDLElBQUFELGVBQVMsRUFBQyxHQUFHLENBQUMsRUFBRSxJQUFBQSxlQUFTLEVBQUMsRUFBRSxDQUFDLENBQUM7RUFDNUMsQ0FBQyxDQUFDO0VBRUZiLFFBQVEsQ0FBQyxhQUFhLEVBQUUsWUFBTTtJQUM1QixJQUFNYyxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBSUMsS0FBSyxFQUFFWCxRQUFRLEVBQUs7TUFDdkNDLEVBQUUsSUFBQXBCLE1BQUEsQ0FBSSxJQUFBc0IsZUFBUyxFQUFDUSxLQUFLLENBQUMsVUFBQTlCLE1BQUEsQ0FBTyxJQUFBc0IsZUFBUyxFQUFDSCxRQUFRLENBQUMsR0FBSSxZQUFNO1FBQ3hELElBQU1JLE1BQU0sR0FBRyxJQUFBUyxpQkFBVyxFQUFDRixLQUFLLENBQUM7UUFDakN0QyxHQUFHLFlBQUFRLE1BQUEsQ0FBWSxJQUFBc0IsZUFBUyxFQUFDQyxNQUFNLENBQUMsQ0FBRSxDQUFDO1FBQ25DRSxNQUFNLENBQUNGLE1BQU0sQ0FBQyxDQUFDRyxXQUFXLENBQUNQLFFBQVEsQ0FBQztNQUN0QyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRURVLFdBQVcsQ0FBQyxJQUFBRCxlQUFTLEVBQUMsRUFBRSxDQUFDLEVBQUUsSUFBQUEsZUFBUyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDQyxXQUFXLENBQUMsSUFBQUQsZUFBUyxFQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUFBLGVBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQztJQUMxQ0MsV0FBVyxDQUFDLElBQUFELGVBQVMsRUFBQyxHQUFHLENBQUMsRUFBRSxJQUFBQSxlQUFTLEVBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUNDLFdBQVcsQ0FBQyxJQUFBRCxlQUFTLEVBQUMsR0FBRyxDQUFDLEVBQUUsSUFBQUEsZUFBUyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzVDLENBQUMsQ0FBQztFQUVGYixRQUFRLENBQUMsT0FBTyxFQUFFLFlBQU07SUFDdEIsSUFBTWtCLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJQyxNQUFNLEVBQUVDLEtBQUs7TUFBQSxPQUFLLFVBQUNDLElBQUksRUFBRUMsRUFBRSxFQUFFbEIsUUFBUSxFQUFLO1FBQzdEQyxFQUFFLENBQUNqQixDQUFDLENBQUFiLGdCQUFBLEtBQUFBLGdCQUFBLE9BQUErQix1QkFBQSwwREFBR2EsTUFBTSxFQUFLQyxLQUFLLEVBQU1DLElBQUksRUFBT0MsRUFBRSxFQUFPbEIsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFHQSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUksWUFBTTtVQUNsRixJQUFNSSxNQUFNLEdBQUcsSUFBQWUsV0FBSyxFQUFDSixNQUFNLEVBQUVDLEtBQUssQ0FBQyxDQUFDQyxJQUFJLEVBQUVDLEVBQUUsQ0FBQztVQUM3Q1osTUFBTSxDQUFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUN6QixDQUFDLENBQUMsQ0FBQzRCLFdBQVcsQ0FBQ1AsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDckIsQ0FBQyxDQUFDO1VBQzlDMkIsTUFBTSxDQUFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUN4QixDQUFDLENBQUMsQ0FBQzJCLFdBQVcsQ0FBQ1AsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDcEIsQ0FBQyxDQUFDO1VBQzlDMEIsTUFBTSxDQUFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUN6QixDQUFDLENBQUMsQ0FBQzRCLFdBQVcsQ0FBQ1AsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDckIsQ0FBQyxDQUFDO1VBQzlDMkIsTUFBTSxDQUFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUN4QixDQUFDLENBQUMsQ0FBQzJCLFdBQVcsQ0FBQ1AsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDcEIsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQztNQUNKLENBQUM7SUFBQTtJQUVELElBQU13QyxHQUFHLEdBQUdOLFdBQVcsQ0FBQztNQUFFTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQUVDLEdBQUcsRUFBRTtJQUFFLENBQUMsRUFBRTtNQUFFRCxHQUFHLEVBQUUsQ0FBQyxDQUFDO01BQUVDLEdBQUcsRUFBRTtJQUFFLENBQUMsQ0FBQztJQUNqRUYsR0FBRyxDQUFDLElBQUFaLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQ1ksR0FBRyxDQUFDLElBQUFaLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQ1ksR0FBRyxDQUFDLElBQUFaLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQ1ksR0FBRyxDQUFDLElBQUFaLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUNZLEdBQUcsQ0FBQyxJQUFBWixTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLENB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Q0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdENtQixNQUFNLENBQUMsSUFBQW5CLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBTXFCLFFBQVEsR0FBR0wsY0FBYyxDQUFDSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUFwQixTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXBEcUIsUUFBUSxDQUFDLElBQUFyQixTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0Q3FCLFFBQVEsQ0FBQyxJQUFBckIsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdENxQixRQUFRLENBQUMsSUFBQXJCLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDcUIsUUFBUSxDQUFDLElBQUFyQixTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeENxQixRQUFRLENBQUMsSUFBQXJCLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV4Q2dCLGNBQWMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RGdCLGNBQWMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RGdCLGNBQWMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RGdCLGNBQWMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOURnQixjQUFjLENBQUMsSUFBQWhCLFNBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTNELElBQU1lLFNBQVMsR0FBR0MsY0FBYyxDQUFDSSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUFwQixTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2RGUsU0FBUyxDQUFDLElBQUFmLFNBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0M7SUFDQWdCLGNBQWMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RGdCLGNBQWMsQ0FBQyxJQUFBaEIsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFBQSxTQUFFLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUFBLFNBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBQUEsU0FBRSxFQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFdEQ7SUFDQWdCLGNBQWMsQ0FBQyxJQUFBaEIsU0FB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