@gnwebsoft/ui 4.0.13 → 4.0.15

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.
Files changed (54) hide show
  1. package/dist/{chunk-QATCBGCZ.cjs → chunk-3CHF3PN3.cjs} +10 -4
  2. package/dist/chunk-5S2NCVG3.cjs +2384 -0
  3. package/dist/chunk-6PMJWQ4R.cjs +1 -1
  4. package/dist/chunk-LUW7V5GI.cjs +1 -1
  5. package/dist/chunk-ML5UQCRH.js +2535 -0
  6. package/dist/chunk-MVPLBJRK.cjs +1 -1
  7. package/dist/chunk-XTPFOURJ.cjs +1 -1
  8. package/dist/chunk-Y3QTSDLJ.cjs +1 -1
  9. package/dist/chunk-Y7B4RYYD.js +2384 -0
  10. package/dist/core/components/LabelText/LabelText.d.ts.map +1 -1
  11. package/dist/core/index.cjs +3 -3
  12. package/dist/core/index.d.ts +0 -1
  13. package/dist/core/index.d.ts.map +1 -1
  14. package/dist/core/index.js +1 -1
  15. package/dist/hooks/index.cjs +1 -1
  16. package/dist/index.cjs +4 -6
  17. package/dist/index.js +4 -6
  18. package/dist/types/AsyncSelectPayload.d.ts +4 -4
  19. package/dist/types/AsyncSelectPayload.d.ts.map +1 -1
  20. package/dist/types/OptionItem.d.ts +0 -9
  21. package/dist/types/OptionItem.d.ts.map +1 -1
  22. package/dist/types/index.cjs +1 -1
  23. package/dist/utils/index.cjs +1 -1
  24. package/dist/wrappers/AsyncMultiSelect/AsyncMultiSelect.d.ts.map +1 -1
  25. package/dist/wrappers/AsyncMultiSelect/types.d.ts +5 -5
  26. package/dist/wrappers/AsyncMultiSelect/types.d.ts.map +1 -1
  27. package/dist/wrappers/AsyncSelect/index.d.ts.map +1 -1
  28. package/dist/wrappers/AsyncSelect/types.d.ts +2 -1
  29. package/dist/wrappers/AsyncSelect/types.d.ts.map +1 -1
  30. package/dist/wrappers/CheckboxGroup/CheckboxGroup.d.ts +10 -10
  31. package/dist/wrappers/CheckboxGroup/CheckboxGroup.d.ts.map +1 -1
  32. package/dist/wrappers/CheckboxGroup/index.d.ts +2 -2
  33. package/dist/wrappers/CheckboxGroup/index.d.ts.map +1 -1
  34. package/dist/wrappers/Field/index.d.ts +3 -3
  35. package/dist/wrappers/SelectCascadeElement/SelectCascadeElement.d.ts +1 -1
  36. package/dist/wrappers/SelectCascadeElement/SelectCascadeElement.d.ts.map +1 -1
  37. package/dist/wrappers/SelectElement/SelectElement.d.ts +5 -64
  38. package/dist/wrappers/SelectElement/SelectElement.d.ts.map +1 -1
  39. package/dist/wrappers/SelectMultiElement/SelectMultiElement.d.ts +2 -1
  40. package/dist/wrappers/SelectMultiElement/SelectMultiElement.d.ts.map +1 -1
  41. package/dist/wrappers/index.cjs +3 -5
  42. package/dist/wrappers/index.d.ts +0 -1
  43. package/dist/wrappers/index.d.ts.map +1 -1
  44. package/dist/wrappers/index.js +3 -5
  45. package/package.json +1 -1
  46. package/dist/chunk-6SIBDHHA.js +0 -2529
  47. package/dist/chunk-7GUBRAV7.cjs +0 -2450
  48. package/dist/chunk-CXNQVZRD.js +0 -2450
  49. package/dist/wrappers/AsyncMultiSelect2/AsyncMultiSelect2.d.ts +0 -8
  50. package/dist/wrappers/AsyncMultiSelect2/AsyncMultiSelect2.d.ts.map +0 -1
  51. package/dist/wrappers/AsyncMultiSelect2/index.d.ts +0 -3
  52. package/dist/wrappers/AsyncMultiSelect2/index.d.ts.map +0 -1
  53. package/dist/wrappers/AsyncMultiSelect2/types.d.ts +0 -29
  54. package/dist/wrappers/AsyncMultiSelect2/types.d.ts.map +0 -1
@@ -0,0 +1,2384 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+
4
+ var _chunkY3QTSDLJcjs = require('./chunk-Y3QTSDLJ.cjs');
5
+
6
+
7
+ var _chunkLUW7V5GIcjs = require('./chunk-LUW7V5GI.cjs');
8
+
9
+ // src/wrappers/types/common.ts
10
+ function isValidOption(value) {
11
+ return typeof value === "object" && value !== null && "Label" in value && "Value" in value && typeof value.Label === "string" && (typeof value.Value === "string" || typeof value.Value === "number" || typeof value.Value === "boolean");
12
+ }
13
+ function normalizeOptions(options, labelField = "Label", valueField = "Value") {
14
+ return options.map((option) => ({
15
+ Label: String(_nullishCoalesce(option[labelField], () => ( ""))),
16
+ Value: option[valueField],
17
+ disabled: Boolean(option.disabled)
18
+ }));
19
+ }
20
+
21
+ // src/wrappers/AsyncMultiSelect/AsyncMultiSelect.tsx
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+ var _material = require('@mui/material');
30
+ var _match = require('autosuggest-highlight/match'); var _match2 = _interopRequireDefault(_match);
31
+ var _parse = require('autosuggest-highlight/parse'); var _parse2 = _interopRequireDefault(_parse);
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+ var _react = require('react');
40
+ var _reacthookform = require('react-hook-form');
41
+ var _jsxruntime = require('react/jsx-runtime');
42
+ var Component = function AsyncSelectMultiElement(props) {
43
+ const {
44
+ name,
45
+ disabled,
46
+ control,
47
+ placeholder,
48
+ label,
49
+ queryFn,
50
+ variant,
51
+ labelField = "Label",
52
+ valueField = "Value",
53
+ ...rest
54
+ } = props;
55
+ const {
56
+ field,
57
+ fieldState: { error }
58
+ } = _reacthookform.useController.call(void 0, {
59
+ name,
60
+ control
61
+ });
62
+ const theme = _material.useTheme.call(void 0, );
63
+ const [selectedOptions, setSelectedOptions] = _react.useState.call(void 0, []);
64
+ const [inputValue, setInputValue] = _react.useState.call(void 0, "");
65
+ const [options, setOptions] = _react.useState.call(void 0, []);
66
+ const [loading, setLoading] = _react.useState.call(void 0, false);
67
+ const loadedValuesRef = _react.useRef.call(void 0, []);
68
+ const isInitialPopulationActive = _react.useRef.call(void 0, false);
69
+ const lastFetchedSearchTermRef = _react.useRef.call(void 0, null);
70
+ const initialLoadCompleteRef = _react.useRef.call(void 0, false);
71
+ const selectedOptionsRef = _react.useRef.call(void 0, []);
72
+ const getOptionValue = _react.useCallback.call(void 0,
73
+ (option) => option ? String(option[valueField]) : "",
74
+ [valueField]
75
+ );
76
+ const getOptionLabel = _react.useCallback.call(void 0,
77
+ (option) => option ? String(option[labelField]) : "",
78
+ [labelField]
79
+ );
80
+ const fetchData = _react.useMemo.call(void 0,
81
+ () => _material.debounce.call(void 0,
82
+ (payload, callback) => {
83
+ queryFn(payload).then((c) => {
84
+ if (Array.isArray(c)) {
85
+ callback(c);
86
+ } else if (c && Array.isArray(c.data)) {
87
+ callback(
88
+ c.data
89
+ );
90
+ } else if (c && Array.isArray(c.Data)) {
91
+ callback(
92
+ c.Data
93
+ );
94
+ } else {
95
+ callback([]);
96
+ }
97
+ });
98
+ },
99
+ 400
100
+ ),
101
+ [queryFn]
102
+ );
103
+ _react.useEffect.call(void 0, () => {
104
+ selectedOptionsRef.current = selectedOptions;
105
+ }, [selectedOptions]);
106
+ _react.useEffect.call(void 0, () => {
107
+ const formValues = Array.isArray(field.value) ? field.value : [];
108
+ if (initialLoadCompleteRef.current && JSON.stringify(formValues) === JSON.stringify(loadedValuesRef.current)) {
109
+ return;
110
+ }
111
+ if (formValues.length === 0) {
112
+ setSelectedOptions([]);
113
+ setOptions([]);
114
+ loadedValuesRef.current = [];
115
+ lastFetchedSearchTermRef.current = null;
116
+ initialLoadCompleteRef.current = true;
117
+ return;
118
+ }
119
+ let active = true;
120
+ setLoading(true);
121
+ isInitialPopulationActive.current = true;
122
+ loadedValuesRef.current = formValues;
123
+ initialLoadCompleteRef.current = true;
124
+ fetchData({ Query: null, SelectedValue: formValues }, (results) => {
125
+ if (active) {
126
+ const fetchedOptions = results || [];
127
+ setSelectedOptions([...fetchedOptions]);
128
+ setOptions(fetchedOptions);
129
+ }
130
+ setLoading(false);
131
+ isInitialPopulationActive.current = false;
132
+ });
133
+ return () => {
134
+ active = false;
135
+ };
136
+ }, [field.value, fetchData]);
137
+ _react.useEffect.call(void 0, () => {
138
+ if (isInitialPopulationActive.current || !initialLoadCompleteRef.current) {
139
+ return;
140
+ }
141
+ if (!inputValue) {
142
+ setOptions(selectedOptionsRef.current);
143
+ lastFetchedSearchTermRef.current = null;
144
+ return;
145
+ }
146
+ if (inputValue === lastFetchedSearchTermRef.current) {
147
+ return;
148
+ }
149
+ let active = true;
150
+ setLoading(true);
151
+ fetchData({ Query: inputValue, SelectedValue: null }, (searchResults) => {
152
+ if (active) {
153
+ const results = searchResults || [];
154
+ const currentSelected = selectedOptionsRef.current;
155
+ const selectedOptionIds = new Set(
156
+ currentSelected.map((opt) => getOptionValue(opt))
157
+ );
158
+ const combined = [...currentSelected];
159
+ results.forEach((result) => {
160
+ if (!selectedOptionIds.has(getOptionValue(result))) {
161
+ combined.push(result);
162
+ }
163
+ });
164
+ setOptions(combined);
165
+ lastFetchedSearchTermRef.current = inputValue;
166
+ }
167
+ setLoading(false);
168
+ });
169
+ return () => {
170
+ active = false;
171
+ };
172
+ }, [inputValue, fetchData, getOptionValue]);
173
+ const handleChange = (_, newSelectedOptions) => {
174
+ setSelectedOptions(newSelectedOptions);
175
+ const newValues = newSelectedOptions.map((c) => c[valueField]);
176
+ field.onChange(newValues);
177
+ loadedValuesRef.current = newValues;
178
+ setInputValue("");
179
+ lastFetchedSearchTermRef.current = null;
180
+ };
181
+ const isDisabled = _react.useMemo.call(void 0, () => {
182
+ return _nullishCoalesce(disabled, () => ( false));
183
+ }, [disabled]);
184
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
185
+ _material.Autocomplete,
186
+ {
187
+ multiple: true,
188
+ loading,
189
+ getOptionLabel,
190
+ isOptionEqualToValue: (option, val) => getOptionValue(option) === getOptionValue(val),
191
+ options,
192
+ value: selectedOptions,
193
+ disabled,
194
+ filterSelectedOptions: true,
195
+ filterOptions: (x) => x,
196
+ noOptionsText: "Type Something...",
197
+ onChange: handleChange,
198
+ sx: {
199
+ "&.Mui-disabled": {
200
+ cursor: "not-allowed !important"
201
+ },
202
+ "& .MuiInputBase-root.Mui-disabled": {
203
+ backgroundColor: theme.palette.action.disabledBackground,
204
+ cursor: "not-allowed !important"
205
+ },
206
+ "&.Mui-disabled .MuiAutocomplete-popupIndicator": {
207
+ cursor: "not-allowed !important"
208
+ },
209
+ "& .MuiOutlinedInput-root.Mui-disabled .MuiOutlinedInput-notchedOutline": {
210
+ borderColor: error ? "red" : void 0
211
+ },
212
+ "& .MuiFilledInput-root.Mui-disabled": {
213
+ borderColor: error ? "red" : void 0
214
+ }
215
+ },
216
+ onInputChange: (_, newInputValue) => setInputValue(newInputValue),
217
+ renderInput: (params) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
218
+ _material.TextField,
219
+ {
220
+ ...params,
221
+ label,
222
+ error: !!error,
223
+ helperText: error ? error.message : "",
224
+ placeholder,
225
+ InputProps: {
226
+ ...params.InputProps,
227
+ endAdornment: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _react.Fragment, { children: [
228
+ loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.CircularProgress, { color: "inherit", size: 20 }) : null,
229
+ params.InputProps.endAdornment
230
+ ] })
231
+ },
232
+ variant: variant ? variant : isDisabled ? "filled" : "outlined"
233
+ }
234
+ ),
235
+ renderOption: (props2, option, state) => {
236
+ const { key, ...optionProps } = props2;
237
+ const optionLabel = getOptionLabel(option);
238
+ const matches = _match2.default.call(void 0, optionLabel, state.inputValue, {
239
+ insideWords: true
240
+ });
241
+ const parts = _parse2.default.call(void 0, optionLabel, matches);
242
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { ...optionProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { children: parts.map((part, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
243
+ "span",
244
+ {
245
+ style: {
246
+ fontWeight: part.highlight ? 700 : 400
247
+ },
248
+ children: part.text
249
+ },
250
+ index
251
+ )) }) }, key);
252
+ },
253
+ ...rest
254
+ }
255
+ );
256
+ };
257
+ var AsyncSelectMultiElement2 = ({
258
+ gridProps,
259
+ ...props
260
+ }) => {
261
+ if (gridProps) {
262
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
263
+ _material.Grid,
264
+ {
265
+ ...{ size: { xs: 12, sm: 12, md: 12, lg: 12, xl: 12 }, ...gridProps },
266
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
267
+ Component,
268
+ {
269
+ ...props
270
+ }
271
+ )
272
+ }
273
+ );
274
+ }
275
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component, { ...props });
276
+ };
277
+ AsyncSelectMultiElement2.displayName = "AsyncSelectMulti";
278
+
279
+ // src/wrappers/CheckboxElement/CheckboxElement.tsx
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+ var Component2 = function CheckboxElement(props) {
291
+ const {
292
+ name,
293
+ control,
294
+ label,
295
+ labelProps,
296
+ helperText,
297
+ parseError,
298
+ transform,
299
+ disabled,
300
+ onChange: customOnChange,
301
+ ...rest
302
+ } = props;
303
+ const {
304
+ field,
305
+ fieldState: { error }
306
+ } = _reacthookform.useController.call(void 0, {
307
+ name,
308
+ control,
309
+ disabled
310
+ });
311
+ if (field.value == null || field.value == void 0) {
312
+ field.onChange(false);
313
+ }
314
+ const customOutputTransform = _optionalChain([transform, 'optionalAccess', _2 => _2.output]);
315
+ const { value, onChange } = _chunkY3QTSDLJcjs.useTransform.call(void 0, {
316
+ value: field.value,
317
+ onChange: field.onChange,
318
+ transform: {
319
+ input: typeof _optionalChain([transform, 'optionalAccess', _3 => _3.input]) === "function" ? transform.input : (value2) => !!value2,
320
+ output: typeof customOutputTransform === "function" ? (eventOrValue, _value) => {
321
+ const event = eventOrValue;
322
+ const checked = _value;
323
+ return customOutputTransform(event, checked);
324
+ } : (eventOrValue, _value) => {
325
+ const checked = _value;
326
+ return checked;
327
+ }
328
+ }
329
+ });
330
+ const handleChange = (event, checked) => {
331
+ onChange(event, checked);
332
+ if (typeof customOnChange === "function") {
333
+ customOnChange(event, checked);
334
+ }
335
+ };
336
+ const displayError = error ? typeof parseError === "function" ? parseError(error) : error.message : null;
337
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.FormControl, { error: !!error, disabled, children: [
338
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.FormGroup, { row: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
339
+ _material.FormControlLabel,
340
+ {
341
+ label: label || "",
342
+ ...labelProps,
343
+ disabled,
344
+ control: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
345
+ _material.Checkbox,
346
+ {
347
+ ...rest,
348
+ color: rest.color || "primary",
349
+ checked: value,
350
+ disabled,
351
+ onChange: handleChange,
352
+ ref: field.ref
353
+ }
354
+ )
355
+ }
356
+ ) }),
357
+ (displayError || helperText) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.FormHelperText, { error: !!error, children: displayError || helperText })
358
+ ] });
359
+ };
360
+ var CheckboxElement2 = ({
361
+ gridProps = {},
362
+ ...props
363
+ }) => {
364
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { size: 12, ...gridProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component2, { ...props }) });
365
+ };
366
+
367
+ // src/wrappers/CheckboxGroup/CheckboxGroup.tsx
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+ var Component3 = function CheckboxGroup(props) {
380
+ const {
381
+ name,
382
+ control,
383
+ labelProps,
384
+ labelKey = "Label",
385
+ valueKey = "Value",
386
+ options,
387
+ ...rest
388
+ } = props;
389
+ const {
390
+ field,
391
+ fieldState: { error }
392
+ } = _reacthookform.useController.call(void 0, {
393
+ name,
394
+ control,
395
+ disabled: rest.disabled
396
+ });
397
+ const selectedValuesAsString = (Array.isArray(field.value) ? field.value : []).map(String);
398
+ const handleChange = _react.useCallback.call(void 0,
399
+ (event) => {
400
+ const changedValueString = event.target.value;
401
+ const isChecked = event.target.checked;
402
+ const newSelectedValuesString = isChecked ? [...selectedValuesAsString, changedValueString] : selectedValuesAsString.filter((v) => v !== changedValueString);
403
+ const optionsAreNumeric = options.length > 0 && typeof options[0][valueKey] === "number";
404
+ if (optionsAreNumeric) {
405
+ const newValuesAsNumbers = newSelectedValuesString.map((v) => parseInt(v, 10)).filter((v) => !isNaN(v));
406
+ field.onChange(newValuesAsNumbers);
407
+ } else {
408
+ field.onChange(newSelectedValuesString);
409
+ }
410
+ },
411
+ [field, options, valueKey, selectedValuesAsString]
412
+ );
413
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.FormControl, { error: !!error, children: [
414
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.FormGroup, { row: true, children: options && options.map((option) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
415
+ _material.FormControlLabel,
416
+ {
417
+ label: option[labelKey],
418
+ ...labelProps,
419
+ control: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
420
+ _material.Checkbox,
421
+ {
422
+ ...rest,
423
+ color: rest.color || "primary",
424
+ value: option[valueKey],
425
+ checked: selectedValuesAsString.includes(
426
+ String(option[valueKey])
427
+ ),
428
+ onChange: handleChange
429
+ }
430
+ )
431
+ },
432
+ `${option[valueKey]}`
433
+ )) }),
434
+ error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.FormHelperText, { error: !!error, children: error.message })
435
+ ] });
436
+ };
437
+ var CheckboxGroupElement = ({
438
+ gridProps = {},
439
+ ...props
440
+ }) => {
441
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { size: 12, ...gridProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component3, { ...props }) });
442
+ };
443
+ CheckboxGroupElement.displayName = "CheckboxGroup";
444
+
445
+ // src/wrappers/DatePickerElement/DatePickerElement.tsx
446
+
447
+
448
+
449
+ // src/wrappers/DatePickerElement/DatePickerElementCore.tsx
450
+
451
+ var _xdatepickers = require('@mui/x-date-pickers');
452
+
453
+
454
+
455
+ // src/wrappers/DatePickerElement/hooks/useDatePickerValue.ts
456
+ var _internals = require('@mui/x-date-pickers/internals');
457
+
458
+ function readDatePickerValueAsDate(adapter, value) {
459
+ if (value === null || value === void 0) {
460
+ return null;
461
+ }
462
+ if (typeof value === "string") {
463
+ if (value === "") {
464
+ return null;
465
+ }
466
+ const parsedDate = adapter.utils.date(value);
467
+ return parsedDate;
468
+ }
469
+ return value;
470
+ }
471
+ function useDatePickerValue(options) {
472
+ const { field, transform } = options;
473
+ const adapter = _internals.useLocalizationContext.call(void 0, );
474
+ const value = _react.useMemo.call(void 0, () => {
475
+ if (typeof _optionalChain([transform, 'optionalAccess', _4 => _4.input]) === "function") {
476
+ return transform.input(field.value);
477
+ }
478
+ return readDatePickerValueAsDate(adapter, field.value);
479
+ }, [field.value, _optionalChain([transform, 'optionalAccess', _5 => _5.input]), adapter]);
480
+ const onChange = _react.useCallback.call(void 0,
481
+ (newValue, context) => {
482
+ if (typeof _optionalChain([transform, 'optionalAccess', _6 => _6.output]) === "function") {
483
+ const transformedValue = transform.output(newValue, context);
484
+ field.onChange(transformedValue);
485
+ } else {
486
+ field.onChange(newValue);
487
+ }
488
+ },
489
+ // eslint-disable-next-line react-hooks/exhaustive-deps
490
+ [field.onChange, _optionalChain([transform, 'optionalAccess', _7 => _7.output])]
491
+ );
492
+ return {
493
+ value,
494
+ onChange
495
+ };
496
+ }
497
+
498
+ // src/wrappers/DatePickerElement/hooks/useDatePickerValidation.ts
499
+
500
+ var DEFAULT_ERROR_MESSAGES = {
501
+ invalidDate: "Please enter a valid date",
502
+ minDate: "Date must be after the minimum allowed date",
503
+ maxDate: "Date must be before the maximum allowed date",
504
+ disabledDate: "This date is not allowed",
505
+ required: "This field is required"
506
+ };
507
+ function useDatePickerValidation(options) {
508
+ const { fieldState, validation, parseError, value } = options;
509
+ const validationResult = _react.useMemo.call(void 0, () => {
510
+ const { error: fieldError, invalid } = fieldState;
511
+ let currentError = fieldError;
512
+ if (!fieldError && value && validation) {
513
+ const { minDate, maxDate, shouldDisableDate, errorMessages } = validation;
514
+ if (minDate && value < minDate) {
515
+ currentError = {
516
+ type: "minDate",
517
+ message: _optionalChain([errorMessages, 'optionalAccess', _8 => _8.minDate]) || DEFAULT_ERROR_MESSAGES.minDate
518
+ };
519
+ } else if (maxDate && value > maxDate) {
520
+ currentError = {
521
+ type: "maxDate",
522
+ message: _optionalChain([errorMessages, 'optionalAccess', _9 => _9.maxDate]) || DEFAULT_ERROR_MESSAGES.maxDate
523
+ };
524
+ } else if (shouldDisableDate && shouldDisableDate(value)) {
525
+ currentError = {
526
+ type: "disabledDate",
527
+ message: _optionalChain([errorMessages, 'optionalAccess', _10 => _10.disabledDate]) || DEFAULT_ERROR_MESSAGES.disabledDate
528
+ };
529
+ }
530
+ }
531
+ const hasError = Boolean(currentError);
532
+ return {
533
+ hasError,
534
+ error: currentError,
535
+ invalid: invalid || hasError
536
+ };
537
+ }, [fieldState, validation, value]);
538
+ const errorMessage = _react.useMemo.call(void 0, () => {
539
+ if (!validationResult.error) {
540
+ return null;
541
+ }
542
+ if (parseError) {
543
+ return parseError(validationResult.error);
544
+ }
545
+ if (typeof validationResult.error === "string") {
546
+ return validationResult.error;
547
+ }
548
+ if ("message" in validationResult.error && validationResult.error.message) {
549
+ return validationResult.error.message;
550
+ }
551
+ if ("type" in validationResult.error) {
552
+ const errorType = validationResult.error.type;
553
+ switch (errorType) {
554
+ case "required":
555
+ return DEFAULT_ERROR_MESSAGES.required;
556
+ case "minDate":
557
+ return DEFAULT_ERROR_MESSAGES.minDate;
558
+ case "maxDate":
559
+ return DEFAULT_ERROR_MESSAGES.maxDate;
560
+ case "disabledDate":
561
+ return DEFAULT_ERROR_MESSAGES.disabledDate;
562
+ case "invalidDate":
563
+ default:
564
+ return DEFAULT_ERROR_MESSAGES.invalidDate;
565
+ }
566
+ }
567
+ return DEFAULT_ERROR_MESSAGES.invalidDate;
568
+ }, [validationResult.error, parseError]);
569
+ return {
570
+ ...validationResult,
571
+ errorMessage
572
+ };
573
+ }
574
+
575
+ // src/wrappers/DatePickerElement/hooks/useDatePickerStyles.ts
576
+
577
+
578
+ function useDatePickerStyles(options = {}) {
579
+ const { disabled, hasError, loading, textReadOnly, sx: customSx } = options;
580
+ const theme = _material.useTheme.call(void 0, );
581
+ const computedSx = _react.useMemo.call(void 0, () => {
582
+ const baseStyles = {
583
+ // Input field styling
584
+ "& .MuiOutlinedInput-root": {
585
+ backgroundColor: disabled ? theme.palette.action.disabledBackground : "transparent",
586
+ // Transition for smooth state changes
587
+ transition: theme.transitions.create([
588
+ "background-color",
589
+ "border-color",
590
+ "color"
591
+ ], {
592
+ duration: theme.transitions.duration.short
593
+ }),
594
+ // Error state styling
595
+ ...hasError && {
596
+ borderColor: theme.palette.error.main,
597
+ "&:hover": {
598
+ borderColor: theme.palette.error.main
599
+ },
600
+ "&.Mui-focused": {
601
+ borderColor: theme.palette.error.main,
602
+ boxShadow: `0 0 0 2px ${theme.palette.error.main}25`
603
+ // 25 is 15% opacity in hex
604
+ }
605
+ },
606
+ // Loading state styling
607
+ ...loading && {
608
+ opacity: 0.7,
609
+ pointerEvents: "none"
610
+ }
611
+ },
612
+ // Input element styling
613
+ "& .MuiInputBase-input": {
614
+ cursor: disabled ? "not-allowed" : textReadOnly ? "pointer" : "text",
615
+ // Read-only specific styling
616
+ ...textReadOnly && !disabled && {
617
+ cursor: "pointer",
618
+ userSelect: "none",
619
+ caretColor: "transparent"
620
+ // Hide text cursor in read-only mode
621
+ },
622
+ // Loading state
623
+ ...loading && {
624
+ cursor: "wait"
625
+ }
626
+ },
627
+ // Required field asterisk styling
628
+ "& .MuiInputLabel-asterisk": {
629
+ color: theme.palette.error.main,
630
+ fontSize: "1.2em"
631
+ },
632
+ // Label styling with better contrast
633
+ "& .MuiInputLabel-root": {
634
+ color: hasError ? theme.palette.error.main : theme.palette.text.secondary,
635
+ // Ensure proper contrast for disabled state
636
+ ...disabled && {
637
+ color: theme.palette.text.disabled
638
+ }
639
+ },
640
+ // Helper text styling
641
+ "& .MuiFormHelperText-root": {
642
+ marginLeft: theme.spacing(1),
643
+ marginRight: theme.spacing(1),
644
+ // Error state
645
+ ...hasError && {
646
+ color: theme.palette.error.main
647
+ }
648
+ },
649
+ // Calendar icon styling
650
+ "& .MuiInputAdornment-root": {
651
+ color: disabled ? theme.palette.action.disabled : hasError ? theme.palette.error.main : theme.palette.action.active
652
+ },
653
+ // Focus ring for accessibility
654
+ "& .MuiOutlinedInput-root.Mui-focused": {
655
+ outline: `2px solid ${theme.palette.primary.main}50`,
656
+ // 50 is 31% opacity
657
+ outlineOffset: "2px"
658
+ },
659
+ // Enhanced contrast for dark themes
660
+ ...theme.palette.mode === "dark" && {
661
+ "& .MuiOutlinedInput-root": {
662
+ borderWidth: 2
663
+ }
664
+ }
665
+ };
666
+ return customSx ? [baseStyles, customSx] : baseStyles;
667
+ }, [
668
+ theme,
669
+ disabled,
670
+ hasError,
671
+ loading,
672
+ textReadOnly,
673
+ customSx
674
+ ]);
675
+ const className = _react.useMemo.call(void 0, () => {
676
+ const classes = [];
677
+ if (disabled) classes.push("DatePickerElement--disabled");
678
+ if (hasError) classes.push("DatePickerElement--error");
679
+ if (loading) classes.push("DatePickerElement--loading");
680
+ if (textReadOnly) classes.push("DatePickerElement--readOnly");
681
+ return classes.length > 0 ? classes.join(" ") : void 0;
682
+ }, [disabled, hasError, loading, textReadOnly]);
683
+ return {
684
+ sx: computedSx,
685
+ className
686
+ };
687
+ }
688
+
689
+ // src/wrappers/DatePickerElement/DatePickerElementCore.tsx
690
+
691
+ var DatePickerElementCore = _react.forwardRef.call(void 0,
692
+ (props, ref) => {
693
+ const {
694
+ name,
695
+ required = false,
696
+ control,
697
+ parseError,
698
+ transform,
699
+ validation,
700
+ label,
701
+ placeholder,
702
+ textReadOnly = false,
703
+ helperText,
704
+ inputProps = {},
705
+ slotProps = {},
706
+ datePickerProps = {},
707
+ variant = "outlined",
708
+ loading = false,
709
+ LoadingComponent,
710
+ ...restProps
711
+ } = props;
712
+ const {
713
+ disabled,
714
+ inputRef: externalInputRef,
715
+ onClose,
716
+ ...restDatePickerProps
717
+ } = datePickerProps;
718
+ const { field, fieldState } = _reacthookform.useController.call(void 0, {
719
+ name,
720
+ control,
721
+ defaultValue: null
722
+ // Let react-hook-form handle the default value typing
723
+ });
724
+ const { value, onChange: onValueChange } = useDatePickerValue({
725
+ field,
726
+ transform
727
+ });
728
+ const { hasError, errorMessage, invalid } = useDatePickerValidation({
729
+ fieldState,
730
+ validation,
731
+ parseError,
732
+ value
733
+ });
734
+ const { className } = useDatePickerStyles({
735
+ disabled,
736
+ hasError,
737
+ loading,
738
+ textReadOnly
739
+ });
740
+ const handleInputRef = _material.useForkRef.call(void 0, field.ref, externalInputRef);
741
+ const handleChange = _react.useCallback.call(void 0,
742
+ (newValue, context) => {
743
+ onValueChange(newValue, context);
744
+ },
745
+ [onValueChange]
746
+ );
747
+ const handleClose = _react.useCallback.call(void 0,
748
+ (...args) => {
749
+ field.onBlur();
750
+ if (onClose) {
751
+ onClose(...args);
752
+ }
753
+ },
754
+ // eslint-disable-next-line react-hooks/exhaustive-deps
755
+ [field.onBlur, onClose]
756
+ );
757
+ const handleTextFieldBlur = _react.useCallback.call(void 0,
758
+ (event) => {
759
+ field.onBlur();
760
+ if (typeof inputProps.onBlur === "function") {
761
+ inputProps.onBlur(event);
762
+ }
763
+ },
764
+ // eslint-disable-next-line react-hooks/exhaustive-deps
765
+ [field.onBlur, inputProps.onBlur]
766
+ );
767
+ const memoizedSlotProps = _react.useMemo.call(void 0,
768
+ () => ({
769
+ ...slotProps,
770
+ actionBar: {
771
+ actions: ["clear", "today", "cancel", "accept"],
772
+ ...slotProps.actionBar
773
+ },
774
+ textField: {
775
+ ...inputProps,
776
+ required,
777
+ placeholder,
778
+ fullWidth: true,
779
+ variant,
780
+ onBlur: handleTextFieldBlur,
781
+ error: hasError,
782
+ helperText: hasError ? errorMessage : helperText,
783
+ inputProps: {
784
+ readOnly: textReadOnly,
785
+ "aria-invalid": invalid,
786
+ "aria-describedby": hasError ? `${name}-error` : void 0,
787
+ ...inputProps.inputProps
788
+ },
789
+ // Add loading indicator if provided
790
+ ...loading && LoadingComponent && {
791
+ InputProps: {
792
+ endAdornment: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LoadingComponent, {}),
793
+ ...inputProps.InputProps
794
+ }
795
+ },
796
+ ...slotProps.textField
797
+ }
798
+ }),
799
+ [
800
+ slotProps,
801
+ inputProps,
802
+ required,
803
+ placeholder,
804
+ variant,
805
+ handleTextFieldBlur,
806
+ hasError,
807
+ errorMessage,
808
+ helperText,
809
+ textReadOnly,
810
+ invalid,
811
+ name,
812
+ loading,
813
+ LoadingComponent
814
+ ]
815
+ );
816
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
817
+ _xdatepickers.DatePicker,
818
+ {
819
+ ...restProps,
820
+ ...restDatePickerProps,
821
+ ref,
822
+ name,
823
+ value,
824
+ onChange: handleChange,
825
+ onClose: handleClose,
826
+ inputRef: handleInputRef,
827
+ label,
828
+ disabled,
829
+ className,
830
+ slotProps: memoizedSlotProps,
831
+ "aria-invalid": invalid,
832
+ "aria-describedby": hasError ? `${name}-error` : void 0
833
+ }
834
+ );
835
+ }
836
+ );
837
+ DatePickerElementCore.displayName = "DatePickerElementCore";
838
+
839
+ // src/wrappers/DatePickerElement/DatePickerElement.tsx
840
+
841
+ var DatePickerElement = _react.forwardRef.call(void 0, (props, ref) => {
842
+ const {
843
+ gridProps = { size: { xs: 12, sm: 12, md: 12, lg: 12, xl: 12 } },
844
+ ...coreProps
845
+ } = props;
846
+ if (gridProps === false) {
847
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
848
+ DatePickerElementCore,
849
+ {
850
+ ref,
851
+ ...coreProps
852
+ }
853
+ );
854
+ }
855
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
856
+ _material.Grid,
857
+ {
858
+ ref,
859
+ ...gridProps,
860
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
861
+ DatePickerElementCore,
862
+ {
863
+ ...coreProps
864
+ }
865
+ )
866
+ }
867
+ );
868
+ });
869
+ DatePickerElement.displayName = "DatePickerElement";
870
+
871
+ // src/wrappers/DatePickerElement/utils.ts
872
+ function isValidDate(value) {
873
+ if (value === null || value === void 0) {
874
+ return false;
875
+ }
876
+ if (value instanceof Date) {
877
+ return !isNaN(value.getTime());
878
+ }
879
+ if (typeof value === "object" && value !== null) {
880
+ if ("isValid" in value && typeof value.isValid === "function") {
881
+ return value.isValid();
882
+ }
883
+ if ("isValid" in value && typeof value.isValid === "boolean") {
884
+ return value.isValid;
885
+ }
886
+ }
887
+ return false;
888
+ }
889
+ function isParsableDateString(value) {
890
+ if (typeof value !== "string" || value === "") {
891
+ return false;
892
+ }
893
+ const isoDateRegex = /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d{3})?(?:Z|[+-]\d{2}:\d{2})?)?$/;
894
+ if (isoDateRegex.test(value)) {
895
+ return true;
896
+ }
897
+ const parsed = new Date(value);
898
+ return !isNaN(parsed.getTime());
899
+ }
900
+ function createDateInputTransform(adapter) {
901
+ return (value) => {
902
+ if (value === null || value === void 0) {
903
+ return null;
904
+ }
905
+ if (typeof value === "string") {
906
+ if (value === "") {
907
+ return null;
908
+ }
909
+ try {
910
+ const parsed = adapter.utils.date(value);
911
+ return isValidDate(parsed) ? parsed : null;
912
+ } catch (e2) {
913
+ return null;
914
+ }
915
+ }
916
+ if (isValidDate(value)) {
917
+ return value;
918
+ }
919
+ return null;
920
+ };
921
+ }
922
+ function createDateOutputTransform(format) {
923
+ return (value) => {
924
+ if (value === null || value === void 0) {
925
+ return null;
926
+ }
927
+ if (!isValidDate(value)) {
928
+ return null;
929
+ }
930
+ if (!format) {
931
+ return value;
932
+ }
933
+ try {
934
+ if (value instanceof Date) {
935
+ if (format === "iso") {
936
+ return value.toISOString();
937
+ }
938
+ if (format === "date-only") {
939
+ return value.toISOString().split("T")[0];
940
+ }
941
+ }
942
+ if (typeof value.format === "function") {
943
+ return value.format(format);
944
+ }
945
+ if (typeof value.format === "function") {
946
+ return value.format(format);
947
+ }
948
+ if (typeof value.toFormat === "function") {
949
+ return value.toFormat(format);
950
+ }
951
+ return value;
952
+ } catch (e3) {
953
+ return null;
954
+ }
955
+ };
956
+ }
957
+ function createDefaultDatePickerConfig() {
958
+ return {
959
+ // Default slot props for consistent behavior
960
+ slotProps: {
961
+ actionBar: {
962
+ actions: ["clear", "today", "cancel", "accept"]
963
+ },
964
+ textField: {
965
+ fullWidth: true,
966
+ variant: "outlined"
967
+ }
968
+ },
969
+ // Default grid props for layout consistency
970
+ gridProps: {
971
+ size: { xs: 12, sm: 12, md: 12, lg: 12, xl: 12 }
972
+ },
973
+ // Default validation configuration
974
+ validation: {
975
+ errorMessages: {
976
+ invalidDate: "Please enter a valid date",
977
+ minDate: "Date must be after the minimum allowed date",
978
+ maxDate: "Date must be before the maximum allowed date",
979
+ disabledDate: "This date is not allowed"
980
+ }
981
+ }
982
+ };
983
+ }
984
+ function extractErrorMessage(error) {
985
+ if (error === null || error === void 0) {
986
+ return "";
987
+ }
988
+ if (typeof error === "string") {
989
+ return error;
990
+ }
991
+ if (typeof error === "object" && error !== null) {
992
+ if ("message" in error && typeof error.message === "string") {
993
+ return error.message;
994
+ }
995
+ if ("type" in error && typeof error.type === "string") {
996
+ const errorType = error.type;
997
+ switch (errorType) {
998
+ case "invalidDate":
999
+ return "Please enter a valid date";
1000
+ case "minDate":
1001
+ return "Date is too early";
1002
+ case "maxDate":
1003
+ return "Date is too late";
1004
+ case "disabledDate":
1005
+ return "This date is not available";
1006
+ default:
1007
+ return "Invalid date selection";
1008
+ }
1009
+ }
1010
+ }
1011
+ return "Invalid input";
1012
+ }
1013
+ function createStableKey(config) {
1014
+ try {
1015
+ return JSON.stringify(config, (key, value) => {
1016
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
1017
+ const sorted = {};
1018
+ Object.keys(value).sort().forEach((k) => {
1019
+ sorted[k] = value[k];
1020
+ });
1021
+ return sorted;
1022
+ }
1023
+ return value;
1024
+ });
1025
+ } catch (e4) {
1026
+ return Object.keys(config).sort().join("-");
1027
+ }
1028
+ }
1029
+
1030
+ // src/wrappers/PasswordElement/PasswordElement.tsx
1031
+ var _Visibility = require('@mui/icons-material/Visibility'); var _Visibility2 = _interopRequireDefault(_Visibility);
1032
+ var _VisibilityOff = require('@mui/icons-material/VisibilityOff'); var _VisibilityOff2 = _interopRequireDefault(_VisibilityOff);
1033
+
1034
+
1035
+
1036
+
1037
+
1038
+
1039
+
1040
+
1041
+
1042
+
1043
+ var Component4 = function PasswordEl(props) {
1044
+ const {
1045
+ iconColor,
1046
+ renderIcon = (password2) => password2 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _Visibility2.default, {}) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _VisibilityOff2.default, {}),
1047
+ slotProps,
1048
+ name,
1049
+ control,
1050
+ inputRef,
1051
+ onBlur,
1052
+ ...rest
1053
+ } = props;
1054
+ const [password, setPassword] = _react.useState.call(void 0, true);
1055
+ const endAdornment = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.InputAdornment, { position: "end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1056
+ _material.IconButton,
1057
+ {
1058
+ onMouseDown: (e) => e.preventDefault(),
1059
+ onClick: () => setPassword(!password),
1060
+ tabIndex: -1,
1061
+ color: _nullishCoalesce(iconColor, () => ( "default")),
1062
+ children: renderIcon(password)
1063
+ }
1064
+ ) });
1065
+ const {
1066
+ field,
1067
+ fieldState: { error }
1068
+ } = _reacthookform.useController.call(void 0, {
1069
+ name,
1070
+ control
1071
+ });
1072
+ const handleInputRef = _material.useForkRef.call(void 0, field.ref, inputRef);
1073
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1074
+ _material.TextField,
1075
+ {
1076
+ ...rest,
1077
+ inputRef: handleInputRef,
1078
+ type: password ? "password" : "text",
1079
+ value: _nullishCoalesce(field.value, () => ( "")),
1080
+ fullWidth: true,
1081
+ variant: _nullishCoalesce(rest.variant, () => ( "outlined")),
1082
+ onChange: (event) => {
1083
+ field.onChange(event);
1084
+ if (typeof rest.onChange === "function") {
1085
+ rest.onChange(event);
1086
+ }
1087
+ },
1088
+ onBlur: (event) => {
1089
+ field.onBlur();
1090
+ if (typeof onBlur === "function") {
1091
+ onBlur(event);
1092
+ }
1093
+ },
1094
+ ...typeof slotProps === "undefined" ? {
1095
+ InputProps: {
1096
+ endAdornment
1097
+ }
1098
+ } : {
1099
+ slotProps: {
1100
+ ...slotProps,
1101
+ input: {
1102
+ endAdornment,
1103
+ ..._optionalChain([slotProps, 'optionalAccess', _11 => _11.input])
1104
+ }
1105
+ }
1106
+ },
1107
+ error: !!error,
1108
+ helperText: error ? error.message : ""
1109
+ }
1110
+ );
1111
+ };
1112
+ var PasswordElement = ({
1113
+ gridProps = {},
1114
+ ...props
1115
+ }) => {
1116
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { size: 12, ...gridProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component4, { ...props }) });
1117
+ };
1118
+
1119
+ // src/wrappers/RadioButtonGroup/RadioButtonGroup.tsx
1120
+
1121
+
1122
+
1123
+
1124
+
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+ var Component5 = function RadioButtonGroup(props) {
1132
+ const {
1133
+ options,
1134
+ label,
1135
+ name,
1136
+ labelKey = "label",
1137
+ valueKey = "id",
1138
+ disabledKey = "disabled",
1139
+ required,
1140
+ emptyOptionLabel,
1141
+ returnObject,
1142
+ row = true,
1143
+ control,
1144
+ type,
1145
+ labelProps,
1146
+ disabled,
1147
+ formLabelProps,
1148
+ radioProps,
1149
+ transform,
1150
+ ...rest
1151
+ } = props;
1152
+ const {
1153
+ field,
1154
+ fieldState: { error }
1155
+ } = _reacthookform.useController.call(void 0, {
1156
+ name,
1157
+ disabled,
1158
+ control
1159
+ });
1160
+ const { value, onChange } = _chunkY3QTSDLJcjs.useTransform.call(void 0, {
1161
+ value: field.value,
1162
+ onChange: field.onChange,
1163
+ transform: {
1164
+ input: typeof _optionalChain([transform, 'optionalAccess', _12 => _12.input]) === "function" ? transform.input : (value2) => {
1165
+ return value2 || "";
1166
+ },
1167
+ output: typeof _optionalChain([transform, 'optionalAccess', _13 => _13.output]) === "function" ? _optionalChain([transform, 'optionalAccess', _14 => _14.output]) : (_event, value2) => {
1168
+ if (value2 && type === "number") {
1169
+ return Number(value2);
1170
+ }
1171
+ if (value2 && type === "boolean") {
1172
+ return Boolean(value2);
1173
+ }
1174
+ return value2;
1175
+ }
1176
+ }
1177
+ });
1178
+ const onRadioChange = (event, radioValue) => {
1179
+ const returnValue = returnObject ? options.find((option) => option[valueKey] === radioValue) : radioValue;
1180
+ onChange(event, returnValue);
1181
+ if (typeof rest.onChange === "function") {
1182
+ rest.onChange(returnValue);
1183
+ }
1184
+ };
1185
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.FormControl, { error: !!error, children: [
1186
+ label && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.FormLabel, { ...formLabelProps, required, error: !!error, children: label }),
1187
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.RadioGroup, { onChange: onRadioChange, name, row, value, children: [
1188
+ emptyOptionLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1189
+ _material.FormControlLabel,
1190
+ {
1191
+ ...labelProps,
1192
+ control: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1193
+ _material.Radio,
1194
+ {
1195
+ ...radioProps,
1196
+ checked: !value
1197
+ }
1198
+ ),
1199
+ label: emptyOptionLabel,
1200
+ value: ""
1201
+ }
1202
+ ),
1203
+ options.map((option) => {
1204
+ const optionKey = option[valueKey];
1205
+ const optionDisabled = option[disabledKey] || false;
1206
+ let val = returnObject ? _optionalChain([value, 'optionalAccess', _15 => _15[valueKey]]) : value;
1207
+ if (type === "number" && val !== void 0) {
1208
+ val = Number(val);
1209
+ } else if (type === "boolean" && val !== void 0) {
1210
+ val = Boolean(val);
1211
+ }
1212
+ const isChecked = val === optionKey;
1213
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1214
+ _material.FormControlLabel,
1215
+ {
1216
+ ...labelProps,
1217
+ control: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1218
+ _material.Radio,
1219
+ {
1220
+ ...radioProps,
1221
+ disabled: disabled || optionDisabled,
1222
+ checked: isChecked
1223
+ }
1224
+ ),
1225
+ value: optionKey,
1226
+ label: option[labelKey]
1227
+ },
1228
+ String(optionKey)
1229
+ );
1230
+ })
1231
+ ] }),
1232
+ error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.FormHelperText, { children: error.message })
1233
+ ] });
1234
+ };
1235
+ var RadioButtonGroup2 = ({
1236
+ gridProps = {},
1237
+ ...props
1238
+ }) => {
1239
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { size: 12, ...gridProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1240
+ Component5,
1241
+ {
1242
+ ...props
1243
+ }
1244
+ ) });
1245
+ };
1246
+ RadioButtonGroup2.displayName = "RadioButtonGroup";
1247
+
1248
+ // src/wrappers/SelectCascadeElement/SelectCascadeElement.tsx
1249
+
1250
+ var _styles = require('@mui/material/styles');
1251
+
1252
+
1253
+
1254
+ var Component6 = function SelectCascadeElement(props) {
1255
+ const theme = _styles.useTheme.call(void 0, );
1256
+ const {
1257
+ labelField = "Label",
1258
+ valueField = "Value",
1259
+ name,
1260
+ onBlur,
1261
+ onChange,
1262
+ disabled,
1263
+ options: optionsInput,
1264
+ control,
1265
+ loading = false,
1266
+ placeholder,
1267
+ label,
1268
+ dependsOn,
1269
+ textFieldProps = {},
1270
+ variant,
1271
+ isNullable = false,
1272
+ ...rest
1273
+ } = props;
1274
+ const { required, ...restTextProps } = textFieldProps;
1275
+ const options = _react.useMemo.call(void 0, () => optionsInput || [], [optionsInput]);
1276
+ const getOptionKey = _react.useCallback.call(void 0,
1277
+ (option) => {
1278
+ if (typeof option === "string" || typeof option === "number")
1279
+ return option;
1280
+ const key = option ? option[valueField] : void 0;
1281
+ return key !== void 0 && key !== null ? String(key) : "";
1282
+ },
1283
+ [valueField]
1284
+ );
1285
+ const getOptionLabel = _react.useCallback.call(void 0,
1286
+ (option) => {
1287
+ if (typeof option === "string") return option;
1288
+ return option ? String(option[labelField]) : "";
1289
+ },
1290
+ [labelField]
1291
+ );
1292
+ const isOptionEqualToValue = (option, value) => getOptionKey(option) === getOptionKey(value);
1293
+ const {
1294
+ field,
1295
+ fieldState: { error }
1296
+ } = _reacthookform.useController.call(void 0, {
1297
+ name,
1298
+ control
1299
+ });
1300
+ const { field: dependentField } = _reacthookform.useController.call(void 0, {
1301
+ name: dependsOn,
1302
+ control
1303
+ });
1304
+ const parentValueRef = _react.useRef.call(void 0, dependentField.value);
1305
+ _react.useEffect.call(void 0, () => {
1306
+ if (parentValueRef.current !== dependentField.value) {
1307
+ field.onChange(null);
1308
+ parentValueRef.current = dependentField.value;
1309
+ }
1310
+ }, [dependentField.value, field]);
1311
+ _react.useEffect.call(void 0, () => {
1312
+ const hasValue = field.value !== null && field.value !== void 0 && field.value !== "";
1313
+ if (options.length === 1 && !hasValue) {
1314
+ if (disabled) return;
1315
+ field.onChange(getOptionKey(options[0]));
1316
+ }
1317
+ }, [options, disabled, getOptionKey, field.onChange, dependentField.value]);
1318
+ const isDisabled = _react.useMemo.call(void 0, () => {
1319
+ if (disabled) return true;
1320
+ if (dependentField.value === null || dependentField.value === void 0 || dependentField.value === "")
1321
+ return true;
1322
+ if (options.length === 1 && !isNullable) {
1323
+ return true;
1324
+ }
1325
+ return false;
1326
+ }, [disabled, dependentField.value, options.length, isNullable]);
1327
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1328
+ _material.Autocomplete,
1329
+ {
1330
+ ...rest,
1331
+ value: options.map((option) => getOptionKey(option) === field.value ? option : null).find(Boolean) || null,
1332
+ loading,
1333
+ options,
1334
+ getOptionKey,
1335
+ getOptionLabel,
1336
+ isOptionEqualToValue,
1337
+ ref: field.ref,
1338
+ disabled: isDisabled,
1339
+ sx: {
1340
+ "&.Mui-disabled": {
1341
+ cursor: "not-allowed !important"
1342
+ },
1343
+ "& .MuiInputBase-root.Mui-disabled": {
1344
+ backgroundColor: theme.palette.action.disabledBackground,
1345
+ cursor: "not-allowed !important"
1346
+ },
1347
+ "&.Mui-disabled .MuiAutocomplete-popupIndicator": {
1348
+ cursor: "not-allowed !important"
1349
+ },
1350
+ "& .MuiOutlinedInput-root.Mui-disabled .MuiOutlinedInput-notchedOutline": {
1351
+ borderColor: error ? "red" : void 0
1352
+ },
1353
+ "& .MuiFilledInput-root.Mui-disabled": {
1354
+ borderColor: error ? "red" : void 0
1355
+ }
1356
+ },
1357
+ onChange: (event, newValue, reason) => {
1358
+ field.onChange(newValue ? getOptionKey(newValue) : null);
1359
+ if (onChange && typeof onChange === "function") {
1360
+ onChange(event, newValue, reason);
1361
+ }
1362
+ },
1363
+ onBlur: (event) => {
1364
+ field.onBlur();
1365
+ if (typeof onBlur === "function") {
1366
+ onBlur(event);
1367
+ }
1368
+ },
1369
+ fullWidth: true,
1370
+ renderInput: (params) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1371
+ _material.TextField,
1372
+ {
1373
+ ...params,
1374
+ ...restTextProps,
1375
+ fullWidth: true,
1376
+ error: !!error,
1377
+ required: required || options.length == 0,
1378
+ helperText: error ? error.message : "",
1379
+ placeholder,
1380
+ label,
1381
+ variant: variant ? variant : isDisabled ? "filled" : "outlined"
1382
+ }
1383
+ )
1384
+ }
1385
+ );
1386
+ };
1387
+ var SelectCascadeElement2 = ({
1388
+ gridProps = {},
1389
+ ...props
1390
+ }) => {
1391
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { size: 12, ...gridProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component6, { ...props }) });
1392
+ };
1393
+ SelectCascadeElement2.displayName = "SelectCascadeElement";
1394
+
1395
+ // src/wrappers/SelectElement/SelectElement.tsx
1396
+
1397
+
1398
+
1399
+
1400
+
1401
+ var Component7 = function SelectElement(props) {
1402
+ const theme = _styles.useTheme.call(void 0, );
1403
+ const {
1404
+ name,
1405
+ control,
1406
+ onChange,
1407
+ options: optionsInput,
1408
+ label,
1409
+ variant,
1410
+ disabled,
1411
+ labelField = "Label",
1412
+ valueField = "Value",
1413
+ placeholder,
1414
+ textFieldProps = {},
1415
+ isNullable = false,
1416
+ ...rest
1417
+ } = props;
1418
+ const { required, ...restTextProps } = textFieldProps;
1419
+ const options = _react.useMemo.call(void 0, () => optionsInput || [], [optionsInput]);
1420
+ const {
1421
+ field,
1422
+ fieldState: { error }
1423
+ } = _reacthookform.useController.call(void 0, {
1424
+ name,
1425
+ control
1426
+ });
1427
+ const getOptionValue = _react.useCallback.call(void 0,
1428
+ (option) => {
1429
+ if (typeof option === "string") return option;
1430
+ return option ? option[valueField] : null;
1431
+ },
1432
+ [valueField]
1433
+ );
1434
+ const getOptionLabel = _react.useCallback.call(void 0,
1435
+ (option) => {
1436
+ if (typeof option === "string") return option;
1437
+ return option ? String(option[labelField]) : "";
1438
+ },
1439
+ [labelField]
1440
+ );
1441
+ _react.useEffect.call(void 0, () => {
1442
+ const hasValue = field.value !== null && field.value !== void 0 && field.value !== "";
1443
+ if (options.length === 1 && !hasValue) {
1444
+ if (disabled) return;
1445
+ field.onChange(getOptionValue(options[0]));
1446
+ }
1447
+ }, [options, disabled, getOptionValue, field.onChange]);
1448
+ const isDisabled = _react.useMemo.call(void 0, () => {
1449
+ if (disabled) return true;
1450
+ if (options.length === 0) return true;
1451
+ if (options.length === 1 && !isNullable) return true;
1452
+ return false;
1453
+ }, [disabled, options.length, isNullable]);
1454
+ const autocompleteValue = _react.useMemo.call(void 0,
1455
+ () => _nullishCoalesce(options.find((option) => getOptionValue(option) === field.value), () => ( null)),
1456
+ [field.value, options, getOptionValue]
1457
+ );
1458
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1459
+ _material.Autocomplete,
1460
+ {
1461
+ ...rest,
1462
+ filterSelectedOptions: false,
1463
+ options,
1464
+ value: autocompleteValue,
1465
+ onChange: (event, newValue, reason) => {
1466
+ const option = newValue;
1467
+ field.onChange(option ? getOptionValue(option) : null);
1468
+ _optionalChain([onChange, 'optionalCall', _16 => _16(event, newValue, reason)]);
1469
+ },
1470
+ disabled: isDisabled,
1471
+ sx: {
1472
+ "&.Mui-disabled": {
1473
+ cursor: "not-allowed !important"
1474
+ },
1475
+ "& .MuiInputBase-root.Mui-disabled": {
1476
+ backgroundColor: theme.palette.action.disabledBackground,
1477
+ cursor: "not-allowed !important"
1478
+ },
1479
+ "&.Mui-disabled .MuiAutocomplete-popupIndicator": {
1480
+ cursor: "not-allowed !important"
1481
+ },
1482
+ "& .MuiOutlinedInput-root.Mui-disabled .MuiOutlinedInput-notchedOutline": {
1483
+ borderColor: error ? "red" : void 0
1484
+ },
1485
+ "& .MuiFilledInput-root.Mui-disabled": {
1486
+ borderColor: error ? "red" : void 0
1487
+ }
1488
+ },
1489
+ getOptionLabel: (option) => getOptionLabel(option),
1490
+ ref: field.ref,
1491
+ isOptionEqualToValue: (option, value) => getOptionValue(option) === getOptionValue(value),
1492
+ renderInput: (params) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1493
+ _material.TextField,
1494
+ {
1495
+ ...params,
1496
+ ...restTextProps,
1497
+ fullWidth: true,
1498
+ required,
1499
+ error: !!error,
1500
+ helperText: error ? error.message : "",
1501
+ label,
1502
+ placeholder,
1503
+ variant: variant ? variant : isDisabled ? "filled" : "outlined"
1504
+ }
1505
+ )
1506
+ }
1507
+ );
1508
+ };
1509
+ var SelectElement2 = ({
1510
+ gridProps = {},
1511
+ ...props
1512
+ }) => {
1513
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { size: 12, ...gridProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component7, { ...props }) });
1514
+ };
1515
+ SelectElement2.displayName = "SelectElement";
1516
+
1517
+ // src/wrappers/SelectMultiElement/SelectMultiElement.tsx
1518
+ var _CheckBox = require('@mui/icons-material/CheckBox'); var _CheckBox2 = _interopRequireDefault(_CheckBox);
1519
+ var _CheckBoxOutlineBlank = require('@mui/icons-material/CheckBoxOutlineBlank'); var _CheckBoxOutlineBlank2 = _interopRequireDefault(_CheckBoxOutlineBlank);
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+
1527
+
1528
+
1529
+
1530
+
1531
+ var Component8 = function SelectMultiElement(props) {
1532
+ const {
1533
+ name,
1534
+ control,
1535
+ onBlur,
1536
+ disabled,
1537
+ options: optionsInput,
1538
+ loading = false,
1539
+ placeholder,
1540
+ label,
1541
+ isNullable,
1542
+ variant,
1543
+ labelField = "Label",
1544
+ valueField = "Value",
1545
+ ...rest
1546
+ } = props;
1547
+ const theme = _material.useTheme.call(void 0, );
1548
+ const options = _react.useMemo.call(void 0, () => optionsInput || [], [optionsInput]);
1549
+ const {
1550
+ field,
1551
+ fieldState: { error }
1552
+ } = _reacthookform.useController.call(void 0, {
1553
+ name,
1554
+ control
1555
+ });
1556
+ const getOptionValue = (option) => {
1557
+ if (typeof option === "string") return option;
1558
+ return option ? option[valueField] : null;
1559
+ };
1560
+ const getOptionLabel = (option) => {
1561
+ if (typeof option === "string") return option;
1562
+ return option ? String(option[labelField]) : "";
1563
+ };
1564
+ const isDisabled = _react.useMemo.call(void 0, () => {
1565
+ if (disabled) return true;
1566
+ if (options.length === 0) return true;
1567
+ if (options.length === 1 && !isNullable) return true;
1568
+ return false;
1569
+ }, [disabled, options.length, isNullable]);
1570
+ const selectedValue = field.value && Array.isArray(field.value) ? options.filter((option) => field.value.includes(getOptionValue(option))) : [];
1571
+ _react.useEffect.call(void 0, () => {
1572
+ const hasValue = Array.isArray(field.value) && field.value.length > 0;
1573
+ if (options.length === 1 && !hasValue && !isNullable) {
1574
+ field.onChange([getOptionValue(options[0])]);
1575
+ }
1576
+ }, [options, getOptionValue, field.onChange, isNullable]);
1577
+ const handleChange = (_, selectedOptions, reason) => {
1578
+ if (reason === "clear") {
1579
+ field.onChange([]);
1580
+ } else if (reason === "selectOption" || reason === "removeOption") {
1581
+ const newValues = selectedOptions.map((option) => getOptionValue(option));
1582
+ field.onChange(newValues);
1583
+ }
1584
+ };
1585
+ const icon = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _CheckBoxOutlineBlank2.default, { fontSize: "small" });
1586
+ const checkedIcon = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _CheckBox2.default, { fontSize: "small" });
1587
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1588
+ _material.Autocomplete,
1589
+ {
1590
+ multiple: true,
1591
+ value: selectedValue,
1592
+ loading,
1593
+ options,
1594
+ getOptionLabel,
1595
+ isOptionEqualToValue: (option, value) => getOptionValue(option) === getOptionValue(value),
1596
+ filterSelectedOptions: true,
1597
+ disableCloseOnSelect: true,
1598
+ ref: field.ref,
1599
+ disabled: isDisabled,
1600
+ onChange: handleChange,
1601
+ onBlur: (event) => {
1602
+ field.onBlur();
1603
+ if (typeof onBlur === "function") {
1604
+ onBlur(event);
1605
+ }
1606
+ },
1607
+ sx: {
1608
+ "&.Mui-disabled": {
1609
+ cursor: "not-allowed !important"
1610
+ },
1611
+ "& .MuiInputBase-root.Mui-disabled": {
1612
+ backgroundColor: theme.palette.action.disabledBackground,
1613
+ cursor: "not-allowed !important"
1614
+ },
1615
+ "&.Mui-disabled .MuiAutocomplete-popupIndicator": {
1616
+ cursor: "not-allowed !important"
1617
+ },
1618
+ "& .MuiOutlinedInput-root.Mui-disabled .MuiOutlinedInput-notchedOutline": {
1619
+ borderColor: error ? "red" : void 0
1620
+ },
1621
+ "& .MuiFilledInput-root.Mui-disabled": {
1622
+ borderColor: error ? "red" : void 0
1623
+ }
1624
+ },
1625
+ fullWidth: true,
1626
+ renderOption: (props1, option, { selected }) => {
1627
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "li", { ...props1, children: [
1628
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1629
+ _material.Checkbox,
1630
+ {
1631
+ icon,
1632
+ checkedIcon,
1633
+ checked: selected
1634
+ }
1635
+ ),
1636
+ getOptionLabel(option)
1637
+ ] });
1638
+ },
1639
+ renderInput: (params) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1640
+ _material.TextField,
1641
+ {
1642
+ ...params,
1643
+ label,
1644
+ error: !!error,
1645
+ helperText: error ? error.message : "",
1646
+ placeholder,
1647
+ InputProps: {
1648
+ ...params.InputProps,
1649
+ endAdornment: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _react.Fragment, { children: [
1650
+ loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.CircularProgress, { color: "inherit", size: 20 }) : null,
1651
+ params.InputProps.endAdornment
1652
+ ] })
1653
+ },
1654
+ variant: variant ? variant : isDisabled ? "filled" : "outlined"
1655
+ }
1656
+ ),
1657
+ ...rest
1658
+ }
1659
+ );
1660
+ };
1661
+ var SelectMultiElement2 = ({
1662
+ gridProps = {},
1663
+ ...props
1664
+ }) => {
1665
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { size: 12, ...gridProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component8, { ...props }) });
1666
+ };
1667
+ SelectMultiElement2.displayName = "SelectMultiElement";
1668
+
1669
+ // src/wrappers/TextFieldElement/TextFieldElement.tsx
1670
+
1671
+
1672
+
1673
+ var Component9 = function TextFieldElement(props) {
1674
+ const {
1675
+ parseError,
1676
+ name,
1677
+ control,
1678
+ component: TextFieldComponent = _material.TextField,
1679
+ transform,
1680
+ fieldType = "text",
1681
+ // Default to text type
1682
+ defaultValue,
1683
+ label,
1684
+ placeholder,
1685
+ textFieldProps = {},
1686
+ variant,
1687
+ onChange: customOnChange,
1688
+ enableWarnings = process.env.NODE_ENV === "development",
1689
+ ...rest
1690
+ } = props;
1691
+ const {
1692
+ type,
1693
+ required,
1694
+ helperText,
1695
+ inputRef,
1696
+ onInput,
1697
+ onBlur,
1698
+ disabled,
1699
+ ...restTextProps
1700
+ } = textFieldProps;
1701
+ const {
1702
+ field,
1703
+ fieldState: { error }
1704
+ } = _reacthookform.useController.call(void 0, {
1705
+ name,
1706
+ control
1707
+ });
1708
+ const { value, onChange } = _chunkY3QTSDLJcjs.useEnhancedTransform.call(void 0,
1709
+ {
1710
+ value: field.value,
1711
+ onChange: field.onChange,
1712
+ transform: transform ? {
1713
+ input: transform.input,
1714
+ output: transform.output
1715
+ } : void 0,
1716
+ fieldType: !transform ? type === "number" ? "number" : fieldType : void 0,
1717
+ // Auto-detect number type
1718
+ defaultValue,
1719
+ enableWarnings
1720
+ }
1721
+ );
1722
+ const handleInputRef = _material.useForkRef.call(void 0, field.ref, inputRef);
1723
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1724
+ TextFieldComponent,
1725
+ {
1726
+ ...rest,
1727
+ ...restTextProps,
1728
+ name: field.name,
1729
+ value,
1730
+ onChange: (event) => {
1731
+ const input = event.target.value;
1732
+ if (input === "") {
1733
+ field.onChange(null);
1734
+ } else {
1735
+ onChange(event);
1736
+ }
1737
+ if (typeof customOnChange === "function") {
1738
+ customOnChange(event);
1739
+ }
1740
+ return;
1741
+ },
1742
+ onBlur: (event) => {
1743
+ field.onBlur();
1744
+ if (typeof onBlur === "function") {
1745
+ onBlur(event);
1746
+ }
1747
+ },
1748
+ onInput: (event) => {
1749
+ if (typeof onInput === "function") {
1750
+ onInput(event);
1751
+ }
1752
+ },
1753
+ disabled,
1754
+ label,
1755
+ placeholder,
1756
+ fullWidth: true,
1757
+ required,
1758
+ type,
1759
+ error: !!error,
1760
+ helperText: error ? parseError ? parseError(error) : error.message : helperText,
1761
+ inputRef: handleInputRef,
1762
+ variant: variant ? variant : "outlined"
1763
+ }
1764
+ );
1765
+ };
1766
+ var TextFieldElement2 = ({
1767
+ gridProps = {},
1768
+ ...props
1769
+ }) => {
1770
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { size: 12, ...gridProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component9, { ...props }) });
1771
+ };
1772
+
1773
+ // src/wrappers/TimePickerElement/TimePickerElement.tsx
1774
+
1775
+
1776
+
1777
+
1778
+
1779
+ var Component10 = function TimePickerElement(props) {
1780
+ const {
1781
+ name,
1782
+ required,
1783
+ inputProps,
1784
+ control,
1785
+ textReadOnly,
1786
+ label,
1787
+ placeholder,
1788
+ slotProps,
1789
+ timePickerProps = {},
1790
+ transform,
1791
+ ...rest
1792
+ } = props;
1793
+ const adapter = _internals.useLocalizationContext.call(void 0, );
1794
+ const { disabled, inputRef, onClose, ...restTimePickerProps } = timePickerProps;
1795
+ const {
1796
+ field,
1797
+ fieldState: { error }
1798
+ } = _reacthookform.useController.call(void 0, {
1799
+ name,
1800
+ control,
1801
+ defaultValue: null
1802
+ });
1803
+ const { value, onChange } = _chunkY3QTSDLJcjs.useTransform.call(void 0, {
1804
+ value: field.value,
1805
+ onChange: field.onChange,
1806
+ transform: {
1807
+ input: typeof _optionalChain([transform, 'optionalAccess', _17 => _17.input]) === "function" ? transform.input : (newValue) => _chunkLUW7V5GIcjs.readValueAsDate.call(void 0, adapter, newValue),
1808
+ output: (eventOrValue, value2) => {
1809
+ const actualValue = value2 !== void 0 ? value2 : eventOrValue;
1810
+ if (actualValue === null) return null;
1811
+ return actualValue;
1812
+ }
1813
+ }
1814
+ });
1815
+ const handleInputRef = _material.useForkRef.call(void 0, field.ref, inputRef);
1816
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1817
+ _xdatepickers.TimePicker,
1818
+ {
1819
+ ...rest,
1820
+ ...restTimePickerProps,
1821
+ ...field,
1822
+ value,
1823
+ label,
1824
+ disabled,
1825
+ ...timePickerProps,
1826
+ inputRef: handleInputRef,
1827
+ onClose: (...args) => {
1828
+ field.onBlur();
1829
+ if (onClose) {
1830
+ onClose(...args);
1831
+ }
1832
+ },
1833
+ onChange: (newValue, context) => {
1834
+ onChange(newValue, context);
1835
+ if (typeof timePickerProps.onChange === "function") {
1836
+ timePickerProps.onChange(newValue, context);
1837
+ }
1838
+ },
1839
+ slotProps: {
1840
+ ...slotProps,
1841
+ actionBar: {
1842
+ actions: ["clear", "cancel", "accept"]
1843
+ },
1844
+ textField: {
1845
+ ...inputProps,
1846
+ required,
1847
+ placeholder,
1848
+ fullWidth: true,
1849
+ onBlur: (event) => {
1850
+ field.onBlur();
1851
+ if (typeof _optionalChain([inputProps, 'optionalAccess', _18 => _18.onBlur]) === "function") {
1852
+ inputProps.onBlur(event);
1853
+ }
1854
+ },
1855
+ error: !!error,
1856
+ helperText: error ? error.message : _optionalChain([inputProps, 'optionalAccess', _19 => _19.helperText]) || rest.helperText,
1857
+ inputProps: {
1858
+ readOnly: !!textReadOnly,
1859
+ ..._optionalChain([inputProps, 'optionalAccess', _20 => _20.inputProps])
1860
+ }
1861
+ }
1862
+ }
1863
+ }
1864
+ );
1865
+ };
1866
+ var TimePickerElement2 = ({
1867
+ gridProps = {},
1868
+ ...props
1869
+ }) => {
1870
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { size: 12, ...gridProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component10, { ...props }) });
1871
+ };
1872
+ TimePickerElement2.displayName = "TimePickerElement";
1873
+
1874
+ // src/wrappers/AsyncSelect/index.tsx
1875
+
1876
+
1877
+
1878
+
1879
+
1880
+
1881
+
1882
+ var _utils = require('@mui/material/utils');
1883
+
1884
+
1885
+
1886
+
1887
+
1888
+
1889
+
1890
+
1891
+
1892
+
1893
+
1894
+
1895
+ var Component11 = function AsyncSelectElement(props) {
1896
+ const {
1897
+ name,
1898
+ disabled,
1899
+ control,
1900
+ placeholder,
1901
+ // initialValue,
1902
+ // isNullable,
1903
+ label,
1904
+ queryFn,
1905
+ variant,
1906
+ labelField = "Label",
1907
+ valueField = "Value",
1908
+ ...rest
1909
+ } = props;
1910
+ const {
1911
+ field,
1912
+ fieldState: { error }
1913
+ } = _reacthookform.useController.call(void 0, {
1914
+ name,
1915
+ control
1916
+ });
1917
+ const theme = _material.useTheme.call(void 0, );
1918
+ const [loading, setLoading] = _react.useState.call(void 0, false);
1919
+ const [selectedOption, setSelectedOption] = _react.useState.call(void 0, null);
1920
+ const [inputValue, setInputValue] = _react.useState.call(void 0, "");
1921
+ const [options, setOptions] = _react.useState.call(void 0, []);
1922
+ const [open, setOpen] = _react.useState.call(void 0, false);
1923
+ const loadedValueRef = _react.useRef.call(void 0,
1924
+ void 0
1925
+ );
1926
+ const fetchData = _react.useMemo.call(void 0,
1927
+ () => _utils.debounce.call(void 0,
1928
+ (payload, callback) => {
1929
+ queryFn(payload).then((c) => callback(c));
1930
+ },
1931
+ 400
1932
+ ),
1933
+ [queryFn]
1934
+ );
1935
+ const getOptionValue = _react.useCallback.call(void 0,
1936
+ (option) => {
1937
+ return option ? String(option[valueField]) : "";
1938
+ },
1939
+ [valueField]
1940
+ );
1941
+ const getOptionLabel = _react.useCallback.call(void 0,
1942
+ (option) => {
1943
+ return option ? String(option[labelField]) : "";
1944
+ },
1945
+ [labelField]
1946
+ );
1947
+ _react.useEffect.call(void 0, () => {
1948
+ const currentValue = field.value;
1949
+ if (currentValue && loadedValueRef.current !== currentValue) {
1950
+ if (selectedOption && getOptionValue(selectedOption) === currentValue) {
1951
+ loadedValueRef.current = currentValue;
1952
+ return;
1953
+ }
1954
+ const active = true;
1955
+ setLoading(true);
1956
+ loadedValueRef.current = currentValue;
1957
+ fetchData({ Query: null, SelectedValue: currentValue }, (results) => {
1958
+ if (!active) return;
1959
+ setLoading(false);
1960
+ const matchedOption = _optionalChain([results, 'optionalAccess', _21 => _21.find, 'call', _22 => _22(
1961
+ (option) => String(getOptionValue(option)) === String(currentValue)
1962
+ )]);
1963
+ if (matchedOption) {
1964
+ setOptions([matchedOption]);
1965
+ setSelectedOption(matchedOption);
1966
+ setInputValue(getOptionLabel(matchedOption));
1967
+ }
1968
+ });
1969
+ return;
1970
+ }
1971
+ if (inputValue !== (selectedOption ? getOptionLabel(selectedOption) : "")) {
1972
+ if (inputValue === "") {
1973
+ setOptions([]);
1974
+ setLoading(false);
1975
+ return;
1976
+ }
1977
+ const active = true;
1978
+ setLoading(true);
1979
+ fetchData({ Query: inputValue, SelectedValue: null }, (results) => {
1980
+ if (!active) return;
1981
+ setLoading(false);
1982
+ setOptions(results || []);
1983
+ });
1984
+ return;
1985
+ }
1986
+ if (!currentValue && selectedOption) {
1987
+ setSelectedOption(null);
1988
+ setInputValue("");
1989
+ setOptions([]);
1990
+ loadedValueRef.current = void 0;
1991
+ }
1992
+ }, [
1993
+ field.value,
1994
+ inputValue,
1995
+ fetchData,
1996
+ getOptionLabel,
1997
+ getOptionValue,
1998
+ selectedOption,
1999
+ labelField,
2000
+ valueField
2001
+ ]);
2002
+ const isDisabled = _react.useMemo.call(void 0, () => {
2003
+ return _nullishCoalesce(disabled, () => ( false));
2004
+ }, [disabled]);
2005
+ const handleChange = _react.useCallback.call(void 0,
2006
+ (_, newSelectedOption) => {
2007
+ setSelectedOption(newSelectedOption);
2008
+ const newValue = newSelectedOption ? getOptionValue(newSelectedOption) : null;
2009
+ field.onChange(newValue);
2010
+ loadedValueRef.current = newValue;
2011
+ if (newSelectedOption) {
2012
+ setInputValue(getOptionLabel(newSelectedOption));
2013
+ } else {
2014
+ setInputValue("");
2015
+ setOptions([]);
2016
+ }
2017
+ },
2018
+ [field, getOptionValue, getOptionLabel]
2019
+ );
2020
+ const handleInputChange = _react.useCallback.call(void 0,
2021
+ (_, newInputValue) => {
2022
+ setInputValue(newInputValue);
2023
+ },
2024
+ []
2025
+ );
2026
+ const handleBlur = _react.useCallback.call(void 0, () => {
2027
+ if (selectedOption) {
2028
+ setInputValue(getOptionLabel(selectedOption));
2029
+ } else {
2030
+ setInputValue("");
2031
+ }
2032
+ }, [selectedOption, getOptionLabel]);
2033
+ const handleOpen = _react.useCallback.call(void 0, () => {
2034
+ setOpen(true);
2035
+ }, []);
2036
+ const handleClose = _react.useCallback.call(void 0, () => {
2037
+ setOpen(false);
2038
+ }, []);
2039
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2040
+ _material.Autocomplete,
2041
+ {
2042
+ ...rest,
2043
+ fullWidth: true,
2044
+ open,
2045
+ onOpen: handleOpen,
2046
+ onClose: handleClose,
2047
+ onBlur: handleBlur,
2048
+ loading,
2049
+ getOptionLabel,
2050
+ getOptionKey: getOptionValue,
2051
+ isOptionEqualToValue: (option, value) => getOptionValue(option) === getOptionValue(value),
2052
+ autoComplete: true,
2053
+ disabled: isDisabled,
2054
+ includeInputInList: true,
2055
+ options,
2056
+ value: selectedOption,
2057
+ filterSelectedOptions: true,
2058
+ filterOptions: (x) => x,
2059
+ onChange: handleChange,
2060
+ onInputChange: handleInputChange,
2061
+ sx: {
2062
+ "&.Mui-disabled": {
2063
+ cursor: "not-allowed !important"
2064
+ },
2065
+ "& .MuiInputBase-root.Mui-disabled": {
2066
+ backgroundColor: theme.palette.action.disabledBackground,
2067
+ cursor: "not-allowed !important"
2068
+ },
2069
+ "&.Mui-disabled .MuiAutocomplete-popupIndicator": {
2070
+ cursor: "not-allowed !important"
2071
+ },
2072
+ "& .MuiOutlinedInput-root.Mui-disabled .MuiOutlinedInput-notchedOutline": {
2073
+ borderColor: error ? "red" : void 0
2074
+ },
2075
+ "& .MuiFilledInput-root.Mui-disabled": {
2076
+ borderColor: error ? "red" : void 0
2077
+ }
2078
+ },
2079
+ noOptionsText: "Type Something...",
2080
+ renderInput: (params) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2081
+ _material.TextField,
2082
+ {
2083
+ ...params,
2084
+ label,
2085
+ error: !!error,
2086
+ helperText: error ? error.message : "",
2087
+ placeholder,
2088
+ slotProps: {
2089
+ input: {
2090
+ ...params.InputProps,
2091
+ endAdornment: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _react.Fragment, { children: [
2092
+ loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.CircularProgress, { color: "inherit", size: 20 }) : null,
2093
+ params.InputProps.endAdornment
2094
+ ] })
2095
+ }
2096
+ },
2097
+ variant: variant ? variant : isDisabled ? "filled" : "outlined"
2098
+ }
2099
+ ),
2100
+ renderOption: (renderProps, option) => {
2101
+ const { key, ...optionProps } = renderProps;
2102
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { ...optionProps, children: option[labelField] }, key);
2103
+ }
2104
+ }
2105
+ );
2106
+ };
2107
+ var AsyncSelectElement2 = ({
2108
+ gridProps = {},
2109
+ ...props
2110
+ }) => {
2111
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { size: 12, ...gridProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2112
+ Component11,
2113
+ {
2114
+ ...props
2115
+ }
2116
+ ) });
2117
+ };
2118
+ AsyncSelectElement2.displayName = "AsyncSelectElement";
2119
+
2120
+ // src/wrappers/NumberFieldElement/NumberFieldElement.tsx
2121
+
2122
+
2123
+
2124
+ var Component12 = function NumberFieldElement(props) {
2125
+ const {
2126
+ parseError,
2127
+ name,
2128
+ control,
2129
+ component: TextFieldComponent = _material.TextField,
2130
+ transform,
2131
+ fieldType = "text",
2132
+ // Default to text type
2133
+ defaultValue,
2134
+ label,
2135
+ placeholder,
2136
+ textFieldProps = {},
2137
+ variant,
2138
+ onChange: customOnChange,
2139
+ enableWarnings = process.env.NODE_ENV === "development",
2140
+ ...rest
2141
+ } = props;
2142
+ const {
2143
+ type = "number",
2144
+ required,
2145
+ helperText,
2146
+ inputRef,
2147
+ onInput,
2148
+ onBlur,
2149
+ disabled,
2150
+ ...restTextProps
2151
+ } = textFieldProps;
2152
+ const {
2153
+ field,
2154
+ fieldState: { error }
2155
+ } = _reacthookform.useController.call(void 0, {
2156
+ name,
2157
+ control
2158
+ });
2159
+ const { value, onChange } = _chunkY3QTSDLJcjs.useEnhancedTransform.call(void 0,
2160
+ {
2161
+ value: field.value,
2162
+ onChange: field.onChange,
2163
+ transform: transform ? {
2164
+ input: transform.input,
2165
+ output: transform.output
2166
+ } : void 0,
2167
+ fieldType: !transform ? type === "number" ? "number" : fieldType : void 0,
2168
+ // Auto-detect number type
2169
+ defaultValue,
2170
+ enableWarnings
2171
+ }
2172
+ );
2173
+ const handleInputRef = _material.useForkRef.call(void 0, field.ref, inputRef);
2174
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2175
+ TextFieldComponent,
2176
+ {
2177
+ ...rest,
2178
+ ...restTextProps,
2179
+ name: field.name,
2180
+ value,
2181
+ onChange: (event) => {
2182
+ const input = event.target.value;
2183
+ if (input === "") {
2184
+ field.onChange(null);
2185
+ }
2186
+ onChange(event);
2187
+ if (typeof customOnChange === "function") {
2188
+ customOnChange(event);
2189
+ }
2190
+ },
2191
+ onBlur: (event) => {
2192
+ field.onBlur();
2193
+ if (typeof onBlur === "function") {
2194
+ onBlur(event);
2195
+ }
2196
+ },
2197
+ onInput: (event) => {
2198
+ if (typeof onInput === "function") {
2199
+ onInput(event);
2200
+ }
2201
+ },
2202
+ onWheel: (e) => {
2203
+ e.target.blur();
2204
+ },
2205
+ onKeyDown: (e) => {
2206
+ if (["e", "E", "ArrowDown", "ArrowUp"].includes(e.key)) {
2207
+ e.preventDefault();
2208
+ }
2209
+ },
2210
+ disabled,
2211
+ label,
2212
+ placeholder,
2213
+ fullWidth: true,
2214
+ required,
2215
+ type,
2216
+ error: !!error,
2217
+ helperText: error ? parseError ? parseError(error) : error.message : helperText,
2218
+ inputRef: handleInputRef,
2219
+ variant: variant ? variant : "outlined"
2220
+ }
2221
+ );
2222
+ };
2223
+ var NumberFieldElement2 = ({
2224
+ gridProps = {},
2225
+ ...props
2226
+ }) => {
2227
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { size: 12, ...gridProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component12, { ...props }) });
2228
+ };
2229
+
2230
+ // src/wrappers/OTPInputElement/OTPInputElement.tsx
2231
+
2232
+
2233
+
2234
+ var _muionetimepasswordinput = require('mui-one-time-password-input');
2235
+
2236
+
2237
+ // src/wrappers/OTPInputElement/HelperText.tsx
2238
+ var _FormHelperText = require('@mui/material/FormHelperText'); var _FormHelperText2 = _interopRequireDefault(_FormHelperText);
2239
+
2240
+ function HelperText({
2241
+ sx,
2242
+ helperText,
2243
+ errorMessage,
2244
+ disableGutters,
2245
+ ...other
2246
+ }) {
2247
+ if (errorMessage || helperText) {
2248
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2249
+ _FormHelperText2.default,
2250
+ {
2251
+ error: !!errorMessage,
2252
+ sx: [
2253
+ {
2254
+ mx: disableGutters ? 0 : 1.75
2255
+ },
2256
+ ...Array.isArray(sx) ? sx : [sx]
2257
+ ],
2258
+ ...other,
2259
+ children: errorMessage || helperText
2260
+ }
2261
+ );
2262
+ }
2263
+ return null;
2264
+ }
2265
+
2266
+ // src/wrappers/OTPInputElement/OTPInputElement.tsx
2267
+
2268
+ var Component13 = function OTPInputElement(props) {
2269
+ const {
2270
+ // parseError,
2271
+ name,
2272
+ control,
2273
+ slotProps,
2274
+ helperText,
2275
+ maxSize = 56,
2276
+ placeholder = "-",
2277
+ ...rest
2278
+ } = props;
2279
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2280
+ _reacthookform.Controller,
2281
+ {
2282
+ name,
2283
+ control,
2284
+ render: ({ field, fieldState: { error } }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
2285
+ _material.Box,
2286
+ {
2287
+ ..._optionalChain([slotProps, 'optionalAccess', _23 => _23.wrapper]),
2288
+ sx: [
2289
+ {
2290
+ display: "flex",
2291
+ justifyContent: "center",
2292
+ [`& .${_material.inputBaseClasses.input}`]: {
2293
+ p: 0,
2294
+ height: "auto",
2295
+ aspectRatio: "1/1",
2296
+ maxWidth: maxSize
2297
+ }
2298
+ },
2299
+ ...Array.isArray(_optionalChain([slotProps, 'optionalAccess', _24 => _24.wrapper, 'optionalAccess', _25 => _25.sx])) ? _nullishCoalesce(_optionalChain([slotProps, 'optionalAccess', _26 => _26.wrapper, 'optionalAccess', _27 => _27.sx]), () => ( [])) : [_optionalChain([slotProps, 'optionalAccess', _28 => _28.wrapper, 'optionalAccess', _29 => _29.sx])]
2300
+ ],
2301
+ children: [
2302
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2303
+ _muionetimepasswordinput.MuiOtpInput,
2304
+ {
2305
+ ...field,
2306
+ autoFocus: true,
2307
+ gap: 1.5,
2308
+ length: 4,
2309
+ TextFieldsProps: {
2310
+ placeholder,
2311
+ error: !!error,
2312
+ ..._optionalChain([slotProps, 'optionalAccess', _30 => _30.textfield])
2313
+ },
2314
+ ...rest
2315
+ }
2316
+ ),
2317
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
2318
+ HelperText,
2319
+ {
2320
+ ..._optionalChain([slotProps, 'optionalAccess', _31 => _31.helperText]),
2321
+ errorMessage: _optionalChain([error, 'optionalAccess', _32 => _32.message]),
2322
+ helperText
2323
+ }
2324
+ )
2325
+ ]
2326
+ }
2327
+ )
2328
+ }
2329
+ );
2330
+ };
2331
+ var OTPInputElement2 = ({
2332
+ gridProps = {},
2333
+ ...props
2334
+ }) => {
2335
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { size: 12, ...gridProps, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Component13, { ...props }) });
2336
+ };
2337
+
2338
+ // src/wrappers/Field/index.ts
2339
+ var Field = {
2340
+ Text: TextFieldElement2,
2341
+ Number: NumberFieldElement2,
2342
+ Checkbox: CheckboxElement2,
2343
+ Date: DatePickerElement,
2344
+ RadioGroup: RadioButtonGroup2,
2345
+ Password: PasswordElement,
2346
+ Time: TimePickerElement2,
2347
+ Select: SelectElement2,
2348
+ SelectMulti: SelectMultiElement2,
2349
+ SelectCascade: SelectCascadeElement2,
2350
+ AsyncSelect: AsyncSelectElement2,
2351
+ AsyncMultiSelect: AsyncSelectMultiElement2,
2352
+ CheckboxGroup: CheckboxGroupElement,
2353
+ OTPInput: OTPInputElement2
2354
+ };
2355
+
2356
+
2357
+
2358
+
2359
+
2360
+
2361
+
2362
+
2363
+
2364
+
2365
+
2366
+
2367
+
2368
+
2369
+
2370
+
2371
+
2372
+
2373
+
2374
+
2375
+
2376
+
2377
+
2378
+
2379
+
2380
+
2381
+
2382
+
2383
+ exports.isValidOption = isValidOption; exports.normalizeOptions = normalizeOptions; exports.AsyncSelectMultiElement = AsyncSelectMultiElement2; exports.CheckboxElement = CheckboxElement2; exports.CheckboxGroupElement = CheckboxGroupElement; exports.readDatePickerValueAsDate = readDatePickerValueAsDate; exports.useDatePickerValue = useDatePickerValue; exports.useDatePickerValidation = useDatePickerValidation; exports.useDatePickerStyles = useDatePickerStyles; exports.DatePickerElementCore = DatePickerElementCore; exports.DatePickerElement = DatePickerElement; exports.isValidDate = isValidDate; exports.isParsableDateString = isParsableDateString; exports.createDateInputTransform = createDateInputTransform; exports.createDateOutputTransform = createDateOutputTransform; exports.createDefaultDatePickerConfig = createDefaultDatePickerConfig; exports.extractErrorMessage = extractErrorMessage; exports.createStableKey = createStableKey; exports.PasswordElement = PasswordElement; exports.RadioButtonGroup = RadioButtonGroup2; exports.SelectCascadeElement = SelectCascadeElement2; exports.SelectElement = SelectElement2; exports.SelectMultiElement = SelectMultiElement2; exports.TextFieldElement = TextFieldElement2; exports.TimePickerElement = TimePickerElement2; exports.Field = Field;
2384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImM6XFxVdHRhbVxcUHJvamVjdHNcXEdOV2ViU29mdC5VSVxccGFja2FnZXNcXHVpXFxkaXN0XFxjaHVuay01UzJOQ1ZHMy5janMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDRTtBQUNBO0FBQ0Ysd0RBQTZCO0FBQzdCO0FBQ0U7QUFDRix3REFBNkI7QUFDN0I7QUFDQTtBQUNBLFNBQVMsYUFBYSxDQUFDLEtBQUssRUFBRTtBQUM5QixFQUFFLE9BQU8sT0FBTyxNQUFNLElBQUksU0FBUyxHQUFHLE1BQU0sSUFBSSxLQUFLLEdBQUcsUUFBUSxHQUFHLE1BQU0sR0FBRyxRQUFRLEdBQUcsTUFBTSxHQUFHLE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxTQUFTLEdBQUcsQ0FBQyxPQUFPLEtBQUssQ0FBQyxNQUFNLElBQUksU0FBUyxHQUFHLE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxTQUFTLEdBQUcsT0FBTyxLQUFLLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQztBQUMzTztBQUNBLFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMvRSxFQUFFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7QUFDbEMsSUFBSSxLQUFLLEVBQUUsTUFBTSxrQkFBQyxNQUFNLENBQUMsVUFBVSxDQUFFLFVBQUcsSUFBRSxDQUFDO0FBQzNDLElBQUksS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDN0IsSUFBSSxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRO0FBQ3JDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNGLHlDQUFzQjtBQUN0QixrR0FBK0M7QUFDL0Msa0dBQStDO0FBQy9DO0FBQ0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0YsOEJBQWM7QUFDZCxnREFBK0M7QUFDL0MsK0NBQTZDO0FBQzdDLElBQUksVUFBVSxFQUFFLFNBQVMsdUJBQXVCLENBQUMsS0FBSyxFQUFFO0FBQ3hELEVBQUUsTUFBTTtBQUNSLElBQUksSUFBSTtBQUNSLElBQUksUUFBUTtBQUNaLElBQUksT0FBTztBQUNYLElBQUksV0FBVztBQUNmLElBQUksS0FBSztBQUNULElBQUksT0FBTztBQUNYLElBQUksT0FBTztBQUNYLElBQUksV0FBVyxFQUFFLE9BQU87QUFDeEIsSUFBSSxXQUFXLEVBQUUsT0FBTztBQUN4QixJQUFJLEdBQUc7QUFDUCxFQUFFLEVBQUUsRUFBRSxLQUFLO0FBQ1gsRUFBRSxNQUFNO0FBQ1IsSUFBSSxLQUFLO0FBQ1QsSUFBSSxVQUFVLEVBQUUsRUFBRSxNQUFNO0FBQ3hCLEVBQUUsRUFBRSxFQUFFLDBDQUFhO0FBQ25CLElBQUksSUFBSTtBQUNSLElBQUk7QUFDSixFQUFFLENBQUMsQ0FBQztBQUNKLEVBQUUsTUFBTSxNQUFNLEVBQUUsZ0NBQVEsQ0FBRTtBQUMxQixFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSw2QkFBUSxDQUFFLENBQUMsQ0FBQztBQUM1RCxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLEVBQUUsNkJBQVEsRUFBRyxDQUFDO0FBQ2xELEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSw2QkFBUSxDQUFFLENBQUMsQ0FBQztBQUM1QyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsNkJBQVEsS0FBTSxDQUFDO0FBQy9DLEVBQUUsTUFBTSxnQkFBZ0IsRUFBRSwyQkFBTSxDQUFFLENBQUMsQ0FBQztBQUNwQyxFQUFFLE1BQU0sMEJBQTBCLEVBQUUsMkJBQU0sS0FBTSxDQUFDO0FBQ2pELEVBQUUsTUFBTSx5QkFBeUIsRUFBRSwyQkFBTSxJQUFLLENBQUM7QUFDL0MsRUFBRSxNQUFNLHVCQUF1QixFQUFFLDJCQUFNLEtBQU0sQ0FBQztBQUM5QyxFQUFFLE1BQU0sbUJBQW1CLEVBQUUsMkJBQU0sQ0FBRSxDQUFDLENBQUM7QUFDdkMsRUFBRSxNQUFNLGVBQWUsRUFBRSxnQ0FBVztBQUNwQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ3hELElBQUksQ0FBQyxVQUFVO0FBQ2YsRUFBRSxDQUFDO0FBQ0gsRUFBRSxNQUFNLGVBQWUsRUFBRSxnQ0FBVztBQUNwQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ3hELElBQUksQ0FBQyxVQUFVO0FBQ2YsRUFBRSxDQUFDO0FBQ0gsRUFBRSxNQUFNLFVBQVUsRUFBRSw0QkFBTztBQUMzQixJQUFJLENBQUMsRUFBRSxHQUFHLGdDQUFRO0FBQ2xCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFDN0IsUUFBUSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUc7QUFDckMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNoQyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdkIsVUFBVSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNqRCxZQUFZLFFBQVE7QUFDcEIsY0FBYyxDQUFDLENBQUM7QUFDaEIsWUFBWSxDQUFDO0FBQ2IsVUFBVSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNqRCxZQUFZLFFBQVE7QUFDcEIsY0FBYyxDQUFDLENBQUM7QUFDaEIsWUFBWSxDQUFDO0FBQ2IsVUFBVSxFQUFFLEtBQUs7QUFDakIsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVTtBQUNWLFFBQVEsQ0FBQyxDQUFDO0FBQ1YsTUFBTSxDQUFDO0FBQ1AsTUFBTTtBQUNOLElBQUksQ0FBQztBQUNMLElBQUksQ0FBQyxPQUFPO0FBQ1osRUFBRSxDQUFDO0FBQ0gsRUFBRSw4QkFBUyxDQUFFLEVBQUUsR0FBRztBQUNsQixJQUFJLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxlQUFlO0FBQ2hELEVBQUUsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDdkIsRUFBRSw4QkFBUyxDQUFFLEVBQUUsR0FBRztBQUNsQixJQUFJLE1BQU0sV0FBVyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFLElBQUksR0FBRyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2xILE1BQU0sTUFBTTtBQUNaLElBQUk7QUFDSixJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRTtBQUNqQyxNQUFNLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDbEMsTUFBTSx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsSUFBSTtBQUM3QyxNQUFNLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxJQUFJO0FBQzNDLE1BQU0sTUFBTTtBQUNaLElBQUk7QUFDSixJQUFJLElBQUksT0FBTyxFQUFFLElBQUk7QUFDckIsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3BCLElBQUkseUJBQXlCLENBQUMsUUFBUSxFQUFFLElBQUk7QUFDNUMsSUFBSSxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVU7QUFDeEMsSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsSUFBSTtBQUN6QyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUc7QUFDdkUsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFO0FBQ2xCLFFBQVEsTUFBTSxlQUFlLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM1QyxRQUFRLGtCQUFrQixDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztBQUMvQyxRQUFRLFVBQVUsQ0FBQyxjQUFjLENBQUM7QUFDbEMsTUFBTTtBQUNOLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQztBQUN2QixNQUFNLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxLQUFLO0FBQy9DLElBQUksQ0FBQyxDQUFDO0FBQ04sSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHO0FBQ2pCLE1BQU0sT0FBTyxFQUFFLEtBQUs7QUFDcEIsSUFBSSxDQUFDO0FBQ0wsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzlCLEVBQUUsOEJBQVMsQ0FBRSxFQUFFLEdBQUc7QUFDbEIsSUFBSSxHQUFHLENBQUMseUJBQXlCLENBQUMsUUFBUSxHQUFHLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFO0FBQzlFLE1BQU0sTUFBTTtBQUNaLElBQUk7QUFDSixJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRTtBQUNyQixNQUFNLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7QUFDNUMsTUFBTSx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsSUFBSTtBQUM3QyxNQUFNLE1BQU07QUFDWixJQUFJO0FBQ0osSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLHdCQUF3QixDQUFDLE9BQU8sRUFBRTtBQUN6RCxNQUFNLE1BQU07QUFDWixJQUFJO0FBQ0osSUFBSSxJQUFJLE9BQU8sRUFBRSxJQUFJO0FBQ3JCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQztBQUNwQixJQUFJLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEdBQUc7QUFDN0UsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFO0FBQ2xCLFFBQVEsTUFBTSxRQUFRLEVBQUUsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUMzQyxRQUFRLE1BQU0sZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsT0FBTztBQUMxRCxRQUFRLE1BQU0sa0JBQWtCLEVBQUUsSUFBSSxHQUFHO0FBQ3pDLFVBQVUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUM7QUFDMUQsUUFBUSxDQUFDO0FBQ1QsUUFBUSxNQUFNLFNBQVMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDO0FBQzdDLFFBQVEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHO0FBQ3BDLFVBQVUsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQzlELFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDakMsVUFBVTtBQUNWLFFBQVEsQ0FBQyxDQUFDO0FBQ1YsUUFBUSxVQUFVLENBQUMsUUFBUSxDQUFDO0FBQzVCLFFBQVEsd0JBQXdCLENBQUMsUUFBUSxFQUFFLFVBQVU7QUFDckQsTUFBTTtBQUNOLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQztBQUNOLElBQUksT0FBTyxDQUFDLEVBQUUsR0FBRztBQUNqQixNQUFNLE9BQU8sRUFBRSxLQUFLO0FBQ3BCLElBQUksQ0FBQztBQUNMLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUM3QyxFQUFFLE1BQU0sYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLEdBQUc7QUFDbEQsSUFBSSxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQztBQUMxQyxJQUFJLE1BQU0sVUFBVSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNsRSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0FBQzdCLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRSxTQUFTO0FBQ3ZDLElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQztBQUNyQixJQUFJLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxJQUFJO0FBQzNDLEVBQUUsQ0FBQztBQUNILEVBQUUsTUFBTSxXQUFXLEVBQUUsNEJBQU8sQ0FBRSxFQUFFLEdBQUc7QUFDbkMsSUFBSSx3QkFBTyxRQUFTLFVBQUcsT0FBSztBQUM1QixFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsdUJBQXVCLDZCQUFHO0FBQzVCLElBQUksc0JBQVk7QUFDaEIsSUFBSTtBQUNKLE1BQU0sUUFBUSxFQUFFLElBQUk7QUFDcEIsTUFBTSxPQUFPO0FBQ2IsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sb0JBQW9CLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUM7QUFDM0YsTUFBTSxPQUFPO0FBQ2IsTUFBTSxLQUFLLEVBQUUsZUFBZTtBQUM1QixNQUFNLFFBQVE7QUFDZCxNQUFNLHFCQUFxQixFQUFFLElBQUk7QUFDakMsTUFBTSxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQzdCLE1BQU0sYUFBYSxFQUFFLG1CQUFtQjtBQUN4QyxNQUFNLFFBQVEsRUFBRSxZQUFZO0FBQzVCLE1BQU0sRUFBRSxFQUFFO0FBQ1YsUUFBUSxnQkFBZ0IsRUFBRTtBQUMxQixVQUFVLE1BQU0sRUFBRTtBQUNsQixRQUFRLENBQUM7QUFDVCxRQUFRLG1DQUFtQyxFQUFFO0FBQzdDLFVBQVUsZUFBZSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFrQjtBQUNsRSxVQUFVLE1BQU0sRUFBRTtBQUNsQixRQUFRLENBQUM7QUFDVCxRQUFRLGdEQUFnRCxFQUFFO0FBQzFELFVBQVUsTUFBTSxFQUFFO0FBQ2xCLFFBQVEsQ0FBQztBQUNULFFBQVEsd0VBQXdFLEVBQUU7QUFDbEYsVUFBVSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLO0FBQzVDLFFBQVEsQ0FBQztBQUNULFFBQVEscUNBQXFDLEVBQUU7QUFDL0MsVUFBVSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLO0FBQzVDLFFBQVE7QUFDUixNQUFNLENBQUM7QUFDUCxNQUFNLGFBQWEsRUFBRSxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDO0FBQ3ZFLE1BQU0sV0FBVyxFQUFFLENBQUMsTUFBTSxFQUFFLG1CQUFtQiw2QkFBRztBQUNsRCxRQUFRLG1CQUFTO0FBQ2pCLFFBQVE7QUFDUixVQUFVLEdBQUcsTUFBTTtBQUNuQixVQUFVLEtBQUs7QUFDZixVQUFVLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztBQUN4QixVQUFVLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFO0FBQ2hELFVBQVUsV0FBVztBQUNyQixVQUFVLFVBQVUsRUFBRTtBQUN0QixZQUFZLEdBQUcsTUFBTSxDQUFDLFVBQVU7QUFDaEMsWUFBWSxZQUFZLGtCQUFrQiw4QkFBSSxlQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUU7QUFDckUsY0FBYyxRQUFRLGtCQUFrQiw2QkFBRywwQkFBaUIsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNwRyxjQUFjLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDaEMsWUFBWSxFQUFFLENBQUM7QUFDZixVQUFVLENBQUM7QUFDWCxVQUFVLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUU7QUFDL0QsUUFBUTtBQUNSLE1BQU0sQ0FBQztBQUNQLE1BQU0sWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRztBQUMvQyxRQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxZQUFZLEVBQUUsRUFBRSxNQUFNO0FBQzlDLFFBQVEsTUFBTSxZQUFZLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQztBQUNsRCxRQUFRLE1BQU0sUUFBUSxFQUFFLDZCQUFLLFdBQVksRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFO0FBQzdELFVBQVUsV0FBVyxFQUFFO0FBQ3ZCLFFBQVEsQ0FBQyxDQUFDO0FBQ1YsUUFBUSxNQUFNLE1BQU0sRUFBRSw2QkFBSyxXQUFZLEVBQUUsT0FBTyxDQUFDO0FBQ2pELFFBQVEsdUJBQXVCLDZCQUFHLElBQUssRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLFFBQVEsa0JBQWtCLDZCQUFHLEtBQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsNkJBQUc7QUFDMUosVUFBVSxNQUFNO0FBQ2hCLFVBQVU7QUFDVixZQUFZLEtBQUssRUFBRTtBQUNuQixjQUFjLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRTtBQUNqRCxZQUFZLENBQUM7QUFDYixZQUFZLFFBQVEsRUFBRSxJQUFJLENBQUM7QUFDM0IsVUFBVSxDQUFDO0FBQ1gsVUFBVTtBQUNWLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ3JCLE1BQU0sQ0FBQztBQUNQLE1BQU0sR0FBRztBQUNULElBQUk7QUFDSixFQUFFLENBQUM7QUFDSCxDQUFDO0FBQ0QsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO0FBQ2hDLEVBQUUsU0FBUztBQUNYLEVBQUUsR0FBRztBQUNMLENBQUMsRUFBRSxHQUFHO0FBQ04sRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFO0FBQ2pCLElBQUksdUJBQXVCLDZCQUFHO0FBQzlCLE1BQU0sY0FBSTtBQUNWLE1BQU07QUFDTixRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQztBQUM3RSxRQUFRLFFBQVEsa0JBQWtCLDZCQUFHO0FBQ3JDLFVBQVUsU0FBUztBQUNuQixVQUFVO0FBQ1YsWUFBWSxHQUFHO0FBQ2YsVUFBVTtBQUNWLFFBQVE7QUFDUixNQUFNO0FBQ04sSUFBSSxDQUFDO0FBQ0wsRUFBRTtBQUNGLEVBQUUsdUJBQXVCLDZCQUFHLFNBQVUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUNELHdCQUF3QixDQUFDLFlBQVksRUFBRSxrQkFBa0I7QUFDekQ7QUFDQTtBQUNBO0FBQ0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsSUFBSSxXQUFXLEVBQUUsU0FBUyxlQUFlLENBQUMsS0FBSyxFQUFFO0FBQ2pELEVBQUUsTUFBTTtBQUNSLElBQUksSUFBSTtBQUNSLElBQUksT0FBTztBQUNYLElBQUksS0FBSztBQUNULElBQUksVUFBVTtBQUNkLElBQUksVUFBVTtBQUNkLElBQUksVUFBVTtBQUNkLElBQUksU0FBUztBQUNiLElBQUksUUFBUTtBQUNaLElBQUksUUFBUSxFQUFFLGNBQWM7QUFDNUIsSUFBSSxHQUFHO0FBQ1AsRUFBRSxFQUFFLEVBQUUsS0FBSztBQUNYLEVBQUUsTUFBTTtBQUNSLElBQUksS0FBSztBQUNULElBQUksVUFBVSxFQUFFLEVBQUUsTUFBTTtBQUN4QixFQUFFLEVBQUUsRUFBRSwwQ0FBYztBQUNwQixJQUFJLElBQUk7QUFDUixJQUFJLE9BQU87QUFDWCxJQUFJO0FBQ0osRUFBRSxDQUFDLENBQUM7QUFDSixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ3BELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDekIsRUFBRTtBQUNGLEVBQUUsTUFBTSxzQkFBc0Isa0JBQUUsU0FBUyw2QkFBRSxRQUFNO0FBQ2pELEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSw0Q0FBWTtBQUMxQyxJQUFJLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztBQUN0QixJQUFJLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtBQUM1QixJQUFJLFNBQVMsRUFBRTtBQUNmLE1BQU0sS0FBSyxFQUFFLHVCQUFPLFNBQVMsNkJBQUUsUUFBTSxJQUFJLFdBQVcsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU07QUFDNUYsTUFBTSxNQUFNLEVBQUUsT0FBTyxzQkFBc0IsSUFBSSxXQUFXLEVBQUUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUc7QUFDdEYsUUFBUSxNQUFNLE1BQU0sRUFBRSxZQUFZO0FBQ2xDLFFBQVEsTUFBTSxRQUFRLEVBQUUsTUFBTTtBQUM5QixRQUFRLE9BQU8scUJBQXFCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztBQUNwRCxNQUFNLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRztBQUNwQyxRQUFRLE1BQU0sUUFBUSxFQUFFLE1BQU07QUFDOUIsUUFBUSxPQUFPLE9BQU87QUFDdEIsTUFBTTtBQUNOLElBQUk7QUFDSixFQUFFLENBQUMsQ0FBQztBQUNKLEVBQUUsTUFBTSxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUc7QUFDM0MsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztBQUM1QixJQUFJLEdBQUcsQ0FBQyxPQUFPLGVBQWUsSUFBSSxVQUFVLEVBQUU7QUFDOUMsTUFBTSxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztBQUNwQyxJQUFJO0FBQ0osRUFBRSxDQUFDO0FBQ0gsRUFBRSxNQUFNLGFBQWEsRUFBRSxNQUFNLEVBQUUsT0FBTyxXQUFXLElBQUksV0FBVyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUk7QUFDMUcsRUFBRSx1QkFBdUIsOEJBQUsscUJBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDbEYsb0JBQW9CLDZCQUFJLG1CQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsa0JBQWtCLDZCQUFJO0FBQy9FLE1BQU0sMEJBQWdCO0FBQ3RCLE1BQU07QUFDTixRQUFRLEtBQUssRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUMxQixRQUFRLEdBQUcsVUFBVTtBQUNyQixRQUFRLFFBQVE7QUFDaEIsUUFBUSxPQUFPLGtCQUFrQiw2QkFBSTtBQUNyQyxVQUFVLGtCQUFRO0FBQ2xCLFVBQVU7QUFDVixZQUFZLEdBQUcsSUFBSTtBQUNuQixZQUFZLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVM7QUFDMUMsWUFBWSxPQUFPLEVBQUUsS0FBSztBQUMxQixZQUFZLFFBQVE7QUFDcEIsWUFBWSxRQUFRLEVBQUUsWUFBWTtBQUNsQyxZQUFZLEdBQUcsRUFBRSxLQUFLLENBQUM7QUFDdkIsVUFBVTtBQUNWLFFBQVE7QUFDUixNQUFNO0FBQ04sSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxFQUFFLG1CQUFtQiw2QkFBSSx3QkFBZSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLGFBQWEsR0FBRyxXQUFXLENBQUM7QUFDakksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNOLENBQUM7QUFDRCxJQUFJLGlCQUFpQixFQUFFLENBQUM7QUFDeEIsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRztBQUNMLENBQUMsRUFBRSxHQUFHO0FBQ04sRUFBRSx1QkFBdUIsNkJBQUksY0FBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxRQUFRLGtCQUFrQiw2QkFBSSxVQUFXLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFdBQVcsRUFBRSxTQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUU7QUFDL0MsRUFBRSxNQUFNO0FBQ1IsSUFBSSxJQUFJO0FBQ1IsSUFBSSxPQUFPO0FBQ1gsSUFBSSxVQUFVO0FBQ2QsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUN0QixJQUFJLFNBQVMsRUFBRSxPQUFPO0FBQ3RCLElBQUksT0FBTztBQUNYLElBQUksR0FBRztBQUNQLEVBQUUsRUFBRSxFQUFFLEtBQUs7QUFDWCxFQUFFLE1BQU07QUFDUixJQUFJLEtBQUs7QUFDVCxJQUFJLFVBQVUsRUFBRSxFQUFFLE1BQU07QUFDeEIsRUFBRSxFQUFFLEVBQUUsMENBQWM7QUFDcEIsSUFBSSxJQUFJO0FBQ1IsSUFBSSxPQUFPO0FBQ1gsSUFBSSxRQUFRLEVBQUUsSUFBSSxDQUFDO0FBQ25CLEVBQUUsQ0FBQyxDQUFDO0FBQ0osRUFBRSxNQUFNLHVCQUF1QixFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDNUYsRUFBRSxNQUFNLGFBQWEsRUFBRSxnQ0FBWTtBQUNuQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUc7QUFDZixNQUFNLE1BQU0sbUJBQW1CLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLO0FBQ25ELE1BQU0sTUFBTSxVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPO0FBQzVDLE1BQU0sTUFBTSx3QkFBd0IsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLGtCQUFrQixDQUFDO0FBQ2xLLE1BQU0sTUFBTSxrQkFBa0IsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxRQUFRO0FBQzlGLE1BQU0sR0FBRyxDQUFDLGlCQUFpQixFQUFFO0FBQzdCLFFBQVEsTUFBTSxtQkFBbUIsRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0csUUFBUSxLQUFLLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDO0FBQzFDLE1BQU0sRUFBRSxLQUFLO0FBQ2IsUUFBUSxLQUFLLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDO0FBQy9DLE1BQU07QUFDTixJQUFJLENBQUM7QUFDTCxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsc0JBQXNCO0FBQ3JELEVBQUUsQ0FBQztBQUNILEVBQUUsdUJBQXVCLDhCQUFLLHFCQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7QUFDekUsb0JBQW9CLDZCQUFJLG1CQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsNkJBQUk7QUFDbkgsTUFBTSwwQkFBaUI7QUFDdkIsTUFBTTtBQUNOLFFBQVEsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDL0IsUUFBUSxHQUFHLFVBQVU7QUFDckIsUUFBUSxPQUFPLGtCQUFrQiw2QkFBSTtBQUNyQyxVQUFVLGtCQUFTO0FBQ25CLFVBQVU7QUFDVixZQUFZLEdBQUcsSUFBSTtBQUNuQixZQUFZLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVM7QUFDMUMsWUFBWSxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUNuQyxZQUFZLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxRQUFRO0FBQ3BELGNBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDckMsWUFBWSxDQUFDO0FBQ2IsWUFBWSxRQUFRLEVBQUU7QUFDdEIsVUFBVTtBQUNWLFFBQVE7QUFDUixNQUFNLENBQUM7QUFDUCxNQUFNLENBQUMsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0E7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0E7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0E7QUFDQSxRQUFBO0FBQ0E7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0E7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0E7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0E7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0E7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0E7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0E7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsWUFBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsWUFBQTtBQUNBLFVBQUE7QUFDQTtBQUNBLFVBQUE7QUFDQSxZQUFBO0FBQ0EsY0FBQTtBQUNBLGNBQUE7QUFDQSxZQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxvQkFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsWUFBQTtBQUNBLFlBQUE7QUFDQSxjQUFBO0FBQ0EsY0FBQTtBQUNBLFlBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxZQUFBO0FBQ0EsWUFBQTtBQUNBLGNBQUE7QUFDQSxjQUFBO0FBQ0EsZ0JBQUE7QUFDQSxnQkFBQTtBQUNBLGdCQUFBO0FBQ0EsY0FBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsWUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLHdCQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsMEJBQUE7QUFDQSxZQUFBO0FBQ0EsWUFBQTtBQUNBLGNBQUE7QUFDQSxjQUFBO0FBQ0EsY0FBQTtBQUNBLFlBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsWUFBQTtBQUNBLFlBQUE7QUFDQSxjQUFBO0FBQ0EsY0FBQTtBQUNBLFlBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0E7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxZQUFBO0FBQ0EsWUFBQTtBQUNBLGNBQUE7QUFDQSxZQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0E7QUFDQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxjQUFBO0FBQ0EsY0FBQTtBQUNBLGdCQUFBO0FBQ0EsZ0JBQUE7QUFDQSxjQUFBO0FBQ0EsWUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0E7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsWUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxZQUFBO0FBQ0EsY0FBQTtBQUNBLGNBQUE7QUFDQSxjQUFBO0FBQ0EsZ0JBQUE7QUFDQSxnQkFBQTtBQUNBLGdCQUFBO0FBQ0EsZ0JBQUE7QUFDQSxjQUFBO0FBQ0EsWUFBQTtBQUNBLFlBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLDRCQUFBO0FBQ0EsY0FBQTtBQUNBLGNBQUE7QUFDQSxnQkFBQTtBQUNBLGdCQUFBO0FBQ0EsZ0JBQUE7QUFDQSxnQkFBQTtBQUNBLGdCQUFBO0FBQ0Esa0JBQUE7QUFDQSxrQkFBQTtBQUNBLGtCQUFBO0FBQ0EsZ0JBQUE7QUFDQSxnQkFBQTtBQUNBLGNBQUE7QUFDQSxZQUFBO0FBQ0EsNEJBQUE7QUFDQSxjQUFBO0FBQ0EsY0FBQTtBQUNBLGdCQUFBO0FBQ0EsZ0JBQUE7QUFDQSxnQkFBQTtBQUNBLGNBQUE7QUFDQSxZQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IkM6XFxVdHRhbVxcUHJvamVjdHNcXEdOV2ViU29mdC5VSVxccGFja2FnZXNcXHVpXFxkaXN0XFxjaHVuay01UzJOQ1ZHMy5janMiLCJzb3VyY2VzQ29udGVudCI6W251bGxdfQ==