@pie-lib/config-ui 12.0.0-next.0 → 12.1.0-next.0
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.
- package/lib/__tests__/alert-dialog.test.js +262 -0
- package/lib/__tests__/checkbox.test.js +227 -0
- package/lib/__tests__/choice-utils.test.js +14 -0
- package/lib/__tests__/form-section.test.js +252 -0
- package/lib/__tests__/help.test.js +270 -0
- package/lib/__tests__/input.test.js +268 -0
- package/lib/__tests__/langs.test.js +541 -0
- package/lib/__tests__/number-text-field-custom.test.js +362 -0
- package/lib/__tests__/number-text-field.test.js +421 -0
- package/lib/__tests__/radio-with-label.test.js +233 -0
- package/lib/__tests__/settings-panel.test.js +184 -0
- package/lib/__tests__/settings.test.js +653 -0
- package/lib/__tests__/tabs.test.js +211 -0
- package/lib/__tests__/two-choice.test.js +124 -0
- package/lib/__tests__/with-stateful-model.test.js +221 -0
- package/lib/alert-dialog.js +1 -1
- package/lib/checkbox.js +1 -1
- package/lib/choice-configuration/__tests__/feedback-menu.test.js +287 -0
- package/lib/choice-configuration/__tests__/index.test.js +253 -0
- package/lib/choice-configuration/feedback-menu.js +1 -1
- package/lib/choice-configuration/index.js +3 -3
- package/lib/choice-configuration/index.js.map +1 -1
- package/lib/choice-utils.js +1 -1
- package/lib/feedback-config/__tests__/feedback-config.test.js +201 -0
- package/lib/feedback-config/__tests__/feedback-selector.test.js +177 -0
- package/lib/feedback-config/feedback-selector.js +3 -3
- package/lib/feedback-config/feedback-selector.js.map +1 -1
- package/lib/feedback-config/group.js +1 -1
- package/lib/feedback-config/index.js +1 -1
- package/lib/form-section.js +1 -1
- package/lib/help.js +1 -1
- package/lib/index.js +1 -1
- package/lib/input.js +1 -1
- package/lib/inputs.js +1 -1
- package/lib/langs.js +1 -1
- package/lib/layout/__tests__/config.layout.test.js +70 -0
- package/lib/layout/__tests__/layout-content.test.js +6 -0
- package/lib/layout/config-layout.js +1 -1
- package/lib/layout/index.js +1 -1
- package/lib/layout/layout-contents.js +1 -1
- package/lib/layout/settings-box.js +1 -1
- package/lib/mui-box/index.js +1 -1
- package/lib/number-text-field-custom.js +1 -1
- package/lib/number-text-field.js +1 -1
- package/lib/radio-with-label.js +1 -1
- package/lib/settings/display-size.js +1 -1
- package/lib/settings/index.js +1 -1
- package/lib/settings/panel.js +1 -1
- package/lib/settings/settings-radio-label.js +1 -1
- package/lib/settings/toggle.js +1 -1
- package/lib/tabs/index.js +1 -1
- package/lib/tags-input/__tests__/index.test.js +183 -0
- package/lib/tags-input/index.js +1 -1
- package/lib/two-choice.js +1 -1
- package/lib/with-stateful-model.js +1 -1
- package/package.json +5 -13
- package/src/choice-configuration/__tests__/index.test.jsx +1 -1
- package/src/choice-configuration/index.jsx +68 -75
- package/src/feedback-config/__tests__/feedback-selector.test.jsx +3 -13
- package/src/feedback-config/feedback-selector.jsx +3 -7
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
6
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _react2 = require("@testing-library/react");
|
|
9
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
10
|
+
var _numberTextField = require("../number-text-field");
|
|
11
|
+
describe('NumberTextField', function () {
|
|
12
|
+
var defaultProps = {
|
|
13
|
+
value: 1,
|
|
14
|
+
min: 1,
|
|
15
|
+
max: 10,
|
|
16
|
+
classes: {},
|
|
17
|
+
onChange: jest.fn()
|
|
18
|
+
};
|
|
19
|
+
beforeEach(function () {
|
|
20
|
+
jest.clearAllMocks();
|
|
21
|
+
});
|
|
22
|
+
describe('rendering', function () {
|
|
23
|
+
it('renders TextField with correct value', function () {
|
|
24
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, defaultProps));
|
|
25
|
+
var input = _react2.screen.getByRole('spinbutton');
|
|
26
|
+
expect(input).toHaveValue(1);
|
|
27
|
+
});
|
|
28
|
+
it('renders with custom label', function () {
|
|
29
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
30
|
+
label: "Custom Label"
|
|
31
|
+
})));
|
|
32
|
+
expect(_react2.screen.getByLabelText('Custom Label')).toBeInTheDocument();
|
|
33
|
+
});
|
|
34
|
+
it('renders with suffix', function () {
|
|
35
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
36
|
+
suffix: "px"
|
|
37
|
+
}))),
|
|
38
|
+
container = _render.container;
|
|
39
|
+
expect(_react2.screen.getByText('px')).toBeInTheDocument();
|
|
40
|
+
});
|
|
41
|
+
it('renders without suffix when not provided', function () {
|
|
42
|
+
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, defaultProps)),
|
|
43
|
+
container = _render2.container;
|
|
44
|
+
var input = _react2.screen.getByRole('spinbutton');
|
|
45
|
+
expect(input).toBeInTheDocument();
|
|
46
|
+
});
|
|
47
|
+
it('renders as disabled when disabled prop is true', function () {
|
|
48
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
49
|
+
disabled: true
|
|
50
|
+
})));
|
|
51
|
+
var input = _react2.screen.getByRole('spinbutton');
|
|
52
|
+
expect(input).toBeDisabled();
|
|
53
|
+
});
|
|
54
|
+
it('renders as enabled when disabled prop is false', function () {
|
|
55
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
56
|
+
disabled: false
|
|
57
|
+
})));
|
|
58
|
+
var input = _react2.screen.getByRole('spinbutton');
|
|
59
|
+
expect(input).not.toBeDisabled();
|
|
60
|
+
});
|
|
61
|
+
it('renders with custom variant', function () {
|
|
62
|
+
var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
63
|
+
variant: "outlined"
|
|
64
|
+
}))),
|
|
65
|
+
container = _render3.container;
|
|
66
|
+
expect(container.querySelector('input')).toBeInTheDocument();
|
|
67
|
+
});
|
|
68
|
+
it('renders with disableUnderline variant', function () {
|
|
69
|
+
var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
70
|
+
disableUnderline: true
|
|
71
|
+
}))),
|
|
72
|
+
container = _render4.container;
|
|
73
|
+
expect(container.querySelector('input')).toBeInTheDocument();
|
|
74
|
+
});
|
|
75
|
+
it('renders with custom className', function () {
|
|
76
|
+
var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
77
|
+
className: "custom-class"
|
|
78
|
+
}))),
|
|
79
|
+
container = _render5.container;
|
|
80
|
+
expect(container.querySelector('.custom-class')).toBeInTheDocument();
|
|
81
|
+
});
|
|
82
|
+
it('renders with custom inputClassName', function () {
|
|
83
|
+
var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
84
|
+
inputClassName: "input-class"
|
|
85
|
+
}))),
|
|
86
|
+
container = _render6.container;
|
|
87
|
+
expect(container.querySelector('.input-class')).toBeInTheDocument();
|
|
88
|
+
});
|
|
89
|
+
it('renders with ShrinkLabel InputLabelProps', function () {
|
|
90
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
91
|
+
label: "Shrink Label"
|
|
92
|
+
})));
|
|
93
|
+
expect(_react2.screen.getByLabelText('Shrink Label')).toBeInTheDocument();
|
|
94
|
+
});
|
|
95
|
+
it('renders with margin normal', function () {
|
|
96
|
+
var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, defaultProps)),
|
|
97
|
+
container = _render7.container;
|
|
98
|
+
expect(container.querySelector('input')).toBeInTheDocument();
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
describe('onChange callback', function () {
|
|
102
|
+
it('calls onChange with clamped value on blur', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
103
|
+
var user, onChange, input;
|
|
104
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
105
|
+
while (1) switch (_context.prev = _context.next) {
|
|
106
|
+
case 0:
|
|
107
|
+
user = _userEvent["default"].setup();
|
|
108
|
+
onChange = jest.fn();
|
|
109
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
110
|
+
onChange: onChange
|
|
111
|
+
})));
|
|
112
|
+
input = _react2.screen.getByRole('spinbutton');
|
|
113
|
+
_context.next = 1;
|
|
114
|
+
return user.clear(input);
|
|
115
|
+
case 1:
|
|
116
|
+
_context.next = 2;
|
|
117
|
+
return user.type(input, '15');
|
|
118
|
+
case 2:
|
|
119
|
+
_react2.fireEvent.blur(input);
|
|
120
|
+
_context.next = 3;
|
|
121
|
+
return (0, _react2.waitFor)(function () {
|
|
122
|
+
expect(onChange).toHaveBeenCalledWith(expect.anything(), 10);
|
|
123
|
+
});
|
|
124
|
+
case 3:
|
|
125
|
+
case "end":
|
|
126
|
+
return _context.stop();
|
|
127
|
+
}
|
|
128
|
+
}, _callee);
|
|
129
|
+
})));
|
|
130
|
+
it('calls onChange on Enter key press', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
131
|
+
var user, onChange, input;
|
|
132
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
133
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
134
|
+
case 0:
|
|
135
|
+
user = _userEvent["default"].setup();
|
|
136
|
+
onChange = jest.fn();
|
|
137
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
138
|
+
onChange: onChange
|
|
139
|
+
})));
|
|
140
|
+
input = _react2.screen.getByRole('spinbutton');
|
|
141
|
+
_context2.next = 1;
|
|
142
|
+
return user.clear(input);
|
|
143
|
+
case 1:
|
|
144
|
+
_context2.next = 2;
|
|
145
|
+
return user.type(input, '5');
|
|
146
|
+
case 2:
|
|
147
|
+
_context2.next = 3;
|
|
148
|
+
return user.keyboard('{Enter}');
|
|
149
|
+
case 3:
|
|
150
|
+
expect(input).toHaveValue(5);
|
|
151
|
+
case 4:
|
|
152
|
+
case "end":
|
|
153
|
+
return _context2.stop();
|
|
154
|
+
}
|
|
155
|
+
}, _callee2);
|
|
156
|
+
})));
|
|
157
|
+
it('calls onChange during typing (unvalidated)', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
158
|
+
var user, onChange, input;
|
|
159
|
+
return _regenerator["default"].wrap(function (_context3) {
|
|
160
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
161
|
+
case 0:
|
|
162
|
+
user = _userEvent["default"].setup();
|
|
163
|
+
onChange = jest.fn();
|
|
164
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
165
|
+
onChange: onChange
|
|
166
|
+
})));
|
|
167
|
+
input = _react2.screen.getByRole('spinbutton');
|
|
168
|
+
_context3.next = 1;
|
|
169
|
+
return user.clear(input);
|
|
170
|
+
case 1:
|
|
171
|
+
_context3.next = 2;
|
|
172
|
+
return user.type(input, '7');
|
|
173
|
+
case 2:
|
|
174
|
+
// onChange should be called at least once during typing
|
|
175
|
+
expect(input).toHaveValue(7);
|
|
176
|
+
case 3:
|
|
177
|
+
case "end":
|
|
178
|
+
return _context3.stop();
|
|
179
|
+
}
|
|
180
|
+
}, _callee3);
|
|
181
|
+
})));
|
|
182
|
+
it('does not call onChange when value does not change on blur', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
183
|
+
var user, onChange, input;
|
|
184
|
+
return _regenerator["default"].wrap(function (_context4) {
|
|
185
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
186
|
+
case 0:
|
|
187
|
+
user = _userEvent["default"].setup();
|
|
188
|
+
onChange = jest.fn();
|
|
189
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
190
|
+
value: 5,
|
|
191
|
+
onChange: onChange
|
|
192
|
+
})));
|
|
193
|
+
input = _react2.screen.getByRole('spinbutton');
|
|
194
|
+
_react2.fireEvent.blur(input);
|
|
195
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
196
|
+
case 1:
|
|
197
|
+
case "end":
|
|
198
|
+
return _context4.stop();
|
|
199
|
+
}
|
|
200
|
+
}, _callee4);
|
|
201
|
+
})));
|
|
202
|
+
});
|
|
203
|
+
describe('range constraints', function () {
|
|
204
|
+
it('handles only min constraint', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
205
|
+
var user, _render8, container, input;
|
|
206
|
+
return _regenerator["default"].wrap(function (_context5) {
|
|
207
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
208
|
+
case 0:
|
|
209
|
+
user = _userEvent["default"].setup();
|
|
210
|
+
_render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
|
|
211
|
+
value: 5,
|
|
212
|
+
min: 3,
|
|
213
|
+
onChange: jest.fn()
|
|
214
|
+
})), container = _render8.container;
|
|
215
|
+
input = _react2.screen.getByRole('spinbutton');
|
|
216
|
+
expect(input).toHaveValue(5);
|
|
217
|
+
case 1:
|
|
218
|
+
case "end":
|
|
219
|
+
return _context5.stop();
|
|
220
|
+
}
|
|
221
|
+
}, _callee5);
|
|
222
|
+
})));
|
|
223
|
+
it('handles only max constraint', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
224
|
+
var user, _render9, container, input;
|
|
225
|
+
return _regenerator["default"].wrap(function (_context6) {
|
|
226
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
227
|
+
case 0:
|
|
228
|
+
user = _userEvent["default"].setup();
|
|
229
|
+
_render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
|
|
230
|
+
value: 5,
|
|
231
|
+
max: 10,
|
|
232
|
+
onChange: jest.fn()
|
|
233
|
+
})), container = _render9.container;
|
|
234
|
+
input = _react2.screen.getByRole('spinbutton');
|
|
235
|
+
expect(input).toHaveValue(5);
|
|
236
|
+
case 1:
|
|
237
|
+
case "end":
|
|
238
|
+
return _context6.stop();
|
|
239
|
+
}
|
|
240
|
+
}, _callee6);
|
|
241
|
+
})));
|
|
242
|
+
it('handles no constraints', function () {
|
|
243
|
+
var _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
|
|
244
|
+
value: 100,
|
|
245
|
+
onChange: jest.fn()
|
|
246
|
+
})),
|
|
247
|
+
container = _render0.container;
|
|
248
|
+
var input = _react2.screen.getByRole('spinbutton');
|
|
249
|
+
expect(input).toHaveValue(100);
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
describe('keyboard interactions', function () {
|
|
253
|
+
it('handles Enter key to blur', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7() {
|
|
254
|
+
var user, onChange, input;
|
|
255
|
+
return _regenerator["default"].wrap(function (_context7) {
|
|
256
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
257
|
+
case 0:
|
|
258
|
+
user = _userEvent["default"].setup();
|
|
259
|
+
onChange = jest.fn();
|
|
260
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
261
|
+
onChange: onChange
|
|
262
|
+
})));
|
|
263
|
+
input = _react2.screen.getByRole('spinbutton');
|
|
264
|
+
input.focus();
|
|
265
|
+
_context7.next = 1;
|
|
266
|
+
return user.type(input, '{Enter}');
|
|
267
|
+
case 1:
|
|
268
|
+
expect(input).not.toHaveFocus();
|
|
269
|
+
case 2:
|
|
270
|
+
case "end":
|
|
271
|
+
return _context7.stop();
|
|
272
|
+
}
|
|
273
|
+
}, _callee7);
|
|
274
|
+
})));
|
|
275
|
+
it('allows typing numbers', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee8() {
|
|
276
|
+
var user, input;
|
|
277
|
+
return _regenerator["default"].wrap(function (_context8) {
|
|
278
|
+
while (1) switch (_context8.prev = _context8.next) {
|
|
279
|
+
case 0:
|
|
280
|
+
user = _userEvent["default"].setup();
|
|
281
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, defaultProps));
|
|
282
|
+
input = _react2.screen.getByRole('spinbutton');
|
|
283
|
+
_context8.next = 1;
|
|
284
|
+
return user.clear(input);
|
|
285
|
+
case 1:
|
|
286
|
+
_context8.next = 2;
|
|
287
|
+
return user.type(input, '42');
|
|
288
|
+
case 2:
|
|
289
|
+
expect(input).toHaveValue(42);
|
|
290
|
+
case 3:
|
|
291
|
+
case "end":
|
|
292
|
+
return _context8.stop();
|
|
293
|
+
}
|
|
294
|
+
}, _callee8);
|
|
295
|
+
})));
|
|
296
|
+
it('allows negative sign', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee9() {
|
|
297
|
+
var user, input;
|
|
298
|
+
return _regenerator["default"].wrap(function (_context9) {
|
|
299
|
+
while (1) switch (_context9.prev = _context9.next) {
|
|
300
|
+
case 0:
|
|
301
|
+
user = _userEvent["default"].setup();
|
|
302
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
303
|
+
min: -100,
|
|
304
|
+
value: 0
|
|
305
|
+
})));
|
|
306
|
+
input = _react2.screen.getByRole('spinbutton');
|
|
307
|
+
_context9.next = 1;
|
|
308
|
+
return user.clear(input);
|
|
309
|
+
case 1:
|
|
310
|
+
_context9.next = 2;
|
|
311
|
+
return user.type(input, '-5');
|
|
312
|
+
case 2:
|
|
313
|
+
expect(input).toHaveValue(-5);
|
|
314
|
+
case 3:
|
|
315
|
+
case "end":
|
|
316
|
+
return _context9.stop();
|
|
317
|
+
}
|
|
318
|
+
}, _callee9);
|
|
319
|
+
})));
|
|
320
|
+
});
|
|
321
|
+
describe('props updates', function () {
|
|
322
|
+
it('updates value when prop changes', function () {
|
|
323
|
+
var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
324
|
+
value: 5
|
|
325
|
+
}))),
|
|
326
|
+
rerender = _render1.rerender;
|
|
327
|
+
var input = _react2.screen.getByRole('spinbutton');
|
|
328
|
+
expect(input).toHaveValue(5);
|
|
329
|
+
rerender(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, (0, _extends2["default"])({}, defaultProps, {
|
|
330
|
+
value: 8
|
|
331
|
+
})));
|
|
332
|
+
input = _react2.screen.getByRole('spinbutton');
|
|
333
|
+
expect(input).toHaveValue(8);
|
|
334
|
+
});
|
|
335
|
+
it('updates constraints when min/max props change', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee0() {
|
|
336
|
+
var user, onChange, _render10, rerender, input;
|
|
337
|
+
return _regenerator["default"].wrap(function (_context0) {
|
|
338
|
+
while (1) switch (_context0.prev = _context0.next) {
|
|
339
|
+
case 0:
|
|
340
|
+
user = _userEvent["default"].setup();
|
|
341
|
+
onChange = jest.fn();
|
|
342
|
+
_render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
|
|
343
|
+
value: 5,
|
|
344
|
+
min: 1,
|
|
345
|
+
max: 10,
|
|
346
|
+
onChange: onChange
|
|
347
|
+
})), rerender = _render10.rerender;
|
|
348
|
+
rerender(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
|
|
349
|
+
value: 5,
|
|
350
|
+
min: 1,
|
|
351
|
+
max: 8,
|
|
352
|
+
onChange: onChange
|
|
353
|
+
}));
|
|
354
|
+
input = _react2.screen.getByRole('spinbutton');
|
|
355
|
+
_context0.next = 1;
|
|
356
|
+
return user.clear(input);
|
|
357
|
+
case 1:
|
|
358
|
+
_context0.next = 2;
|
|
359
|
+
return user.type(input, '15');
|
|
360
|
+
case 2:
|
|
361
|
+
_react2.fireEvent.blur(input);
|
|
362
|
+
_context0.next = 3;
|
|
363
|
+
return (0, _react2.waitFor)(function () {
|
|
364
|
+
expect(input).toHaveValue(8); // Clamped to new max
|
|
365
|
+
});
|
|
366
|
+
case 3:
|
|
367
|
+
case "end":
|
|
368
|
+
return _context0.stop();
|
|
369
|
+
}
|
|
370
|
+
}, _callee0);
|
|
371
|
+
})));
|
|
372
|
+
it('re-clamps value when constraints become more restrictive', function () {
|
|
373
|
+
var onChange = jest.fn();
|
|
374
|
+
var _render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
|
|
375
|
+
value: 8,
|
|
376
|
+
min: 1,
|
|
377
|
+
max: 10,
|
|
378
|
+
onChange: onChange
|
|
379
|
+
})),
|
|
380
|
+
rerender = _render11.rerender;
|
|
381
|
+
rerender(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
|
|
382
|
+
value: 8,
|
|
383
|
+
min: 1,
|
|
384
|
+
max: 5,
|
|
385
|
+
onChange: onChange
|
|
386
|
+
}));
|
|
387
|
+
|
|
388
|
+
// Component should re-clamp the value
|
|
389
|
+
expect(_react2.screen.getByRole('spinbutton')).toBeInTheDocument();
|
|
390
|
+
});
|
|
391
|
+
});
|
|
392
|
+
describe('fallback number logic', function () {
|
|
393
|
+
it('defaults to 0 when no min or max is provided', function () {
|
|
394
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
|
|
395
|
+
value: undefined,
|
|
396
|
+
onChange: jest.fn()
|
|
397
|
+
}));
|
|
398
|
+
var input = _react2.screen.getByRole('spinbutton');
|
|
399
|
+
expect(input).toHaveValue(0);
|
|
400
|
+
});
|
|
401
|
+
it('defaults to max when only max is provided', function () {
|
|
402
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
|
|
403
|
+
value: undefined,
|
|
404
|
+
max: 15,
|
|
405
|
+
onChange: jest.fn()
|
|
406
|
+
}));
|
|
407
|
+
var input = _react2.screen.getByRole('spinbutton');
|
|
408
|
+
expect(input).toHaveValue(15);
|
|
409
|
+
});
|
|
410
|
+
it('defaults to min when only min is provided', function () {
|
|
411
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_numberTextField.NumberTextField, {
|
|
412
|
+
value: undefined,
|
|
413
|
+
min: 5,
|
|
414
|
+
onChange: jest.fn()
|
|
415
|
+
}));
|
|
416
|
+
var input = _react2.screen.getByRole('spinbutton');
|
|
417
|
+
expect(input).toHaveValue(5);
|
|
418
|
+
});
|
|
419
|
+
});
|
|
420
|
+
});
|
|
421
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX251bWJlclRleHRGaWVsZCIsImRlc2NyaWJlIiwiZGVmYXVsdFByb3BzIiwidmFsdWUiLCJtaW4iLCJtYXgiLCJjbGFzc2VzIiwib25DaGFuZ2UiLCJqZXN0IiwiZm4iLCJiZWZvcmVFYWNoIiwiY2xlYXJBbGxNb2NrcyIsIml0IiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsIk51bWJlclRleHRGaWVsZCIsImlucHV0Iiwic2NyZWVuIiwiZ2V0QnlSb2xlIiwiZXhwZWN0IiwidG9IYXZlVmFsdWUiLCJfZXh0ZW5kczIiLCJsYWJlbCIsImdldEJ5TGFiZWxUZXh0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJfcmVuZGVyIiwic3VmZml4IiwiY29udGFpbmVyIiwiZ2V0QnlUZXh0IiwiX3JlbmRlcjIiLCJkaXNhYmxlZCIsInRvQmVEaXNhYmxlZCIsIm5vdCIsIl9yZW5kZXIzIiwidmFyaWFudCIsInF1ZXJ5U2VsZWN0b3IiLCJfcmVuZGVyNCIsImRpc2FibGVVbmRlcmxpbmUiLCJfcmVuZGVyNSIsImNsYXNzTmFtZSIsIl9yZW5kZXI2IiwiaW5wdXRDbGFzc05hbWUiLCJfcmVuZGVyNyIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwidXNlciIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwidXNlckV2ZW50Iiwic2V0dXAiLCJjbGVhciIsInR5cGUiLCJmaXJlRXZlbnQiLCJibHVyIiwid2FpdEZvciIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwiYW55dGhpbmciLCJzdG9wIiwiX2NhbGxlZTIiLCJfY29udGV4dDIiLCJrZXlib2FyZCIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwiX2NhbGxlZTQiLCJfY29udGV4dDQiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwiX2NhbGxlZTUiLCJfcmVuZGVyOCIsIl9jb250ZXh0NSIsIl9jYWxsZWU2IiwiX3JlbmRlcjkiLCJfY29udGV4dDYiLCJfcmVuZGVyMCIsIl9jYWxsZWU3IiwiX2NvbnRleHQ3IiwiZm9jdXMiLCJ0b0hhdmVGb2N1cyIsIl9jYWxsZWU4IiwiX2NvbnRleHQ4IiwiX2NhbGxlZTkiLCJfY29udGV4dDkiLCJfcmVuZGVyMSIsInJlcmVuZGVyIiwiX2NhbGxlZTAiLCJfcmVuZGVyMTAiLCJfY29udGV4dDAiLCJfcmVuZGVyMTEiLCJ1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL251bWJlci10ZXh0LWZpZWxkLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIHNjcmVlbiwgd2FpdEZvciwgZmlyZUV2ZW50IH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgdXNlckV2ZW50IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudCc7XG5pbXBvcnQgeyBOdW1iZXJUZXh0RmllbGQgfSBmcm9tICcuLi9udW1iZXItdGV4dC1maWVsZCc7XG5cbmRlc2NyaWJlKCdOdW1iZXJUZXh0RmllbGQnLCAoKSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWx1ZTogMSxcbiAgICBtaW46IDEsXG4gICAgbWF4OiAxMCxcbiAgICBjbGFzc2VzOiB7fSxcbiAgICBvbkNoYW5nZTogamVzdC5mbigpLFxuICB9O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIFRleHRGaWVsZCB3aXRoIGNvcnJlY3QgdmFsdWUnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoPE51bWJlclRleHRGaWVsZCB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgICBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3NwaW5idXR0b24nKTtcbiAgICAgIGV4cGVjdChpbnB1dCkudG9IYXZlVmFsdWUoMSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGN1c3RvbSBsYWJlbCcsICgpID0+IHtcbiAgICAgIHJlbmRlcig8TnVtYmVyVGV4dEZpZWxkIHsuLi5kZWZhdWx0UHJvcHN9IGxhYmVsPVwiQ3VzdG9tIExhYmVsXCIgLz4pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeUxhYmVsVGV4dCgnQ3VzdG9tIExhYmVsJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIHN1ZmZpeCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxOdW1iZXJUZXh0RmllbGQgey4uLmRlZmF1bHRQcm9wc30gc3VmZml4PVwicHhcIiAvPixcbiAgICAgICk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgncHgnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgc3VmZml4IHdoZW4gbm90IHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPE51bWJlclRleHRGaWVsZCB7Li4uZGVmYXVsdFByb3BzfSAvPixcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3NwaW5idXR0b24nKTtcbiAgICAgIGV4cGVjdChpbnB1dCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGFzIGRpc2FibGVkIHdoZW4gZGlzYWJsZWQgcHJvcCBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxOdW1iZXJUZXh0RmllbGQgey4uLmRlZmF1bHRQcm9wc30gZGlzYWJsZWQ9e3RydWV9IC8+KTtcbiAgICAgIGNvbnN0IGlucHV0ID0gc2NyZWVuLmdldEJ5Um9sZSgnc3BpbmJ1dHRvbicpO1xuICAgICAgZXhwZWN0KGlucHV0KS50b0JlRGlzYWJsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGFzIGVuYWJsZWQgd2hlbiBkaXNhYmxlZCBwcm9wIGlzIGZhbHNlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKDxOdW1iZXJUZXh0RmllbGQgey4uLmRlZmF1bHRQcm9wc30gZGlzYWJsZWQ9e2ZhbHNlfSAvPik7XG4gICAgICBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3NwaW5idXR0b24nKTtcbiAgICAgIGV4cGVjdChpbnB1dCkubm90LnRvQmVEaXNhYmxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBjdXN0b20gdmFyaWFudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxOdW1iZXJUZXh0RmllbGQgey4uLmRlZmF1bHRQcm9wc30gdmFyaWFudD1cIm91dGxpbmVkXCIgLz4sXG4gICAgICApO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBkaXNhYmxlVW5kZXJsaW5lIHZhcmlhbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8TnVtYmVyVGV4dEZpZWxkIHsuLi5kZWZhdWx0UHJvcHN9IGRpc2FibGVVbmRlcmxpbmU9e3RydWV9IC8+LFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHdpdGggY3VzdG9tIGNsYXNzTmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxOdW1iZXJUZXh0RmllbGQgey4uLmRlZmF1bHRQcm9wc30gY2xhc3NOYW1lPVwiY3VzdG9tLWNsYXNzXCIgLz4sXG4gICAgICApO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuY3VzdG9tLWNsYXNzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIGN1c3RvbSBpbnB1dENsYXNzTmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxOdW1iZXJUZXh0RmllbGQgey4uLmRlZmF1bHRQcm9wc30gaW5wdXRDbGFzc05hbWU9XCJpbnB1dC1jbGFzc1wiIC8+LFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignLmlucHV0LWNsYXNzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIFNocmlua0xhYmVsIElucHV0TGFiZWxQcm9wcycsICgpID0+IHtcbiAgICAgIHJlbmRlcig8TnVtYmVyVGV4dEZpZWxkIHsuLi5kZWZhdWx0UHJvcHN9IGxhYmVsPVwiU2hyaW5rIExhYmVsXCIgLz4pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeUxhYmVsVGV4dCgnU2hyaW5rIExhYmVsJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRoIG1hcmdpbiBub3JtYWwnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8TnVtYmVyVGV4dEZpZWxkIHsuLi5kZWZhdWx0UHJvcHN9IC8+LFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ29uQ2hhbmdlIGNhbGxiYWNrJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aXRoIGNsYW1wZWQgdmFsdWUgb24gYmx1cicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIGNvbnN0IG9uQ2hhbmdlID0gamVzdC5mbigpO1xuICAgICAgcmVuZGVyKDxOdW1iZXJUZXh0RmllbGQgey4uLmRlZmF1bHRQcm9wc30gb25DaGFuZ2U9e29uQ2hhbmdlfSAvPik7XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gc2NyZWVuLmdldEJ5Um9sZSgnc3BpbmJ1dHRvbicpO1xuICAgICAgYXdhaXQgdXNlci5jbGVhcihpbnB1dCk7XG4gICAgICBhd2FpdCB1c2VyLnR5cGUoaW5wdXQsICcxNScpO1xuICAgICAgZmlyZUV2ZW50LmJsdXIoaW5wdXQpO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHtcbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55dGhpbmcoKSwgMTApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2FsbHMgb25DaGFuZ2Ugb24gRW50ZXIga2V5IHByZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICByZW5kZXIoPE51bWJlclRleHRGaWVsZCB7Li4uZGVmYXVsdFByb3BzfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCdzcGluYnV0dG9uJyk7XG4gICAgICBhd2FpdCB1c2VyLmNsZWFyKGlucHV0KTtcbiAgICAgIGF3YWl0IHVzZXIudHlwZShpbnB1dCwgJzUnKTtcbiAgICAgIGF3YWl0IHVzZXIua2V5Ym9hcmQoJ3tFbnRlcn0nKTtcblxuICAgICAgZXhwZWN0KGlucHV0KS50b0hhdmVWYWx1ZSg1KTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBvbkNoYW5nZSBkdXJpbmcgdHlwaW5nICh1bnZhbGlkYXRlZCknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICAgIHJlbmRlcig8TnVtYmVyVGV4dEZpZWxkIHsuLi5kZWZhdWx0UHJvcHN9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz4pO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3NwaW5idXR0b24nKTtcbiAgICAgIGF3YWl0IHVzZXIuY2xlYXIoaW5wdXQpO1xuICAgICAgYXdhaXQgdXNlci50eXBlKGlucHV0LCAnNycpO1xuXG4gICAgICAvLyBvbkNoYW5nZSBzaG91bGQgYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgZHVyaW5nIHR5cGluZ1xuICAgICAgZXhwZWN0KGlucHV0KS50b0hhdmVWYWx1ZSg3KTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBjYWxsIG9uQ2hhbmdlIHdoZW4gdmFsdWUgZG9lcyBub3QgY2hhbmdlIG9uIGJsdXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICAgIHJlbmRlcig8TnVtYmVyVGV4dEZpZWxkIHsuLi5kZWZhdWx0UHJvcHN9IHZhbHVlPXs1fSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCdzcGluYnV0dG9uJyk7XG4gICAgICBmaXJlRXZlbnQuYmx1cihpbnB1dCk7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JhbmdlIGNvbnN0cmFpbnRzJywgKCkgPT4ge1xuICAgIGl0KCdoYW5kbGVzIG9ubHkgbWluIGNvbnN0cmFpbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8TnVtYmVyVGV4dEZpZWxkXG4gICAgICAgICAgdmFsdWU9ezV9XG4gICAgICAgICAgbWluPXszfVxuICAgICAgICAgIG9uQ2hhbmdlPXtqZXN0LmZuKCl9XG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCdzcGluYnV0dG9uJyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvSGF2ZVZhbHVlKDUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgb25seSBtYXggY29uc3RyYWludCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxOdW1iZXJUZXh0RmllbGRcbiAgICAgICAgICB2YWx1ZT17NX1cbiAgICAgICAgICBtYXg9ezEwfVxuICAgICAgICAgIG9uQ2hhbmdlPXtqZXN0LmZuKCl9XG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCdzcGluYnV0dG9uJyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvSGF2ZVZhbHVlKDUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgbm8gY29uc3RyYWludHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8TnVtYmVyVGV4dEZpZWxkXG4gICAgICAgICAgdmFsdWU9ezEwMH1cbiAgICAgICAgICBvbkNoYW5nZT17amVzdC5mbigpfVxuICAgICAgICAvPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGlucHV0ID0gc2NyZWVuLmdldEJ5Um9sZSgnc3BpbmJ1dHRvbicpO1xuICAgICAgZXhwZWN0KGlucHV0KS50b0hhdmVWYWx1ZSgxMDApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgna2V5Ym9hcmQgaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdoYW5kbGVzIEVudGVyIGtleSB0byBibHVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICByZW5kZXIoPE51bWJlclRleHRGaWVsZCB7Li4uZGVmYXVsdFByb3BzfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+KTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCdzcGluYnV0dG9uJyk7XG4gICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgYXdhaXQgdXNlci50eXBlKGlucHV0LCAne0VudGVyfScpO1xuXG4gICAgICBleHBlY3QoaW5wdXQpLm5vdC50b0hhdmVGb2N1cygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FsbG93cyB0eXBpbmcgbnVtYmVycycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlcig8TnVtYmVyVGV4dEZpZWxkIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCdzcGluYnV0dG9uJyk7XG4gICAgICBhd2FpdCB1c2VyLmNsZWFyKGlucHV0KTtcbiAgICAgIGF3YWl0IHVzZXIudHlwZShpbnB1dCwgJzQyJyk7XG5cbiAgICAgIGV4cGVjdChpbnB1dCkudG9IYXZlVmFsdWUoNDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FsbG93cyBuZWdhdGl2ZSBzaWduJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgcmVuZGVyKDxOdW1iZXJUZXh0RmllbGQgey4uLmRlZmF1bHRQcm9wc30gbWluPXstMTAwfSB2YWx1ZT17MH0gLz4pO1xuXG4gICAgICBjb25zdCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3NwaW5idXR0b24nKTtcbiAgICAgIGF3YWl0IHVzZXIuY2xlYXIoaW5wdXQpO1xuICAgICAgYXdhaXQgdXNlci50eXBlKGlucHV0LCAnLTUnKTtcblxuICAgICAgZXhwZWN0KGlucHV0KS50b0hhdmVWYWx1ZSgtNSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwcm9wcyB1cGRhdGVzJywgKCkgPT4ge1xuICAgIGl0KCd1cGRhdGVzIHZhbHVlIHdoZW4gcHJvcCBjaGFuZ2VzJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyByZXJlbmRlciB9ID0gcmVuZGVyKFxuICAgICAgICA8TnVtYmVyVGV4dEZpZWxkIHsuLi5kZWZhdWx0UHJvcHN9IHZhbHVlPXs1fSAvPixcbiAgICAgICk7XG5cbiAgICAgIGxldCBpbnB1dCA9IHNjcmVlbi5nZXRCeVJvbGUoJ3NwaW5idXR0b24nKTtcbiAgICAgIGV4cGVjdChpbnB1dCkudG9IYXZlVmFsdWUoNSk7XG5cbiAgICAgIHJlcmVuZGVyKDxOdW1iZXJUZXh0RmllbGQgey4uLmRlZmF1bHRQcm9wc30gdmFsdWU9ezh9IC8+KTtcblxuICAgICAgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCdzcGluYnV0dG9uJyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvSGF2ZVZhbHVlKDgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3VwZGF0ZXMgY29uc3RyYWludHMgd2hlbiBtaW4vbWF4IHByb3BzIGNoYW5nZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIGNvbnN0IG9uQ2hhbmdlID0gamVzdC5mbigpO1xuICAgICAgY29uc3QgeyByZXJlbmRlciB9ID0gcmVuZGVyKFxuICAgICAgICA8TnVtYmVyVGV4dEZpZWxkXG4gICAgICAgICAgdmFsdWU9ezV9XG4gICAgICAgICAgbWluPXsxfVxuICAgICAgICAgIG1heD17MTB9XG4gICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAvPixcbiAgICAgICk7XG5cbiAgICAgIHJlcmVuZGVyKFxuICAgICAgICA8TnVtYmVyVGV4dEZpZWxkXG4gICAgICAgICAgdmFsdWU9ezV9XG4gICAgICAgICAgbWluPXsxfVxuICAgICAgICAgIG1heD17OH1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCdzcGluYnV0dG9uJyk7XG4gICAgICBhd2FpdCB1c2VyLmNsZWFyKGlucHV0KTtcbiAgICAgIGF3YWl0IHVzZXIudHlwZShpbnB1dCwgJzE1Jyk7XG4gICAgICBmaXJlRXZlbnQuYmx1cihpbnB1dCk7XG5cbiAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4ge1xuICAgICAgICBleHBlY3QoaW5wdXQpLnRvSGF2ZVZhbHVlKDgpOyAvLyBDbGFtcGVkIHRvIG5ldyBtYXhcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlLWNsYW1wcyB2YWx1ZSB3aGVuIGNvbnN0cmFpbnRzIGJlY29tZSBtb3JlIHJlc3RyaWN0aXZlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxOdW1iZXJUZXh0RmllbGRcbiAgICAgICAgICB2YWx1ZT17OH1cbiAgICAgICAgICBtaW49ezF9XG4gICAgICAgICAgbWF4PXsxMH1cbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgcmVyZW5kZXIoXG4gICAgICAgIDxOdW1iZXJUZXh0RmllbGRcbiAgICAgICAgICB2YWx1ZT17OH1cbiAgICAgICAgICBtaW49ezF9XG4gICAgICAgICAgbWF4PXs1fVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgLz4sXG4gICAgICApO1xuXG4gICAgICAvLyBDb21wb25lbnQgc2hvdWxkIHJlLWNsYW1wIHRoZSB2YWx1ZVxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVJvbGUoJ3NwaW5idXR0b24nKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZhbGxiYWNrIG51bWJlciBsb2dpYycsICgpID0+IHtcbiAgICBpdCgnZGVmYXVsdHMgdG8gMCB3aGVuIG5vIG1pbiBvciBtYXggaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxOdW1iZXJUZXh0RmllbGRcbiAgICAgICAgICB2YWx1ZT17dW5kZWZpbmVkfVxuICAgICAgICAgIG9uQ2hhbmdlPXtqZXN0LmZuKCl9XG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCdzcGluYnV0dG9uJyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvSGF2ZVZhbHVlKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RlZmF1bHRzIHRvIG1heCB3aGVuIG9ubHkgbWF4IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8TnVtYmVyVGV4dEZpZWxkXG4gICAgICAgICAgdmFsdWU9e3VuZGVmaW5lZH1cbiAgICAgICAgICBtYXg9ezE1fVxuICAgICAgICAgIG9uQ2hhbmdlPXtqZXN0LmZuKCl9XG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCdzcGluYnV0dG9uJyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvSGF2ZVZhbHVlKDE1KTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWZhdWx0cyB0byBtaW4gd2hlbiBvbmx5IG1pbiBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPE51bWJlclRleHRGaWVsZFxuICAgICAgICAgIHZhbHVlPXt1bmRlZmluZWR9XG4gICAgICAgICAgbWluPXs1fVxuICAgICAgICAgIG9uQ2hhbmdlPXtqZXN0LmZuKCl9XG4gICAgICAgIC8+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgaW5wdXQgPSBzY3JlZW4uZ2V0QnlSb2xlKCdzcGluYnV0dG9uJyk7XG4gICAgICBleHBlY3QoaW5wdXQpLnRvSGF2ZVZhbHVlKDUpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxnQkFBQSxHQUFBSCxPQUFBO0FBRUFJLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxZQUFNO0VBQ2hDLElBQU1DLFlBQVksR0FBRztJQUNuQkMsS0FBSyxFQUFFLENBQUM7SUFDUkMsR0FBRyxFQUFFLENBQUM7SUFDTkMsR0FBRyxFQUFFLEVBQUU7SUFDUEMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNYQyxRQUFRLEVBQUVDLElBQUksQ0FBQ0MsRUFBRSxDQUFDO0VBQ3BCLENBQUM7RUFFREMsVUFBVSxDQUFDLFlBQU07SUFDZkYsSUFBSSxDQUFDRyxhQUFhLENBQUMsQ0FBQztFQUN0QixDQUFDLENBQUM7RUFFRlYsUUFBUSxDQUFDLFdBQVcsRUFBRSxZQUFNO0lBQzFCVyxFQUFFLENBQUMsc0NBQXNDLEVBQUUsWUFBTTtNQUMvQyxJQUFBQyxjQUFNLGVBQUNsQixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWUsRUFBS2IsWUFBZSxDQUFDLENBQUM7TUFDN0MsSUFBTWMsS0FBSyxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxZQUFZLENBQUM7TUFDNUNDLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0lBRUZSLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxZQUFNO01BQ3BDLElBQUFDLGNBQU0sZUFBQ2xCLE1BQUEsWUFBQW1CLGFBQUEsQ0FBQ2QsZ0JBQUEsQ0FBQWUsZUFBZSxNQUFBTSxTQUFBLGlCQUFLbkIsWUFBWTtRQUFFb0IsS0FBSyxFQUFDO01BQWMsRUFBRSxDQUFDLENBQUM7TUFDbEVILE1BQU0sQ0FBQ0YsY0FBTSxDQUFDTSxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUM7SUFFRlosRUFBRSxDQUFDLHFCQUFxQixFQUFFLFlBQU07TUFDOUIsSUFBQWEsT0FBQSxHQUFzQixJQUFBWixjQUFNLGVBQzFCbEIsTUFBQSxZQUFBbUIsYUFBQSxDQUFDZCxnQkFBQSxDQUFBZSxlQUFlLE1BQUFNLFNBQUEsaUJBQUtuQixZQUFZO1VBQUV3QixNQUFNLEVBQUM7UUFBSSxFQUFFLENBQ2xELENBQUM7UUFGT0MsU0FBUyxHQUFBRixPQUFBLENBQVRFLFNBQVM7TUFHakJSLE1BQU0sQ0FBQ0YsY0FBTSxDQUFDVyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ0osaUJBQWlCLENBQUMsQ0FBQztJQUNwRCxDQUFDLENBQUM7SUFFRlosRUFBRSxDQUFDLDBDQUEwQyxFQUFFLFlBQU07TUFDbkQsSUFBQWlCLFFBQUEsR0FBc0IsSUFBQWhCLGNBQU0sZUFDMUJsQixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWUsRUFBS2IsWUFBZSxDQUN0QyxDQUFDO1FBRk95QixTQUFTLEdBQUFFLFFBQUEsQ0FBVEYsU0FBUztNQUdqQixJQUFNWCxLQUFLLEdBQUdDLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLFlBQVksQ0FBQztNQUM1Q0MsTUFBTSxDQUFDSCxLQUFLLENBQUMsQ0FBQ1EsaUJBQWlCLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUM7SUFFRlosRUFBRSxDQUFDLGdEQUFnRCxFQUFFLFlBQU07TUFDekQsSUFBQUMsY0FBTSxlQUFDbEIsTUFBQSxZQUFBbUIsYUFBQSxDQUFDZCxnQkFBQSxDQUFBZSxlQUFlLE1BQUFNLFNBQUEsaUJBQUtuQixZQUFZO1FBQUU0QixRQUFRLEVBQUU7TUFBSyxFQUFFLENBQUMsQ0FBQztNQUM3RCxJQUFNZCxLQUFLLEdBQUdDLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLFlBQVksQ0FBQztNQUM1Q0MsTUFBTSxDQUFDSCxLQUFLLENBQUMsQ0FBQ2UsWUFBWSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0lBRUZuQixFQUFFLENBQUMsZ0RBQWdELEVBQUUsWUFBTTtNQUN6RCxJQUFBQyxjQUFNLGVBQUNsQixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWUsTUFBQU0sU0FBQSxpQkFBS25CLFlBQVk7UUFBRTRCLFFBQVEsRUFBRTtNQUFNLEVBQUUsQ0FBQyxDQUFDO01BQzlELElBQU1kLEtBQUssR0FBR0MsY0FBTSxDQUFDQyxTQUFTLENBQUMsWUFBWSxDQUFDO01BQzVDQyxNQUFNLENBQUNILEtBQUssQ0FBQyxDQUFDZ0IsR0FBRyxDQUFDRCxZQUFZLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUM7SUFFRm5CLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxZQUFNO01BQ3RDLElBQUFxQixRQUFBLEdBQXNCLElBQUFwQixjQUFNLGVBQzFCbEIsTUFBQSxZQUFBbUIsYUFBQSxDQUFDZCxnQkFBQSxDQUFBZSxlQUFlLE1BQUFNLFNBQUEsaUJBQUtuQixZQUFZO1VBQUVnQyxPQUFPLEVBQUM7UUFBVSxFQUFFLENBQ3pELENBQUM7UUFGT1AsU0FBUyxHQUFBTSxRQUFBLENBQVROLFNBQVM7TUFHakJSLE1BQU0sQ0FBQ1EsU0FBUyxDQUFDUSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQ1gsaUJBQWlCLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUM7SUFFRlosRUFBRSxDQUFDLHVDQUF1QyxFQUFFLFlBQU07TUFDaEQsSUFBQXdCLFFBQUEsR0FBc0IsSUFBQXZCLGNBQU0sZUFDMUJsQixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWUsTUFBQU0sU0FBQSxpQkFBS25CLFlBQVk7VUFBRW1DLGdCQUFnQixFQUFFO1FBQUssRUFBRSxDQUM5RCxDQUFDO1FBRk9WLFNBQVMsR0FBQVMsUUFBQSxDQUFUVCxTQUFTO01BR2pCUixNQUFNLENBQUNRLFNBQVMsQ0FBQ1EsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUNYLGlCQUFpQixDQUFDLENBQUM7SUFDOUQsQ0FBQyxDQUFDO0lBRUZaLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxZQUFNO01BQ3hDLElBQUEwQixRQUFBLEdBQXNCLElBQUF6QixjQUFNLGVBQzFCbEIsTUFBQSxZQUFBbUIsYUFBQSxDQUFDZCxnQkFBQSxDQUFBZSxlQUFlLE1BQUFNLFNBQUEsaUJBQUtuQixZQUFZO1VBQUVxQyxTQUFTLEVBQUM7UUFBYyxFQUFFLENBQy9ELENBQUM7UUFGT1osU0FBUyxHQUFBVyxRQUFBLENBQVRYLFNBQVM7TUFHakJSLE1BQU0sQ0FBQ1EsU0FBUyxDQUFDUSxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQ1gsaUJBQWlCLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUM7SUFFRlosRUFBRSxDQUFDLG9DQUFvQyxFQUFFLFlBQU07TUFDN0MsSUFBQTRCLFFBQUEsR0FBc0IsSUFBQTNCLGNBQU0sZUFDMUJsQixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWUsTUFBQU0sU0FBQSxpQkFBS25CLFlBQVk7VUFBRXVDLGNBQWMsRUFBQztRQUFhLEVBQUUsQ0FDbkUsQ0FBQztRQUZPZCxTQUFTLEdBQUFhLFFBQUEsQ0FBVGIsU0FBUztNQUdqQlIsTUFBTSxDQUFDUSxTQUFTLENBQUNRLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDWCxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsQ0FBQztJQUVGWixFQUFFLENBQUMsMENBQTBDLEVBQUUsWUFBTTtNQUNuRCxJQUFBQyxjQUFNLGVBQUNsQixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWUsTUFBQU0sU0FBQSxpQkFBS25CLFlBQVk7UUFBRW9CLEtBQUssRUFBQztNQUFjLEVBQUUsQ0FBQyxDQUFDO01BQ2xFSCxNQUFNLENBQUNGLGNBQU0sQ0FBQ00sY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7SUFDbkUsQ0FBQyxDQUFDO0lBRUZaLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxZQUFNO01BQ3JDLElBQUE4QixRQUFBLEdBQXNCLElBQUE3QixjQUFNLGVBQzFCbEIsTUFBQSxZQUFBbUIsYUFBQSxDQUFDZCxnQkFBQSxDQUFBZSxlQUFlLEVBQUtiLFlBQWUsQ0FDdEMsQ0FBQztRQUZPeUIsU0FBUyxHQUFBZSxRQUFBLENBQVRmLFNBQVM7TUFHakJSLE1BQU0sQ0FBQ1EsU0FBUyxDQUFDUSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQ1gsaUJBQWlCLENBQUMsQ0FBQztJQUM5RCxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7RUFFRnZCLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxZQUFNO0lBQ2xDVyxFQUFFLENBQUMsMkNBQTJDLG1CQUFBK0Isa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFFLFNBQUFDLFFBQUE7TUFBQSxJQUFBQyxJQUFBLEVBQUF4QyxRQUFBLEVBQUFTLEtBQUE7TUFBQSxPQUFBNEIsWUFBQSxZQUFBSSxJQUFBLFdBQUFDLFFBQUE7UUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtVQUFBO1lBQ3hDSixJQUFJLEdBQUdLLHFCQUFTLENBQUNDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCOUMsUUFBUSxHQUFHQyxJQUFJLENBQUNDLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLElBQUFJLGNBQU0sZUFBQ2xCLE1BQUEsWUFBQW1CLGFBQUEsQ0FBQ2QsZ0JBQUEsQ0FBQWUsZUFBZSxNQUFBTSxTQUFBLGlCQUFLbkIsWUFBWTtjQUFFSyxRQUFRLEVBQUVBO1lBQVMsRUFBRSxDQUFDLENBQUM7WUFFM0RTLEtBQUssR0FBR0MsY0FBTSxDQUFDQyxTQUFTLENBQUMsWUFBWSxDQUFDO1lBQUErQixRQUFBLENBQUFFLElBQUE7WUFBQSxPQUN0Q0osSUFBSSxDQUFDTyxLQUFLLENBQUN0QyxLQUFLLENBQUM7VUFBQTtZQUFBaUMsUUFBQSxDQUFBRSxJQUFBO1lBQUEsT0FDakJKLElBQUksQ0FBQ1EsSUFBSSxDQUFDdkMsS0FBSyxFQUFFLElBQUksQ0FBQztVQUFBO1lBQzVCd0MsaUJBQVMsQ0FBQ0MsSUFBSSxDQUFDekMsS0FBSyxDQUFDO1lBQUNpQyxRQUFBLENBQUFFLElBQUE7WUFBQSxPQUVoQixJQUFBTyxlQUFPLEVBQUMsWUFBTTtjQUNsQnZDLE1BQU0sQ0FBQ1osUUFBUSxDQUFDLENBQUNvRCxvQkFBb0IsQ0FBQ3hDLE1BQU0sQ0FBQ3lDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlELENBQUMsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBWCxRQUFBLENBQUFZLElBQUE7UUFBQTtNQUFBLEdBQUFmLE9BQUE7SUFBQSxDQUNILEdBQUM7SUFFRmxDLEVBQUUsQ0FBQyxtQ0FBbUMsbUJBQUErQixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUUsU0FBQWlCLFNBQUE7TUFBQSxJQUFBZixJQUFBLEVBQUF4QyxRQUFBLEVBQUFTLEtBQUE7TUFBQSxPQUFBNEIsWUFBQSxZQUFBSSxJQUFBLFdBQUFlLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBYixJQUFBLEdBQUFhLFNBQUEsQ0FBQVosSUFBQTtVQUFBO1lBQ2hDSixJQUFJLEdBQUdLLHFCQUFTLENBQUNDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCOUMsUUFBUSxHQUFHQyxJQUFJLENBQUNDLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLElBQUFJLGNBQU0sZUFBQ2xCLE1BQUEsWUFBQW1CLGFBQUEsQ0FBQ2QsZ0JBQUEsQ0FBQWUsZUFBZSxNQUFBTSxTQUFBLGlCQUFLbkIsWUFBWTtjQUFFSyxRQUFRLEVBQUVBO1lBQVMsRUFBRSxDQUFDLENBQUM7WUFFM0RTLEtBQUssR0FBR0MsY0FBTSxDQUFDQyxTQUFTLENBQUMsWUFBWSxDQUFDO1lBQUE2QyxTQUFBLENBQUFaLElBQUE7WUFBQSxPQUN0Q0osSUFBSSxDQUFDTyxLQUFLLENBQUN0QyxLQUFLLENBQUM7VUFBQTtZQUFBK0MsU0FBQSxDQUFBWixJQUFBO1lBQUEsT0FDakJKLElBQUksQ0FBQ1EsSUFBSSxDQUFDdkMsS0FBSyxFQUFFLEdBQUcsQ0FBQztVQUFBO1lBQUErQyxTQUFBLENBQUFaLElBQUE7WUFBQSxPQUNyQkosSUFBSSxDQUFDaUIsUUFBUSxDQUFDLFNBQVMsQ0FBQztVQUFBO1lBRTlCN0MsTUFBTSxDQUFDSCxLQUFLLENBQUMsQ0FBQ0ksV0FBVyxDQUFDLENBQUMsQ0FBQztVQUFDO1VBQUE7WUFBQSxPQUFBMkMsU0FBQSxDQUFBRixJQUFBO1FBQUE7TUFBQSxHQUFBQyxRQUFBO0lBQUEsQ0FDOUIsR0FBQztJQUVGbEQsRUFBRSxDQUFDLDRDQUE0QyxtQkFBQStCLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBRSxTQUFBb0IsU0FBQTtNQUFBLElBQUFsQixJQUFBLEVBQUF4QyxRQUFBLEVBQUFTLEtBQUE7TUFBQSxPQUFBNEIsWUFBQSxZQUFBSSxJQUFBLFdBQUFrQixTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQWhCLElBQUEsR0FBQWdCLFNBQUEsQ0FBQWYsSUFBQTtVQUFBO1lBQ3pDSixJQUFJLEdBQUdLLHFCQUFTLENBQUNDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCOUMsUUFBUSxHQUFHQyxJQUFJLENBQUNDLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLElBQUFJLGNBQU0sZUFBQ2xCLE1BQUEsWUFBQW1CLGFBQUEsQ0FBQ2QsZ0JBQUEsQ0FBQWUsZUFBZSxNQUFBTSxTQUFBLGlCQUFLbkIsWUFBWTtjQUFFSyxRQUFRLEVBQUVBO1lBQVMsRUFBRSxDQUFDLENBQUM7WUFFM0RTLEtBQUssR0FBR0MsY0FBTSxDQUFDQyxTQUFTLENBQUMsWUFBWSxDQUFDO1lBQUFnRCxTQUFBLENBQUFmLElBQUE7WUFBQSxPQUN0Q0osSUFBSSxDQUFDTyxLQUFLLENBQUN0QyxLQUFLLENBQUM7VUFBQTtZQUFBa0QsU0FBQSxDQUFBZixJQUFBO1lBQUEsT0FDakJKLElBQUksQ0FBQ1EsSUFBSSxDQUFDdkMsS0FBSyxFQUFFLEdBQUcsQ0FBQztVQUFBO1lBRTNCO1lBQ0FHLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxDQUFDLENBQUM7VUFBQztVQUFBO1lBQUEsT0FBQThDLFNBQUEsQ0FBQUwsSUFBQTtRQUFBO01BQUEsR0FBQUksUUFBQTtJQUFBLENBQzlCLEdBQUM7SUFFRnJELEVBQUUsQ0FBQywyREFBMkQsbUJBQUErQixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUUsU0FBQXNCLFNBQUE7TUFBQSxJQUFBcEIsSUFBQSxFQUFBeEMsUUFBQSxFQUFBUyxLQUFBO01BQUEsT0FBQTRCLFlBQUEsWUFBQUksSUFBQSxXQUFBb0IsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUFsQixJQUFBLEdBQUFrQixTQUFBLENBQUFqQixJQUFBO1VBQUE7WUFDeERKLElBQUksR0FBR0sscUJBQVMsQ0FBQ0MsS0FBSyxDQUFDLENBQUM7WUFDeEI5QyxRQUFRLEdBQUdDLElBQUksQ0FBQ0MsRUFBRSxDQUFDLENBQUM7WUFDMUIsSUFBQUksY0FBTSxlQUFDbEIsTUFBQSxZQUFBbUIsYUFBQSxDQUFDZCxnQkFBQSxDQUFBZSxlQUFlLE1BQUFNLFNBQUEsaUJBQUtuQixZQUFZO2NBQUVDLEtBQUssRUFBRSxDQUFFO2NBQUNJLFFBQVEsRUFBRUE7WUFBUyxFQUFFLENBQUMsQ0FBQztZQUVyRVMsS0FBSyxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxZQUFZLENBQUM7WUFDNUNzQyxpQkFBUyxDQUFDQyxJQUFJLENBQUN6QyxLQUFLLENBQUM7WUFFckJHLE1BQU0sQ0FBQ1osUUFBUSxDQUFDLENBQUN5QixHQUFHLENBQUNxQyxnQkFBZ0IsQ0FBQyxDQUFDO1VBQUM7VUFBQTtZQUFBLE9BQUFELFNBQUEsQ0FBQVAsSUFBQTtRQUFBO01BQUEsR0FBQU0sUUFBQTtJQUFBLENBQ3pDLEdBQUM7RUFDSixDQUFDLENBQUM7RUFFRmxFLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxZQUFNO0lBQ2xDVyxFQUFFLENBQUMsNkJBQTZCLG1CQUFBK0Isa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFFLFNBQUF5QixTQUFBO01BQUEsSUFBQXZCLElBQUEsRUFBQXdCLFFBQUEsRUFBQTVDLFNBQUEsRUFBQVgsS0FBQTtNQUFBLE9BQUE0QixZQUFBLFlBQUFJLElBQUEsV0FBQXdCLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBdEIsSUFBQSxHQUFBc0IsU0FBQSxDQUFBckIsSUFBQTtVQUFBO1lBQzFCSixJQUFJLEdBQUdLLHFCQUFTLENBQUNDLEtBQUssQ0FBQyxDQUFDO1lBQUFrQixRQUFBLEdBQ1IsSUFBQTFELGNBQU0sZUFDMUJsQixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWU7Y0FDZFosS0FBSyxFQUFFLENBQUU7Y0FDVEMsR0FBRyxFQUFFLENBQUU7Y0FDUEcsUUFBUSxFQUFFQyxJQUFJLENBQUNDLEVBQUUsQ0FBQztZQUFFLENBQ3JCLENBQ0gsQ0FBQyxFQU5Pa0IsU0FBUyxHQUFBNEMsUUFBQSxDQUFUNUMsU0FBUztZQVFYWCxLQUFLLEdBQUdDLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLFlBQVksQ0FBQztZQUM1Q0MsTUFBTSxDQUFDSCxLQUFLLENBQUMsQ0FBQ0ksV0FBVyxDQUFDLENBQUMsQ0FBQztVQUFDO1VBQUE7WUFBQSxPQUFBb0QsU0FBQSxDQUFBWCxJQUFBO1FBQUE7TUFBQSxHQUFBUyxRQUFBO0lBQUEsQ0FDOUIsR0FBQztJQUVGMUQsRUFBRSxDQUFDLDZCQUE2QixtQkFBQStCLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBRSxTQUFBNEIsU0FBQTtNQUFBLElBQUExQixJQUFBLEVBQUEyQixRQUFBLEVBQUEvQyxTQUFBLEVBQUFYLEtBQUE7TUFBQSxPQUFBNEIsWUFBQSxZQUFBSSxJQUFBLFdBQUEyQixTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQXpCLElBQUEsR0FBQXlCLFNBQUEsQ0FBQXhCLElBQUE7VUFBQTtZQUMxQkosSUFBSSxHQUFHSyxxQkFBUyxDQUFDQyxLQUFLLENBQUMsQ0FBQztZQUFBcUIsUUFBQSxHQUNSLElBQUE3RCxjQUFNLGVBQzFCbEIsTUFBQSxZQUFBbUIsYUFBQSxDQUFDZCxnQkFBQSxDQUFBZSxlQUFlO2NBQ2RaLEtBQUssRUFBRSxDQUFFO2NBQ1RFLEdBQUcsRUFBRSxFQUFHO2NBQ1JFLFFBQVEsRUFBRUMsSUFBSSxDQUFDQyxFQUFFLENBQUM7WUFBRSxDQUNyQixDQUNILENBQUMsRUFOT2tCLFNBQVMsR0FBQStDLFFBQUEsQ0FBVC9DLFNBQVM7WUFRWFgsS0FBSyxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxZQUFZLENBQUM7WUFDNUNDLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxDQUFDLENBQUM7VUFBQztVQUFBO1lBQUEsT0FBQXVELFNBQUEsQ0FBQWQsSUFBQTtRQUFBO01BQUEsR0FBQVksUUFBQTtJQUFBLENBQzlCLEdBQUM7SUFFRjdELEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxZQUFNO01BQ2pDLElBQUFnRSxRQUFBLEdBQXNCLElBQUEvRCxjQUFNLGVBQzFCbEIsTUFBQSxZQUFBbUIsYUFBQSxDQUFDZCxnQkFBQSxDQUFBZSxlQUFlO1VBQ2RaLEtBQUssRUFBRSxHQUFJO1VBQ1hJLFFBQVEsRUFBRUMsSUFBSSxDQUFDQyxFQUFFLENBQUM7UUFBRSxDQUNyQixDQUNILENBQUM7UUFMT2tCLFNBQVMsR0FBQWlELFFBQUEsQ0FBVGpELFNBQVM7TUFPakIsSUFBTVgsS0FBSyxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxZQUFZLENBQUM7TUFDNUNDLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxHQUFHLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0VBRUZuQixRQUFRLENBQUMsdUJBQXVCLEVBQUUsWUFBTTtJQUN0Q1csRUFBRSxDQUFDLDJCQUEyQixtQkFBQStCLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBRSxTQUFBZ0MsU0FBQTtNQUFBLElBQUE5QixJQUFBLEVBQUF4QyxRQUFBLEVBQUFTLEtBQUE7TUFBQSxPQUFBNEIsWUFBQSxZQUFBSSxJQUFBLFdBQUE4QixTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQTVCLElBQUEsR0FBQTRCLFNBQUEsQ0FBQTNCLElBQUE7VUFBQTtZQUN4QkosSUFBSSxHQUFHSyxxQkFBUyxDQUFDQyxLQUFLLENBQUMsQ0FBQztZQUN4QjlDLFFBQVEsR0FBR0MsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztZQUMxQixJQUFBSSxjQUFNLGVBQUNsQixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWUsTUFBQU0sU0FBQSxpQkFBS25CLFlBQVk7Y0FBRUssUUFBUSxFQUFFQTtZQUFTLEVBQUUsQ0FBQyxDQUFDO1lBRTNEUyxLQUFLLEdBQUdDLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLFlBQVksQ0FBQztZQUM1Q0YsS0FBSyxDQUFDK0QsS0FBSyxDQUFDLENBQUM7WUFBQ0QsU0FBQSxDQUFBM0IsSUFBQTtZQUFBLE9BQ1JKLElBQUksQ0FBQ1EsSUFBSSxDQUFDdkMsS0FBSyxFQUFFLFNBQVMsQ0FBQztVQUFBO1lBRWpDRyxNQUFNLENBQUNILEtBQUssQ0FBQyxDQUFDZ0IsR0FBRyxDQUFDZ0QsV0FBVyxDQUFDLENBQUM7VUFBQztVQUFBO1lBQUEsT0FBQUYsU0FBQSxDQUFBakIsSUFBQTtRQUFBO01BQUEsR0FBQWdCLFFBQUE7SUFBQSxDQUNqQyxHQUFDO0lBRUZqRSxFQUFFLENBQUMsdUJBQXVCLG1CQUFBK0Isa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFFLFNBQUFvQyxTQUFBO01BQUEsSUFBQWxDLElBQUEsRUFBQS9CLEtBQUE7TUFBQSxPQUFBNEIsWUFBQSxZQUFBSSxJQUFBLFdBQUFrQyxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQWhDLElBQUEsR0FBQWdDLFNBQUEsQ0FBQS9CLElBQUE7VUFBQTtZQUNwQkosSUFBSSxHQUFHSyxxQkFBUyxDQUFDQyxLQUFLLENBQUMsQ0FBQztZQUM5QixJQUFBeEMsY0FBTSxlQUFDbEIsTUFBQSxZQUFBbUIsYUFBQSxDQUFDZCxnQkFBQSxDQUFBZSxlQUFlLEVBQUtiLFlBQWUsQ0FBQyxDQUFDO1lBRXZDYyxLQUFLLEdBQUdDLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLFlBQVksQ0FBQztZQUFBZ0UsU0FBQSxDQUFBL0IsSUFBQTtZQUFBLE9BQ3RDSixJQUFJLENBQUNPLEtBQUssQ0FBQ3RDLEtBQUssQ0FBQztVQUFBO1lBQUFrRSxTQUFBLENBQUEvQixJQUFBO1lBQUEsT0FDakJKLElBQUksQ0FBQ1EsSUFBSSxDQUFDdkMsS0FBSyxFQUFFLElBQUksQ0FBQztVQUFBO1lBRTVCRyxNQUFNLENBQUNILEtBQUssQ0FBQyxDQUFDSSxXQUFXLENBQUMsRUFBRSxDQUFDO1VBQUM7VUFBQTtZQUFBLE9BQUE4RCxTQUFBLENBQUFyQixJQUFBO1FBQUE7TUFBQSxHQUFBb0IsUUFBQTtJQUFBLENBQy9CLEdBQUM7SUFFRnJFLEVBQUUsQ0FBQyxzQkFBc0IsbUJBQUErQixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUUsU0FBQXNDLFNBQUE7TUFBQSxJQUFBcEMsSUFBQSxFQUFBL0IsS0FBQTtNQUFBLE9BQUE0QixZQUFBLFlBQUFJLElBQUEsV0FBQW9DLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBbEMsSUFBQSxHQUFBa0MsU0FBQSxDQUFBakMsSUFBQTtVQUFBO1lBQ25CSixJQUFJLEdBQUdLLHFCQUFTLENBQUNDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLElBQUF4QyxjQUFNLGVBQUNsQixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWUsTUFBQU0sU0FBQSxpQkFBS25CLFlBQVk7Y0FBRUUsR0FBRyxFQUFFLENBQUMsR0FBSTtjQUFDRCxLQUFLLEVBQUU7WUFBRSxFQUFFLENBQUMsQ0FBQztZQUU1RGEsS0FBSyxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxZQUFZLENBQUM7WUFBQWtFLFNBQUEsQ0FBQWpDLElBQUE7WUFBQSxPQUN0Q0osSUFBSSxDQUFDTyxLQUFLLENBQUN0QyxLQUFLLENBQUM7VUFBQTtZQUFBb0UsU0FBQSxDQUFBakMsSUFBQTtZQUFBLE9BQ2pCSixJQUFJLENBQUNRLElBQUksQ0FBQ3ZDLEtBQUssRUFBRSxJQUFJLENBQUM7VUFBQTtZQUU1QkcsTUFBTSxDQUFDSCxLQUFLLENBQUMsQ0FBQ0ksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQUM7VUFBQTtZQUFBLE9BQUFnRSxTQUFBLENBQUF2QixJQUFBO1FBQUE7TUFBQSxHQUFBc0IsUUFBQTtJQUFBLENBQy9CLEdBQUM7RUFDSixDQUFDLENBQUM7RUFFRmxGLFFBQVEsQ0FBQyxlQUFlLEVBQUUsWUFBTTtJQUM5QlcsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLFlBQU07TUFDMUMsSUFBQXlFLFFBQUEsR0FBcUIsSUFBQXhFLGNBQU0sZUFDekJsQixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWUsTUFBQU0sU0FBQSxpQkFBS25CLFlBQVk7VUFBRUMsS0FBSyxFQUFFO1FBQUUsRUFBRSxDQUNoRCxDQUFDO1FBRk9tRixRQUFRLEdBQUFELFFBQUEsQ0FBUkMsUUFBUTtNQUloQixJQUFJdEUsS0FBSyxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxZQUFZLENBQUM7TUFDMUNDLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxDQUFDLENBQUM7TUFFNUJrRSxRQUFRLGNBQUMzRixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWUsTUFBQU0sU0FBQSxpQkFBS25CLFlBQVk7UUFBRUMsS0FBSyxFQUFFO01BQUUsRUFBRSxDQUFDLENBQUM7TUFFekRhLEtBQUssR0FBR0MsY0FBTSxDQUFDQyxTQUFTLENBQUMsWUFBWSxDQUFDO01BQ3RDQyxNQUFNLENBQUNILEtBQUssQ0FBQyxDQUFDSSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQztJQUVGUixFQUFFLENBQUMsK0NBQStDLG1CQUFBK0Isa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFFLFNBQUEwQyxTQUFBO01BQUEsSUFBQXhDLElBQUEsRUFBQXhDLFFBQUEsRUFBQWlGLFNBQUEsRUFBQUYsUUFBQSxFQUFBdEUsS0FBQTtNQUFBLE9BQUE0QixZQUFBLFlBQUFJLElBQUEsV0FBQXlDLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBdkMsSUFBQSxHQUFBdUMsU0FBQSxDQUFBdEMsSUFBQTtVQUFBO1lBQzVDSixJQUFJLEdBQUdLLHFCQUFTLENBQUNDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCOUMsUUFBUSxHQUFHQyxJQUFJLENBQUNDLEVBQUUsQ0FBQyxDQUFDO1lBQUErRSxTQUFBLEdBQ0wsSUFBQTNFLGNBQU0sZUFDekJsQixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWU7Y0FDZFosS0FBSyxFQUFFLENBQUU7Y0FDVEMsR0FBRyxFQUFFLENBQUU7Y0FDUEMsR0FBRyxFQUFFLEVBQUc7Y0FDUkUsUUFBUSxFQUFFQTtZQUFTLENBQ3BCLENBQ0gsQ0FBQyxFQVBPK0UsUUFBUSxHQUFBRSxTQUFBLENBQVJGLFFBQVE7WUFTaEJBLFFBQVEsY0FDTjNGLE1BQUEsWUFBQW1CLGFBQUEsQ0FBQ2QsZ0JBQUEsQ0FBQWUsZUFBZTtjQUNkWixLQUFLLEVBQUUsQ0FBRTtjQUNUQyxHQUFHLEVBQUUsQ0FBRTtjQUNQQyxHQUFHLEVBQUUsQ0FBRTtjQUNQRSxRQUFRLEVBQUVBO1lBQVMsQ0FDcEIsQ0FDSCxDQUFDO1lBRUtTLEtBQUssR0FBR0MsY0FBTSxDQUFDQyxTQUFTLENBQUMsWUFBWSxDQUFDO1lBQUF1RSxTQUFBLENBQUF0QyxJQUFBO1lBQUEsT0FDdENKLElBQUksQ0FBQ08sS0FBSyxDQUFDdEMsS0FBSyxDQUFDO1VBQUE7WUFBQXlFLFNBQUEsQ0FBQXRDLElBQUE7WUFBQSxPQUNqQkosSUFBSSxDQUFDUSxJQUFJLENBQUN2QyxLQUFLLEVBQUUsSUFBSSxDQUFDO1VBQUE7WUFDNUJ3QyxpQkFBUyxDQUFDQyxJQUFJLENBQUN6QyxLQUFLLENBQUM7WUFBQ3lFLFNBQUEsQ0FBQXRDLElBQUE7WUFBQSxPQUVoQixJQUFBTyxlQUFPLEVBQUMsWUFBTTtjQUNsQnZDLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBcUUsU0FBQSxDQUFBNUIsSUFBQTtRQUFBO01BQUEsR0FBQTBCLFFBQUE7SUFBQSxDQUNILEdBQUM7SUFFRjNFLEVBQUUsQ0FBQywwREFBMEQsRUFBRSxZQUFNO01BQ25FLElBQU1MLFFBQVEsR0FBR0MsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztNQUMxQixJQUFBaUYsU0FBQSxHQUFxQixJQUFBN0UsY0FBTSxlQUN6QmxCLE1BQUEsWUFBQW1CLGFBQUEsQ0FBQ2QsZ0JBQUEsQ0FBQWUsZUFBZTtVQUNkWixLQUFLLEVBQUUsQ0FBRTtVQUNUQyxHQUFHLEVBQUUsQ0FBRTtVQUNQQyxHQUFHLEVBQUUsRUFBRztVQUNSRSxRQUFRLEVBQUVBO1FBQVMsQ0FDcEIsQ0FDSCxDQUFDO1FBUE8rRSxRQUFRLEdBQUFJLFNBQUEsQ0FBUkosUUFBUTtNQVNoQkEsUUFBUSxjQUNOM0YsTUFBQSxZQUFBbUIsYUFBQSxDQUFDZCxnQkFBQSxDQUFBZSxlQUFlO1FBQ2RaLEtBQUssRUFBRSxDQUFFO1FBQ1RDLEdBQUcsRUFBRSxDQUFFO1FBQ1BDLEdBQUcsRUFBRSxDQUFFO1FBQ1BFLFFBQVEsRUFBRUE7TUFBUyxDQUNwQixDQUNILENBQUM7O01BRUQ7TUFDQVksTUFBTSxDQUFDRixjQUFNLENBQUNDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDTSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVELENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGdkIsUUFBUSxDQUFDLHVCQUF1QixFQUFFLFlBQU07SUFDdENXLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxZQUFNO01BQ3ZELElBQUFDLGNBQU0sZUFDSmxCLE1BQUEsWUFBQW1CLGFBQUEsQ0FBQ2QsZ0JBQUEsQ0FBQWUsZUFBZTtRQUNkWixLQUFLLEVBQUV3RixTQUFVO1FBQ2pCcEYsUUFBUSxFQUFFQyxJQUFJLENBQUNDLEVBQUUsQ0FBQztNQUFFLENBQ3JCLENBQ0gsQ0FBQztNQUVELElBQU1PLEtBQUssR0FBR0MsY0FBTSxDQUFDQyxTQUFTLENBQUMsWUFBWSxDQUFDO01BQzVDQyxNQUFNLENBQUNILEtBQUssQ0FBQyxDQUFDSSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQztJQUVGUixFQUFFLENBQUMsMkNBQTJDLEVBQUUsWUFBTTtNQUNwRCxJQUFBQyxjQUFNLGVBQ0psQixNQUFBLFlBQUFtQixhQUFBLENBQUNkLGdCQUFBLENBQUFlLGVBQWU7UUFDZFosS0FBSyxFQUFFd0YsU0FBVTtRQUNqQnRGLEdBQUcsRUFBRSxFQUFHO1FBQ1JFLFFBQVEsRUFBRUMsSUFBSSxDQUFDQyxFQUFFLENBQUM7TUFBRSxDQUNyQixDQUNILENBQUM7TUFFRCxJQUFNTyxLQUFLLEdBQUdDLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLFlBQVksQ0FBQztNQUM1Q0MsTUFBTSxDQUFDSCxLQUFLLENBQUMsQ0FBQ0ksV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUMvQixDQUFDLENBQUM7SUFFRlIsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLFlBQU07TUFDcEQsSUFBQUMsY0FBTSxlQUNKbEIsTUFBQSxZQUFBbUIsYUFBQSxDQUFDZCxnQkFBQSxDQUFBZSxlQUFlO1FBQ2RaLEtBQUssRUFBRXdGLFNBQVU7UUFDakJ2RixHQUFHLEVBQUUsQ0FBRTtRQUNQRyxRQUFRLEVBQUVDLElBQUksQ0FBQ0MsRUFBRSxDQUFDO01BQUUsQ0FDckIsQ0FDSCxDQUFDO01BRUQsSUFBTU8sS0FBSyxHQUFHQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxZQUFZLENBQUM7TUFDNUNDLE1BQU0sQ0FBQ0gsS0FBSyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|